Python で時系列データのグラフ化

Google Search Console の “日付.csv” を Python で読み込み,クリック数,表示回数,CTR,掲載順位の時系列データをグラフ化する。

Python とライブラリのバージョン

Python のバージョン,ライブラリのバージョンは以下のとおり。

  • Python 3.11.1
  • pandas 1.5.3
  • matplotlib 3.6.3

使用したデータ

“日付.csv” には,以下のデータ(抜粋)が記載されている。(『目指せ!電気主任技術者~解説ノート』の 2022年1月1日~12月31日までのデータである。)

日付,クリック数,表示回数,CTR,掲載順位
2022-12-31,105,1767,5.94%,20.03
2022-12-30,124,1819,6.82%,14.95
2022-12-29,131,2013,6.51%,16.56
2022-12-28,190,2513,7.56%,16.15
2022-12-27,321,4430,7.25%,14.09

データ前処理

“日付.csv” の特徴は,日付が新しいものから記載されていること,CTR は単位 “%” があることである。時系列データをグラフ化するため,データを昇順にソートし,CTR の単位 “%” を削除し,数値に変換する処理が必要である。

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('日付.csv', usecols = ['日付','クリック数','表示回数','CTR','掲載順位'], encoding='utf-8')

df = df.sort_values('日付')
df['日付']=pd.to_datetime(df['日付'])

# CTR の単位 "%" を削除し,数値に変換
df['CTR']=df['CTR'].str.replace('%','')
df['CTR']=df['CTR'].astype(float)

グラフ化

クリック数の推移

クリック数の時系列データをグラフ化する。

plt.plot(df['日付'],df['クリック数'],label='clicks')
plt.plot(df['日付'],df['クリック数'].rolling(7).mean(),label='moving average (7 days)')
plt.plot(df['日付'],df['クリック数'].rolling(28).mean(),label='moving average (28 days)')
plt.grid(True)
plt.xlabel('date')
plt.ylabel('clicks')
plt.legend(loc = 'upper left')
plt.savefig("date_clicks.png",dpi=300)
plt.show()

グラフ化したクリック数の推移を以下に示す。青線で時系列データ,赤線で 7 日間移動平均,緑線で 28 日間移動平均線を描画している。df[‘クリック数’].rolling(N).mean() だけで,N 日間の移動平均を計算できるのは,非常に便利だ。

図 クリック数の推移

追記 横軸の年月データフォーマットを変更

時系列データが 1 年の場合,横軸の表示が 2022-01,2022-03 でも読める。しかし,長い期間では,年月が重なって読めなくなる。そこで,年月の表示を以下のように見直す。

ライブラリ読み込み
import matplotlib.dates as mdates
年月の表示フォーマットを変更
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y/%m")) 
変更後の時系列データのグラフ

年月の表示フォーマットを変更した後のクリック数の時系列データのグラフを示す。横軸の表示が 2022-01 から 22/01 に変更できた。

表示回数の推移

表示回数の時系列データをグラフ化する。

plt.plot(df['日付'],df['表示回数'],label='impressions')
plt.plot(df['日付'],df['表示回数'].rolling(7).mean(),label='moving average (7 days)')
plt.plot(df['日付'],df['表示回数'].rolling(28).mean(),label='moving average (28 days)')
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter("%y/%m")) 
plt.grid(True)
plt.xlabel('date')
plt.ylabel('impressions')
plt.legend(loc = 'upper left')
plt.savefig("date_impressions.png",dpi=300)
plt.show()

グラフ化した表示回数の推移を以下に示す。

図 表示回数の推移

CTR の推移

CTR の時系列データをグラフ化する。

plt.plot(df['日付'],df['CTR'],label='impressions')
plt.plot(df['日付'],df['CTR'].rolling(7).mean(),label='moving average (7 days)')
plt.plot(df['日付'],df['CTR'].rolling(28).mean(),label='moving average (28 days)')
plt.grid(True)
plt.xlabel('date')
plt.ylabel('CTR')
plt.legend(loc = 'upper right')
plt.savefig("date_CTR.png",dpi=300)
plt.show()

グラフ化したCTR の推移を以下に示す。データ前処理で,CTR を数値に変換しているため,CTR の推移をグラフ化できる。

図 CTR の推移

掲載順位の推移

掲載順位の時系列データをグラフ化する。

plt.plot(df['日付'],df['掲載順位'],label='impressions')
plt.plot(df['日付'],df['掲載順位'].rolling(7).mean(),label='moving average (7 days)')
plt.plot(df['日付'],df['掲載順位'].rolling(28).mean(),label='moving average (28 days)')
plt.grid(True)
plt.xlabel('date')
plt.ylabel('ranking')
plt.ylim(30,1)
plt.legend(loc = 'lower right')
plt.savefig("date_ranking.png",dpi=300)
plt.show()

グラフ化した掲載順位の推移を以下に示す。掲載順位の縦軸を反転させるため,plt.ylim(30,1) を記載している。

図 掲載順位の推移

更新履歴

  • 2024年1月4日 横軸の年月データフォーマット変更について追加

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です