数据预处理相关Demo(缺失值、均值方差标准化、极差法归一化、主成分分析)

简介: 数据预处理相关Demo(缺失值、均值方差标准化、极差法归一化、主成分分析)

1 缺失值处理


1.1 pandas中利用fillna()函数

通过fillna()方法,可以去掉数据集中的空值(nan值)。


# 数据生成
import pandas as pd
import numpy as np
data={'a':[2,2,np.nan,5,6],'b':['kl','kl','kl',np.nan,'kl'],'c':[4,6,5,np.nan,6],
      'd':[7,9,np.nan,9,8]}
df=pd.DataFrame(data)
df

image.png


填充固定值

df.fillna(99) #所有空值填充为99

image.png


其他填充方式

df.fillna('str') # 填充字符串
df.fillna({'a':0,'b':1}) #部分列填充固定值


更多填充方式可以参考文档(jupyter lab中,可以按shift+tab键)。


1.2 利用Imputer创建填充对象

# 数据
import pandas as pd
import numpy as np
c=np.array([[1,2,3,4],[4,5,6,np.nan],[5,6,7,8],[9,4,np.nan,8]])   #数组c
C=pd.DataFrame(c)  
C

image.png

from sklearn.impute import SimpleImputer  #导入相关模块
imp=SimpleImputer(missing_values=np.nan,strategy='median')
filled_C=imp.fit_transform(C)
pd.DataFrame(filled_C) #填充的值是每列的中位数
# 其他
strategy:均值(mean)、中位数(median)、最频繁值(most_frequent)


2 数据规范化


2.1 均值-方差标准化

变量或指标数据减去其均值再除以标准差得到新的数据。

image.png

from sklearn.preprocessing import StandardScaler #导入均值方差规范化模块
scaler=StandardScaler()
scaler.fit_transform(data)


这种方式处理数据,满足(μ,σ)的正态分布,注意这里并不是把数据限定在(-1,1)内的归一化操作。


2.2 极差归一化

变量或者指标数据减去其最小值,再除以最大值与最小值之差,得到新的数据范围在[0,1]

image.png

from sklearn.preprocessing import MinMaxScaler #导入极差规范化模块
scaler=MinMaxScaler()
scaler.fit_transform(data)


3 主成分分析


多指标之间存在相关性的情况下,可能会影响到模型的分析效果。通过主成分分析可以将众多变量转换为少数几个互不相关的综合变量。


这是一种数据降维方法。从投影角度来看,主成分分析找到能使投影后的数据方差最大的投影方向,尽量保持原始数据的差异性。


3.1 数据展示

《2016年农村居民人均可支配收入情况》数据可自行复制保存为csv文件导入,

image.png

image.png


3.2 主成分相关概念

找出几个综合变量来代替原来众多的变量,使得这些综合变量尽可能地代表原来变量信息且彼此互不相关。


  • 特征向量(li1,li2…lip)
  • 特征值
  • 主成分方差百分比(贡献率):通过累计贡献率的设置,可以筛选出不同数量的主成分。


第i个主成分表示形式如下:

image.png

注,最终生成的主成分Yi的个数≤X的个数,通过不同贡献率的限定可能得到不同的主成分个数。


3.3 案例应用

1、 生成协方差矩阵,判断变量之间的相关性

# 导入上方图表
X=data.iloc[:,1:] # 地区文字数据剔除
X.head() #显示前5行


image.png

# 生成协方差矩阵
X.corr()

image.png


通过上表可以发现,工资性收入与财产净收入相关程度很高。


2、 主成分分析

# 数据规范化
from sklearn.preprocessing import StandardScaler
scaler=StandardScaler()
X=scaler.fit_transform(X)
X
# 输出
'''
array([[ 2.62267702, -1.90653048,  3.65623472, -0.05290328],
       [ 1.52887926,  0.51994204,  2.00731096, -0.75273157],
       [ 0.15015642, -0.48083311, -0.29121072, -1.38861779],
       [-0.10218878, -1.40741312, -0.68320947, -0.47206122],
       [-0.75891073,  1.1971128 ,  0.41366444,  0.31934239],
       [-0.13393451,  0.76359799, -0.29084943, -0.60492578],
       [-0.77935956,  2.20072724, -0.38406204, -0.52025876],
       [-0.76329603,  1.35417039,  0.84757273,  0.1761957 ],
       [ 3.17331769, -2.41013094,  1.88411135,  3.26469409],
'''


