【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计

目录

1 用 numpy 快速求数组的各种统计量:mean, var, std

1.1 数据准备

1.2 直接用np的公式求解

1.3 注意问题

1.4 用print() 输出内容,显示效果

2 为了验证公式的背后的理解,下面是详细的展开公式的求法

2.1 均值mean的详细

2.2 方差var的详细

2.2.1 一个比较奇怪的问题

2.2 (数组-均值)→离差数组→离差平方数组→离差平方和数

2.3 方差 var

2.4 标准差std

3  各种类型的数据平均数: min, max ,mean ,median, mode() 的求法

3.1 min, max ,mean ,median

3.2 众数mode()需要间接求

4 四分位数

4.1 什么是四分位数

4.2 如何求?

5 上面的所有测试代码 和对应测试结果

5.1 测试代码

5.2 测试结果 

6 如果需要统计 pd.DataFrame的某些列/字段的统计量呢?

6.1 如果是统计某列的整体属性

6.2 如果是统计pd.DataFrame的某列的分组属性,需要分组统计呢?

6.3 利用pd.DataFrame.groupby()方法,进行统计

6.4 下面是上述使用pd.DataFrame.groupby()的例子


1 用 numpy 快速求数组的各种统计量:mean, var, std

1.1 数据准备

  • 先生成一个纯数字列表,list1=[1,2,3,4,5,6,7,8,9,10]
  • 转化为np的数组,array1=np.array(list1)

1.2 直接用np的公式求解

  • mu1=np.mean(array1)
  • var1=np.var(array1)            #默认缺省 ddof=0,方差有偏估计
  • var11=np.var(array1,ddof=1)    #ddof 无偏估计
  • std1=np.std(array1)
  • std11=np.std(array1,ddof=1)

1.3 注意问题

#  以前可以用 scipy.mean() 等方法求,现在要被取消了,所以会报错

#报错 scipy.mean is deprecated and will be removed in SciPy 2.0.0
#mu1=sp.mean(array1)   
#var1=sp.var(array1)
#std1=sp.std(array1)

import scipy as sp
import numpy as np
import pandas as pdlist1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)#现在只能用numpy求这些
mu1=np.mean(array1)
var1=np.var(array1)            #默认缺省 ddof=0,方差有偏估计
var11=np.var(array1,ddof=1)    #ddof 无偏估计
std1=np.std(array1)
std11=np.std(array1,ddof=1)

1.4 用print() 输出内容,显示效果

  • 不适合的
  • print("mu1%d=" %555)  #%d %s 只适合数字,字符串,不适合变量,变量当参数会报错
  • 比较老旧的用法
  • print("var1={0}".format(var1))   #适合变量带入,不灵活,不能用参数名需要标数字对应
  • print("var11={0}".format(var11)) 
  • 好用但是比较山寨的
  • print("mu1=" ,mu1)    #比较山寨,但是可以
  • 最好用的
  • print(f"std1={std1}")   #适合变量带入,带入的是参数名,灵活
  • print(f"std11={std11}") 
     

2 为了验证公式的背后的理解,下面是详细的展开公式的求法

2.1 均值mean的详细

  • 求sum,使用np.sum
  • 求数组长度  len()
  • 求均值  mu=np.sum/len()

2.2 方差var的详细

2.2.1 一个比较奇怪的问题

#无法一步数组-数字,然后求和???
#报错  SyntaxError: invalid decimal literal
#ss=np.sum((array1-mu2)**2)
#ss=sum((array1-mu2)**2)

2.2 (数组-均值)→离差数组→离差平方数组→离差平方和数

  • (数组-均值)→离差数组→离差平方数组→离差平方和数

  • #必须得拆开求SS?
  • xx=array1-mu2       # 离差数组(数组)    
  • yy=xx**2                 # 离差平方数组(数组)
  • ss=sum(yy)            # SS就是离差平方和(数字!)
  • print("离差数组xx=",xx)
  • print("离差平方数组yy=",yy)
  • print("离差平方和ss=",ss)

