文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

对于非结构化数据,EDA探索性数据分析该怎么做?

2024-11-30 14:33

关注
  1. 涉及更好地分析和总结数据集,以了解其潜在的模式、关系和趋势。
  2. 识别基本的数据特征,检测异常或异常值,并确定最合适的建模技术来预测未来的结果。

让我们通过一个故事来理解EDA在数据分析中的意义。

从一个故事理解EDA的重要性

一家小公司刚刚在市场上开展业务。这家公司有一群对自己的角色充满热情的专业人士,他们以一种方式工作使整个公司都能获利。随着公司开始在员工或用户方面增加对其推广产品的了解,管理团队意识到,他们需要帮助了解用户或客户对公司提供的产品或服务的需求和行为。

为了克服这个问题,他们开始聘请一些技术专业人员。最终,他们在数据分析师的职位下找到了一个技术人员,以便他们能够更好地了解客户数据。该分析师将能够从中找到重要的信息或见解。他们聘请的分析师在他们主要从事探索性数据分析的同一类型技术或项目中具有良好的实践经验。

因此,对于这个问题,他们开始通过网络抓取从多个API收集数据,其中包括公司网站、社交媒体、论坛等。收集完数据后,他们开始清理和处理数据,以便他们能够从这些数据中找到一些见解。他们使用统计技术如假设测试和商业智能工具来探索数据,并使用模式识别技术发现隐藏的模式。

在建立管道后,他们观察到公司的客户对购买环保和可持续的产品最感兴趣。公司管理层基于这些见解推出了环保和可持续的产品。于是,基于这些更新,新产品得到了客户的喜欢,最终,公司的收入开始成倍增长。管理层已经开始意识到探索性数据分析的重要性,并聘请了更多的数据分析师。

因此,在本文中,受上述故事的启发,我们将了解管道的探索性数据分析阶段里面的不同技术,并在这个过程中使用流行的工具。本文为初学者和有经验的数据分析师提供了EDA的全面概述及其在数据科学中的重要性。

实施的不同技术

为了理解EDA内部使用的每一种技术,本文将研究一个数据集,并使用用于数据科学的Python库(例如NumPy、Pandas、Matplotlib等)来实现分析。

