此为之前偶尔在社区看到的优秀作业“链家2011-2016北京二手房成交数据分析”,在此为了工作简历上的项目巩固复习练习一次。

环境准备

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

插入数据

#数据读取f=open(r'D:\Documents\Tencent Files\2698968530\FileRecv\日月光华链家成交数据\lianjia1.csv')
data=pd.read_csv(f)

观察数据

data.head()

合并

数据源一共是7个csv文件,文件名是“lianjia+1到7”,可以使用循环语句将七个文件写入到一个列表dataR中

dataR=[]
for i in range(1,8):f=open(r'D:\Documents\Tencent Files\2698968530\FileRecv\日月光华链家成交数据\lianjia{}.csv'.format(i))data=pd.read_csv(f)dataR.append(data)

出现了error

UnicodeDecodeError: 'gbk' codec can't decode byte 0x97 in position 154: illegal multibyte sequence这说明7个文件的编码类型还不一样,部分数据不能用gbk类型解码。那我们就需要使用try except方法,先try gbk编码,不行就except使用我们默认的utf-8编码
dataY=[]
for i in range(1,8):try:f=open(r'D:\Documents\Tencent Files\2698968530\FileRecv\日月光华链家成交数据\lianjia{}.csv'.format(i),encoding='gbk')data=pd.read_csv(f)except:f=open(r'D:\Documents\Tencent Files\2698968530\FileRecv\日月光华链家成交数据\lianjia{}.csv'.format(i),encoding='utf-8')data=pd.read_csv(f)dataY.append(data)

输出列表长度看是否是7

len(dataY)

随便取一个的几行看看

dataY[2].tail()

数据正常显示,说明并没有问题。但是这是一个list,我们怎么把7个数据合并到一起呢?这就需要使用到pandas包里面的concat函数。

data=pd.concat(dataY)

对他进行描述性统计分析

data.shape

data.describe()

data.info()

data.head()

这个数据集一共有141140条数据,14个属性值,只有“套数”和“总价”是数值类型,其他的都是字符串类型,再取他的前3行进行观察,发现成交单价是字符串类型,因为它写的是xxx元/平。后期还需要再对成交单价进行数据的处理操作。

接下来我们要对数据进行预处理了,但是首先要想到的是,数据有没有缺失值,通过对结果是否报错来判断是否有缺失值

data.isnull()

...

对这些布尔值进行sum运算,可以得出有多少缺失值

(data.isnull()).sum()

结果得出版块(bankuai)数据缺失值为1321,门店(mendian)缺失值为13条,其他的数据缺失值都是1条。

data[data.cjdanjia.isnull()]data.dropna(how='all',inplace=True)data.isnull().sum()

发现第57119条数据缺失是很多属性一起缺失的,使用drop_duplicates把这条数据删除,在此之前,因为这个函数是删除重复的下一条数据,因此需要将数据按照地区排序,将空值放在后位进行删除,最后进行检查。

用duplicated的subset参数指定重复的列,查找出来这些列重复的数据。然后再排序

(data.duplicated(subset=['cjdanjia','cjxiaoqu','cjlouceng','bankuai'])).sum()data.sort_values(by='bankuai',inplace=True)

再使用drop_duplicates函数,就可以去掉这些重复值了,同时能保留板块的有效信息

data.drop_duplicates(subset=['cjdanjia','cjxiaoqu','cjlouceng'],inplace=True)

数据类型转换,异常值处理,数据离散化

我们想对成交单价进行分析,这列数据非常重要。但是它是字符串形式,我们要把单价和'元/平'分开来。首先我们先看一下是不是所有数据包含了'元/平'。波浪号~放在语句前面表示否定。

data.head()(~data.cjdanjia.str.contains('元/平')).sum()

得出结果为0。 得出不包含'元/平'的数据数量为0 ,则就是都有'元/平'。那我们定义一个lambda x函数,把这里数据进行转换,把'元/平'替换为空字符串

data.cjdanjia.map(lambda x:round(float(x.replace('元/平',''))/10000,2))

把元/平变成了空字符串,那么数据就只留下了单价数值。然后我们把这个单价从字符串object类型,astype变成float类型,便于后面的计算。然后除以10000,用round函数保留2位小数点。这样得出来的结果就是3.45万,5.31万的类型。

看成交单价的最大最小值

data.cjdanjia.min()data.cjdanjia.max()

