数据预处理 
数据清洗 
缺失值处理 
处理方法 
数据插补方法 
插补方法 
描述 
 
 
均值/中位数/众数替代 
 
最邻近插补 
用与缺失值最接近的样本的该属性值来插补 
 
回归函数 
用其他变量拟合缺失变量,预测其值 
 
插值函数 
拉格朗日插值(有新的值进来,插值函数会改变,但用python实现简单),牛顿插值(解决了拉插的缺点) 
 
使用固定值 
 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 """ Created on Wed May  6 10:32:34 2020 @author: SANG """ import  pandas as  pdfrom  scipy.interpolate import  lagrangeinputfile='data/catering_sale.xls'  outputfile='temp/sales.xls'  data=pd.read_excel(inputfile) data[u'销量' ][(data[u'销量' ]<400 )|(data[u'销量' ]>5000 )]=None  def  polyinterp_column (s,n,k=5  ):    y=s.reindex(list (range (n-k,n))+list (range (n+1 ,n+1 +k)))     y=y[y.notnull()]     return  lagrange(y.index,list (y))(n) print (data.columns)for  i in  data.columns:    for  j in  range (len (data)):         if  (data[i].isnull())[j]:             data[i][j]=polyinterp_column(data[i],j)                  data.to_excel(outputfile) 
数据集成 
	将分布在不同地方的数据集成。
实体识别 
冗余属性识别 
数据变换 
简单函数变换 
	就是用简单函数处理一下原数据
规范化 
	消除数据之间量纲 和取值范围 差异带来的影响
最小-最大规范化 
	x ∗ = x − m i n m a x − m i n x^*=\frac{x-min}{max-min} x ∗ = m a x − m i n x − m i n  
缺点:
将来有在[max,min]范围之外的数据加了进来,[max,min]就变了,需要重新算 
数据数值很大而且集中,规范化后各值接近0,而且相差不大 
 
 
零-均值规范化 
	x ∗ = x − x ˉ σ x^*=\frac{x-\bar{x}}{\sigma} x ∗ = σ x − x ˉ  
	σ 为标准差 \sigma为标准差 σ 为 标 准 差 
	处理后数据均值为0,标准差为1
目前最多用这种规范化方法
 
小数定标规范化 
	将小数映射到[-1,1]之间 
	x ∗ = x 1 0 k x^*=\frac{x}{10^k} x ∗ = 1 0 k x  
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 """ Created on Wed May  6 12:43:30 2020 @author: SANG """ import  pandas as  pdimport  numpy as  npdatafile='data/normalization_data.xls'  data=pd.read_excel(datafile,header=None ) print ((data-data.min ())/(data.max ()-data.min ()))print ((data-data.mean()/data.std()))print (data/10 **np.ceil(np.log10(data.abs ().max ())))
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24           0          1          2          3  0   0.074380   0.937291   0.923520   1.000000 1   0.619835   0.000000   0.000000   0.850941 2   0.214876   0.119565   0.813322   0.000000 3   0.000000   1.000000   1.000000   0.563676 4   1.000000   0.942308   0.996711   0.804149 5   0.264463   0.838629   0.814967   0.909310 6   0.636364   0.846990   0.786184   0.929571             0            1            2             3  0    75.309998   520.602444   601.039834   2861.811846 1   141.309998  -600.397556  -521.960166   2243.811846 2    92.309998  -457.397556   467.039834  -1284.188154 3    66.309998   595.602444   694.039834   1052.811846 4   187.309998   526.602444   690.039834   2049.811846 5    98.309998   402.602444   469.039834   2485.811846 6   143.309998   412.602444   434.039834   2569.811846        0       1       2        3  0   0.078   0.521   0.602   0.2863 1   0.144  -0.600  -0.521   0.2245 2   0.095  -0.457   0.468  -0.1283 3   0.069   0.596   0.695   0.1054 4   0.190   0.527   0.691   0.2051 5   0.101   0.403   0.470   0.2487 6   0.146   0.413   0.435   0.2571 
连续属性离散化 
等宽法 
	将数据的取值域划分为若干等宽区间 
缺点:离群点对区间划分影响很大
 
等频法 
	每个区间拥有相同的数据量 
缺点:为了满足等频,相同属性值的数据可能被划分到不同的区间内
 
基于聚类分析的方法 
	确定簇的个数,进行聚类,同一簇的属性值使用同一个标记
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 """ Created on Wed May  6 15:41:09 2020 @author: SANG """ import  pandas as  pddatafile='data/discretization_data.xls'  data=pd.read_excel(datafile) data=data[u'肝气郁结证型系数' ].copy() k=4  d1=pd.cut(data,k,labels=range (k)) w=[1.0 *i/k for  i in  range (k+1 )] w=data.describe(percentiles=w)[4 :4 +k+1 ] w[0 ]=w[0 ]*(1 -1e-10 ) d2=pd.cut(data,w,labels=range (k)) from  sklearn.cluster import  KMeanskmodel=KMeans(n_clusters=k,n_jobs=4 ) kmodel.fit(data.to_numpy().reshape((len (data),1 ))) c=pd.DataFrame(kmodel.cluster_centers_).sort_values(0 ) w=c.rolling(2 ).mean().iloc[1 :] w=[0 ]+list (w[0 ])+[data.max ()] d3=pd.cut(data,w,labels=range (k)) def  cluster_plot (d,k ):    import  matplotlib.pyplot as  plt     plt.rcParams['font.sans-serif' ]=['SimHei' ]     plt.rcParams['axes.unicode_minus' ]=False           plt.figure(figsize=(8 ,3 ),dpi=256 )     for  j in  range (0 ,k):         plt.plot(data[d==j],[j for  i in  d[d==j]],'o' )              plt.ylim(-0.5 ,k-0.5 )     return  plt cluster_plot(d1,k).show() cluster_plot(d2,k).show() cluster_plot(d3,k).show() 
https://pandas.pydata.org/docs/reference/api/pandas.cut.html?highlight=cut#pandas.cut 
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html?highlight=sort_values#pandas.DataFrame.sort_values https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.iloc.html?highlight=iloc#pandas.DataFrame.iloc 
 
属性构造 
	用已有属性集构造出新的属性
小波变换 
	一种信号分析手段
数据规约 
意义:
少数有代表性的数据,缩短数据挖掘时间 
少占用存储空间 
降低无效、错误数据对建模的影响,提高建模准确性 
 
 
属性规约 
主成分分析 
	用组合的几个新变量,代替原来所有变量对数据的解释
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 """ Created on Sat May  9 19:48:28 2020 @author: SANG """ import  pandas as  pdinputfile='data/principal_component.xls'  outputfile='temp/dimention_reducted.xls'  data=pd.read_excel(inputfile,header=None ) from  sklearn.decomposition import  PCApca=PCA(3 ) pca.fit(data) low_d=pca.transform(data) pd.DataFrame(low_d).to_excel(outputfile) print (pca.components_)print (pca.explained_variance_ratio_)
数据规约 
	用较少的数据代替原数据
直方图 
	无非是把数据的区间选大点,这样数据量就少了
聚类 
	将数据元组划为不同的簇,实现数据规约
抽样 
参数回归 
	参数回归模型有了,那有了模型就直接代表了数据
Python数据预处理函数 
函数名 
功能 
所属库 
 
 
unique 
数据插值 
Scipy 
 
unique 
去除数据重复元素 
Pandas/Numpy 
 
isnull 
判断是否为空值 
Pandas 
 
notnull 
判断是否非空值 
Pandas 
 
PCA 
主成分分析 
Scikit-Learn 
 
random 
生成随机矩阵 
Numpy