当前位置: 首页 > news >正文

【小白学机器学习35】数据表:整洁数据表,交叉表/列联表,以及两者转化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 3print("#把 “整洁数据表”转化为交叉表,虽然可以直接用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()


http://www.mrgr.cn/news/78213.html

相关文章:

  • VBA技术资料MF232:比较两个工作表
  • vscode利用ofExtensions插件可以调试单进程Openfoam,但是不能调试mpi多进程案例
  • C 语言面向对象
  • ubity3D基础
  • 华为无线AC+AP组网实际应用小结
  • 输入三个整数x,y,z,请把这三个数由小到大输出。-多语言实现
  • 深度学习基础1
  • WinFrom调用webapi接口另一个方法及其应用实例
  • JVM调优篇之JVM基础入门AND字节码文件解读
  • STM32C011开发(2)----nBOOT_SEL设置
  • LLamafactory 批量推理与异步 API 调用效率对比实测
  • 【11-20期】Java面试进阶:深入解析核心问题与实战案例
  • 【机器学习】机器学习学习笔记 - 数据预处理 - 01
  • 【机器学习】机器学习学习笔记 - 监督学习 - KNN线性回归岭回归 - 02
  • QUICK 调试camera-xml解析
  • QT6学习第四天
  • HT4089电子雾化芯片耐高压40V,带OVP保护功能锂电池线性充电管理芯片,应用带屏幕电子雾化行业MCU解决方案
  • win10中使用ffmpeg的filter滤镜
  • 图论入门编程
  • Python学习34天
  • maven <scope>compile</scope>作用
  • 【小白学机器学习34】基础统计2种方法:用numpy的方法np().mean()等进行统计,pd.DataFrame.groupby() 分组统计
  • day01
  • Golang面经
  • Pgsql:json字段查询与更新
  • 基于vite创建的react18项目的单元测试