Python数据分析之单变量分析

news/2024/4/30 5:51:44/文章来源:https://blog.csdn.net/qq_43403025/article/details/127166806

0 引言

在数据分析或者机器学习过程中,我们需要对变量或者特征进行分析,在分析过程中,一般都会分为两种:单变量分析、双变量分析。今天,土豆简单介绍一下单变量分析,单变量分析主要对单个变量或者特征进行分析,而变量可分为连续型变量、类别型变量,两种类型不同的变量的分析方法也是不同的。

1 连续型变量

(1) 数据概览

对于连续型变量,可以计算变量的统计值,来简单描述数据。一般在实践过程中,会使用pandas包中的describe方法来观察数据(当然使用前需要转换为Series或者DataFrame类型,DataFrame其实就是大表格,表格每一列的类型都是Series):

import numpy as np
x = np.random.randint(1,100,100)  # 随机生成100个0-100之间的数字
x = pd.Series(x)
x.describe()

结果为:

count    100.000000
mean      44.350000
std       29.432812
min        1.000000
25%       16.000000
50%       44.500000
75%       71.250000
max       98.000000
dtype: float64

可以看到,describe方法会计算出特征的count(个数)mean(平均值)std(标准差)min(最小值)max(最大值)25% 50% 75%(分位数) ,由此可以简单观察数据的情况。除此之外,还可以用mode()、median()方法查看众数以及中位数。之后,可以用info()方法,来查看每个变量或特征的type,有助于了解是否存在除了nan以外的特殊符号异常,但是info只能用于DataFrame类型,不可用于Series类型。这里我们把数据类型变为DataFrame类型,再查看info信息:

x = pd.DataFrame(x, columns=['v1']) # 把个特征命名为v1
x.info()

结果为:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 1 columns):#   Column  Non-Null Count  Dtype
---  ------  --------------  -----0   v1      100 non-null    int32
dtypes: int32(1)
memory usage: 528.0 bytes

结果显示有100条样本,100 non-null表示v1列没有缺失值,Dtype表示该列的数据类型是int32

(2) 数据离散以及分布情况

数据离散情况的观察可以查看范围、分位数、分位差、方差、标准差、偏度(skewness)、峰度(kurtosis)等等。其中,范围可由最大最小值确定,分位数分位差、标准差可由describe()方法确定,其中,四分位差IOR=Q3(第3四分位数)-Q1(第1四分位数 )确定。方差可由var()方法计算得到,偏度、峰度可由skew()kurt()方法获得。关于峰度和偏度,本文就不详细介绍了,只需要简单知道偏度是描述数据分布形态的统计量,其描述的是某总体取值分布的对称性;峰度是描述某变量所有取值分布形态陡缓程度的统计量。下面代码展示了方差、偏度、峰度的计算:

print(x.var())
print(x.skew())
print(x.kurt())

结果为

789.2940404040404
-0.1727686492729214
-1.171386373921091

除此之外,还可以通过可视化的方法去观察变量的分布情况,比较常用的方法是直方图、QQ图、核密度估计图。

  • 直方图用于展示变量的分布情况,核密度估计图的功能与直方图相似,不过可以理解为是直方图的加窗平滑。直方图调用方法为sns.distplot(),核密度估计图的调用方法为sns.kdeplot()

    import seaborn as sns 
    sns.set()                 # 切换到sns的默认运行配置
    y = np.random.randn(100)  # 生成具有标准正态分布的数据样本
    sns.distplot(y)           # 可以看到数据大致呈正态分布,kde曲线也是呈现正态
    

在这里插入图片描述

再来看看核密度估计图,其实上图中的那条曲线就是该数据的核密度估计,不过既然有这个方法,那就调用一下:

plt.figure(1);sns.kdeplot(y)
plt.figure(2);sns.kdeplot(y, shade=True)

得到以下两图:

在这里插入图片描述

