Python房价分析和可视化<房天下二手房>

Python房价分析和可视化<房天下二手房>

本文是Python数据分析实战的房价分析系列,本文分析二线城市贵阳的二手房。
数据获取
本文的数据来源于2022年8月房天下的二手房数据。对数据获取不感兴趣可以跳过此部分看分析和可视化。
1.访问目标页面
进入网站首页,点击选择城市和二手房进入<二手房信息页面>,筛选条件(位置、价格等)都保持默认,这样可以查出全部二手房信息。
在这里插入图片描述2.分析url变化
拖动滚动条到翻页的地方,点击几次<上一页>、<下一页>翻页,观察浏览器上方搜索框里url的变化。可以看到每次翻页url只变化一个数字,对应当前的页数。
所以只要不断改变url中的页数,就可以获取所有的数据。
3.二手房总数分析
二手房信息很多,已经超过了网站的最大显示数量,房天下最多展示100页二手房数据,所以我们要获取的数据总页数为100。每页的信息是60条,按计算可以获取到6000条信息,但有些页面的数据没有获取完整,最后共获取到了3000多条信息(这个问题暂时不影响我的分析,有空再分析原因)。
4.循环拼接url获取所有数据
在url中从1开始拼接页数,直到第100页,依次获取所有页面的信息。
参考代码:

import timefor p in range(1, 101):time.sleep(5)second_house_url = 'https://gy.esf.fang.com/house/i3{}'.format(p)try:res = requests.get(second_house_url, headers=headers)  # headers需要自己准备print('获取第{}页数据成功'.format(p))  except Exception as e:print('获取第{}页数据失败,报错:{}'.format(p, e))

5.用XPath提取数据
二手房信息在返回结果的HTML文件中,需要使用XPath语法提取。
参考代码:

from lxml import etreeresult = res.text
html = etree.HTML(result)
infos = html.xpath('//dl[@dataflag="bg"]')

XPath快速入门参考:快速入门XPath语法,轻松解析爬虫时的HTML内容
用XPath获取当前页的所有二手房信息保存在infos中,infos是一个Element对象的列表,每一个Element对象里的信息是一条二手房信息,可以继续用XPath从中提取具体的信息。
6.将数据保存到excel中
使用pandas将解析的数据转换成DataFrame,然后保存到excel中。最终获取到的数据共3360条。
在这里插入图片描述
数据清洗
1.删除重复值

import pandas as pd
import numpy as npdf = pd.read_excel('fangtianxia_second_house.xlsx', index_col=False)
print(df.shape)
# 删除重复值
df.drop_duplicates('标题', inplace=True)
print(df.shape)
(3360, 12)
(2616, 12)

删除重复值后,剩下的二手房信息为2616条,重复值很多,有700多条。
2.填充空值

# 空值填充
print(np.any(df.isnull()))
df.fillna('未知', inplace=True)
print(np.any(df.isnull()))
True
False

数据准备好后,本文开始对获取的2616条二手房信息进行分析。
二手房所属楼盘Top30

from pyecharts.charts import Bar
from pyecharts import options as opts# 二手房数量Top30的楼盘
second_build_name = df['楼盘'].value_counts()[0:30]
bar = Bar(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='white'))
bar.add_xaxis(second_build_name.index.to_list()
).add_yaxis('', second_build_name.to_list(), category_gap='30%'
).set_global_opts(title_opts=opts.TitleOpts(title='二手房数量前30的楼盘', pos_left='400', pos_top='30',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=10, distance=0, rotate=30, color='#4863C4'))
).set_colors('#4863C4').render('second_build_name_top30.html')

在这里插入图片描述在二手房的所属楼盘中,最多的两个楼盘是未来方舟和中铁逸都国际,都超过了100套二手房。
二手房的单价分布