2.3 方差 var

  • 我们只能得到样本方差,但是我们可以估计出总体方差
  • 样本方差=有偏(总体)方差var=ss/n
  • 无偏(总体)方差var=ss/(n-1)

2.4 标准差std

  • 样本标准差
  • 样本无偏标准差
  • 总体无偏标准差

import scipy as sp
import numpy as np
import pandas as pdlist1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)# 下面是展开的求法,求数组的各种统计量------------验证上面内容
sum2=np.sum(array1)
#n=np.len(array1) 
n=len(array1)    #len()是python的基础方法
mu2=sum2/n#无法一步数组-数字,然后求和???
#报错  SyntaxError: invalid decimal literal
#ss=np.sum((array1-mu2)**2)
#ss=sum((array1-mu2)**2)
#必须得拆开求SS?
xx=array1-mu2       # 离差数组(数组)    
yy=xx**2            # 离差平方数组(数组)
ss=sum(yy)          # SS就是离差平方和(数字!)
print("离差数组xx=",xx)
print("离差平方数组yy=",yy)
print("离差平方和ss=",ss)var2=ss/n
var22=ss/(n-1)std2=np.sqrt(var2)
std22=np.sqrt(var22)#结果和上面是相同的
print("mu2=" ,mu2)   
print("var2={0}".format(var2))   
print("var22={0}".format(var22))   
print(f"std2={std2}")   
print(f"std22={std22}") 

3  各种类型的数据平均数: min, max ,mean ,median, mode() 的求法

3.1 min, max ,mean ,median

#其他统计内容

  • print(np.min(array1))
  • print(np.max(array1))
  • print(np.mean(array1))
  • print(np.median(array1))
#其他统计内容
print(np.min(array1))
print(np.max(array1))
print(np.mean(array1))
print(np.median(array1))countList = np.bincount(np.array(array1))
mode = np.argmax(countList)
print(mode)

3.2 众数mode()需要间接求

numpy无法直接求众数,这个方法是网上查的

  • 主要思路就是求每个数的出现次数,然后去查对应出现次数最多的元素就是众数。
  • countList = np.bincount(np.array(array1))
  • #np.bincount用于统计输入数组中每个数值出现的次数
  • #np.argmax是用于取得数组中每一行或者每一列的的最大值
  • mode = np.argmax(countList)
  • print(mode)

4 四分位数

4.1 什么是四分位数

  • 其实四分位数,就是 0%,25% ,50%,75%,100% 这5个点组成的四个均等1/4长线段
  • 本身0%,100% 就是min 和 max
  • 新加25% ,50%,75% 即可区分4个1/4四分位的线段

4.2 如何求?

  • sp.stats.scoreatpercentile(array1,25)  即25%,即1/4分位的数
print("#四分位数")
#四分位数
print(sp.stats.scoreatpercentile(array1,0))
print(sp.stats.scoreatpercentile(array1,25))
print(sp.stats.scoreatpercentile(array1,50))
print(sp.stats.scoreatpercentile(array1,75))
print(sp.stats.scoreatpercentile(array1,100))

5 上面的所有测试代码 和对应测试结果

5.1 测试代码