发现最小值为0,去掉0的数据,再看最小值

data=data[data.cjdanjia>0]data.cjdanjia.min()

此时最小值为0.01,还是不正常,为了处理这样的异常值,我们需要设置一个范围,比如5000元一平,往上的数据才算有效数据

data=data[data.cjdanjia>0.5]data.cjdanjia.min()

此时最小值为0..51,单价数据是我们想要的数据类型了,我们想把这些数据进行离散化,分成多个区间,看成交单价的分布,这个时候就需要使用到bins和cut函数

bins=[0,1,2,3,4,5,7,9,11,13,15]
pd.cut(data.cjdanjia,bins)

再对这份数据进行value_counts,看看落在各个区间上的数据都有多少

pd.cut(data.cjdanjia,bins).value_counts()

画出点图

pd.cut(data.cjdanjia,bins).value_counts().plot()

然后直接画个柱状图看看。rot是让x轴标签倾斜20度,不然会挤在一起。

pd.cut(data.cjdanjia,bins).value_counts().plot.bar(rot=20)

也可以画出饼图

pd.cut(data.cjdanjia,bins).value_counts().plot.pie(figsize=(8,8))

字符串的处理

首先,我们看看是不是所有数据都包含这三个数据,也就是用/分开之后,是不是都是三个数据,以免套用函数报错

(data.cjlouceng.str.split('/').map(len)!=3).sum()

0

data.cjlouceng

可以把朝向这个数据单独取出来之后,单独给原表增加一列'chaoxiang

data.cjlouceng.map(lambda x:x.split('/')[0])data['chaoxiang']=data.cjlouceng.map(lambda x:x.split('/')[0])

楼层这列也这样处理

data['louceng']=data.cjlouceng.map(lambda x:x.split('/')[1])data

对楼层取unique,可以看出还有未知这个数据,我们把未知这类数据去掉。(原始数据还有空字符串' ',之前处理的时候已经查找出来了,但是没有记录在此)

data.louceng.unique()

还有未知和空字符串的部分数据也需要处理

data[data.louceng=='']data[data.louceng=='未知']data=data[(data.louceng!='未知')&(data.louceng!='')]data

pd.get_dummies(data.louceng)

然后我们可以使用get_dummies对楼层的这几个类别进行one-hot处理,这样就能非常方便离散化处理,然后得出各个类别的counts。

然后再使用join函数,把这个结果直接插入到原表后面去

data.join(pd.get_dummies(data.louceng))

再进行sum,得出各个类别的数量

pd.get_dummies(data.louceng).sum()

他的柱形图

pd.get_dummies(data.louceng).sum().plot.bar()

把数据导出成csv文件。为了防止index变成乱码,添加用utf_8_sig编码的参数。

(pd.get_dummies(data.louceng).sum()).to_csv('loucengfenbu3.csv',encoding='utf_8_sig')

分组运算、布尔过滤和数据透视

首先,对于成交时间进行处理,仅取出中间的年

data['cjshijian']=data.cjshijian.map(lambda x:x.split(':')[1])

先进行分隔,取后面的时间,再再按照-进行分隔,取年份

data['year']=data.cjshijian.map(lambda x:x.split('-')[0])data.groupby(['year','xingming'])['xingming'].value_counts()

分析每一年的经纪人数量。按照年份,经纪人姓名分组

data.groupby(['year','xingming'])['xingming'].count()

研究成交总价大于1亿的经纪人的工作年限。我们可以先分组,然后再sum,查出大于1亿的数据

data_group=data.groupby(['xingming','congyenianxian'])['cjzongjia'].sum()data_group[data_group>10000]

等等也可以研究其他的问题。

转载于:https://www.cnblogs.com/RR-99/p/10370884.html

