使用pandas分析库加速数据探索

首先,从新数据集入手,您需要了解它。 为此,例如,必须找出变量所接受的值的范围,其类型,并了解缺失值的数量。

熊猫库为我们提供了许多有用的工具,用于执行探索性数据分析(EDA)。 但是在使用它们之前,通常需要先从更通用的功能开始,例如df.describe()。 的确,应该指出的是,此类功能提供的可能性是有限的,并且在EDA期间使用任何数据集的初始阶段通常彼此非常相似。



我们今天出版的材料的作者说,他不喜欢重复动作。 结果,在寻找快速有效地进行探索性数据分析的工具时,他找到了熊猫分析库。 她的工作结果不是以某些单独的指标的形式表达的,而是以相当详细的HTML报告的形式表达的,其中包含您可能需要了解的有关正在分析的数据的大多数信息,然后才能开始与它们进行更紧密的合作。

在这里,我们将以Titanic数据集为例,考虑使用pandas分析库的功能。

熊猫勘探数据分析


我决定在Titanic数据集上进行熊猫分析,因为它具有不同类型的数据,并且数据中缺少值。 我认为,在尚未清除数据并需要根据其功能进行进一步处理的情况下,pandas配置文件库特别有趣。 为了成功执行此类处理,您需要知道从哪里开始以及寻找什么。 这是方便使用熊猫分析功能的地方。

首先,我们导入数据并使用熊猫获得描述性统计指标:

#    import pandas as pd import pandas_profiling import numpy as np #   df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv') #     df.describe() 

执行完这段代码后,您将获得下图所示的内容。


使用标准熊猫工具的描述性统计指标

尽管它包含许多有用的信息,但是对于所研究的数据而言,并不是所有使人感兴趣的内容。 例如,我们可以假设在数据帧中,在DataFrame结构中,有891 DataFrame 。 如果需要检查,则需要另一行代码来确定框架的大小。 尽管这些计算并不是特别耗费资源,但是它们的不断重复将必然导致时间的浪费,这可能会更好地花费在数据清理上。

使用熊猫分析进行探索性数据分析


现在使用pandas-profiling做同样的事情:

 pandas_profiling.ProfileReport(df) 

上述代码行的实现将使您能够生成带有探索性数据分析指标的报告。 上面显示的代码将得出找到的数据信息的结论,但是可以这样做,以使结果为HTML文件,例如可以将其显示给某人。

报告的第一部分将包含“概述”部分,该部分提供有关数据的基本信息(观察数,变量数等)。 此外,它将包含一系列警告,这些警告会通知分析人员您应特别注意的事项。 这些警告可以作为您在整理数据时可以集中精力的线索。


报告部分概述

探索性变量分析


在报告的“概述”部分的后面,您可以找到有关每个变量的有用信息。 除其他外,它们包括描述每个变量的分布的小图。


年龄数值变量信息

从上一个示例中可以看到,pandas概要分析为我们提供了一些有用的指标,例如缺失值的百分比和数量,以及我们已经看到的描述性统计指标。 由于Age是一个数值变量,因此以直方图的形式对其分布进行可视化可以使我们得出结论,认为我们具有直角分布。

当考虑分类变量时,显示的指示符与为数字变量找到的指示符略有不同。


性别分类变量信息

即,熊猫分析库没有找到平均值,最小值和最大值,而是找到了类数。 由于Sex是二进制变量,因此其值由两个类表示。

如果像我一样喜欢研究代码,那么您可能会对pandas分析库如何精确地计算这些指标感兴趣。 鉴于库代码是开放的并且可以在GitHub上获得,知道这一点并不难。 由于我不喜欢在项目中使用“黑匣子”,因此我查看了库的源代码。 例如,以下是处理由describe_numeric_1d函数表示的数字变量的机制:

 def describe_numeric_1d(series, **kwargs):   """Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).   Also create histograms (mini an full) of its distribution.   Parameters   ----------   series : Series       The variable to describe.   Returns   -------   Series       The description of the variable as a Series with index being stats keys.   """   # Format a number as a percentage. For example 0.25 will be turned to 25%.   _percentile_format = "{:.0%}"   stats = dict()   stats['type'] = base.TYPE_NUM   stats['mean'] = series.mean()   stats['std'] = series.std()   stats['variance'] = series.var()   stats['min'] = series.min()   stats['max'] = series.max()   stats['range'] = stats['max'] - stats['min']   # To avoid to compute it several times   _series_no_na = series.dropna()   for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):       # The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098       stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)   stats['iqr'] = stats['75%'] - stats['25%']   stats['kurtosis'] = series.kurt()   stats['skewness'] = series.skew()   stats['sum'] = series.sum()   stats['mad'] = series.mad()   stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaN   stats['n_zeros'] = (len(series) - np.count_nonzero(series))   stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)   # Histograms   stats['histogram'] = histogram(series, **kwargs)   stats['mini_histogram'] = mini_histogram(series, **kwargs)   return pd.Series(stats, name=series.name) 

尽管这段代码看起来可能相当庞大和复杂,但是实际上,理解它非常简单。 关键是在库的源代码中有一个确定变量类型的函数。 如果事实证明该库满足数字变量,则上述函数将找到我们考虑的指标。 此函数使用标准的pandas操作来处理Series类型的对象,例如series.mean() 。 计算结果存储在stats字典中。 直方图是使用matplotlib.pyplot.hist函数的改编版本生成的。 改编旨在使该功能能够与各种类型的数据集一起使用。

相关指标和研究数据样本


变量分析的结果之后,“关联”部分中的pandas分析显示了Pearson和Spearman相关矩阵。


皮尔逊相关矩阵

如有必要,可以在开始形成报告的代码行中设置用于计算相关性的阈值。 通过这样做,您可以指出对您的分析而言重要的相关强度。

最后,“样本”部分中的“熊猫分析”报告将显示从数据集开头获取的一条数据作为示例。 这种方法可能导致令人不快的意外,因为前几个观察结果可能是一个样本,无法反映整个数据集的特征。


包含样本数据的部分

因此,我不建议您注意最后一部分。 相反,最好使用df.sample(5)命令,该命令将从数据集中随机选择5个案例。

总结


综上所述,可以注意到,熊猫分析库为分析人员提供了一些有用的功能,这些功能在需要快速大致了解数据或向某人发送情报数据分析报告的情况下会派上用场。 同时,在不考虑使用pandas概要分析的情况下,手动执行考虑数据特征的实际工作。

如果要查看一本Jupyter笔记本中对数据的整体智能分析的外观,请看一下我使用nbviewer创建的项目。 在 GitHub存储库中,您可以找到适当的代码。

亲爱的读者们! 您如何开始分析新数据集?

Source: https://habr.com/ru/post/zh-CN451478/


All Articles