两个四选一数据选择器组成八选一_上海宝山区二手房数据分析案例(可视化)...

0d7226b6af413e2e90761d9421774dd3.png

前沿

本文章所用的数据均是笔者通过scrapy爬虫从链家网爬取的上海市宝山区二手房交易的数据,关于数据源以及源代码的获取,请访问笔者的GitHub链接:

cavensbee/Scrapy​github.com
a755bef1685828b8cafa5a6876027cc3.png

2018年末,上海地区的二手房房价开始出现下跌,到2019年,房价又出现短暂的回暖,正好笔者本人住在宝山区附近,就对上海宝山区的当前房价做一次数据分析和可视化报告,本人不才,正在往数据分析师方向成长,用到的技术也只是浅显,还望大牛多多指教

分析流程

1、房价网站的数据爬取

2、对爬取到的数据清洗

3、提出问题

4、构建模型分析

5、对数据可视化

6、报告总结

房价网站的数据爬取

笔者通过Scrapy爬虫,对链家网上海宝山区二手房的房价进行数据爬取。相关Scrapy的核心源码,已经放在GitHub上。

关于爬虫需要爬取的关键字:地区(宝山)、区域、小区名称、户型、面积、单价、总价、朝向、建筑类型、装修状况、关注人数等。

利用Scrapy配合css选择器将数据成功爬取到后,保存为本地csv文件格式,下一步为对本地csv源数据进行清洗和整理。

数据清洗

f3f7b56364539e60cfd3ec1fb89b5983.png
爬取到的源数据

打开保存的csv文件,此为完全没有做过处理的源数据,下面对数据进行处理。

  • 将该数据源用Notepad++打开,将编码格式改为UTF-8-BOM格式,这是为了防止通过Scrapy爬取后的数据用Excel打开后形成乱码,事先用Notepad++打开后重新更改编码格式。再用Excel打开数据源后,发现每一行之间都有一行是空的,选中该数据区域,定位到空值后,选中删除工作表行,将空行全部删除。
  • 缺失值处理,通过定位找到缺失值的位置,为保存数据源完整性,通过手动补全,或者平均值补全的方式填补缺失值
  • 一致化处理,个别单元格如面积,单价,总价等无法直接运算分列,设置单元格格式等方式处理一下
  • 处理异常值,通过筛选,找到异常值,并进行处理

清洗后的数据如下:

9af1545508835033b7043ce5fc956b6d.png
清洗后的数据

构建分析模型

主要采用MySQL的方式进行分析,将数据源导入Navicate MySQL中。

  • 筛选出当前在出售的房源数量排名前十的区域

d6f5740f9e4756957753c1e7a2ff5cde.png

由此可看出,当前宝山区,顾村在售的房源数量是最多的,经过参考这可能得益于顾村所处的上海地理位置,顾村位于市中心城区最近的近郊城镇,同时有着顾村公园这样一个上海市著名景区,所以笔者推测开发商在此建造商品房会更能吸引买家。

  • 筛选出当前在售房源中的热门小区以及所在的区域

e752cdd6311a2ffe4eea620ce69895b8.png

由筛选结果可知,大华一村和共富一村这两个小区的在售房源数量最多,大华位于中环以内,离市中心不算远,且交通便利,共富新村则是顾村大型居住社区拓展基地,也是上海规划推进区域性建设的重要项目,可以预计,共富新村也将是上海宝山区的房源热门区域。

  • 热点区域的房价排行

373640cb34c44a398a4bea2a2343a066.png

从数据中可看出,房价宝山地区的均价最高可到达8万多每平米,而排名前十的均价普遍在6万多每平米。

  • 当前在售的热门户型的筛选

85e1e41b139acfef1b16fc7a1a575b0f.png

从数据中可以看出,2室户的房型是目前在售的主要户型,其次就是三居室,该趋势说明目前在上海的人群倾向于从两居室到三居室的改善。

  • 宝山各区域房屋总价的排行

a7e2b703e197368305e2669ba0c2bf5f.png

对比上面分析出的数据,可以看出,顾村在平均总价中排行中等,但是拥有的房源数量是最多的,这表明更多有能力购房的需求者,会选择在这一区域购房,而房源数量排行前三的大华,则是宝山区平均总价最高的区域。这可能存在两种结果:

  1. 总价的过高超过了购房需求者的购买能力范围,同时由于通货膨胀的影响,早期开发商对于该区域的预估存在偏差。
  2. 存在一种趋势,对比当前在售户型的数据分析可看出,除了两居室,目前在售的热门户型更多的是三居室,相对应的总价也会提高,所以不排除该区域未来会成为宝山区购房需求者的热门关注区域。

数据可视化分析

任何数据都不如图表更加直观和清晰可见,笔者运用Python的numpy包,pandas包,matplotlib包,通过PyCharm工具对以上爬取到的数据进行可视化分析的图表制作。

相关代码请访问笔者的GitHub链接:

cavensbee/Python_matplotlib-pandas​github.com
a755bef1685828b8cafa5a6876027cc3.png

导入Python相关的数据包:

import 

规范化图形:

mpl.rcParams['font.sans-serif'] = ['FangSong'] 
#将字体默认设置为仿宋
mpl.rcParams['axes.unicode_minus'] = False 
#使图像正常显示'-'负号,而不会出现方块

读取数据:

house = pd.read_excel(r'C:UsersAlfaBeeDesktopLianJiaLianJiaDataBaoShanPriceData.xlsx')

包含的字段如下:

13dacfbe8b370cbc4288d6b396089357.png
  • 首先针对二手房的面积分布,进行可视化分析
