首页 > 其他分享 >【pandas基础】--数据统计

【pandas基础】--数据统计

时间:2023-06-07 13:36:37浏览次数:49  
标签:-- df agg 年级 数据 pandas 统计

在进行统计分析时,pandas提供了多种工具来帮助我们理解数据。
pandas提供了多个聚合函数,其中包括均值、标准差、最大值、最小值等等。
此外,pandas还可以进行基于列的统计分析,例如通过groupby()函数对数据进行聚合,并计算每组的统计分析结果。

除了基本的统计分析之外,pandas还可以进行更高级的分析,例如基于时间序列的分析等。
总之,pandas是一个非常强大的数据处理工具,可以帮助我们更轻松地进行数据分析和探索。

1. 一般统计

拿到数据之后,第一步我们会通过一些常用的统计信息来大体了解下数据的整体情况。
pandas中常用的统计函数有:

  1. .sum():计算对象的总和
  2. .mean():计算对象的平均值
  3. .median():计算对象的中位数
  4. .max():计算对象的最大值
  5. .min():计算对象的最小值
  6. .count():计算对象数量
  7. .std():计算对象标准差
  8. .var():计算对象方差

通过agg函数可以一次将所有的统计信息分析出来。

import pandas as pd

df = pd.DataFrame(
    {
        "数学": [100, 88, 94, 76, 84],
        "语文": [98, 80, 86, 76, 90],
        "英语": [95, 91, 86, 95, 83],
    },
    index=["小红", "小明", "小汪", "小李", "小张"],
)

df.agg(["sum", "mean", "median","max", "min", "count", "std", "var"])

image.png

2. 分组统计

如果要分析的数据集中不同的多个行存在同属于一个分类时,可以先分组之后再用上面的统计分析方法。
比如下面的示例,按年级分组统计的是同一个年级中所有学生的成绩情况,而按学生分组统计的则是该学生在各个年级阶段的成绩情况。

按年级分组统计:
agg函数除了可以指定统计函数,还可以指定统计的列,下面的示例只统计了语文和数学情况)

df = pd.DataFrame(
    {
        "姓名": ["小红", "小明", "小红", "小明", "小汪", "小汪"],
        "年级": ["初二", "初一", "初一", "初二", "初一", "初二"],
        "数学": [100, 88, 94, 76, 84, 78],
        "语文": [98, 80, 86, 76, 90, 88],
        "英语": [95, 91, 86, 95, 83, 65],
    },
)

agg_funcs = ["max", "min", "mean"]
df.groupby(by="年级").agg({"语文": agg_funcs, "数学": agg_funcs})

image.png

按学生分组统计:

df.groupby(by="姓名").agg({"语文": agg_funcs, "数学": agg_funcs})

image.png

3. 透视表

pandas透视表(Pivot Table)是数据分析中的一种非常强大的功能,可以实现数据的按列汇总、按行汇总、按列和行同时汇总、数据透视和数据分析等功能。

同样使用上一节中的示例数据,原始数据中,年级,姓名和分数混在一起,要看按人或者按年级查看成绩情况的时候,需要进行过滤和排序等操作。
image.png

如果使用透视表的话,可以将原始数据中的某些列的值作为新的索引,某些列的值作为新的列,那么数据会更加一目了然。
另外,透视表的结果用来绘制折线图,柱状图等也非常方便。

年级作为索引,姓名作为列名的透视表:

df = pd.DataFrame(
    {
        "姓名": ["小红", "小明", "小红", "小明", "小汪", "小汪"],
        "年级": ["初二", "初一", "初一", "初二", "初一", "初二"],
        "数学": [100, 88, 94, 76, 84, 78],
        "语文": [98, 80, 86, 76, 90, 88],
        "英语": [95, 91, 86, 95, 83, 65],
    },
)

pd.pivot_table(df, values=["数学", "语文", "英语"], index=["年级"], columns=["姓名"])

image.png

姓名作为索引,年级作为列名的透视表:

pd.pivot_table(df, values=["数学", "语文", "英语"], index=["姓名"], columns=["年级"])

image.png

4. 同比和环比

同比和环比是统计中经常用到的概念,用来评估数据的变化情况。
同比一般指跟上一年度同一时期统计的数据的比较,环比一般指跟上一次统计的数据的比较。

原始数据如下(某同学初中三年每学期的平均分):

