别再说难了,年轻小伙教你分析及可视化二手房信息(附源码,这不收藏?)

2023-10-07 04:30

本文主要是介绍别再说难了,年轻小伙教你分析及可视化二手房信息(附源码,这不收藏?),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

别再说难了,年轻小伙教你分析及可视化二手房信息(附源码,这不收藏?)

    • 1. 数据读取
    • 2. 数据预处理
      • 2.1 缺失值处理
      • 2.2 列处理
    • 3. 武汉各区二手房数量条形图
    • 4. 武汉市各区房价分布2D地图
    • 5. 武汉市各区房价分布3D地图.html
    • 6. 武汉各区二手房单价箱型图
    • 7. 二手房面积分布与价格关系图
    • 8. 二手房各区楼层与房价分布3D条形图
    • 9. 武汉二手房各户型横向条形图
    • 10. 武汉二手房房屋装修饼状图
    • 11. 武汉二手房有无电梯与房价关系图
    • 12. 武汉热门二手房标签漏斗图
    • 13. 武汉热门二手房标题关键词

写在前面

我又来了,本篇承接上文 别再说难了,年轻小伙教你如何爬取“新一线城市”二手房信息 ,本文主要对上一篇爬取的数据进行分析及可视化。来挖掘一下数据背后的秘密…

文中主要涉及的Python库

  • pandas:读取 csv 文件中的内容,并对数据进行处理。
  • matplotlib:它是基于 numpy 的一套 Python 工具包。这个包提供了丰富的数据绘图工具,主要用于绘制一些统计图形。
  • seaborn: seaborn 是基于 matplotlib 的图形可视化 python 包。是在 matplotlib 的基础上进行了更高级的 API 封装,使作图更加容易,相比于 matplotlib 中的一些图用 seaborn 做会更具有吸引力,但特色方面(绘图细节)不及 matplotlib 。一般将 seaborn 视为 matplotlib 的补充,而不是替代物。同时它能高度兼容 numpy 与 pandas 数据结构以及 scipy 与 statsmodels 等统计模式(后文中会体会到兼容 pandas 的好处的)。
  • pyecharts: pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。一般用它来绘制动态图,可视化效果非常好。
  • jieba:一款非常流行的中文分词包。主要有三种分词模式全模式、精确模式(本文使用)、搜索引擎模式。在分词前可以添加自定义词典来提升分词的准确率。
  • collections:主要使用 Counter 类,统计各值出现的次数。

话不多说,进入正题。(源码地址在文末)
在这里插入图片描述



1. 数据读取

首先读取 house_info.csv 文件,并查看数据集的结构信息。

import pandas as pddf = pd.read_csv('house_info.csv')
df.info()
在这里插入图片描述

根据上面的信息可以知道,数据集共 27 列,house_label 列中有较多的缺失值, floor 列和 house_area 的类型为 object 应将转成数值类型。



2. 数据预处理

2.1 缺失值处理

首先删除包含缺失值的行。删除后数据行数为 5108 行。

df.dropna(inplace=True)
df.reset_index(drop=True, inplace=True)

2.2 列处理

由于后面需要通过 pyecharts 绘制地图,而 东湖高新区,沌口开发区 并未有详细经纬度划分,故根据大致地理位置,将其分别归属为 洪山区和汉南区 。

处理内容

  • 提取 floor 楼层中的数字
  • 将房价面积由 “85.99m²”–>“85.99”
  • 将东湖高新划分到洪山,沌口开发区划分到汉南
# 提取floor楼层中的数字
df['floor'] = df['floor'].str.extract(r'(\d+)', expand=False).astype('int')
# 将房价面积由“85.99m²”-->“85.99”
df['house_area'] = df['house_area'].apply(lambda x: x[:-1]).astype('float')# 将东湖高新划分到洪山,沌口开发区划分到汉南
df.loc[df['region'] == '东湖高新', 'region'] = '洪山'
df.loc[df['region'] == '沌口开发区', 'region'] = '汉南'
# 将region列中值后添加“区”,如“汉阳”-->“汉阳区”
df['region'] = df['region'] + '区'

通过 describe() 函数查看数值列的属性描述。如果查看全部列可以将参数 include 指定为 all (默认为 None )。

df.describe()
在这里插入图片描述

图中显示武汉二手房平均关注人数为 17 人,平均总价 184 万,平均单价 19364 元/m²,平均楼层 22 层,平均房屋面积 95 m²。另还有标准差、最小值、四分之一分位数、二分之一分位数、四分之三分位数、最大值等信息。



3. 武汉各区二手房数量条形图

获取各区名信息和对应区的房屋数量,绘制条形图。

