Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >链家网 爬虫+数据分析 实战案例

链家网 爬虫+数据分析 实战案例

作者头像
龙哥
发布于 2019-07-31 07:39:13
发布于 2019-07-31 07:39:13
2K00
代码可运行
举报
文章被收录于专栏:Python绿色通道Python绿色通道
运行总次数:0
代码可运行

上周有某高校老师来我们公司进行培训,公司安排我上了两天课。最后一天是一个数据分析的小案例,这里记录分享一下,比较适合刚入门的小白练手。

大概的逻辑是这样的:利用Scrapy爬取了链家的2900余条成都二手房的数据,然后基于这些数据做了一些关于房屋价格、区域、户型、房屋数量等方面的分析。

在分析之前呢,数据已经爬取好了,存到了Excel当中,所以这里就不演示爬虫部分,只进行分析部分的说明。但是需要看一下爬取的都是哪些字段

接下来就正式进入分析部分。首先导入必要的库,并做一部分设置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import re
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 指定画布风格
plt.style.use("fivethirtyeight")

# Mac环境下设置中文字体
plt.rcParams['font.family'] = ['Arial Unicode MS'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
sns.set_style({'font.sans-serif':['Arial Unicode MS','Arial']})

# Windows环境下设置中文字体
# sns.set_style({'font.sans-serif':['simhei','Arial']})

# 如果代码不在jupyter中执行,可以删掉
%matplotlib inline

我用的IDE是jupyter lab,分析部分主要使用pandas库,绘图部分用到了matplotlib和seaborn,在后面进行数据预处理部分我们需要用到正则表达式,所以同时导入re模块。

接下来为了美化图片我们统一设置了画布风格,同时为了在图片中正常显示中文做了字体设置。

然后就可以导入我们的数据了。需要说明的是我是将爬取的数据保存在同级目录下名为house.xlsx的文件中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
house_df = pd.read_excel('house.xlsx')
# 看一下数据长什么样子
house_df.head()

输出:

因为字段太多,所以字段显示不完整,但是可以大概了解一下。

查看一下缺失值的情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看确实值情况
house_df.info()

输出:

我们可以看到有些字段是2993行,有些字段是2895行,甚至还有2890行。这说明我们的数据中有缺失值存在,我们需要做的就是过滤掉缺失值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
house_df.dropna(inplace=True)
house_df.info()

过滤掉缺失值之后,再看一下

现在所有字段都是2886行,可以进行下一步了。

由于目前的数据中,很多字段都是带单位的字符串类型,我们需要做的是将它们转换为不带单位的字符串类型,这样的话有助于我们后续的分析。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 做一部分预处理
house_df['houseTotalMoney'] = house_df['houseTotalMoney'].apply(lambda x: float(x.replace('万', '')))
house_df['houseSinglePrice'] = house_df['houseSinglePrice'].apply(lambda x: float(x.replace('元/平米', '')))
house_df['houseDownPayment'] = house_df['houseDownPayment'].apply(lambda x: float(x.replace('万', '')))
house_df['houseBuildingArea'] = house_df['houseBuildingArea'].apply(lambda x: float(x.replace('㎡', '')))
house_df['totalFloor'] = house_df['houseFloor'].apply(lambda x:re.search('\d+', x).group())

在上面的代码中,我们去掉了houseTotalMoney、houseSinglePrice、houseDownPayment、houseBuildingArea四个字段的单位,并将其转换为float类型。最后一行中我们提取了houseFloor字段中的数字来表示房屋总楼层,保存到house_df的totalFloor列中。

然后我们再做一个小处理,从houseLocation字段中提取行政区信息,然后保存到Region列中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# houseLocation字段表示区域,我们取前两个字,然后方便分区统计
house_df['Region'] = house_df['houseLocation'].apply(lambda x:x.split('/')[0])

看一下整体统计信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 再次观察有异常值
house_df.describe() # houseNumber为房屋编号 不用管

输出:

我们看到总价的平均值是143.65万,最便宜的是32万(有可能是老房子、公寓之类的,正常),最贵的是1100万。单价方面,均价是15685元/平米,最便宜的是5129元/平米,最贵的是44846元/平米。

现在正式进入可视化阶段。

首先我们看一下单价、房屋数量、总价和行政区的关系

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 按区域分析数量和价格
df_house_count = house_df.groupby('Region')['houseId'].count().sort_values(ascending=False).to_frame().reset_index().reindex(['Region', 'Count'], axis=1)
df_house_mean = house_df.groupby('Region')['houseSinglePrice'].mean().sort_values(ascending=False).to_frame().reset_index()

f, [ax1, ax2, ax3] = plt.subplots(3, 1, figsize=(12, 18))
sns.barplot(x='Region', y='houseSinglePrice', palette='Blues_d', data=df_house_mean, ax=ax1)
ax1.set_title('成都各区二手房每平米单价对比')
ax1.set_xlabel('区域')
ax1.set_ylabel('每平米单价')

sns.barplot(x='Region', y='Count', palette='Greens_d', data=df_house_count, ax=ax2)
ax2.set_title('成都各区二手房数量对比')
ax2.set_xlabel('区域')
ax2.set_ylabel('数量')

sns.boxplot(x='Region', y='houseTotalMoney', data=house_df, ax=ax3)
ax3.set_title('成都各区二手房房屋总价')
ax3.set_xlabel('区域')
ax3.set_ylabel('房屋总价')

plt.savefig('images/img1')
plt.show()

输出:

看一下房屋面积的分布情况,还有面积和总价的相关性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 6))
# 房屋面积
sns.distplot(house_df['houseBuildingArea'], ax=ax1, color='r')
sns.kdeplot(house_df['houseBuildingArea'], shade=True, ax=ax1)
ax1.set_xlabel('面积')