# PCA
from sklearn.decomposition import PCA
pca=PCA(n_components=0.95)  # 设置累计贡献率
pca.fit_transform(X)
# 输出
'''
array([[ 4.33588394,  1.2871025 ,  1.68836853],
       [ 1.53736203,  2.12655221,  0.56027639],
       [-0.46694468,  0.18931331,  1.38413422],
       [-0.10431271, -1.123358  ,  1.17241467],
       [-0.55472192,  0.67855307, -1.03614749],
       [-0.7860694 ,  0.60996214, -0.01608431],
       [-1.74256785,  1.33152775, -1.02791134],
       [-0.43551643,  1.06930104, -0.9947622 ],
       [ 5.26192283, -1.30032837, -0.65586678],
       [ 1.26240024,  0.53263985, -1.0411674 ],
       [ 1.66736332,  1.59956567, -0.2701487 ],
       [-0.25754205, -0.62850484, -0.50489853],
------------后面省略
'''


通过主成分分析之后,原先的4个指标变量变成3个。

tzxl=pca.components_
tzxl # 特征向量
# 输出
'''
array([[ 0.61009369, -0.38007555,  0.55610546,  0.41722294],
       [ 0.27066909,  0.68308081,  0.50755251, -0.45003255],
       [ 0.11152189, -0.60400387,  0.05543569, -0.78719062]
'''


后续我们计算第一个主成分,就是用原先指标变量的数据乘上数组第一行[ 0.68846266, -0.34535834, 0.53950046, 0.3401265 ](即第一个特征向量)

tzz=pca.explained_variance_
tzz # 特征值
# 输出
'''
array([2.34641356, 0.93022743, 0.70345946])
'''
gxl=pca.explained_variance_ratio_
gxl #解释变量贡献率
# 输出
'''
array([0.5676807 , 0.22505502, 0.1701918 ])
'''


3 验证


数据规范化后的第一行为[ 2.62267702, -1.90653048, 3.65623472, -0.05290328]


特征向量:[ 0.61009369, -0.38007555, 0.55610546, 0.41722294]


设pca之后的第一个主成分为Y00,下面进行验证。


Y00=sum(X[0]*tzxl[0])
# 输出Y00:4.3358839429206855


4 基于主成分进行综合评分排名


from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from pandas as pd
# 规范化
scaler=StandardScaler()
X=scaler.fit_transform(X)
# pca
pca=PCA(n_components=0.95)  # 设置累计贡献率
Y=pca.fit_transform(X)
tzxl=pca.components_ 
tzz=pca.explained_variance_
gxl=pca.explained_variance_ratio_
# 构建综合评分,选取Pca之后的每一列数据X贡献率
F=Y[:,0]*gxl[0]+Y[:,1]*gxl[1]+Y[:,1]*gxl[1]
df=pd.Series(F,index=data['地区'])
df.sort_values(ascending=False)

image.png

image.png


目录
相关文章
|
7天前
|
机器学习/深度学习 数据可视化 Python
R语言使用逻辑回归Logistic、单因素方差分析anova、异常点分析和可视化分类iris鸢尾花数据集|数据分享
R语言使用逻辑回归Logistic、单因素方差分析anova、异常点分析和可视化分类iris鸢尾花数据集|数据分享
11 1
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索
R语言用逻辑回归预测BRFSS中风数据、方差分析anova、ROC曲线AUC、可视化探索
10 0
|
7天前
|
机器学习/深度学习 前端开发 自动驾驶
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
13 2
|
14天前
|
机器学习/深度学习 数据可视化 算法
多项式Logistic逻辑回归进行多类别分类和交叉验证准确度箱线图可视化
多项式Logistic逻辑回归进行多类别分类和交叉验证准确度箱线图可视化
18 0
|
16天前
|
数据库
R语言中回归模型预测的不同类型置信区间应用比较分析
R语言中回归模型预测的不同类型置信区间应用比较分析
15 0
|
15天前
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
37 0
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
|
15天前
|
数据可视化 API 算法框架/工具
Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化
Python用稀疏、高斯随机投影和主成分分析PCA对MNIST手写数字数据进行降维可视化
27 0
|
16天前
|
前端开发
R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
R语言使用bootstrap和增量法计算广义线性模型(GLM)预测置信区间
11 0
|
16天前
|
算法 数据挖掘 Go
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
R语言k-Shape时间序列聚类方法对股票价格时间序列聚类
145 5
|
16天前
|
数据可视化 数据挖掘 Serverless
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
46 0