plot.scatter 散布図の作成

散布図は、縦軸と横軸に2種類の量や大きさなどを対応させ、データを点でプロットしたグラフです。
2種類の値の関係を確認したいときに利用します。

散布図の描画は、DataFrameであるdfに対し以下のように実行します。

df.plot.scatter(x=x軸に使う列の列名, y=y軸に使う列の列名, オプション)

本問で使用するオプションは、xyです。
引数xyは、必ず指定する必要があります。

演習

%matplotlib inline
import pandas as pd
from datetime import datetime

df = pd.read_csv('dataset/attendances.csv', parse_dates=["Date"])

新しく列DayOfWeekを作成して曜日(df.Date.dt.weekday)を代入します。0は月曜日に当たります。

df["DayOfWeek"] = df.Date.dt.weekday
df[:6]

Out[2]:

DateOfficeTeleDayOfWeek
02019-06-0319210
12019-06-042381
22019-06-0511292
32019-06-068323
42019-06-076334
52019-06-108320

x軸を列DayOfWeekに、y軸を列Officeeにして散布図を描画します。 木曜日(3.0)や金曜日(4.0)は、出社している人が少ないのがわかります。 また、土曜日(5.0)と日曜日(6.0)がないことから、土日のデータは含まれていないことがわかります。In [3]:

df.plot.scatter(x="DayOfWeek", y="Office");

補足

今回描画した散布図を見ると、列DayOfWeekの値が0から4(月曜から金曜の平日)で5と6(土日)がないことから、土日のデータが存在しないことがわかります。
下記のように実際に確認すると、列Dateには2019-06-082019-06-09のような土日のデータがありません。

df[:6]
DateOfficeTeleDayOfWeek
02019-06-0319210
12019-06-042381
22019-06-0511292
32019-06-068323
42019-06-076334
52019-06-108320

このように欠けている日付がある場合、グラフ上で意図しない位置にデータがプロットされることがあるので注意が必要です。

たとえば、下記のように列Dateの要素の型を文字列として散布図を描画すると、横軸の2019-06-07の隣は2019-06-10になります。
これは、横軸に列Dateの値を順番に表示しているからです。

df = pd.read_csv('dataset/attendances.csv')
df[:6].plot.scatter(x="Date", y="Office", rot=20)
https://images.pyq.jp/repo/prod/pydata_plot_graph_v2/plot_graph3.jpg

一方、本問の列Dateは日付時刻型になっているので、下記のように散布図を書くと横軸は時系列に沿って描画されます。
すなわち、横軸の2019-06-072019-06-10の間に(データはありませんが)2019-06-082019-06-09のスペースが空きます。

df = pd.read_csv('dataset/attendances.csv', parse_dates=["Date"])
df[:6].plot.scatter(x="Date", y="Office", rot=20)
https://images.pyq.jp/repo/prod/pydata_plot_graph_v2/plot_graph4.jpg

このように、型によってグラフ上でプロットされる位置が変わることがあります。グラフ描画時には、描画した結果を確認し、意図しない位置にデータがプロットされていないか確認しましょう。

コメント

タイトルとURLをコピーしました