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

news2024/11/27 20:23:43

目录

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 pd

list1=[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 pd

list1=[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 pd

list1=[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 3

list2=["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.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)


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.coloradmin.cn/o/2248614.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…

RESTful快速开发

(3)RESTful快速开发 (2)中的控制器仍然存在大量的冗余代码 问题1: 每个方法的RequestMapping注解中都定义了访问路径/users,重复性太高 问题2:每个方法的RequestMapping注解中都要使用method属…

万能门店小程序管理系统 doPageGetFormList SQL注入漏洞复现

0x01 产品简介 万能门店小程序管理系统是一款功能强大的工具,旨在为各行业商家提供线上线下融合的全方位解决方案。是一个集成了会员管理和会员营销两大核心功能的综合性平台。它支持多行业使用,通过后台一键切换版本,满足不同行业商家的个性化需求。该系统采用轻量后台,搭…

【作业九】RNN-SRN-Seq2Seq

点击查看作业内容 目录 1 实现SRN (1)使用numpy实现 (2)在(1)的基础上,增加激活函数tanh (3)使用nn.RNNCell实现 (4)使用nn.RNN实现 2 使用R…

Emgu (OpenCV)

Emgu Github Emgu 环境: Emgu CV 4.9.0 netframework 4.8 1、下载 libemgucv-windesktop-4.9.0.5494.exe 安装后,找到安装路径下的runtime文件夹复制到c#项目Debug目录下 安装目录 c# Debug目录

YOLOv8模型pytorch格式转为onnx格式

一、YOLOv8的Pytorch网络结构 model DetectionModel((model): Sequential((0): Conv((conv): Conv2d(3, 64, kernel_size(3, 3), stride(2, 2), padding(1, 1))(act): SiLU(inplaceTrue))(1): Conv((conv): Conv2d(64, 128, kernel_size(3, 3), stride(2, 2), padding(1, 1))(a…

澳洲房产市场数据清洗、聚类与可视化综合分析

本项目涉及数据清洗及分析时候的思路,如果仅在CSDN中看,可能会显得有些乱,建议去本人和鲸社区对应的项目中去查看,源代码和数据集都是免费下载的。 声明:本项目的成果可无偿分享,用于学习交流。但请勿用于…

IT服务团队建设与管理

在 IT 服务团队中,需要明确各种角色。例如系统管理员负责服务器和网络设备的维护与管理;软件工程师专注于软件的开发、测试和维护;运维工程师则保障系统的稳定运行,包括监控、故障排除等。通过清晰地定义每个角色的职责&#xff0…

go-zero(八) 中间件的使用

go-zero 中间件 一、中间件介绍 中间件(Middleware)是一个在请求和响应处理之间插入的程序或者函数,它可以用来处理、修改或者监控 HTTP 请求和响应的各个方面。 1.中间件的核心概念 请求拦截:中间件能够在请求到达目标处理器之…

Qt Graphics View 绘图架构

Qt Graphics View 绘图架构 "QWGraphicsView.h" 头文件代码如下&#xff1a; #pragma once#include <QGraphicsView>class QWGraphicsView : public QGraphicsView {Q_OBJECTpublic:QWGraphicsView(QWidget *parent);~QWGraphicsView();protected:void mouseM…

【eNSP】动态路由协议RIP和OSPF

动态路由RIP&#xff08;Routing Information Protocol&#xff0c;路由信息协议&#xff09;和OSPF&#xff08;Open Shortest Path First&#xff0c;开放式最短路径优先&#xff09;是两种常见的动态路由协议&#xff0c;它们各自具有不同的特点和使用场景。本篇会对这两种协…

差分 + 模拟,CF 815A - Karen and Game

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 815A - Karen and Game 二、解题报告 1、思路分析 一个经典的差分数组的…

vue3【实战】响应式的登录界面

效果预览 WEB 端效果 移动端效果 技术方案 vue3 vite Element Plus VueRouter UnoCSS TS vueUse AutoImport 技术要点 响应式设计 移动端&#xff1a;图片切换为绝对定位&#xff0c;下移一层&#xff0c;成为背景图片 <el-imageclass"w-screen h-screen lt-md…

加速科技精彩亮相中国国际半导体博览会IC China 2024

11月18日—20日&#xff0c;第二十一届中国国际半导体博览会&#xff08;IC China 2024&#xff09;在北京国家会议中心顺利举办&#xff0c;加速科技携重磅产品及全系测试解决方案精彩亮相&#xff0c;加速科技创始人兼董事长邬刚受邀在先进封装创新发展论坛与半导体产业前沿与…

php反序列化1_常见php序列化的CTF考题

声明&#xff1a; 以下多内容来自暗月师傅我是通过他的教程来学习记录的&#xff0c;如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考&#xff1a;php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…

RustDesk 搭建

RustDesk 服务端下载&#xff1a;https://github.com/rustdesk/rustdesk-server/releases RustDesk 客户端下载&#xff1a;https://github.com/rustdesk/rustdesk/releases RustDesk 官方部署教程&#xff1a;https://rustdesk.com/docs/zh-cn/ 1&#xff1a;RustDesk 概览# 1…

Qt读写Usb设备的数据

Qt读写Usb设备的数据 问题:要读取usb设备进行通讯&#xff0c;qt好像没有对应的库支持。解决&#xff1a;libusbwindow下载 :Linux下载: QtUsb 开源的第三方库库里面的函数说明&#xff1a;window版本&#xff1a;Linux中也提供的直接下载测试代码&#xff1a;库下载&#xff1…

模板初阶,STL简介(C++)

1.模板 1.1泛型编程 在之前的文章中讲过C支持函数重载&#xff0c;比如实现一个交换函数&#xff0c;可以是不同的数据类型&#xff0c;但是这样&#xff0c;需要增加大量函数&#xff0c;且可维护度比较低。 如&#xff1a; void Swap(int& left, int& right) {int …

Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64

yum install 报错: Cannot find a valid baseurl for repo: centos-sclo-rh/x86_64 CentOS7的SCL源在2024年6月30日停止维护了。 当scl源里面默认使用了centos官方的地址&#xff0c;无法连接&#xff0c;需要替换为阿里云。 cd /etc/yum.repos.d/ 找到 CentOS-SCLo-scl.repo 和…

蓝桥杯不知道叫什么题目

小蓝有一个整数&#xff0c;初始值为1&#xff0c;他可以花费一些代价对这个整数进行变换。 小蓝可以花贵1的代价将教数增加1。 小蓝可以花费3的代价将整数增加一个值,这个值是整数的数位中最大的那个(1到9) .小蓝可以花费10的代价将整数变为原来的2倍, 例如&#xff0c;如果整…