本文将在分析中使用的数据集是Titanic数据集,它可以从这里(https://www.kaggle.com/c/titanic/data)下载。本文将使用train.csv进行模型训练。

1.导入必要的库和依赖项

在实施之前,首先导入必要的库,本文将利用这些库来实现不同的EDA技术,包括:

  1. 用于矩阵操作的NumPy
  2. 用于数据分析的Pandas
  3. 用于数据可视化的Matplotlib和Seaborn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

2.加载和分析数据集

在导入所有需要的库之后,我们将使用Pandas dataframe加载Titanic数据集。然后我们可以开始执行不同的数据预处理技术,为进一步建模和归纳准备数据。

passenger_data = pd.read_csv('titanic.csv')
passenger_data.head(5)

输出:

图 1

3.获取统计摘要

下面的分析为我们提供了数据中所有数值列的统计数据。我们可以从这个函数中得到的统计数据是:

  1. 计数
  2. 平均数和中位数
  3. 标准偏差
  4. 最小值和最大值
  5. 不同的四分位数值
passenger_data.describe()

输出:

图 2

通过解释上述输出,我们可以看到有891名乘客,平均存活率为38%。年龄栏的最小值和最大值在0.42至80之间,平均年龄约为30岁。另外,至少有50%的乘客没有兄弟姐妹/配偶,至少有75%的乘客没有父母/子女,票价一栏的数值也有很大变化。

让我们试着通过从头开始编写代码来计算生存率。

4.计算乘客的总体存活率

为了计算总体存活率,首先选择Survived列,检查数值为1的行,然后计算所有这些行。最后,为了找到百分比,我们将用它除以总行数并输出结果。

survived_data = passenger_data[passenger_data['Survived'] == 1]
survived = survived_data.count().values[1]
survival_percent = (survived/891) * 100
print('The percentage of survived people in training data are {}'.format(survival_percent))

输出:

The percentage of survived people in training data are 38.38383838383838

5.按gender和Pclass列计算存活率

现在,我们必须用聚合运算找到不同列的存活率,我们将使用gender和 Pclass列,然后应用均值函数来找到它,然后输出结果。

survival_rate = passenger_data[['Pclass', 'Sex','Survived']].groupby(['Pclass', 'Sex'], as_index = False).mean().sort_values('Survived', ascending = False)
print(survival_rate)

输出:

Pclass     Sex  Survived
0       1  female  0.968085
2       2  female  0.921053
4       3  female  0.500000
1       1    male  0.368852
3       2    male  0.157407
5       3    male  0.135447

6.将Passenger Id、Survived、Pclass的数据类型改为String。

由于某些列具有不同的数据类型,我们将所有这些列转换为一个固定数据类型。即String(字符串)。

Cols = [ 'PassengerId', 'Survived', 'Pclass' ]
for index in Cols:
     passenger_data[index] = passenger_data[index].astype(str)
passenger_data.dtypes

7.数据集中重复的行

在进行数据建模时,如果存在重复的行,我们的性能可能会下降。因此,始终建议删除重复的行。

passenger_data.loc[passenger_data.duplicated(), :]

8.创建直方图以检查数据分布情况

为了根据该列的可能值找到幸存列的分布,以便我们可以检查类偏差,如果有任何问题,我们可以应用诸如过量取样、欠量取样、SMOTE等技术来克服该问题。

sb.set_style("white")
g = sb.FacetGrid(data = train[train['Age'].notna()], col = 'Survived')
g.map(plt.hist, "Age");

输出:

图 3

现在,如果我们比较上述两个分布,那么建议使用相对频率,而不是使用累积密度函数等的绝对频率。由于我们以年龄一栏为例,具有绝对频率的直方图表明,在20-30岁的年龄组中受害者比幸存者多得多。

9.按生存值绘制年龄中缺失值百分比图

在这里,我们创建了饼状图来寻找按生存值计算的缺失值的百分比,然后查看分区。

dt0 = train['Age'][train['Survived']=='0']
dt1 = train['Age'][train['Survived']=='1']
plt.figure(figsize = [15, 5])

plt.subplot(1, 2, 1)
age_na_pie(dt0)
plt.title('Survived: No');

plt.subplot(1, 2, 2)
age_na_pie(dt1)
plt.title('Survived: Yes');

输出:

图 4

饼状图显示,年龄缺失的乘客更有可能成为受害者。

10.寻找每一列中的缺失值数量

passenger_data.isnull().sum()

从输出结果中,可以观察到Cabin列具有最大的缺失值,所以我们将从分析中删除该列。

11.每列空值的百分比

passenger_data.isna().sum()/passenger_data.shape[0]

在Age一栏中,大约有20%的数据缺失,Cabin一栏中大约有77%的数据缺失,Embarked一栏中有0.2%的数据缺失。我们的目的是在建模之前处理缺失的数据。

12.从数据集中删除Cabin一列

删除Cabin这一列,因为它有很多缺失的值。

drop_column = passenger_data.drop(labels = ['Cabin'], axis = 1)
print(drop_column)

为了处理Age列,首先,我们将检查Age列的数据类型并将其转换为整数数据类型,然后用Age列的中位数来填补Age列中所有的缺失值。

datatype = passenger_data.info('Age')
fill_values = passenger_data['Age'].fillna(int(passenger_data['Age'].median()),inplace=True)
print(fill_values)

在这之后,数据集在缺失值、离群值等方面看起来不错。现在,如果我们应用机器学习算法来查找数据集中的模式,然后在测试数据上进行测试,与没有预处理和探索性数据分析或数据处理的数据相比,模型的性能会更强。

来自EDA的收获

以下是幸存者与受害者相比的特征:

总结

本文的讨论到此结束。当然,在EDA中还有很多技术比本文在这里介绍的要多得多,这取决于用户在问题陈述中要使用的数据集。总而言之,EDA在使用数据来训练模型之前,了解数据是有益的。这种技术在任何数据科学项目中都起着至关重要的作用,使简单模型在项目中使用时能有更好的表现。因此,每个有抱负的数据科学家、数据分析师、机器学习工程师和分析经理都需要正确了解这些技术。

来源:Python学研大本营内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