首页 > 科技 > 不懂数据集重排序?分类变量转换苦难?4种python方法,不再难

不懂数据集重排序?分类变量转换苦难?4种python方法,不再难


前言

数据排序、分类变量转换是数据处理与分析中常常遇到对场景,且需要有准确的判断以及准确的处理方式,否则会影响数据质量,产生脏数据,进而影响数据呈现效果或预测效果等,更别提机器学习与深度学习准确性等系列问题。小编接下来会针对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

总结

数据处理与分析的方法丰富且场景复杂,针对不同的应用情况,选择适合的方法是最恰当且能解决实际问题的。希望大家从中有所收益,实践中多体会和沉淀,感谢大家支持!记得关注哦!

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/268971.html