Python 北京二手房成交数据分析过程相关推荐

  1. 使用python进行北京二手房信息数据分析及可视化展示

    之前我们爬取了贝壳找房上的北京二手房信息,具体可以查看python爬取贝壳找房之北京二手房源信息,现在我们针对获取的数据进行分析及可视化的展示,本文代码和数据均存放在github上,链接地址:贝壳找房 ...

  2. 北京二手房成交继续低迷 有豪宅每周降价300万

    文章来源:筑讯中国 近日,记者的朋友圈遭到二手房中介的一批"业主急售""今日特价房"刷屏. "性价比最高独栋别墅!带私家温泉,原价3424万,今日特价 ...

  3. python链家数据分析统计服_链家二手房成交——Python数据分析

    一.分析背景和目的 近些年国内房地产行业发展势头迅猛,二手房需求成为了一种新热门.本次项目分析的是作为行业巨头的链家关于"二手房成交价格.经纪人相关因素"的业务数据,其数据的相关分 ...

  4. python二手房数据分析_Python 爬取北京二手房数据,分析北漂族买得起房吗? | 附完整源码...

    作者 徐麟 本文经授权转自公众号数据森麟(ID: shujusenlin) 房价高是北漂们一直关心的话题,本文就对北京的二手房数据进行了分析. 本文主要分为两部分:Python爬取赶集网北京二手房数据 ...

  5. #第23篇分享:一个北京二手房价格数据挖掘实例(python语言:sklearn随机森林)

    #本次是做一个北京二手房的数据挖掘案例,主要是汇总一下学过的知识,并且通过实例加深一下印象,话不多说,开干: 目的:预测二手房的价格: 工具:语言python:爬虫模块scrapy,数据清洗:xpat ...

  6. 学习python抓取数据——链家北京二手房数据

    最近在学习用Python进行数据分析.机器学习,基本都是用现成数据集进行模型训练及验证,想用一些实际数据看一下效果,于是想到用Python尝试抓取一些实际数据. 目标:爬取链家网北京二手房房价.位置. ...

  7. Python 爬取北京二手房数据,分析北漂族买得起房吗?(附完整源码)

    来源:CSDN 本文约3500字,建议阅读9分钟. 本文根据Python爬取了赶集网北京二手房数据,R对爬取的二手房房价做线性回归分析,适合刚刚接触Python&R的同学们学习参考. 房价高是 ...

  8. python建筑案例_Python数据分析实战-链家北京二手房价分析

    前言 最近在自学Python,通过学习大家的分享案例,看到使用Python进行较多的主要4个方面:爬虫,数据处理,数据可视化以及机器学习建模.对我来说目标就是: 熟练使用numpy pandas 进行 ...

  9. python xpath循环_Python爬虫 爬取北京二手房数据

    点击蓝字"python教程"关注我们哟! 前言 Python现在非常火,语法简单而且功能强大,很多同学都想学Python!所以小的给各位看官们准备了高价值Python学习视频教程及 ...

最新文章

  1. Wireshark运算符!=无法正常工作
  2. 电阻应用电路之上下拉电阻
  3. 获取多台主机命令执行结果
  4. 委婉的拒绝offer
  5. 疯狂动物消消乐html5游戏在线玩,疯狂动物消消乐免费
  6. UI标签库专题十三:JEECG智能开发平台 ckfinder(ckfinder插件标签)
  7. 用VBA编写的简易计算器
  8. 真机开包!国产至强5600服务器35张图赏
  9. Mac在线网页版打字推荐
  10. win10安装虚拟机vm遇到的坑
  11. 敏捷开发 开源软件_开源软件开发的利与弊
  12. 计算机应用能力考试湖南成绩查询,湖南计算机等级考试成绩查询入口
  13. 卡内基梅隆计算机专业,卡内基梅隆大学计算机科学专业全面解析
  14. Unity基础-灯光
  15. 最受玩家喜爱的十大游戏IP类型,你最喜欢哪个?
  16. C语言预定义的标识符的作用,C语言标识符的分类
  17. STM32 Tips:如何从ST官方网站上下载STM32标准外设库(STM32F10x standard peripheral library)
  18. i am freshman
  19. 西北工业大学NOJ-Python程序设计作业81-90
  20. 〖全域运营实战白宝书 - 运营角色认知篇⑤〗- “运营“ 是否有前途?

热门文章

  1. php跳转到qq界面,PHP实现QQ登录的开原理和实现过程
  2. 蚂蚁金服首席数据科学家漆远:AI技术开放,与业界融合共创
  3. 助力千亿级市场 阿里云进军智能电动车产业
  4. CentOS 7安装并启动Google浏览器
  5. item_get - 获得搜好货商品详情
  6. OA系统的功能和作用是什么(OA系统百科)
  7. OA系统是什么意思?企业为什么要用OA办公系统软件?
  8. 华为云管理网络2.0,志不止于网络
  9. 长江存储推全新3D NAND架构 挑战三星存储
  10. 长江存储一笔高额投资,让SK海力士开始钻研我国专利法