由于业务需要,最近在研究大数据的处理,加上最开始学Python的时候还有点底子,今天来写一下如何进行数据处理。本篇使用到的数据是来自kaggle的链家北京房价开源数据集,下载地址会放在文章末尾。

不扯淡,开讲

import reimport timeimport pandas as pdimport numpy as npfrom sklearn.tree import DecisionTreeClassifierfrom sklearn.model_selection import train_test_splitlianjia_price = pd.read_csv("new.csv",                            encoding="gb2312",                            header=0,                            index_col=1)

先读取下载解压好的数据集,因为此csv文件没有使用万国码,所以需要特别指定文字编码。并且通过header指定第一行内容为列索引,通过index_col第二列内容为行索引。其中,第二列为id字段,且每个id不重复。

此时我们已经将数据读取完毕,理论上可以通过sklearn进行分析了,但是未经清洗的数据直接拿过去跑会报错,下面进入重头戏,如何清洗数据。

# 有几行数据串列了,此处进行一步搬迁,空出来的几列全都设为0for line in lianjia_price.index:    if lianjia_price.loc[line, "livingRoom"] == "#NAME?":        right_data = lianjia_price.loc[line, "drawingRoom":"ladderRatio"]        lianjia_price.loc[line, "floor":"subway"] = list(right_data)        lianjia_price.loc[line, "livingRoom":"bathRoom"] = (0, 0, 0, 0)

livingRoom字段中,有几行数据出现了串列,由于整体数据有三十几万,所以几十行出错的数据实际上并没有必要留下,但是既然被发现了就顺手拯救一下不是坏事。

从上图中发现livingRoom字段出错的数据是缺少了几列,于是我将这几列数据全部用0占位,原有的数据依次迁移到后面正确的位置。值得注意的是,pandas使用的切片是十分特殊的,别处使用类似

lianjia_price.loc[line, "livingRoom":"bathRoom"]

的切片Python是不认的,"livingRoom":"bathRoom"表示从前者开始到后者(包括)结束依次取中间所有列,如下图中所示。

观察下面数据

表示楼层的floor字段,除了包含楼层本身之外,还有汉字内容,这对分析并没有什么作用,所以只保留数字,其他内容剔除。

# 将楼层中的汉字剃除floor_numbers, match_floor_number = [], re.compile(r"\w\s(\d+)")for item in lianjia_price.index:    floor_number = match_floor_number.findall(lianjia_price.loc[item, "floor"])    if floor_number:        floor_numbers.extend(floor_number)    else:        floor_numbers.append(0)lianjia_price["floor"] = floor_numbers

此处通过正则实现过滤,原始数据中除了包含一个汉字,还有一个空格,对空格进行匹配是必要的。

lianjia_price["renovationCondition"].replace({    "钢混结构": 0,    "混合结构": 0},                                             inplace=True)

将表格内容中renovationCondition字段的脏数据替换成0

表格中包含的时间信息使用了自然语言格式,因为时间对房产价格而言是重要的影响因素,所以对tradeTime字段也进行处理,将其转化成时间戳

# 将交易时间改成时间戳def timestr_to_timeint(timestr):    time_obj = time.strptime(timestr, "%Y-%m-%d")    time_int = int(time.mktime(time_obj))    return time_intlianjia_price["tradeTime"] = lianjia_price["tradeTime"].apply(    timestr_to_timeint)

此处通过apply方法将自定义的时间转化为时间戳函数应用到每格数据中,并将结果替换进原始数据,结果如下。

# 将建设时间为“未知”的替换成0lianjia_price["constructionTime"].replace("未知", 0, inplace=True)lianjia_price.fillna(0, inplace=True)  # 将nan值替换为0

小区的建设时间中包含未知的内容,其他一些信息中包含的nan值一并替换为0。

# 此处数据中index会变成int类型,需要强行转换成str类型才能用lianjia_price.rename(index=str, inplace=True)

因为最开始设定的行索引是id,部分id是纯数字构成,所以这部份索引在pandas中就以int类型储存,但是后面的id是以BJ字母开头的字符串,所以必须将所有索引统一转换成字符串类型。

到此为止,数据清洗已经完成,下面部分是通过sklearn分析哪个因素对房价影响大,但是最终结论比较扯淡,所以就不要在意结论本身如何,本篇的价值主要在上面数据清洗的方法。后面的代码从别处搬来的比例较大。

# 将要分析的一列数据分离出去,同时剔除一部分可能的影响因素X = lianjia_price.drop(["price", "url"], axis=1)Y = lianjia_price["price"]# 由于数据较大,只取其中一部分数据做分析X_train, X_test, Y_train, Y_test = train_test_split(    X.loc["101084782030":"101092293053"],    Y.loc["101084782030":"101092293053"],    test_size=0.05,    random_state=0,    shuffle=True)

因为要分析价格信息,所以将价格信息单拉出去,同时因为url对分析而言没用,将每行url剔除。数据按列分好后,按照比例(test_size=0.05表示将95%的数据归到训练集中)分为训练集和测试集。X.loc["101084782030":"101092293053"]切片操作是因为三十几万数据太大了,从中取一部分进行分析。

# 训练模型clf = DecisionTreeClassifier(criterion="entropy",                             random_state=123,                             max_depth=8,                             min_samples_leaf=5)clf.fit(X_train, Y_train)# 特征贡献率columns = list(X_test.columns)importances = clf.feature_importances_indices = np.argsort(importances)[::-1]for i in indices:    print("{0} \t {1:.3f}".format(columns[i], importances[i]))