import scipy as sp
import numpy as np
import pandas as pdlist1=[1,2,3,4,5,6,7,8,9,10]
array1=np.array(list1)print("#日常用法----用numpy 快速求数组的各种统计量")
# 用numpy 快速求数组的各种统计量----------日常用法
#报错 scipy.mean is deprecated and will be removed in SciPy 2.0.0
#mu1=sp.mean(array1)   
#var1=sp.var(array1)
#std1=sp.std(array1)#现在只能用numpy求这些
mu1=np.mean(array1)
var1=np.var(array1)            #默认缺省 ddof=0,方差有偏估计
var11=np.var(array1,ddof=1)    #ddof 无偏估计
std1=np.std(array1)
std11=np.std(array1,ddof=1)print("mu1%d=" %555)  #%d %s 只适合数字,字符串,不适合变量,变量当参数会报错
print("mu1=" ,mu1)    #比较山寨,但是可以
print("var1={0}".format(var1))   #适合变量带入,不灵活,不能用参数名需要标数字对应
print("var11={0}".format(var11)) 
print(f"std1={std1}")   #适合变量带入,带入的是参数名,灵活
print(f"std11={std11}") print()
print("# 下面是详细的展开公式的求法,求数组的各种统计量----------验证上面内容")
# 下面是展开的求法,求数组的各种统计量------------验证上面内容
sum2=np.sum(array1)
#n=np.len(array1) 
n=len(array1)    #len()是python的基础方法
mu2=sum2/n#无法一步数组-数字,然后求和???
#报错  SyntaxError: invalid decimal literal
#ss=np.sum((array1-mu2)**2)
#ss=sum((array1-mu2)**2)
#必须得拆开求SS?
xx=array1-mu2       # 离差数组(数组)    
yy=xx**2            # 离差平方数组(数组)
ss=sum(yy)          # SS就是离差平方和(数字!)
print("离差数组xx=",xx)
print("离差平方数组yy=",yy)
print("离差平方和ss=",ss)var2=ss/n
var22=ss/(n-1)std2=np.sqrt(var2)
std22=np.sqrt(var22)#结果和上面是相同的
print("mu2=" ,mu2)   
print("var2={0}".format(var2))   
print("var22={0}".format(var22))   
print(f"std2={std2}")   
print(f"std22={std22}") print("")
print("#其他统计内容")
#其他统计内容
print(np.min(array1))
print(np.max(array1))
print(np.mean(array1))
print(np.median(array1))countList = np.bincount(np.array(array1))
mode = np.argmax(countList)
print(mode)print("")
print("#四分位数")
#四分位数
print(sp.stats.scoreatpercentile(array1,0))
print(sp.stats.scoreatpercentile(array1,25))
print(sp.stats.scoreatpercentile(array1,50))
print(sp.stats.scoreatpercentile(array1,75))
print(sp.stats.scoreatpercentile(array1,100))

5.2 测试结果 

6 如果需要统计 pd.DataFrame的某些列/字段的统计量呢?

6.1 如果是统计某列的整体属性

  • 如果是统计某列的整体属性
  • 理论上,直接把pd.DataFrame的某个列取出来,
  • 变成pd.Series,
  • 然后变成 np.array() 数组
  • 然后对数据使用 np.mean() ,np.var()  np.std() 即可

# 如果需要统计 pd.DataFrame的某个列,有时候可以取出1列来,这样直接分析。这样分析的是某一列的平均属性
series1=dataframe1["length"]
array11=series1.values

print(array11)
print()

mu1=np.mean(array11)
var1=np.var(array11)            
var11=np.var(array11,ddof=1)   
std1=np.std(array11)
std11=np.std(array11,ddof=1)
 

6.2 如果是统计pd.DataFrame的某列的分组属性,需要分组统计呢?

如果需要统计 pd.DataFrame的某个列,如果不是统计某列的平均属性,而是要进行分组统计呢?

利用pd.DataFrame.groupby()方法"

  • group1=dataframe1.groupby("species")
  • group1.describe()
  • group1.mean()
  • 等等

6.3 利用pd.DataFrame.groupby()方法,进行统计

  • group1=dataframe1.groupby("species")

直接显示全部统计属性,更快,更方便

  • group1.describe()

下面可以分别显示属性

  • print(group1.mean())
  • print(group1.var())
  • print(group1.var(ddof=1))
  • print(group1.std())
  • print(group1.std(ddof=1))

6.4 下面是上述使用pd.DataFrame.groupby()的例子

