import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
#df0 = pd.read_excel(r'D:\users\desktop\estate_tokyo.xlsx')
url = "https://www.ces-alpha.org/course/file_serve/5669506760310784/estate_tokyo.xlsx"
df0 = pd.read_excel(url)
df0
駅名 | 建物構造 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 築年 | 所在階 | 成約価格 | |
---|---|---|---|---|---|---|---|---|---|
0 | 大門 | SRC | 5 | 66 | K | 1 | 200003 | 33 | 81000000 |
1 | 汐留 | RC | 8 | 55 | R | 1 | 201708 | 16 | 81600000 |
2 | 赤坂見附 | SRC | 4 | 60 | DK | 1 | 198300 | 30 | 77600000 |
3 | 六本木一丁目 | RC | 8 | 53 | DK | 1 | 201204 | 44 | 75500000 |
4 | 表参道 | RC | 6 | 35 | R | 1 | 200510 | 2 | 47700000 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
39946 | 外苑前 | RC | 4 | 54 | K | 1 | 197105 | 3 | 45000000 |
39947 | 青山一丁目 | SRC | 4 | 47 | K | 2 | 200510 | 9 | 56200000 |
39948 | 神谷町 | RC | 11 | 76 | K | 1 | 197103 | 17 | 65700000 |
39949 | 六本木 | RC | 3 | 76 | DK | 1 | 201005 | 21 | 153800000 |
39950 | 六本木一丁目 | RC | 14 | 47 | R | 1 | 200906 | 18 | 61700000 |
39951 rows × 9 columns
len(df0)
39951
df0.shape
(39951, 9)
df0.describe()
徒歩分 | 専有面積 | 部屋数 | 築年 | 所在階 | 成約価格 | |
---|---|---|---|---|---|---|
count | 39951.000000 | 39951.000000 | 39951.000000 | 39951.000000 | 39951.000000 | 3.995100e+04 |
mean | 6.198643 | 58.419889 | 1.645816 | 199918.872469 | 10.315837 | 6.735336e+07 |
std | 3.584662 | 28.615531 | 0.753337 | 1356.434417 | 9.504253 | 4.260659e+07 |
min | 1.000000 | 12.000000 | 1.000000 | 195901.000000 | 1.000000 | 5.800000e+06 |
25% | 3.000000 | 37.000000 | 1.000000 | 199201.000000 | 4.000000 | 3.730000e+07 |
50% | 6.000000 | 57.000000 | 1.000000 | 200501.000000 | 7.000000 | 5.900000e+07 |
75% | 8.000000 | 75.000000 | 2.000000 | 200804.000000 | 13.000000 | 8.530000e+07 |
max | 20.000000 | 349.000000 | 6.000000 | 201902.000000 | 49.000000 | 5.411000e+08 |
df0.所在階.unique()
array([33, 16, 30, 44, 2, 13, 4, 6, 3, 32, 29, 22, 1, 7, 5, 12, 46, 36, 19, 25, 21, 17, 10, 34, 8, 24, 11, 14, 15, 35, 27, 9, 26, 28, 43, 40, 23, 37, 39, 18, 49, 38, 20, 48, 31, 42, 47, 45, 41], dtype=int64)
df0.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 39951 entries, 0 to 39950 Data columns (total 9 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 駅名 39951 non-null object 1 建物構造 39951 non-null object 2 徒歩分 39951 non-null int64 3 専有面積 39951 non-null int64 4 間取り 39951 non-null object 5 部屋数 39951 non-null int64 6 築年 39951 non-null int64 7 所在階 39951 non-null int64 8 成約価格 39951 non-null int64 dtypes: int64(6), object(3) memory usage: 2.7+ MB
df0.drop(['建物構造', '築年'], axis=1, inplace=True)
df0
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | |
---|---|---|---|---|---|---|---|
0 | 大門 | 5 | 66 | K | 1 | 33 | 81000000 |
1 | 汐留 | 8 | 55 | R | 1 | 16 | 81600000 |
2 | 赤坂見附 | 4 | 60 | DK | 1 | 30 | 77600000 |
3 | 六本木一丁目 | 8 | 53 | DK | 1 | 44 | 75500000 |
4 | 表参道 | 6 | 35 | R | 1 | 2 | 47700000 |
... | ... | ... | ... | ... | ... | ... | ... |
39946 | 外苑前 | 4 | 54 | K | 1 | 3 | 45000000 |
39947 | 青山一丁目 | 4 | 47 | K | 2 | 9 | 56200000 |
39948 | 神谷町 | 11 | 76 | K | 1 | 17 | 65700000 |
39949 | 六本木 | 3 | 76 | DK | 1 | 21 | 153800000 |
39950 | 六本木一丁目 | 14 | 47 | R | 1 | 18 | 61700000 |
39951 rows × 7 columns
ここでは、面積単価を 成約価格 / 専有面積 として定義するものとする。
df0['面積単価'] = df0['成約価格'] / df0['専有面積']
df0
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
0 | 大門 | 5 | 66 | K | 1 | 33 | 81000000 | 1.227273e+06 |
1 | 汐留 | 8 | 55 | R | 1 | 16 | 81600000 | 1.483636e+06 |
2 | 赤坂見附 | 4 | 60 | DK | 1 | 30 | 77600000 | 1.293333e+06 |
3 | 六本木一丁目 | 8 | 53 | DK | 1 | 44 | 75500000 | 1.424528e+06 |
4 | 表参道 | 6 | 35 | R | 1 | 2 | 47700000 | 1.362857e+06 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
39946 | 外苑前 | 4 | 54 | K | 1 | 3 | 45000000 | 8.333333e+05 |
39947 | 青山一丁目 | 4 | 47 | K | 2 | 9 | 56200000 | 1.195745e+06 |
39948 | 神谷町 | 11 | 76 | K | 1 | 17 | 65700000 | 8.644737e+05 |
39949 | 六本木 | 3 | 76 | DK | 1 | 21 | 153800000 | 2.023684e+06 |
39950 | 六本木一丁目 | 14 | 47 | R | 1 | 18 | 61700000 | 1.312766e+06 |
39951 rows × 8 columns
print(f"面積単価の平均値: {int(df0['面積単価'].mean()): ,}円")
print(f"面積単価の標準偏差: {int(df0['面積単価'].std()): ,}円")
面積単価の平均値: 1,137,124円 面積単価の標準偏差: 327,823円
専有面積が300以上の物件を抽出
# 真偽値でTrueを抽出する場合
df0[df0['専有面積']>= 300].head()
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
4078 | 大門 | 3 | 312 | K | 2 | 31 | 250600000 | 8.032051e+05 |
4177 | 赤羽橋 | 14 | 312 | R | 2 | 23 | 231500000 | 7.419872e+05 |
6494 | 麻布十番 | 6 | 312 | R | 2 | 3 | 344300000 | 1.103526e+06 |
6692 | 赤羽橋 | 1 | 312 | K | 2 | 5 | 368200000 | 1.180128e+06 |
8520 | 赤羽橋 | 5 | 349 | K | 1 | 9 | 157900000 | 4.524355e+05 |
# queryを使う場合
df0.query("専有面積 >= 300").head()
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
4078 | 大門 | 3 | 312 | K | 2 | 31 | 250600000 | 8.032051e+05 |
4177 | 赤羽橋 | 14 | 312 | R | 2 | 23 | 231500000 | 7.419872e+05 |
6494 | 麻布十番 | 6 | 312 | R | 2 | 3 | 344300000 | 1.103526e+06 |
6692 | 赤羽橋 | 1 | 312 | K | 2 | 5 | 368200000 | 1.180128e+06 |
8520 | 赤羽橋 | 5 | 349 | K | 1 | 9 | 157900000 | 4.524355e+05 |
最寄り駅が麻布十番か大門で、徒歩10分以内、部屋が3部屋以上である物件の抽出
# 真偽値でTrueを抽出する場合
cond1 = df0['駅名'] == '麻布十番'
cond2 = df0['駅名'] == '大門'
cond3 = df0['徒歩分'] < 10
cond4 = df0['部屋数'] >= 3
cond = (cond1 | cond2) & cond3 & cond4
df0[cond][:10]
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
22 | 麻布十番 | 5 | 58 | K | 3 | 7 | 85800000 | 1.479310e+06 |
157 | 麻布十番 | 1 | 91 | K | 3 | 4 | 138200000 | 1.518681e+06 |
459 | 大門 | 2 | 51 | R | 3 | 10 | 42300000 | 8.294118e+05 |
727 | 大門 | 8 | 81 | R | 3 | 4 | 101100000 | 1.248148e+06 |
816 | 大門 | 7 | 63 | K | 4 | 33 | 115600000 | 1.834921e+06 |
950 | 大門 | 3 | 66 | R | 3 | 9 | 82900000 | 1.256061e+06 |
1282 | 麻布十番 | 8 | 35 | K | 3 | 7 | 31200000 | 8.914286e+05 |
1397 | 麻布十番 | 1 | 24 | K | 3 | 9 | 21100000 | 8.791667e+05 |
1485 | 大門 | 5 | 87 | K | 3 | 8 | 100400000 | 1.154023e+06 |
1511 | 大門 | 8 | 97 | R | 3 | 33 | 90500000 | 9.329897e+05 |
# queryを使う場合
df0.query("駅名=='麻布十番' | 駅名=='大門' & 徒歩分 < 10 & 部屋数 >=3" )
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
14 | 麻布十番 | 2 | 82 | R | 1 | 1 | 113400000 | 1.382927e+06 |
22 | 麻布十番 | 5 | 58 | K | 3 | 7 | 85800000 | 1.479310e+06 |
105 | 麻布十番 | 13 | 81 | R | 1 | 27 | 117200000 | 1.446914e+06 |
137 | 麻布十番 | 12 | 90 | R | 1 | 9 | 195400000 | 2.171111e+06 |
157 | 麻布十番 | 1 | 91 | K | 3 | 4 | 138200000 | 1.518681e+06 |
... | ... | ... | ... | ... | ... | ... | ... | ... |
39712 | 麻布十番 | 12 | 59 | R | 1 | 6 | 44900000 | 7.610169e+05 |
39805 | 麻布十番 | 3 | 72 | K | 1 | 9 | 112400000 | 1.561111e+06 |
39814 | 麻布十番 | 2 | 53 | R | 1 | 13 | 108800000 | 2.052830e+06 |
39921 | 麻布十番 | 7 | 20 | R | 3 | 10 | 29500000 | 1.475000e+06 |
39936 | 大門 | 1 | 77 | DK | 3 | 33 | 127100000 | 1.650649e+06 |
1292 rows × 8 columns
cond5 = df0['所在階'] >= 35
add_cond = cond & cond5
df0[add_cond]
駅名 | 徒歩分 | 専有面積 | 間取り | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|---|---|
5013 | 大門 | 9 | 60 | K | 3 | 40 | 69600000 | 1.160000e+06 |
13106 | 麻布十番 | 6 | 53 | DK | 3 | 37 | 46600000 | 8.792453e+05 |
13438 | 大門 | 7 | 64 | K | 3 | 38 | 55700000 | 8.703125e+05 |
13481 | 麻布十番 | 4 | 73 | K | 3 | 48 | 130700000 | 1.790411e+06 |
14592 | 大門 | 2 | 77 | R | 3 | 41 | 97800000 | 1.270130e+06 |
27062 | 麻布十番 | 5 | 68 | R | 3 | 38 | 123800000 | 1.820588e+06 |
35145 | 麻布十番 | 1 | 64 | K | 3 | 38 | 56900000 | 8.890625e+05 |
35162 | 麻布十番 | 6 | 26 | K | 3 | 35 | 72000000 | 2.769231e+06 |
print(f"面積単価の平均値: {int(df0[add_cond]['面積単価'].mean()): ,}円")
面積単価の平均値: 1,431,122円
# 性別で各データ項目の傾向を比較
df0.groupby('駅名').mean()[:10]
徒歩分 | 専有面積 | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|
駅名 | ||||||
お台場海浜公園 | 6.220067 | 57.387858 | 1.643339 | 10.358347 | 5.332572e+07 | 9.292402e+05 |
三田 | 6.239130 | 58.626957 | 1.636522 | 10.226087 | 6.199939e+07 | 1.047361e+06 |
乃木坂 | 6.065048 | 57.107546 | 1.655681 | 10.320035 | 6.965273e+07 | 1.206465e+06 |
五反田 | 6.124478 | 57.562239 | 1.650794 | 10.039265 | 5.793033e+07 | 9.947552e+05 |
六本木 | 6.210615 | 59.262848 | 1.616681 | 9.951137 | 8.042325e+07 | 1.337702e+06 |
六本木一丁目 | 6.286980 | 56.870682 | 1.583702 | 10.062888 | 7.610496e+07 | 1.299156e+06 |
北品川 | 6.006114 | 58.236681 | 1.647162 | 10.511790 | 6.021624e+07 | 1.020898e+06 |
品川 | 6.106594 | 59.556459 | 1.638663 | 10.488708 | 6.582132e+07 | 1.101925e+06 |
外苑前 | 6.062818 | 58.224109 | 1.674873 | 10.332767 | 7.405874e+07 | 1.255164e+06 |
大門 | 6.250644 | 59.151073 | 1.670386 | 10.387983 | 6.229554e+07 | 1.047860e+06 |
df0.groupby('駅名').mean().sort_values('成約価格', ascending=False).head(10)
徒歩分 | 専有面積 | 部屋数 | 所在階 | 成約価格 | 面積単価 | |
---|---|---|---|---|---|---|
駅名 | ||||||
表参道 | 6.022957 | 58.337006 | 1.675849 | 10.541781 | 8.549816e+07 | 1.432986e+06 |
六本木 | 6.210615 | 59.262848 | 1.616681 | 9.951137 | 8.042325e+07 | 1.337702e+06 |
赤坂 | 6.374441 | 58.562109 | 1.685433 | 10.694370 | 7.916399e+07 | 1.324179e+06 |
神谷町 | 6.021596 | 59.022535 | 1.685446 | 9.934272 | 7.816300e+07 | 1.290725e+06 |
麻布十番 | 6.192982 | 57.960526 | 1.621053 | 10.104386 | 7.731070e+07 | 1.304820e+06 |
広尾 | 6.158140 | 57.382326 | 1.680000 | 9.974884 | 7.674130e+07 | 1.287265e+06 |
六本木一丁目 | 6.286980 | 56.870682 | 1.583702 | 10.062888 | 7.610496e+07 | 1.299156e+06 |
青山一丁目 | 6.336966 | 59.383906 | 1.662196 | 9.932942 | 7.482984e+07 | 1.247617e+06 |
外苑前 | 6.062818 | 58.224109 | 1.674873 | 10.332767 | 7.405874e+07 | 1.255164e+06 |
白金台 | 6.345208 | 58.587786 | 1.655640 | 10.176421 | 7.368660e+07 | 1.244457e+06 |