Pythonクローリング&スクレイピング[増補改訂版] ―データ収集・解析のための実践開発ガイドー その12
第5章 クローリング・スクレイピングの実践とデータの活用
今回は時系列データを扱います。
時系列データ
為替
為替レートのデータをダウンロードします。
国債金利
有効求人倍率
一般職業紹介状況(職業安定業務統計) 一般職業紹介状況 7月分 | ファイル | 統計データを探す | 政府統計の総合窓口
データをプロット
matplotlib を使って時系列データをプロットします。名前の通り MATLAB のような使い方ができるようです。
日本語に対応するためにフォントをインストールします。
sudo apt install -y fonts-migmix
matplotlib でエラーが出たので次のサイトを参考にしました。
matplotlib にフォントが無いと怒られる場合の対処 - Qiita
from datetime import datetime import pandas as pd import matplotlib matplotlib.use('Agg') # デスクトップ環境が不要 (Anti-Grain Geometry engine) matplotlib.rcParams['font.family'] = 'MigMix 1P' import matplotlib.pyplot as plt def main(): # 為替データの読み込み df_exchange = pd.read_csv( 'csv/exchange.csv', encoding='cp932', header=1, names=['date', 'USD', 'rate'], index_col=0, parse_dates=True, ) # 金利データの読み込み df_jgbcm = pd.read_csv( 'csv/jgbcm_all.csv', encoding='cp932', header=1, index_col=0, parse_dates=True, date_parser=parse_japanese_data, na_values=['-'], ) # 有効求人倍率の読み込み df_jobs = pd.read_excel( 'xls/第3表.xls', skiprows=3, skipfooter=3, usecols='W,Y:AJ', index_col=0 ) df_jobs.columns = [c.split('.')[0] for c in df_jobs.columns] s_jobs = df_jobs.stack() s_jobs.index = [parse_year_and_month(y, m) for y, m in s_jobs.index] min_date = datetime(1973, 1, 1) max_date = datetime.now() # 為替データをプロット plt.subplot(3, 1, 1) plt.plot(df_exchange.index, df_exchange.USD, label='ドル・円') plt.xlim(min_date, max_date) plt.ylim(50, 250) plt.legend(loc='best') # 国債金利データをプロット plt.subplot(3, 1, 2) plt.plot(df_jgbcm.index, df_jgbcm['1年'], label='1年国債金利') plt.plot(df_jgbcm.index, df_jgbcm['5年'], label='5年国債金利') plt.plot(df_jgbcm.index, df_jgbcm['10年'], label='10年国債金利') plt.xlim(min_date, max_date) plt.legend(loc='best') # 有効求人倍率データをプロット plt.subplot(3, 1, 3) plt.plot(s_jobs.index, s_jobs, label='有効求人倍率(季節調整値)') plt.xlim(min_date, max_date) plt.ylim(0.0, 2.0) plt.axhline(y=1, color='gray') plt.legend(loc='best') plt.savefig('img/histrorical_data.png', dpi=300) def parse_japanese_data(s:str) -> datetime: """ 和歴をdatetimeオブジェクトに変換 """ base_years = {'S': 1925, 'H': 1988, 'R': 2018} era = s[0] year, month, day = s[1:].split('.') year = base_years[era] + int(year) return datetime(year, int(month), int(day)) def parse_year_and_month(year: str, month: str) -> datetime: """ 年月の組をdatatimeオブジェクトに変換 """ year = int(year[:-1]) month = int(month[:-1]) year += (1900 if year >= 63 else 2000) return datetime(year, month, 1) if __name__ == '__main__': main()
ドル円は、大体100円付近をウロチョロしていることが分かりますね。日本はデフレが続いているので国債金利も下がっていることが分かります。有効求人倍率は改善傾向にあることが分かります。まあ、人手不足ということですね。
本
Pythonクローリング&スクレイピング[増補改訂版] -データ収集・解析のための実践開発ガイド
- 作者: 加藤耕太
- 出版社/メーカー: 技術評論社
- 発売日: 2019/08/10
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
感想
今回はクローリングではなく、matplotlib の使い方を学びました。