📜  什么是探索性数据分析?

📅  最后修改于: 2022-05-13 01:54:44.691000             🧑  作者: Mango

什么是探索性数据分析?

探索性数据分析 (EDA)是一种使用可视化技术分析数据的方法。它用于在统计摘要和图形表示的帮助下发现趋势、模式或 ti 检查假设。

使用的数据集

为了文章的简单性,我们将使用单个数据集。为此,我们将使用员工数据。它包含 8 列,即 - 名字、性别、开始日期、上次登录、薪水、奖金百分比、高级管理人员和团队。

使用的数据集: Employees.csv

让我们使用 Pandas 模块读取数据集并打印前五行。要打印前五行,我们将使用head()函数。

例子:



Python3
import pandas as pd
import numpy as np
  
df = pd.read_csv('employees.csv')
df.head()


Python3
df.shape


Python3
df.describe()


Python3
df.info()


Python3
df.isnull().sum()


Python3
df["Gender"].fillna("No Gender", inplace = True) 
    
df.isnull().sum()


Python3
mode = df['Senior Management'].mode().values[0]
df['Senior Management']= df['Senior Management'].replace(np.nan, mode)
  
df.isnull().sum()


Python3
df = df.dropna(axis = 0, how ='any')
  
print(df.isnull().sum())
df.shape


Python3
# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.histplot(x='Salary', data=df, )
plt.show()


Python3
# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.boxplot( x="Salary", y='Team', data=df, )
plt.show()


Python3
# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.scatterplot( x="Salary", y='Team', data=df,
                hue='Gender', size='Bonus %')
  
# Placing Legend outside the Figure
plt.legend(bbox_to_anchor=(1, 1), loc=2)
  
plt.show()


Python3
# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.pairplot(df, hue='Gender', height=2)


Python3
# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
sns.boxplot(x='SepalWidthCm', data=df)


Python3
# Importing
import sklearn
from sklearn.datasets import load_boston
import pandas as pd
import seaborn as sns
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
# IQR
Q1 = np.percentile(df['SepalWidthCm'], 25,
                interpolation = 'midpoint')
  
Q3 = np.percentile(df['SepalWidthCm'], 75,
                interpolation = 'midpoint')
IQR = Q3 - Q1
  
print("Old Shape: ", df.shape)
  
# Upper bound
upper = np.where(df['SepalWidthCm'] >= (Q3+1.5*IQR))
  
# Lower bound
lower = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR))
  
# Removing the Outliers
df.drop(upper[0], inplace = True)
df.drop(lower[0], inplace = True)
  
print("New Shape: ", df.shape)
  
sns.boxplot(x='SepalWidthCm', data=df)


输出:

EDA读取csv

获取有关数据集的见解

让我们使用形状来查看数据的形状。

例子:

蟒蛇3

df.shape

输出:

(1000, 8)

这意味着该数据集有 1000 行和 8 列。



让我们使用describe()方法快速总结数据集。 describe()函数对数据集应用基本的统计计算,如极值、数据点标准偏差计数等。任何缺失值或 NaN 值都会自动跳过。 describe()函数可以很好地描述数据的分布。

例子:

蟒蛇3

df.describe()

输出:

EDA描述

现在,让我们也了解列及其数据类型。为此,我们将使用 info() 方法。

蟒蛇3

df.info()

输出:

数据框信息 EDA

到目前为止,我们已经了解了所使用的数据集。现在让我们看看我们的数据集是否包含任何缺失值。



处理缺失值

大家一定想知道为什么数据集会包含任何缺失值。当没有为一个或多个项目或整个单元提供信息时,就会发生这种情况。例如,假设被调查的不同用户可能选择不分享他们的收入,一些用户可能会选择不分享地址,这样许多数据集丢失了。在现实生活场景中,缺失数据是一个非常大的问题。缺失数据也可以指熊猫中的 NA(不可用)值。有几个有用的函数可用于检测、删除和替换 Pandas DataFrame 中的空值:

  • 一片空白()
  • 非空()
  • 滴滴()
  • 填充()
  • 代替()
  • 插()

现在让我们检查我们的数据集中是否有任何缺失值。

例子:

蟒蛇3

df.isnull().sum()

输出:

缺失值 EDA

我们可以看到每一列都有不同数量的缺失值。就像性别有 145 个缺失值,薪水为 0。现在为了处理这些缺失值,可以有几种情况,例如删除包含 NaN 的行或用均值、中位数、众数或其他值替换 NaN。

现在,让我们尝试用字符串“No Gender”填充性别的缺失值。

例子:

蟒蛇3



