数据库中的缺失数据会导致应用程序中的错误或不正确的计算。最近,当我在一个RETS应用程序上工作时,我需要确保在一个MySQL表中没有遇到很多缺失值。尽管人们可以很容易地写一个SQL查询来找到缺失值的百分比,但我发现很多时候,首先获得表内缺失数据量的可视化表示,然后在需要时进一步深入,会更容易。我发现有一个库可以让你很容易地得到数据库表中缺失数据的可视化表示,这就是missingno--一个Python库。
我们可以使用missingno库来可视化数据库表、CSV文件或其他表格数据结构中的缺失数据,如果它能被Pandas正确读取的话
安装missingno库
首先我们将使用pip来安装这个库。
pip install missingno
可视化缺失的数据
我发现将数据库表转换为CSV文件比较容易,然后用下面的Python将其用于显示部分。这里我的CSV样本是418行。但它可以达到数千行。
对我来说,最富有成效的方式是使用矩阵密度显示来感受缺失数据。最初的代码是很简单的。请注意,这也使用了Pandas,使其更容易读取CSV文件并将其转换为missingno库所需要的数据框架。
import pandas as pd
import missingno as msno
# Loading the dataset
df = pd.read_csv("data.csv")
# Visualize missing values as a matrix
im = msno.matrix(df)
im.get_figure().savefig("data.png")
垂直的黑色带子是列。水平的白线是缺失值。右边的火花线总结了数据完整性的一般形状,并指出了数据中最大和最小的无效值的行。在默认情况下,库中省略了大型显示的列名,因为对于较大的数据集来说,它变得不可读。
如果你有几千或几百万行,你可以把样本限制在一个特定的大小。
msno.matrix(df.sample(500)) # Only display 500 rows from the data set
正如你从上面的显示中看到的,显示是相当密集的。所有的表列都包括在显示中。然而,我们可以有选择地显示一些列。例如,我们可以显示缺失值最多的底部10列。
# Loading the dataset
df = pd.read_csv("data.csv")
# Visualize missing values as a matrix
filtered_data = msno.nullity_filter(df, filter='bottom', n=10) # or filter='top'
im = msno.matrix(filtered_data)
im.get_figure().savefig("data.png")
这里,只显示缺失值最多的10个列。你可以根据你的表格大小,将其改为任何数量的列。
附加参数
有各种参数,你可以调整最终的显示效果。
# SIZE :
im = msno.matrix(filtered_data, figsize=(10,6)) # 10 inch by 6 inch image
# COLOR:
im = msno.matrix(filtered_data, color=(0.1, 0.2, 0.5)) # Blue color
# FONT-SIZE
im = msno.matrix(filtered_data, fontsize=(10))
你还可以为给定的数据集显示一个Barchart、直方图和树状图。也许我将在其他文章中介绍这些。