はじめに
経済活動を行う際、多かれ少なかれ物流が発生するので、物を運ぶための燃料であるガソリンが必要となります。
何かしらの売上予測を行う際、物流を考慮することで予測精度を向上させることはできないか。
外部データとして「ガソリン小売価格」を利用できないか。
「ガソリン小売価格」をPythonで取得する方法をまとめてみました。
「ガソリン小売価格」の取得方法
「ガソリン小売価格」の取得方法は2種類見つけました。
それぞれの特徴をまとめてみました。
政府統計e-statの小売価格調査 | 資源エネルギー庁の石油製品価格調査 | |
調査地域 | ・都道府県庁所在市 ・人口15万以上の市 |
・都道府県 ・八地方区分 |
期間単位 | 1ヶ月 | 2週間 |
取得方法 | ・ダウンロード ・API |
ダウンロード |
その他 | 地域や取得期間を指定して取得することができる | ハイオク、軽油、灯油の小売価格を取得できる |
APIを利用できる政府統計e-statの小売価格調査からガソリン小売価格を取得する方法をまとめます。
政府統計e-statからAPIでガソリン小売価格を取得する
APIで取得する場合は、ユーザ登録が必要です。
ソーシャルログインに対応しているので、GoogleやFacebookのアカウントでユーザ登録することができます。ユーザ登録後に「マイページ」の「API機能(アプリケーションID発行)」から「アプリケーションID」を取得します。
ガソリン小売価格は、「小売物価統計調査」の調査項目に含まれています。
e-statのトップページにあるキーワード検索で「小売物価」を検索します。
検索結果として、「小売物価統計調査」と「全国物価統計調査」が表示されます。
「小売物価統計調査(動向編)」の「データベース」をクリックします。
月ごとのデータを取得したいので「月次」を選択します。
「表示・ダウンロード」で「API」を選択します。
APIのリクエストURLが表示されます。
表示されたリクエストURLの説明
政府統計の総合窓口(e-Stat)のAPI 仕様 3.0版 | 政府統計の総合窓口(e-Stat)−API機能から転載
パラメータ名 | 意味 | 設定内容・設定値 |
app | ファイル形式 | 取得するファイル形式を指定する ・getSimpleStatsData:CSV形式 ・json/getStatsData:JSON形式 ・getStatsData:XML形式 |
appID | アプリケーションID | 取得したアプリケーションIDを指定する |
lang | 言語 | 取得するデータの言語を指定する ・J:日本語 ・E:英語 |
statsDataID | 統計表ID | 統計表情報取得で得られた統計表ID |
metaGetFlg | メタ情報有無 | 統計データと一緒にメタ情報を取得するか ・Y:取得する ・N:取得しない |
cntGetFlg | 件数取得フラグ | 指定した場合、件数のみ取得できる metaGetFlg=Yの場合は、メタ情報も同時に返却される ・Y:件数のみ取得する。統計データは取得しない ・N:件数及び統計データを取得する |
explanationGetFlg | 解説情報有無 | 計表及び、提供統計、提供分類、各事項の解説を取得するかいなかを指定する ・Y:取得する ・N:取得しない |
annotationGetFlg | 注釈情報有無 | 数値データの注釈を取得するかを指定する ・Y:取得する ・N:取得しない |
sectionHeaderFlg | セクションヘッダフラグ | CSV形式のデータ呼び出しの場合に有効なパラメータ ・1:セクションヘッダを出力する ・2:セクションヘッダを取得しない |
replaceSpChars | 特殊文字の置換 | 特殊文字を置換するかいなかを設定する ・0:置換しない ・1:0に置換する ・2:NULL(長さ0の文字列、空文字)に置換する ・3:NA(文字列)に置換する |
リクエストURLをコピーし、「appId=」に取得した「アプリケーションID」を追加します。
「appId=」を追加したリクエストURLにWebブラウザでアクセスした結果は以下になります。
ガソリン小売価格以外の価格も取得します。
ガソリン小売価格のみを取得してみます。
「表示・ダウンロード」のページに戻り「DB」を選択すると、以下のページが表示されます。
「銘柄」から「7301 ガソリン」を選択し、「再表示」をクリックします。
「7301 ガソリン」のみが表示されます。
「API」をクリックします。
「APIリクエストURL」が表示されるので、ファイル形式は「CSV形式」にチェックを入れ、ダウンロード範囲は「ページ上部の選択項目(表章項目 等)」にチェックを入れます。
リクエストURLに「cdCat02=07301」が追加されて、「7301 ガソリン」のみのデータを取得することができるようになります。
リクエストURLをコピーし、「appId=」に取得した「アプリケーションID」を追加します。
「appId=」を追加したリクエストURLにWebブラウザでアクセスした結果は以下になります。
「ガソリン」のデータのみを取得することができます。
下記の情報は、取得したデータがどのようなデータなのかを説明する情報です。
不要な場合は、「sectionHeaderFlg=2」とすることで取得しないようにすることができます。
地域を絞ってガソリン小売価格を取得することが可能です。
市区町村名には、5桁の「標準地域コード」が割り振らています。
「標準地域コード」の確認方法は、「統計関連情報」→「市区町村名・コード」→「市区町村名を探す」をクリックします。
「市区町村名」に名前を入力し、「検索」をクリックすることで標準地域コードを検索できます。
神奈川県の横浜市(標準地域コード:14100)のガソリン価格を取得する場合は、リクエストURLに「cdArea=14100」を追加します。
取得した結果は、以下となります。
都道府県単位で取得したい場合、リクエストURLに「cdAreaFrom」と「cdAreaTo」を追加することで標準地域コードを範囲指定することができます。標準地域コードの上2桁が都道府県を示しています。標準地域コードが「14100」は、上2桁が「14」なので神奈川県となります。
東京都で取得したい場合は、リクエストURLに「cdAreaFrom=13000&cdAreaTo=13999」を追加します。
期間を指定して取得したい場合、リクエストURLに「cdTimeFrom」と「cdTimeTo」を追加することで期間を指定することができます。
2019年1月から2021年12月の期間を指定して取得したい場合は、リクエストURLに「cdTimeFrom=20190101&cdTimeTo=202101231」を追加します。
Pythonでガソリン小売価格を取得する
Pythonの「requests」を使用して、ガソリン小売価格を取得します。
Pythonのコードは以下となります。ガソリン小売価格を記載した「07301.csv」が生成されます。
import requests
import os
# POSTするデータ
appId = 'XXXXXXXXXX' # アプリケーションID
statsDataId = '0003421913' # 統計表ID
sectionHeaderFlg = '2' # ヘッダ情報の有無(1:有、2:無)
lang = 'J' # 言語(デフォルト:J)
metaGetFlg = 'Y' # メタ情報有無(デフォルト:Y)
cntGetFlg = 'N' # 件数取得フラグ(デフォルト:N)
explanationGetFlg = 'Y' # 解説情報有無(デフォルト:Y)
annotationGetFlg = 'N' # 注釈情報有無(デフォルト:N)
replaceSpChars = '0' # 特殊文字の置換(デフォルト:0)
cdArea = '14100' # 標準地域コード (14100:横浜市)
cdCat02 = '07301' # 銘柄 (7301:ガソリン)
# CSV形式のリクエストURLを作成する
url = 'http://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData?'
url += 'appId={:s}&'.format(appId)
url += 'statsDataId={:s}&'.format(statsDataId)
url += 'sectionHeaderFlg={:s}&'.format(sectionHeaderFlg)
url += 'lang={:s}&'.format(lang)
url += 'metaGetFlg={:s}&'.format(metaGetFlg)
url += 'cntGetFlg={:s}&'.format(cntGetFlg)
url += 'explanationGetFlg={:s}&'.format(explanationGetFlg)
url += 'annotationGetFlg={:s}&'.format(annotationGetFlg)
url += 'replaceSpChars={:s}&'.format(replaceSpChars)
url += 'cdArea={:s}&'.format(cdArea)
url += 'cdCat02={:s}&'.format(cdCat02)
# CSV形式でデータを取得する
data = requests.get(url, stream=True)
# CSVファイルとして保存する
path = './'
file = open(os.path.join(path, os.path.basename('{:s}.csv'.format(cdCat02))), 'wb')
for chunk in data.iter_content(chunk_size=1024):
file.write(chunk)
file.close()
コメント