numpy之数据探索性分析

2024-04-24 20:08
文章标签 分析 数据 numpy 探索性

本文主要是介绍numpy之数据探索性分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

 我们拿到数据的初步工作往往是对数据进行描述(描述统计量,图表),查看数据的分布,比较数据之间的关系,进而对数据进行假设检验或建模等。

 接下来我们看如何用python实现上述工作(持续更新)。

1. Measures of Location
 1.1 均值
 1.2 中位数
 1.3 最大值和最小值
 1.4 分位数

2. Measures of Dispersion
 2.1 方差和标准差
 2.2 极差
 2.3 变异系数
 2.4 偏度(Skewness)
 2.5 峰度(Kurtosis)

3. Measures of Distribution
 3.1 Shapiro-Wilk Test
 3.2 Kolmogorov-Smirnov Test

4. Hypotheses Testing
 4.1 t检验
  4.1.1 单样本t-检验
  4.1.2 双样本t-检验
  4.1.3 配对样本t-检验
  4.1.4 单边t-检验

1. Measures of Location

1.1 均值

语法:np.mean(a, axis=None)

说明:当数据a为高维数据时,可指定axis进行以行求平均或以列求平均,axis=0为按列求平均,axis=1为按行求平均

import numpy as np
data = np.arange(20) #[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19]
data_mean = np.mean(data)
print(data_mean)

输出: 9.5 9.5 9.5

1.2 中位数

语法:np.median(a)

data_median = np.median(data)
print(data_median)

输出: 9.5 9.5 9.5

1.3 最大值和最小值

语法:np.max()和np.min()

data_max = np.max(data)
data_min = np.min(data)
print(data_max)
print(data_min)

结果:19,0

1.4 分位数

语法:np.quantile(a, q)

说明:q为要计算的分位数或分位数序列,必须在0到1之间(含0和1)。 常用的为0.250.45,即下四分位数上四分位数

#将q设置为0.25,求下四分位数
data_q1 = np.quantile(data, q=0.25)
#将q设置为0.75,求上四分位数
data_q2 = np.quantile(data, q=0.75)
print(data_q1)
print(data_q2)

输出:4.75,14.25

2. Measures of Dispersion

2.1 方差和标准差

语法:方差为np.var(),标准差为np.std()

说明:这里计算方差的公式为: S 2 = 1 n ∑ i = 1 n ( x i − x ˉ ) 2 S^2=\frac{1}{n}\sum_{i=1}^n{(x_i-\bar{x})^2} S2=n1i=1n(xixˉ)2,这里是 n n n,而在很多情形下,要求的是 n − 1 n-1 n1,而只需先乘以 n n n再除以 n − 1 n-1 n1即可。

data_v = np.var(data)
data_s = np.std(data)
print(data_v)
print(data_s)

输出:33.25,5.766281297335398

2.2 极差

语法:np.ptp()或np.max() - np.min()

data_r = np.ptp(data)
print(data_r)

输出:19

2.3 变异系数

 变异系数是原始数据标准差与原始数据平均数的比,反映数据离散程度的绝对值,当两组数据量纲不同或测量尺度相差太大时,可以进行客观比较。

语法:这个python并没有专门的函数,不过我们根据 c v = s t d x ˉ cv=\frac{std}{\bar{x}} cv=xˉstd,可以自行编写:np.std() / np.mean()

data_cv = np.std(data) / np.mean(data)
print(data_cv)

输出:0.606976978666884

2.4 偏度(Skewness)

 公式: S k e w n e s s ( X ) = E [ ( X − μ σ ) 3 ] Skewness(X)=E[(\frac{X-\mu}{\sigma})^3] Skewness(X)=E[(σXμ)3]

 偏度是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征, 直观看来就是密度函数曲线尾部的相对长度。

 正态分布的偏度为 0 0 0,两侧尾部长度对称;偏度小于 0 0 0时,左偏,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长;偏度大于 0 0 0时,右偏,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长。

语法:scipy.stats.skew(a)或pandas.Series().skew()或pandas.DataFrame().skew()

说明:pandas.Series().skew()或pandas.DataFrame().skew()是说对series对象或dataframe对象直接调用skew()

from scipy import stats#以scipy.stats.kurtosis(a)为例
data_skew = stats.skew(data)
print(data_skew)

输出:0,因为我们的数据是[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19],是对称的。