from pyecharts.charts import Pie
from pyecharts import options as opts# 获取各个价格区间的二手房数量
second_price_unit = df['单价']
sections = [0, 5000, 6000, 7000, 8000, 9000, 10000, 12000, 15000, 20000, 100000]
group_names = ['less-5k', '5k-6k', '6k-7k', '7k-8k', '8k-9k', '9k-1w', '1w-1w2', '1w2-1w5', '1w5-2w', 'surpass-2w']
cuts = pd.cut(np.array(second_price_unit), sections, labels=group_names)
second_counts = pd.value_counts(cuts, sort=False)
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([gen for gen in second_counts.index], second_counts)],radius=['20%', '70%'], rosetype="radius", center=['60%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='二手房单价分布情况', pos_left='400', pos_top='30',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).render('second_price_counts.html')

在这里插入图片描述从单价看,大部分二手房的单价在1w-1w5之间,如果按1000来切分最多的是7k-8k,不过7k-8k的数量明显比安居客的少了很多。
对比安居客的二手房分析可以看历史文章:Python房价分析和可视化<anjuke贵阳二手房>
二手房的总价分布

from pyecharts.charts import Pie
from pyecharts import options as opts# 获取二手房总价各区间的数量
second_price_total = df['总价']
sections = [0, 50, 60, 70, 80, 90, 100, 120, 150, 200, 250, 10000]
group_names = ['less-50w', '50w-60w', '60w-70w', '70w-80w', '80w-90w', '90w-100w', '100w-120w', '120w-150w', '150w-200w', '200w-250w', 'surpass-250w']
cuts = pd.cut(np.array(second_price_total), sections, labels=group_names)
second_counts = pd.value_counts(cuts)
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([gen for gen in second_counts.index], second_counts)],radius=['20%', '70%'], rosetype="radius", center=['50%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='二手房总价分布情况', pos_left='330', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).set_colors(['rgb(0,{g},{b})'.format(g=100+10*x, b=200-15*x) for x in range(12)]
).render('second_total_price_counts.html')

在这里插入图片描述超过一半二手房的总价在100w之上,对比安居客的数据,安居客超过一半是90w之上,说明房天下平台上的二手房总价中位数比安居客上大约高了10w。
二手房户型分布

from pyecharts.charts import Bar
from pyecharts import options as opts# 获取二手房的户型分布
second_house_type = df['户型'].value_counts()
unknown = second_house_type['未知']
second_house_type.drop('未知', inplace=True)
second_house_type_parse = second_house_type.loc[second_house_type >= 10]
second_house_type_parse['others'] = second_house_type.loc[second_house_type < 10].sum()
second_house_type_parse['未知'] = unknown
bar = Bar(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='white'))
bar.add_xaxis(second_house_type_parse.index.to_list()
).add_yaxis('', second_house_type_parse.to_list(), category_gap='30%'
).set_global_opts(title_opts=opts.TitleOpts(title='二手房户型数量分布', pos_left='420', pos_top='30',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=12, distance=0, rotate=20, color='#FF9366')),yaxis_opts=opts.AxisOpts(max_=1400)
).set_colors('#FF9366').render('second_house_type.html')

在这里插入图片描述大部分二手房的户型都是3室2厅,这与安居客上的分析结论一致。
二手房面积分布

from pyecharts.charts import Pie
from pyecharts import options as opts# 获取二手房的面积分布情况
df_second = df.drop(df.loc[df['面积']=='未知'].index)
second_area = df_second['面积'].copy()
print(second_area)
sections = [0, 50, 80, 90, 100, 110, 120, 130, 140, 150, 200, 10000]
group_names = ['0-50㎡', '50-80㎡', '80-90㎡', '90-100㎡', '100-110㎡', '110-120㎡', '120-130㎡', '130-140㎡', '140-150㎡', '150-200㎡', '200㎡以上']
cuts = pd.cut(np.array(second_area), sections, labels=group_names)
second_area_counts = pd.value_counts(cuts, ascending=True)
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([gen for gen in second_area_counts.index], second_area_counts)],radius=['20%', '70%'], rosetype="radius", center=['50%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='二手房面积分布情况', pos_left='330', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).set_colors(['rgb({r},0,{b})'.format(r=20*x, b=250-15*x) for x in range(12)]
).render('second_area_counts.html')

