python数据分析第七章实训3_利用python进行数据分析-第七章笔记

Chapter 7 Data Cleaning and Preparation

Sometimes the way that data is stored in files or databases is not in the right format for a particular task.

Handling Missing Data

All of the descriptive statistics on pandas objects exclude missing data data by default.

For numeric data, pandas uses the floating-point value NaN (Not a Number) to represent missing data. We call this a sentinel value that can be easily detected.

When cleaning up data for analysis, it is often important to do analysis on the missing data itself to identify data collection problems or potential biases in the data caused by missing data.

大概意思就是说要注意对丢失的数据进行分析,来确定是数据收集的问题还是数据本身导致的偏差。(这句话还是不太懂。。。)

继承 R 语言的习惯,用 NA 表示统计数据中的缺失值,同时 python 内置的 None 也被认为是 NA。

下面是一些处理 NA 的方法:

dropna

主要功能是删去有 NA 的行或列,axis=0 or 'index' 表示去掉有 NA 的行;axis=1 or 'columns'表示去掉有 NA 的列;thresh 表示对 NA 的容忍程度;

fillna

其中 value 参数的使用需要注意一下,是 scalar 时所有的 NA 会被替换;是 dict 时相应的 columns 会被替换;是 Series 时对应 column 的各个 index 上的 NA 会被替换;是 DataFrame 时直接看代码吧,描述起来十分拗口:

1220932-20200913164208562-2000669744.png

1220932-20200913164226481-1875087406.png

Filtering Out Missing Data

一种简单直接的办法就是去掉缺失值,这样在缺失值很少时较好用,缺失值如果较多就会丧失数据的内部特征。主要使用 dropna 这个方法,详细的用法和参数意义请看前面的链接。

Filling in Missing Data

主要使用 fillna 方法,主要用法和参数意义参看前面链接。

一种补全缺失值的方法是使用平均值。

Data Transformation

Removing Duplicates

df.duplicated 返回一个 boolean DataFrame。

df.drop_duplicates 去掉重复的数据。

详细的用法看文档。

Transforming Data Using a Function or Mapping

map 方法根据编写的映射规则对数据进行映射。也可以在 map 中使用根据映射规则写成的函数。

data = pd.DataFrame({'food': ['bacon', 'pulled pork', 'bacon', 'Pastrami', 'corned beef', 'Bacon', 'pastrami', 'honey ham', 'nova lox'], 'ounces': [4, 3, 12, 6, 7.5, 8, 3, 5, 6]})

meat_to_animal = { 'bacon': 'pig', 'pulled pork': 'pig', 'pastrami': 'cow', 'corned beef': 'cow', 'honey ham': 'pig', 'nova lox': 'salmon' }

lowercased = data['food'].str.lower()

data['animal'] = lowercased.map(meat_to_animal)

# another method

data['animal'] = data['food'].map(lambda x: meat_to_animal[x.lower()])

Replacing Values

df.replace() 用一些值替换一些值。

The data.replace method is distinct from data.str.replace, which performs string substitution element-wise. We look at these string methods on Series later in the chapter.

Renaming Axis Indexes

可以使用 function 或者 mapping 来修改 label 名称,包括 index 和 columns.

书中对于 rename 是这么说的:

If you want to create a transformed version of a dataset without modifying the original, a useful method is rename.

但是我觉得 map 好像也没有 modify the original。。。这应该不是必须使用 rename 的理由。

Discretization and Binning

有时候会将连续数据划分到多个组 (bins) 中,例如月收入在 1000 元以内的属于类别1, 1000-2000的属于类别2等,pandas 提供了 cut 方法进行处理:

1220932-20200914092605360-2001219342.png

与 cut 类似的是 qcut,qcut 在指定 bin number 时,default 情况会以各个 bin 的 value_counts 相等为原则进行分类。

与 cut 相比,qcut 可以自定义分位点,比较灵活。

Detecting and Filtering Outliers

1220932-20200914100502403-320576668.png

本质上还是 boolean index 的应用,我认为这里主要是要引入 sign 这个方法的使用,不然使用 where 方法也是可以完成这个功能的。

1220932-20200914100920399-1074172657.png

Permutation and Random Sampling

使用 np.random.permutation 方法生成一个随机的排列,如果 df 是 default 的 index,那么可以用 take 方法进行 index 的随机调换。

1220932-20200914101748172-946960062.png

也可以用 sample 方法进行随机采样,replace 参数表示是否允许重复的采样。

Computing Indicator/Dummy Variables

这里用 get_dummies 得到 one-hot 向量:

1220932-20200914102427367-405633587.png

这种方法适合单分类器,但是如果是多分类的情况,就需要一些稍微复杂的处理,首先需要构造一个 one-hot 矩阵,\(shape = N_{index} * N_{classes}\),之后分析每一行属于哪几类,使用 iloc 对相应的类别进行赋值。

get_dummies 方法可以和 pd.cut 结合使用:

1220932-20200914110815038-192372451.png

String Manipulation

String Object Methods

这部分介绍了一些 python 内置的 string 的用法。

1220932-20200914111406014-96132976.png

这里稍微介绍一下 casefold,这个方法功能类似于 lowercase,但是更加 aggressive,会把所有的字符转换成可比较的形式,具体的例子请看 python 中关于 casefold 的文档。

Regular Expression

正则表达式,不看语法永远不会用系列QAQ。菜鸟教程

Vectorized String Functions in pandas

这部分主要讲的是用上部分的正则表达式和 str 自带的方法进行 str 数据的处理。

1220932-20200914150413997-1566681818.png

1220932-20200914150417546-595213346.png

还是字符串处理和正则的混用。

Conclusion

Effective data preparation can significantly improve productive by enabling you to spend more time analyzing data and less time getting it ready for analysis. We have explored a number of tools in this chapter, but the coverage here is by no means comprehensive. In the next chapter, we will explore pandas’s joining and grouping functionality.

个人感觉这一章读起来还是比较轻松,很多地方都是点到为止,没有详细解释有些方法的具体用法,果然还是查文档学习起来最有效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值