Pythonで国勢調査データを分析する方法|インドの人口統計データを可視化してみよう
国勢調査(センサス)とは、特定の対象人口に関する情報を体系的に記録・収集する取り組みです。収集されるデータには、人口統計、経済状況、居住環境など、さまざまなカテゴリの情報が含まれています。これらのデータは、政府が現状を正確に把握し、将来に向けた政策立案を行ううえで重要な基礎資料となります。
本記事では、Pythonを活用してインドの国勢調査データを分析する方法を解説します。人口動態や経済指標など複数の観点からデータを掘り下げ、その結果をグラフとして視覚的に表現します。使用するデータセットはKaggleから入手した「India Districts Census 2011」です。
データの準備と読み込み
まずは、CSVファイルのデータをpandasのDataFrameに読み込むところから始めます。以下の短いPythonプログラムでデータを読み込み、分析の準備を整えます。出力では見やすさのため一部の列のみ表示しています。
コード例
import pandas as pd
datainput = pd.read_csv('E:\\india-districts-census-2011.csv')
#https://www.kaggle.com/danofer/india-census#india-districts-census-2011.csv
print(datainput)出力結果
上記のコードを実行すると、次のような結果が得られます。
District code ... Total_Power_Parity 0 1 ... 1119 1 2 ... 1066 2 3 ... 242 3 4 ... 214 4 5 ... 629 .. ... ... ... 635 636 ... 10027 636 637 ... 4890 637 638 ... 3151 638 639 ... 3151 639 640 ... 5782 [640 rows x 118 columns]
このデータセットには、インド全土の640地区に関する118列もの項目が含まれており、非常に詳細な分析が可能です。
2つの州の類似性を分析する
データを読み込めたので、次は2つの州の間にどのような共通点があるのかを、さまざまな観点から分析してみましょう。比較の軸としては、年齢構成、パソコンの保有率、住宅事情、教育水準などが挙げられます。
以下の例では、「アッサム州」と「アーンドラ・プラデーシュ州」の2つの州を取り上げます。similarity_matrix(類似度行列)を使って両州を比較し、それぞれの州に属するすべての地区ペアについて全データ項目を照合します。結果はヒートマップとして可視化され、色が濃いほど両者の関連性が高いことを示しています。
コード例
import pandas as pd
import matplotlib.pyplot as plot
from matplotlib.colors import Normalize
import seaborn as sns
import math
datainput = pd.read_csv('E:\\india-districts-census-2011.csv')
df_ASSAM = datainput.loc[datainput['State name'] == 'ASSAM']
df_ANDHRA_PRADESH = datainput.loc[datainput['State name'] == 'ANDHRA PRADESH']
def segment(x1, x2):
# 両方のデータフレームにインデックスを設定
x1.set_index('District code')
x2.set_index('District code')
# len(x1) × len(x2) のサイズの類似度行列
similarity_matrix = []
# df1の行を反復処理
for r1 in x1.iterrows():
# r1とx2の各行との類似度スコアを格納するリスト
y = []
# x2の行を反復処理
for r2 in x2.iterrows():
# 差の二乗和を計算
n = 0
for c in list(datainput)[3:]:
maximum_c = max(datainput[c])
minimum_c = min(datainput[c])
n += pow((r1[1][c] - r2[1][c]) / (maximum_c - minimum_c), 2)
# 平方根を取り、結果を逆数にする
y.append(1 / math.sqrt(n))
# 類似度スコアを追加
similarity_matrix.append(y)
p = 0
q = 0
r = 0
for m in range(len(similarity_matrix)):
for n in range(len(similarity_matrix[m])):
if (similarity_matrix[m][n] > p):
p = similarity_matrix[m][n]
q = m
r = n
print("%s from ASSAM and %s from ANDHRA PRADESH are most similar" % (x1['District name'].iloc[q],x2['District name'].iloc[r]))
return similarity_matrix
m = segment(df_ASSAM, df_ANDHRA_PRADESH)
normalization=Normalize()
s = plot.axes()
sns.heatmap(normalization(m), xticklabels=df_ANDHRA_PRADESH['District name'],yticklabels=df_ASSAM['District name'],linewidths=0.05,cmap='Oranges').set_title("similar districts matrix of assam AND andhra_pradesh")
plot.rcParams['figure.figsize'] = (20,20)
plot.show()出力結果
上記のコードを実行すると、アッサム州とアーンドラ・プラデーシュ州の各地区同士の類似度を示すヒートマップが描画されます。最も類似度の高い地区の組み合わせもコンソールに出力されます。この可視化により、地理的には離れた2つの州の間にも、統計的な特徴がよく似た地区が存在することがひと目でわかります。
特定のパラメータで地域を比較する
次に、特定の指標に絞って地域間の比較を行う方法を見ていきましょう。以下の例では、各州における「家庭用パソコンの保有世帯数」と「農業従事者(耕作者)の数」という2つのパラメータを比較します。これにより、ITインフラの普及度と農業依存度の関係を州ごとに把握できます。
コード例
import pandas as pd
import matplotlib.pyplot as plot
from numpy import *
datainput = pd.read_csv('E:\\india-districts-census-2011.csv')
z = datainput.groupby(by="State name")
m = []
w = []
for k, g in z:
t = 0
t1 = 0
for r in g.iterrows():
t += r[1][36]
t1 += r[1][21]
m.append((k, t))
w.append((k, t1))
mp= pd.DataFrame({
'state': [x[0] for x in m],
'Households_with_Computer': [x[1] for x in m],
'Cultivator_Workers': [x[1] for x in w]})
d = arange(35)
wi = 0.3
fig, f = plot.subplots()
plot.xlim(0, 22000000)
r1 = f.barh(d, mp['Cultivator_Workers'], wi, color='g', align='center')
r2 = f.barh(d + wi, mp['Households_with_Computer'], wi, color='b', align='center')
f.set_xlabel('Population')
f.set_title('COMPUTER PENETRATION IN VARIOUS STATES W.R.T. Cultivator_Workers')
f.set_yticks(d + wi / 2)
f.set_yticklabels((x for x in mp['state']))
f.legend((r1[0], r2[0]), ('Cultivator_Workers', 'Households_with_Computer'))
plot.rcParams.update({'font.size': 15})
plot.rcParams['figure.figsize'] = (15, 15)
plot.show()出力結果
上記のコードを実行すると、各州について緑色のバー(耕作者数)と青色のバー(パソコン保有世帯数)を並べて比較した横棒グラフが表示されます。このグラフを見ると、都市化が進んだ州ではパソコン保有率が高く、農業中心の州では耕作者の割合が大きいといった、州ごとの経済構造の違いが明確に読み取れます。
まとめ
本記事では、Pythonのpandas、matplotlib、seabornを組み合わせることで、大規模な国勢調査データの読み込み、州間の類似性分析、特定指標による地域比較までを一貫して行う方法を紹介しました。この手法はインドのデータに限らず、他の国や地域の統計データ分析にも応用できます。ぜひ自身の興味のあるデータセットで試してみてください。
-
Pythonで身につける統計的思考 ― グラフとチャートによるデータ分析入門
統計学は、機械学習(ML)やAIを学ぶうえで欠かせない基礎知識です。これらの技術分野ではPythonが事実上の標準言語となっているため、統計分析を取り入れたPythonプログラムの書き方をマスターすることが重要になります。本記事では、さまざまなPythonライブラリを活用してグラフやチャートを作成する方法を解説します。多様なチャートを使いこなせるようになると、データを素早く分析し、結論を視覚的に導き出せるようになります。 データの準備 ここでは、さまざまな種子(シード)に関するデータを含むデータセットを使用します。このデータセットはKaggleから入手でき、URLは後述のサンプルコード内に記載
-
Pythonで顧客離反(チャーン)を予測する方法:機械学習による実践ガイド
あらゆるビジネスは顧客のロイヤルティに依存しています。リピート購入は企業の収益性を支える重要な柱の一つであり、顧客が離れていく理由を把握することは極めて重要です。このように顧客が離反していく現象は「カスタマーチャーン(Customer Churn)」と呼ばれます。過去の傾向を分析することで、どのような要因が顧客離反に影響を与えているのかを把握し、特定の顧客が離反するかどうかを予測できるようになります。本記事では、機械学習アルゴリズムを使って過去の顧客離反データの傾向を分析し、どの顧客が離反する可能性が高いかを判定する方法を解説します。データの準備例として、通信業界(Telecom)の顧客離反デ