一行代码弄懂数据,pandas最佳搭档就是ta了

2023-12-29 02:58

本文主要是介绍一行代码弄懂数据,pandas最佳搭档就是ta了,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

在第一次导入新数据集时,我们首先要做的是了解数据。这包括确定特定预测变量的范围,识别每个预测变量的数据类型以及计算每个预测变量的缺失值的数量或百分比等步骤。这一步通常被称为探索性数据分析(EDA,exploratory data analysis)。

pandas库提供了许多非常有用的功能来帮助我们完成EDA。但是,在能够应用这些功能之前,通常我们必须先使用更普遍的功能,如 df.describe()。不过这些函数提供的功能仍是有限的,并且不同新数据集的初步EDA工作流,大多数情况下是非常相似。

作为一个特别不喜欢重复性任务的人,我最近在寻找合适的工具,幸运地发现了 pandas-profiling。它没有一次只给用户提供一种输出,而是快速生成一个内容异常丰富的HTML文件,其中包含有进行更具体的数据分析前可能需要了解的大部分内容。

接下来,我将向您介绍在Titanic数据集中应用pandas-profiling。

更快完成 EDA

由于数据类型丰富、缺失值较多,我选择在泰坦尼克号数据集上应用pandas-profiling。在我看来,pandas-profiling尤其适合当数据尚未清理并仍需要进一步个性化调整的数据集。为了更好完成精细调整,你需要知道从哪里开始,以及重点要关注什么。这是pandas-profiling的用武之地。

首先,让我们导入数据,并使用pandas来检索一些描述性统计信息:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
# 导入相关包
import pandas as pd
import pandas_profiling
import numpy as np# 导入数据
df = pd.read_csv('/Users/lukas/Downloads/titanic/train.csv')# 描述性统计信息
df.describe()

上述代码执行后,会产生如下输出:
在这里插入图片描述
虽然上面的输出包含大量信息,但它并没有告诉您可能感兴趣的所有内容。例如,你知道了数据框有891行。如果要验证,则必须添加另一行代码以确定数据框的长度。虽然这些计算并不是非常耗时,但一次又一次地重复这些计算确实占用了时间,而您本可以用在清理数据上。

概览

现在,让我们使用pandas-profiling做同样的事情:

pandas_profiling.ProfileReport(df)

运行这行代码将创建数据集的HTML EDA报告。运行代码后,结果将直接内联在 notebook 中; 但是,你也可以选择将EDA报告另存为HTML文件,以便共享。

EDA报告的第一部分,是概述部分,提供了数据的基本信息(观察数量,变量数量等)。它还会输出一个警告列表,告诉你在何处仔细检查数据,并重点清理哪些数据。
在这里插入图片描述
单变量 EDA

概述之后,EDA报告为您提供有关每个特定变量的洞察。其中还包括描述每个变量分布的可视化小图:

在这里插入图片描述
数字变量 ‘Age’ 的输出

如上所示,pandas-profiling为您提供了一些有用的指标,例如缺失值的百分比和数量,以及我们之前看到的描述性统计数据。由于’Age’是一个数字变量,使用直方图可视化其分布告诉我们,这个变量似乎是向右偏的。

类型变量的输出,与数字变量仅有很小的变化:
在这里插入图片描述
类型变量 ‘Sex’ 的输出

pandas-profiling并不计算均值、最小值和最大值,而是计算分类变量的类计数。由于’Sex’是一个二元变量,我们只找到两个不同的计数。

