Python数据分析——数据预处理的方法

291 篇文章 1 订阅
151 篇文章 2 订阅
本文介绍了如何使用Python进行数据预处理,包括读取多个CSV文件,合并数据,处理缺失值和重复值,数据类型转换,异常值处理,数据离散化,字符串处理,分组运算和布尔过滤。特别地,文章展示了如何处理板块、成交单价、成交楼层等字段,并利用get_dummies()方法数值化非数值信息,以及如何分析经纪人成交总价值与从业年限的关系。
摘要由CSDN通过智能技术生成

前言 (全套教程文末领取哈)

1. 关于数据集

数据来源:日月光华老师的《Python数据分析从入门到机器学习》的 lianjia 数据。

img

数据概况:

  • cjtaoshu:成交套数
  • mendian:门店
  • cjzongjia:成交总价
  • zhiwei:职位
  • haoping:好评
  • cjdanjia:成交单价
  • cjxiaoqu:成交小区
  • xingming:姓名
  • cjzhouqi:成交周期
  • biaoqian:经纪人标签
  • cjlouceng:成交楼层
  • cjshijian:成交时间
  • congyenianxian:经纪人从业年限
  • bankuai:板块
2. 分析环境
  • Python3
  • jupyter notebook

一、数据读取、数据观察与合并数据

1. 数据读取

可以看到一共有7个csv文件,而且由于数据文件的编码方式不统一,在循环读取的时候需要做一下处理。

代码:

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

data_list = []
for i in range(1, 8):
    try:
        data = pd.read_csv('./lianjia/lianjia{}.csv'.format(i), encoding='gbk')
    except:
        data = pd.read_csv('./lianjia/lianjia{}.csv'.format(i))
    data_list.append(data)
2. 合并数据
concat()方法

data_list里的数据的数据格式都是完全统一的,这里用pandas的concat()方法。

data = pd.concat(data_list)
data.head()

img

3. 确定分析目标,提取需要数据

分析目标:做一个房产估价模型,给定一些房子信息,模型估计出单价。这里需要:cjdanjia(成交单价),cjxiaoqu(成交小区),cjlouceng(成交楼层),bankuai(板块)。

data = data[['cjdanjia', 'cjxiaoqu', 'cjlouceng', 'bankuai']]

img


二、处理缺失值与重复值

1. 缺失值
isnull()方法
# 删除全部为null的值
data.dropna(how='all', inplace=True)

img

这里(bankuai)板块部分数据相对来说不是那么的重要,所以有缺失值问题不大,这里不做处理。

2. 重复值
duplicated()方法

由于在处理缺失值时,对板块数据没有进一步处理,在判断是否是重复值时就会存在这样一种情况:非null数据相同,但是板块数据一个为null,一个不为null,这其实是重复数据,所以在判断是否为重复值时,使用非null的数据判断:

(data.duplicated(subset=['cjdanjia','cjxiaoqu','cjlouceng'])).sum()

>>> 20012
drop_duplicates()方法
sort_values()方法

使用drop_duplicates()方法删除重复值时,会默认把后面的重复值删除掉,为了尽量保留有板块值不为null的数据,这里先使用sort_values()方法排序,该方法默认把包含null的值放后面。

data.sort_values(by='bankuai', inplace=True)

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

三、数据类型转换、异常值处理以及数据离散化分析

1. 数据类型转换

将cjdanjia转换为数值类型,以万元为单位,保留两位小数。

# 判断数据是否都包含'元/平' ~:取反
(~data.cjdanjia.str.contains('元/平')).sum()
>>> 0

data = data.assign(cjdanjia = np.round(data.cjdanjia.str.replace('元/平', '').astype(np.float32).map(lambda x:x/10000), 2))

img

2. 异常值处理

按照北京房价行情分析,成交单价的最小值应该在5000元以上(主观推测),所以去掉成交单价小于5000的数据。

data = data[data.cjdanjia > 0.5]
3. 数据离散化分析

区间画图显示分析

bins = [0, 1, 2, 3, 4, 5, 7, 10, 15]
pd.cut(data.cjdanjia, bins).value_counts().plot.bar(rot=20)

img

由于这里分析的数据是2011~2016年之间的数据,所以可以看到成交单价大部分分布在2到4万之间。


四、字符串处理

这里以成交楼层(cjlouceng)数据为例学习字符串处理方法。由前面的图可以看到成交楼层(cjlouceng)数据都是以两个’/'分成了三部分,这里先判断一下。

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

然后从成交楼层数据中提取朝向和楼层信息,并以此添加两列数据。

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

img

查看楼层数据都有哪些:

unipue()方法:返回唯一值
data.louceng.unique()

>>> array(['低楼层', '中楼层', '高楼层', '地下室', '未知', ''], dtype=object)

经分析这里louceng数据包含 ‘未知’ 和 ‘’ 的数据数量很少,而且信息不全,这里将其删除掉。

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

楼层数据不是数值,无法丢进模型进行分析,这里用pandas的get_dummies()方法数值化信息。

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

img

其他字符串类型数据处理方式大致相同。


五、分组运算与布尔过滤

在前面第一节:确定分析目标,提取需要数据中再加上 ‘xingming’ 和 ‘cjzongjia’,‘congyenianxian’,其他不变。

1. 分组运算

分析:所有的板块中,经纪人成交总价值超过1亿的经纪人。