import pyecharts.options as opts
from pyecharts.charts import Bar
from pyecharts.globals import ThemeTyperegion_list = df['region'].value_counts().index.tolist()
house_count_list = df['region'].value_counts().values.tolist()c = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK)
c.add_xaxis(region_list)
c.add_yaxis("武汉市", house_count_list)
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉各区二手房数量柱状图", subtitle=""),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(interval=0)))
# c.render("武汉各区二手房数量柱状图.html")
c.render_notebook()
在这里插入图片描述

尽管洪山区是将东湖高新区合并后统计的,但合并前二者二手房数量同样很多,其次为江岸区,江景独美。下面我们通过 2D地图3D地图 的形式看各区房价在地图上的分布。



4. 武汉市各区房价分布2D地图

统计各区名称及对应的单价中位数(中位数受极值的影响很小)。加载本地的武汉市地图数据(各区经纬度信息)。绘制房价分布 2D 地图。

region_list = df['region'].value_counts().index.tolist()
median_unit_price = []
for region in region_list:median_unit_price.append(df.loc[df['region'] == region, 'unit_price'].median())# 绘制2D地图
from pyecharts.charts import Map
# 加载武汉市地图数据
json_data = json.load(open('武汉市.json', encoding='utf-8'))data_pair = [list(z) for z in zip(region_list, median_unit_price)]text_style = opts.TextStyleOpts(color='#fff')
c = Map(init_opts=opts.InitOpts(width='1500px', height='700px', bg_color='#404a58'))    
c.add_js_funcs("echarts.registerMap('武汉市',{});".format(json_data))
c.add(series_name="武汉市", data_pair=data_pair, maptype="武汉市", label_opts=opts.LabelOpts(color='#fff'))
c.set_global_opts(legend_opts=opts.LegendOpts(textstyle_opts=text_style), title_opts=opts.TitleOpts(title="武汉", title_textstyle_opts=text_style),visualmap_opts=opts.VisualMapOpts(split_number=6, max_=30000, range_text=['高', '低'], textstyle_opts=text_style))
# c.render("武汉市各区房价分布2D图.html")
c.render_notebook()
在这里插入图片描述

根据地图的信息,房价较高的区域集中在武汉市中心区域,以武昌区为首房价单价为 24600 元/m²。其余中心城市房价也均在 15000 元/m²以上。最低房价为新洲区,房价中位数为 7806 元/m²。下面通过3D地图来观察一下。



5. 武汉市各区房价分布3D地图.html

所需要的数据与2D地图相同,代码较多这里就不在这里展示了(需要的朋友在文末获取)。

在这里插入图片描述

相比于2D,3D图中的各区房价差异会更加明显。看着也比较 NB!!
接下来通过箱型图详细看一下各区单价的异常值。



6. 武汉各区二手房单价箱型图

统计各区名称信息及对应单价信息,并绘制箱型图。

# 统计各个区二手房单价信息
unit_price_list = []
for region in region_list:unit_price_list.append(df.loc[df['region'] == region, 'unit_price'].values.tolist())# 绘制箱型图
from pyecharts.charts import Boxplotc = Boxplot(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add_xaxis(region_list)
c.add_yaxis("武汉市", c.prepare_data(unit_price_list))
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉各区二手房总价箱型图"), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(interval=0)))
# c.render("boxplot_base.html")
c.render_notebook()
在这里插入图片描述

pyecharts 中的箱型图的上下边界为最大值最小值,与标准箱型图中的最大观察值,最小观察值不同。我们根据上四分位数和下四分位数的分布,可以看出洪山区、江岸区、武昌区这些房价较高的区域成典型的 右偏态 (异常值集中在较大值的一侧,尾部很长)。这说明很多二手房的价格可能因为地段,装修等原因,单价严重偏离当地房价平均水平。使社会民众 贫(本人)富差距 更加明显😭。



7. 二手房面积分布与价格关系图

由于 pyecharts 中的散点图不太方便绘制趋势线,我们直接使用 seaborn 来绘制,二手房面积分布及面积与价格的相关性。(不得不说,兼容 pandas 是真的方便,很多对数据的处理操作直接在方法内部实现。)

import matplotlib.pyplot as plt
import seaborn as snsf, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 6))# 房屋面积
sns.distplot(df['house_area'], ax=ax1, color='r')
sns.kdeplot(df['house_area'], shade=True, ax=ax1)
ax1.set_xlabel('面积')# 房屋面积和价格的关系
sns.regplot(x='house_area', y='total_price', data=df, ax=ax2)
ax2.set_xlabel('面积')
ax2.set_ylabel('总价')plt.show()
在这里插入图片描述

二手房面积主要分布在60 - 130m²之间,面积和总价肯定是成正相关的,这个有点常识的人应该都懂吧。。我感觉最吸引人的还是面积 400m² ,总价 2000 万的那个点,鹤立鸡群。



