Python探索性数据分析
对于数据分析,探索性数据分析 (EDA) 必须是你的第一步。探索性数据分析帮助我们:
深入了解数据集。
理解底层结构。
提取重要的参数及其之间的关系。
检验底层假设。
使用示例数据集理解EDA
为了使用Python理解EDA,我们可以直接从任何网站或本地磁盘获取示例数据。我从公开可用的UCI机器学习资源库中获取了红葡萄酒质量数据集的样本数据,并尝试使用EDA深入了解该数据集。
import pandas as pd df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv") df.head()
在Jupyter Notebook中运行上述脚本,将得到如下输出:
首先:
首先,导入必要的库,在本例中是pandas。
使用pandas库的read_csv()函数读取csv文件,给定数据集中每个数据用分号“;”分隔。
使用pandas库提供的“.head”函数返回数据集的前五个观测值。我们可以通过使用pandas库的“.tail()”函数类似地获取最后五个观测值。
我们可以使用“.shape”获取数据集的行数和列数,如下所示:
df.shape
借助info()函数,我们可以找到它包含的所有列、列的类型以及它们是否包含任何值。
df.info()
通过观察上述数据,我们可以得出结论:
数据只包含浮点型和整型值。
所有列变量均非空(无空值或缺失值)。
pandas提供的另一个有用的函数是describe(),它提供了数据的计数、均值、标准差、最小值和最大值以及数量。
df.describe()
从上述数据中,我们可以得出结论,每列的均值都小于索引列中的中位数(50%)。
预测变量“残糖”、“游离二氧化硫”和“总二氧化硫”的75%值和最大值之间存在巨大差异。
上述两个观察结果表明,我们的数据集中存在极值偏差。
我们可以从因变量中获得一些关键见解,如下所示:
df.quality.unique()
在“质量”评分量表中,1位于底部,即差;10位于顶部,即好。
从上面我们可以得出结论,没有观测值得分1(差)、2和9、10(好)。所有分数都在3到8之间。
df.quality.value_counts()
上述处理后的数据提供了每个质量得分按降序排列的投票数信息。
大部分质量都在5-7的范围内。
在3和6类别中观察到的观测值最少。
数据可视化
检查缺失值:
我们可以借助seaborn库检查我们的白威士忌csv数据集中的缺失值。以下是实现此目的的代码:
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline sns.set() df = pd.read_csv("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-white.csv", sep=";") sns.heatmap(df.isnull(), cbar=False, yticklabels=False, cmap='viridis')
输出
从上面我们可以看到,数据集中没有缺失值。如果有任何缺失值,我们将在紫色背景上看到用不同颜色阴影表示的图形。
对于存在缺失值的不同数据集,你会注意到差异。
检查相关性
要检查数据集不同值之间的相关性,请在现有数据集中插入以下代码:
plt.figure(figsize=(8,4)) sns.heatmap(df.corr(),cmap='Greens',annot=False)
输出
上面,正相关用深色阴影表示,负相关用浅色阴影表示。
将annot=True的值更改,输出将显示特征在网格单元中相互关联的值。
我们可以使用annot=True生成另一个相关矩阵。通过在现有代码中添加以下代码行来修改你的代码:
k = 12 cols = df.corr().nlargest(k, 'quality')['quality'].index cm = df[cols].corr() plt.figure(figsize=(8,6)) sns.heatmap(cm, annot=True, cmap = 'viridis')
输出
从上面我们可以看到,密度与残糖之间存在很强的正相关性。然而,密度与酒精之间存在很强的负相关性。
此外,游离二氧化硫与质量之间没有相关性。