df = pd.DataFrame(
    {
        "年级": ["初一上", "初一下", "初二上", "初二下", "初三上", "初三下"],
        "平均分": [90, 85, 86, 80, 90, 88],
    },
)

df

image.png

环比就是看每个学期比上个学期是否进步:

df["平均分环比"] = df["平均分"].pct_change(periods=1)
df

image.png
第一条数据是NaN,因为它没有上一条数据可以参考。
pct_change 得出的数值就是同比增长的百分比,负数表示下降的百分比。

同比就是比较每个学年同学期的成绩变化,比如初二上初一上比较,初三下初二下比较等等。

df["平均分同比"] = df["平均分"].pct_change(periods=2)
df

image.png
我们观察这个示例数据,同比环比的差别仅仅在于:同比是隔一个数据比较,而环比是相邻的数据比较。

所以,用pct_change来计算同比的时候,只要设置periods参数为2即可。
periods参数默认为1,所以其实计算环比的时候也可以不设置periods参数。

5. 总结回顾

本篇介绍的数据统计时常用的几种方法,其中分组统计透视表是使用比较频繁的。
上面的示例主要介绍统计的函数,假造的数据非常简单,其实在数据统计时,统计前清理数据,排序数据等才是耗费时间最长的过程。

标签:--,df,agg,年级,数据,pandas,统计
From: https://www.cnblogs.com/wang_yb/p/17463048.html

相关文章

  • 7.17 其他操作方法
    demo1concatStringstrA="www.mldn.cn";StringstrB="www.".concat("mldn").concat(".cn");System.out.println(strB);System.out.println(strA==strB);//和php不同,这里是:falsedemo2......
  • 系统获取 IP 工具类
    packagecn.com.infosec.IDCard.radius.util;/***<p>*{此处加类的实现说明}*</p>**<p>*版权所有:北京信安世纪科技股份有限公司(c)2020*</p>**@author:jlcui*@date:2023-06-0713:15*/importjava.net.Inet4Address;importjava.net.InetAd......
  • 72. 编辑距离
    给你两个单词word1和word2,请返回将word1转换成word2所使用的最少操作数。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例1:输入:word1="horse",word2="ros"输出:3解释:horse->rorse(将'h'替换为'r')rorse->rose(删......
  • stm32永久保存一些参数
     如果需要在程序中永久保存一些参数,可以利用STM32的Flash存储器作为自定义存储器区域。在保存参数时,可以将参数按照一定的编码格式打包成一个字节数组(例如采用结构体表示),然后按照一定的规则写入Flash存储器。1、定义参数结构体定义一个结构体存放要保存的参数。例如,假设要保存......
  • 苹果WWDC发布会总结
    今年的全球开发者大会没有让人失望。在今天的主题演讲中,苹果首次展示了备受期待的混合现实耳机,证实了过去几个月出现的许多谣言。虽然这次苹果的VisionPro耳机成为了焦点,但该公司还发布了一些其他令人兴奋的硬件和软件相关公告。这是活动的所有重大新闻。VisionPro混合现实头......
  • nginx基础
    Web服务器常指的是(worldwideweb,www)服务器、也是HTTP服务器,主要用于提供网上信息浏览。我们大部分人接触互联网,都基本上是通过浏览器访问互联网中各种资源。Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求后才会响应,最终用于提供服务程序的We......
  • 66 return 返回结果 求和
    packagecom.fqs.test;publicclasshello{publicstaticvoidmain(String[]args){//需求:求商场每个季度的营业额获得整年的营业额System.out.println("getSum:"+getSum(1,2,3,4));}publicstaticintgetSum(inta,intb,intc,intd){......
  • C++ 引用 vs 指针
     引用很容易与指针混淆,它们之间有三个主要的不同:不存在空引用。引用必须连接到一块合法的内存。一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。引用必须在创建时被初始化。指针可以在任何时间被初始化。https://www.lekaowan......
  • C++ 中创建引用
     试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。因此,您可以通过原始变量名称或引用来访问变量的内容。例如:inti=17;我们可以为i声明引用变量,如下所示:int&r=i;double&s=d;在这些声明中,&读作引用。因此,第一个......
  • 蛋白质从头测序技术
    1引言测序技术能够为研究学者带来大量的测序数据,而测序技术的不断优化使得测序数据更加准确。从头测序是一项不依赖于任何已知或参考序列的测序技术,它利用生物信息学分析技术将序列片段进行拼接、组装以实现整个序列的鉴定,可用于未知基因组、转录组和蛋白质的全序列分析。......