オープンデータを読み込んで、グラフで表示する
オープンデータとはネット上で公的機関や企業などが公開している自由に使ってもいいデータのことで、基本的に著作権などのライセンス制限がない。e-stat(政府統計の相互窓口)からcsvファイルをダウンロード
「https://www.e-stat.go.jp」
キーワード検索に「人口統計 都道府県別」と入力して検索。
そうするとこのような画面に移動します。
右側のDBボタンを押すと下記のような画面に移動します。
右上のダウンロードのボタンを押してファイルをダウンロードすると下記のようなcsv形式のファイルがダウンロードできました。
ファイルの中の内容はこんな感じです。
データの件数と項目名を表示してみましょう
解説
import pandas as pd | 表データーを読み込むpandasライブラリをimportします。省略してpdとします。 |
df = pd.read_csv(“FEH_00200502_220109220659.csv”, index_col=”地域”,encoding=”shift_jis”) | read_csvでファイルを読み込みます。グラフで下のメモリを地域にするため「地域」の列をインデックスとして読み込みます。 |
print(len(df)) | “行にあるデータ件数を取得します。 |
print(df.columns.values) | 列のデータ件数を取得します。 |
48行にわたりデータがあり、また52列のデータが含まれていることがわかりました。
データをグラフで表示してみましょう
実行すると下記のようにエラー表示が出てしまいます。
いちばん下の表示には「no numeric data to plot」と出ています。 これは、プロットする数値データがないという意味になります。
え?数値データは入ってるじゃん?と思いますが、数値データそのものは入ってますが、「カンマ」がついています。 このためにエラーになってしまうのです。
オープンデータはデーターの作者によっていろいろな書き方で保存されます。 今回は「123,456」とカンマ付きで書かれています。人間にはこのほうが読みやすいですが、コンピューターで読むとエラーになってしまうようです。
その時はカンマを「空の文字」に置き換えて「123456」という数値に変換する必要が出てきます。
それでは早速、やってみましょう。
解説
import pandas as pd | 表データーを読み込むpandasライブラリをimportします。省略してpdとします。 |
import matplotlib.pyplot as plt | グラフを表示させるmatplotlibをimportします。matplotlib.pyplotとするとpltという省略名が使えます。 |
import japanize_matplotlib | 日本語で表示させるため、また文字化けしないようjapanize_matplotlibをimportします。 |
df = pd.read_csv(“FEH_00200502_220109220659.csv”, index_col=”地域”,encoding=”shift_jis”) | read_csvでファイルを読み込みます。グラフで下のメモリを地域にするため「地域」の列をインデックスとして読み込みます。 |
df[“E1101_幼稚園数【園】”] = pd.to_numeric(df[“E1101_幼稚園数【園】”].str.replace(“,”,””)) | 数値データのカンマを削除して数値に変換する |
print(df[“E1101_幼稚園数【園】”]) | 指定した列のデータを表示します。 |
df[“E1101_幼稚園数【園】”].plot.bar() | 棒グラフを表示します。 |
plt.show() | 表示します。 |
今度はエラー表示もなく、グラフが表示されました。
でも、、、「グラフの画面が小さくて都道府県の文字が見にくい」、「全国の値が飛びぬけていて、都道府県の値が見にくい」と思いません? 今度はこれらを改善してみましょう。
ある行のデータを削除して、画面サイズを指定する
解説
df = df.drop(“全国”, axis=0) | 指定した行を削除するには、df.drop(“行番号”,axis=0)。尚、指定した列を削除するには、df.drop(“列名”,axis=1) |
df[“E1101_幼稚園数【園】”].plot.bar(figsize=(11,7)) | figsize=(幅インチ,高インチ)で画面サイズを指定します。 |
全国のデータが消え、画面サイズの幅と高さが変わりました。
今度は人口の多い順に並べ替えてみましょう。
大きい順に並べ替えるには、df.sort_values(“列名”,ascending=False)で指定します。
ちなみに、小さい順に並べ替えるには、df.sort_values(“列名”)で指定します。
*尚、ここではバージョン「Python 3.10.1」を使用しています。
この本から引用、参考に学び、完成させることができました。しかし、ここではプログラミング初心者の私が詳しく解説することは、おこがましく、難しく出来ません(ToT)
その点、この本では丁寧な解説が載っていますので、解説とともにコードを書き、完成させればより深く学ぶことができます(^.^)、実際、初心者の私でもわかりやすかったです。身に付け消えないスキルが2,000円程ならコスパよく、買っておいてよかったと満足してます。