area_level = [0,50,100,150,200,250]
level_label = ['小于50','50-100','100-150','150-200','200-250']
area_cut = pd.cut(house['Area'],area_level,level_label)
level_num = area_cut.value_counts()
x = list(range(0
,len(level_label)))
y = list(level_num)
level_num.plot(kind ='bar',alpha = 0.5)
plt.xticks(fontproperties='songTi',fontsize=16)
plt.yticks(fontproperties='songTi',fontsize=16)
plt.grid(linestyle = '--')
plt.title('二手房面积分布',fontsize = 20)
plt.xlabel('面积',fontsize = 18)
plt.ylabel('数量',fontsize = 18)
plt.legend(('数量',),loc = 0,fontsize = 18)
for a,b in zip(x,y):
    plt.text(a,b+0.7,'%.0f' % b,ha = 'center',va = 'bottom',fontsize = 20)
plt.savefig(r'C:UsersAlfaBeeDesktop二手房面积分布.png')
plt.show()

a7bf0660fd359c593a3296e9809e81c7.png

如图表所示,50-100平米的面积是大多数购房需求者选择的面积范围,这一面积范围一般是两居室的房子,而且这一面积的房价一般都在购房需求者的可承受经济能力的范围内,如下图表所示即可很明显的看出。

  • 户型数量分布
housetype = house['HouseType'].value_counts()
housetype.head(10).plot(kind = 'bar')

11fc4023ee1cbbd5bfc2e87ef5046a3f.png
  • 各地区房源数量分布
region_num = house.groupby('Region2').size().sort_values(ascending=False)
x = list(range(0,len(region_num)))
y = list(region_num)
region_num.plot(kind = 'bar',alpha = 0.7)
for a,b in zip(x,y):
    plt.text(a,b+0.5,'%.0f' % b,ha = 'center',va = 'bottom',fontsize = 20)
plt.show()

b0bbadd2041a3eddd67243e8111c8e86.png

上图为针对各个地区的房源数量分布的可视化,可清晰的看出各个地区的房源数量分布,也很明显的看出顾村镇的在售房源数量最多。

下面利用tableau分别对宝山区各版块的平均单价和平均总价展示可视化图表。

  • 利用tableau展示宝山区域平均单价

886f19ac66b08a94fb392a8228e884ad.png
  • 宝山区域的平均总价

420a4a1b3896971985a0755cc2f6e363.png

报告总结

通过系列的数据筛选分析后,可以很清晰的看出,宝山区的当前房源主要集中在中环以内,且都是离市中心不远的区域;考虑到交通状况和经济环境,相比市区的高昂价格和郊区的偏僻,离市区较近的区域且交通环境较为便利,成为了很多购房需求者的选择;而本次爬取数据源的链家网,也是多针对这些区域发布房源信息,可以预计,未来房屋的价格和购买倾向,会随着市区向郊区扩展而变动,而城郊中心的位置,房屋价格会有提升,慢慢趋向于市区的价格,当然不排除政府调控干预的可能性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是使用 Beautiful Soup 爬取链家上海上大板块二手的挂牌信息,并且使用 Pyecharts 可数据的 Python 代码: ```python import requests from bs4 import BeautifulSoup from pyecharts.charts import Line, Map, HeatMap from pyecharts import options as opts from pyecharts.globals import ThemeType # 设置请求头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'} # 获取链家上海上大板块二手的挂牌信息 url = 'https://sh.lianjia.com/ershoufang/baoshan/d2s8/' html = requests.get(url, headers=headers).text soup = BeautifulSoup(html, 'html.parser') house_list = soup.find_all('div', class_='info clear') # 提取源信息 prices = [] areas = [] for house in house_list: price = house.find('div', class_='price').span.text area = house.find('div', class_='houseInfo').text.split('|')[2] prices.append(float(price)) areas.append(float(area[:-2])) # 绘制行情走势图 line = Line(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) line.add_xaxis(range(1, len(prices) + 1)) line.add_yaxis('单价', prices) line.add_yaxis('面积', areas) line.set_global_opts(title_opts=opts.TitleOpts(title='上海上大板块二手行情走势图')) line.render('line.html') # 绘制热力图 data = [[areas[i], prices[i]] for i in range(len(prices))] heatmap = HeatMap(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) heatmap.add_xaxis(['面积', '单价']) heatmap.add_yaxis('热力图', data) heatmap.set_global_opts( visualmap_opts=opts.VisualMapOpts(), title_opts=opts.TitleOpts(title='上海上大板块二手热力图') ) heatmap.render('heatmap.html') # 绘制地图 map_data = [ ('上海山区大场镇', 16898), ('上海山区顾村镇', 22226), ('上海山区罗店镇', 19888), ('上海山区淞南镇', 20854), ('上海山区月浦镇', 24676) ] map = Map(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) map.add('', map_data, '上海') map.set_global_opts( visualmap_opts=opts.VisualMapOpts(max_=25000), title_opts=opts.TitleOpts(title='上海上大板块二手区域单价') ) map.render('map.html') ``` 上述代码中,我们首先设置了请求头,然后使用 requests 库获取链家二手的信息,再用 Beautiful Soup 解析 HTML 页面,提取出价格和面积信息,并将它们分别存储在 prices 和 areas 列表中。接下来,我们使用 Pyecharts 库绘制了三个可图表:行情走势图、热力图和地图。 行情走势图使用了 Line 类,将单价和面积分别作为 y 轴数据,绘制出了它们的变趋势。热力图则使用了 HeatMap 类,将面积和单价作为坐标轴,展示了它们之间的关系。最后,地图则使用了 Map 类,展示了不同区域的单价情况,并且使用了热力图颜色渐变的方式来显示单价高低。 以上代码只是一个示例,你可以根据自己的需求进行修改和扩展,比如爬取不同的区域价信息,或者使用其他可库来展示数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值