首页 > 其他分享 >【小白学机器学习35】数据表:整洁数据表,交叉表/列联表,以及两者转化pd.pivot_table()

【小白学机器学习35】数据表:整洁数据表,交叉表/列联表,以及两者转化pd.pivot_table()

时间:2024-11-27 10:31:51浏览次数:9  
标签:交叉 35 sample 数据表 小白学 pd pivot table

目录

1 虽然这是个很基础的知识,但是我觉得有必要记录下

2 整洁数据表

3 交叉数据表的2种形式

3.0 交叉表的名字

3.1 2维的交叉表

3.2 用2维表现3维的

3.3 上述内容,具体的markdown文本

4 交叉数据表

4.1 交叉数据表并不整洁

4.2 但是交叉表也很有用:比如求 联合概率+边缘概率

4.3 总结

5 整洁数据表,可以直接pd.pivot_table()转化为交叉表

5.1 pd.pivot_table()  数据透视表公式

5.2 表虽然可以直接转,但是内容也需要合适


1 虽然这是个很基础的知识,但是我觉得有必要记录下

有些数据表很有问题,后导致后续的分析出问题,所以先检查和整理数据表是很有必要的一个步骤。

  • #混乱数据
  1. 数据混乱
  2. 有些甚至把一个单元格填多个数据
  3. 有些虽然看着很清晰,但数据结构混乱
  • #整洁数据
  1. 可读性比较强

2 整洁数据表

整洁数据表

这几个要求看起来很简单,但是有时候也容易忽视。

  • 1.每1列代表1个属性
  • 2.每1行代表1个样本(样本里包含多个数据)
  • 3.每一个单元格,代表1个具体数据
  • 4.每个类型的观察单元构成1个表格(不同类型的观察单元多个表格)
     

3 交叉数据表的2种形式

3.0 交叉表的名字

  • 交叉表
  • 交叉分类表
  • 也叫列联表

3.1 2维的交叉表

  • 常见的交叉表
  • 列:属性1 如颜色
  • 行:属性2 如 城市
  • 单元格,具体数据

3.2 用2维表现3维的

  • 实际上还是2维的
  • 因为我们很难真的表现1个3维表格,虽然理论上可以通过 XYZ这样的三维图表示
  • 其实,用2维表现3维的就是,列的属性,实际是2个维度,
  1. 列的维度1:上午,下午
  2. 列的更高维度,颜色

3.3 上述内容,具体的markdown文本

#混乱数据
数据混乱
有些甚至把一个单元格填多个数据
有些虽然看着很清晰,但数据结构混乱


#整洁数据
可读性比较强



##第1类表格:整洁数据表

1.每1列代表1个属性
2.每1行代表1个样本(样本里包含多个数据)
3.每一个单元格,代表1个具体数据
4.每个类型的观察单元构成1个表格(不同类型的观察单元多个表格)


序号|城市|颜色|销售量
----|----|----|----
1|北京|红色|98
2|北京|蓝色|90
3|上海|红色|86
4|上海|蓝色|95



##第2类表格:数据交叉表

二维

城市\颜|红色|蓝色
----|----|----
北京|98|90
上海|86|95



三维
交叉表|红色| 红色|蓝色| 蓝色
""|上午|下午|上午|下午
----|----|----|----|----
北京|48|50|40|50
上海|46|40|45|40

4 交叉数据表

4.1 交叉数据表并不整洁

  • 从整洁数据的定义上说,交叉数据表“并不整洁”
  • 原因:交叉数据表,往往是列表示一个属性,行也表示了一个属性
  • 行,并不只是一个行样本(多个数据的数组!)

4.2 但是交叉表也很有用:比如求 联合概率+边缘概率

  • 独立概率
  • 联合概率:独立概率1*独立概率2
  • 边缘概率:同1行 /同1列的所有联合概率相加的总和。
  1.  边缘概率分2种:行边缘概率,列边缘概率
  2.  为什么要全部相加?因为同1行/列 代表了所有的可能性,必须全加起来才=边缘概率
  3. (所有行的)Σ边缘概率和=1 = 总概率
  4. (所有列的)Σ边缘概率和=1= 总概率
  • (概率空间的)总概率=1

