![見出し画像](https://assets.st-note.com/production/uploads/images/163038860/rectangle_large_type_2_cf131ca26dc1ae8dd8666a1f0ae87a87.png?width=1200)
国勢調査データを使ったPythonデータ分析入門
はじめに
Google Colaboratory 上で令和2年国勢調査データを使用し、Python を活用したデータ分析を実施しました。データは以下のリンクからダウンロード可能です。
データは以下のリンク(総務省統計局)からダウンロード可能です。
令和2年国勢調査データ
ここでは、データの前処理から基本的な可視化、統計量の算出、補助ツールとしての ydata-profiling の活用まで、具体的な手順と学びをまとめました。
1. 環境構築とデータ読み込み
分析環境は Google Colaboratory を使用しました。以下のライブラリをインストールして環境を整えました。
必要なライブラリ: pandas, seaborn, matplotlib, japanize-matplotlib, ydata-profiling
ライブラリの簡単な説明
pandas:表形式(データフレーム)のデータ読み込み、操作、集計、前処理
seaborn: 統計的なグラフの作成(ヒートマップ、散布図、箱ひげ図など)
matplotlib: カスタマイズ性が高いグラフやプロットを作成
japanize-matplotlib: 日本語を含むグラフを正しく表示する
ydata-profiling:データセットの概要を自動で詳細にレポートするライブラリでデータフレームの概要を視覚的に理解(分布、欠損値、相関などの分析)。データのプロファイリングを HTML やレポート形式で生成
次に、Google Drive をマウントして、国勢調査の CSV ファイル (b01_01.csv) を pandas DataFrame に読み込みました。
2. データの概要確認
データを読み込んだ後、以下のコマンドを使用して基本情報を確認しました。
df.info(): データの型や欠損値を確認
df.head(): データの一部を表示して内容を把握
これにより、データに含まれるカラムやデータ量を把握しました。
3. データの前処理
データ分析のために必要な前処理を以下の手順で実施しました。
必要なカラムを選択
例: '地名', '人口0_総数', '5年間の人口増減率', '人口密度(1km2当たり)' など。条件に基づくデータ抽出
'地域識別コード' が特定値 ('0', '2', '3') の行を抽出。データ型の変換
数値型データに含まれるカンマや記号を処理し、適切な型に変換。
objest型で取り込まれた「人口 0_総数」をint型に変更した事例
df_b01_01['人口 0_総数'] = (
df_b01_01['人口 0_総数']
.replace(',', '', regex=True) # カンマを削除
.replace('-', '0') # ハイフンを0に置換
.astype(int) # 整数型に変換
)
以下のコードの説明を簡単に分解して解説します。
各処理の解説
replace(',', '', regex=True)
'人口 0_総数' 列内のカンマ(,)をすべて削除しています。
例: "1,234" → "1234"
replace('-', '0')
欠損値の代わりに使われる可能性のあるハイフン(-)を 0 に置き換えています。
例: "-" → "0"
.astype(int)
文字列型(str型)やその他のデータ型になっている値を整数型(int型)に変換しています。
例: "1234" → 1234(整数)
4. 基本統計量の算出
前処理を終えたデータについて、以下を実施しました。
describe(): 基本統計量 (平均、標準偏差、最小値、最大値) の算出。describe() はデータフレーム全体の基本統計量を表示する pandas のメソッドで、主にデータの概要把握に使用されます。
都道府県別の集計
'人口0_総数' を都道府県別に集計し、平均値を算出。
これにより、地域ごとの人口分布の特徴を定量的に把握しました。
![](https://assets.st-note.com/img/1732414900-fzp8lUGXm0gMQqEi62ISoWBc.png?width=1200)
5. データの可視化
可視化によりデータの特徴を視覚的に理解しました。
ヒストグラム
「人口0_総数'」の分布を確認し、特に 50万人以下のデータを絞り込んで市区町村数を可視化。
sns.histplot(df_b01_01[df_b01_01['人口 0_総数'] < 50000]['人口 0_総数'], kde=True)
![](https://assets.st-note.com/img/1732414143-TBbozfcDW1RiAkphJswH59U4.png)
箱ひげ図
都道府県別の '人口0_総数' を比較し、分布や外れ値を視覚化。
# 箱ひげ図:都道府県別の人口(50万以下)
var = '2020年_都道府県'
data = pd.concat([df_b01_01['人口 0_総数'], df_b01_01[var]], axis=1)
f, ax = plt.subplots(figsize=(16, 12))
fig = sns.boxplot(x=var, y="人口 0_総数", data=data)
fig.axis(ymin=0, ymax=500000);
![](https://assets.st-note.com/img/1732414330-UszjX9wxVtqNcYmog24Q1rFZ.png?width=1200)
6. 追加分析: 5年間の人口増減率の推移
都道府県別の「5年間の人口増減率」の平均値を算出し、折れ線グラフで推移を可視化しました。これにより、増減率に地域差があることを確認しました。
#都道府県別のデータ数の棒グラフ
count_df = df_b01_01['2020年_都道府県'].value_counts().reset_index()
count_df.columns = ['都道府県', 'データ数'] # 列名変更
plt.figure(figsize=(15, 6)) # グラフサイズ調整
plt.bar(count_df['都道府県'], count_df['データ数'])
plt.xlabel('都道府県', fontsize=12)
plt.ylabel('データ数', fontsize=12)
plt.title('都道府県別 データ数', fontsize=14)
plt.xticks(rotation=90) # x軸ラベルの回転
plt.tight_layout() # レイアウト調整
plt.show()
![](https://assets.st-note.com/img/1732414388-NQUMLsg8vbq9SCZxDYOnrjpc.png?width=1200)
7. ydata-profiling を用いた補助的な分析
最終段階として、ydata-profiling を使用して詳細なデータレポートを作成しました。
実行内容: ydata-profiling による DataFrame のプロファイリング。
出力結果: HTML レポートを生成し、データの分布や相関関係を簡単に確認。
ydata-profiling はデータ探索の初期段階で非常に有用であり、データの全体像を素早く把握するのに役立ちました。
学んだことと次のステップ
今回の分析では、以下の点を学びました。
データ前処理の重要性と効率化の方法。
可視化によるデータの理解が、洞察の発見に役立つこと。
ydata-profiling を補助ツールとして活用することで、分析の効率を向上できること。
今後は、より高度な分析や機械学習モデルの適用を学び、データから新しい価値を引き出せるよう精進していきたいと思います。