数据可视化,以泰坦尼克数据集为例,柱状图展示字段空值率
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
拿到一个数据集,首先就是要查看数据的合理性,是否存在着一些不合理的值,譬如空值。可以打印所有或者部分数据,然后人眼观测数据。或者通过df.info()
之类的方式,数据化查看空值情况。本文讲述的是:图形化显示空值的情况,更加直观的观察泰坦尼克数据集的各个字段的空值率情况。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。本文测试环境:python@3.12.3
。泰坦尼克数据集使用的是kaggle
竞赛的版本。
加载数据集
本文的龙套数据集来自kaggle
竞赛的泰塔尼克数据集。对这个数据集的初步分析,可以参考下面的文章:
代码如下:
import pandas as pd
train_df = pd.read_csv("kaggle\\train.csv")
test_df = pd.read_csv("kaggle\\test.csv")
all_df = pd.concat([train_df, test_df])
数据的每个字段是不是空值
检测的方法包括:df.isnull()
或者df.isna()
。参考文章:
check = all_df.isnull()
print(type(check), check)
或者
check = all_df.isna()
print(type(check), check)
使用.isnull()
或.isna()
对dataframe
,进行空值检测。得到的结果,依然是个DataFrame
。其成员不是True
就是False
。
求解空值所占比例
对于True
或者False
来说,True
所占的比例,恰好等于其平均值。所以,使用.mean()
进行计算。
check_mean = all_df.isnull().mean()
print(type(check_mean), check_mean)
如果严格按照平均数的定义来进行计算的话,是下面这样计算的。
percent = all_df.isnull().sum() / all_df.shape[0]
print(type(percent), percent)
输出一致:
<class 'pandas.core.series.Series'>
PassengerId 0.000000
Survived 0.319328
Pclass 0.000000
Name 0.000000
Sex 0.000000
Age 0.200917
SibSp 0.000000
Parch 0.000000
Ticket 0.000000
Fare 0.000764
Cabin 0.774637
Embarked 0.001528
dtype: float64
画柱图
使用plot
画柱状图,代码如下:
records = (all_df.isnull().sum() / all_df.shape[0]).round(4) * 100
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(10, 5))
# plt.xlabel("字段")
plt.ylabel("空值率")
plt.title("各个字段空值比例图")
# plt.ylim(0, 100)
records.plot(kind="bar")
plt.yticks(range(0, 101, 10)) # 控制y坐标刻度
for i, value in enumerate(records):
plt.text(i, value + 0.5, f"{value:.2f}%", ha="center", va="bottom") # 柱图的顶部显示百分比
plt.show()
这里存在着一个plot
画图显示中文的问题,参考文章:
结论
从柱图的结果可以看到,除了Survived
字段外,就Cabin
字段里面的空值最多。可以考虑是不是删除掉这个字段数据,或者做其它的特殊处理。
苏南大叔的更多python
文章,可以参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。