热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【数据分析实战】杭州2019年链家在售房源数据分析

文章导览数据集简介解决依赖读取观察数据提出问题数据清洗建议数据清洗数据分析1、数据集链接数据来源于链家2019年在售房源项目,共3万数据量,14个字段

文章导览

        数据集简介

        解决依赖

        读取观察数据

        提出问题

        数据清洗建议

        数据清洗

        数据分析

1、数据集链接

数据来源于链家2019年在售房源项目,共3万+数据量,14个字段。

字段分别是:产权、关注、区域、单价、小区、年限、总价、户型、房屋编码、挂牌时间、朝向、楼层、装修情况、面积。

数据集地址链接:杭州链家2019 在售房源数据集 - Heywhale.com

2、解决依赖

## 解决依赖
# 解决pyplot的社死配色问题
!pip install brewer2mpl
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import brewer2mpl

3、读取观察数据

## 读取数据
data = pd.read_csv("./house.csv")## 观察数据
data.head()
data.describe()
data.info()

4、提出问题

1)探索个数据之间的相关性
2)各区房源数量对比
3)各区平均总价对比
4)各区每平米单价对比
5)房源关注热度对比
6)不同户型关注热度对比
7)不同朝向关注热度对比
8)不同产权关注热度对比
9)不同楼层关注热度热度对比
10)装修程度对关注度的影响
11)全杭州关注度最高小区TOP10


由于数据集没有给出成交量,所以关注重点围绕关注度。

5、数据清洗建议

产权未知的删除
区域一列改成某某区形式
单价一列改成int64型
年限变成整数型,添加楼龄一列
挂牌时间无用,删掉列
户型拆分成室数、厅数两列
房屋编码无用删掉
表中67种朝向(看无语了。。)精简为6种
楼层改为楼层未知和层数两列
装修情况简单分为3种和其他
面积改成整数型

6、数据清洗

## 数据清洗#查看缺失
data.isnull().sum()
# 删除缺失
data.dropna(how="any",inplace=True)
# 处理产权特征-删除未知
data = data.loc[data["产权"]!="未知"]

# 处理区域特征-封装一个函数识别属于哪个区,将函数应用于该列
def location(x):if "临安" in x: return "临安市"elif "上城" in x: return "上城区"elif "下城" in x: return "下城区"elif "江干" in x: return "江干区"elif "拱墅" in x: return "拱墅区"elif "西湖" in x: return "西湖区"elif "滨江" in x: return "滨江区"elif "萧山" in x: return "萧山区"elif "余杭" in x: return "余杭区"elif "富阳" in x: return "富阳区"elif "钱塘" in x: return "钱塘新区"else: return "其他"data["区域"] = data["区域"].apply(location)

# 处理单价特征
data["单价"] = data["单价"].str.split("元").str[0]
data["单价"] = data["单价"].astype("int64")

# 处理年限特征
data["年限"] = data["年限"].str.split("年").str[0]
data = data.loc[data["年限"]!="未知"]
data["年限"] = data["年限"].astype("int64")
data.rename(columns={"年限":"建筑时间"},inplace=True)
data["建筑年龄"] = 2019-data["建筑时间"]

# 处理挂牌时间和房屋编码两特征
data.drop(["挂牌时间","房屋编码"],axis=1,inplace=True)

# 处理朝向特征
def windows(x):if "东南" in x:if x.count("南") > 1:if ("西南" in x) & ("南" not in x):return "东南"else:return "南"else:return "东南"elif "西南" in x:if x.count("南") >1:return "南"else:return "西南"elif "南" in x:return "南"elif "东" in x:return "东"elif "西" in x:return "西" else:return "北"data["朝向"] = data["朝向"].apply(windows)
data.rename(columns={"朝向":"窗户朝向"},inplace=True)

# 处理楼层特征
data["楼层位置"] = data["楼层"].str.split("/").str[0]
data["层数"] = data["楼层"].str.split("/").str[1]
del data["楼层"]
data = data.loc[data["楼层位置"].isin(["高楼层","中楼层","低楼层"])]
data["层数"] = data["层数"].str.extract("(\d+)").astype("int64")

