机器学习数据可视化简介
本文是您可以用于机器学习和数据科学的不同图表的高级概述,以及如何使用Matplotlib,Pandas Visualization和Seaborn实现它们。
通过这三个库中的每一个,我将创建一个Scatter,Line-,Bar Chart和Histogram。然后,我将介绍更多高级图表,这些图表在机器学习项目中非常有价值。
导入数据集
在这篇文章中,我们将使用三个不同的数据集。该 Iris(https://archive.ics.uci.edu/ml/datasets/iris), Breast Cancer Winsconsin(https://archive.ics.uci.edu/ml/datasets/Breast+Cancer+Wisconsin+%28Diagnostic%29)和 Wine Reviews(https://www.kaggle.com/zynicide/wine-reviews)集。
iris 数据集
Breast Cancer dataset
Wine Review dataset
Matplotlib
Matplotlib是一个Python绘图库。这是一个低级别的图书馆,所以我们需要自己写更多,但我们也有更多自由的风格。
导入
import matplotlib.pyplot as plt
散点图
fig, ax = plt.subplots() ax.scatter(iris['sepal_length'], iris['sepal_width']) ax.set_title('Iris Dataset') ax.set_xlabel('sepal_length') ax.set_ylabel('sepal_width')
iris 萼片长度和宽度散点图
我们可以通过在每个数据点中按类着色来赋予图更多意义。要做到这一点,我们需要创建一个从类到颜色映射的字典,我们需要使用for循环自己分散每个点。
colors = {'Iris-setosa':'r', 'Iris-versicolor':'g', 'Iris-virginica':'b'} fig, ax = plt.subplots() for i in range(len(iris['sepal_length'])): ax.scatter(iris['sepal_length'][i], iris['sepal_width'][i],color=colors[iris['class'][i]]) ax.set_title('Iris Dataset') ax.set_xlabel('sepal_length') ax.set_ylabel('sepal_width')
按类别划分的散点图
折线图
在Matplotlib中,我们可以通过调用.plot函数来创建折线图 。我们可以通过遍历所有列并在同一轴上绘制每列来绘制一个图中的多个列。
columns = iris.columns.drop(['class']) x_data = range(0, iris.shape[0]) fig, ax = plt.subplots() for column in columns: ax.plot(x_data, iris[column]) ax.set_title('Iris Dataset') ax.legend()
直方图
在Matplotlib中,我们可以使用.hist函数创建直方图。如果我们传递分类数据(如Wine Review数据集的点),它将自动计算每个类发生的频率。
fig, ax = plt.subplots() ax.hist(wine_reviews['points']) ax.set_title('Wine Review Scores') ax.set_xlabel('Points') ax.set_ylabel('Frequency')
条形图
在Matplotlib中,我们可以使用.bar函数创建条形图。条形图不会自动计算频率,因此我们将使用Pandas value_counts函数。条形图对于分类数据很有用,因为没有很多x值,但如果你有很多x值,条形图会变得非常混乱。
fig, ax = plt.subplots() data = wine_reviews['points'].value_counts() points = data.index frequency = data.values ax.bar(points, frequency)
Pandas可视化
Pandas是一个数据分析库,但也有一个基于Matplotlib构建的可视化部分。您可以使用它轻松地从Pandas Dataframes创建绘图。
散点图
在Matplotlib中我们需要定义一个图形和轴,这样我们就可以在Pandas中设置标题和标签,我们不需要自己做。
要在Pandas中创建散点图,我们可以调用.plot.scatter。我们需要传递两个参数。我们要使用的x和y数据的名称。
iris.plot.scatter(x='sepal_length', y='sepal_width', title='Iris Dataset')
正如您在图像中看到的那样,它会自动将x和y标签设置为数据的列名。
折线图
要在Pandas中创建折线图,我们可以调用.plot.line。在Matplotlib中,我们需要创建一个for循环来绘制多个特征。在熊猫,我们不需要这样做。
iris.drop(['class'], axis=1).plot.line(title='Iris Dataset')
如上图所示,如果我们有多个特征,Pandas会自动为我们创建一个图例。
直方图
在Pandas中,我们可以使用plot.hist函数创建直方图。我们还可以传递一个名为bins的参数,默认设置为10。
wine_reviews['points'].plot.hist()
条形图
要绘制条形图,我们可以使用plot.bar函数,但在我们需要获取数据之前。为此,我们将在Wine Reviews数据集的point列上调用value_counts。然后我们需要对索引进行排序,以便我们的图形从最小x值到最大x值。我在一行中完成了这一切,但如果你愿意,你也可以将它分成多行。
wine_reviews['points'].value_counts().sort_index().plot.bar()
Seaborn
Seaborn是一个基于Matplotlib的Python数据可视化库。它提供了一个高级界面,用于绘制有吸引力且信息丰富的统计图形。
Seaborn有很多东西可供选择。您可以在一行中创建图形,在Matplotlib中可以使用数十行。在我覆盖基本的四个图形之后,您将看到一些示例,就像我对其他两个库所做的那样。
导入Seaborn
import seaborn as sns
散点图
我们可以使用.scatterplot函数,就像在Pandas中我们的x和y值一样,我们只需要传递数据的列名,但现在我们还需要将数据作为额外的参数传递,因为我们没有调用函数我们在Pandas中直接对数据进行了研究。.
sns.scatterplot(x='sepal_length', y='sepal_width', data=iris)
我们还可以比使用Matplotlib更容易地突出显示点。我们只需要传递另一个名为hue的参数。
sns.scatterplot(x='sepal_length', y='sepal_width', hue='class', data=iris)
折线图
我们也可以很容易地创建折线图。我们将使用sns.lineplot函数并将数据传递给它。如果你的数据集中有很多异常值,我们也可以使用sns.kdeplot,这些边缘是圆的,所以更干净。
sns.lineplot(data=iris.drop(['class'], axis=1))
直方图
要在Seaborn中创建直方图,我们使用distplot函数。
sns.distplot(wine_reviews['points'], bins=10, kde=False)
kde参数指定我们是否要在直方图内绘制高斯核密度估计。
条形图
在Seaborn中,条形图称为countplot。
sns.countplot(wine_reviews['points'])
更多高级图表
现在您已经对Matplotlib,Pandas Visualization和Seaborn的语法有了基本的了解,我想向您展示一些对数据科学和机器学习有用的图。
箱形图
Box Plots对于显示分布非常有用。
df = wine_reviews[(wine_reviews['points']>=95) & (wine_reviews['price']<1000)] sns.boxplot('points', 'price', data=df)
箱形图非常适合只有少数几个类的数据,因为如果你有超过10-20个类,它们会变得非常混乱。
热图
热图非常适合探索机器学习数据集中特征的相关性。它们可以帮助您确定机器学习数据集中哪些特征很重要,因为如果特征与标签强正相关或负相关,则可能有助于估算标签。
在我们绘制热图之前,我们需要创建一个相关矩阵。我们可以通过调用dataset.corr()来实现。
sns.heatmap(breast_cancer.corr(), annot=True)
annot参数指定我们希望在单元格内写入每个值
我们可以使用matplotlib中的figsize参数来绘制更大的图。要在seaborn中使用它,我们需要传递seaborn函数,我们使用matplotlib轴作为参数。
fig, ax = plt.subplots(figsize=(10,10)) sns.heatmap(breast_cancer.corr(), annot=True, ax=ax)
Faceting
Faceting是跨多个子图破坏数据变量的行为,并将这些子图组合成一个图。
如果您想快速浏览数据集,Faceting非常有用。
要在Seaborn中使用一种Faceting,我们可以使用FacetGrid。首先,我们需要定义FacetGrid并将其传递给我们的数据以及用于分割数据的行或列。然后我们需要在FacetGrid对象上调用map函数,并定义我们想要使用的绘图类型以及我们想要绘制的y值。
g = sns.FacetGrid(breast_cancer, col='class') g = g.map(sns.kdeplot, 'clump_thickness')
我们将使用Iris数据集的另一个例子:
g = sns.FacetGrid(iris, col='class') g = g.map(sns.kdeplot, 'sepal_length')
Pairplot
最后,我将向您展示另一个Seaborn函数,它对于探索称为pairplot的数据非常有用。
sns.pairplot(iris)
正如您在图像中看到的那样,它总是相互绘制两个特征。对角线用直方图填充,其他图用散点图。
结论
我希望您能使用Matplotlib,Pandas Visualization和Seaborn获得有关数据可视化的高级概述。