数据预处理

1.    fillna()

适用于以列为单位的的缺省值填充

 

2.将特征规范化,标准化

要实现规范化与标准化,我们定义了两个辅助函数(data_standardize.py文件):

def normalize(col):
'''
规范化
'''
return (col - col.min()) / (col.max() - col.min())
def standardize(col):
'''
标准化
'''
return (col - col.mean()) / col.std()

原理:

要规范化数据,即让每个值都落在0和1之间,我们减去数据的最小值,并除以样本的范围。统计学上的范围指的是最大值与最小值的差。normalize(...)方法就是做的前面描述的工作:对数据的集合,减去最小值,除以范围。

标准化的过程类似:减去平均数,除以样本的标准差。这样,处理后的数据,平均数为0而标准差为1。standardize(...)方法做了这些处理:

csv_read['n_price_mean'] = normalize(csv_read['price_mean'])
csv_read['s_price_mean'] = standardize(csv_read['price_mean'])

3.分级数据【常用于处理直方图】

np.digitize()

首先介绍一下函数的用法

digitize(data,bins)函数是numpy的一个内置函数。让人感到很震惊的是,网上居然很少有关于这个函数用法的中文介绍。

先上代码:

import random as rd
data=[rd.randint(a=100,b=1000) for _ in range(20)]
bins=[200,300,400,500,600,700,800,900,1000]
print('data:',data)
print('bins:',bins)
print('np.digitize(data,bins):',np.digitize(data,bins))
运行结果如下:

Tips:digitize(data,bins)函数对data列表似乎没有什么要求,但是对bins列表是由要求的:要求bins雷暴汇总的数据要么是升序的要么是降序的,绝壁不能是随意的一堆数。

大家可以很清楚的看到,digitize(data,bins)函数执行的过程大概如下:相当于两层for循环。首先最外面的一层:顺序的遍历data列表,取出当前的一个数a,然后顺序的遍历bins列表,返回bins列表中某个数的索引,如何找呢? 规则如下:如果:bins列表是升序的,那么如果满足 bins[i-1]<=a<bins[i],那么就保存i,然后回到外层循环继续上面的操作,如果bins列表是降序的,那么如果满足 bins[i]<=a<bins[i-1],那么就保存i,当data列表遍历完之后,就返回由i组成的来源于bins的索引的一个索引列表。
 

4.将分类变量转换为简单变量

get_dummies(...)方法将分类变量转换为简单的变量。比如,考虑一个变量,以三种水平中的某一种作为值:

 

1 One
2 Two
3 Three

需要用三列进行编码:

 

1 One 1 0 0
2 Two 0 1 0
3 Three 0 0 1

有时可用两列。如果有一个水平等效于null的话,我们可以这样做:

1 One 1 0 
2 Two 0 1 
3 Three 0 0 

.get_dummies(...)方法的第一个参数是DataFrame对象。columns参数指定了代码要处理的DataFrame的列(或某些列,因为可以传入列表)。通过指定前缀,我们告诉方法生成的列名以d打头;本例中生成的列会叫d_Condo。下划线是默认的,可以通过指定prefix_sep参数更改。

.get_dummies(...)方法的完整参数列表,参见:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.get_dummies.html

 

详情参见

https://mp.weixin.qq.com/s?__biz=MjM5ODE1NDYyMA==&mid=2653390293&idx=2&sn=adf1b0454f6b456e7915e1f63df1c0af&chksm=bd1c3dc68a6bb4d0b24c9c4a7221e93a9fad034e8ebaa8d5de31a81dc162bcf9826ba328d322&mpshare=1&scene=1&srcid=0128q97IvrarY5DFHLxuoo9T&key=72f8c29ee7b1b21468d95c7af1c700704bfff54bd59e08475deb97adf1dcfb1e738aa3c19838e1bd667b667aff47cfcf99b91b18a04a9204985744aeffa7ce51fdf692d67e8cfe857f1427f326bf5862&ascene=1&uin=MTQ1NTUyODcwOQ%3D%3D&devicetype=Windows-QQBrowser&version=6103000b&lang=zh_CN&pass_ticket=%2FiYBkXbfb0Hmsi7iX4eD5po3k4%2F0A2%2BCrLJB%2B81EdEo%2FGDT7LP6zrwn6SwXWLvxm

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值