フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

Nisikaの中古マンション価格予測のデータをグラフで可視化する

はじめに

  • 下記の記事でデータ前処理を行ったので、今回は、そのデータ前処理を行ったデータをグラフで確認する px-wing.hatenablog.com

ヒストグラム表示

fig, axes = plt.subplots(2,2, figsize=(20,10))
axes[0][0].hist(df["最寄駅:距離(分)"],bins=20)
axes[0][1].hist(df["面積(㎡)"],bins=200)
axes[0][1].set_xlim(0, 250)
axes[1][0].hist(df["建築年"],bins=20)
axes[1][1].hist(df["取引価格(総額)_log"],bins=20)
plt.show()

f:id:PX-WING:20220223205051p:plain

散布図

  • 散布図の見方はこちらが参考になります。 next-sfa.jp
fig, axes = plt.subplots(3,1, figsize=(20,10))
axes[0].scatter(df["最寄駅:距離(分)"],df["取引価格(総額)_log"], alpha=0.1, color="red")
axes[0].set_xlabel("Distance (in minutes)", fontsize=20) # (6)x軸ラベル
axes[0].set_ylabel("Transaction price (total)", fontsize=20) # (7)y軸ラベル
axes[1].scatter(df["面積(㎡)"],df["取引価格(総額)_log"], alpha=0.1, color="red")
axes[1].set_xlabel("Area (m2)", fontsize=20) # (6)x軸ラベル
axes[1].set_ylabel("Transaction price (total)", fontsize=20) # (7)y軸ラベル
axes[2].scatter(df["建築年"],df["取引価格(総額)_log"], alpha=0.1, color="red")
axes[2].set_xlabel("Year of construction", fontsize=20) # (6)x軸ラベル
axes[2].set_ylabel("Transaction price (total)", fontsize=20) # (7)y軸ラベル
plt.show()

f:id:PX-WING:20220223205241p:plain

相関関係の確認

  • 説明変数どうしの、相関がありすぎるものが混ざっていると推定精度が悪化する可能性があるので、目視でチェックする
df[['最寄駅:距離(分)','面積(㎡)','建築年', '取引価格(総額)_log']].corr()

## 下記は上記の出力結果
    最寄駅:距離(分) 面積(㎡) 建築年   取引価格(総額)_log
最寄駅:距離(分) 1.000000    0.151880    0.117809    -0.215520
面積(㎡) 0.151880    1.000000    -0.067415   0.382755
建築年   0.117809    -0.067415   1.000000    -0.538493
取引価格(総額)_log    -0.215520   0.382755    -0.538493   1.000000

ヒートマップの出力

#日本語の文字化け対応※うまくいかない
#import matplotlib
#matplotlib.rcParams["font.family"] = "AppleGothic"
## 利用できるフォントの種類の一覧が表示することができる
#matplotlib.font_manager.fontManager.ttflist 

sns.heatmap(df[['最寄駅:距離(分)','面積(㎡)','建築年', '取引価格(総額)_log']].corr())

f:id:PX-WING:20220223205509p:plain

棒グラフの表示

df["取引年"] = df["取引時点"].apply(lambda x:str(x)[:4])
fig, axes = plt.subplots(2,1, figsize=(20,10))
sns.countplot(x="取引年", data=df.sort_values("取引年"), ax=axes[0])
sns.countplot(x="取引時点", data=df.sort_values("取引時点"), ax=axes[1])

f:id:PX-WING:20220223211542p:plain