import numpy as np
import pandas as pd
import scipy as sp
%precision 3list2=["A","A","A","B","B","B"]
list3=[10,12,14,20,24,28]
array2=np.array(list2)
array3=np.array(list3)#pd.DataFrame 注意驼峰命名法,2个首字母都要大写
dataframe1=pd.DataFrame({"species":array2,"length":array3})
print(dataframe1)
print()# 如果需要统计 pd.DataFrame的某个列,有时候可以取出1列来,这样直接分析。这样分析的是某一列的平均属性
series1=dataframe1["length"]
array11=series1.valuesprint(array11)
print()mu1=np.mean(array11)
var1=np.var(array11)            
var11=np.var(array11,ddof=1)   
std1=np.std(array11)
std11=np.std(array11,ddof=1)print("mu1%d=" %555)  #%d %s 只适合数字,字符串,不适合变量,变量当参数会报错
print("mu1=" ,mu1)    #比较山寨,但是可以
print("var1={0}".format(var1))   #适合变量带入,不灵活,不能用参数名需要标数字对应
print("var11={0}".format(var11)) 
print(f"std1={std1}")   #适合变量带入,带入的是参数名,灵活
print(f"std11={std11}") 
print() #如果需要统计 pd.DataFrame的某个列,如果不是统计某列的平均属性,而是要进行分组统计呢?
print("利用pd.DataFrame.groupby()方法")
group1=dataframe1.groupby("species")
print(group1.mean())
print(group1.var())
print(group1.var(ddof=1))
print(group1.std())
print(group1.std(ddof=1))group1.describe()

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

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

相关文章

无需插件,如何以二维码网址直抵3D互动新世界?

随着Web技术的飞速发展,一个无需额外插件,仅凭二维码或网址即可直接访问的三维互动时代已经悄然来临。这一变革,得益于WebGL技术与先进web3D引擎的完美融合,它们共同构建了51建模网这样一个既便捷又高效的在线三维互动平台&#x…

【前端】跨域问题与缓存

报错如下: 原因: 浏览器 缓存跨域,顾名思义是由于浏览器的缓存机制导致的一种跨域情况。这种跨域一般会出现在浏览器通过一些无视跨域的标签和css(如img、background-image)缓存了一些图片资源之后,当再次发起图片请求时&#xff…

怎么样才算得上熟悉高并发编程?

提到并发编程很多人就会头疼了;首先就是一些基础概念:并发,并行,同步,异步,临界区,阻塞,非阻塞还有各种锁全都砸你脸上,随之而来的就是要保证程序运行时关键数据在多线程…

大数据新视界 -- 大数据大厂之 Hive 数据质量保障:数据清洗与验证的策略(上)(17/ 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

MySQL5.6升级MySQL5.7

升级方式介绍 08 数据库服务版本升级方法 5.6 – 5.7 – 8.0 数据库版本升级方法: Inplace-本地升级 步骤一:在同一台服务器中,需要部署高版本数据库服务实例步骤二:低版本数据库中的数据进行备份迁移,迁移到高版本…

添加字符(暴力模拟)

添加字符 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);char[] A in.next().toCharArray();char[] B in.next().toCharArray();int …

关注度上升,交易量直线上涨,Base Season 即将到来?

撰文:Zeneca 编译:Yangz,Techub News 译者按:凭借 AI 发币平台 Clanker 及 Virtuals 的爆火,行业对 Base 生态的关注出现「暴涨」。当地时间 11 月 26 日,Base 上的交易量直线拉升,达到约 1136…

安能物流 All in TiDB 背后的故事与成果

导读 在数字化转型的浪潮中,安能物流通过技术创新不断提升物流效率,迈出了全链路 All in TiDB 的重要一步。本文将深入探讨安能物流如何选择 TiDB 作为核心数据库,以应对高并发、数据处理能力和系统可扩展性等挑战。通过 TiDB 的弹性扩展能力…

《深入理解经典广度优先遍历算法》

广度优先遍历:宽度优先遍历(Breadth-First Search, BFS), 图论和树论中基本的查找搜索算法, 是广大图算法的基础.。 前置知识和介绍 数据结构: 队列, 双端队列。 二叉树:经典bfs,按层bfs(即树的层序遍历)。…

FPGA工具链及功能介绍

