• 登录
Skip to content

一起大数据-技术文章心得

一起大数据网由数据爱好者发起并维护,专注数据分析、挖掘、大数据相关领域的技术分享、交流。不定期组织爱好者聚会,期待通过跨行业的交流和碰撞,更好的推进各领域数据的价值落地。

Menu
  • 首页
  • 大数据案例
  • 数据&电子书
  • 视频
    • Excel视频
    • VBA视频
    • Mysql视频
    • 统计学视频
    • SPSS视频
    • R视频
    • SAS视频
    • Python视频
    • 数据挖掘视频
    • 龙星计划-数据挖掘
    • 大数据视频
    • Machine Learning with Python
  • 理论
    • 统计学
    • 数据分析
    • 机器学习
    • 大数据
  • 软件
    • Excel
    • Modeler
    • Python
    • R
    • SAS
    • SPSS
    • SQL
    • PostgreSQL
    • KNIME
  • 技术教程
    • SQL教程
    • SPSS简明教程
    • SAS教程
    • The Little SAS Book
    • SAS EG教程
    • R语言教程
    • Python3教程
    • IT 技术速查手册
    • Data Mining With Python and R
    • SAS Enterprise Miner
  • 问答社区
  • 我要提问
Menu

Python缺失值预处理——复杂缺失值填补方法

Posted on 2022年12月30日

复杂的缺失值填补方法,会考虑到数据的整体情况,然后在对有缺失值的数据进行填充,本小节将会介绍3种复杂的缺失值填补方法。

数据准备

## 输出高清图像
%config InlineBackend.figure_format = 'retina'
%matplotlib inline
## 图像显示中文的问题
import matplotlib
matplotlib.rcParams['axes.unicode_minus']=False
import seaborn as sns 
sns.set(font= "Kaiti",style="ticks",font_scale=1.4)

## 导入本小节会使用到的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns 
import missingno as msno 
from sklearn.impute import IterativeImputer
from sklearn.impute import KNNImputer
from missingpy import MissForest

## 读取用于演示的数据集
oceandf = pd.read_csv("data/chap2/热带大气海洋数据.csv")
## 判断每个变量中是否存在缺失值
pd.isna(oceandf).sum()
Year               0
Latitude           0
Longitude          0
SeaSurfaceTemp     3
AirTemp           81
Humidity          93
UWind              0
VWind              0
dtype: int64

IterativeImputer多变量缺失值填补

IterativeImputer是sklearn库中提供的一种缺失值填补方式,该方法会考虑数据在高维空间中的整体分布情况,然后在对有缺失值的样本进行填充。针对该方法,可以使用下面的程序进行缺失值填充,并将填充的结果可视化,可视化的图像如图1所示。

## 找到缺失值所在的位置
nanaindex = pd.isna(oceandf.AirTemp) | pd.isna(oceandf.Humidity)
## IterativeImputer多变量缺失值填补方法
iterimp = IterativeImputer(random_state = 123)
oceandfiter = iterimp.fit_transform(oceandf)
## 获取填充后的变量
AirTemp = oceandfiter[:,4]
Humidity = oceandfiter[:,5]
## 可视化填充后的结果
plt.figure(figsize = (10,6))
plt.scatter(AirTemp[~nanaindex],Humidity[~nanaindex],
            c = "blue",marker = "o",label = "非缺失值")
plt.scatter(AirTemp[nanaindex],Humidity[nanaindex],
            c = "red",marker = "s",label = "缺失值")
plt.grid()
plt.legend(loc = "upper right",fontsize = 12)
plt.xlabel("AirTemp")
plt.ylabel("Humidity")
plt.title("使用IterativeImputer方法填充")
plt.show()
图1 IterativeImputer方法填充缺失值

K近邻缺失值填补

K近邻缺失值填补方法,是非常有名的复杂缺失值填补方式之一,该方法会利用带有缺失值样本的多个近邻的综合情况,对带有缺失值的样本进行填充,该方法可以使用sklearn库中的KNNImputer来完成,使用KNNImputer进行缺失值填补,并将结果可视化的程序如下所示,运行程序后可获得如图2所示的图像。