在这里插入图片描述超过一半的二手房面积在110平到200平之间,安居客上的数据是120平到140平之间,这应该也是房天下平台的二手房总价更高的原因。
二手房朝向分布

from pyecharts.charts import Pie
from pyecharts import options as opts
import re# 处理部分错列的数据
def toward_parse(toward):return '南向' if re.findall(r'(\d+).*', toward) else toward# 统计二手房的朝向
df['朝向分布'] = df['朝向'].apply(toward_parse)
second_house_toward = df['朝向分布'].value_counts()
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add('', [list(z) for z in zip([gen for gen in second_house_toward.index], second_house_toward)],radius=['40%', '60%'], center=['50%', '50%']
).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(title_opts=opts.TitleOpts(title='二手房朝向分布情况', pos_left='330', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),legend_opts=opts.LegendOpts(is_show=False)
).render('second_house_toward.html')

在这里插入图片描述南北朝向的二手房接近7成,加上东南和西南朝向,接近了9成,这与安居客的分析结论一致。
二手房的修建年份

from pyecharts.charts import Bar
from pyecharts import options as opts# 获取二手房的修建年份
second_house_build_year = df['年限'].copy().value_counts()
unknown = second_house_build_year['未知']
second_house_build_year.drop(['未知', '南向', '东向', '西向'], inplace=True)  # 处理部分错列的数据
second_house_build_year.index = [y[0:4] for y in second_house_build_year.index.to_list()]
second_house_build_year = second_house_build_year.sort_index(ascending=False)
second_house_build_year['未知'] = unknown
bar = Bar(init_opts=opts.InitOpts(width='1000px', height='400px', bg_color='white'))
bar.add_xaxis([i for i in second_house_build_year.index]).add_yaxis('', second_house_build_year.to_list(), category_gap='20%'
).set_series_opts(label_opts=opts.LabelOpts(font_size=12)
).set_global_opts(title_opts=opts.TitleOpts(title='二手房修建年份分布', pos_left='420', pos_top='20',title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),yaxis_opts=opts.AxisOpts(max_=400),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(font_size=10, rotate=30, interval=0, color='#4863C4'))
).set_colors(['#4863C4']).render('second_house_build_year.html')

在这里插入图片描述二手房的修建年份除了大部分在15年内,还有2000年也很多。
二手房信息的标题风格

import jieba
from wordcloud import WordCloud
from PIL import Imagesecond_house_title = df['标题']
title_content = ','.join([str(til.replace(' ', '')) for til in second_house_title.to_list()])
cut_text = jieba.cut(title_content)
result = ' '.join(cut_text)
shape = np.array(Image.open("ciyun001.png"))
wc = WordCloud(font_path="simhei.ttf", max_font_size=70, background_color='white', colormap='winter',prefer_horizontal=1, mask=shape, relative_scaling=0.1)
wc.generate(result)
wc.to_file("second_house_title.png")

在这里插入图片描述
在海量的二手房信息中,好标题可以吸引更多潜在买家点击,还有可能提高成交几率。在这2600多条二手房信息的标题中,高频出现的词主要有诚心出售、几室几厅、地铁口、精装修、带车位、带地暖等。
对比安居客上的信息,诚心出售是房天下上的标题高频词,带车位、带地暖是更多人提到的卖点,而使用急售、南北通透、领包入住、随时看房的明显比安居客上少,整体来看,房天下上的标题起得比安居客上的更好。
总结
本文获取了房天下贵阳市的二手房数据,对数据进行各个维度的分析,并用Python进行可视化。
从安居客和房天下的二手房信息分析结论来看,有一部分数据是两个平台重复的,但也有很大一部分只在其中一个平台有。
文中用到的Python库和工具以后会专门写文章详细介绍,对代码有疑问可以关注和联系我一起交流讨论,欢迎点赞、评论和收藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/14163.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