4.3 总结

  • 我的想法:
  • 整洁数据表:更底层:适合作为原始数据,输入后,进行各种分析
  • 各种上层的表现表形式:
  1. 交叉数据表,本身就是在整洁数据表的一种加工,是一种输出形式!
  2. 其他数据表表现形式

5 整洁数据表,可以直接pd.pivot_table()转化为交叉表

5.1 pd.pivot_table()  数据透视表公式

  •  pd.pivot_table(data=pd.Dataframe, values="单元格列名",aggfunc="sum新生成的求和列",index="横向的列名", columns="纵向的列名")
  • pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All')

参数说明:

  • 数据源
  • data:需要进行数据透视的DataFrame。pd.Dataframe
  • 数据源重组
  • values:用于聚合的列名,默认聚合所有数值列。"原表--单元格列名",
  • index:数据透视表的index,从原数据的列中筛选。"原表--横向的列名",
  • columns:数据透视表的columns,从原数据的列中筛选。"原表--纵向的列名"
  • 重组关键函数
  • aggfunc:用于聚合的函数,默认为’mean’,支持numpy的聚合函数。也可以是"sum"
  • 其他效果
  • fill_value:用于替换结果中的缺失值。
  • margins:添加行/列小计和总计,默认为False。
  • dropna:是否删除所有条目均为NA的列,默认为True。
  • margins_name:总计列的名称,默认为’All’。

sample_dataframe11=pd.DataFrame({"city":sample_array11,
                                "color":sample_array22,
                                 "sales":sample_array33,
                                })
 

#可以把np.Dataframe 直接转化为 交叉表/列联表
crosstable11=pd.pivot_table(data=sample_dataframe11,

                                                values="sales",

                                                 aggfunc="sum",

                                                 index="city",

                                                columns="color")

5.2 表虽然可以直接转,但是内容也需要合适

  • 把 “整洁数据表”转化为交叉表,虽然可以直接用pd.pivot_table(),但是表本身的内容也需要符合,适合转化为交叉表"
  • 例子1数据表本身不适合转化为交叉表,可以转,转完后格式比较奇怪,没啥意义"
  • 例子2:数据表本身很适合转化为交叉表,可以转,转完后很好"
import numpy as np
import pandas as pd
import scipy as sp
%precision 3

print("#把 “整洁数据表”转化为交叉表,虽然可以直接用pd.pivot_table(),但是表本身的内容也需要符合,适合转化为交叉表")
print("#例子1数据表本身不适合转化为交叉表,可以转,转完后格式比较奇怪,没啥意义")

sample_array1=np.array([1,2,3])
sample_array2=np.array([10,20,30])
sample_array3=np.array([100,200,300])

# 注意pd.DataFrame 首字母一定大写
sample_dataframe1=pd.DataFrame({"city":sample_array1,
                                "color":sample_array2,
                                 "sales":sample_array3,
                                })
print(sample_dataframe1)
print()

#可以把np.Dataframe 直接转化为 交叉表/列联表
crosstable1=pd.pivot_table(data=sample_dataframe1,values="sales",aggfunc="sum",index="city",columns="color")
print(crosstable1)
print()

print("#例子2:数据表本身很适合转化为交叉表,可以转,转完后很好")
sample_array11=np.array(["beijing","beijing","shanghai","shanghai"])
sample_array22=np.array(["blue","red","blue","red"])
sample_array33=np.array([100,150,200,120])

# 注意pd.DataFrame 首字母一定大写
sample_dataframe11=pd.DataFrame({"city":sample_array11,
                                "color":sample_array22,
                                 "sales":sample_array33,
                                })
print(sample_dataframe11)
print()

#可以把np.Dataframe 直接转化为 交叉表/列联表
crosstable11=pd.pivot_table(data=sample_dataframe11,values="sales",aggfunc="sum",index="city",columns="color")
print(crosstable11)
print()

标签:交叉,35,sample,数据表,小白学,pd,pivot,table
From: https://blog.csdn.net/xuemanqianshan/article/details/144052623

