news 2026/3/12 5:59:25

毕设分享 大数据房价数据分析及可视化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
毕设分享 大数据房价数据分析及可视化

文章目录

  • 1 课题背景
  • 2 数据爬取
    • 2.1 爬虫简介
    • 2.2 房价爬取
  • 3 数据可视化分析
    • 3.1 ECharts
    • 3.2 相关可视化图表

🧿选题指导, 项目分享:见文末

1 课题背景

房地产是促进我国经济持续增长的基础性、主导性产业。如何了解一个城市的房价的区域分布,或者不同的城市房价的区域差异。如何获取一个城市不同板块的房价数据?
本项目利用Python实现某一城市房价相关信息的爬取,并对爬取的原始数据进行数据清洗,存储到数据库中,利用pyechart库等工具进行可视化展示。

2 数据爬取

2.1 爬虫简介

网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。爬虫对某一站点访问,如果可以访问就下载其中的网页内容,并且通过爬虫解析模块解析得到的网页链接,把这些链接作为之后的抓取目标,并且在整个过程中完全不依赖用户,自动运行。若不能访问则根据爬虫预先设定的策略进行下一个 URL的访问。在整个过程中爬虫会自动进行异步处理数据请求,返回网页的抓取数据。在整个的爬虫运行之前,用户都可以自定义的添加代理,伪 装 请求头以便更好地获取网页数据。
爬虫流程图如下:

实例代码

# get方法实例importrequests#先导入爬虫的库,不然调用不了爬虫的函数response=requests.get("http://httpbin.org/get")#get方法print(response.status_code)#状态码print(response.text)

2.2 房价爬取

累计爬取链家深圳二手房源信息累计18906条

  • 爬取各个行政区房源信息;
  • 数据保存为DataFrame;

相关代码

frombs4importBeautifulSoupimportpandasaspdfromtqdmimporttqdmimportmathimportrequestsimportlxmlimportreimporttime area_dic={'罗湖区':'luohuqu','福田区':'futianqu','南山区':'nanshanqu','盐田区':'yantianqu','宝安区':'baoanqu','龙岗区':'longgangqu','龙华区':'longhuaqu','坪山区':'pingshanqu'}# 加个header以示尊敬headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36','Referer':'https://sz.lianjia.com/ershoufang/'}# 新建一个会话sess=requests.session()sess.get('https://sz.lianjia.com/ershoufang/',headers=headers)# url示例:https://sz.lianjia.com/ershoufang/luohuqu/pg2/url='https://sz.lianjia.com/ershoufang/{}/pg{}/'# 当正则表达式匹配失败时,返回默认值(errif)defre_match(re_pattern,string,errif=None):try:returnre.findall(re_pattern,string)[0].strip()exceptIndexError:returnerrif# 新建一个DataFrame存储信息data=pd.DataFrame()forkey_,value_inarea_dic.items():# 获取该行政区下房源记录数start_url='https://sz.lianjia.com/ershoufang/{}/'.format(value_)html=sess.get(start_url).text house_num=re.findall('共找到<span> (.*?) </span>套.*二手房',html)[0].strip()print('💚{}: 二手房源共计「{}」套'.format(key_,house_num))time.sleep(1)# 页面限制🚫 每个行政区只能获取最多100页共计3000条房源信息total_page=int(math.ceil(min(3000,int(house_num))/30.0))foriintqdm(range(total_page),desc=key_):html=sess.get(url.format(value_,i+1)).text soup=BeautifulSoup(html,'lxml')info_collect=soup.find_all(class_="info clear")forinfoininfo_collect:info_dic={}# 行政区info_dic['area']=key_# 房源的标题info_dic['title']=re_match('target="_blank">(.*?)</a><!--',str(info))# 小区名info_dic['community']=re_match('xiaoqu.*?target="_blank">(.*?)</a>',str(info))# 位置info_dic['position']=re_match('<a href.*?target="_blank">(.*?)</a>.*?class="address">',str(info))# 税相关,如房本满5年info_dic['tax']=re_match('class="taxfree">(.*?)</span>',str(info))# 总价info_dic['total_price']=float(re_match('class="totalPrice"><span>(.*?)</span>万',str(info)))# 单价info_dic['unit_price']=float(re_match('data-price="(.*?)"',str(info)))# 匹配房源标签信息,通过|切割# 包括面积,朝向,装修等信息icons=re.findall('class="houseIcon"></span>(.*?)</div>',str(info))[0].strip().split('|')info_dic['hourseType']=icons[0].strip()info_dic['hourseSize']=float(icons[1].replace('平米',''))info_dic['direction']=icons[2].strip()info_dic['fitment']=icons[3].strip()# 存入DataFrameifdata.empty:data=pd.DataFrame(info_dic,index=[0])else:data=data.append(info_dic,ignore_index=True)

