データアナリストのメモ帳

データアナリストのメモ帳

IT企業で働くデータアナリストのブログ

pageviewapiを使ってWikipediaの記事のPV数をDailyで取得する(トレンド把握に便利!)

pageviewapiというWikipediaの任意の記事のPV数を取得するAPIを使って見たいと思います。
WikipediaのどんなページのPV数でも一気に調べられます。
これは何に便利かというと、知りたい事柄(例えば有名人、企業、地名など)がどの程度世間から関心を持たれているのかを時系列で把握することができます。

この記事では「新型コロナウイルス感染症」を例に、その関心のトレンドを見ていきます。

まず、pageviewapiのインストールと各ライブラリのimportです。

!pip install pageviewapi

import pandas as pd
import pageviewapi
import pageviewapi.period
import datetime
from datetime import timedelta

 
次に、pageviewapiを実際に使ってみましょう。以下のように書きます。
ここで、pageにはWikipediaの正式なページ名(URLを見ればわかる)を指定するようにしましょう。

# 調べたいWikipediaのページを指定
page = "新型コロナウイルス感染症_(2019年)"

# 調べたい日付範囲を指定
start_date = datetime.datetime.now() - timedelta(days=180+1)
end_date = datetime.datetime.now() - timedelta(days=1)

# 日付は8桁の形式になおしておく
start_date = start_date.strftime('%Y%m%d')
end_date = end_date.strftime('%Y%m%d')

# pageviewapi をつってPVを取得する
wiki_dict = pageviewapi.per_article(
    'ja.wikipedia',
    page,
    start_date,
    end_date,
    access='all-access',
    agent='all-agents',
    granularity='daily')

# 格納されたデータの0番目の要素を取り出す
wiki_dict['items'][0]

 
上のコードを実行するとこんな結果が返ってきます。
これは2022年1月25日のWikipedia新型コロナウイルス感染症の日本語の記事が3,303PVあったことを意味しています。

{'access': 'all-access',
 'agent': 'all-agents',
 'article': '新型コロナウイルス感染症_(2019年)',
 'granularity': 'daily',
 'project': 'ja.wikipedia',
 'timestamp': '2022012500',
 'views': 3303}

 
最後に、DailyのPV数を取得する関数を定義して、直近180日間のPV推移をグラフに描いてみましょう。

def get_pv(page, start_date, end_date):
    
    pv_dict = pageviewapi.per_article('ja.wikipedia', page, start_date, end_date,
                                access='all-access', agent='all-agents', granularity='daily')

    blank_list = []
    for i in range(len(pd.DataFrame(pv_dict))):

        date = pd.DataFrame(pv_dict)['items'][i]['timestamp']
        date = date[0:4] + "-" + date[4:6] + "-" + date[6:8]
        pv = pd.DataFrame(pv_dict)['items'][i]['views']
        blank_list.append([date, pv])

    df = pd.DataFrame(blank_list).rename(columns = {0: 'date', 1: 'pv'})
    df['date'] = pd.to_datetime(df['date'])
    
    return df

get_pv(page, start_date, end_date).set_index("date")['pv'].plot()

 
するとこんなグラフになります。

WikipediaのPVを調べる方法

このグラフをどのように解釈するかは読み方次第ですが、使い方によっては有用なデータになると思います。

公式リファレンス: pypi.org