## KNNImputer缺失值填补方法
knnimp = KNNImputer(n_neighbors = 5)
oceandfknn = knnimp.fit_transform(oceandf)
## 获取填充后的变量
AirTemp = oceandfknn[:,4]
Humidity = oceandfknn[:,5]
## 可视化填充后的结果
plt.figure(figsize = (10,6))
plt.scatter(AirTemp[~nanaindex],Humidity[~nanaindex],
            c = "blue",marker = "o",label = "非缺失值")
plt.scatter(AirTemp[nanaindex],Humidity[nanaindex],
            c = "red",marker = "s",label = "缺失值")
plt.grid()
plt.legend(loc = "upper right",fontsize = 12)
plt.xlabel("AirTemp")
plt.ylabel("Humidity")
plt.title("使用KNNImputer方法填充")
plt.show()
图2 K近邻缺失值填补

MissForest缺失值填补

针对带有缺失值的数据,也可以使用随机森林方法进行缺失值填补。该方法会利用随机森林的思想,进行缺失值填充,也是一种考虑数据整体情况的缺失值填补方法。该方法可以使用missingpy库中的MissForest完成。可以使用下面的程序进行MissForest缺失值填充,运行程序后可获得如图3所示的图像。

## MissForest缺失值填补方法
forestimp = MissForest(n_estimators = 100,random_state = 123)
oceandfforest = forestimp.fit_transform(oceandf)
## 获取填充后的变量
AirTemp = oceandfforest[:,4]
Humidity = oceandfforest[:,5]
## 可视化填充后的结果
plt.figure(figsize = (10,6))
plt.scatter(AirTemp[~nanaindex],Humidity[~nanaindex],
            c = "blue",marker = "o",label = "非缺失值")
plt.scatter(AirTemp[nanaindex],Humidity[nanaindex],
            c = "red",marker = "s",label = "缺失值")
plt.grid()
plt.legend(loc = "upper right",fontsize = 12)
plt.xlabel("AirTemp")
plt.ylabel("Humidity")
plt.title("使用MissForest方法填充")
plt.show()
图3 MissForest缺失值填充

在上面介绍的三种复杂数据填充方法中,在缺失值填充时,都有考虑数据的整体分布情况,所以在进行缺失值填充时会有更好的填充效果。

使用的数据获取链接:

链接:https://pan.baidu.com/s/1pYM1fTz9m7ZA6yOP54CWkg 
提取码:whj6

文章首发于微信公众号:Adam大数据分析小站
微信公众号:AdamBigData

发表评论 取消回复

要发表评论,您必须先登录。

推荐访问


数据分析交流:数据分析交流
Excel学习: Excel学习交流
Python交流:一起学习Python(数据分
SQL交流:一起学习SQL(数据分析
微博:一起大数据

最新提问

  • SQL Chat
  • sql server 不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的表进行了更改或者启用了”阻止保存要求重新创建表的更改”选项。
  • 偏相关分析
  • 复相关系数
  • 【R语言】熵权法确定权重
  • 如何破解Excel VBA密码
  • 解决 vba 报错:要在64位系统上使用,请检查并更新Declare 语句
  • 基于 HuggingFace Transformer 的统一综合自然语言处理库
  • sqlserver分区表索引
  • Navicat连接数据库后不显示库、表、数据

文章标签

ARIMA CBC Excel GBDT KNN Modeler Mysql pandas PostgreSQL python python数据可视化 R SAS sklearn SPSS SQL SVM Tableau TensorFlow VBA 主成分分析 关联规则 决策树 协同过滤 可视化 因子分析 大数据 大数据分析 推荐系统 数据分析 数据可视化 数据挖掘 数据透视表 文本挖掘 时间序列 机器学习 深度学习 神经网络 结构方程 统计学 联合分析 聚类 聚类分析 逻辑回归 随机森林
©2023 一起大数据-技术文章心得 | Design: Newspaperly WordPress Theme