在特征工程中,对于数值型数据(比如年龄为25岁、31岁。。,商店某个时间段的销量为20W件等等),
通常要对这些数值型数据进行统计分析,比如求取它们的最大最小值、期望方差等,pandas库在数据分析中非常好用。
对 数值型数据进行离散化,也用到pandas的cut函数,具体操作如下代码:
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 26 15:34:48 2016
@author: sirius
"""
import pandas as pd
import numpy as np
"""
数据的统计值
"""
series=pd.Series(np.random.randn(500))
series.describe(percentiles=[0.05,0.25,0.75,0.95]) #分位数,用于取 把向量从小到大排列,取向量5%、25%...分界点的数据
#可通过分位数来了解这一段数据的大小怎么样,从而了解某个数据在整体的定位
mean=series.mean()
s_min=series.min()
s_max=series.max()
s_std=series.std()
"""
数据的离散化,把连续值赋予一个离散化的操作~~
比如,有个电商商铺,他有一个10块钱的爱奇艺账户,也有一辆100万的车,这是一个跨度很大的值。
离散化的操作就是就是这个商铺的所有价格分为100个价格段,那么离散化之后的价格就是一个100维的向量,
当你的价格落在这个区段时,这个向量的这个点值为1,其它值为0.
------当数据不均衡时,比如数据分布为0-100,但数据大多集中在0-10(占80%),
此时可以把0-10的段细分为很多小段,虽然这样会产生很多[1,0,0,...],但不影响离散化编码
"""
arr=np.random.randn(20)
factor=pd.cut(arr,5) #用cut函数来分段向量,在把数据映射到其中,得到0-1向量
print factor
"""
结果如下:
>>>[(-0.133, 0.396], (-0.133, 0.396], (-0.663, -0.133], (-0.663, -0.133], (-0.663, -0.133], ..., (-0.133, 0.396], (-0.663, -0.133], (-0.133, 0.396], (-1.193, -0.663], (0.396, 0.926]]
Length: 20
Categories (5, object): [(-1.726, -1.193] < (-1.193, -0.663] < (-0.663, -0.133] < (-0.133, 0.396] <
(0.396, 0.926]]
"""
arr2=np.random.randint(0,10,size=30) #范围0-10,共30个数
arr3=pd.Series(arr2) #先转换为series格式
print arr3.value_counts() #统计频数
"""
结果如下:
>>> print arr3.value_counts()
0 8
9 5
3 4
1 4
6 3
2 3
8 1
7 1
5 1
dtype: int64
"""
arr4=np.sort(arr3)
arr5=pd.Series(arr4)
fac=pd.cut(arr5,4)
print fac
"""
>>> print fac 值
0 (-0.009, 2.25] 0
1 (-0.009, 2.25] 0
2 (-0.009, 2.25] 0
3 (-0.009, 2.25] 0
4 (-0.009, 2.25] 1
5 (-0.009, 2.25] 1
6 (-0.009, 2.25] 2
7 (-0.009, 2.25] 2
8 (-0.009, 2.25] 2
9 (2.25, 4.5] 3
10 (2.25, 4.5] 3
11 (2.25, 4.5] 3
12 (2.25, 4.5] 3
13 (2.25, 4.5] 3
14 (2.25, 4.5] 4
15 (2.25, 4.5] 4
16 (4.5, 6.75] 5
17 (4.5, 6.75] 5
18 (4.5, 6.75] 6
19 (4.5, 6.75] 6
20 (4.5, 6.75] 6
21 (6.75, 9] 7
22 (6.75, 9] 7
23 (6.75, 9] 7
24 (6.75, 9] 7
25 (6.75, 9] 8
26 (6.75, 9] 8
27 (6.75, 9] 8
28 (6.75, 9] 9
29 (6.75, 9] 9
dtype: category
Categories (4, object): [(-0.009, 2.25] < (2.25, 4.5] < (4.5, 6.75] < (6.75, 9]]
"""