8. 二手房各区楼层与房价分布3D条形图

我们现在看看各区的楼层和房价之间关系,听说武汉傍晚江景很美,那高层楼的价格应该要高一些。
代码较多这里就不在这里展示了(需要的朋友在文末获取)。

在这里插入图片描述

图中各轴含义

  • X轴:楼层,以5层为间隔范围
  • Y轴:各区名称
  • Z轴:单价

其他地区可能各楼层价格差异不大,但最突出的武昌区,江汉区,由于第二大城中湖东湖和临江的优势,让他们的高层房价普遍高于底层。



9. 武汉二手房各户型横向条形图

统计户型的种类和各种类的名称,绘制横向条形图。

series = df['house_type'].value_counts()
series.sort_index(ascending=False, inplace=True)
house_type_list = series.index.tolist()
count_list = series.values.tolist()c = Bar(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add_xaxis(house_type_list)
c.add_yaxis("武汉市", count_list)
c.reversal_axis()
c.set_series_opts(label_opts=opts.LabelOpts(position="right"))
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉二手房各户型横向条形图"),datazoom_opts=[opts.DataZoomOpts(yaxis_index=0, type_="slider", orient="vertical")],)
# c.render("武汉二手房各户型横向条形图.html")
c.render_notebook()
在这里插入图片描述

可以看到主要的房型有 一室一厅一厨一卫两室一厅一厨一卫两室两厅一厨一卫三室一厅一厨一卫三室两厅一厨一卫三室两厅一厨两卫四室一厅一厨两卫。其中最多的是 两室两厅一厨一卫,这也比较符合大多数人年轻人的要求。大的买不起,小的住不下。。



10. 武汉二手房房屋装修饼状图

现在看看二手房房屋装修的情况,一般二手房的话猜测毛坯应该不多。看看实际情况如何,统计装修的种类和各种类的数量,绘制饼状图。

decoration_list = df['decoration'].value_counts().index.tolist()
count_list = df['decoration'].value_counts().values.tolist()from pyecharts.charts import Piec = Pie(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add(series_name="房屋装修",data_pair=[list(z) for z in zip(decoration_list, count_list)],rosetype="radius",radius="55%",center=["50%", "50%"],label_opts=opts.LabelOpts(is_show=False, position="center"))
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉二手房房屋装修饼状图",pos_left="center",pos_top="20",title_textstyle_opts=opts.TextStyleOpts(color="#fff")),legend_opts=opts.LegendOpts(is_show=False))
c.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b}: {c} ({d}%)"),label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 255)"))
# c.render("customized_pie.html")
c.render_notebook()
在这里插入图片描述

根据图中信息超过一般的二手房是精装,毕竟之前住过人的,再简单装修一下,以更高的价格转手它不香吗?,将近 25% 左右的二手房是简装,剩余少量为其他装修类型和毛坯。毛坯二手房确实数量不多,和预料的差不多。



11. 武汉二手房有无电梯与房价关系图

一般有电梯的楼层都不会低,我所见7,8层楼如果没电梯,业主一般就要骂街了。有电梯的房价一般都要略高于无电梯的,下面我们看看各区二手房有无电梯数量比例,有无电梯的房屋单价有无差距。
代码较多这里就不在这里展示了(需要的朋友在文末获取)。

在这里插入图片描述

根据上图中的信息,各区二手房中有电梯的数量占了绝大多数,除了东西湖区的房价无电梯比有电梯略高外,其余各区的有电梯房价均比无电梯房价要高,其中武昌区差距最明显,这也印证了上面楼层与房价的关系,武昌区由于江景的原因高楼很吃香。图中新洲区的条形图与折线图有部分重叠,我们下面将两个图分开绘制,效果会更好。

在这里插入图片描述


12. 武汉热门二手房标签漏斗图

统计关注人数超过 3 人的热门二手房标签信息,绘制漏斗图,看看这些二手房有什么共同点。