# 处理装修程度特征
def fixtures(x):if "精装" in x: return "精装"elif "简装" in x: return "简装"elif "毛坯" in x: return "毛坯"else: return "其他"data["装修情况"] = data["装修情况"].apply(fixtures)

# 处理面积特征
data["面积"] = data["面积"].str.extract("([\d,.]+)").astype("float")

# 过滤异常值
data = data.loc[(data["总价/万元"] > 50) & (data["总价/万元"] <3000)]
data = data.loc[data["户型"] != "0室0厅"]
# 对列表重置索引
data.reset_index(drop=True,inplace=True)

7、数据分析 

## 数据分析# 1各数据相关性分析
data.corr()
# 相关性图表的可视化
plt.figure(figsize=(10,5))
sns.heatmap(data.corr(),cmap="GnBu")
plt.xticks(fOntsize=12)
plt.yticks(fOntsize=12)
plt.show()

# 2各区房源数量对比
count_house = data.groupby("区域")["关注"].count().sort_values(ascending=False)
plt.figure(figsize=(10,5))
sns.barplot(count_house.index,count_house)
plt.title("各区域房源",fOntsize=14)
plt.ylabel("房源数量",fOntsize=12)
plt.xlabel("区域",fOntsize=12)
plt.xticks(rotation=30,fOntsize=12)
plt.show()

# 3各区平均总价对比
total_price = data.groupby("区域")["总价/万元"].mean().sort_values(ascending=False)
plt.figure(figsize=(10,5))
sns.barplot(total_price.index,total_price)
plt.title("各区总价对比",fOntsize=14)
plt.ylabel("总价格/万元",fOntsize=12)
plt.xlabel("区域",fOntsize=12)
plt.xticks(rotation=30,fOntsize=12)
plt.show()

# 4各区每平米单价对比
price = data.groupby("区域")["单价"].mean().sort_values(ascending=False)
plt.figure(figsize=(10,5))
sns.barplot(price.index,price)
plt.title("各区平均单价对比",fOntsize=14)
plt.ylabel("每平米单价",fOntsize=12)
plt.xlabel("区域",fOntsize=12)
plt.xticks(rotation=30,fOntsize=12)
plt.show()

 

# 5各区房源关注热度对比
Attention = data.groupby("区域")["关注"].sum().sort_values(ascending=False)
plt.figure(figsize=(10,5))
sns.barplot(Attention.index,Attention)
plt.title("各区房源关注",fOntsize=14)
plt.ylabel("总关注度",fOntsize=12)
plt.xlabel("区域",fOntsize=12)
plt.xticks(rotation=30,fOntsize=12)
plt.show()

 

# 6不同户型关注热度对比
shape_att = data.groupby("户型")["关注"].sum().sort_values(ascending=False)
plt.figure(figsize=(10,5))
sns.barplot(shape_att.index,shape_att)
plt.title("户型关注度TOP10",fOntsize=14)
plt.ylabel("总关注度",fOntsize=12)
plt.xlabel("户型",fOntsize=12)
plt.xlim(-0.5,9.5)
plt.xticks(fOntsize=12)
plt.show()

 