左图其实就是直方图中的曲线,右图则是展示了曲线下的阴影部分,更美观更好判断罢了。

  • QQ图是变量的分位数和正态分布的分位数对比参照图,如果数据符合正态分布,则所有的点都会落在直线上。

    from scipy import stats
    plt.figure()
    stats.probplot(y, plot=plt)
    plt.show()
    

在这里插入图片描述

因为小编是用randn方法生成的正态分布的数据,因此从QQ图中可以发现,绘图数据基本与直线重合。

(3) 缺失值判断

缺失值可以用isnull()或者isna()方法判断,这两个方法的返回值都是布尔值,即:缺失值为True,反之为False。如果你不需要知道具体是哪个样本有缺失值的话,一般都会使用isnull().sum()直接统计缺失值数量

y.isnull().sum()

该结果结果为0,因为我们生成的数据不存在缺失值,所以缺失值为0。因为我们这里采用了一维Serise数据进行实验,但实际中的数据一般都是具有多个特征,读取后为DataFrame格式,所以一般会用df.isnull.sum(axis=0)的方式去按列(每列为一个特征或变量)统计缺失值。对于缺失值的可视化,一般会使用msno.matrix()方法以及msno.bar()方法。具体代码演示小编会在后面的实战文章中具体演示。

(4) 异常值判断

异常值是指远远偏离总体样本的观测值。异常值的存在会降低数据的正态性以及模型的拟合能力等等。异常值的检测主要用箱型图、直方图、散点图等等,最常用的应该是箱型图:

plt.figure()
sns.boxplot(y=y)

在这里插入图片描述因为数据是按照正态分布的规则生成的,因此不存在异常值,这里只是进行代码的演示。后文的实践中,会进一步展示箱型图在实际数据中的应用。数据缺失值、异常值的可视化以及处理方法的内容比较多,在这篇文章中便不过多解释。

2 类别型变量

类别型变量或特征的分析方法没有连续型特征那么丰富,比较单一,一般使用频率(占比)或频次(次数)来表示变量的分布情况,并使用柱形图进行可视化。

(1) 数据统计

这里同样进行人工生成数据,用于方法的讲解。比如,现在一个学校将学生的成绩划分为三档:不及格、良好、优秀,将学生的成绩表示为计算机能看懂的数据,将不及格赋予状态值1,良好赋予状态值2,优秀赋予状态值3。一个班级中,各同学的成绩如下:

grades = [1, 1, 2, 2, 2, 2, 3, 1, 2, 3, 1, 2, 2, 3, 3, 2, 1, 2, 2, 2, 2, 3, 3, 2]
grades = pd.Series(grades)

unique()方法会返回序列去重之后的不同值,nunique()方法则直接返回不同值的个数,以例子进行解释:unique()方法会统计grades中有哪几种成绩表示,nunique()方法会统计grades中有几种成绩表示:

print('grades中不同值的个数是:', grades.nunique())
print('grades中不同值分别是:', grades.unique())

结果为:

grades中不同值的个数是: 3
grades中不同值分别是: [1 2 3]

并且使用value_counts()方法进一步查看每种数值的个数:

grades.value_counts()

结果为:

2    13
3     6
1     5
dtype: int64

可以看得到状态值2的个数为13个,即成绩良好的同学有13个;状态值3的个数为6个,即成绩优秀的同学有6个;状态值1的个数为5个,即成绩不及格的同学有5个。

(2) 数据分布可视化

再利用countplot()函数对类别及其频次进行可视化,countplot()会将数据的各个类别进行计数count,再进行作图plot

plt.figure()
sns.countplot(grades)
plt.show()

在这里插入图片描述

这个方法其实也可以应用于查看变量分布和异常值检测,比如一个班级里20个同学,我们统计出来有19个良好,1个优秀,那其实该变量是不能很好地描述和区分样本的,所以在EDA的时候就可以把该特征进行删除。