# 房屋面积和价格的关系
sns.regplot(x='houseBuildingArea', y='houseTotalMoney', data=house_df, ax=ax2)
ax2.set_xlabel('面积')
ax2.set_ylabel('总价')

plt.savefig('images/img2')
plt.show()

输出:

看一下户型的数量情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f, ax1 = plt.subplots(figsize=(12,12))
sns.countplot(y='houseType', data=house_df, ax=ax1)
ax1.set_title('房屋户型', fontsize=15)
ax1.set_xlabel('数量')
ax1.set_ylabel('户型')

plt.show()

输出:

看一下装修情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f, [ax1,ax2,ax3] = plt.subplots(1, 3, figsize=(20, 5))
sns.countplot(house_df['houseDecoration'], ax=ax1)
sns.barplot(x='houseDecoration', y='houseTotalMoney', data=house_df, ax=ax2)
sns.boxplot(x='houseDecoration', y='houseTotalMoney', data=house_df, ax=ax3)

plt.savefig('images/img4')
plt.show()

输出:

看一下电梯的情况

统计电梯信息之前我们先做一下词频统计:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
house_df['houseElevator'].value_counts()

输出:

我们看到有179套是“暂无数据”,对于这种情况我们就需要处理一下了。具体的处理方法有很多种,要根据不同的场景去选择,我们这里只是为了学习,可以粗暴一点,直接过滤掉,不让其参与计算。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
elevator_df = house_df[house_df['houseElevator'] != '暂无数据']
elevator_df['houseElevator'].value_counts()

输出:

开始绘图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f, [ax1, ax2] = plt.subplots(1, 2, figsize=(16, 8))
sns.countplot(elevator_df['houseElevator'], ax=ax1)
ax1.set_title('有无电梯数量对比', fontsize=15)
ax1.set_xlabel('是否有电梯')
ax1.set_ylabel('数量')

sns.barplot(x='houseElevator', y='houseSinglePrice', data=elevator_df, ax=ax2)
ax2.set_title('有无电梯房价对比')
ax2.set_xlabel('是否有电梯')
ax2.set_ylabel('单价')

plt.savefig('images/img5')
plt.show()

输出:

最后来看一下总楼层的数量情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f, ax1 = plt.subplots(figsize=(20,5))
sns.countplot(x='totalFloor', data=house_df, ax=ax1)
ax1.set_title('房屋楼层',fontsize=15)
ax1.set_xlabel('总楼层')
ax1.set_ylabel('数量')

plt.savefig('images/img6')
plt.show()

输出:

