"一目了然胜过千言万语。"分析数据点的探索性数据分析(EDA)是在算法的数据建模之前制定假设的正确步骤。
数据科学行业中一个最常见的陷阱是花费数小时为他们的项目寻找最佳算法,而没有花足够的时间首先理解数据。
数据科学和机器学习项目的结构化方法从项目目标开始。同一组数据点可以推断出一些有意义的信息。基于我们所寻找的,我们需要关注数据的另一个方面。一旦我们明确了目标,我们就应该开始考虑我们需要的数据点。这将使我们能够专注于最相关的信息集,而忽略可能不重要的数据集。
在现实生活中,从多个来源收集到的大多数时间数据都有空白值、打字错误和其他异常。在进行任何数据分析之前,清除数据是至关重要的。
在本文中,我将讨论五个强大的数据可视化选项,它们可以立即提供数据特征的感觉。即使在正式建模或假设测试任务之前,执行EDA就可以传达大量关于数据和特征之间关系的信息。
第1步-我们将导入pandas、matplotlib、seaborn和NumPy包,我们将使用这些包进行分析。我们需要散点图、自相关图、滞后图和平行图。
- import pandas as pd
- import numpy as np
- import matplotlib.pyplot as plt
- from pandas.plotting import autocorrelation_plot
- import seaborn as sns
- from pandas.plotting import scatter_matrix
- from pandas.plotting import autocorrelation_plot
- from pandas.plotting import parallel_coordinates
- from pandas.plotting import lag_plot
第2步-在Seaborn包中,有一个内置的小数据集。我们将使用"mpg"、"tips"和"attention"数据进行可视化。数据集是在seaborn中使用load_dataset方法加载的。
- """Download the datasets used in the program """
- CarDatabase= sns.load_dataset("mpg")
- MealDatabase= sns.load_dataset("tips")
- AttentionDatabase= sns.load_dataset("attention")
六边形分箱图(hexpin)
我们经常使用散点图来快速掌握变量之间的关系。只要图中没有人口稠密的数据点,获得一个洞察力是非常有帮助的。在下面的代码中,我们绘制了"mpg"数据集中"Horsepower" 和"Acceleration"数据点之间的散点图。
- plt.scatter(CarDatabase.acceleration ,CarDatabase.horsepower,marker="^")
- plt.show()
散点图中的点密集分布,从中获取有意义的信息有点困难。
hexpins是解决重叠点散点图的一个很好的替代方案。每个点不是在hexbin图中单独绘制的。在下面的代码中,我们用相同的数据集在"Horsepower" 和"Acceleration"之间绘制一个hexbin。
- CarDatabase.plot.hexbin(x='acceleration', y='horsepower', gridsize=10,cmap="YlGnBu")
- plt.show()
在hexpin图中可以清楚地推断"Horsepower" 和"Acceleration"范围集中值,变量之间呈负线性关系。六边形的大小取决于"网格大小"参数。
热力图(Heatmaps)
热力是我个人最喜欢查看不同变量之间的相关性。那些在媒体上跟踪我的人可能已经注意到我经常使用它。在下面的代码中,我们将计算seaborn"mpg"数据集中所有变量之间的成对相关性,并将其绘制为热力图。
热力图是我个人最喜欢查看不同变量之间的相关性。那些在媒体上跟踪我的人可能已经注意到我经常使用它。在下面的代码中,我们将计算seaborn"mpg"数据集中所有变量之间的成对相关性,并将其绘制为热力图。
- sns.heatmap(CarDatabase.corr(), annot=True, cmap="YlGnBu")
- plt.show()
我们可以看到"cylinders" 和 "horsepower" 是密切正相关的(正如在汽车中所预期的),而重量与加速度成反比。我们只需几行代码就可以快速理解所有不同变量之间的指示性关系。
自相关图(Autocorrelation)
自相关图是一个快速的试金石测试,以确定数据点是否随机。如果数据点遵循某种趋势,那么一个或多个自相关将显著非零。图中的虚线显示99%的置信区间。在下面的代码中,我们正在检查"tips"数据库中的总帐单金额是否是随机的。
- autocorrelation_plot(MealDatabase.total_bill)
- plt.show()
我们可以看到,自相关图在所有时间滞后中都非常接近于零,这表明总的_bill数据点是随机的。
当我们按照特定顺序绘制数据点的自相关图时,我们可以看到该图显著地非零。
- data = pd.Series(np.arange(12,7000,16.3)) autocorrelation_plot(data)
- plt.show()
滞后图(Lag)
滞后图也有助于验证数据集是随机值集还是遵循某种趋势。当绘制"tips"数据集的"total_bills"值的滞后图时,就像在自相关图中一样,滞后图表明它是随机数据,到处都有值。
- lag_plot(MealDatabase.total_bill)
- plt.show()
当我们延迟绘制一个非随机数据序列时,如下面的代码所示,我们得到了一条平滑的线条。
- data = pd.Series(np.arange(-12*np.pi,300*np.pi,10))
- lag_plot(data)
- plt.show()
平行坐标图(Parallel coordinates)
把我们的大脑包围起来并将其可视化不仅仅是三维数据,这一直是一个挑战。绘制高维数据集的平行坐标非常有用。每个尺寸用一条垂直线表示。
在平行坐标系中,"N"等距垂直线表示数据集的"N"维度。顶点在第n个轴上的位置对应于该点的第n个坐标。
让我们考虑一个小样本数据,它有五个小部件和大尺寸小部件的五个特性。
垂直线表示小部件的每个功能。一系列连续的线段代表"小"和"大"小部件的特征值。
下面的代码绘制了seaborn中"attention"数据集的平行坐标。请注意,群集的点看起来更靠近。
- parallel_coordinates(AttentionDatabase,"attention",color=('#556270', '#C7F464'))
- plt.show()
我希望你能开始使用这些现成的绘图来执行探索性的数据分析