# 7不同朝向关注热度对比
direction_att = data.groupby("窗户朝向")["关注"].sum().sort_values(ascending=False)
explode01 = np.array([0.1]*6)
colors01 = brewer2mpl.get_map(&#39;Set3&#39;, &#39;qualitative&#39;, 6).mpl_colors # 解决配色问题关键
# 忍不住吐槽,pyplot默认的配色真丑。。。
plt.figure(figsize=(8,8))
plt.pie(direction_att,explode=explode01,labels=direction_att.index,autopct="%.2f%%",textprops={&#39;fontsize&#39;:14,&#39;color&#39;:&#39;k&#39;},colors=colors01)
plt.title("不同朝向关注度占比",fOntsize=14)
plt.show()

 

# 8不同产权关注热度对比
property_att = data.groupby("产权")["关注"].sum().sort_values(ascending=False)
explode02 = np.array([0.1]*3)
colors02 = brewer2mpl.get_map("Set3","qualitative",3).mpl_colors
plt.figure(figsize=(8,8))
plt.pie(property_att,explode=explode02,labels=property_att.index,autopct="%.2f%%",textprops={&#39;fontsize&#39;:18,&#39;color&#39;:&#39;k&#39;},colors=colors02)
plt.title("不同产权关注度占比",fOntsize=14)
plt.show()

# 9不同楼层关注热度热度对比
# 根据一般常见楼层层数,划分为1-7,7-11,11-18,18-26,26-33,33以上六个阶段,查看每一阶段那个层高受欢迎
def height_range(x):if x in range(0,8):return "7层楼"elif x in range(8,12):return "11层楼"elif x in range(12,19):return "18层楼"elif x in range(19,27):return "26层楼"elif x in range(27,34):return "33层楼"elif x in range(34,100):return "更高层楼"data["层高类型"] = data["层数"].apply(height_range)
pice_data = data.groupby("层高类型")["楼层位置"].value_counts()
pd1 = pice_data.loc[:,"高楼层"]
pd2 = pice_data.loc[:,"中楼层"]
pd3 = pice_data.loc[:,"低楼层"]
plt.figure(figsize=(10,5))
plt.bar(pd1.index,pd1,label="高楼层")
plt.bar(pd2.index,pd2,bottom=pd1,label="中楼层")
plt.bar(pd3.index,pd3,bottom=pd2,label="低楼层")
plt.ylabel("关注度",fOntsize=14)
plt.title("不同楼层关注热度",fOntsize=16)
plt.xticks(fOntsize=12)
plt.legend()
plt.show()

 

# 10装修程度对关注度的影响
fix_att = data.groupby("装修情况")["关注"].sum().sort_values(ascending=False)
explode03 = np.array([0.05]*4)
colors03 = brewer2mpl.get_map("Set3","qualitative",4).mpl_colors
plt.figure(figsize=(8,8))
plt.pie(fix_att,explode=explode03,labels=fix_att.index,autopct="%.2f%%",textprops={&#39;fontsize&#39;:14,&#39;color&#39;:&#39;k&#39;},colors=colors03)
plt.title("不同装修关注度占比",fOntsize=14)
plt.show()

 


推荐阅读
  • 注意力汇聚:NadarayaWatson 核回归
    Nadaraya-Watson核回归是具有注意力机制的机器学习范例。Nadaraya-Watson核回归的注意力汇聚是对训练数据中输出的加权平均。从注意力的角度来看, ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • 花瓣|目标值_Compose 动画边学边做夏日彩虹
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Compose动画边学边做-夏日彩虹相关的知识,希望对你有一定的参考价值。引言Comp ... [详细]
  • skia~setDIBitsToDevice~Windows
    问题:skia是一个图形库,本身没有在设备上作图的能力,可以通过提供的SkView类,参考实现对不同平台设备上作画。SkOsWindow_Win.cpp:onPaint方法中提供了 ... [详细]
  • POJ 1046 Color Me Less
    ColorMeLessTimeLimit: 1000MS MemoryLimit: 10000KTotalSubmissions: 31449 Accept ... [详细]
  • Qt编写自定义控件57直方波形图
    一、前言直方波形图控件非原创控件,控件大全中大概有20-30个控件非自己原创,而是参考了网上开源的代码,自己加以整理和完善,新增了插件的代码使得可以直接集成到QtDesigner或 ... [详细]
  • 上一篇《手把手教你用深度学习做物体检测(三):模型训练》中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体 ... [详细]
  • K-Means算法原理
    原理给定样本集,k-means算法得到聚类,使得下面平方误差最小其中表示聚类的中心点。实现上式最小化是一个NP难问题,实际上采用EM算法可以求得近似解。算法伪代码如下输入:,聚 ... [详细]
  • Unity Graphic功能,实现UGUI上三角形,四边形,圆环的绘制
    前言这篇简单的纪录下利用Graphic类,实现UGUI圆环的绘制。效果图如下:github目录:https:github.comluck ... [详细]
  • Highcharts Stock 实时图表监控JS
    为什么80%的码农都做不了架构师?第一次加载时从数据库中抽取监控数据,JS生成昨天及上周同天的对比数据。每分钟动态更新图表。varbistockb ... [详细]
  • 使用Flutternewintegration_test进行示例集成测试?回答首先在dev下的p ... [详细]
author-avatar
行侠客人生_983
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有