使用 Python 对链家网站上的北京二手房进行简单数据分析
最编程
2024-06-03 17:23:54
...
#首先我用爬虫获取到了链家二手房的一万多条信息,我在爬去的时候对空置进行了处理
本文主要讲述如何通过pandas对爬虫下来的链家数据进行相应的二手房数据分析,主要分析内容包括各个区,各个小区的房源信息情况
#导入主要的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt #读取数据 house = pd.read_csv(r'C:\Users\cz\Desktop\fang.csv',names=['id','title','link','community','housetype','direction','floor','region','totalprice','followinfo','unitprice','acreage','frequency'])
#然后查看是否有数据
#获取总价格全五的数据 house.sort_values('totalprice',ascending=False).head(5)
#结果
id | title | link | community | housetype | direction | floor | region | totalprice | followinfo | unitprice | acreage | frequency | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
3 | 917 | 桃花岛 南北全名三居室 满五年 中间楼层 得房率93.4% | https://bj.lianjia.com/ershoufang/101102706320... | 桃花岛 | 3室2厅 | 南 北 | 6 | 通州 | 600.0 | 23 | 50113 | 119.73平米 | 0 |
0 | 914 | 满五年唯一南北通透大2居 板楼1层2户 全天采光视野好 | https://bj.lianjia.com/ershoufang/101102810716... | 天通西苑三区 | 2室2厅 | 南 北 | 13 | 昌平 | 499.0 | 25 | 37209 | 134.11平米 | 25 |
2 | 916 | 南北通透大3居+低楼层+落地窗户+生活方便 | https://bj.lianjia.com/ershoufang/101102750110... | 华龙小区 | 3室1厅 | 南 北 | 6 | 通州 | 466.0 | 35 | 37930 | 122.86平米 | 1 |
1 | 915 | 满两年 南北通透 随时可看 诚心出售 | https://bj.lianjia.com/ershoufang/101102910958... | 源泉苑 | 2室1厅 | 南 北 | 6 | 通州 | 320.0 | 13 | 45205 | 70.79平米 | 4 |
4 | 918 | 距离古城地铁口282米 满五唯一 小三居室 总价低 | https://bj.lianjia.com/ershoufang/101102783849... | 古城南路 | 3室1厅 | 东 西 | 6 | 石景山 | 275.0 | 74 | 46650 | 58.95平米 | 4 |
#字符串的处理
# 将字符串转换成数字主要用于处理面积的数据 def data_adj(area_data, str): #判断‘平米’在不在这个数据里 if str in area_data : #用find()函数查找字符串的索引位置,方便截取 return float(area_data[0 : area_data.find(str)]) else : return None #把字符串里的平米去掉 house['acreage'] = house['acreage'].apply(data_adj,str = '平米')
处理后结果如下(我只截取前五个数据太大了)
0 134.11 1 70.79 2 122.86 3 119.73 4 58.95 5 78.54
接下来我来计算所有户型的个数,然后用图像展示出来
#计算户型的所占的个数,用到value_counts(),排序也给你做好了,你可以清楚的看到所占的个数 housetype = house['housetype'].value_counts()
#结果
2室1厅 4251 3室1厅 1766 3室2厅 1268 1室1厅 1011 2室2厅 755 4室2厅 478 1室0厅 176 4室1厅 139 5室2厅 96 1房间1卫 41 2房间1卫 32 5室3厅 32 1室2厅 30 4室3厅 27 3房间1卫 25 3房间2卫 24 6室2厅 23 3室3厅 18 3室0厅 15 5室1厅 15 2室0厅 14 4房间2卫 8 6室3厅 8 5房间2卫 7 4房间1卫 5 5房间3卫 5 4房间3卫 3 2室3厅 3 5室4厅 3 7室2厅 3 1房间0卫 2 9室3厅 1 9室1厅 1 4室4厅 1 11房间3卫 1 6房间3卫 1 7室1厅 1 6房间4卫 1 6室6厅 1 6室1厅 1 7室3厅 1 8室2厅 1 6室4厅 1 Name: housetype, dtype: int64
#我们把图像话出来,有于后面的小数据比较多我就展示了前10个的信息
有于matplotlib不显示中文我在网上查了些资料,得到的解决方案就是加两行代码
from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题 #设置画布 asd,sdf = plt.subplots(1,1,dpi=200) #获取前10条数据 housetype.head(10).plot(kind='bar',x='housetype',y='size',title='户型数量分布',ax=sdf) plt.legend(['数量']) plt.show()
#图像展示结果,有图像可以清楚的看到数量分布情况
#图片的下载
#下载图片 plt.savefig(r"C:\Users\cz\Desktop\housetype.jpg")
#户型和关注人数分布
#户型和关注人数分布 type_interest_group = house['followinfo'].groupby(house['housetype']).agg([('户型', 'count'), ('关注人数', 'sum')])
#获取户型数量大于50 的数据 ti_sort = type_interest_group[type_interest_group['户型'] > 50 ].sort_values(by='户型')
#结果
5室2厅 | 96 | 5753 |
---|---|---|
4室1厅 | 139 | 9445 |
1室0厅 | 176 | 11409 |
4室2厅 | 478 | 30824 |
2室2厅 | 755 | 38173 |
1室1厅 | 1011 | 65393 |
3室2厅 | 1268 | 71446 |
3室1厅 | 1766 | 107967 |
2室1厅 | 4251 | 273616 |
#图像展示
#画图 asd,sdf = plt.subplots(1,1,dpi=150) ti_sort.plot(kind='barh',alpha=0.7,grid=True,ax=sdf) plt.title('二手房户型和关注人数分布') plt.ylabel('户型') plt.show()
#户型与看房次数
#户型和看房次数数分布 type_interest_num = house['frequency'].groupby(house['housetype']).agg([('户型', 'count'), ('看房次数', 'sum')]) ti_sort = type_interest_num[type_interest_num['户型'] > 50 ].sort_values(by='户型') #画图 asd,sdf = plt.subplots(1,1,dpi=150) ti_sort.plot(kind='barh',alpha=0.7,grid=True,ax=sdf) plt.title('二手房户型和看房次数') plt.ylabel('户型') plt.show()
在售面积分布
area_level = [0, 50, 100, 150, 200, 250, 300, 500] label_level = ['小于50', '50-100', '100-150', '150-200', '200-250', '250-300', '300-350'] #算出所面积在哪个区间 are_cut = pd.cut(house['acreage'],area_level,label_level) #计算面积在所设置的区间的数量 acreage = are_cut.value_counts() acreage
#画图
asd,sdf = plt.subplots(1,1,dpi=150) acreage.plot(kind='bar',rot=30,alpha=0.4,grid=True,ax=sdf) plt.title('二手房面积分布') plt.xlabel('面积') plt.legend(['数量']) plt.show()
#算出个个区域的平均房价
#各个区房源均价 region =house.groupby('region').mean()['unitprice']
#画图
asd,sdf = plt.subplots(1,1,dpi=150) region.plot(kind='bar',x='region',y='unitprice', title='各个区域房源均价',ax=sdf) plt.show()
#区域房源分布量
#各个区域房源数量排序 region_num = house.groupby('region').size().sort_values(ascending=False)
#画图
region_num = house.groupby('region').size().sort_values(ascending=False) asd,sdf = plt.subplots(1,1,dpi=150) region_num.plot(kind='bar',x='region',y='size',title='各个区域房源数量分布',ax=sdf) plt.legend(['数量']) plt.show()
#北京在售面积最小二手房 house.sort_values('acreage').iloc[0,:]
#结果
id 9933 title 西城区 荣丰2008小区 一起开间 满五年 总价低 link https://bj.lianjia.com/ershoufang/101102783824... community 荣丰2008 housetype 1室0厅 direction 东 floor 26 region 西城 totalprice 290 followinfo 61 unitprice 151357 acreage 19.16 frequency 41 Name: 9019, dtype: object
#小区房源数量
# 各个区域小区房源数量 community_num =house.groupby('community').size().sort_values(ascending=False) #画图 asd,sdf = plt.subplots(1,1,dpi=150) #取前十五个 community_num.head(15).plot(kind='bar',x='community',y='size',title='各个小区数量',ax=sdf) plt.legend(['数量']) plt.show()
各个小区房源均价
#各个小区的房源均价 community_mean = house.groupby('community').mean()['unitprice'].sort_values(ascending=False) #画图 asd,sdf = plt.subplots(1,1,dpi=150) #前10 条 community_mean.head(10).plot(kind='bar',x='community',y='mean',title='各个小区房源均价',ax=sdf) plt.legend(['均价']) plt.show()
#各个小区的关注人数
#个个小区看房人数 community_fsum = house['frequency'].groupby(house['community']).agg([('小区', 'count'), ('看房次数', 'sum')]) commnuity_count = community_fsum[community_fsum['小区'] >30].sort_values(by='小区') #画图 asd,sdf = plt.subplots(1,1,dpi=150) commnuity_count.plot(kind='barh',ax=sdf) plt.title('各个小区看房人数') plt.show()
#如有错误请指出,谢谢!
推荐阅读
-
从链家网抓取北京各区二手房价格数据并进行可视化分析-使用工具
-
房产中介遭遇寒冬,链家转型之路任重道远?-房产中介寒冬到来,链家急切求生? “想到了市场会变坏,但没有想到会来得这么快,逼着我们转型。”这是2017年下半年,已经处于转型当中的搜房网董事长莫天全说过的一句话,这句话反映了链家所在的房产交易市场近两年来并不好过。 2017年链家在北京和上海的二手房市场陷入低谷。链家在北京二手房成交量同比下滑51%,在上海,链家2017年月均交易量只有一万套左右。上海北京一直是支撑链家房产交易量的两个重点城市,这两个城市交易量呈现下降,很大程度上说明其它地方可能也不好过。据业内人士估算,二手房市场月成交1.5万套才是盈亏的分水岭,并且规模越大,亏损得越多。 事实上,链家所在的房产中介行业,从2016年开始,受国家不断出台的房产调控政策,比如“去库存”、“棚改”、“房产税收”等影响,行业内各个房产中介开始出现裁员收缩、关店、交易量下降等现象。这些现象虽然都是正常的市场反应,不必过慌,但对于链家而言,每少一家线下店,每少一名经纪人,可能都是不小的打击。 链家闫觅曾说:“目前如何提高运营效率是长租公寓运营商面临的一大难题,推出贝壳找房一方面能给加入者带来流量红利,一方面为参与者带来业务升级,提升房产交易效率。”如此看来,加入贝壳找房好处颇多。不过天下毕竟没有免费的午餐,链家如此让利给入局者,总得有一个说得过去理由。其实,长期以上述模式走下去的贝壳找房,能帮助链家实现真房源数据的维护。如果是出于这样的目的,那么推出贝壳找房可以看成是链家在行业压力下寻求自救的举措。 链家拥抱第三方平台,真实房源数据是终极目标? 要问链家的核心资源在哪里,那么毫无疑问,全国约7000万套真房源数据是链家的核心所在,这是链家生态系统得以运转的血液,也是链家在对外讲话当中,常常提到的事情。从链家的官网简介当中可以看出,链家已经涉及到房产交易服务、大数据处理、资产管理等业务,这些业务大多数是建立在房源数据交易的基础之上。因而如果房源数据出现了问题,那么其产生的后果可想而知。 真房源数据甄别的主体可以来源于两方面,要么亲力亲为,要么让别人去帮你完成甄别。对于主打真房源的链家而言,线下门店是链家真房源的有利保障,要知道从链家一开始提出真房源理念后,其线下门店就开始马不停蹄地扩张,所以即使当行业虚假房源信息泛滥的时候,链家也能有底气提出“真房源”理念。而随着线下门店数量的减少,在2017年8月,链家开始和拥有1800家门店、覆盖54座城市的21世纪中国不动产,就双方加盟合作事宜进行谈判,而且在今年1月份,链家重启德佑品牌,进行加盟模式的布局,可见链家对于加盟模式的重视程度。 目前链家的加盟模式可以分为轻加盟和重度加盟。对于一些平台,例如对乐乎、同创、城家、湾流等品牌公寓,链家采取的是“品质联盟”的形式,换个角度可以理解为轻加盟模式,大家签个正品协议,然后你把你的房源挂到我的平台上。而对于个人加盟甚至是中小中介平台,链家一般采用重度加盟模式,这种模式会从人员的招聘、培训、管理等环节对加入者实行全程干预。 例如链家在2017年下半年,鼓励内部员工自主加盟到链家网当中,加盟者需承担门店的一切费用。同时向链家支付10%的营业额作为加盟费,而加盟者的员工由链家培训,以确保加盟模式跟自己的直营模式在服务上做到无差异。这些事例都在一定程度上反映了链家想找最省钱的真房源确认途径。 其实,链家很清楚,重度垂直门店模式会占用大量的资金,在业务不景气的时候,易造成资金周转困难,不过链家也明白,线下门店是链家开疆扩土的前沿阵地,是真房源数据的最基础来源。因而在线下门店处于收缩的时候,以第三方平台确认真房源的打法,自然而然会成为链家现今的最佳选择。 匆忙布局,链家转型之路并不平坦
-
使用 Python 对链家网站上的北京二手房进行简单数据分析
-
使用 Python 对链家网站上的北京二手房进行简单数据分析