链家租房数据基本分析
import pandas as pdlj_data = pd.read_csv('LJdata.csv')#原始列名lj_data.columns#Index(['区域', '地址', '标题', '户型', '面积', '价格', '楼层', '建造时间', '朝向', '更新时间', '看房人数','备注', '链接地址'],dtype='object')lj_data.columns =
·
import pandas as pd
lj_data = pd.read_csv('LJdata.csv')
#原始列名
lj_data.columns
#Index(['区域', '地址', '标题', '户型', '面积', '价格', '楼层', '建造时间', '朝向', '更新时间', '看房人数','备注', '链接地址'],dtype='object')
lj_data.columns = ['district', 'address', 'title', 'house_type', 'area',
'price', 'floor', 'build_time', 'direction', 'update_time', 'view_num', 'extra_info', 'link']
lj_data.head(5)
district | address | title | house_type | area | price | floor | build_time | direction | update_time | view_num | extra_info | link | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 燕莎租房 | 新源街 | 亮马桥 新源街 精装两居 交通便利 看房方便 随时入住 | 2室1厅 | 50平米 | 5800 | 中楼层(共6层) | 1981年建板楼 | 南 | 2017.07.21 | 26 | 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101803342.html |
1 | 望京租房 | 澳洲康都 | 澳洲康都东向精致两居室........... | 2室1厅 | 79平米 | 7800 | 中楼层(共28层) | 2005年建板塔结合 | 东 | 2017.07.23 | 33 | 距离14号线(东段)东湖渠站731米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101753126.html |
2 | 广安门租房 | 远见名苑 | 远见名苑 东向两居室 独立小区环境 适合居家 | 2室1厅 | 86平米 | 8000 | 低楼层(共25层) | 2006年建塔楼 | 东 | 2017.07.20 | 34 | 距离7号线达官营站684米 随时看房 精装修 自供暖 | https://bj.lianjia.com/zufang/101101756753.html |
3 | 天通苑租房 | 天通苑北一区 | 北一区简装两居,采光好,视野美,出行方便 | 2室1厅 | 103平米 | 5300 | 低楼层(共13层) | 2004年建板楼 | 东南 | 2017.07.25 | 30 | 距离5号线天通苑站927米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101780034.html |
4 | 团结湖租房 | 团结湖北口 | 团结湖北口近地铁高楼层朝南向精装修正规两居室 | 2室1厅 | 63平米 | 6400 | 高楼层(共16层) | 1982年建塔楼 | 南 | 2017.07.26 | 30 | 距离10号线团结湖站88米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101781083.html |
lj_data.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2760 entries, 0 to 2759
Data columns (total 13 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 district 2760 non-null object
1 address 2760 non-null object
2 title 2760 non-null object
3 house_type 2760 non-null object
4 area 2760 non-null object
5 price 2760 non-null int64
6 floor 2760 non-null object
7 build_time 2758 non-null object
8 direction 2760 non-null object
9 update_time 2760 non-null object
10 view_num 2760 non-null int64
11 extra_info 2760 non-null object
12 link 2760 non-null object
dtypes: int64(2), object(11)
memory usage: 280.4+ KB
'''
lj_data.shape
#(2760, 13)
lj_data.describe() #只能计算数值型的
price | view_num | |
---|---|---|
count | 2760.000000 | 2760.000000 |
mean | 7570.800725 | 13.448913 |
std | 6316.204986 | 12.746202 |
min | 1300.000000 | 0.000000 |
25% | 4500.000000 | 4.000000 |
50% | 6000.000000 | 10.000000 |
75% | 8500.000000 | 19.000000 |
max | 210000.000000 | 122.000000 |
最贵和最便宜的房子
lj_data.loc[lj_data['price']==210000]
lj_data.loc[lj_data['price']==1300]
lj_data[lj_data['price']==lj_data['price'].min()]
lj_data[lj_data['price']==lj_data['price'].max()]
lj_data.sort_values(by='price').head(1)
lj_data.sort_values(by='price').tail(1)
district | address | title | house_type | area | price | floor | build_time | direction | update_time | view_num | extra_info | link | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2658 | 和平里租房 | 雍和家园二期 | 雍和家园 底商出租 使用面积720米 | 6室3厅 | 720平米 | 210000 | 低楼层(共6层) | 2005年建板楼 | 南 | 2017.07.26 | 21 | 距离2号线雍和宫站293米 随时看房 集中供暖 | https://bj.lianjia.com/zufang/101101672514.htm |
找到最近新上的10套房子
lj_data.sort_values(by='update_time', ascending=False).head(10)
#查看所有更新时间
lj_data['update_time'].unique()
'''
array(['2017.07.21', '2017.07.23', '2017.07.20', '2017.07.25',
'2017.07.26', '2017.07.16', '2017.07.22', '2017.07.24',
'2017.07.27', '2017.07.19', '2017.07.14', '2017.07.15',
'2017.07.17', '2017.07.18'], dtype=object)
'''
看房人数
lj_data['view_num'].mean() #平均值
#13.44891304347826
lj_data['view_num'].median() #中位数
#10.0
# 不同看房人数的房源数量
tmp_df =lj_data['view_num'].value_counts().to_frame().reset_index()
tmp_df
index | view_num | |
---|---|---|
0 | 0 | 152 |
1 | 1 | 149 |
2 | 4 | 147 |
3 | 2 | 143 |
4 | 7 | 136 |
... | ... | ... |
69 | 80 | 1 |
70 | 74 | 1 |
71 | 72 | 1 |
72 | 58 | 1 |
73 | 86 | 1 |
74 rows × 2 columns
tmp_df.columns = ['view_num', 'count']
tmp_df.sort_values(by='view_num', inplace=True) #inplace=True直接在原始数据中保存排序之后的结果
tmp_df.head()
view_num | count | |
---|---|---|
0 | 0 | 152 |
1 | 1 | 149 |
3 | 2 | 143 |
5 | 3 | 129 |
2 | 4 | 147 |
#画图 inline不会另外生成图片,在下面展示
%matplotlib inline
tmp_df['count'].plot(kind='bar',figsize=(20,10))
房龄最小的10套房子的平均看房人数、平均面积
def get_front_4_num(x):
try:
return int(x[:4])#取前四位为年份
except:
return -1
lj_data.loc[:,'house_age'] = 2019-lj_data['build_time'].apply(get_front_4_num)
lj_data
district | address | title | house_type | area | price | floor | build_time | direction | update_time | view_num | extra_info | link | house_age | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 燕莎租房 | 新源街 | 亮马桥 新源街 精装两居 交通便利 看房方便 随时入住 | 2室1厅 | 50平米 | 5800 | 中楼层(共6层) | 1981年建板楼 | 南 | 2017.07.21 | 26 | 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101803342.html | 38 |
1 | 望京租房 | 澳洲康都 | 澳洲康都东向精致两居室........... | 2室1厅 | 79平米 | 7800 | 中楼层(共28层) | 2005年建板塔结合 | 东 | 2017.07.23 | 33 | 距离14号线(东段)东湖渠站731米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101753126.html | 14 |
2 | 广安门租房 | 远见名苑 | 远见名苑 东向两居室 独立小区环境 适合居家 | 2室1厅 | 86平米 | 8000 | 低楼层(共25层) | 2006年建塔楼 | 东 | 2017.07.20 | 34 | 距离7号线达官营站684米 随时看房 精装修 自供暖 | https://bj.lianjia.com/zufang/101101756753.html | 13 |
3 | 天通苑租房 | 天通苑北一区 | 北一区简装两居,采光好,视野美,出行方便 | 2室1厅 | 103平米 | 5300 | 低楼层(共13层) | 2004年建板楼 | 东南 | 2017.07.25 | 30 | 距离5号线天通苑站927米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101780034.html | 15 |
4 | 团结湖租房 | 团结湖北口 | 团结湖北口近地铁高楼层朝南向精装修正规两居室 | 2室1厅 | 63平米 | 6400 | 高楼层(共16层) | 1982年建塔楼 | 南 | 2017.07.26 | 30 | 距离10号线团结湖站88米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101781083.html | 37 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
2755 | 朝青租房 | 天鹅湾北区 | 天鹅湾北区 1室1厅 9500元 | 1室1厅 | 50平米 | 9500 | 中楼层(共8层) | 2010年建板塔结合 | 南 | 2017.07.27 | 13 | 距离6号线青年路站736米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101697995.html | 9 |
2756 | 太阳宫租房 | 水星园 | 水星园精装一居室 可自带家具家电 业主也可配齐 | 1室1厅 | 68平米 | 9500 | 中楼层(共23层) | 2005年建板塔结合 | 北 | 2017.07.24 | 14 | 距离10号线太阳宫站432米 随时看房 集中供暖 | https://bj.lianjia.com/zufang/101101698013.html | 14 |
2757 | 六里桥租房 | 莲花小区 | 莲花小区 西南两居室 温馨舒适 楼层合适 | 2室1厅 | 84平米 | 7200 | 低楼层(共28层) | 1999年建板塔结合 | 西南 | 2017.07.26 | 7 | 距离10号线莲花桥站661米 随时看房 集中供暖 | https://bj.lianjia.com/zufang/101101702130.html | 20 |
2758 | 陶然亭租房 | 中海紫御公馆 | 中海紫御公馆 把您的家安放在花园里 | 2室2厅 | 91平米 | 12000 | 中楼层(共22层) | 2010年建板塔结合 | 南 | 2017.07.26 | 6 | 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101703605.html | 9 |
2759 | 三元桥租房 | 曙光里 | 曙光里南向 高层两居室 随时看房 | 2室1厅 | 62平米 | 6200 | 高楼层(共18层) | 1992年建塔楼 | 南 | 2017.07.25 | 19 | 距离机场线三元桥站980米 随时看房 集中供暖 | https://bj.lianjia.com/zufang/101101704735.html | 27 |
2760 rows × 14 columns
lj_data.info()
'''
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2760 entries, 0 to 2759
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 district 2760 non-null object
1 address 2760 non-null object
2 title 2760 non-null object
3 house_type 2760 non-null object
4 area 2760 non-null object
5 price 2760 non-null int64
6 floor 2760 non-null object
7 build_time 2758 non-null object
8 direction 2760 non-null object
9 update_time 2760 non-null object
10 view_num 2760 non-null int64
11 extra_info 2760 non-null object
12 link 2760 non-null object
13 house_age 2760 non-null int64
dtypes: int64(3), object(11)
memory usage: 302.0+ KB
'''
#面积空值判断 area没有空值,不用判断
#截取面积数值部分
lj_data.loc[:,'area'] = lj_data['area'].apply(lambda x:x[:-2]).apply(lambda x:float(x)) #float只有转换类型,后面才能做计算
lj_data.head()
district | address | title | house_type | area | price | floor | build_time | direction | update_time | view_num | extra_info | link | house_age | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 燕莎租房 | 新源街 | 亮马桥 新源街 精装两居 交通便利 看房方便 随时入住 | 2室1厅 | 50.0 | 5800 | 中楼层(共6层) | 1981年建板楼 | 南 | 2017.07.21 | 26 | 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101803342.html | 38 |
1 | 望京租房 | 澳洲康都 | 澳洲康都东向精致两居室........... | 2室1厅 | 79.0 | 7800 | 中楼层(共28层) | 2005年建板塔结合 | 东 | 2017.07.23 | 33 | 距离14号线(东段)东湖渠站731米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101753126.html | 14 |
2 | 广安门租房 | 远见名苑 | 远见名苑 东向两居室 独立小区环境 适合居家 | 2室1厅 | 86.0 | 8000 | 低楼层(共25层) | 2006年建塔楼 | 东 | 2017.07.20 | 34 | 距离7号线达官营站684米 随时看房 精装修 自供暖 | https://bj.lianjia.com/zufang/101101756753.html | 13 |
3 | 天通苑租房 | 天通苑北一区 | 北一区简装两居,采光好,视野美,出行方便 | 2室1厅 | 103.0 | 5300 | 低楼层(共13层) | 2004年建板楼 | 东南 | 2017.07.25 | 30 | 距离5号线天通苑站927米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101780034.html | 15 |
4 | 团结湖租房 | 团结湖北口 | 团结湖北口近地铁高楼层朝南向精装修正规两居室 | 2室1厅 | 63.0 | 6400 | 高楼层(共16层) | 1982年建塔楼 | 南 | 2017.07.26 | 30 | 距离10号线团结湖站88米 随时看房 精装修 集中供暖 | https://bj.lianjia.com/zufang/101101781083.html | 37 |
lj_data.describe()
area | price | view_num | house_age | |
---|---|---|---|---|
count | 2760.000000 | 2760.000000 | 2760.000000 | 2760.000000 |
mean | 87.658696 | 7570.800725 | 13.448913 | 22.283333 |
std | 41.862928 | 6316.204986 | 12.746202 | 85.577865 |
min | 19.000000 | 1300.000000 | 0.000000 | 3.000000 |
25% | 58.000000 | 4500.000000 | 4.000000 | 12.000000 |
50% | 80.000000 | 6000.000000 | 10.000000 | 16.000000 |
75% | 103.000000 | 8500.000000 | 19.000000 | 23.000000 |
max | 720.000000 | 210000.000000 | 122.000000 | 2020.000000 |
lj_data.info()
'''
lj_data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2760 entries, 0 to 2759
Data columns (total 14 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 district 2760 non-null object
1 address 2760 non-null object
2 title 2760 non-null object
3 house_type 2760 non-null object
4 area 2760 non-null float64
5 price 2760 non-null int64
6 floor 2760 non-null object
7 build_time 2758 non-null object
8 direction 2760 non-null object
9 update_time 2760 non-null object
10 view_num 2760 non-null int64
11 extra_info 2760 non-null object
12 link 2760 non-null object
13 house_age 2760 non-null int64
dtypes: float64(1), int64(3), object(10)
memory usage: 302.0+ KB
'''
房子价格的分布
import numpy as np
print(lj_data['price'].mean()) #平均值
print(lj_data['price'].std()) #方差
print(lj_data['price'].median()) #中位数
'''
7570.800724637681
6316.204986067457
6000.0
'''
看房人数最多的朝向
popular_direction = lj_data.groupby('direction',as_index=False)[['view_num']].sum()
popular_direction[popular_direction['view_num']==popular_direction['view_num'].max()]
direction | view_num | |
---|---|---|
23 | 南 北 | 11785 |
房型分布情况
house_type_dis = lj_data.groupby(['house_type']).count()
%matplotlib inline
house_type_dis['district'].plot(kind='pie') #饼图
house_type_dis['district'].plot(kind='bar') #柱状图
最受欢迎的房型
tmp = lj_data.groupby('house_type').agg({'view_num':'sum'})
tmp = tmp.reset_index()
tmp[tmp['view_num']==tmp['view_num'].max()]
house_type | view_num | |
---|---|---|
5 | 2室1厅 | 17589 |
房子的平均租房价格 (元/平米)
lj_data.loc[:,'price_per_m2'] = lj_data['price']/lj_data['area']
lj_data['price_per_m2'].mean()
#87.72268429900429
热门小区
address_df = lj_data[['address','view_num']].groupby(['address']).sum()
address_df = address_df.reset_index()
address_df.sort_values(by='view_num', ascending=False)
address | view_num | |
---|---|---|
951 | 清芷园 | 246 |
369 | 卡布其诺 | 245 |
938 | 润枫水尚 | 217 |
1149 | 芍药居北里 | 194 |
743 | 新康园 | 186 |
... | ... | ... |
383 | 双河北里 | 0 |
191 | 人民大学北路19号院 | 0 |
763 | 方舟苑二期 | 0 |
758 | 新风街 | 0 |
482 | 大柳树13号院 | 0 |
1473 rows × 2 columns
出租房源最多的小区
tmp_df2 = lj_data[['address','view_num']].groupby(['address']).count()
tmp_df2 = tmp_df2.reset_index()
tmp_df2.columns = ['address','count']
tmp_df2.nlargest(columns='count', n=1)
address | count | |
---|---|---|
1288 | 远洋山水 | 19 |
集中供暖 平均价格
def center_heating(x):
return 1 if "集中供暖" in x else 0
lj_data.loc[:,'center_heating'] = lj_data['extra_info'].apply(lambda x:center_heating(x))
lj_data['center_heating'].value_counts()
lj_data[['center_heating','price']].groupby('center_heating').mean()
price | |
---|---|
center_heating | |
0 | 7317.436975 |
1 | 7623.603327 |
不同房型的平均/最大/最小面积
house_type_info = lj_data[['house_type','area']].groupby("house_type")\
.agg({"area":{'mean','max', 'min'}})
house_type_info
area | |||
---|---|---|---|
mean | max | min | |
house_type | |||
1室0厅 | 48.484076 | 140.0 | 19.0 |
1室1厅 | 54.669584 | 107.0 | 28.0 |
1室2厅 | 72.411765 | 109.0 | 45.0 |
1房间1卫 | 42.875000 | 48.0 | 35.0 |
2室0厅 | 49.888889 | 55.0 | 42.0 |
2室1厅 | 78.725857 | 194.0 | 26.0 |
2室2厅 | 106.028169 | 228.0 | 60.0 |
2房间1卫 | 60.166667 | 67.0 | 52.0 |
2房间2卫 | 37.000000 | 38.0 | 36.0 |
3室0厅 | 67.000000 | 70.0 | 61.0 |
3室1厅 | 114.237197 | 217.0 | 54.0 |
3室2厅 | 145.690821 | 255.0 | 79.0 |
3室3厅 | 144.000000 | 181.0 | 123.0 |
3房间1卫 | 85.333333 | 91.0 | 77.0 |
3房间2卫 | 46.750000 | 63.0 | 39.0 |
4室1厅 | 165.285714 | 330.0 | 87.0 |
4室2厅 | 196.333333 | 304.0 | 119.0 |
4室3厅 | 179.000000 | 237.0 | 150.0 |
5室1厅 | 138.250000 | 180.0 | 99.0 |
5室2厅 | 242.125000 | 332.0 | 181.0 |
5室3厅 | 191.600000 | 219.0 | 135.0 |
5房间2卫 | 158.000000 | 158.0 | 158.0 |
6室2厅 | 274.000000 | 316.0 | 232.0 |
6室3厅 | 720.000000 | 720.0 | 720.0 |
哪个地铁口附近房源最多
import re
#距离14号线(东段)东湖渠站731米 随时看房 精装修 集中供暖
def find_sub_station(x):
try:
return re.search(pattern="(.+号线)(.+站)([0-9]+)米", string=x).group(2)
except:
return None
lj_data.loc[:,'sub_station'] = lj_data['extra_info'].apply(find_sub_station)
#统计
lj_data[['sub_station','link']].groupby('sub_station').count()
link | |
---|---|
sub_station | |
(东段)东湖渠站 | 21 |
(东段)东风北桥站 | 13 |
(东段)北工大西门站 | 8 |
(东段)将台站 | 14 |
(东段)方庄站 | 13 |
... | ... |
黄村火车站站 | 3 |
黄村西大街站 | 3 |
黄渠站 | 6 |
鼓楼大街站 | 9 |
龙泽站 | 2 |
190 rows × 1 columns
是否有地铁 价格比较¶
def has_sub_station(x):
return 1 if "距离" in x else 0
lj_data.loc[:,'has_sub_station'] = lj_data['extra_info'].apply(has_sub_station)
lj_data[['has_sub_station','price']].groupby('has_sub_station').agg('mean')
price | |
---|---|
has_sub_station | |
0 | 6106.436464 |
1 | 8520.800478 |
地铁附近房源距离地铁平均距离
#距离14号线(东段)东湖渠站731米 随时看房 精装修 集中供暖
def cal_sub_station_distance(x):
try:
return int(re.search(pattern="(.+号线)(.+站)([0-9]+)米", string=x).group(3))
except:
return None
lj_data.loc[:,'distance'] = lj_data['extra_info'].apply(cal_sub_station_distance)
lj_data['distance'].mean()
#709.1182364729459
在租房源楼层情况
def get_floor(x):
if '低楼层' in x:
return '低楼层'
elif '中楼层' in x:
return '中楼层'
else:
return '高楼层'
lj_data.loc[:,'floor'] = lj_data['floor'].apply(get_floor)
lj_data.loc[:,'floor']
0 中楼层
1 中楼层
2 低楼层
3 低楼层
4 高楼层
...
2755 中楼层
2756 中楼层
2757 低楼层
2758 中楼层
2759 高楼层
Name: floor, Length: 2760, dtype: object

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)