此处使用了DecisionTreeClassifier进行分析,最后按照每列数据的贡献率排名,结果如下

由结果可得,当前房价的最大影响因素是小区平均房价(废话)

最后,本文使用的csv数据下载地址:

Housing price in Beijing

Housing price of Beijing from 2011 to 2017, fetching from Lianjia.com

https://www.kaggle.com/ruiqurm/lianjia/data

进行数据清洗_[经验漫谈]使用Python进行数据表格清洗和分析相关推荐

  1. python 建筑建模_不可错过的python 街道数据爬取和分析神器!

    hello 大家好! 最近遇到一堆关于街道数据分析的问题,又不想去使用百度和高德的API,有的功能还是得付费,为了学习不想掏钱,那么有什么办法么? 答: 有!必须有!今天给大家分享一个很旧的pytho ...

  2. Python网络数据爬取及分析-智联招聘

    python网络数据爬取及分析-智联招聘 一. 数据爬取 智联招聘是一家面向大型公司和快速发展的中小企业提供一站式专业人力资源的公司,可在智联招聘网站上根据不同城市.不同职位需求搜索得到相关招聘信息. ...

  3. python Excel数据表格转为HTML网页数据表格

    python Excel数据表格转为HTML网页数据表格 文章目录 准备test数据 Excel转html 准备test数据 首先,准备一个excel.以以下代码为例,在当前目录下生成一个Excel文 ...

  4. python网络数据爬取及分析从入门到精通pdf_Python网络数据爬取及分析从入门到精通...

    这是一套以实例为主.使用Python语言讲解网络数据爬虫及分析的实战指南.本套书通俗易懂,涵盖了Python基础知识.数据爬取.数据分析.数据预处理.数据可视化.数据存储.算法评估等多方面知识,每一部 ...

  5. 基于python的智能文本分析 豆瓣_长文干货 | 基于豆瓣影评数据的完整文本分析!...

    原标题:长文干货 | 基于豆瓣影评数据的完整文本分析! 作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习.深度学习.NLP.CV Blog: http://yishuihancheng.blo ...

  6. 基于python的数据爬取与分析_基于Python的网站数据爬取与分析的技术实现策略

    欧阳元东 摘要:Python为网页数据爬取和数据分析提供了很多工具包.基于Python的BeautifulSoup可以快速高效地爬取网站数据,Pandas工具能方便灵活地清洗分析数据,调用Python ...

  7. python3爬取网易云歌单数据清洗_实例 | 使用网易云音乐数据演示数据整合与数据清洗...

    作者 | 小F 来源 | 法纳斯特(walker398) 数据整合是对数据进行行列选择.创建.删除等操作. 数据清洗则是将整合好的数据去除其中的错误和异常. 本文利用之前获取的网易云音乐用户数据,来简 ...

  8. python数据处理电脑配置_视频剪辑,Python跑数据,diy电脑组装怎么配置?

    不太了解题主Python跑数据,是跑什么规模的数据.是机器学习,PyTorch, TF那类模型的数据集吗?墙裂推荐GPU,这个必须.性能据说GPU ≈ 30-50倍CPU.其他不知. 如今,电脑组装已 ...

  9. python怎么存数据_五种使用python储存数据的方式

    原标题:五种使用python储存数据的方式 在python编程开发中,总是不可避免的遇到数据储存的问题,下面小卓就介绍python与几种数据储存方式交互的方法. json文件 json是一种轻量级的数 ...

最新文章

  1. Python中常用的数据分析工具(模块)有哪些?
  2. SQL Server 2005实现负载均衡的详细介绍
  3. PHP的htmlspecialchars、strip_tags、addslashes解释
  4. javascript中闭包的一些理解
  5. Lua日期与时间操作
  6. 理解有符号数和无符号数的区别
  7. 正确评估SQL数据库性能,你必须知道的原理和方法!
  8. STM32工作笔记0044---什么是二极管什么是三极管
  9. java播放mp3背景音乐_Java如何实现MP3播放!!
  10. 浅谈软件架构师的工作
  11. C# DataTable 用法简介
  12. 电影购票c语言程序,C语言电影购票系统小样
  13. 国考省考行测:言语理解与表达,主旨理解,结构分析法,总分结构
  14. 傅里叶变换【2】:傅里叶幅度谱与相位谱
  15. 【工具】idea去掉UML类图的虚线箭头(依赖关系)
  16. centos7安装apache
  17. 漫话:如何给女朋友解释什么是RPC
  18. 计算机二级数据透视图教程,计算机二级Office:Excel数据透视表和透视图
  19. java 时区-东八区
  20. 网络安全培训小白入门课,从buu到红帽的图片隐写

热门文章

  1. java 多线程 串行 加锁_Java多线程(2)线程锁
  2. 顺序三元组 java_hihocoder-1550-顺序三元组
  3. 高德地图时间和实际差多少_高德打车,谁用谁上当,谁用谁吃亏
  4. java获取文件视图_springmvc-直接访问视图文件
  5. android studio sugar,Android | Sugar 的介绍和简单使用
  6. python find函数 和index的区别_python list的index()和find()的实现
  7. 西交大计算机考博学术英语,2018年西安交通大学考博英语真题
  8. j计算机专业英语题库,计算机专业英语单词习题
  9. P3275 [SCOI2011]糖果
  10. 如何让Excel单元格中的名字分散对齐