这就是单变量分析,但是真实场景中,我们往往会有很多特征,那此时便需要进行多变量分析了。关于多变量分析,小编会在后面再进行介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_395748.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基金入门笔记

什么是基金 基金概念【fund】为了某种目的设立的具有一定规模的资金&#xff08;保险金、公积金也可以理解为其中的一种&#xff09;但是平常说的指的是证券投资基金。证券包含债券 股票和期货。而证券投资基金是由基金公司 保险工资或者银行推出的 从众多投资者处募集巨额资金…

【易购管理系统】导航折叠效果

在el-menu中添加 v-model“isCollapse” <el-menu router"true"default-active"/"class"el-menu-vertical-demo"background-color"#545c64"text-color"#fff"active-text-color"#ffd04b"v-model"isCollap…

[Java]通过反射获取运行时类的对象及其内部结构

文章目录1. 创建运行时类的对象2. 体会反射的动态性3. 通过反射获取运行时类的结构3.1 用于测试的类的准备3.2 获取运行时类的属性3.2.1 getFields()3.2.2 getDeclaredField()3.2.3 获取属性的结构3.3 获取运行时类的方法3.3.1 getMethods()3.3.2 getDeclaredMethods()3.3.3 获…

美食篇:大闸蟹与梭子蟹的区别

文章目录大闸蟹梭子蟹区别总结吃蟹子的季节大闸蟹 梭子蟹 区别总结 大闸蟹香&#xff0c;小&#xff0c;有黄 梭子蟹鲜&#xff0c;大&#xff0c;无黄 小的梭子蟹也有黄&#xff0c;小的便宜 总结&#xff1a;浓缩的都是精华&#xff01;个头大的不一定好吃&#xff0c;但一…

面积结构设计

面积结构设计 针对面积的拓扑是尽可能最大程度地复用逻辑资源,常常以流量(速度)为代价。 1、折叠流水线 折叠流水线可以优化在流水线赋值逻辑的流水线设计的面积。 定点的分数乘法器。A表示定点刚好在最低有效位(LSB)右边的归一化整数格式,输入B的定点刚好在最高有效…

Torch

张量 Tensor torch.is_tensor[source] torch.is_tensor(obj) 如果obj是一个pytorch张量&#xff0c;则返回True torch.is_storage(obj) torch.set_default_tensor_type(t) 设置pytorch中默认的浮点类型&#xff0c;一般使用pytorch进行运算时候使用的都是浮点数来进行计算…

Linux进程(冯诺依曼体系结构、操作系统、进程)

文章目录一、冯诺依曼体系结构&#xff1a;1.基本概念&#xff1a;2.为什么如此设计&#xff1a;2.1.运行速度优化&#xff1a;2.2.成本&#xff1a;3.总结&#xff1a;二、操作系统&#xff1a;1.基本概念&#xff1a;2.操作系统的作用&#xff1a;3.什么是管理&#xff1a;三…

【Shell编程】Bash变量-用户自定义变量

目录系列文章Bash变量-用户自定义变量变量的命名规则变量分类本地变量实例系列文章 【Shell编程】Shell基本概述与脚本执行方式 【Shell编程】Shell中Bash基本功能 Bash变量-用户自定义变量 变量的命名规则 不能以数字开头在Bash中&#xff0c;变量的默认类型都是字符串型&…

关于XShell下载安装和连接Ubuntu(linux)

目录 1.XShell下载和安装 其实很多CSDN博主已经发表很多关于这个下载安装和连接的问题&#xff0c;但是我发现都是不完整的&#xff0c;所以自己再根据大佬写的&#xff0c;重新总结一下。 XSheel下载地址 XSheel安装教程 XShell连接的话看下面的教程&#xff0c;上面中的X…

系统调用,库函数以及Linux下与进程相关的指令操作

文章目录操作系统怎么为我们提供服务什么是系统调用库函数和系统调用Linux系统下操作进程的相关指令fork系统调用操作系统怎么为我们提供服务 我们知道&#xff0c;操作系统是管理的软件。那么有的时候&#xff0c;用户需要服务&#xff0c;那么对应的操作系统就要提供对应的服…