groupby()方法
data_group = data.groupby(['bankuai','xingming'])['cjzongjia'].sum()

img

2. 布尔过滤
data_group[data_group > 10000]

img

3. 透视表分析

进一步思考:这些成交总价超过一亿的经纪人有什么特点?跟从业年限(congyenianxian)的关系。

pivot_table()方法
data_1w = data.pivot_table('cjzongjia', index='xingming', columns='congyenianxian', aggfunc=sum)

#绘制饼图
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
(data_1w > 10000).sum().plot.pie(figsize=(6,6))

img

此图很明显的说明了一个问题:对经纪人来说,从业年限越高,他的成交总价超过一亿的人数就越多。


总结

通过对lianjia数据的分析处理,进一步巩固了Python数据分析数据预处理的一些方法。

读者福利:知道你对Python感兴趣,便准备了这套python学习资料

对于0基础小白入门:

如果你是零基础小白,想快速入门Python是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习等习教程。带你从零基础系统性的学好Python!

零基础Python学习资源介绍

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

👉实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉100道Python练习题👈

检查学习结果。
在这里插入图片描述

👉面试刷题👈

在这里插入图片描述

在这里插入图片描述

👉python副业兼职与全职路线👈

在这里插入图片描述

上述这份完整版的Python全套学习资料已经上传CSDN官方,朋友们如果需要可以微信扫描下方CSDN官方认证二维码 即可领取↓↓↓

### 回答1: Pandas是一个Python库,用于数据处理和分析。在数据分析中,预处理是非常重要的一步,因为它可以帮助我们清洗和转换数据,使其更适合进行分析。Pandas提供了一些强大的预处理功能,包括数据清洗、数据转换、数据重塑和数据合并等。在使用Pandas进行数据分析时,预处理是必不可少的一步。 ### 回答2: 在数据分析中,数据的预处理是一个必要的过程。它的主要目的是清洗数据,准备数据,以便后续分析。在Python中,pandas是一种广泛使用的数据处理库。pandas可以通过其高效的数据结构和操作方法来清洗和处理数据。在本文中,将介绍pandas预处理的一些常见技术。 一、读取数据 在pandas中,使用read_csv()函数读取CSV格式的数据文件,read_excel()函数读取Excel格式的数据文件。它们都有很多选项,可以根据具体文件的格式进行设置。 二、查看数据 在pandas中,使用以下函数来查看数据: 1. head() - 显示数据框的前几行; 2. tail() - 显示数据框的后几行; 3. columns - 显示数据框的列名; 4. shape - 显示数据框的行列数; 5. info() - 显示数据框的基本信息,包括每列的名称、非空值数量和数据类型。 三、数据清洗 在数据清洗中,有以下一些常见的技术: 1. 删除重复行:使用drop_duplicates()函数; 2. 替换空值:使用fillna()函数; 3. 删除空值:使用dropna()函数; 4. 更改数据类型:使用astype()函数。 四、数据准备 在数据准备中,有以下一些常见的技术: 1. 数据合并:使用merge()函数; 2. 数据筛选:使用loc()函数或者iloc()函数; 3. 数据分组:使用groupby()函数; 4. 数据排序:使用sort_values()函数。 五、数据分析数据分析中,有以下一些常见的技术: 1. 数据聚合:使用agg()函数; 2. 统计描述:使用describe()函数; 3. 数据可视化:使用matplotlib或者seaborn库。 综上所述,pandas预处理是数据分析中必不可少的一步。通过使用pandas提供的函数和方法,可以方便地清理和处理数据,使其更容易被分析。 ### 回答3: Pandas是Python中最强大的数据处理库之一,它提供了DataFrame和Series这两种数据结构,可以快速便捷地处理数据。在数据分析过程中,我们往往需要先对数据进行预处理,以便后续的分析。Pandas提供了一系列的方法和函数,可以帮助我们进行数据的预处理。 首先,在进行数据分析之前,我们需要了解自己所面对的数据类型和数据结构。Pandas中的DataFrame结构就是类似于表格的结构,每一行代表一个样本,每一列代表一个属性。Series则是一维的数组结构。通过pandas.read_csv(),我们可以读取CSV格式的数据,并转化为DataFrame结构。 接下来,我们要对数据进行一些基本的处理,例如数据清洗、数据去重、缺失值处理、异常值处理等。在数据清洗过程中,我们往往需要对数据进行一些特殊的处理,例如字符串的分割、合并、替换等操作,Pandas提供了一系列能够对文本进行操作的函数。在数据去重方面,我们可以使用drop_duplicates()函数,它可以去除DataFrame中的重复记录。在处理缺失值时,Pandas提供了一系列的函数,如fillna()函数、dropna()函数,可以方便地将NaN值变为其他有意义的值,或者删除缺失值的行或列。在异常值处理方面,我们可以使用isoutlier()函数来找到数据中的异常值,并进行处理。 在数据预处理完成后,我们可以对数据进行一些统计分析,例如计算小计、计算总计、分位数、极差、方差、标准差等统计指标。我们可以使用describe()函数来获得数据的统计描述,还可以使用groupby()函数来对数据分组,使用agg()函数对每组进行计算统计指标。此外,我们还可以对数据进行排序、丢弃、合并等操作。 总之,Pandas是一个非常强大的Python库,可以轻松处理数据预处理和数据处理方面的任务。Pandas作为数据分析和数据处理的基础库,使用熟练后可以在数据分析中发挥更大的作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值