見出し画像

国勢調査データを使ったPythonデータ分析入門

はじめに

Google Colaboratory 上で令和2年国勢調査データを使用し、Python を活用したデータ分析を実施しました。データは以下のリンクからダウンロード可能です。

データは以下のリンク(総務省統計局)からダウンロード可能です。
令和2年国勢調査データ

ここでは、データの前処理から基本的な可視化、統計量の算出、補助ツールとしての ydata-profiling の活用まで、具体的な手順と学びをまとめました。


1. 環境構築とデータ読み込み

分析環境は Google Colaboratory を使用しました。以下のライブラリをインストールして環境を整えました。

  • 必要なライブラリ: pandas, seaborn, matplotlib, japanize-matplotlib, ydata-profiling

  • ライブラリの簡単な説明

  1. pandas:表形式(データフレーム)のデータ読み込み、操作、集計、前処理

  2. seaborn: 統計的なグラフの作成(ヒートマップ、散布図、箱ひげ図など)

  3. matplotlib: カスタマイズ性が高いグラフやプロットを作成

  4. japanize-matplotlib: 日本語を含むグラフを正しく表示する

  5. 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)  # 整数型に変換
)

以下のコードの説明を簡単に分解して解説します。


各処理の解説

  1. replace(',', '', regex=True)

    • '人口 0_総数' 列内のカンマ(,)をすべて削除しています。

    • : "1,234" → "1234"

  2. replace('-', '0')

    • 欠損値の代わりに使われる可能性のあるハイフン(-)を 0 に置き換えています。

    • : "-" → "0"

  3. .astype(int)

    • 文字列型(str型)やその他のデータ型になっている値を整数型(int型)に変換しています。

    • : "1234" → 1234(整数)


4. 基本統計量の算出

前処理を終えたデータについて、以下を実施しました。

  • describe(): 基本統計量 (平均、標準偏差、最小値、最大値) の算出。describe() はデータフレーム全体の基本統計量を表示する pandas のメソッドで、主にデータの概要把握に使用されます。

  • 都道府県別の集計
    '人口0_総数' を都道府県別に集計し、平均値を算出。
    これにより、地域ごとの人口分布の特徴を定量的に把握しました。


5. データの可視化

可視化によりデータの特徴を視覚的に理解しました。

  • ヒストグラム
    「人口0_総数'」の分布を確認し、特に 50万人以下のデータを絞り込んで市区町村数を可視化。

sns.histplot(df_b01_01[df_b01_01['人口 0_総数'] < 50000]['人口 0_総数'], kde=True)
5万人以下のヒストグラム
  • 箱ひげ図
    都道府県別の '人口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);
箱ひげ図:都道府県別の人口(50万以下)

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()

7. ydata-profiling を用いた補助的な分析

最終段階として、ydata-profiling を使用して詳細なデータレポートを作成しました。

  • 実行内容: ydata-profiling による DataFrame のプロファイリング。

  • 出力結果: HTML レポートを生成し、データの分布や相関関係を簡単に確認。

ydata-profiling はデータ探索の初期段階で非常に有用であり、データの全体像を素早く把握するのに役立ちました。


学んだことと次のステップ

今回の分析では、以下の点を学びました。

  • データ前処理の重要性と効率化の方法。

  • 可視化によるデータの理解が、洞察の発見に役立つこと。

  • ydata-profiling を補助ツールとして活用することで、分析の効率を向上できること。

今後は、より高度な分析や機械学習モデルの適用を学び、データから新しい価値を引き出せるよう精進していきたいと思います。


いいなと思ったら応援しよう!