2.5 峰度(Kurtosis)

 公式: K u r t o s i s ( X ) = E [ ( X − μ σ ) 4 ] Kurtosis(X)=E[(\frac{X-\mu}{\sigma})^4] Kurtosis(X)=E[(σXμ)4]

 峰度表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度反映了峰部的尖度.

 正态分布的峰度为3。以一般而言,正态分布为参照,因此计算时会减去3(python包里也是这样)。峰度可以描述分布形态的陡缓程度,若峰度小于0,则称分布具有不足的峰度,直观上就是峰的形状比较尖,比正态分布峰要陡峭;若峰度大于0,则称分布具有过度的峰度,直观上就是峰的形状比较钝,没有正态分布峰陡峭;

语法:scipy.stats.kurtosis(a)或pandas.Series().kurtosis()或pandas.DataFrame().kurtosis()

说明:这几个包里的函数都是减去3了的,因此正态分布的峰度为0。可自行检验(先生成服从正态分布的随机数,指定分布随机数生成方法,再把数据代入)

#以scipy.stats.kurtosis(a)为例
data_kurt= stats.kurtosis(data)
print(data_kurt)

输出:-1.206015037593985

3 Measures of Distribution

3.1 Shapiro-Wilk Test

 Shapiro-Wilk Test(夏皮罗-威尔克检验)是一种在频率上检验小样本数据(样本量小于等于50)正态性的方法,它的零假设是总体呈正态分布。

import numpy as np
from scipy import stats#先产生50个服从标准正态分布的样本
np.random.seed(2020)
data_ran = np.random.normal(0, 1, 50)#用scipy.stats.shapiro()进行Shapiro-Wilk Test检验其是否服从正态分布
result = stats.shapiro(data_ran)
print(result)
#输出的第一个值为检验统计量,越大说明和正态分布拟合的越好,
#输出的第二个值为p值,如果小于给定的α值,那么拒绝原假设,即说明样本数据不服从正态分布

输出:ShapiroResult(statistic=0.9700697660446167, pvalue=0.23296509683132172)

3.2 Kolmogorov-Smirnov Test(K-S检验)

 Kolmogorov-Smirnov Test分为单样本和双样本。
 对于单样本,K-S检验基于累计分布函数,可以检验样本数据的经验分布与另一个理论分布是否不同,原假设是数据符合理论分布,备择假设可以是双边假设或者单边假设;
 对于双样本,K-S检验基于累计分布函数,可以检验两个样本数据的经验分布是否不同,原假设是数据符合理论分布两个数据分布一致。

语法
 单样本——scipy.stats.kstest(rvs, cdf, args=(), alternative=‘two-sided’)
 双样本——scipy.stats.ks_2samp(data1, data2, alternative=‘two-sided’)

说明
单样本
rvs是数据,可以是数组型,不过必须是一维的;也可以是callable(可调用的对象),不过此时必须是生成随机变量的函数。
cdf是待比较的理论分布,可以是字符串,不过必须是’scipy.stats’里面的,比如正态分布是’norm’,t分布是’t’。
args=()是cdf的参数,为元组类型,比如cdf=‘norm’时,默认的是均值为0,标准差为1,可以通过args=(1, 2),将理论分布的均值为1,标准差为2;如果cdf=‘t’,t分布只有一个自由度的参数,此时可以设args=(1, )。注意:t分布必须设置此参数,正态分布不用,默认为(0, 1)。
alternative是设置备择假设,默认为双边假设,可选择{‘two-sided’, ‘less’, ‘greater’}

双样本——data1, data2为两个样本的数据,维度不一定要相同;alternative同上。

import numpy as np
from scipy import stats#先产生10000个服从标准正态分布的样本
np.random.seed(2020)
data_ran = np.random.normal(0, 1, 10000)
#用scipy.stats.kstest()进行我们生成的单样本是否服从正态分布
results = stats.kstest(data_ran, 'norm')
print(results)
#生成的第一个值为统计量,越小,说明样本数据的经验分布和理论分布越相似
#生成的第一个值为p值,当小于给定的α时,拒绝备择假设,即样本数据的经验分布和理论分布不相同

输出:KstestResult(statistic=0.008834024961597298, pvalue=0.4136790491750736)

4. Hypotheses Testing

4.1 t-检验

