e-Statのデータを分析
今回の目標:都道府県の人口データから平均よりも多い地域を抽出する
実行環境
Google Colaboratory
使うデータ
e-Statからダウンロードした
『国勢調査 令和2年国勢調査 人口等基本集計 (主な内容:男女・年齢・配偶関係,世帯の構成,住居の状態,母子・父子世帯,国籍など)』
ダウンロードの手順
準備
Google Driveのマイドライブに「e-Stat」というフォルダを作成。
e-Statからダウンロードしたcsvデータを作成したフォルダにアップロード。
右クリックを押してGoogle Colaboratoryファイルを作成。
※以降のコードはGoogle Colaboratoryファイルにコードセルの挿入し、そのセルに書き込んでください。
# Google Driveと接続を行う。これを行うことで、Driveにあるデータにアクセスできるようになる。
# 下記セルを実行すると、Googleアカウントのログインを求められるのでログイン。
from google.colab import drive
drive.mount('/content/drive')
# 作業フォルダへの移動。
# 人によって作業場所がことなるので、その場合作業場所を変更してください。
import os
os.chdir('/content/drive/MyDrive/e-Stat') #ここを変更。
分析の前に用意したデータを加工します。
#csvファイルの読み込み
#csvファイルの名前は必要に応じて自分のフォルダにある名前に修正してください。
import pandas as pd
population = pd.read_csv('FEH_00200521_250104143601.csv')
population.head()
実はこのデータは様々な区分で集計した人口をまとめているため、分析がしづらいです。今回は都道府県別の人口データを扱うことにし、抽出していきます。
area = population['Unnamed: 1'].str.endswith(('都','道','府','県'))
zenkoku = population[area]
zenkoku.head()
結果
文字列が「都道府県」のどれかで終了する行を抽出する命令を実行しました。
変数areaに「都道府県」のどれかで終了するかどうかという情報が各行について記録されています。
分析において都道府県名、総人口そして男女別の人口があれば十分なため、さらに加工します。
#areaが都道府県,sumが総人口,manが男性人口,womanが女性人口
zenkoku_pop = pd.DataFrame(columns=['area','sum','man','woman'])
zenkoku_pop['area'] = zenkoku['Unnamed: 1']
zenkoku_pop['sum'] = zenkoku['人口【人】']
zenkoku_pop['man'] = zenkoku['人口【人】.1']
zenkoku_pop['woman'] = zenkoku['人口【人】.2']
zenkoku_pop.head()
列名が分かりにくかったため修正しました。次が最後のデータ加工です。
zenkoku_pop['sum'] = zenkoku_pop['sum'].str.replace(',', '')
zenkoku_pop['sum'] = pd.to_numeric(zenkoku_pop['sum'], errors='coerce')
zenkoku_pop['man'] = zenkoku_pop['man'].str.replace(',', '')
zenkoku_pop['man'] = pd.to_numeric(zenkoku_pop['man'], errors='coerce')
zenkoku_pop['woman'] = zenkoku_pop['woman'].str.replace(',', '')
zenkoku_pop['woman'] = pd.to_numeric(zenkoku_pop['woman'], errors='coerce')
zenkoku_pop.head()
結果
e-Statからダウンロードしたデータはオブジェクト型であるため、数値型に変換する必要があります。その際カンマが邪魔になるため、それを消す操作も一緒に行います。
分析
今回の目標は「都道府県の人口データから平均よりも多い地域を抽出する」ことであるため
- 平均値を求める
- 各行について平均値と比較する
といった操作が必要です。
mean_sum = zenkoku_pop['sum'].mean()
result = zenkoku_pop[zenkoku_pop['sum'] > mean_sum]
print(result)
結果
抽出された地域を見ると、やはり都市圏にある都道府県が平均値よりも人口が多いことがわかります。
今回の目標はとりあえず達成できました。男性人口や女性人口でも同じように分析することができます。ぜひやってみてください!
サンプルコードについて不備やより良い書き方を知っている方はコメントしていただけると助かります!