折れ線グラフを使ってすべての個体(従業員)のデータを可視化するスパゲッティプロットの例です。すべての個体のデータをプロットすると線が重なってしまいますが、色の透過度を工夫することで全体的な傾向や外れ値・アノマリーを発見することができます。
人事データ可視化の例

人事データ可視化の狙い
- 従業員別の時間外の推移を確認し、労務管理上の問題を確認する。
人事データ可視化アプローチ
利用するグラフ
- 折れ線グラフ: 量的変数の経時的な変化を観察する。
アプローチ
- 月別に独立した形で時間外が記録される横持ちデータから、縦持ちデータへ変換する。
- 各従業員の時間外時間数の推移を折れ線グラフを用いて可視化する。
- カテゴリカル変数である部の情報で線の色を変えることで、組織別の傾向を把握する。
- 各線の動きから季節変動や周期性、上昇・下降トレンドがないか確認する。
- 全体の動きと比較し、特異な動き方をしているデータはないか確認する。
グラフの書き方
- Pythonのseaborn.lineplotを使った可視化例。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import japanize_matplotlib
import seaborn as sns
sns.set_theme(style='darkgrid')
japanize_matplotlib.japanize()
# データの読み込み
df_ot = pd.read_csv('./HR-toydata/HRトイデータ_月別時間外.csv')
df_hr = pd.read_csv('./HR-toydata/HRトイデータ_人事情報.csv')
# 縦持ちへ変換
df_long = pd.DataFrame(df_ot.set_index(['従業員ID','年度']).stack()).reset_index()
df_long.columns = ['従業員ID','年度','月','時間外時間数']
# 日付型の年月を追加
df_long['月'] = df_long['月'].str.replace('月', '').astype(int)
df_long['年'] = df_long['年度'].mask(df_long['月'] <= 3, df_long['年度'] + 1)
df_long['年月'] = pd.to_datetime(df_long['年'].astype(str) + '-' + df_long['月'].astype(str))
# 人事情報との結合
df = pd.merge(df_long, df_hr, on='従業員ID')
# グラフ
fig, ax = plt.subplots(figsize=(9,6))
sns.lineplot(data=df, x='年月', y='時間外時間数', hue='所属', units='従業員ID', alpha=.8, estimator=None, ax=ax)
ax.set_title('従業員別 時間外時間数の推移')
ax.legend(loc='upper left', bbox_to_anchor=(1, 1), title='所属')
