降维技术在数据处理中扮演着重要角色,它不仅可以减少计算和训练数据集的时间,还能帮助更好地进行数据可视化。缺失值比率是特征选择的基本技术之一。本文将介绍这种技术,并展示如何在Python中实现它。
如果更倾向于通过视听方式学习概念,提供了视频解释本文的全部内容。如果不想观看视频,可以继续阅读。
假设有一个数据集,想要预测被租用的自行车数量。有诸如季节、假日、工作日、天气、温度等变量,目标是使用所有这些独立变量来预测“数量”变量。那么,会采取的第一步是什么?首先探索数据,发现数据集中有很多缺失值。
然后决定计算这些缺失值。在每个变量中,可以使用一个简单的公式来计算缺失值的比例。公式是——每个列中缺失值的数量除以总观察次数,要计算百分比,当然要将这个数字乘以一百。可以为数据中的所有变量计算这个比例。
一旦得到了变量的缺失值比例,下一步是什么?现在可以决定一个阈值,比如说70%,可以使用这个阈值并删除所有缺失值比例超过这个阈值的变量。所以当再次看问题时——“风速”变量的缺失值比例是90%,远高于70%的阈值。因此,可以继续并删除这个变量。通常,可以绘制缺失值比例超过60%或70%的变量。
请记住,决定这个阈值没有硬性规定,它可以因问题而异。一旦删除了超过阈值的缺失值的变量,认为应该如何处理仍然有缺失值的剩余变量?否应该直接删除它们?嗯,这些情况下,不应该直接删除它们,而应该首先尝试找出缺失值的原因。
这可能是因为不响应或人们拒绝分享特定信息。这可能是因为在收集数据时出现错误,或者是在读取数据时出现错误。数据集中有缺失值可能有各种原因。找出原因是重要的。一旦知道了原因,将尝试插补这些缺失值,可以使用均值、中位数和众数等统计措施,甚至可以训练一个模型来预测缺失值。
简而言之,这就是如何利用缺失值来减少数据集的维度。是时候将学习付诸实践了。让启动一个Jupyter笔记本并实现它。
第一步,导入pandas库。
import pandas as pd
然后读取数据集,并使用data.head()函数查看数据的前五行。
data = pd.read_csv('missing_value_ratio-200306-192816.csv')
data.head()
之前看到有一堆变量和目标变量“数量”。让继续打印数据的形状。
data.shape
有12,980个观察值和10个变量或列。接下来,将检查每个列中缺失值的数量。
data.isnull().sum()
在这里可以看到“假日”和“风速”似乎有很多缺失的观察值。季节、工作日、天气和湿度变量也有缺失值,但与假日和风速相比,它们可以忽略不计。
为了让自己更容易一些,将这个转换为百分比数字。
data.isnull().sum()/len(data)*100
正如上面看到的,假日和风速有超过40%的缺失值。这是相当多的。通常,如果一个变量有大约40到50%的缺失值,可能会想使用之前讨论过的方法之一来插补它们。
但由于本视频的目的是让了解如何应用缺失值过滤器来减少数据集的维度。将设置一个40%的阈值,然后删除缺失值超过这个阈值的变量。
让继续并保存这些百分比到一个称之为a的变量中,并将列名保存到一个称之为variables的变量中。
a = data.isnull().sum()/len(data)*100
variables = data.columns
现在来到有趣的部分。将在这里使用一个for循环来将阈值应用于数据集。正如之前所说的,将阈值设置为40%,但这可以根据正在处理的问题类型而变化。
variable = []
for i in range(data.columns.shape[0]):
if a[i]<=40: #设置阈值为40%
variable.append(variables[i])
让打印出这个新变量。
variable
正如所预期的,假日和风速变量已经被删除,因为它们超过了40%的阈值。将剩余的变量放入一个新的数据框中,将其称为new_data。让检查一下这个新数据的前五个观察值。
new_data = data[variable]
new_data.head()
是的,一切都按照计划进行,让验证一下new_data中每个变量的缺失值百分比。
new_data.isnull().sum()/len(new_data)*100
完美!最后,比较new_data和原始数据集的形状。
new_data.shape, data.shape
可能已经猜到了,观察值的数量是相同的,但新数据集中的变量少了两个。这就是在Python中如何执行缺失值比率的方法。