实验5 开源控制器实践——POX

实验5 开源控制器实践——POX 基础实验hub分析: 由于在hub模式下,采取广播帧的模式,交换机每收到一帧,会向所有端口进行广播,因而h1发给h2的数据包在h3的端口也能监听到switch分析: 由于在自学习模式下,交换机会根据mac高速缓存信息进行发送数据包,因而在实验过程中,对…

设计模式解析---------------单例模式

单例模式定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类只有一个对象的场景&#xff0c;避免产生多个对象消耗过多的资源&#xff0c;或者某种对象有且只能有一个。 单例模式的UML图 角色介绍&#xff1…

数字媒体概论——系统篇

一&#xff1a;需求分析 需求分析三大要素&#xff1a; 表达内容 -> 媒体种类面向人群 -> 交互方式使用方式 -> 硬件需求 例如&#xff1a;海洋馆需要一个可以展示海洋生物知识的媒体交互系统&#xff0c;可供多人同时观赏&#xff0c;主要面向儿童&#xff0c;这里…

计算机二级C语言题库(44套真题+刷题软件)第一套

刷题软件 gongzhonghao&#xff1a;露露IT 1、循环队列的存储空间为Q(1:100),初始状态为frontrear100。经过一系列正常的入队与退队操作后,frontrear99,则循环队列中的元素个数为( )。 A. 0或100 B. 1 C. 2 D. 99 本题考查知识点是循环队列。当队头和队尾指针指向同一个元素…

常见的图片格式介绍

常见的图片格式介绍 图片&#xff08;Picture&#xff09;包括图形、图像。图形&#xff08;Graph&#xff09;是矢量图&#xff08;Vector Drawn&#xff09;&#xff0c;图像&#xff08;Image&#xff09;是位图&#xff08;Bitmap&#xff09;。 图片&#xff08;Picture…

【老板要我啥都会】|前端升全栈之项目使用express重构项目(下篇)

前言 承接上一篇文章&#xff0c;《前端升全栈之项目使用express重构项目&#xff08;上篇&#xff09;》&#xff0c;我们继续讲解下一篇的项目使用express重构项目完整的下一篇&#xff08;主要是国庆&#xff0c;需要放松&#xff0c;所以该文章分为上下篇&#xff0c;请大…

2022年Webpack 5初学者完整指南

2022年Webpack 5初学者完整指南 从基础到高级学习 Webpack 5&#xff01;将 Webpack 与 JS、CSS、NPM、模块联合和微前端一起使用 课程英文名&#xff1a;Webpack 5 in 2022 The Complete Guide For Beginners 此视频教程共2.5小时&#xff0c;中英双语字幕&#xff0c;画质…

都这麽大了还不快了解防病毒网关?

目录 一、思考 二、实验 1、实验拓扑 2、配置过程&#xff08;网页端配置&#xff09; 三、总结 1. 什么是恶意软件&#xff1f; 2. 恶意软件有哪些特征&#xff1f; 3. 恶意软件的可分为那几类&#xff1f; 4. 恶意软件的免杀技术有哪些&#xff1f; 5. 反病毒技术…

OceanBase 从0到1数据库内核实战教程学习笔记 - 3.OceanBase基础架构和开发技巧

这篇文章主要介绍王泽林老师分享的 《OceanBase 的基础架构和开发技巧》。如果您看过第一篇文章的对应视频&#xff0c;会发现整个系列主要分为 MiniOB 和 OceanBase 两个系列&#xff0c;本篇文章就是 OceanBase 系列的开篇&#xff0c;所以文章中会有很多 OceanBase 的概念和…

Java类的成员方法的创建以及调用|在使用时有何意义|附运行方式及题目

&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d;&#x1f51d; &#x1f947;博主昵称&#xff1a;Jovy. &#x1f35f;博客主页…