没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
为了将数据清洗简单化,本⽂介绍了⼀种新型完备分步指南,⽀持在 Python 中执⾏数据清洗流程。读者可以学习找出并清洗以下
数据的⽅法:
缺失数据;
不规则数据(异常值);
不必要数据:重复数据(repetitive data)、复制数据(duplicate data)等;
不⼀致数据:⼤写、地址等;
该指南使⽤的数据集是 Kaggle 竞赛 Sberbank 俄罗斯房地产价值预测竞赛数据(该项⽬的⽬标是预测俄罗斯的房价波动)。本⽂
并未使⽤全部数据,仅选取了其中的⼀部分样本。
在进⼊数据清洗流程之前,我们先来看⼀下数据概况。
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
# import packages
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib
plt.style.use('ggplot')
from matplotlib.pyplot import figure
%matplotlib inline
matplotlib.rcParams['figure.figsize'] = (12,8
)
pd.options.mode.chained_assignment = None
# read the data
df = pd.read_csv('sberbank.csv'
)
# shape and data types of the data
print(df.shape)
print(df.dtypes)
从以上结果中,我们可以看到该数据集共有 30,471 ⾏、292 列,还可以辨别特征属于数值变量还是分类变量。这些都是有⽤的信
息。
现在,我们可以浏览「脏」数据类型检查清单,并⼀⼀攻破。
开始吧!
缺失数据
处理缺失数据/缺失值是数据清洗中最棘⼿也最常⻅的部分。很多模型可以与其他数据问题和平共处,但⼤多数模型⽆法接受缺失
数据问题。
如何找出缺失数据?
本⽂将介绍三种⽅法,帮助⼤家更多地了解数据集中的缺失数据。
⽅法 1:缺失数据热图
当特征数量较少时,我们可以通过热图对缺失数据进⾏可视化。
下表展⽰了前 30 个特征的缺失数据模式。横轴表⽰特征名,纵轴表⽰观察值/⾏数,⻩⾊表⽰缺失数据,蓝⾊表⽰⾮缺失数据。
例如,下图中特征 life_sq 在多个⾏中存在缺失值。⽽特征 floor 只在第 7000 ⾏左右出现零星缺失值。
26
27
28
29
30
31
32
# select numeric columns
df_numeric = df.select_dtypes(include=[np.number])
numeric_cols = df_numeric.columns.values
print(numeric_cols)
# select non numeric columns
df_non_numeric = df.select_dtypes(exclude=[np.number])
non_numeric_cols = df_non_numeric.columns.values
print(non_numeric_cols)
1
2
3
cols = df.columns[:30] # first 30 columns
colours = ['#000099', '#ffff00'] # specify the colours - yellow is missing. blue is not missing.
sns.heatmap(df[cols].isnull(), cmap=sns.color_palette(colours))
缺失数据热图
⽅法 2:缺失数据百分⽐列表
当数据集中存在很多特征时,我们可以为每个特征列出缺失数据的百分⽐。
得到如下列表,该表展⽰了每个特征的缺失值百分⽐。
具体⽽⾔,我们可以从下表中看到特征 life_sq 有 21% 的缺失数据,⽽特征 floor 仅有 1% 的缺失数据。该列表有效地总结了每个
特征的缺失数据百分⽐情况,是对热图可视化的补充。
1
2
3
4
5
# if it's a larger dataset and the visualization takes too long can do this.
# % of missing.
for col in df.columns:
pct_missing = np.mean(df[col].isnull())
print('{} - {}%'.format(col, round(pct_missing*100))
)
剩余22页未读,继续阅读
资源评论
地理探险家
- 粉丝: 1039
- 资源: 5416
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功