数据探索分析与数据可视化

数据探索分析(EDA)是一种帮助更深入理解数据的方法,它对于后续的数据预处理至关重要。而数据可视化则是EDA过程中的关键,它通过图表和图形简化了数据分析的过程,使得数据信息一目了然。本文将介绍如何使用Python中的matplotlib和seaborn库来进行数据可视化,以及如何通过不同的图表类型来探索不同类型的数据。

目录

  • 数据可视化
  • 数据探索分析
  • 单变量分析
  • 双变量/多变量分析
  • 结束语

数据可视化

数据可视化将文本或数值数据以视觉格式呈现,使得信息更易于理解。人类对图像的记忆比文本更为深刻,因此Python提供了多种数据可视化库,如matplotlib、seaborn和plotly等。本文将使用Matplotlib和seaborn来展示如何利用不同的图表探索数据。

数据探索分析

在处理机器学习问题时,创建假设和测试业务假设是非常重要的,而EDA正是帮助完成这一任务的工具。理解数据需要掌握Numpy进行数学运算和Pandas进行数据操作的知识。将使用大家熟悉的泰坦尼克号数据集来进行演示,可以从这里下载数据集。

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from seaborn import load_dataset # 加载泰坦尼克号数据集 data = pd.read_csv("titanic_train.csv") # 加载内置的tips数据集 tips = load_dataset("tips")

单变量分析

单变量分析是最简单的分析形式,只探索一个变量。单变量分析有助于更好地描述数据。由于绘图使用不同的图表,因此对数值型和分类型变量进行单变量分析的方式也不同。

分类型数据是指包含基于文本的信息的变量。以下是可以用来可视化分类型数据的各种图表。

计数图本质上是一个条形图形式的频率计数图。它为每个类别绘制一个单独的条形。当使用pandas的value_counts函数对任何列进行操作时,它与value_counts函数的可视化形式相同。在数据中,目标变量是“Survived”,它是分类型的,因此让绘制这个变量的计数图。

sns.countplot(data['Survived']) plt.show()

饼图与计数图类似,只是提供了每个类别在数据中所占百分比的额外信息,即每个类别在数据中的权重。让检查“Sex”列,看看男性和女性成员的百分比是多少。

data['Sex'].value_counts().plot(kind="pie", autopct="%.2f") plt.show()

分析数值型数据很重要,因为理解变量的分布有助于进一步处理数据。大多数时候,会发现数值型数据存在很多不一致性,因此需要探索数值型变量。

直方图是数值列的值分布图。它基本上在不同的值范围内创建箱子,并绘制它们,可以可视化值的分布情况。让看看“Age”列。

plt.hist(data['Age'], bins=5) plt.show()

分布图也被称为第二个直方图,因为它是直方图的改进版本。分布图为提供了KDE(核密度估计),它解释了PDF(概率密度函数),即每个值在该列中出现的概率是多少。如果之前学过统计学,那么一定知道PDF函数。

sns.distplot(data['Age']) plt.show()

箱线图是一个非常有趣的图表,它基本上绘制了一个五数概括。为了得到五数概括,需要描述一些术语。

中位数 - 排序后的系列中的中间值

百分位数 - 给出在该百分位数之前存在的值的数量,例如,在25百分位数下有50个值,这意味着有50个值低于25百分位数

最小值和最大值 - 这些不是最小值和最大值,而是描述使用四分位距(IQR)计算的标准差的下界和上界。

IQR = Q3 - Q1

下界 = Q1 - 1.5 * IQR

上界 = Q3 + 1.5 * IQR

这里Q1和Q3分别是第一四分位数(25百分位数)和第三四分位数(75百分位数)

sns.boxplot(data['Sex'], data["Age"]) plt.show()

双变量/多变量分析

已经学习了探索单个分类型和数值型数据的各种图表。双变量分析用于探索两个不同变量之间的关系,因为主要任务是探索变量之间的关系以构建一个强大的模型。当一起分析超过两个变量时,它被称为多变量分析。将为双变量和多变量分析使用不同的图表。

首先,让探索两个变量都是数值型时的图表。

要绘制两个数值型变量之间的关系,散点图是一个简单的图表。让看看总账单和提供的小费之间的关系。

sns.scatterplot(tips["total_bill"], tips["tip"]) plt.show()

还可以在散点图中绘制三个或四个变量之间的关系。假设想要找到男性和女性与总账单和小费提供的比例。

sns.scatterplot(tips["total_bill"], tips["tip"], hue=tips["sex"]) plt.show()

还可以使用样式参数在散点图中进行四个变量的多变量分析。假设现在除了性别之外,还想要知道顾客是否是吸烟者,那么可以这样做。

sns.scatterplot(tips["total_bill"], tips["tip"], hue=tips["sex"], style=tips['smoker']) plt.show()

如果一个变量是数值型,另一个是分类型,那么有各种图表可以用于双变量和多变量分析。

条形图是一个简单的图表,可以使用它来绘制x轴上的分类型变量和y轴上的数值型变量,并探索两个变量之间的关系。每个条形图顶部的黑色提示显示了置信区间。让探索P-Class与年龄的关系。

sns.barplot(data['Pclass'], data['Age']) plt.show()

Hue参数非常有用,它帮助分析超过两个变量。现在,除了上述关系之外,还想看看性别。

sns.barplot(data['Pclass'], data['Fare'], hue = data["Sex"]) plt.show()

已经在单变量分析中学习了箱线图。可以为两个变量绘制单独的箱线图。让使用箱线图探索性别与年龄的关系。

sns.boxplot(data['Sex'], data["Age"]) plt.show()

除了年龄和性别之外,让看看谁生存了下来,谁没有。

sns.boxplot(data['Sex'], data["Age"], data["Survived"]) plt.show()

分布图使用核密度估计解释PDF函数。分布图没有hue参数,但可以使用它。假设想要看看年龄范围的生存概率,并找出哪个年龄范围的生存概率高于死亡比例。

sns.distplot(data[data['Survived'] == 0]['Age'], hist=False, color="blue") sns.distplot(data[data['Survived'] == 1]['Age'], hist=False, color="orange") plt.show()

正如所看到的,图表非常有趣。蓝色显示了死亡的概率,橙色图表显示了生存的概率。如果观察它,可以看到儿童的生存概率高于死亡,而在老年人的情况下则相反。这个小分析有时可以告诉一些关于数据的重要信息,它有助于准备数据故事。

现在将处理分类型和分类型列。

如果曾经使用过pandas的交叉表函数,那么热图是类似的视觉表示,它显示了一个类别相对于另一个类别在数据集中的存在程度。让首先用交叉表,然后用热图来展示。

pd.crosstab(data['Pclass'], data['Survived']) sns.heatmap(pd.crosstab(data['Pclass'], data['Survived'])) sns.clustermap(pd.crosstab(data['Parch'], data['Survived'])) plt.show()
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485