e-Statの趣味・娯楽の種類別行動者率をデータラングリング

www.e-stat.go.jp

exploratory.io

import pandas as pd

df1 = pd.read_excel(
    "https://www.e-stat.go.jp/stat-search/file-download?statInfId=000031577984&fileKind=0",
    header=None,
)

df1.to_csv("data.tsv", sep="\t")

# 行カウント確認
df1.notnull().sum(axis=0)

# 列カウント確認
df1.notnull().sum(axis=1)

df1

# テキスト埋め
df1.iat[7, 7] = "男女"
df1.iat[7, 10] = "年齢"
df1.iat[7, 12] = df1.iat[6, 12]
df1.iat[7, 13] = df1.iat[6, 13]

df1.iat[10, 10] = "計"
df1.iat[24, 10] = "計"
df1.iat[38, 10] = "計"

# 表のみ抽出
df2 = df1.iloc[7:-4, 7:-2].copy()

# 英字と番号の行を削除
df2.drop([8, 9], inplace=True)

# 総数・男・女 列テキスト結合
df2[7] = df2[7].fillna("") + df2[8].fillna("") + df2[9].fillna("")

# 空白のところをNanに置換
df2[7].mask(df2[7] == "", inplace=True)

# 前行の値をコピー
df2[7].fillna(method="ffill", inplace=True)

# タイトルの空白文字を除去
df2.iloc[0, :] = df2.iloc[0, :].str.replace(r"\s", "")

# 不要な列を削除
df2.drop([8, 9, 11, 30, 31, 32, 33, 34, 35, 36], axis=1, inplace=True)

df2.head(10)

df2.to_csv("data.csv", header=False, index=False)
import matplotlib.pyplot as plt
import seaborn as sns

import japanize_matplotlib

df = pd.read_csv("data.csv", index_col=[0,1], header=0)

# 計の行削除
df.drop("計", level=1, inplace=True)

df.drop(["サンプルサイズ", "15歳以上推定人口(千人)", "総数"], axis=1, inplace=True)

df_man = df.loc["男", :].copy()

df_man.plot(figsize=(10, 8))
# 凡例を枠外
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=10)

df_woman = df.loc["女", :].copy()

df_woman.plot(figsize=(10, 8))
# 凡例を枠外
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=10)

df_all = df.loc["総数", :].copy()

df_all.plot(figsize=(10, 8))
# 凡例を枠外
plt.legend(bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0, fontsize=10)


plt.figure(figsize=(5, 10)) 
sns.heatmap(df_man.T, cmap="bwr")
plt.savefig('man.png')

plt.figure(figsize=(5, 10)) 
sns.heatmap(df_woman.T, cmap="bwr")
plt.savefig('woman.png')

plt.figure(figsize=(5, 10)) 
sns.heatmap(df_all.T, cmap="bwr")
plt.savefig('all.png')

f:id:imabari_ehime:20200117150101p:plain

f:id:imabari_ehime:20200117150113p:plain

全体

f:id:imabari_ehime:20200117150125p:plain

クラスタリング

やりかたがわからない