前言
数据排序、分类变量转换是数据处理与分析中常常遇到对场景,且需要有准确的判断以及准确的处理方式,否则会影响数据质量,产生脏数据,进而影响数据呈现效果或预测效果等,更别提机器学习与深度学习准确性等系列问题。小编接下来会针对python方法在该场景的应用做具体介绍。
排列和随机采样
利用numpy.random.permutation函数可以轻松实现对Series和DataFrame的列的排列工作(permuting,随机重排序)。通过需要排列的轴的长度调用permutation,可产生一个表示新顺序的整数数组:
1.使用permutation()进行排列
我们先使用DataFrame创建一个5行4列的数据集,然后使用numpy.random.permutation函数进行重新排序,具体如下:
2.使用take函数对数据集进行重排序
通过下面对例子可以清楚理解take函数对作用。sampler是np.random.permutation()生成对随机数组,然后将这个对象传入到take函数中,作用于对象数据集,具体如下所示:
In [8]: dfOut[8]: 0 1 2 30 0 1 2 31 4 5 6 72 8 9 10 113 12 13 14 154 16 17 18 19In [9]: df.take(sampler)Out[9]: 0 1 2 30 0 1 2 31 4 5 6 74 16 17 18 193 12 13 14 152 8 9 10 11
如果不想用替换的方式选取随机子集,则可以使用permutation:从permutation返回的数组中切下前k个元素,其中k为期望的子集大小。
In [10]: df.take(np.random.permutation(len(df))[:3])Out[10]: 0 1 2 33 12 13 14 152 8 9 10 110 0 1 2 3
3.获取随机整数:np.random.randint
要通过替换的方式产生样本,最快的方式通过np.random.randint得到一组随机整数:
In [11]: ba=np.array([5,7,-1,6,4])In [12]: baOut[12]: array([ 5, 7, -1, 6, 4])In [13]: sampler=np.random.randint(0,len(ba),size=10)In [14]: samplerOut[14]: array([1, 3, 1, 3, 1, 2, 3, 4, 2, 0])In [15]: draws=ba.take(sampler)In [16]: drawsOut[16]: array([ 7, 6, 7, 6, 7, -1, 6, 4, -1, 5])
计算指标/哑变量
另一种常用于统计建模或机器学习的转换方式是:将分类变量转换为“哑变量矩阵”或“指标矩阵”。如果DataFrame的某一列中含有k个不同的值,则可以派生出一个k列矩阵或DataFrame(其值权威1和0).pandas有一个get_dummies函数可以实现该功能。
In [17]: df=DataFrame({'key':['b','b','a','c','a','b'],'data1':range(6)})In [18]: dfOut[18]: key data10 b 01 b 12 a 23 c 34 a 45 b 5In [19]: df['key']Out[19]: 0 b1 b2 a3 c4 a5 bName: key, dtype: object
使用get_dummies()将分类变量转换为“哑变量矩阵”
In [20]: pd.get_dummies(df['key'])Out[20]: a b c0 0 1 01 0 1 02 1 0 03 0 0 14 1 0 05 0 1 0
总结
数据处理与分析的方法丰富且场景复杂,针对不同的应用情况,选择适合的方法是最恰当且能解决实际问题的。