详见:t检验

 t检验的前提是要求样本服从正态分布或近似正态分布(情景2还需要满足方差齐性),不然可以利用一些变换(取对数、开根号、倒数等等)试图将其转化为服从正态分布是数据。不过当样本量大于30的时候,可以认为数据近似正态分布。

 t检验最常见的四个用途:
 1. 单样本均值检验:用于检验总体方差未知、正态数据或近似正态的单样本的均值是否与已知的总体均值相等;
 2. 两独立样本均值检验:用于检验两对独立的正态数据或近似正态的样本的均值是否相等,这里可根据总体方差是否相等分类讨论;
 3. 配对样本均值检验:用于检验一对配对样本的均值的差是否等于某一个值;
 4. 回归系数的显著性检验:用于检验 回归模型的解释变量对被解释变量是否有显著影响。

4.1.1 单样本t-检验

语法:scipy.stats.ttest_1samp(a)

#先产生50个服从标准正态分布的样本
np.random.seed(2020)
data_ran = np.random.normal(0, 1, 50)
#分别检验数据的均值是0还是1
r1 = stats.ttest_1samp(data_ran, 0)
r2 = stats.ttest_1samp(data_ran, 1)
print(r1)
print(r2)
#结果输出两个值,第一个值是统计量,第二个值是相应的p值,如果p值小于给定的α,就拒绝原假设,即数据的均值不是我们设置的数

输出
Ttest_1sampResult(statistic=-0.7624073055815211, pvalue=0.4494715663983747)
Ttest_1sampResult(statistic=-8.118276860613589, pvalue=1.2606057633242357e-10)

4.1.2 双样本t-检验

语法:scipy.stats.ttest_ind(a, b, equal_var=True)
说明:a, b为待比较的样本数据;当两组独立样本的方差(近似)相等时,可将equal_var设为True,否则将其设为False。如果两总体具有方差齐性,错将equal_var设为False,p值变大;两总体方差不等时,若没有将equal_var参数设定为False,则函数会默认equal_var为True,这样会低估p值。(如何检验两组数据的方差是否相等)

#先产生50个服从标准正态分布的样本和50个均值为0方差为4的数据
np.random.seed(2020)
data_ran = np.random.normal(0, 1, 50)
data_ran2 = np.random.normal(0, 2, 50)
#检验两组数据的均值是否相等,由于它们的方差不相等,因此将equal_var设为False
r1 = stats.ttest_ind(data_ran, data_ran2, equal_var=False)
print(r1)

输出:Ttest_indResult(statistic=-1.1267140774455147, pvalue=0.26355948862913453)

4.1.3 配对样本t-检验

语法:scipy.stats.ttest_rel(a, b)

#先产生50个服从标准正态分布的样本和50个均值为0方差为4的数据
np.random.seed(2020)
data_ran = np.random.normal(0, 1, 50)
data_ran2 = np.random.normal(0, 2, 50)
#检验两组数据的均值的差是否为0(试验结果应该为接收原假设)
r1 = stats.ttest_rel(data_ran, data_ran2)
print(r1)

输出:Ttest_relResult(statistic=-1.1314473367025755, pvalue=0.26337401761631224)

4.1.4 单边t-检验

 以上几种t检验都是双边t检验,即 H 0 : μ 1 = μ 2 − − − H 1 : μ 1 ≠ μ 2 H_0:\mu_1=\mu_{2}---H_1:\mu_1≠\mu2 H0:μ1=μ2H1:μ1=μ2。有时我们想进行单边t检验,即 H 0 : μ 1 ≤ μ 2 − − − H 1 : μ 1 > μ 2 H_0:\mu_1≤\mu_{2}---H_1:\mu_1>\mu_2 H0:μ1μ2H1:μ1μ2 H 0 : μ 1 ≥ μ 2 − − − H 1 : μ 1 < μ 2 H_0:\mu_1≥\mu_{2}---H_1:\mu_1<\mu_2 H0:μ1μ2H1:μ1μ2
 但以上结果仍可以用,只不过需要将最后得到的 p p p值除以 2 2 2作为单边的阈值。
 还有一点要注意的是,对于ttest_ind(a, b)和ttest_rel(a, b),是默认a.mean() − - b.mean(),因此,如果想得到正的结果,要将大的平均值放前面。

这篇关于numpy之数据探索性分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

pandas数据过滤

Pandas 数据过滤方法 Pandas 提供了多种方法来过滤数据,可以根据不同的条件进行筛选。以下是一些常见的 Pandas 数据过滤方法,结合实例进行讲解,希望能帮你快速理解。 1. 基于条件筛选行 可以使用布尔索引来根据条件过滤行。 import pandas as pd# 创建示例数据data = {'Name': ['Alice', 'Bob', 'Charlie', 'Dav