06-01 实战项目1之分析链家房源信息
_____egon新书python全套来袭请看:https://egonlin.com/book.html
获取数据
链接:https://pan.baidu.com/s/1E8akk1gX9zppCViOQLDiUQ 密码:f66q
导入模块
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib as mpl
import matplotlib.pyplot as plt
from IPython.display import display
plt.style.use('fivethirtyeight')
sns.set_style({'font.sans-serif':['simhei','Arial']})
%matplotlib inline
数据规整
lj_df = pd.read_csv('E:\\Test\\DataAnalysis\\lianjia\\lianjia.csv')
display(lj_df.head())
Direction | District | Elevator | Floor | Garden | Id | Layout | Price | Region | Renovation | Size | Year | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 东西 | 灯市口 | NaN | 6 | 锡拉胡同21号院 | 101102647043 | 3室1厅 | 780.0 | 东城 | 精装 | 75.0 | 1988 |
1 | 南北 | 东单 | 无电梯 | 6 | 东华门大街 | 101102650978 | 2室1厅 | 705.0 | 东城 | 精装 | 60.0 | 1988 |
2 | 南西 | 崇文门 | 有电梯 | 16 | 新世界中心 | 101102672743 | 3室1厅 | 1400.0 | 东城 | 其他 | 210.0 | 1996 |
3 | 南 | 崇文门 | NaN | 7 | 兴隆都市馨园 | 101102577410 | 1室1厅 | 420.0 | 东城 | 精装 | 39.0 | 2004 |
4 | 南 | 陶然亭 | 有电梯 | 19 | 中海紫御公馆 | 101102574696 | 2室2厅 | 998.0 | 东城 | 精装 | 90.0 | 2010 |
# 获取所有数据列信息
lj_df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 23677 entries, 0 to 23676
Data columns (total 12 columns):
Direction 23677 non-null object
District 23677 non-null object
Elevator 15440 non-null object
Floor 23677 non-null int64
Garden 23677 non-null object
Id 23677 non-null int64
Layout 23677 non-null object
Price 23677 non-null float64
Region 23677 non-null object
Renovation 23677 non-null object
Size 23677 non-null float64
Year 23677 non-null int64
dtypes: float64(2), int64(3), object(7)
memory usage: 2.2+ MB
df = lj_df.copy()
df
Direction | District | Elevator | Floor | Garden | Id | Layout | Price | Region | Renovation | Size | Year | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 东西 | 灯市口 | NaN | 6 | 锡拉胡同21号院 | 101102647043 | 3室1厅 | 780.0 | 东城 | 精装 | 75.0 | 1988 |
1 | 南北 | 东单 | 无电梯 | 6 | 东华门大街 | 101102650978 | 2室1厅 | 705.0 | 东城 | 精装 | 60.0 | 1988 |
2 | 南西 | 崇文门 | 有电梯 | 16 | 新世界中心 | 101102672743 | 3室1厅 | 1400.0 | 东城 | 其他 | 210.0 | 1996 |
3 | 南 | 崇文门 | NaN | 7 | 兴隆都市馨园 | 101102577410 | 1室1厅 | 420.0 | 东城 | 精装 | 39.0 | 2004 |
4 | 南 | 陶然亭 | 有电梯 | 19 | 中海紫御公馆 | 101102574696 | 2室2厅 | 998.0 | 东城 | 精装 | 90.0 | 2010 |
5 | 南北 | 广渠门 | 有电梯 | 18 | 幸福家园二期 | 101102407993 | 2室1厅 | 1180.0 | 东城 | 其他 | 111.0 | 2003 |
6 | 南 | 西罗园 | 无电梯 | 6 | 西革新里110号院 | 101102629841 | 1室1厅 | 319.0 | 东城 | 其他 | 42.0 | 1992 |
7 | 南 | 西罗园 | 有电梯 | 16 | 建予园 | 101102378003 | 2室1厅 | 640.0 | 东城 | 其他 | 105.0 | 1999 |
8 | 南北 | 东花市 | 有电梯 | 9 | 富贵园一区 | 101102345859 | 3室2厅 | 1780.0 | 东城 | 精装 | 161.0 | 2003 |
9 | 东北 | 东直门 | 有电梯 | 25 | 万国城MOMA | 101102070529 | 2室2厅 | 1300.0 | 东城 | 精装 | 127.0 | 2002 |
10 | 南 | 工体 | 无电梯 | 5 | 十字坡东里 | 101102599410 | 1室1厅 | 405.0 | 东城 | 精装 | 37.0 | 1986 |
11 | 南 | 地安门 | 无电梯 | 5 | 帽儿胡同45号院 | 101102516190 | 2室1厅 | 700.0 | 东城 | 其他 | 50.0 | 1985 |
12 | 西 | 广渠门 | 有电梯 | 19 | 金桥国际 | 101102620368 | 1室1厅 | 462.0 | 东城 | 精装 | 54.0 | 2004 |
13 | 西 | 崇文门 | 有电梯 | 18 | 太华公寓 | 101102624056 | 1室0厅 | 518.0 | 东城 | 精装 | 64.0 | 2000 |
14 | 西南 | 菜户营 | 有电梯 | 23 | 信德园 | 101102691675 | 3室1厅 | 960.0 | 西城 | 其他 | 146.0 | 2002 |
15 | 东 | 木樨地 | 无电梯 | 4 | 西便门外大街 | 101102653830 | 2室0厅 | 457.0 | 西城 | 简装 | 50.0 | 1957 |
16 | 西北 | 马甸 | NaN | 18 | 双旗杆东里 | 101102570446 | 2室1厅 | 610.0 | 西城 | 简装 | 58.0 | 1986 |
17 | 北 | 马连道 | 有电梯 | 18 | 第三区 | 101102583180 | 2房间2卫 | 340.0 | 西城 | 精装 | 33.0 | 2011 |
18 | 西南 | 六铺炕 | 有电梯 | 17 | 六铺炕二区 | 101102306094 | 3室1厅 | 1120.0 | 西城 | 其他 | 78.0 | 1990 |
19 | 北 | 广安门 | 有电梯 | 26 | 荣丰2008 | 101101718499 | 1室0厅 | 320.0 | 西城 | 精装 | 28.0 | 2006 |
20 | 南北 | 牛街 | 有电梯 | 12 | 平原里小区 | 101102532889 | 2室1厅 | 596.0 | 西城 | 简装 | 59.0 | 1999 |
21 | 南北 | 木樨地 | 有电梯 | 18 | 真武庙六里 | 101102454060 | 2室1厅 | 888.0 | 西城 | 精装 | 78.0 | 1988 |
22 | 西北 | 右安门内 | 无电梯 | 7 | 右安门内大街 | 101102089935 | 1室1厅 | 405.0 | 西城 | 其他 | 45.0 | 1991 |
23 | 南北 | 西直门 | 无电梯 | 6 | 玉桃园二区 | 101102528745 | 2室1厅 | 650.0 | 西城 | 简装 | 60.0 | 1997 |
24 | 南北 | 马连道 | 无电梯 | 7 | 红莲南里 | 101102625441 | 2室1厅 | 470.0 | 西城 | 精装 | 61.0 | 1992 |
25 | 南 | 牛街 | NaN | 6 | 白广路6号院 | 101102562685 | 3室0厅 | 635.0 | 西城 | 简装 | 84.0 | 1955 |
26 | 西 | 亚运村小营 | 有电梯 | 7 | 育慧里一区 | 101102161792 | 1室0厅 | 343.0 | 朝阳 | 精装 | 52.0 | 2001 |
27 | 南北 | 望京 | 有电梯 | 10 | 大西洋新城A区 | 101102387406 | 2室2厅 | 835.0 | 朝阳 | 精装 | 86.0 | 1999 |
28 | 东西 | 团结湖 | 无电梯 | 6 | 团结湖路 | 101102395918 | 2室1厅 | 430.0 | 朝阳 | 精装 | 65.0 | 1980 |
29 | 南北 | 三元桥 | 有电梯 | 12 | 尚家楼48号院 | 101102691041 | 2室1厅 | 610.0 | 朝阳 | 精装 | 75.0 | 1998 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
23647 | 东南 | 和平里 | NaN | 6 | 和平里七区 | 101102564044 | 2室1厅 | 650.0 | 东城 | 精装 | 69.0 | 1995 |
23648 | 东西 | 工体 | NaN | 6 | 工体北里 | 101102547276 | 2室1厅 | 490.0 | 东城 | 毛坯 | 54.0 | 1984 |
23649 | 东南北 | 安贞 | NaN | 12 | 小黄庄二区 | 101102726945 | 4室1厅 | 1300.0 | 东城 | 简装 | 122.0 | 1996 |
23650 | 西 | 广渠门 | NaN | 29 | 广渠家园 | 101102653969 | 1室1厅 | 435.0 | 东城 | 精装 | 51.0 | 2009 |
23651 | 西南 | 和平里 | 无电梯 | 6 | 和平里七区 | 101102686119 | 2室1厅 | 540.0 | 东城 | 简装 | 56.0 | 1989 |
23652 | 南北 | 东直门 | NaN | 6 | 北官厅胡同2号院 | 101102669476 | 2室1厅 | 650.0 | 东城 | 精装 | 59.0 | 1985 |
23653 | 东南 | 朝阳门内 | NaN | 6 | 仓南胡同 | 101102422853 | 2室1厅 | 938.0 | 东城 | 简装 | 71.0 | 2003 |
23654 | 东 | 安定门 | NaN | 11 | 鼓楼外大街52号 | 101102492879 | 2室1厅 | 685.0 | 东城 | 简装 | 62.0 | 1992 |
23655 | 南北 | 崇文门 | NaN | 12 | 新裕家园 | 101102454084 | 3室1厅 | 1293.0 | 东城 | 精装 | 125.0 | 2004 |
23656 | 东西 | 崇文门 | NaN | 16 | 新景家园西区 | 101102532627 | 3室1厅 | 870.0 | 东城 | 精装 | 91.0 | 2004 |
23657 | 南西北 | 金宝街 | NaN | 5 | 史家胡同20号院 | 101102587502 | 2室0厅 | 686.0 | 东城 | 精装 | 46.0 | 1980 |
23658 | 南 | 工体 | NaN | 9 | 春秀路 | 101102587082 | 2室1厅 | 572.0 | 东城 | 简装 | 59.0 | 1998 |
23659 | 东西 | 朝阳门内 | NaN | 16 | 西水井胡同 | 101102328585 | 2室1厅 | 699.0 | 东城 | 简装 | 74.0 | 2003 |
23660 | 南北 | 东直门 | NaN | 14 | 民安小区东羊管胡同 | 101102328701 | 2室1厅 | 760.0 | 东城 | 精装 | 73.0 | 2002 |
23661 | 东 | 左安门 | NaN | 15 | 左安漪园 | 101102716957 | 3室1厅 | 950.0 | 东城 | 精装 | 113.0 | 2004 |
23662 | 南北 | 和平里 | NaN | 6 | 和平里九区 | 101102724566 | 3室1厅 | 670.0 | 东城 | 简装 | 67.0 | 1990 |
23663 | 西 | 和平里 | NaN | 20 | 和平里二区 | 101102668742 | 2室1厅 | 800.0 | 东城 | 精装 | 79.0 | 2006 |
23664 | 西南 | 和平里 | NaN | 6 | 和平里三区 | 101102647453 | 1室1厅 | 430.0 | 东城 | 简装 | 40.0 | 1996 |
23665 | 东北 | 永定门 | NaN | 6 | 定安里 | 101102729923 | 3室1厅 | 419.0 | 东城 | 精装 | 64.0 | 1984 |
23666 | 西北 | 陶然亭 | 有电梯 | 23 | 中海紫御公馆 | 101102184767 | 2室1厅 | 599.0 | 东城 | 简装 | 63.0 | 2010 |
23667 | 南北 | 永定门 | NaN | 6 | 定安里 | 101102724425 | 2室1厅 | 365.0 | 东城 | 精装 | 55.0 | 1984 |
23668 | 南北 | 东直门 | NaN | 6 | 海运仓小区 | 101102575113 | 3室1厅 | 950.0 | 东城 | 简装 | 82.0 | 2003 |
23669 | 西南 | 广渠门 | NaN | 22 | 京禧阁 | 101102509047 | 2室1厅 | 1050.0 | 东城 | 精装 | 119.0 | 2013 |
23670 | 南北 | 交道口 | NaN | 6 | 土儿胡同 | 101102411691 | 2室1厅 | 880.0 | 东城 | 简装 | 69.0 | 2002 |
23671 | 南北 | 和平里 | NaN | 5 | 甘水桥 | 101102292212 | 3室1厅 | 565.0 | 东城 | 简装 | 56.0 | 1983 |
23672 | 南北 | 广渠门 | NaN | 16 | 保利蔷薇 | 101102296423 | 2室1厅 | 1010.0 | 东城 | 简装 | 97.0 | 2008 |
23673 | 南北 | 永定门 | NaN | 6 | 郭庄北里 | 101102593534 | 2室1厅 | 468.0 | 东城 | 简装 | 66.0 | 1995 |
23674 | 南北 | 和平里 | NaN | 6 | 康鸿家园 | 101102549465 | 3室2厅 | 1400.0 | 东城 | 简装 | 155.0 | 2000 |
23675 | 南北 | 前门 | NaN | 6 | 台基厂头条10号院 | 101102322422 | 4室1厅 | 1100.0 | 东城 | 简装 | 107.0 | 1990 |
23676 | 南北 | 崇文门 | NaN | 15 | 新景家园东区 | 101102657079 | 1室1厅 | 790.0 | 东城 | 精装 | 81.0 | 2008 |
23677 rows × 12 columns
df['PerPrice'] = lj_df['Price']/lj_df['Size']
df
Direction | District | Elevator | Floor | Garden | Id | Layout | Price | Region | Renovation | Size | Year | PerPrice | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 东西 | 灯市口 | NaN | 6 | 锡拉胡同21号院 | 101102647043 | 3室1厅 | 780.0 | 东城 | 精装 | 75.0 | 1988 | 10.400000 |
1 | 南北 | 东单 | 无电梯 | 6 | 东华门大街 | 101102650978 | 2室1厅 | 705.0 | 东城 | 精装 | 60.0 | 1988 | 11.750000 |
2 | 南西 | 崇文门 | 有电梯 | 16 | 新世界中心 | 101102672743 | 3室1厅 | 1400.0 | 东城 | 其他 | 210.0 | 1996 | 6.666667 |
3 | 南 | 崇文门 | NaN | 7 | 兴隆都市馨园 | 101102577410 | 1室1厅 | 420.0 | 东城 | 精装 | 39.0 | 2004 | 10.769231 |
4 | 南 | 陶然亭 | 有电梯 | 19 | 中海紫御公馆 | 101102574696 | 2室2厅 | 998.0 | 东城 | 精装 | 90.0 | 2010 | 11.088889 |
5 | 南北 | 广渠门 | 有电梯 | 18 | 幸福家园二期 | 101102407993 | 2室1厅 | 1180.0 | 东城 | 其他 | 111.0 | 2003 | 10.630631 |
6 | 南 | 西罗园 | 无电梯 | 6 | 西革新里110号院 | 101102629841 | 1室1厅 | 319.0 | 东城 | 其他 | 42.0 | 1992 | 7.595238 |
7 | 南 | 西罗园 | 有电梯 | 16 | 建予园 | 101102378003 | 2室1厅 | 640.0 | 东城 | 其他 | 105.0 | 1999 | 6.095238 |
8 | 南北 | 东花市 | 有电梯 | 9 | 富贵园一区 | 101102345859 | 3室2厅 | 1780.0 | 东城 | 精装 | 161.0 | 2003 | 11.055901 |
9 | 东北 | 东直门 | 有电梯 | 25 | 万国城MOMA | 101102070529 | 2室2厅 | 1300.0 | 东城 | 精装 | 127.0 | 2002 | 10.236220 |
10 | 南 | 工体 | 无电梯 | 5 | 十字坡东里 | 101102599410 | 1室1厅 | 405.0 | 东城 | 精装 | 37.0 | 1986 | 10.945946 |
11 | 南 | 地安门 | 无电梯 | 5 | 帽儿胡同45号院 | 101102516190 | 2室1厅 | 700.0 | 东城 | 其他 | 50.0 | 1985 | 14.000000 |
12 | 西 | 广渠门 | 有电梯 | 19 | 金桥国际 | 101102620368 | 1室1厅 | 462.0 | 东城 | 精装 | 54.0 | 2004 | 8.555556 |
13 | 西 | 崇文门 | 有电梯 | 18 | 太华公寓 | 101102624056 | 1室0厅 | 518.0 | 东城 | 精装 | 64.0 | 2000 | 8.093750 |
14 | 西南 | 菜户营 | 有电梯 | 23 | 信德园 | 101102691675 | 3室1厅 | 960.0 | 西城 | 其他 | 146.0 | 2002 | 6.575342 |
15 | 东 | 木樨地 | 无电梯 | 4 | 西便门外大街 | 101102653830 | 2室0厅 | 457.0 | 西城 | 简装 | 50.0 | 1957 | 9.140000 |
16 | 西北 | 马甸 | NaN | 18 | 双旗杆东里 | 101102570446 | 2室1厅 | 610.0 | 西城 | 简装 | 58.0 | 1986 | 10.517241 |
17 | 北 | 马连道 | 有电梯 | 18 | 第三区 | 101102583180 | 2房间2卫 | 340.0 | 西城 | 精装 | 33.0 | 2011 | 10.303030 |
18 | 西南 | 六铺炕 | 有电梯 | 17 | 六铺炕二区 | 101102306094 | 3室1厅 | 1120.0 | 西城 | 其他 | 78.0 | 1990 | 14.358974 |
19 | 北 | 广安门 | 有电梯 | 26 | 荣丰2008 | 101101718499 | 1室0厅 | 320.0 | 西城 | 精装 | 28.0 | 2006 | 11.428571 |
20 | 南北 | 牛街 | 有电梯 | 12 | 平原里小区 | 101102532889 | 2室1厅 | 596.0 | 西城 | 简装 | 59.0 | 1999 | 10.101695 |
21 | 南北 | 木樨地 | 有电梯 | 18 | 真武庙六里 | 101102454060 | 2室1厅 | 888.0 | 西城 | 精装 | 78.0 | 1988 | 11.384615 |
22 | 西北 | 右安门内 | 无电梯 | 7 | 右安门内大街 | 101102089935 | 1室1厅 | 405.0 | 西城 | 其他 | 45.0 | 1991 | 9.000000 |
23 | 南北 | 西直门 | 无电梯 | 6 | 玉桃园二区 | 101102528745 | 2室1厅 | 650.0 | 西城 | 简装 | 60.0 | 1997 | 10.833333 |
24 | 南北 | 马连道 | 无电梯 | 7 | 红莲南里 | 101102625441 | 2室1厅 | 470.0 | 西城 | 精装 | 61.0 | 1992 | 7.704918 |
25 | 南 | 牛街 | NaN | 6 | 白广路6号院 | 101102562685 | 3室0厅 | 635.0 | 西城 | 简装 | 84.0 | 1955 | 7.559524 |
26 | 西 | 亚运村小营 | 有电梯 | 7 | 育慧里一区 | 101102161792 | 1室0厅 | 343.0 | 朝阳 | 精装 | 52.0 | 2001 | 6.596154 |
27 | 南北 | 望京 | 有电梯 | 10 | 大西洋新城A区 | 101102387406 | 2室2厅 | 835.0 | 朝阳 | 精装 | 86.0 | 1999 | 9.709302 |
28 | 东西 | 团结湖 | 无电梯 | 6 | 团结湖路 | 101102395918 | 2室1厅 | 430.0 | 朝阳 | 精装 | 65.0 | 1980 | 6.615385 |
29 | 南北 | 三元桥 | 有电梯 | 12 | 尚家楼48号院 | 101102691041 | 2室1厅 | 610.0 | 朝阳 | 精装 | 75.0 | 1998 | 8.133333 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
23647 | 东南 | 和平里 | NaN | 6 | 和平里七区 | 101102564044 | 2室1厅 | 650.0 | 东城 | 精装 | 69.0 | 1995 | 9.420290 |
23648 | 东西 | 工体 | NaN | 6 | 工体北里 | 101102547276 | 2室1厅 | 490.0 | 东城 | 毛坯 | 54.0 | 1984 | 9.074074 |
23649 | 东南北 | 安贞 | NaN | 12 | 小黄庄二区 | 101102726945 | 4室1厅 | 1300.0 | 东城 | 简装 | 122.0 | 1996 | 10.655738 |
23650 | 西 | 广渠门 | NaN | 29 | 广渠家园 | 101102653969 | 1室1厅 | 435.0 | 东城 | 精装 | 51.0 | 2009 | 8.529412 |
23651 | 西南 | 和平里 | 无电梯 | 6 | 和平里七区 | 101102686119 | 2室1厅 | 540.0 | 东城 | 简装 | 56.0 | 1989 | 9.642857 |
23652 | 南北 | 东直门 | NaN | 6 | 北官厅胡同2号院 | 101102669476 | 2室1厅 | 650.0 | 东城 | 精装 | 59.0 | 1985 | 11.016949 |
23653 | 东南 | 朝阳门内 | NaN | 6 | 仓南胡同 | 101102422853 | 2室1厅 | 938.0 | 东城 | 简装 | 71.0 | 2003 | 13.211268 |
23654 | 东 | 安定门 | NaN | 11 | 鼓楼外大街52号 | 101102492879 | 2室1厅 | 685.0 | 东城 | 简装 | 62.0 | 1992 | 11.048387 |
23655 | 南北 | 崇文门 | NaN | 12 | 新裕家园 | 101102454084 | 3室1厅 | 1293.0 | 东城 | 精装 | 125.0 | 2004 | 10.344000 |
23656 | 东西 | 崇文门 | NaN | 16 | 新景家园西区 | 101102532627 | 3室1厅 | 870.0 | 东城 | 精装 | 91.0 | 2004 | 9.560440 |
23657 | 南西北 | 金宝街 | NaN | 5 | 史家胡同20号院 | 101102587502 | 2室0厅 | 686.0 | 东城 | 精装 | 46.0 | 1980 | 14.913043 |
23658 | 南 | 工体 | NaN | 9 | 春秀路 | 101102587082 | 2室1厅 | 572.0 | 东城 | 简装 | 59.0 | 1998 | 9.694915 |
23659 | 东西 | 朝阳门内 | NaN | 16 | 西水井胡同 | 101102328585 | 2室1厅 | 699.0 | 东城 | 简装 | 74.0 | 2003 | 9.445946 |
23660 | 南北 | 东直门 | NaN | 14 | 民安小区东羊管胡同 | 101102328701 | 2室1厅 | 760.0 | 东城 | 精装 | 73.0 | 2002 | 10.410959 |
23661 | 东 | 左安门 | NaN | 15 | 左安漪园 | 101102716957 | 3室1厅 | 950.0 | 东城 | 精装 | 113.0 | 2004 | 8.407080 |
23662 | 南北 | 和平里 | NaN | 6 | 和平里九区 | 101102724566 | 3室1厅 | 670.0 | 东城 | 简装 | 67.0 | 1990 | 10.000000 |
23663 | 西 | 和平里 | NaN | 20 | 和平里二区 | 101102668742 | 2室1厅 | 800.0 | 东城 | 精装 | 79.0 | 2006 | 10.126582 |
23664 | 西南 | 和平里 | NaN | 6 | 和平里三区 | 101102647453 | 1室1厅 | 430.0 | 东城 | 简装 | 40.0 | 1996 | 10.750000 |
23665 | 东北 | 永定门 | NaN | 6 | 定安里 | 101102729923 | 3室1厅 | 419.0 | 东城 | 精装 | 64.0 | 1984 | 6.546875 |
23666 | 西北 | 陶然亭 | 有电梯 | 23 | 中海紫御公馆 | 101102184767 | 2室1厅 | 599.0 | 东城 | 简装 | 63.0 | 2010 | 9.507937 |
23667 | 南北 | 永定门 | NaN | 6 | 定安里 | 101102724425 | 2室1厅 | 365.0 | 东城 | 精装 | 55.0 | 1984 | 6.636364 |
23668 | 南北 | 东直门 | NaN | 6 | 海运仓小区 | 101102575113 | 3室1厅 | 950.0 | 东城 | 简装 | 82.0 | 2003 | 11.585366 |
23669 | 西南 | 广渠门 | NaN | 22 | 京禧阁 | 101102509047 | 2室1厅 | 1050.0 | 东城 | 精装 | 119.0 | 2013 | 8.823529 |
23670 | 南北 | 交道口 | NaN | 6 | 土儿胡同 | 101102411691 | 2室1厅 | 880.0 | 东城 | 简装 | 69.0 | 2002 | 12.753623 |
23671 | 南北 | 和平里 | NaN | 5 | 甘水桥 | 101102292212 | 3室1厅 | 565.0 | 东城 | 简装 | 56.0 | 1983 | 10.089286 |
23672 | 南北 | 广渠门 | NaN | 16 | 保利蔷薇 | 101102296423 | 2室1厅 | 1010.0 | 东城 | 简装 | 97.0 | 2008 | 10.412371 |
23673 | 南北 | 永定门 | NaN | 6 | 郭庄北里 | 101102593534 | 2室1厅 | 468.0 | 东城 | 简装 | 66.0 | 1995 | 7.090909 |
23674 | 南北 | 和平里 | NaN | 6 | 康鸿家园 | 101102549465 | 3室2厅 | 1400.0 | 东城 | 简装 | 155.0 | 2000 | 9.032258 |
23675 | 南北 | 前门 | NaN | 6 | 台基厂头条10号院 | 101102322422 | 4室1厅 | 1100.0 | 东城 | 简装 | 107.0 | 1990 | 10.280374 |
23676 | 南北 | 崇文门 | NaN | 15 | 新景家园东区 | 101102657079 | 1室1厅 | 790.0 | 东城 | 精装 | 81.0 | 2008 | 9.753086 |
23677 rows × 13 columns
# 重新摆放列位置
columns = ['Region', 'District', 'Garden', 'Layout', 'Floor', 'Year', 'Size', 'Elevator', 'Direction', 'Renovation', 'PerPrice', 'Price']
df = pd.DataFrame(df, columns = columns)
# 重新审视数据集
display(df.head(n=2))
Region | District | Garden | Layout | Floor | Year | Size | Elevator | Direction | Renovation | PerPrice | Price | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 东城 | 灯市口 | 锡拉胡同21号院 | 3室1厅 | 6 | 1988 | 75.0 | NaN | 东西 | 精装 | 10.40 | 780.0 |
1 | 东城 | 东单 | 东华门大街 | 2室1厅 | 6 | 1988 | 60.0 | 无电梯 | 南北 | 精装 | 11.75 | 705.0 |
数据分析
地区特征分析
# 对二手房区域分组对比二手房数量和每平米房价
df_house_count = df.groupby('Region')['Price'].count().sort_values(ascending=False).to_frame().reset_index()
df_house_mean = df.groupby('Region')['PerPrice'].mean().sort_values(ascending=False).to_frame().reset_index()
Region | Price | |
---|---|---|
0 | 海淀 | 2983 |
1 | 朝阳 | 2973 |
2 | 丰台 | 2952 |
3 | 昌平 | 2811 |
4 | 西城 | 2130 |
5 | 大兴 | 2115 |
6 | 通州 | 1602 |
7 | 东城 | 1533 |
8 | 房山 | 1442 |
9 | 顺义 | 1221 |
10 | 石景山 | 882 |
11 | 门头沟 | 496 |
12 | 亦庄开发区 | 469 |
13 | 平谷 | 41 |
14 | 怀柔 | 15 |
15 | 密云 | 12 |
Region | PerPrice | |
---|---|---|
0 | 西城 | 10.688348 |
1 | 东城 | 9.864243 |
2 | 海淀 | 8.847025 |
3 | 朝阳 | 7.317792 |
4 | 丰台 | 6.098628 |
5 | 石景山 | 5.535677 |
6 | 大兴 | 5.414790 |
7 | 通州 | 5.240839 |
8 | 顺义 | 4.974990 |
9 | 亦庄开发区 | 4.696853 |
10 | 昌平 | 4.402832 |
11 | 门头沟 | 4.017825 |
12 | 房山 | 3.948686 |
13 | 怀柔 | 3.934458 |
14 | 平谷 | 2.749869 |
15 | 密云 | 2.392645 |
f, [ax1,ax2,ax3] = plt.subplots(3,1,figsize=(20,15))
#
sns.barplot(x='Region', y='PerPrice', palette='Blues_d', data=df_house_mean, ax=ax1)
ax1.set_title('北京各大区二手房每平米单价对比',fontsize=15)
ax1.set_xlabel("区域")
ax1.set_ylabel('每平米单价')
sns.barplot(x='Region', y='Price', palette='Greens_d', data=df_house_count, ax=ax2)
ax2.set_title('北京各大区二手房数量对比',fontsize=15)
ax2.set_xlabel('区域')
ax2.set_ylabel('数量')
# 箱型图表
sns.boxplot(x='Region', y='Price', data=df, ax=ax3)
ax3.set_title('北京各大区二手房房屋总价',fontsize=15)
ax3.set_xlabel('区域')
ax3.set_ylabel('房屋总价')
plt.show()
房屋面积特征分析
f,[ax1,ax2] = plt.subplots(1,2,figsize = (15,5))
# 建房时的分布情况
sns.distplot(df['Size'],bins=20,ax=ax1,color='r')
sns.kdeplot(df['Size'],shade=True,ax=ax1)
# 建房时间和出售价格的关系
sns.regplot(x='Size',y='Price',data=df,ax=ax2)
plt.show()
Size分布
通过 distplot 和 kdeplot 绘制柱状图观察 Size 特征的分布情况,属于长尾类型的分布,这说明了有很多面积很大且超出正常范围的二手房。
Size和Price的关系
通过 regplot 绘制了 Size 和 Price 之间的散点图,发现 Size 特征基本与Price呈现线性关系,符合基本常识,面积越大,价格越高。
但是有两组明显的异常点:
- 面积不到10平米,但是价格超出10000万;
- 一个点面积超过了1000平米,价格很低
df.loc[df['Size']<10]
Region | District | Garden | Layout | Floor | Year | Size | Elevator | Direction | Renovation | PerPrice | Price | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1168 | 房山 | 长阳 | 世茂维拉 | 叠拼别墅 | 5 | 2015 | 5.0 | 毛坯 | 240.97平米 | 南北 | 216.000000 | 1080.0 |
1458 | 房山 | 长阳 | 世茂维拉 | 叠拼别墅 | 5 | 2015 | 5.0 | 毛坯 | 242.78平米 | 南北 | 220.000000 | 1100.0 |
1797 | 房山 | 长阳 | 世茂维拉 | 叠拼别墅 | 5 | 2015 | 5.0 | 精装 | 242.96平米 | 南北 | 196.000000 | 980.0 |
2268 | 顺义 | 顺义其它 | 龙湖好望山 | 叠拼别墅 | 4 | 2014 | 4.0 | 精装 | 295.88平米 | 南北 | 250.000000 | 1000.0 |
2274 | 顺义 | 顺义其它 | 鹭峯国际 | 叠拼别墅 | 4 | 2014 | 5.0 | 精装 | 295.01平米 | 南北 | 290.000000 | 1450.0 |
2276 | 顺义 | 顺义其它 | 龙湖好望山 | 叠拼别墅 | 3 | 2014 | 4.0 | 毛坯 | 292.31平米 | 南北 | 215.000000 | 860.0 |
2432 | 顺义 | 顺义其它 | 龙湖好望山 | 叠拼别墅 | 5 | 2013 | 6.0 | 精装 | 294.42平米 | 南北 | 163.333333 | 980.0 |
4078 | 大兴 | 西红门 | 鸿坤林语墅 | 叠拼别墅 | 3 | 2015 | 4.0 | 精装 | 427.5平米 | 南北 | 787.500000 | 3150.0 |
4079 | 大兴 | 西红门 | 鸿坤林语墅 | 叠拼别墅 | 4 | 2015 | 4.0 | 精装 | 361.8平米 | 南北 | 595.000000 | 2380.0 |
4761 | 大兴 | 西红门 | 鸿坤林语墅 | 叠拼别墅 | 3 | 2015 | 5.0 | 精装 | 386.83平米 | 南北 | 540.000000 | 2700.0 |
7533 | 昌平 | 回龙观 | 龙城花园N区 | 叠拼别墅 | 4 | 1997 | 2.0 | 简装 | 107.93平米 | 南北 | 310.000000 | 620.0 |
8765 | 通州 | 通州其它 | 旭辉御锦 | 叠拼别墅 | 6 | 2014 | 5.0 | 毛坯 | 195.32平米 | 南北 | 156.000000 | 780.0 |
9020 | 通州 | 通州其它 | 旭辉御锦 | 叠拼别墅 | 6 | 2014 | 4.0 | 精装 | 259.87平米 | 南北 | 280.000000 | 1120.0 |
9080 | 通州 | 通州其它 | 旭辉御锦 | 叠拼别墅 | 6 | 2014 | 4.0 | 毛坯 | 259.76平米 | 南北 | 262.500000 | 1050.0 |
9203 | 通州 | 通州其它 | 旭辉御锦 | 叠拼别墅 | 6 | 2014 | 4.0 | 精装 | 260.07平米 | 南北 | 262.500000 | 1050.0 |
9254 | 通州 | 通州其它 | 旭辉御锦 | 叠拼别墅 | 6 | 2014 | 4.0 | 毛坯 | 264.6平米 | 南北 | 275.000000 | 1100.0 |
11531 | 丰台 | 丽泽 | 西宸原著 | 叠拼别墅 | 6 | 2016 | 4.0 | 毛坯 | 335.51平米 | 南北 | 1000.000000 | 4000.0 |
14298 | 海淀 | 西山 | 中间建筑一区 | 叠拼别墅 | 3 | 2007 | 8.0 | 精装 | 266.61平米 | 南北 | 168.750000 | 1350.0 |
15334 | 海淀 | 西山 | 西山美墅馆F区 | 叠拼别墅 | 4 | 2004 | 4.0 | 简装 | 203.73平米 | 南北 | 550.000000 | 2200.0 |
17311 | 朝阳 | 大望路 | 首府官邸 | 叠拼别墅 | 5 | 2007 | 5.0 | 精装 | 523.4平米 | 南北 | 900.000000 | 4500.0 |
所有面积小于10的数据全部都是别墅,数据出现异常的原因是由于别墅的结构比较特殊(无朝向无电梯),字段定义与二手商品房不太一样导致爬虫爬取数据错位。也因别墅类型二手房不在我们的考虑范围之内,故将其移除再次观察Size分布和Price关系。
df.loc[df['Size']>1000]
Region | District | Garden | Layout | Floor | Year | Size | Elevator | Direction | Renovation | PerPrice | Price | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
8754 | 通州 | 通州其它 | 新华联科技大厦 | 1房间0卫 | 8 | 2009 | 1019.0 | 有电梯 | 南 | 简装 | 1.668302 | 1700.0 |
运行发现房屋面积大于1000的不是普通的民用住房,而是商业用房,所以才会出现1室0厅有1000多平米,所以也需要移除
df = df[(df['Layout']!='叠拼别墅')&(df['Size']<1000)]
重新可视化就没有异常数据了
f,[ax1,ax2] = plt.subplots(1,2,figsize = (15,5))
# 建房时的分布情况
sns.distplot(df['Size'],bins=20,ax=ax1,color='r')
sns.kdeplot(df['Size'],shade=True,ax=ax1)
# 建房时间和出售价格的关系
sns.regplot(x='Size',y='Price',data=df,ax=ax2)
plt.show()
户型特征分析
f,ax1=plt.subplots(figsize=(20,20))
sns.countplot(y='Layout',data=df,ax=ax1)
ax1.set_title("房屋户型",fontsize=15)
ax1.set_xlabel("数量")
ax1.set_ylabel("户型")
plt.show()
户型特征的厅室搭配花样太多了,各种奇怪的结构,像这种类型的特征是肯定不能作为机器学习模型的数据输入的,需要使用特征工程进行相应的处理
Renovation特征分析
df['Renovation'].value_counts()
精装 11345
简装 8496
其他 3239
毛坯 576
Name: Renovation, dtype: int64
# 画幅设置
f, [ax1,ax2,ax3] = plt.subplots(1, 3, figsize=(20, 5))
sns.countplot(df['Renovation'], ax=ax1)
sns.barplot(x='Renovation', y='Price', data=df, ax=ax2)
sns.boxplot(x='Renovation', y='Price', data=df, ax=ax3)
plt.show()
电梯特征分析
其实在最开始的时候我们也能发现,Elevator 特征是存在大量的缺失值的,所以需要进行一些处理
# 查看缺失值数量
misn = len(df.loc[(df['Elevator'].isnull()), 'Elevator'])
print('Elevator缺失值数量为:'+ str(misn))
Elevator缺失值数量为:8237
常见的处理缺失值的方法有:平均数、中位数填补/删除缺失值/根据其他特征建模预测等。
但是有无电梯并不是具体的数据,根本不存在平均数、中位数这么一说。这就需要换一种思路了,国家规定楼层超过6层就必须要有电梯,小于6层的就没有。就可以以这个标准来进行判断
df['Elevator'] = df.loc[(df['Elevator'] == '有电梯')|(df['Elevator'] == '无电梯'),'Elevator']
# 填补Elevator缺失值
df.loc[(df['Floor'] > 6)&(df['Elevator'].isnull()),'Elevator'] = '有电梯'
df.loc[(df['Floor'] <= 6)&(df['Elevator'].isnull()),'Elevator'] = '无电梯'
f, [ax1,ax2] = plt.subplots(1, 2, figsize=(20, 10))
sns.countplot(df['Elevator'], ax=ax1)
ax1.set_title('有无电梯数量对比',fontsize=15)
ax1.set_xlabel('是否有电梯')
ax1.set_ylabel('数量')
sns.barplot(x='Elevator', y='Price', data=df, ax=ax2)
ax2.set_title('有无电梯房价对比',fontsize=15)
ax2.set_xlabel('是否有电梯')
ax2.set_ylabel('总价')
Text(0, 0.5, '总价')
年份特征分析
grid = sns.FacetGrid(df,row='Elevator',col='Renovation',palette='seismic')
grid.map(plt.scatter,'Year','Price')
grid.add_legend()
<seaborn.axisgrid.FacetGrid at 0x1f133f01e48>
整个二手房房价趋势是随着时间增长而增长的;
2000年以后建造的二手房房价相较于2000年以前有很明显的价格上涨;
1980年之前几乎不存在有电梯二手房数据,说明1980年之前还没有大面积安装电梯;
1980年之前无电梯二手房中,简装二手房占绝大多数,精装反而很少;
楼层特征分析
f, ax1= plt.subplots(figsize=(20,5))
sns.countplot(x='Floor', data=df, ax=ax1)
ax1.set_title('房屋户型',fontsize=15)
ax1.set_xlabel('数量')
ax1.set_ylabel('户型')
plt.show()
可以看到,6层二手房数量最多,但是单独的楼层特征没有什么意义,因为每个小区住房的总楼层数都不一样,我们需要知道楼层的相对意义。另外,楼层与文化也有很重要联系,比如中国文化七上八下,七层可能受欢迎,房价也贵,而一般也不会有4层或18层。当然,正常情况下中间楼层是比较受欢迎的,价格也高,底层和顶层受欢迎度较低,价格也相对较低。所以楼层是一个非常复杂的特征,对房价影响也比较大。
特征工程
特征工程包括的内容很多,有特征清洗,预处理,监控等,而预处理根据单一特征或多特征又分很多种方法,如归一化,降维,特征选择,特征筛选等等。这么多的方法,为的是什么呢?其目的是让这些特征更友好的作为模型的输入,处理数据的好坏会严重的影响模型性能,而好的特征工程有的时候甚至比建模调参更重要。
"""
特征工程
"""
# 移除结构类型异常值和房屋大小异常值
df = df[(df['Layout']!='叠拼别墅')&(df['Size']<1000)]
# 去掉错误数据“南北”,因为爬虫过程中一些信息位置为空,导致“Direction”的特征出现在这里,需要清除或替换
df['Renovation'] = df.loc[(df['Renovation'] != '南北'), 'Renovation']
# 由于存在个别类型错误,如简装和精装,特征值错位,故需要移除
df['Elevator'] = df.loc[(df['Elevator'] == '有电梯')|(df['Elevator'] == '无电梯'), 'Elevator']
# 填补Elevator缺失值
df.loc[(df['Floor']>6)&(df['Elevator'].isnull()), 'Elevator'] = '有电梯'
df.loc[(df['Floor']<=6)&(df['Elevator'].isnull()), 'Elevator'] = '无电梯'
# 只考虑“室”和“厅”,将其它少数“房间”和“卫”移除
df = df.loc[df['Layout'].str.extract('^\d(.*?)\d.*?') == '室']
# 提取“室”和“厅”创建新特征
df['Layout_room_num'] = df['Layout'].str.extract('(^\d).*', expand=False).astype('int64')
df['Layout_hall_num'] = df['Layout'].str.extract('^\d.*?(\d).*', expand=False).astype('int64')
# 按中位数对“Year”特征进行分箱
df['Year'] = pd.qcut(df['Year'],8).astype('object')
# 对“Direction”特征
d_list_one = ['东','西','南','北']
d_list_two = ['东西','东南','东北','西南','西北','南北']
d_list_three = ['东西南','东西北','东南北','西南北']
d_list_four = ['东西南北']
df['Direction'] = df['Direction'].apply(direct_func)
df = df.loc[(df['Direction']!='no')&(df['Direction']!='nan')]
# 根据已有特征创建新特征
df['Layout_total_num'] = df['Layout_room_num'] + df['Layout_hall_num']
df['Size_room_ratio'] = df['Size']/df['Layout_total_num']
# 删除无用特征
df = df.drop(['Layout','PerPrice','Garden'],axis=1)
# 对于object特征进行onehot编码
df,df_cat = one_hot_encoder(df)