from collections import Counter# 只统计关注人数超过三人的热门二手房
detail_df = df.loc[df['follower_numbers'] > 3]
label_list = []
for house_label in detail_df['house_label'].values.tolist():label_list += house_label.split(',')
label_and_count = Counter(label_list)
label_and_count = label_and_count.most_common()from pyecharts.charts import Funnelc = Funnel(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
c.add("商品", [list(z) for z in label_and_count])
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉热门二手房标签漏斗图"))
c.render("武汉热门二手房标签漏斗图.html")
c.render_notebook()
在这里插入图片描述

根据图中信息能够很清楚的看到, VR 看装修在热门二手房标签中出现次数最多,我之前在链家尝试过 VR 看房,确实方便,无死角,但就是转的有点晕,哈哈!其余的就是随时看房,房本满两年满五年,毕竟可以少缴税。



13. 武汉热门二手房标题关键词

现在我们要提取热门二手房中标题的关键词(热门词),首先加载本地停用词。

def load_stopwords(read_path):'''读取文件每行内容并保存到列表中:param read_path: 待读取文件的路径:return: 保存文件每行信息的列表'''result = []with open(read_path, "r", encoding='utf-8') as f:for line in f.readlines():line = line.strip('\n')  # 去掉列表中每一个元素的换行符result.append(line)return result# 加载中文停用词
stopwords = load_stopwords('wordcloud_stopwords.txt')

通过 jieba 分词获取标题的分词结果,并去除停用词。

import jieba# 添加自定义词典
jieba.load_userdict("自定义词典.txt")token_list = []
# 对标题内容进行分词,并将分词结果保存在列表中
for title in detail_df['title']:tokens = jieba.lcut(title, cut_all=False)token_list += [token for token in tokens if token not in stopwords]
len(token_list)
29203

根据分词列表,使用 Counter 类统计分词列表中各词的出现次数,选取出现次数最多的前 100 ,绘制词云图。

from pyecharts.charts import WordCloud
from collections import Countertoken_count_list = Counter(token_list).most_common(100)
new_token_list = []
for token, count in token_count_list:new_token_list.append((token, str(count)))c = WordCloud()   
c.add(series_name="热词", data_pair=new_token_list, word_size_range=[20, 200])
c.set_global_opts(title_opts=opts.TitleOpts(title="武汉热门二手房标题关键词", title_textstyle_opts=opts.TextStyleOpts(font_size=23)),tooltip_opts=opts.TooltipOpts(is_show=True),
)
c.render("武汉热门二手房标题关键词.html")
c.render_notebook()
在这里插入图片描述

热门二手房标题中出现较多的词有:电梯,楼层、采光、精装修、户型、满二、交通等。还有一些与位置相关的词汇,可以通过卖家的这些关键词来作为参考,说不定就是我们之后买房需要注意的内容。


总结

通过这么多方面的分析,也大致了解了武汉二手房的大致行情,市中心的房价 15000元/m² 起步,外围最低七八千左右。楼层根据自己的需要,如果想看看风景那么高层没毛病,但价格一般较高,如果不差钱武昌区就很香。面积的话,大致100m²左右就足够,太大的价格可能很高,毕竟从箱型图中的数据来看,各区中均有房价远超平均值的存在。装修纯看个人喜好,我个人喜欢自己装修,自己的风格只有自己懂,别人装的可能就感觉没有温馨的感觉。户型就选热门的 两室两厅一厨一卫。还有一些其他要注意的地方,比如采光、房龄、交通、环境 等方面。
哈哈,我也不是卖房的,只能根据一些数据来获取一些粗浅的见解,大家看个乐就好,真正的分析这点数据肯定不够。总的来说,三个字,买不起,再见!😏



完整代码及数据集:github地址

这就是本文所有的内容了,如果感觉还不错的话。❤ 点个赞再走吧!!!❤

在这里插入图片描述
后续会继续分享数据分析相关文章,如果感兴趣的话可以点个关注不迷路哦~。

这篇关于别再说难了,年轻小伙教你分析及可视化二手房信息(附源码,这不收藏?)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/156023

相关文章

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

如何在Visual Studio中调试.NET源码

今天偶然在看别人代码时,发现在他的代码里使用了Any判断List<T>是否为空。 我一般的做法是先判断是否为null,再判断Count。 看了一下Count的源码如下: 1 [__DynamicallyInvokable]2 public int Count3 {4 [__DynamicallyInvokable]5 get

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

MOLE 2.5 分析分子通道和孔隙

软件介绍 生物大分子通道和孔隙在生物学中发挥着重要作用,例如在分子识别和酶底物特异性方面。 我们介绍了一种名为 MOLE 2.5 的高级软件工具,该工具旨在分析分子通道和孔隙。 与其他可用软件工具的基准测试表明,MOLE 2.5 相比更快、更强大、功能更丰富。作为一项新功能,MOLE 2.5 可以估算已识别通道的物理化学性质。 软件下载 https://pan.quark.cn/s/57

工厂ERP管理系统实现源码(JAVA)

工厂进销存管理系统是一个集采购管理、仓库管理、生产管理和销售管理于一体的综合解决方案。该系统旨在帮助企业优化流程、提高效率、降低成本,并实时掌握各环节的运营状况。 在采购管理方面,系统能够处理采购订单、供应商管理和采购入库等流程,确保采购过程的透明和高效。仓库管理方面,实现库存的精准管理,包括入库、出库、盘点等操作,确保库存数据的准确性和实时性。 生产管理模块则涵盖了生产计划制定、物料需求计划、

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud