投稿

1月, 2023の投稿を表示しています

Pythonで、e-Statの市区町村別の人口、面積、年齢データをCSVに変換する

本日はちょっとPython篇。なぜっていうと、Pythonしか使えないよーって人がいるから。こういうテーブルを加工する系はR(というかdplyr)のほうが断然使いやすいとは思いますが、まあバイリンガルになるのも良いでしょう。 例えば、欲しいのは市区町村別の人口や面積や平均年齢のデータ。で、e-Statに置いてあるのを発見するも( 国勢調査 都道府県・市区町村別の主な結果 都道府県・市区町村別の主な結果 | ファイル | 統計データを探す | 政府統計の総合窓口 )、ファイルがエクセルだわ、列名が自治体コードと都道府県名を連結した文字列だわで、なんとも使いづらい。ちゃちゃっと加工しちゃえばいいんでしょうが、全国のいろんなところで、いろんな人が同じような作業をするのが無駄なので、サンプルコードとそれで出力されたCSVファイルを置いておきます。 やっているのは、 "openpyxl"でエクセルファイルを読み込みデータフレームに変換 必要な行や列を取り出す 正規表現で列名を加工 CSVファイルに書き出し あたりです。 import os import openpyxl import pandas as pd os.chdir(r'(エクセルファイルを置いたパス)') # ワークブックを開いた後、ワークシートを指定する # 読み込んでいるのは、e-Statの国勢調査データ wb = openpyxl.load_workbook('major_results_2020.xlsx') ws = wb['第1面事項_2020年'] df = pd.DataFrame(ws.values) # データが入っているのは9行目以降 # 0, 1, 4, 10, 11, 12列にはそれぞれ # 都道府県、市区町村、人口、面積、平均年齢が入っている df = df.loc[9:, [0, 1, 4, 10, 12]] dic = {0:'都道府県', 1:'市区町村', 4:'人口', 10:'面積', 12:'平均年齢'} df = df.rename(columns=dic) # 列名をつける # アンダースコアの前の部分が、