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

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

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

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

import reimport pandas as pdimport seaborn as snsimport 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的文件中。

house_df = pd.read_excel('house.xlsx')# 看一下数据长什么样子house_df.head()

输出:

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

查看一下缺失值的情况

# 查看确实值情况house_df.info()

输出:

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

house_df.dropna(inplace=True)house_df.info()

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

现在所有字段都是2886行,可以进行下一步了。
由于目前的数据中,很多字段都是带单位的字符串类型,我们需要做的是将它们转换为不带单位的字符串类型,这样的话有助于我们后续的分析。

# 做一部分预处理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列中。

# houseLocation字段表示区域,我们取前两个字,然后方便分区统计house_df['Region'] = house_df['houseLocation'].apply(lambda x:x.split('/')[0])

看一下整体统计信息

# 再次观察有异常值house_df.describe() # houseNumber为房屋编号 不用管

输出:

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

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

# 按区域分析数量和价格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()

输出:

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

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()

输出:

看一下户型的数量情况

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()

输出:

看一下装修情况

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()

输出:

看一下电梯的情况

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

house_df['houseElevator'].value_counts()

输出:

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

elevator_df = house_df[house_df['houseElevator'] != '暂无数据']elevator_df['houseElevator'].value_counts()

输出:

开始绘图:

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()

输出:

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

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多万的房子肯定是不存在的,我怀疑是车位的交易信息。

以上所有代码(包括爬虫部分)已上传至GitHub,地址为https://github.com/Y-sir/Lianjia_analysis。

链家房屋数据分析实战相关推荐

  1. 链家全国房价数据分析 : 数据获取

    最近一直在看论文,也有很久没有coding了,感觉对爬虫的技术有些生疏,我觉得即使现在手头没有在做这方面的东西,经常爬点对技术保鲜还是很重要的.所以这次我打算爬链家的房价数据,目的主要是对爬虫和Pyt ...

  2. 【Python爬虫项目】链家房屋信息抓取(超详细适合新手练习附源码)

    爬取链家房屋信息 爬取信息具体如下: 1.标题 2.位置 3.房屋介绍 4.房屋总价 5.房屋单价 一.检查网页源码 搜索标题中的关键字发现目标信息可以在源码中找到,所以我们请求该url网址就可以拿到 ...

  3. 简单的链家租房数据分析

    链家租房数据分析 以北京链家租房数据为例进行以下数据分析 对"户型"."面积"和"价格"以及每平米价格等信息进行简要的统计分析,如每平米价格 ...

  4. 北京链家二手房数据分析

    首先我们需要将链家二手房的数据抓取下来,用我们上课学的内容,很容易实现(bs4,re,urllib,搞定!): import re import csv from bs4 import Beautif ...

  5. 武汉链家二手房数据分析

    爬取链家二手房武汉地区的成交数据,共23292条记录,利用Excel.MySQL.Power BI等工具对影响武汉二手房交易价格的因素进行了分析 分析思路 分析目的 武汉哪个区的二手房交易最多? 哪种 ...

  6. python爬取链家房屋及经纬度信息-以宁波为例

    铺垫工作 1:寻找你需要的城市的url. 2 :获取每栋房屋的详情url. 3:获取具体信息 4:利用百度API解析地址返回经纬度(其实在链家的网站上已经返回了经纬度,但是不知道为何拿不到res.te ...

  7. PYTHON链家租房数据分析:岭回归、LASSO、随机森林、XGBOOST、KERAS神经网络、KMEANS聚类、地理可视化...

    全文下载链接:http://tecdat.cn/?p=29480 作者:Xingsheng Yang 1 利用 python 爬取链家网公开的租房数据: 2 对租房信息进行分析,主要对房租相关特征进行 ...

  8. python爬虫requests源码链家_python数据分析实例:python抓取链家二手房源数据和分析...

    python语言,在数据分析方面,涵盖了"数据获取→数据处理→数据分析→数据可视化"这个流程中每个环节,不可不谓之为利器. 本篇文章我们就利用python语言在数据分析方面的应用, ...

  9. 链家数据分析(社招),骗局???

    链家数据分析(社招),骗局??? 非常"有幸"的参加过一次十分浪费时间的链家的数据分析的社招的面试,后面越想越不对劲,感觉就是被当猴耍了,所以记录一下.一是为了表达自己的不满,也是 ...

最新文章

  1. 李白打酒c语言编程,搞定了“李白打酒”,还原问题都迎刃而解
  2. 那位13岁就当上老板的开发者是如何炼成的?
  3. 《大道至简》第一章编程的精义伪代码读后感
  4. 用于特征选择的F-Score打分及其Python实现
  5. tp5支持啥数据库_MS Access数据库是被严重低估的一款优秀软件
  6. 申请贷款必须留联系人吗?不留行不行?
  7. 前端学习(3288):react hook state-hook
  8. typescript 安装
  9. 互联网日报 | 4月7日 星期三 | 雷军称小米首款汽车售价10至30万;携程通过港交所上市聆讯;深交所主板与中小板正式合并...
  10. awk处理带有空格的字符串_五分钟入门文本处理三剑客grep awk sed
  11. Redis (三)雪崩和穿透
  12. 002 如何将电子版一寸照以照片的方式打印出来
  13. 筱筱看博客(uni-app、mumu模拟器、真机测试)
  14. Asp.net中汉字转换成为拼音
  15. java 项目骨架,maven项目中骨架
  16. python chr黑方格_Python中的chr()
  17. HashMap的put过程
  18. mysql结构改写为hbase表_sqlite数据库修改表结构
  19. linux之shell的一些基础
  20. Docker删除指定镜像

热门文章

  1. 罗斌_赢在中国第三赛季1080榜单 (2007/09/26 18:59)
  2. eplan需要安装64位office
  3. 全盘镜像只还原c盘有影响么_系统全盘备份与还原
  4. 英制、美制、公制螺纹标准
  5. Angular2.x-显示heroes列表
  6. -bash: /root: 是一个目录
  7. Ant的入门级教程(1)?ANT 蚂蚁是什么?带有简单使用。
  8. HTML、XHTML、HTML5、XML区别
  9. 前端实现聊天对话框页面
  10. SSO单点登录(集成SSO认证服务)