数据预处理相关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


目录
相关文章
|
6月前
|
机器学习/深度学习 数据可视化
R语言Stan贝叶斯回归置信区间后验分布可视化模型检验|附数据代码
R语言Stan贝叶斯回归置信区间后验分布可视化模型检验|附数据代码
|
6月前
|
数据可视化 算法 数据挖掘
【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享(下)
【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享
|
6月前
|
机器学习/深度学习 前端开发 自动驾驶
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
【视频】什么是Bootstrap自抽样及应用R语言线性回归预测置信区间实例|数据分享
|
6月前
|
数据可视化 算法 数据挖掘
【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享(上)
【视频】KMEANS均值聚类和层次聚类:R语言分析生活幸福指数可视化|数据分享
|
6月前
|
Serverless
R语言用于线性回归的稳健方差估计
R语言用于线性回归的稳健方差估计
|
6月前
|
大数据
stata具有异方差误差的区间回归
stata具有异方差误差的区间回归
|
6月前
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
ARIMA、ARIMAX、 动态回归和OLS 回归预测多元时间序列
|
6月前
|
机器学习/深度学习 数据可视化 算法
R语言拟合改进的稀疏广义加性模型(RGAM)预测、交叉验证、可视化
R语言拟合改进的稀疏广义加性模型(RGAM)预测、交叉验证、可视化
|
6月前
|
数据可视化
R语言lasso惩罚稀疏加法(相加)模型SPAM拟合非线性数据和可视化
R语言lasso惩罚稀疏加法(相加)模型SPAM拟合非线性数据和可视化
|
6月前
样条曲线分段线性回归模型piecewise regression估计个股beta值分析收益率数据
样条曲线分段线性回归模型piecewise regression估计个股beta值分析收益率数据
下一篇
无影云桌面