Pandas常用数据预处理方法及指令

1.前言

前一段时间,在小伙伴的怂恿下参加了京东的Jdata数据大赛(并以剪刀石头布的方式决定的组长,草率!

SouthEast

不过非常感谢小伙伴们对我的信任,还有我们一起学习的热情让我一下恢复了对学习的xing趣了呢),作为一名小白,抱着学习的心态去的,所谓的万事开头难是真的,从来没接触过这种比赛或工作的我也是一头雾水,以前没上过数据处理和挖掘的课程,不知从何下手,就是在这样一穷二白的情况下开始了长达两周的工作。

SouthEast

向曾经参加过类似比赛的师兄取经、请教老师解题思路、查阅相关书籍(幸好我之前有买许多相关书籍)、逛各种论坛、竞赛官方qq群,做了很多准备,当然最难的就是动手实践。很多理论在实战面前都是苍白的,比如书里面经常说可视化、可视化,对于数据的可视化我们可以得到很多的信息,然而有一些是可以这样做的,另一些如用户购买关系网络因为数据量的问题、而且就算抽样的话,可视化后我们依然分析不出个所以然来

SouthEast

(可能还是方法没用对)。

在这两周内在每天提交次数、每周截至提交日期的压力下,我快速成长了起来,一开始不知道用什么软件、代码处理数据,后来查资料、问人确定了几个可选方案,直接上手干,第一个方案不行,查查怎么回事还不行就换,最后决定使用jupyter notebook+pandas+matplot的方案果断上;(神奇的 )

从pandas数据结构什么都不知道,到从各种博客搜集所需要的代码,后来发现遗忘速度真的很快,用完就忘还得重新找对应博客、资料很麻烦,所以就有了我这篇总结的雏形,经过不断的完善在经历了一整个数据处理流程下来,常用的代码都已经总结的很完善了,然后就是学习了一些大牛开源的代码后,发现:我艹,还能这么搞!SouthEast于是进一步完善总结。

两周的工作主要就是两个部分:数据处理+上模型跑代码,然后就不断的循环重复,跑完代码提交看看有什么问题,藉由这次比赛经历我也得到了许多宝贵的经验,如很多事情想和做是不一样的,做了才会有深刻的理解,理解了才会更好的思考。

SouthEast

 不过很遗憾的是,因为时间和精力有限,没能继续做下去,再往下做基本就是用户推荐的事了,也看了一些用户推荐的资料和具体的实现方法,可以实现的,但因为已过两周,超过了我的预算,而且与我感兴趣领域不很相关,而且在此期间有了一些成长,从无到有还是收获许多,所以选择退出。

 不过好记性不如烂笔头,已过去一段时间,发现再不总结归纳,又要忘的差不多,所以给自己一个借口,好好整理一下,以便日后需要的时候用的着,在这里也是想和大家分享一下。

 

 最后还想和大家分享的是微信文章的下载和学习小技巧,我一般都是直接将网页下载或者另存为pdf看,foxit reader还是一个很好的pdf阅读器,我可以在上面设置各种快捷键方便我做注释。

 

PS:因为时间有限而且总结的内容有点多,格式来不及统计,各位将就看吧!

2.常用数据预处理方法

这个部分总结的是在python中常见的数据预处理方法。

2.1标准化(Standardization or Mean Removal and Variance Scaling)

变换后各维特征有0均值,单位方差。也叫z-score规范化(零均值规范化)。计算方式是将特征值减去均值,除以标准差。

sklearn.preprocessing.scale(X)

一般会把train和test集放在一起做标准化,或者在train集上做标准化后,用同样的标准化去标准化test集,此时可以用scaler

scaler = sklearn.preprocessing.StandardScaler().fit(train)

scaler.transform(train)

scaler.transform(test)

实际应用中,需要做特征标准化的常见情景:SVM

2.2最小-最大规范化

最小-最大规范化对原始数据进行线性变换,变换到[0,1]区间(也可以是其他固定最小最大值的区间)

min_max_scaler = sklearn.preprocessing.MinMaxScaler()

min_max_scaler.fit_transform(X_train)

2.3规范化(Normalization)

规范化是将不同变化范围的值映射到相同的固定范围,常见的是[0,1],此时也称为归一化。

将每个样本变换成unit norm。

X = [[ 1, -1, 2],[ 2, 0, 0], [ 0, 1, -1]]

sklearn.preprocessing.normalize(X, norm='l2')

得到:

array([[ 0.40, -0.40, 0.81], [ 1, 0, 0], [ 0, 0.70, -0.70]])

可以发现对于每一个样本都有,0.4^2+0.4^2+0.81^2=1,这就是L2 norm,变换后每个样本的各维特征的平方和为1。类似地,L1 norm则是变换后每个样本的各维特征的绝对值和为1。还有max norm,则是将每个样本的各维特征除以该样本各维特征的最大值。
在度量样本之间相似性时,如果使用的是二次型kernel,需要做Normalization

2.4特征二值化(Binarization)

给定阈值,将特征转换为0/1

binarizer = sklearn.preprocessing.Binarizer(threshold=1.1)

binarizer.transform(X)

2.5标签二值化(Label binarization)

lb = sklearn.preprocessing.LabelBinarizer()

2.6类别特征编码

有时候特征是类别型的,而一些算法的输入必须是数值型,此时需要对其编码。

enc = preprocessing.OneHotEncoder()

enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])

enc.transform([[0, 1, 3]]).toarray() #array([[ 1., 0., 0., 1., 0., 0., 0., 0., 1.]])

上面这个例子,第一维特征有两种值0和1,用两位去编码。第二维用三位,第三维用四位。

另一种编码方式

newdf=pd.get_dummies(df,columns=["gender","title"],dummy_na=True)

详细的说明可以在后面常用指令中看到

Examples

>>> import pandas as pd

>>> s = pd.Series(list('abca'))

>>> pd.get_dummies(s)

   a  b  c

0  1  0  0

1  0  1  0

2  0  0  1

3  1  0  0

>>> s1 = ['a', 'b', np.nan]

>>> pd.get_dummies(s1)

   a  b

0  1  0

1  0  1

2  0  0

>>> pd.get_dummies(s1, dummy_na=True)

   a  b  NaN

0  1  0    0

1  0  1    0

2  0  0    1

>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],

                    'C': [1, 2, 3]})

>>> pd.get_dummies(df, prefix=['col1', 'col2'])

   C  col1_a  col1_b  col2_a  col2_b  col2_c

0  1       1       0       0       1       0

1  2       0       1       1       0       0

2  3       1       0       0       0       1

>>> pd.get_dummies(pd.Series(list('abcaa')))

   a  b  c

0  1  0  0

1  0  1  0

2  0  0  1

3  1  0  0

4  1  0  0

2.7标签编码(Label encoding)

le = sklearn.preprocessing.LabelEncoder()

le.fit([1, 2, 2, 6])

le.transform([1, 1, 2, 6]) #array([0, 0, 1, 2])

#非数值型转化为数值型

le.fit(["paris", "paris", "tokyo", "amsterdam"])

le.transform(["tokyo", "tokyo", "paris"]) #array([2, 2, 1])

2.8特征中含异常值时

sklearn.preprocessing.robust_scale

2.9生成多项式特征

这个其实涉及到特征工程了,多项式特征/交叉特征。

poly = sklearn.preprocessing.PolynomialFeatures(2)

po


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部