你可能想知道pandas-profiling究竟是如何计算它的输出的。幸运的是,我们可以在[GitHub]上找到源代码。由于我喜欢在代码中制作不必要的黑盒,我下面将快速深入研究数字变量的源代码:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 寻找有志同道合的小伙伴,互帮互助,
群里还有不错的视频学习教程和PDF电子书!
'''
def describe_numeric_1d(series, **kwargs):"""Compute summary statistics of a numerical (`TYPE_NUM`) variable (a Series).Also create histograms (mini an full) of its distribution.Parameters----------series : SeriesThe variable to describe.Returns-------SeriesThe description of the variable as a Series with index being stats keys."""# Format a number as a percentage. For example 0.25 will be turned to 25%._percentile_format = "{:.0%}"stats = dict()stats['type'] = base.TYPE_NUMstats['mean'] = series.mean()stats['std'] = series.std()stats['variance'] = series.var()stats['min'] = series.min()stats['max'] = series.max()stats['range'] = stats['max'] - stats['min']# To avoid to compute it several times_series_no_na = series.dropna()for percentile in np.array([0.05, 0.25, 0.5, 0.75, 0.95]):# The dropna() is a workaround for https://github.com/pydata/pandas/issues/13098stats[_percentile_format.format(percentile)] = _series_no_na.quantile(percentile)stats['iqr'] = stats['75%'] - stats['25%']stats['kurtosis'] = series.kurt()stats['skewness'] = series.skew()stats['sum'] = series.sum()stats['mad'] = series.mad()stats['cv'] = stats['std'] / stats['mean'] if stats['mean'] else np.NaNstats['n_zeros'] = (len(series) - np.count_nonzero(series))stats['p_zeros'] = stats['n_zeros'] * 1.0 / len(series)# Histogramsstats['histogram'] = histogram(series, **kwargs)stats['mini_histogram'] = mini_histogram(series, **kwargs)return pd.Series(stats, name=series.name)

虽然这可能看起来像一个巨大的代码块,但它实际上很容易理解。Pandas-profiling的源代码中引入了另一个确定每个变量类型的函数。如果变量被识别为数字变量,上面的函数将产生之前显示的输出。此函数使用的是基本的pandas Series 操作,例如series.mean(),并将结果存储在 stats 字典中。图表则是使用matplotlib的matplotlib.pyplot.hist函数的改编版本生成的,目的是为了能够处理各种类型的数据集。

相关性与样本

在每个特定变量的EDA下,pandas-profiling还将输出Pearson和Spearman相关性矩阵。

在这里插入图片描述

Pearson 相关性矩阵

如果你愿意,可以在生成报告的初始代码行中设置一些相关阈值。通过这样做,你可以调整为你认为合适的相关性强度。

最后,pandas-profiling将输出代码样本。严格来说,这不是代码样本,只是数据的头部。当前几个观察结果不能代表数据的一般特征时,这可能会导致问题。
在这里插入图片描述
因此,我建议不要使用最后一个输出进行初始分析,而是运行df.sample(5),它将从您的数据集中随机选择五个观察值。

结论

总而言之,pandas-profiling提供了一些有用的功能,特别是你的主要目标是快速理解您数据或以可视格式与他人分享EDA。当然,它并没有让EDA变得自动化,深入的个性化调整,仍必须要手动完成。

项目地址:https://github.com/pandas-profiling

这篇关于一行代码弄懂数据,pandas最佳搭档就是ta了的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/548136

相关文章

Java 的ArrayList集合底层实现与最佳实践

《Java的ArrayList集合底层实现与最佳实践》本文主要介绍了Java的ArrayList集合类的核心概念、底层实现、关键成员变量、初始化机制、容量演变、扩容机制、性能分析、核心方法源码解析、... 目录1. 核心概念与底层实现1.1 ArrayList 的本质1.1.1 底层数据结构JDK 1.7

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

JS纯前端实现浏览器语音播报、朗读功能的完整代码

《JS纯前端实现浏览器语音播报、朗读功能的完整代码》在现代互联网的发展中,语音技术正逐渐成为改变用户体验的重要一环,下面:本文主要介绍JS纯前端实现浏览器语音播报、朗读功能的相关资料,文中通过代码... 目录一、朗读单条文本:① 语音自选参数,按钮控制语音:② 效果图:二、朗读多条文本:① 语音有默认值:②

Vue实现路由守卫的示例代码

《Vue实现路由守卫的示例代码》Vue路由守卫是控制页面导航的钩子函数,主要用于鉴权、数据预加载等场景,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、概念二、类型三、实战一、概念路由守卫(Navigation Guards)本质上就是 在路

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型