用Python快速实现数据可视化 数据可视化是目前数据分析、商业智能、机器学习等领域中不可或缺的一个环节,它可以让我们更清晰地认识数据,发现数据中的规律、异常等信息,对于决策制定、问题解决等方面都能起到极大的帮助。在Python中,有很多优秀的数据可视化库,如matplotlib、seaborn、plotly等,能够满足我们大部分的需求。本篇文章将基于matplotlib和seaborn,向大家介绍如何用Python快速实现数据可视化。 一、引入数据 数据的来源有很多,如从文件中读取、从API中获取、从数据库中获取等。为了演示方便,我们将使用一个自带的数据集Iris,这个数据集包含了三个类别的鸢尾花的花萼长度、花萼宽度、花瓣长度和花瓣宽度四个变量。我们首先需要先安装matplotlib和seaborn这两个库: ```python !pip install matplotlib seaborn ``` 然后就可以引入数据集并查看其基本信息了: ```python import seaborn as sns iris = sns.load_dataset('iris') print(iris.head()) print(iris.info()) ``` 输出结果如下: ``` sepal_length sepal_width petal_length petal_width species 0 5.1 3.5 1.4 0.2 setosa 1 4.9 3.0 1.4 0.2 setosa 2 4.7 3.2 1.3 0.2 setosa 3 4.6 3.1 1.5 0.2 setosa 4 5.0 3.6 1.4 0.2 setosaRangeIndex: 150 entries, 0 to 149 Data columns (total 5 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 sepal_length 150 non-null float64 1 sepal_width 150 non-null float64 2 petal_length 150 non-null float64 3 petal_width 150 non-null float64 4 species 150 non-null object dtypes: float64(4), object(1) memory usage: 6.0+ KB ``` 可以看到,该数据集中包含了150个样本,分别有花萼长度、花萼宽度、花瓣长度和花瓣宽度四个变量,其中species为分类变量,共有三个类别。 二、单变量数据可视化 当我们想要了解一个单一的变量的分布情况时,可以使用直方图(histogram)或密度图(density plot)来展示该变量的分布情况。在matplotlib中,我们可以使用hist函数来绘制直方图,使用kde函数来绘制密度图;在seaborn中,我们可以使用distplot函数来同时展示直方图和密度图。 例如,我们想要了解花萼长度这一变量的分布情况,可以使用如下代码进行可视化: ```python import matplotlib.pyplot as plt sns.distplot(iris['sepal_length'], bins=20) plt.show() ``` 输出结果如下: ![花萼长度直方图和密度图.png](https://i.loli.net/2021/08/19/M8Ywfk5qC76pbGD.png) 可以看到,花萼长度的分布大致呈正态分布,其中一些样本的花萼长度小于4厘米,另一些样本的花萼长度大于7厘米。我们还可以使用rugplot函数来为每个样本增加一条垂直的游程,以便更好地查看样本的密度。例如,我们可以使用如下代码进行可视化: ```python sns.distplot(iris['sepal_length'], bins=20, kde=False, rug=True) plt.show() ``` 输出结果如下: ![花萼长度直方图和rugplot.png](https://i.loli.net/2021/08/19/JAsvHbM8q1TC5L9.png) 可以看到,rugplot可以更加清晰地展示每个样本的分布情况,但同时也更加复杂。 三、双变量数据可视化 当我们想要了解两个变量之间的关系时,可以使用散点图(scatter plot)或热力图(heatmap)来展示它们之间的关系。在matplotlib中,我们可以使用scatter函数来绘制散点图,使用pcolor或imshow函数来绘制热力图;在seaborn中,我们可以使用jointplot函数来绘制散点图和分布图的组合,使用heatmap函数来绘制热力图。 例如,我们想要了解花萼长度和花萼宽度这两个变量之间的关系,可以使用如下代码进行可视化: ```python sns.jointplot(x='sepal_length', y='sepal_width', data=iris, kind='scatter') plt.show() ``` 输出结果如下: ![花萼长度和花萼宽度散点图.png](https://i.loli.net/2021/08/19/e8LkqPb1cRXgpJ5.png) 可以看到,花萼长度和花萼宽度之间存在一定的负相关关系,即花萼长度越大,花萼宽度就越小。我们还可以使用kind参数来指定图形类型,如kind='kde'可以绘制核密度估计图,kind='hex'可以绘制六边形图。 另外,当我们想要了解多个变量之间的关系时,可以使用pairplot函数来展示它们之间的关系。例如,我们可以使用如下代码进行可视化: ```python sns.pairplot(data=iris, hue='species') plt.show() ``` 输出结果如下: ![多变量关系图.png](https://i.loli.net/2021/08/19/6jxYQKag9tbhGZB.png) 可以看到,不同的花种之间存在着不同的属性关系,其中setosa与versicolor和virginica之间的区别较为明显,可以通过花瓣长度和花瓣宽度来进行区分。 四、小结 本篇文章基于matplotlib和seaborn介绍了如何使用Python快速实现数据可视化,包括单变量数据可视化、双变量数据可视化和多变量数据可视化等方面。数据可视化是数据分析、商业智能、机器学习等领域中不可或缺的一个环节,可以帮助我们更好地认识数据、发现信息和规律,并通过图形化的方式进行展示、交流和决策。在实践中,我们还需要结合具体的问题和场景来选择合适的可视化工具和技术,并进行针对性的优化和改进。