所谓可视化,就是采用图表来展示数据的分布状况或变化趋势。常用的Python可视化工具包是Matplotlib和Seaborn。下面结合鸢尾花数据集介绍绘制直方图、散点图、饼图、密度图和折线图的做法。目的是帮助读者初步认识数据可视化。要入门数据可视化的话,建议阅读相关书籍并且多多练习。
我们将使用Jupyter Notebook来编写和运行关于数据可视化的代码。这些代码涉及绘制图表的工作。首先,我们要做以下准备工作:
(1) 启动Jupyter Notebook。
(2) 单击进入一个文件夹(比如选择Desktop文件夹)。
(3) 新建一份交互式文档,把文档命名为“iris-visualization”。
(4) 在第1个代码输入框内敲入图所示的代码,按“Shift + Enter”运行这组代码。
Jupyter Notebook的使用详述了以上步骤的具体做法。完成以上6个步骤后,浏览器内的Notebook页面如图所示。
数据可视化实验的准备工作
下面两个输入框内输入分别输入一行代码。第一个输入框的代码是调用Pandas的read_csv函数加载保存在“Iris.csv”文件内的数据。第二个参数“index_col=0”指定首列作为索引列(即标签列)。read_csv函数返回一个DataFrame赋值给iris_data变量。
第二个输入框内,调用DataFrame的head方法,显示iris_data内的前5行数据。从输出结果来看,该鸢尾花(Iris)数据集有5个字段,依次是花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)和类别(Species)。
下面的代码调用info方法观察Iris数据集的整体信息。从输出内容中可以看出,数据集一共有150行,没有缺失数据的情况。
下面的代码调用describe方法观察Iris数据集的数字型字段的信息。从输出内容中,我们可以了解到花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)的平均值、最大值和最小值等信息。
下面的代码调用hist方法绘制直方图。第1行代码中,“iris_data[‘Petal.Length’]”是得到“Petal.Length”字段的属性值,这是一个Series类型的值,而后调用hist方法绘制直方图。第2行代码“plt.show()”是把直方图显示在网页上。
直方图告诉我们各种长度的花瓣的数量。例如,长度为1到1.5的花瓣的数量多于35个。长度为1.5到2.2的花瓣的数量多于10个,小于15个。
下面的代码调用DataFrame的hist方法绘制花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)的直方图。
下面的代码调用DataFrame的plot方法绘制散点图。plot方法的第三个参数“kind=’scatter’”指定生成一幅散点图。
代码下方的散点图中,每一个圆点代表一个样本。这里,一个样本是一朵鸢尾花的花瓣长度和花瓣宽度。X轴是花瓣长度,Y轴是花瓣宽度。通过散点图,我们可以看出样本分布情况。
下面的代码调用value_counts方法统计了150个鸢尾花样本的类别及其样本数。从输出结果可以发现,这150个样本分3类,第一类的名称是virginica,有50个样本。第二类的名称是setosa,有50个样本。第三类的名称是versicolor,有50个样本。
下面的代码绘制饼图,给出3种类别各自的占比。
下面的代码绘制了花瓣长度的KDE密度图。KDE密度图是模拟样本值概率分布的图。
下面的代码绘制了花萼长度(Sepal.Length)、花萼宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)的密度图。
下面的代码绘制了150个样本的花瓣长度的折线图。输出的折线图中,横轴是样本编号,纵轴是花瓣长度(位于1到7.0区间内)。从输出的折线图中可以看出花瓣长度大致分成3组。
下面的代码绘制了花瓣宽度的折线图。输出的折线图中,横轴是样本编号,纵轴是花瓣长度(位于0.0到2.5区间内)。从输出的折线图中可以看出花瓣宽度大致分成3组。