波士顿房价数据集——预测房价

文章目录 1.数据集及问题简介2.加载数据集并探索数据3.准备输入的数据4.构建网络并编译网络6.从训练集中留出验证集&#xff08;K折验证法&#xff09;&#xff0c;初步训练模型7.根据训练数据&#xff0c;重新训练模型并测试8.画出训练数据9.调参完成后&#xff0c;在所有训练…

Boston波士顿房价数据下载

下载地址&#xff1a;https://archive.ics.uci.edu/ml/machine-learning-databases/housing/housing.data 打开方式&#xff1a; 直接用excel可以打开&#xff0c;转存为csv等 模型训练 from sklearn.linear_model import Lasso from sklearn.preprocessing import Standard…

利用波士顿房价数据集实现房价预测

文章目录 一、 观察波士顿房价数据并加载数据集1、加载数据集 二、 特征选择三、 模型选择四、 模型训练和测试1、 训练模型2、打印线性方程参数3、模型预测4、 计算mae、mse5、 画出学习曲线 五、 模型性能评估和优化1、 模型优化&#xff0c;考虑用二项式和三项式优化2、 划分…

预测房价(Python)

构建神经网络/深度学习模型的基本步骤 深度学习模型具有一定的通用性&#xff0c;使得深度学习的门槛降低&#xff0c;这是深度学习得以重新占据计算机领域一席之地的重要原因&#xff0c;深度学习均可以从下述五个步骤来完成模型的构建和训练。 def load_data():# 从文件导入…

香港的房价真的那么贵吗?用数据挖掘真相!

作者 | 挖数 来源 | 挖数&#xff08;公众号id&#xff1a;washu66&#xff09; 香港位于广东深圳的南边&#xff0c;面积是1106平方公里&#xff0c;比中国的四大一线城市都小。 不仅面积小&#xff0c;其人口密度也大&#xff0c;香港每平方公里的人口数比四大一线城市都多。…

波士顿房价数据集

数据集 Keras中常见的集成数据集波士顿房价数据集1. 加载数据集2. 访问数据集3. 数据可视化 Keras是一个高层的神经网络和深度学习库&#xff0c;可以快速搭建神经网络&#xff0c;易于调试和从扩展&#xff0c;是TensorFlow的官方API&#xff0c;内置了常用的公共数据集&#…

ChatGTP全景图 | 背景+技术篇

引言&#xff1a;人类以为的丰功伟绩&#xff0c;不过是开端的开端……我们在未来100年取得的技术进步&#xff0c;将远超我们从控制火种到发明车轮以来所取得的一切成就。——By Sam Altman 说明&#xff1a;ChatGPT发布后&#xff0c;我第一时间体验了它的对话、翻译、编程、…

考研成功上岸提前学Python,轻松拿到大厂实习offer!

23考研即将尘埃落定&#xff0c;首先要恭喜上岸的同学呀~ 关于上岸后到底要不要学Python、读研怎么找实习等相关问题&#xff0c;其实之前也聊过&#xff0c;但是大家可能还没有意识到Python给读研带来什么样的正面影响&#xff0c;蛋糕给大家看看往期Python学员的反馈&#x…

在当下互联网行情下,2023年程序员的工作真的很难找

前言 年后&#xff0c;听到有几位同事有离职的想法&#xff0c;有的已经在开始找工作了。&#xff0c;这个行业的工资就是靠跳槽来加速增长的&#xff0c;不过经过了这几个月的面试、复试的经历&#xff0c;几位前期提出离职的同事渐渐改变了想法&#xff0c;他们发现放开后的…

重磅!大湾区大学,官宣招生!

来源&#xff1a;大湾区大学 编辑整理 &#xff1a;双一流高教 3月23日&#xff0c;大湾区大学&#xff08;筹&#xff09;发布招生信息&#xff0c;该校将和南方科技大学联合招收30名硕士研究生。通知显示&#xff0c;这批学生的学籍属于南科大&#xff0c;第一年在南科大培养…