爬取过程

3 数据可视化分析

3.1 ECharts

ECharts(Enterprise Charts)是百度开源的数据可视化工具,底层依赖轻量级Canvas库ZRender。兼容了几乎全部常用浏览器的特点,使它可广泛用于PC客户端和手机客户端。ECharts能辅助开发者整合用户数据,创新性的完成个性化设置可视化图表。支持折线图(区域图)、柱状图(条状图)、散点图(气泡图)、K线图、饼图(环形图)等,通过导入 js 库在 Java Web 项目上运行。

python安装

pip install pyecharts

3.2 相关可视化图表

房源面积-总价散点图

scatter=(Scatter(init_opts=opts.InitOpts(theme='dark')).add_xaxis(data['hourseSize']).add_yaxis("房价",data['total_price']).set_series_opts(label_opts=opts.LabelOpts(is_show=False),markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max",name="最大值"),])).set_global_opts(legend_opts=opts.LegendOpts(is_show=False),title_opts=opts.TitleOpts(title="深圳二手房 总价-面积 散点图"),xaxis_opts=opts.AxisOpts(name='面积',# 设置坐标轴为数值类型type_="value",# 不显示分割线splitline_opts=opts.SplitLineOpts(is_show=False)),yaxis_opts=opts.AxisOpts(name='总价',name_location='middle',# 设置坐标轴为数值类型type_="value",# 默认为False表示起始为0is_scale=True,splitline_opts=opts.SplitLineOpts(is_show=False),),visualmap_opts=opts.VisualMapOpts(is_show=True,type_='color',min_=100,max_=1000)))scatter.render_notebook()

各行政区均价

temp=data.groupby(['area'])['unit_price'].mean().reset_index()data_pair=[(row['area'],round(row['unit_price']/10000,1))for_,rowintemp.iterrows()]map_=(Map(init_opts=opts.InitOpts(theme='dark')).add("二手房均价",data_pair,'深圳',is_roam=False).set_series_opts(label_opts=opts.LabelOpts(is_show=True)).set_global_opts(title_opts=opts.TitleOpts(title="深圳各行政区二手房均价"),legend_opts=opts.LegendOpts(is_show=False),tooltip_opts=opts.TooltipOpts(formatter='{b}:{c}万元'),visualmap_opts=opts.VisualMapOpts(min_=3,max_=10)))map_.render_notebook()

均价最高的10个地段

temp=data.groupby(['position'])['unit_price'].mean().reset_index()data_pair=sorted([(row['position'],round(row['unit_price']/10000,1))for_,rowintemp.iterrows()],key=lambdax:x[1],reverse=True)[:10]bar=(Bar(init_opts=opts.InitOpts(theme='dark')).add_xaxis([x[0]forxindata_pair]).add_yaxis('二手房均价',[x[1]forxindata_pair]).set_series_opts(label_opts=opts.LabelOpts(is_show=True,font_style='italic'),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("""new echarts.graphic.LinearGradient(0, 1, 0, 0, [{ offset: 0, color: 'rgb(0,206,209)' }, { offset: 1, color: 'rgb(218,165,32)' }])"""))).set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房均价TOP 10地段"),legend_opts=opts.LegendOpts(is_show=False),tooltip_opts=opts.TooltipOpts(formatter='{b}:{c}万元')))bar.render_notebook()

户型分布

temp=data.groupby(['hourseType'])['area'].count().reset_index()data_pair=sorted([(row['hourseType'],row['area'])for_,rowintemp.iterrows()],key=lambdax:x[1],reverse=True)[:10]pie=(Pie(init_opts=opts.InitOpts(theme='dark')).add('',data_pair,radius=["30%","75%"],rosetype="radius").set_global_opts(title_opts=opts.TitleOpts(title="深圳二手房 户型分布"),legend_opts=opts.LegendOpts(is_show=False),).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")))pie.render_notebook()


词云图

word_list=[]stop_words=['花园','业主','出售']string=str(''.join([iforiindata['title']ifisinstance(i,str)]))words=psg.cut(string)forxinwords:iflen(x.word)==1:passelifx.flagin('m','x'):passelifx.wordinstop_words:passelse:word_list.append(x.word)data_pair=collections.Counter(word_list).most_common(100)wc=(WordCloud().add("",data_pair,word_size_range=[20,100],shape='triangle').set_global_opts(title_opts=opts.TitleOpts(title="房源描述词云图")))wc.render_notebook()

🧿 项目分享:大家可自取用于参考学习,获取方式见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/10 2:42:49

Open-AutoGLM开源地址来了,为何它能颠覆传统质谱数据解析方式?

第一章&#xff1a;质谱Open-AutoGLM开源地址项目简介 质谱Open-AutoGLM 是一个面向质谱数据分析与自动化图神经网络建模的开源框架&#xff0c;旨在为科研人员提供高效、可扩展的工具链&#xff0c;以实现从原始质谱数据预处理到分子结构预测的端到端流程。该项目由国内高校联…

作者头像 李华
网站建设 2026/3/11 1:14:29

Harper终极指南:为开发者量身打造的智能语法检查工具

Harper终极指南&#xff1a;为开发者量身打造的智能语法检查工具 【免费下载链接】harper The Grammar Checker for Developers 项目地址: https://gitcode.com/gh_mirrors/har/harper 你是否曾经在编写技术文档、博客文章或代码注释时&#xff0c;因为语法错误而感到困…

作者头像 李华
网站建设 2026/3/11 22:53:37

Open-AutoGLM本地部署硬件配置全解析(20年专家实战数据曝光)

第一章&#xff1a;Open-AutoGLM本地部署硬件配置全景透视在本地部署 Open-AutoGLM 时&#xff0c;合理的硬件配置是确保模型高效运行与推理响应的关键前提。由于该模型具备较强的自然语言理解与生成能力&#xff0c;其对计算资源的需求显著高于轻量级应用。以下从核心组件出发…

作者头像 李华
网站建设 2026/3/9 4:29:45

MinerU终极指南:5步掌握PDF智能解析的完整方案

MinerU终极指南&#xff1a;5步掌握PDF智能解析的完整方案 【免费下载链接】MinerU A high-quality tool for convert PDF to Markdown and JSON.一站式开源高质量数据提取工具&#xff0c;将PDF转换成Markdown和JSON格式。 项目地址: https://gitcode.com/GitHub_Trending/m…

作者头像 李华
网站建设 2026/2/26 5:44:45

es连接工具完整示例:Spring Boot集成实践

Spring Boot 集成 Elasticsearch 实战&#xff1a;告别原始调用&#xff0c;拥抱类型安全与高效开发在当今数据驱动的时代&#xff0c;搜索能力早已不再是“锦上添花”&#xff0c;而是系统核心竞争力的关键一环。无论是电商平台的商品检索、日志平台的快速定位&#xff0c;还是…

作者头像 李华
网站建设 2026/3/10 22:49:53

Obsidian42-BRAT:告别繁琐更新,轻松玩转Beta插件

Obsidian42-BRAT&#xff1a;告别繁琐更新&#xff0c;轻松玩转Beta插件 【免费下载链接】obsidian42-brat BRAT - Beta Reviewers Auto-update Tool for Obsidian. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian42-brat 还在为Obsidian插件频繁更新而烦恼吗&…

作者头像 李华