Python でクエリ分析のためのバブルチャート作成

Google Search Console から取得した “クエリ.csv” を Python で読み込む。そして,CTR を横軸,掲載順位を縦軸として,クリック数,表示回数をバブルの大きさで示したバブルチャートを作成する。なお,バブルのデータラベルとして,クエリを表示する。

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

今回,使用した Python のバージョン,ライブラリのバージョンは以下のとおり。

  • Python 3.7.4
  • matplotlib 3.1.1
  • japanize-matplotlib 1.1.3
  • pandas 1.3.5

データの概要

今回,使用した “クエリ.csv” には,以下のデータ(抜粋)が記載されている。

  • 上位のクエリ(バブルのデータラベルとして使用)
  • クリック数(バブルの大きさとして使用)
  • 表示回数(バブルの大きさとして使用)
  • CTR(グラフの横軸として使用)
  • 掲載順位(グラフの縦軸として使用)

※『目指せ!電気主任技術者~解説ノート』の 2022年1月1日~12月31日までのデータである。

上位のクエリ,クリック数,表示回数,CTR,掲載順位
短絡容量,924,2804,32.95%,1.53
短絡容量とは,630,1936,32.54%,1.73
間欠アーク地絡,238,733,32.47%,2.47
同期リアクタンス,227,718,31.62%,2.41
中性点接地,225,2950,7.63%,6.57

バブルチャートを作成するコード

Python で作成した,バブルチャートを作成するコードを示す。

import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

# csvからのデータ読み込み
df = pd.read_csv('クエリ.csv', usecols = ['上位のクエリ','クリック数','表示回数','CTR','掲載順位'], encoding='utf-8')

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

# クリック数が 30 未満のクエリは足切り
df=(df[df['クリック数'] >= 30])

# クリック数の規格化
df['クリック数']=df['クリック数']/df['クリック数'].max()*1000

# CTR と 掲載順位の関係(大きさ:クリック数)
fig, ax = plt.subplots()
ax.invert_yaxis()
ax.scatter(df['CTR'],df['掲載順位'],s=df['クリック数'])
ax.grid()
ax.set_xlabel('CTR')
ax.set_ylabel('掲載順位')
for i in range(30):
    plt.text(df['CTR'].values[i],df['掲載順位'].values[i],df['上位のクエリ'].values[i])
plt.savefig("query_scat_CTR_RANK_clicks.png",dpi=300)
plt.show()

作成したバブルチャート

上記のコードを実行して作成したクリック数のバブルチャートを下図に示す。

図 クエリの分析(クリック数)

コードの解説

ライブラリのインポート

バブルチャートを作成するため,matplotlib.pyplot,japanize_matplotlib,pandas のライブラリを読み込む。

import matplotlib.pyplot as plt
import japanize_matplotlib
import pandas as pd

CSV 読み込み

Google Search Console から取得した “クエリ.csv” を Python で読み込む。

# csvからのデータ読み込み
df = pd.read_csv('クエリ.csv', usecols = ['上位のクエリ','クリック数','表示回数','CTR','掲載順位'], encoding='utf-8')

データ前処理

CTR は文字列として読み込まれるため,数値に変換する。具体的には,CTR の単位 “%” を削除し,数値に変換する。

また,クリック数が少ないクエリがあると,バブルチャートが見づらくなるため,足切りを行う(今回の場合,30 未満のクエリを足切り)。

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

# クリック数が 30 未満のクエリは足切り
df=(df[df['クリック数'] >= 30])

バブルチャートの作成

以下のコードでバブルチャートを作成する。クリック数の上位 30 のみ,データラベルを付与した。なお,バブルの大きさはクリック数の大きさとしているが,クリック数が最大のクエリのバブルの大きさが 1000 となるようにクリック数を規格化している。

# クリック数の規格化
df['クリック数']=df['クリック数']/df['クリック数'].max()*1000

# CTR と 掲載順位の関係(大きさ:クリック数)
fig, ax = plt.subplots()
ax.invert_yaxis()
ax.scatter(df['CTR'],df['掲載順位'],s=df['クリック数'])
ax.grid()
ax.set_xlabel('CTR')
ax.set_ylabel('掲載順位')
for i in range(30):
    plt.text(df['CTR'].values[i],df['掲載順位'].values[i],df['上位のクエリ'].values[i])
plt.savefig("query_scat_CTR_RANK_clicks.png",dpi=300)
plt.show()

参考文献

更新履歴

  • 2023年1月7日 新規作成
  • 2023年1月8日 コードの解説を追加
  • 2024年1月3日 説明を加除修正

コメントを残す

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