2021年4月13日火曜日

PythonでWikipediaページのアクセス数を取得する

Wikipediaではページごとのアクセス数を公開している(Analytics Datasets: Pageviews)。1時間ごとにダンプファイルが作成されており、すべての言語のページアクセス数が一つのファイルにまとめられている。このファイルからPythonで日本語Wikipediaページのアクセス数を取得してみる。


環境


WSL2(Ubuntu20.04)。


データのダウンロード


ダンプファイルのダウンロードはAnalytics Datasets: Pageviewsの「Download Pageviews Data」からできる。今回は2021年3月30日9時台(おそらくGMT?)のファイルをダウンロードする。ダウンロードしたファイルは解凍しておく。
 

とりあえずファイルの中身を確認。半角スペース区切りで4列ある。Wikipedia pageviews analysisによると、1列目がドメインコード、2列目がページタイトル、3列目がアクセス数、4列目は今はメンテナンスされていないらしい。


Pythonでページアクセス数を取得する

ダンプファイルのドメインコードは、言語とモバイル用ページなどの種類を表している(Analytics/Data Lake/Traffic/Pageviews)ようで、今回はja(PC用ページ)とja.m(モバイル用ページ)ドメインのページアクセス数を取得する。

まずは、Pythonで読み込んだファイルをPandasのDataFrameにしてjaドメイン、ja.mドメインのページ数を確認。

import pandas as pd

df = pd.read_csv('./pageviews-20210330-090000', header=None, quotechar="'", delim_whitespace=True)

# jaとja.m(モバイル用ページ)ドメインのみにする
df = df[df[df.columns[0]].isin(['ja', 'ja.m'])]

# ドメインごとのページ数
print(df[df.columns[0]].value_counts())
各ドメインのページ数はそれぞれ約24万ページ。

ja.mドメインとjaドメインで同じタイトルのページがあるので、タイトルごとにアクセス数をまとめて、jaドメイン、ja.mドメインをあわせたアクセス数上位20ページを表示。

import pandas as pd

df = pd.read_csv('./pageviews-20210330-090000', header=None, quotechar="'", delim_whitespace=True)

# jaとja.m(モバイル用ページ)ドメインのみにする
df = df[df[df.columns[0]].isin(['ja', 'ja.m'])]

# 4つめの列を削除
df = df[df.columns[1:3]]

# タイトルごとに閲覧数を合算
grouped = df.groupby(df.columns[0]).sum()

# 閲覧数上位20ページ
print(grouped.sort_values(by=[grouped.columns[0]], ascending=False).head(20))

結果は以下の通り。スエズ運河などちょうど話題になっていることや、著名人やアニメのページのアクセス数が多い。それらに混じって競走馬のページがアクセス数上位にある。

ちなみに、特定ページのアクセス数を確認したいだけなら、ページビュー分析を使うのが簡単。


0 件のコメント:

コメントを投稿