独家 | 一文读懂R中的探索性数据分析(附R代码)

简介:

探索性数据分析(EDA)是数据项目的第一步。我们将创建一个代码模板来实现这一功能。

简介

EDA由单变量(1个变量)和双变量(2个变量)分析组成。在这篇文章中,我们将回顾一些我们在案例分析中使用的功能:

 ●  第1步:取得并了解数据;
 ●  第2步:分析分类变量;
 ●  第3步:分析数值变量;
 ●  第4步:同时分析数值和分类变量。

基本EDA中的一些关键点:

 ●  数据类型
 ●  异常值
 ●  缺失值
 ●  数值和分类变量的分布(数字和图形的形式)

分析结果的类型

结果有两种类型:信息型操作型

 ●  信息型: 例如绘图或任何长变量概要,我们无法从中过滤数据,但它会立即为我们提供大量信息。大多数用于EDA阶段。
 ●  操作型: 这类结果可直接用于数据工作流(例如,选择缺失比例低于20%的变量)。最常用于数据准备阶段。

准备开始

如果您没有这些扩展包,请删除‘#’来导入:

# install.packages("tidyverse")

# install.packages("funModeling")

# install.packages("Hmisc")

funModeling已发布更新版本的Ago-1,请更新!

现在加载所需的程序包

library(funModeling)

library(tidyverse)

library(Hmisc)

tl; dr(代码)

使用以下函数一键运行本文中的所有函数:

basic_eda <- function(data)

{

glimpse(data)

df_status(data)

freq(data)

profiling_num(data)

plot_num(data)

describe(data)

}

替换data为您的数据,然后就可以啦!

basic_eda(my_amazing_data)

创建示例数据:

使用heart_disease数据(来自funModeling包)。为了使本文容易理解,我们只选取四个变量。

data=heart_disease %>% select(age, max_heart_rate, thal, has_heart_disease)

第一步:了解数据

统计第一个例子中观测(行)和变量的数量,并使用head显示数据的前几行。

glimpse(data)

## Observations: 303

## Variables: 4

## $ age <int> 63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, ...

## $ max_heart_rate <int> 150, 108, 129, 187, 172, 178, 160, 163, 147,...

## $ thal <fct> 6, 3, 7, 3, 3, 3, 3, 3, 7, 7, 6, 3, 6, 7, 7,...

## $ has_heart_disease <fct> no, yes, yes, no, no, no, yes, no, yes, yes,...

获取有关数据类型,零值,无穷数和缺失值的统计信息:

df_status(data)

## variable q_zeros p_zeros q_na p_na q_inf p_inf type unique

## 1 age 0 0 0 0.00 0 0 integer 41

## 2 max_heart_rate 0 0 0 0.00 0 0 integer 91

## 3 thal 0 0 2 0.66 0 0 factor 3

## 4 has_heart_disease 0 0 0 0.00 0 0 factor 2

df_status会返回一个表格,因此很容易筛选出符合某些条件的变量,例如:

 ●  有至少80%的非空值(p_na < 20)
 ●  有少于50个唯一值(unique <= 50)

建议:

 ●  所有变量都是正确的数据类型吗?
 ●  有含有很多零或空值的变量吗?
 ●  有高基数变量吗?

更多相关信息请浏览:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第二步:分析分类变量

freq 函数自动统计数据集中所有因子或字符变量:

freq(data)

e3b14c53f26ab638fbe00e50fc34b44bc7b1a7ca

## thal frequency percentage cumulative_perc

## 1 3 166 54.79 55

## 2 7 117 38.61 93

## 3 6 18 5.94 99

## 4 <NA> 2 0.66 100

1b766300e53df66051039213a2ace17432b73172

## has_heart_disease frequency percentage cumulative_perc

## 1 no 164 54 54

## 2 yes 139 46 100

## [1] "Variables processed: thal, has_heart_disease"

建议:

 ●  如果freq用于一个变量 -freq(data$variable),它会生成一个表格。这对于处理高基数变量(如邮政编码)非常有用。

 ●  将图表以jpeg格式保存到当前目录中:

freq(data, path_out = ".")
 ●  分类变量的所有类别都有意义吗?
 ●  有很多缺失值吗?
 ●  经常检查绝对值和相对值。

更多相关信息请浏览:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第三步:分析数值变量

我们将看到:plot_num和profiling_num两个函数,它们都自动统计数据集中所有数值/整数变量:

1. 绘制图表

plot_num(data)

1dcd99f243b2be56f6be7f57aad2554ff03889f7

将图表导出为jpeg格式:

plot_num(data, path_out = ".")

建议:

 ●  试着找出极度偏态分布的变量。
 ●  作图检查任何有异常值的变量。

更多相关信息请浏览:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

2. 定量分析

profiling_num 自动统计所有数值型/整型变量:

data_prof = profiling_num(data)

## variable mean std_dev variation_coef p_01 p_05 p_25 p_50 p_75 p_95

## 1 age 54 9 0.17 35 40 48 56 61 68

## 2 max_heart_rate 150 23 0.15 95 108 134 153 166 182

## p_99 skewness kurtosis iqr range_98 range_80

## 1 71 -0.21 2.5 13 [35, 71] [42, 66]

## 2 192 -0.53 2.9 32 [95.02, 191.96] [116, 176.6]

建议:

 ●  尝试根据其分布描述每个变量(对报告分析结果也很有用)。
 ●  注意标准差很大的变量。
 ●  选择您最熟悉的统计指标:data_prof %>% select(variable, variation_coef, range_98):variation_coef得到较大值可能提示异常值。range_98显示绝大部分数值的范围。