以上只是一个学习用的简单例子,如果要在生产环境中使用的话还需要做一部分改动。比如涉及到两次缺失值的处理问题,要根据具体的情况去选择相应的方法;比如对于统计的图表选择也要根据具体的业务场景去选择;而且我们这个案例中是没有涉及到异常值的处理,实际上房屋价格是存在异常值的——20多万的房子肯定是不存在的,我怀疑是车位的交易信息。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-07-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
干货|教你一文掌握:Matplotlib+Seaborn可视化
Seaborn和Matplotlib是Python最强大的两个可视化库。Seaborn其默认主题让人惊讶,而Matplotlib可以通过其多个分类为用户打造专属功能。
1480
2020/03/09
4.9K0
干货|教你一文掌握:Matplotlib+Seaborn可视化
数据分析实战—北京二手房房价分析
目的:本篇给大家介绍一个数据分析的初级项目,目的是通过项目了解如何使用Python进行简单的数据分析。
Python数据科学
2018/08/06
2K0
数据分析实战—北京二手房房价分析
【Kaggle入门级竞赛top5%排名经验分享】— 分析篇
Kaggle作为公认的数据挖掘竞赛平台,有很多公开的优秀项目,而其中作为初学者入门的一个好的项目就是:泰坦尼克号生还者预测。
Python数据科学
2018/08/06
9381
【Kaggle入门级竞赛top5%排名经验分享】— 分析篇
极不均衡样本的信用卡欺诈分析
原notebook地址为:https://www.kaggle.com/code/janiobachmann/credit-fraud-dealing-with-imbalanced-datasets/notebook
皮大大
2023/08/25
5170
深度学习基础之matplotlib,一文搞定各个示例
Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的问题,今天来学习下,走起!!
香菜聊游戏
2021/10/19
1.6K0
深度学习基础之matplotlib,一文搞定各个示例
常用的时间序列分析方法总结和代码示例
时间序列是最流行的数据类型之一。视频,图像,像素,信号,任何有时间成分的东西都可以转化为时间序列。
deephub
2024/04/26
2880
常用的时间序列分析方法总结和代码示例
业务数据分析最佳案例!旅游业数据分析!⛵
在本篇内容中,ShowMeAI将带大家对旅游业,主要是酒店预订需求进行分析,我们使用到的数据集包含城市酒店和度假酒店的预订信息,包括预订时间、住宿时长、客人入住的周末或工作日晚数以及可用停车位数量等信息。
ShowMeAI
2022/11/27
1.6K0
业务数据分析最佳案例!旅游业数据分析!⛵
还有高手?气象要素廓线局部放大绘制
首先,我们需要使用Python中的Matplotlib库来创建一个简单的气象数据可视化。 我们将使用Matplotlib的plot函数来绘制气象数据的整体趋势图, 然后使用mark_inset函数来创建一局部放大的子图,以便更详细地查看数据的某个特定部分。
用户11172986
2024/06/20
1270
还有高手?气象要素廓线局部放大绘制
AI数据分析:用deepseek进行贡献度分析(帕累托法则)
帕累托法则,也称为80/20法则,是由意大利经济学家维尔弗雷多·帕累托提出的。它指出在许多情况下,大约80%的效益来自于20%的原因。这个原则在很多领域都有应用,包括商业、经济、社会问题等。
AIGC部落
2024/06/24
6790
AI数据分析:用deepseek进行贡献度分析(帕累托法则)
美化Matplotlib的3个小技巧
Matplotlib是Python的数据可视化库的基础。它是其他可视化工具(如Seaborn)的基础。 Matplotlib提供了很大的灵活性,因此您可以自定义或调整几乎所有的图表。但是想要完全控制可视化就需要编写更多的代码。 在本文中,我们将介绍3个可以用于定制Matplotlib图表的技巧: 减少x轴或y轴上的刻度数 添加一个辅助y轴 共享x轴的子图坐标对齐 本文中我们将使用折线图为例,但这些技巧也可以应用于其他类型的图。我创建了一个数据集模拟价格和销售数据。 import pandas a
张俊红
2022/10/09
1.4K0
美化Matplotlib的3个小技巧
数据分析实战:利用python对心脏病数据集进行分析
今天在kaggle上看到一个心脏病数据(数据集下载地址和源码见文末),那么借此深入分析一下。
Python进阶者
2020/06/19
2.8K0
数据分析实战:利用python对心脏病数据集进行分析
python数据分析之Matplotlib学习笔记
说到绘图,那必须要有一个画板。Figure作为一个“老画板”,在matlab中经常能看到它的出没,在python中,它的具体语法是什么呢?让我们来看一下。
远方的星
2021/07/31
8890
python数据分析之Matplotlib学习笔记
使用numba加速python科学计算
python作为一门编程语言,有非常大的生态优势,但是其执行效率一直被人诟病。纯粹的python代码跑起来速度会非常的缓慢,因此很多对性能要求比较高的python库,需要用C++或者Fortran来构造底层算法模块,再用python进行上层封装的方案。在前面写过的这篇博客中,介绍了使用f2py将fortran代码编译成动态链接库的方案,这可以认为是一种“事前编译”的手段。但是本文将要介绍一种即时编译(Just In Time,简称JIT)的手段,也就是在临近执行函数前,才对其进行编译。以下截图来自于参考链接4,讲述了关于常见的一些编译场景的区别:
DechinPhy
2021/05/21
2K0
TMDB电影数据分析报告
本次报告的主要任务是:根据历史电影数据,分析哪种电影收益能力更好,未来电影的流行趋势,以及为电影拍摄提供建议。细化为以下几个小问题:
润森
2022/09/22
1.1K0
TMDB电影数据分析报告
从1维到6维,一文读懂多维数据可视化策略
选自towardsdatascience 作者:Dipanjan Sarkar 机器之心编译 参与:Jane W、乾树、黄小天 数据聚合、汇总和可视化是支撑数据分析领域的三大支柱。长久以来,数据可视化都是一个强有力的工具,被业界广泛使用,却受限于 2 维。在本文中,作者将探索一些有效的多维数据可视化策略(范围从 1 维到 6 维)。 介绍 描述性分析(descriptive analytics)是任何分析生命周期的数据科学项目或特定研究的核心组成部分之一。数据聚合(aggregation)、汇总(summa
机器之心
2018/05/10
1.9K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
一章内容介绍三块内容,感觉哪个都没说清。 In[1]: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline 1. matplotlib入门 Matplotlib提供了两种方法来作图:状态接口和面向对象。 # 状态接口是通过pyplot模块来实现的,matplotlib会追踪绘图环境的当前状态 # 这种方法适合快速画一些简单
SeanCheney
2018/11/29
1.7K0
《Pandas Cookbook》第11章 用Matplotlib、Pandas、Seaborn进行可视化
matplotlib的多图合并
本文是我在学习莫烦老师视频教程时候整理的笔记。Matplotlib是一个python的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,散点图等。承接上文:
触摸壹缕阳光
2020/04/26
1.9K0
独家 | 教你实现数据集多维可视化(附代码)
翻译:张媛 校对:卢苗苗 用代码将你的数据集进行多维可视化! 介绍 描述性分析是与数据科学或特定研究相关的任何分析生命周期中的核心组成部分之一。数据聚合,汇总与可视化是支撑数据分析这一领域的主要支柱。从传统商业智能时代开始,即使在如今的人工智能时代,数据可视化一直是一种强大的工具,由于其能够有效地抽象出正确的信息,清晰直观地理解和解释数据结果而被很多组织广泛地采用。然而处理通常具有两个以上属性的数据集时开始出现问题,因为数据分析和通信的媒介一般局限于两个维度。在本文中,我们将探讨多维数据可视化过程中的一些
数据派THU
2018/03/26
7.1K1
独家 | 教你实现数据集多维可视化(附代码)
【Python数据分析与可视化】:使用【Matplotlib】实现销售数据的全面分析 ——【Matplotlib】数模学习
在开始使用Matplotlib之前,必须先在你的Python环境中安装它。PyCharm提供了一种方便的方法来安装第三方库。下面是如何在PyCharm中安装Matplotlib的详细步骤:
小李很执着
2024/07/02
3300
【Python数据分析与可视化】:使用【Matplotlib】实现销售数据的全面分析 ——【Matplotlib】数模学习
分群思维(三)基于帕累托模型的渠道分类
有时候按照二八原则分成两类显得过于单薄,可以在帕累托的基础上分为三类即ABC分类法,【A:0~80%,B:80%-90%,C:90~100%】
HsuHeinrich
2023/03/29
5090
分群思维(三)基于帕累托模型的渠道分类
推荐阅读
相关推荐
干货|教你一文掌握:Matplotlib+Seaborn可视化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档