一、处理流程 把verilog等源码,变为FPGA中可执行的比特流文件,主要包含这些步骤: 步骤功能转译将verilog代码转化为更详细的语法,增加更多细节内容技术映射将每个vrilog用到的模块,对应到FPGA的物理器件上优化优化冗余…

『python爬虫』使用docling 将pdf或html网页转为MD (保姆级图文)

目录 预览效果安装下载模型测试代码总结 欢迎关注 『python爬虫』 专栏,持续更新中 欢迎关注 『python爬虫』 专栏,持续更新中 预览效果 支持转化pdf的表格 安装 Docling 本身是专注于文档转换的工具,通常用于将文件(如 PDF&…

超详细ensp配置VRRP和MSTP协议

一、简介 1、什么是VRRP: (1)VRRP(Virtual Router Redundancy Protocol)的概念: VRRP(Virtual Router Redundancy Protocol)指的是一种实现路由器冗余备份的协议,常用于…

【案例学习】如何使用Minitab实现包装过程的自动化和改进

Masimo 是一家全球性的医疗技术公司,致力于开发和生产各种行业领先的监控技术,包括创新的测量、传感器和患者监护仪。在 Masimo Hospital Automation 平台的助力下,Masimo 的连接、自动化、远程医疗和远程监控解决方案正在改善医院内外的护理…

【C语言】结构体、联合体、枚举类型的字节大小详解

在C语言中,结构体(struct)和联合体(union) 是常用的复合数据类型,它们的内存布局和字节大小直接影响程序的性能和内存使用。下面为大家详细解释它们的字节大小计算方法,包括对齐规则、内存分配方…

中科亿海微SoM模组——波控处理软硬一体解决方案

本文介绍的波控处理软硬一体解决方案主要是面向相控阵天线控制领域,波控处理通过控制不同天线组件的幅相来调整天线波束的方向和增益,实现高精度角度控制和高增益。本方案由波控处理板、波控处理控制软件算法和上位机软件共同构成。波控处理SoM模组原型样…

Java设计模式 —— 【创建型模式】工厂模式(简单工厂、工厂方法模式、抽象工厂)详解

文章目录 前言一、简单工厂(静态工厂)1、概述2、代码实现3、优缺点 二、工厂方法模式1、概述2、代码实现3、优缺点 三、抽象工厂模式1、概述2、代码实现3、优缺点 四、总结 前言 先看个案例:【手机和手机店】在没有工厂的时候,手…

【阅读记录-章节4】Build a Large Language Model (From Scratch)

文章目录 4. Implementing a GPT model from scratch to generate text4.1 Coding an LLM architecture4.1.1 配置小型 GPT-2 模型4.1.2 DummyGPTModel代码示例4.1.3 准备输入数据并初始化 GPT 模型4.1.4 初始化并运行 GPT 模型 4.2 Normalizing activations with layer normal…

关于VNC连接时自动断联的问题

在服务器端打开VNC Server的选项设置对话框,点左边的“Expert”(专家),然后找到“IdleTimeout”,将数值设置为0,点OK关闭对话框。搞定。 注意,服务端有两个vnc服务,这俩都要设置ide timeout为0才行 附件是v…

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络

遗传算法与深度学习实战(25)——使用Keras构建卷积神经网络 0. 前言1. 卷积神经网络基本概念1.1 卷积1.2 步幅1.3 填充1.4 激活函数1.5 池化 2. 使用 Keras 构建卷积神经网络3. CNN 层的问题4. 模型泛化小结系列链接 0. 前言 卷积神经网络 (Convolution…

使用 Docker Compose 来编排部署LMTNR项目

使用 Docker Compose 来部署一个包含 Linux、MySQL、Tomcat、Nginx 和 Redis 的完整项目的例子。假设我们要部署一个简单的 Java Web 应用,并且使用 Nginx 作为反向代理服务器。 项目目录结构 首先需要确保 Docker 和docker-compose已经安装并正在运行。docker --v…