更多相关信息请浏览:

https://livebook.datascienceheroes.com/exploratory-data-analysis.html

第四步:同时分析数值和分类变量

使用Hmisc包的describe。

library(Hmisc)

describe(data)

## data

##

## 4 Variables 303 Observations

## ---------------------------------------------------------------------------

## age

## n missing distinct Info Mean Gmd .05 .10

## 303 0 41 0.999 54.44 10.3 40 42

## .25 .50 .75 .90 .95

## 48 56 61 66 68

##

## lowest : 29 34 35 37 38, highest: 70 71 74 76 77

## ---------------------------------------------------------------------------

## max_heart_rate

## n missing distinct Info Mean Gmd .05 .10

## 303 0 91 1 149.6 25.73 108.1 116.0

## .25 .50 .75 .90 .95

## 133.5 153.0 166.0 176.6 181.9

##

## lowest : 71 88 90 95 96, highest: 190 192 194 195 202

## ---------------------------------------------------------------------------

## thal

## n missing distinct

## 301 2 3

##

## Value 3 6 7

## Frequency 166 18 117

## Proportion 0.55 0.06 0.39

## ---------------------------------------------------------------------------

## has_heart_disease

## n missing distinct

## 303 0 2

##

## Value no yes

## Frequency 164 139

## Proportion 0.54 0.46

## ---------------------------------------------------------------------------

这对于快速了解所有变量非常有用。但是当我们想要使用统计结果来改变我们的数据工作流时,这个函数不如freq和profiling_num好用。

建议:

 ●  检查最小值和最大值(异常值)。

 ●  检查分布(与之前相同)。


原文发布时间为:2018-11-20

本文作者:Pablo Casas

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”。

相关文章
|
3月前
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
125 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
6月前
|
数据可视化 前端开发 数据挖掘
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享(上)
R语言对综合社会调查GSS数据进行自举法bootstrap统计推断、假设检验、探索性数据分析可视化|数据分享
|
3月前
|
机器学习/深度学习 数据采集 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题二
本文提供了第十一届泰迪杯数据挖掘挑战赛B题问题二的详细解题步骤,包括时间序列预测模型的建立、多元输入时间预测问题的分析、时间序列预测的建模步骤、改进模型的方法,以及使用Python进行SARIMA模型拟合和预测的具体实现过程。
69 1
|
3月前
|
供应链 算法 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码
本文介绍了2023年第十一届泰迪杯数据挖掘挑战赛B题的解决方案,深入分析了产品订单数据,并使用Arimax和Var模型进行了需求预测,旨在为企业供应链管理提供科学依据,论文共23页并包含实现代码。
100 0
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 23页论文及实现代码
|
3月前
|
数据采集 数据可视化 数据挖掘
使用Python进行数据分析的新手指南深入浅出操作系统:从理论到代码实践
【8月更文挑战第30天】在数据驱动的世界中,掌握数据分析技能变得越来越重要。本文将引导你通过Python这门强大的编程语言来探索数据分析的世界。我们将从安装必要的软件包开始,逐步学习如何导入和清洗数据,以及如何使用Pandas库进行数据操作。文章最后会介绍如何使用Matplotlib和Seaborn库来绘制数据图表,帮助你以视觉方式理解数据。无论你是编程新手还是有经验的开发者,这篇文章都将为你打开数据分析的大门。
|
3月前
|
数据可视化 数据挖掘 数据处理
【Python】Python城乡人口数据分析可视化(代码+数据集)【独一无二】
【Python】Python城乡人口数据分析可视化(代码+数据集)【独一无二】
|
3月前
|
数据采集 人工智能 数据挖掘
【钉钉杯大学生大数据挑战赛】初赛B 航班数据分析与预测 Python代码实现Baseline
本文提供了参加"钉钉杯大学生大数据挑战赛"初赛B的航班数据分析与预测项目的Python代码实现Baseline。内容包括题目背景、思路分析、训练集和测试集的预处理、模型训练与预测、特征重要性分析,以及代码下载链接。预处理步骤涉及读取数据、时间信息处理、前序航班延误时间计算、天气信息匹配等。模型训练使用了Gradient Boosting Classifier,并对模型的准确率和特征重要性进行了评估。
83 0
|
6月前
|
机器学习/深度学习 数据可视化 数据挖掘
时间序列预测:探索性数据分析和特征工程的实用指南
时间序列分析在数据科学和机器学习中广泛应用于预测,如金融、能源消耗和销售。随着技术发展,除了传统统计模型,机器学习(如树模型)和深度学习(如LSTM、CNN和Transformer)也被应用。探索性数据分析(EDA)是预处理关键步骤,它通过Pandas、Seaborn和Statsmodel等Python库进行。本文展示了时间序列分析模板,包括描述性统计、时间图、季节图、箱形图、时间序列分解和滞后分析。使用Kaggle的小时能耗数据集,展示了如何通过这些方法揭示数据模式、季节性和趋势,为特征工程提供见解。
108 3
|
6月前
|
机器学习/深度学习 数据可视化 算法
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
【python】Python大豆特征数据分析 [机器学习版一](代码+论文)【独一无二】
|
6月前
|
机器学习/深度学习 存储 数据采集
【python】Python大豆特征数据分析 [机器学习版二](代码+论文)【独一无二】
【python】Python大豆特征数据分析 [机器学习版二](代码+论文)【独一无二】