【Python】クリック数の箱ひげ図(月毎)を描画
Google Search Console よりダウンロードした “日付.csv” を Python で読み込み,クリック数の月毎の箱ひげ図を作成します。
以前,クリック数の時系列データのグラフ化について紹介しましたが,箱ひげ図 (boxplot) は,データの分布をカテゴリー間(今回は月毎)で比較するときに便利です。
箱 (box) はデータセットの四分位数を示し,ひげ (whisker) は「外れ値」(四分位範囲から 1.5 倍の長さ以上,四分位範囲から離れた点)と判断された点を除く,残りの分布を示します。
日付.csv
Google Search Console よりダウンロードした “日付.csv” には,以下のフォーマットでデータが記載されています。
今回は日付,クリック数のみを使用します。
日付,クリック数,表示回数,CTR,掲載順位
2023-12-31,260,5465,4.76%,15.6
2023-12-30,259,5987,4.33%,15.23
2023-12-29,309,6317,4.89%,15.31
2023-12-28,283,7173,3.95%,17.09
2023-12-27,428,10861,3.94%,16.57
Python コード
ライブラリのインポート
クリック数の箱ひげ図(月毎)を描画するのに必要なライブラリをインポートします。
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd
import seaborn as sns
CSV データ読み込み
Python の pandas を用いて,csv を読み込みます。日付の列は,datetime として扱えるように変換し,月の列を追加します。
CSV_PATH = './csv/日付.csv'
USECOLS = ['日付', 'クリック数', '表示回数', 'CTR', '掲載順位']
df = pd.read_csv(CSV_PATH, usecols=USECOLS, encoding='utf-8')
# 日付をdatetimeに変換
df['日付'] = pd.to_datetime(df['日付'])
# 月の列を追加
df['month'] = df['日付'].dt.month
箱ひげ図作成
Python の seaborn を用いて,箱ひげ図を描きます。以下のコードでは,x 軸は月 (month),y 軸はクリック数にしています。
# クリック数の箱ひげ図を描画
sns.catplot(data=df, x="month", y="クリック数", kind='box')
# グラフを表示
plt.show()
コードを実行すると,箱ひげ図を描画できます。箱ひげ図を見ることで,月毎のクリック数の動向を把握することができます。
平均クリック数が多いのは 5 月,箱が大きいのも 5 月,ひげが長いのも 5 月ということがわかります。
10 月と 11 月には外れ値が見られることもわかります。
Python コード全体
これまで説明した Python コードを一連で記載すると以下のとおりです。(Python コードを掲載するにあたり,Copilot にリファクタリングしてもらいました。)
import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd
import seaborn as sns
# CSVからデータ読み込み
CSV_PATH = './csv/日付.csv'
USECOLS = ['日付', 'クリック数', '表示回数', 'CTR', '掲載順位']
df = pd.read_csv(CSV_PATH, usecols=USECOLS, encoding='utf-8')
# 日付をdatetimeに変換
df['日付'] = pd.to_datetime(df['日付'])
# 月の列を追加
df['month'] = df['日付'].dt.month
# クリック数の箱ひげ図を描画
sns.catplot(data=df, x="month", y="クリック数", kind='box')
# グラフを表示
plt.show()
複数年の箱ひげ図
これまで示してきた Python コードは,複数年のデータの場合,複数年の月のデータが集約されてしまいます。
そこで,日付から年月のみを取り出し,箱ひげ図にしてみます。
以下のコードで,日付より文字列で年月を取り出します。例えば,日付が2024年10月20日の場合,202410 という文字列となります。
df['年月'] = df['日付'].dt.strftime("%Y%m")
文字列の年月を横軸にした箱ひげ図を描きました。複数年にわたる月ごとのクリック数の変化をとらえることができるようになりました。
上記の箱ひげ図では,xticks を使って,3 か月間隔にしています。(numpy を使って,48 か月を 3 か月間隔で表示するようにしています。)
plt.xticks(np.arange(0, 48 + 1, 3))
更新履歴
- 2024年10月20日 新規作成