Python entry of data processing --12 kinds of useful tips Pandas

This article reprinted from: https://mp.weixin.qq.com/s?__biz=MjM5MTQzNzU2NA==&mid=403087765&idx=2&sn=5149c58febd1552972250a07fa6cef15&pass_ticket=wJo%2B3Fh4gmnc6IVN%2BqbKeUruD3wTQXABSRkd%2FsYnsf6%2FHGgsaO%2BR4%2F9It%2FC1AvxW

Small series and everyone is learning, like Python, in actual operation data, contingency table is created, filled with missing values, variable binning, re-encoding technologies such as nominal variables are useful, if you are interested in these, please see below:

 

◆ ◆ 

introduction

 

Python is fast becoming the preferred language data scientist - that makes sense. It provides a broader ecosystem and depth of outstanding scientific computing library as a programming language.

 

In scientific computing library, I found Pandas are most useful for data science operations. Pandas, plus Scikit-learn provides almost all of the tools needed for data scientists. This article aims to provide 12 kinds of method for processing data in Python. In addition, I also shared some make you work more convenient skills.

 

Before moving on, I would suggest that you read the data mining (data exploration) code. To help you better understand, I used a dataset to perform these operations and data processing.

 

Dataset: I used the loan forecast (Loan Prediction) data collection problems. Please download the data set (if you need this data set, please contact us and please leave the email address in the comments section - editor's note), then you can begin.

◆ ◆ 

let us start

 

Python environment this step to import module and begins loading data sets:

# 1 - Boolean Index

 If you want to filter the values ​​in a column according to the conditions of another column, how would you do? For example, we do not want to get a complete list of female graduate and get loans. Here you can use Boolean index achieved. You can use the following code:

 

# 2-Apply function

 Apply是一个常用函数,用于处理数据和创建新变量。在利用某些函数传递一个数据帧的每一行或列之后,Apply函数返回相应的值。该函数可以是系统自带的,也可以是用户定义的。举个例子,它可以用来找到任一行或者列的缺失值。

由此我们得到了需要的结果。

注:第二个输出中使用了head()函数,因为结果中包含很多行。

 

# 3–填补缺失值

 ‘fillna()’可以一次性解决:以整列的平均数或众数或中位数来替换缺失值。让我们基于其各自的众数填补出“性别”、“婚姻”和“自由职业”列的缺失值。

 #首先导入函数来判断众数

结果返回众数和其出现频次。请注意,众数可以是一个数组,因为高频的值可能有多个。我们通常默认使用第一个:

现在,我们可以填补缺失值并用# 2中提到的方法来检查。

 #填补缺失值并再次检查缺失值以确认

 

# 4–透视表

 Pandas可以用来创建MS Excel风格的透视表。例如,在本例中一个关键列是“贷款数额”有缺失值。我们可以根据“性别”,“婚姻状况”和“自由职业”分组后的平均金额来替换。 “贷款数额”的各组均值可以以如下方式确定:

 

# 5–多索引

 如果你注意到#3的输出,它有一个奇怪的特性。每一个索引都是由3个值组合构成的。这就是所谓的多索引。它有助于快速执行运算。

 从# 3的例子继续开始,我们有每个组的均值,但还没有被填补。

 这可以使用到目前为止学习到的各种技巧来解决。

 #只在有缺失贷款值的行中进行迭代并再次检查确认

 

注意:

1. 多索引需要在loc中声明的定义分组的索引元组。这个元组会在函数中用到。

2. .values[0]后缀是必需的,因为默认情况下元素返回的索引与原数据框的索引不匹配。在这种情况下,直接赋值会出错。

 

# 6. 交叉表

 此函数用于获取数据的一个初始“感觉”(视图)。在这里,我们可以验证一些基本假设。例如,在本例中,“信用记录”被认为显著影响贷款状况。这可以使用交叉表验证,如下图所示:

这些是绝对值。但是,要获得快速的见解,用百分比更直观。我们可以使用apply 函数来实现:

现在,很明显,有信用记录的人得到一笔贷款的可能性更高:与没有信用记录的人只有8%得到贷款相比,80%的有信用记录的人获得了一笔贷款。

 然而不仅如此。其中包含了更有趣的信息。由于我已经知道有一次信用记录是非常重要的,如果我预测拥有信用记录的人贷款状态是Y(贷款成功),而没有的人为N(贷款失败)。令人惊讶的是,我们在614个例子中会有82+378=460次的正确。这个比例高达75%!

 如果你仍纳闷为何我们还需要统计模型,我不会怪你。但是相信我,即使在目前这个精准度上再提高哪怕0.001%的精度仍会是一项充满挑战性的任务。你会接受这个挑战吗?

 注:这个75%是基于训练集的。测试集会略有不同,但接近。另外,我希望这能提供一些直觉,即到底为什么哪怕0.05%的精度提升,可造成Kaggle排行榜(数据分析竞赛网站——译者注)上的名次上升500位。

 

# 7–合并数据帧

 当我们需要对不同来源的信息进行合并时,合并数据帧变得很重要。假设对于不同物业类型,有不同的房屋均价(INR/平方米)。让我们定义这样一个数据帧:

现在,我们可以将原始数据帧和这些信息合并:

 

透视表验证了成功的合并操作。请注意,“value”在这里是无关紧要的,因为在这里我们只简单计数。

 

# 8–数据帧排序

 Pandas允许在多列之上轻松排序。可以这样做:

 

注:Pandas的“排序”功能现在已不再推荐。我们用“sort_values”代替。

 

# 9–绘图(箱线图和柱状图)

 很多人可能没意识到,箱线图和柱状图可以直接在Pandas中绘制,不必另外调用matplotlib。这只需要一行命令。例如,如果我们想通过贷款状况来比较申请人收入的分布,我们可以这样做:

 

可见收入本身并不是一个决定性因素, 因为获得/未获得贷款的人没有明显的收入差异。

 

# 10–Cut函数用于分箱

 

有时如果数值聚类会更有意义。例如,如果我们试图用时间(分钟)对交通状况(路上的车流量)建模。相比于如“早晨”“下午”“傍晚”“晚上”“深夜”这样的时段,具体分钟数可能对预测交通量不那么相关。如此对交通建模会更直观,也避免过度拟合。

 在这里,我们定义了一个简单可复用的函数,可以轻松地用于对任何变量的分箱。

 

# 11–编码名义变量

 

有时,我们会遇到必须修改名义变量的类别的情况。这可能是由于以下各种原因:

 

1. 一些算法(如逻辑回归)要求所有的输入都是数值型,因此名义变量常被编码为0, 1…(n-1)

2. 有时同一个类别可以用两种方式来表示。如温度可能被记录为“High(高)”“Medium(中)”“Low(低)”“H(高)”“low(低)”。在这里,无论是“High(高)”还是“H(高)”是指同一类。同理,“Low(低)”和“low(低)”也是同一类。但是,Python会将它们视为不同分类。

3. 有些类别的频率可能非常低,把它们归为一类一般会是个好主意。

 

在这里,我定义了一个通用的函数,以字典的方式输入值,使用Pandas中“replace”函数来重新对值进行编码。

编码前后计数不变,证明编码成功。。

 

# 12–在一个数据帧的行上进行迭代

 

这不是一个常用的操作。毕竟你不想卡在这里,是吧?有时你可能需要用for循环迭代所有的行。例如,我们面临的一个常见问题是在Python中对变量的不正确处理。这通常在以下两种情况下发生:

1. 数值类型的名义变量被视为数值

2. 带字符的数值变量(由于数据错误)被认为是分类变量。

 

所以手动定义变量类型是一个好主意。如果我们检查所有列的数据类型:

 

在这里,我们看到名义变量“Credit_History(信用记录)”被当做浮点数类型。解决这些问题的一个好方法是创建一个包括列名和类型的CSV文件。这样,我们就可以定义一个函数来读取文件,并指定每一列的数据类型。例如,我在这里已经创建了一个CSV文件datatypes.csv,如下所示:

 

 

加载这个文件后,我们可以在每一行上进行迭代,以列类型指派数据类型给定义在“type(特征)”列的变量名。

 

现在的信用记录列被修改为“object”类型,这在Pandas中表示名义变量。

、◆ ◆ 

结语

 

本文中,我们涉及了Pandas的不同函数,那是一些能让我们在探索数据和功能设计上更轻松的函数。同时,我们定义了一些通用函数,可以重复使用以在不同的数据集上达到类似的目的。

 

编者按:

本文的作者提供了许多相关的阅读资料链接,请需要的读者朋友点击文末阅读原文http://www.analyticsvidhya.com/blog/2016/01/12-pandas-techniques-python-data-manipulation/?utm_source=feedburner&utm_medium=email&utm_campaign=Feed%3A+AnalyticsVidhya+%28Analytics+Vidhya%29。

 

Guess you like

Origin www.cnblogs.com/shujuxiong/p/11183120.html