ウェッブサイトから必要な情報を抜き出す、スクレイピングから棒グラフの作成までをやってみました。
簡単かと思えましたが、時間かかってしまったんで今後のためにメモ書いておきます。

この記事はこんな人におすすめ。
- スクレイピングの手順を知りたい。
- スクレイピングしたDataFrameからグラフを作りたい。
ではまずスクレイピングから見ていきましょう。
スクレイピングの手順
スクレイピングについて書いてある本やサイトを見てみると「BeautifulSoup」や「urllib」を使っているのですが、なぜか今回は「Pandas」だけでスクレイピングできてしまいました。
国土交通省のサイトから、データテーブルを抜き出す作業をしたのですが、以下の記述でDataFrameとして抜き出しました。
import pandas as pd url = 'https://www.mlit.go.jp/barrierfree/transport-bf/BFI/shihyo/all_station.html' dfs = pd.read_html(url)
スクレイピングをするとそのページにあるすべての表を取得しますが、目的の表がどこにあるのか分かりにくい。
そのため取得した表がいくつあるのかをlen()関数を使って数えます。
print(len(dfs)) 10
DataFrameの数は10個になります。
awefaeこのうちの何番目が目的のDFなのかは、以下の記述に数字を順番に入れて確認していきます。
display(dfs[8])
目的の表は8番目、ということが分かりました。
以下の通りですね。
ではこの表をCSVファイルにして保存しましょう。
記述は以下になります。
dfs[8].to_csv('barrier1.csv')
「barrier1_csv」という名前で、CSVファイルとして保存しました。
CSVファイルを確認する
ではさっそくCSVファイルとして保存されているか確認しましょう。
df_barrier1=pd.read_csv("barrier1.csv", header=1, index_col=0) display(df_barrier1)
上記の記述によって、以下の表を呼び出し、CSVファイルとして保存されているかどうかが確認できました。
ちなみに、グラフにどんなコラムがあるのかを確認する方法ですが「.columns」で確認できます。
以下の記述ですね。
df_barrier1.columns
実行すると、このDFにあるすべてのコラムが表示されます。
Index(['都道府県', '平均的 利用者数 5,000人/日 以上の 施設数', '段差の 解消施設数', '割合 (%)', '視覚障害者 誘導用 ブロック の敷設施設数', '割合 (%).1', 'トイレの 設置施設数', '身体障害者用 トイレの 設置施設数','割合 (%).2', '移動円滑化 基準適合 施設数', '割合 (%).3'], dtype='object')
さらに、簡単な統計的的な分析をする場合は「.discribe()」関数を使います。
記述は以下の通り。
df_barrier1.describe()
実行すると「平均」「標準偏差」などが表示されますので、全体像を簡単につかむだけなら十分ですね。
ではここから棒グラフを書いてみましょう。
棒グラフを書いてみる
グラフを描く際に気になるのが、インデックスです。
DFを見てみると、左端に番号が振ってありますね。
これがインデックスなんですが、グラフを描く際にこれが邪魔になるので都道府県をインデックスに置き換えます。
記述は以下の通り。
df_barrier2=df_barrier1.set_index('都道府県') display(df_barrier2)
DFの名前を「df_barrier1」から「df_barrier2」にリネームして保存します。
DFを確認すると、以下になります。
ではこのDFをもとに、棒グラフを作っていきましょう。
実行コードは以下の通り。
import matplotlib.pyplot as plt #matplotlib.pyplotをインポート from matplotlib import rcParams #rcParamsをインポートし日本語でグラフが見れるようにする plt.rcParams["font.family"] = "MS Gothic" #日本語フォントをMS Gothicに設定 plt.figure(figsize=(20, 10)) #フィギュアサイズの調整 plt.xticks(rotation=90) #x軸の表記の修正 x=df_barrier2.index y=df_barrier2['割合 (%)'].values plt.xlabel('都道府県', fontsize=18) plt.ylabel('段差解消の割合', fontsize=18) plt.title('段差解消達成率', fontsize=18) plt.bar(x,y) plt.grid() plt.show()
実行することで、以下の棒グラフを書くことができました。
コードを書く際に気を付ける点は、まず「matplotlib」をインポートする際に「import matplotlib.pyplot as plt」と表記すること。
これを「import matplotlib as plt」とすると、フィギュアサイズの調整や、軸の調整時にエラーが出ます。
次に「rcParams」をインポートし、日本語フォントを事前に設定することで、豆腐化を防ぐことができます。


コメント