2022硅谷大厂的大!失!败!AiDA时尚设计师助手;2023热门IT技能预告;Uber送货机器人;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f4e2; 『抖音』2022抖音热点数据报告&#xff0c;共度温暖岁末 抖音热点联合巨量算数&#xff0c;发布了《2022抖音热点数据报告》&#xff0c;盘点了20…

Datawhale优秀作者,入选名单!

Datawhale团队 公示&#xff1a;Datawhale优秀作者&#xff0c;2023.01-03 优秀作者公示 入选奖 1. 陈敬 中国移动云能力中心 机器学习技术&#xff1a;多任务学习综述&#xff01; 2. 滕飞 浙江大学研究生 浙大学长分享&#xff0c;第二次打数据挖掘赛&#xff0c;雪浪算力…

24考研网盘群来了…免费进…

简介 免费分享考研网课资源&#xff0c;考研资料、考研资讯、考研真题、分享考研英语\考研政治\考研数学\考研复试\考研调剂信息等一系列资源&#xff0c;助你一战成硕。 百度网盘群 2024考研 微信公众号&#xff1a;考研保研直通车&#xff0c;坚持方便、省时的原则&#xff…

考研人导航上线啦

科大学长开发的考研人导航上线啦 &#xff0c;可以帮助考研学生更高效的获取最新考研复试信息和备考资料 考研人导航官网:https://kaoyan.ahy2.top

从事架构师岗位快2年了,聊一聊我对架构的一些感受和看法

从事架构师岗位快2年了&#xff0c;聊一聊我和ChatGPT对架构的一些感受和看法 职位不分高低&#xff0c;但求每天都能有新的进步&#xff0c;永远向着更高的目标前进。 文章目录 踏上新的征程架构是什么&#xff1f;架构师到底是干什么的&#xff1f;你的终极目标又是什么&…

ChatGPT的出现,让我们必须思考未来孩子的职业

最近这段时间&#xff0c;大家都在谈论ChatGPT&#xff0c;谈论最多的大概就是它将来会淘汰哪些行业&#xff1f;多少人会因此而失业&#xff1f; 作为父母&#xff0c;我们除了关心自己的发展&#xff0c;当然还关心孩子的未来。 尤其是现在的人工智能发展如此迅速&#xff0c…

chatgpt赋能Python-python影评分析

介绍 Python是一种流行的编程语言&#xff0c;它被广泛应用于各种领域&#xff0c;包括数据分析领域。在电影业&#xff0c;Python也被用于进行影评分析。通过分析影评数据&#xff0c;我们可以了解到观众对于不同电影的看法和评价&#xff0c;从而更好地了解市场需求和趋势。…

GPT、科技、人类的生产、知识与未来(上)

本文将继续结合GPT探讨人工智能技术升级可能对人类社会带来的影响。主要还是侧重历史、社会、文化、经济、政治等角度。 问题的提出&#xff1a;ChatGPT等工具会提高人的工作效率和产出。但它会让人类使用者自身变得更“聪明”&#xff0c;还是“更笨”&#xff1f;更“强”&am…

ChatGPT初尝试——合并Excel表格【AI版】

ChatGPT真的能提升生产力吗&#xff1f;【AI版】 无意间的刷到的视频一、提需求二、ChatGPT用Python编写代码三、意外的解释四、ChatGPT改用Java编写代码五、GPT第二次生成Java代码尾巴 无意间的刷到的视频 晚上在家刷视频&#xff0c;突然看到一个在讲关于AI编程的视频&#…

AI 3.0快速阅读后的思考

AI3.0阅读思考 梳理 几大技术词汇&#xff1a; 卷积神经网络CNN&#xff1a;权重和值之积的和深度神经网络DNN工具&#xff1a;深度指层数&#xff0c;深度学习强化学习符号人工智能亚符号人工智能&#xff0c;感知机&#xff0c;亚符号&#xff0c;从数据中学习机器学习对博…