相关文章

  • OpenHarmony属性信息怎么修改?触觉智能RK3566鸿蒙开发板来演示
    本文介绍在开源鸿蒙OpenHarmony系统下,修改产品属性信息的方法,触觉智能PurplePiOH鸿蒙开发板演示,搭载了瑞芯微RK3566四核处理器,Laval鸿蒙社区推荐开发板,已适配全新OpenHarmony5.0Release系统,感兴趣的小伙伴可以了解下!产品信息属性介绍在OpenHarmony系统图形化界面中,产品属性的......
  • django教育网站-毕业设计源码89335
    摘要教育网站作为一种重要的教育资源平台,在数字化时代发挥着越来越重要的作用。它能够为学生、教师和管理员提供丰富的学习资源和便捷的管理工具,满足他们不断增长的需求。本文旨在设计与开发一款功能完善、用户友好的教育网站。Python作为一门简洁、易学且功能强大的编程语......
  • 《Django 5 By Example》阅读笔记:p339-p358
    《Django5ByExample》学习第12天,p339-p358总结,总计20页。一、技术总结1.项目(购物网站)django-adminstartprojectmyshop虽然这里只是示例,但我觉得这种命名为myxxx的习惯非常不好,因为在实际应用中,是不允许这样命名的,很不规范。二、英语总结(生词:1)1.catalogp341,You......
  • 海波龙系统HFM的数据表和各维度取值方法
    数据表包括DCE表、DCN表、DCT表DCE表格存储和值以及相关的日记账调整。DCN表格存储价值维度剩余成员的数据。DCT表格存储日记账调整。当日记账被过账时,数据值流向DCE和/或DCN表格。表的命名格式:APPNAME_[表][场景][年份]例如:APPNAME_DCE_1_2024,APPNAE应用,DCE表,场景1,年份为20......
  • 程序员35岁会失业吗?
    程序员35岁会失业吗?引言在这个瞬息万变的科技时代,程序员常常感到巨大的压力。年龄,尤其是35岁,似乎成了一个不成文的禁忌,仿佛一旦到达这个节点,程序员的职业生涯就此结束。那么,程序员真的会因为年纪大而失业吗?今天,我们就来聊聊这个话题,探讨年龄与职业发展的关系,技术掌握的重......
  • AbMole| JNJ-42041935(CAS号1193383-09-3;目录号M8963)
    JNJ-42041935是一种高效的,竞争性的,选择性脯氨酰羟化酶PHD抑制剂,对于PHD1,PHD2andPHD3的pKi值分别为7.91±0.04,7.29±0.05和7.65±0.09。生物活性JNJ-42041935是一种有效的,2-氧戊二酸竞争性,可逆性和选择性PHD酶抑制剂。JNJ-42041935是PHD2181-417最有效的抑制剂,其pIC50......
  • DSPf28335 --工程模版相关文件
    创建工程需要的两个文件DSP2833x_common1.cmd下图中的两个文件(由TI公司提供的)1、28335_RAM_lnk.cmd:程序下载到RAM中进行调试和仿真所使用的启动文件。2、F28335.cmd:程序下载到Flash中运行所使用的启动文件。2.gel用来存放一些扩展语言,扩展CCS功能,方便调试,(通常不更改)......
  • 洛谷 P3524 [POI2011] IMP-Party 题解
    题意给定一个\(n\)个点的无向图,其中\(n\)是\(3\)的倍数。保证该图中含有一个\(\frac{2}{3}n\)个点的团。请你找出一个\(\frac{1}{3}n\)个点的团。\(1\leqn\leq3000\)。题解这种题想不出来是不是可以退役了团中任意两点间必有一条边。因此,如果\(u,v\)两点......
  • 体验游浪潮,推动旅游业变革|报告汇总PDF洞察(附原数据表)
    原文链接: https://tecdat.cn/?p=38347休闲游自诞生起便聚焦于探索新鲜体验!人们期待邂逅热情好客的当地人,品尝独特美食,漫步于陌生景致,见证(甚至参与)当地文化传统,畅享原汁原味的异域风情。文末172份旅游行业研究报告最新趋势已分享在交流群,阅读原文进群和500+行业人士共同交流和成......
  • 基于lvgl+ST7735制作一款esp8285的控制面板程序
    要在ESP8285上使用LVGL和ST7735创建一个控制面板程序,你需要遵循以下步骤。这个过程包括设置开发环境,连接硬件,编写代码,以及调校和优化。所需硬件ESP8285开发板:像NodeMCU之类的开发板。ST7735显示屏:通常是1.8英寸或2.0英寸的SPI接口显示屏。电源和连接线:用于连接ESP8285和......