df["Gender"].fillna("No Gender", inplace = True) 
    
df.isnull().sum()

输出:

填充EDA

我们可以看到,现在性别列没有空值。现在,让我们用模式值填充高级管理人员。

例子:

蟒蛇3

mode = df['Senior Management'].mode().values[0]
df['Senior Management']= df['Senior Management'].replace(np.nan, mode)
  
df.isnull().sum()

输出:

替换缺失值 EDA

现在对于名字和团队,我们无法用任意数据填充缺失值,因此,让我们删除包含这些缺失值的所有行。

例子:

蟒蛇3



df = df.dropna(axis = 0, how ='any')
  
print(df.isnull().sum())
df.shape

输出:

删除空值 EDA

我们可以看到我们的数据集现在没有所有缺失值,并且在删除数据后,数量也从 1000 减少到 899。

注意:有关更多信息,请参阅在 Pandas 中处理缺失数据。

删除丢失的数据后,让我们可视化我们的数据。

数据可视化

数据可视化是以图形或地图的形式分析数据的过程,可以更容易地理解数据中的趋势或模式。有多种类型的可视化——

  • 单变量分析:这种类型的数据只包含一个变量。因此,单变量数据的分析是最简单的分析形式,因为信息只处理一个变化的数量。它不处理原因或关系,分析的主要目的是描述数据并找到其中存在的模式。
  • 双变量分析:这种类型的数据涉及两个不同的变量。此类数据的分析处理原因和关系,并进行分析以找出两个变量之间的关系。
  • 多变量分析:当数据涉及三个或更多变量时,将其归类为多变量。

让我们看看一些常用的图表——

直方图

它可用于单变量和双变量分析。

例子:



蟒蛇3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.histplot(x='Salary', data=df, )
plt.show()

输出:

直方图 EDA

箱形图

它还可以用于单变量和双变量分析。

例子:

蟒蛇3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.boxplot( x="Salary", y='Team', data=df, )
plt.show()

输出:

箱线图 EDA

散点图

它可用于双变量分析。

例子:



蟒蛇3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.scatterplot( x="Salary", y='Team', data=df,
                hue='Gender', size='Bonus %')
  
# Placing Legend outside the Figure
plt.legend(bbox_to_anchor=(1, 1), loc=2)
  
plt.show()

输出:

散射EDA

对于多元分析,我们可以使用 seaborn 模块的 pairplot() 方法。我们还可以将它用于数据集中的多个成对双变量分布。

例子:

蟒蛇3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
  
sns.pairplot(df, hue='Gender', height=2)

输出:

配对图 eda

处理异常值

异常值是与其余(所谓的正常)对象显着不同的数据项/对象。它们可能是由测量或执行错误引起的。异常值检测的分析称为异常值挖掘。检测异常值的方法有很多种,去除过程是数据帧,与从熊猫的数据帧中去除数据项相同。

让我们考虑 iris 数据集,并绘制 SepalWidthCm 列的箱线图。



例子:

蟒蛇3

# importing packages
import seaborn as sns
import matplotlib.pyplot as plt
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
sns.boxplot(x='SepalWidthCm', data=df)

输出:

在上图中,大于 4 和小于 2 的值充当异常值。

去除异常值

为了去除异常值,必须遵循使用其在数据集中的确切位置从数据集中删除条目的相同过程,因为在上述所有检测异常值的方法中,最终结果是满足异常值定义的所有数据项的列表根据使用的方法。

示例:我们将使用 IQR 检测异常值,然后将其删除。我们还将绘制箱线图以查看是否删除了异常值。

蟒蛇3

# Importing
import sklearn
from sklearn.datasets import load_boston
import pandas as pd
import seaborn as sns
  
# Load the dataset
df = pd.read_csv('Iris.csv')
  
# IQR
Q1 = np.percentile(df['SepalWidthCm'], 25,
                interpolation = 'midpoint')
  
Q3 = np.percentile(df['SepalWidthCm'], 75,
                interpolation = 'midpoint')
IQR = Q3 - Q1
  
print("Old Shape: ", df.shape)
  
# Upper bound
upper = np.where(df['SepalWidthCm'] >= (Q3+1.5*IQR))
  
# Lower bound
lower = np.where(df['SepalWidthCm'] <= (Q1-1.5*IQR))
  
# Removing the Outliers
df.drop(upper[0], inplace = True)
df.drop(lower[0], inplace = True)
  
print("New Shape: ", df.shape)
  
sns.boxplot(x='SepalWidthCm', data=df)

输出:

去除异常值 EDA

注意:有关更多信息,请参阅使用Python检测和删除异常值