# Right data visualization for employee progression data: Sankey, mosaic or parallel sets?

The data set is employee progression data from date of joining through the years getting promoted from one grade to the next at different points depending on tenure in that grade, employee performance (and implicitly company growth rate in adding junior employees).

Stories the data could tell are - the minimum tenure empoyees have to serve in each grade before moving to next grade - proportion who make it in the first cycle after minimum tenure
- proportion who take a lot more time to get promoted - any such delays causing higher attrition among such population (hoping historical employee data will be provided)

As a newbie, I considered simple graphs (such as bar graphs) which can bring out these stories in a series of graphs. They do to an extent but I came across few other non-standard visualizations and am wondering if there is a more appropriate viz for this data and the narrative.

1. Mosaic plots do show the proportions well within a grade but it is unclear how that can be translated to show a group doing well at first progression but falling behind in the next cycle
2. Parallel sets seem promising in visualizing the data but not sure if the stories will jump-out
3. I like Sankey diagrams best. I hear that it is apt for flowing data (such as liquids in a factory) but I am wondering all the stories will nicely jump out - such as a group of employees who join and move together initially but later diverge progressing at different paces or proportion who get promoted in first cycle, proportion in second cycle and proportion still at same level.

I did a hand drawing of Sankey (attached) and I like it. I think something like this could answer all questions from audience (considering this a few thousand data line items, the audience will look for insights that they already don't know from anecdotal evidence)

Between these three, for this data, if one visualization can beat the other two, which would that be. From the data visualization catalog site, I couldn't find any other that even comes close (except of course if a series of graphs / animation can be used).

I do know that the set will have data on 500-1000 employees, 15 years of progression (dates) and 9 levels.

• Sample data or extra info about the data would be helpful in getting the best answers. Characteristics like the number of employees, number of time periods, and number of levels would influence the suitability of different visualizations.
– xan
Aug 5, 2016 at 20:28
• Thanks for helping me understand which variables help in informing suitabikity. I am waiting for access to the data. I do know that the set will have data on 500-1000 employees , 15 years of progression (dates) and 9 levels. Aug 6, 2016 at 2:52

I tried a Sankey-style chart with simulated data. It's really a line chart with a translucent line for each of 1000 employees, applying some incremental offsets to reduce overlap.

There is some appeal to seeing all the data, but I don't think it will be useful at answering your questions. It could, though, answer questions like, how did those Level 9 employees get there?

And you might be able to recognize patterns in different populations.

To answer your more analytical questions, I would go with simple charts targeted toward each question (or related set of questions). Here's a chart showing the average tenure at each level, with the shaded region showing some bounds of interest.

A nice feature of this chart (not shown) is that you can reasonably overlay a small number of these for comparing different groups. For instance, you could have a line for each employee rating group.

Script

The above mock-ups were made in JMP using its scripting language, JSL. Included in case it's a useful template even if you don't have JMP.

Here is the script to create the simulated data. The initial table has one row per employee and one column for each time period.

ne = 1000;
nt = 15;
nl = 9;

dt1 = new table("emp",
New Column("ID", "Nominal", Formula(Row())),
New Column("probs", "Expression", Formula(J(nl-1, 1, Random Uniform(0.05, 0.4))|/0)),
New Column("t0", Formula(Random Category(.5, 1, .3, 2, .1, 3, .1, 4, 0.05, 5, 0.025, 6))),
);
for (i = 1, i <= nt, i++,
s = "\[dt1 << New Column("tAAA", Formula(:tBBB + if (random uniform() < probs[Row()][:tBBB], 1, 0)));]\";
substitute into(s, "AAA", char(i), "BBB", char(i-1));
Eval(parse(s));
);


Next, convert the table to tall form, stacking all the time periods into one column.

dt2 = dt1 << Stack(
columns(:t0,:t1,:t2,:t3,:t4,:t5,:t6,:t7,:t8,:t9,:t10,:t11,:t12,:t13,:t14,:t15),
Source Label Column( "tc" ),
Stacked Data Column( "Level" )
);
dt2 << New Column("Time", Formula(Num(Substr(tc, 2))));
dt2 << New Column("Row", Formula( Row()));
dt2 << New Column("rank", Formula( Col Rank( :Row, :Level, :Time )));
dt2 << New Column("levelj", Formula( :level+:rank/colmax(:rank)));


The formula columns add an offset to the level column. Here's the graph itself.

Graph Builder( Size( 692, 428 ), Show Control Panel( 0 ), Show Legend( 0 ),
Variables( X( :levelj ), Y( :Time ), Overlay( :ID ) ),
Elements( Line( X, Y, Legend( 9 ), Row order( 1 ) ) )
);


I removed the color and transparency customizations for brevity.

• Thanks xan for taking this up and actually simulating data and plotting it. I really appreciate it. I do like the looks of your first and second charts. Not sure if I fully understand it though. To me, it does seem to answer the proportion getting promoted reasonably well that a line graph doesn't answer fully (like what proportion are still at the level when part of their peer group has got promoted). As you can imagine, the average promotion tenure is short , ~ 2 years, with regular promotion cycles. Would it be possible to share the template and method of your simulated data and plot Aug 7, 2016 at 17:36
• I was thinking the first graph is losing the amount of time spent at each position. You can get an idea of how the Level 3 people split in time period 4, for instance, but you can't tell how long that had been at Level 3, unless you select them and follow the individual lines. The broader point is that you will probably want different charts for different messages.
– xan
Aug 7, 2016 at 18:39