主成分分析を用いた政令指定都市の区の分析
目的
主成分分析を用いて、東京23区および政令都市の区()の分析を行う.
用いたデータは, e-statの2015年の調査によるもので, 総人口,15歳未満人口,15〜64歳人口, 出生数, 死亡数, 転入者数, 転出者数, 従業・通学していない人口, 昼間人口, 単独世帯, 婚姻件数, 離婚件数の
12次元のベクトルである. 今回は, このベクトルに対して主成分分析を行い, 各因子の寄与率・主成分ベクトル・主成分得点を計算することで, 区の特徴をどういったもので定められているかを分析する.
pythonで実装したコードは次の通りである. なお, 実際に主成分分析を行ったベクトルは, もとの各次元のうち総人口以外を総人口で割った11次元のベクトルである(地域ごとの人口差による影響を除くため). また, 主成分分析を行う前に各ベクトルについて標準化を行なっている.
import pandas as pd import numpy as np from sklearn.decomposition import PCA if __name__ == '__main__': matplotlib.rcParams['font.family'] = 'IPAexGothic' df = pd.read_csv('ku2015.csv', encoding="SHIFT-JIS") print(df) df.loc[:, '総人口':] = df.loc[:, '総人口':].astype(float) pop = df.loc[:, '総人口'].values X = df.iloc[:, 2:].apply(lambda x: x / pop, axis=0) X_norm = X.loc[:, :].apply(lambda x: ((x - x.mean()) / x.std()), axis=0) for i in range(len(X_norm.columns)): print(i + 1, end=' : ') print(X_norm.columns[i]) pca = PCA() pca.fit(X_norm) prop = pca.explained_variance_ / np.sum(pca.explained_variance_)
コード中の変数propに格納されている各主成分の寄与率を図で示す (寄与率は合計で1になるよう正規化した).
図より, 第二主成分までの寄与率の和が0.8であり, 全体の情報のうちの大部分がここに集中していることが分かった.
これに対して, 第一主成分に対応する主成分ベクトルは次のようになった.
このベクトルは, 労働人口(15~64歳人口)・転入出者数・婚姻件数が多いほど+の影響があり, 死亡者数・従業通学していない者の数が多いほど-の影響がある.
このことから, このベクトルの+の方角は区が人の往来が多く賑やかであり, -の方角は, 落ち着いたのどかであることが考えられる.
一方, 第二主成分に対応する主成分ベクトルは次のようになった.
このベクトルは, 死亡者数・単独世帯数が多いほど+の影響があり, 15歳未満人口・出生数が多いほど-の影響がある.
このことから, このベクトルの+の方角に行くほど少子高齢化が進んでいる区であると考えられる.
この2つの因子に対し, 東京23区の各区について, 第一主成分得点をx軸に, 第二主成分得点をy軸にプロットした結果を次に示す.
この図から, 東京23区は, 日本の他の政令指定都市と比べると, 人の往来が多く, また少子高齢化については平均的であることが分かる.
まとめ
主成分分析により, 東京23区と政令都市のデータの分析を行った. これらのデータは主に, 2つの主成分によって特徴づけれらていることが分かった.