Julia DataFrames ---- by 函数详解

1、支持的统计函数

其中大部分函数是使用的Base 或者Statistics的内置函数#(`sum`, `prod`,`minimum`, `maximum`, `mean`, `var`, `std`, `first`, `last` and `length`)

,只有其中的sdt函数是在DataFrame中定义的。

# 可以按照列名(可以是多列)分组, 对其他列(Vector)做计算,可以计算多列,可以计算的时候重命名列

# mean  平均值 ,

# var      计算基于给定样本的方差,概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。

 样本方差计算公式:

S^2= ∑(X-) ^2 / (n-1) [2]S^2为样本方差,X为变量,为样本均值,n为样本例数。

# sdt       标准偏差(Std Dev,Standard Deviation) -统计学名词,标准差是方差的算术平方根。一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。标准偏差的大小可通过标准偏差与平均值的倍率关系来衡量,样本标准偏差计算公式:
代表所采用的样本X1,X2,...,Xn的均值。

# minimum  :列中最小

# maximum :列中最大

# median:    函数是一种计算机函数,能够返回给定数值的中值,中值是在一组数值中居于中间的数值,如果参数集合中包含偶数个数字,函数 MEDIAN 将返回位于中间的两个数的平均值。

# eltype       :列中每个值的类型

# first          :列中第一个值

# last           :列中最后个值

# sum          :求和

# prod         :prod函数用于求一列元素的乘积,可用于求积。

# length      :列的长度

 

2 代码示例

using DataFrames, CSV, Statistics

iris = DataFrame(CSV.File(joinpath(dirname(pathof(DataFrames)),"C:/D/Julia/DataFrames/DataFrames.jl/docs/src/assets/iris.csv")));

# 按照:Species 分组, 对其他列(Vector)做计算,可以计算多列,也可以重命名列
by(iris, :Species, :PetalLength => mean)
# 3×2 DataFrame
# │ Row │ Species         │ PetalLength_mean │
# │     │ String          │ Float64          │
# ├─────┼─────────────────┼──────────────────┤
# │ 1   │ Iris-setosa     │ 1.45             │
# │ 2   │ Iris-versicolor │ 4.8              │
# │ 3   │ Iris-virginica  │ 5.95             │
by(iris, [:Species,:SepalWidth], :PetalLength => mean)
# 6×3 DataFrame
# │ Row │ Species         │ PetalLength │ PetalLength_mean │
# │     │ String          │ Float64     │ Float64          │
# ├─────┼─────────────────┼─────────────┼──────────────────┤
# │ 1   │ Iris-setosa     │ 1.4         │ 1.4              │
# │ 2   │ Iris-setosa     │ 1.5         │ 1.5              │
# │ 3   │ Iris-versicolor │ 4.7         │ 4.7              │
# │ 4   │ Iris-versicolor │ 4.9         │ 4.9              │
# │ 5   │ Iris-virginica  │ 6.0         │ 6.0              │
# │ 6   │ Iris-virginica  │ 5.9         │ 5.9              │

# mean 平均值 ,
by(iris, :Species, :PetalLength => mean)
# 3×2 DataFrame
# │ Row │ Species         │ PetalLength_mean │
# │     │ String          │ Float64          │
# ├─────┼─────────────────┼──────────────────┤
# │ 1   │ Iris-setosa     │ 1.45             │
# │ 2   │ Iris-versicolor │ 4.8              │
# │ 3   │ Iris-virginica  │ 5.95             │

# var 计算基于给定样本的方差,概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。
by(iris, :Species, :PetalLength => var)
# 3×2 DataFrame
# │ Row │ Species         │ PetalLength_var │
# │     │ String          │ Float64         │
# ├─────┼─────────────────┼─────────────────┤
# │ 1   │ Iris-setosa     │ 0.005           │
# │ 2   │ Iris-versicolor │ 0.02            │
# │ 3   │ Iris-virginica  │ 0.005           │

# minimum 列中最小
# maximum 列中最大
by(iris, :Species,minimum = :PetalLength => minimum,maximum = :PetalLength => maximum)
# 3×3 DataFrame
# │ Row │ Species         │ minimum │ maximum │
# │     │ String          │ Float64 │ Float64 │
# ├─────┼─────────────────┼─────────┼─────────┤
# │ 1   │ Iris-setosa     │ 1.4     │ 1.5     │
# │ 2   │ Iris-versicolor │ 4.7     │ 4.9     │
# │ 3   │ Iris-virginica  │ 5.9     │ 6.0     │


# median: 函数是一种计算机函数,能够返回给定数值的中值,中值是在一组数值中居于中间的数值,如果参数集合中包含偶数个数字,函数 MEDIAN 将返回位于中间的两个数的平均值。
by(iris, :Species,median = :PetalLength => median)
# 3×2 DataFrame
# │ Row │ Species         │ median  │
# │     │ String          │ Float64 │
# ├─────┼─────────────────┼─────────┤
# │ 1   │ Iris-setosa     │ 1.45    │
# │ 2   │ Iris-versicolor │ 4.8     │
# │ 3   │ Iris-virginica  │ 5.95    │

# eltype 列中每个值的类型
by(iris, :Species,eltype = :PetalLength => eltype)
# 3×2 DataFrame
# │ Row │ Species         │ eltype   │
# │     │ String          │ DataType │
# ├─────┼─────────────────┼──────────┤
# │ 1   │ Iris-setosa     │ Float64  │
# │ 2   │ Iris-versicolor │ Float64  │
# │ 3   │ Iris-virginica  │ Float64  │

# first 列中第一个值
# last 列中最后个值
# length 列的长度
by(iris, :Species,first = :PetalLength => first,last = :PetalLength => last,length = :PetalLength => length)
# 3×4 DataFrame
# │ Row │ Species         │ first   │ last    │ length │
# │     │ String          │ Float64 │ Float64 │ Int64  │
# ├─────┼─────────────────┼─────────┼─────────┼────────┤
# │ 1   │ Iris-setosa     │ 1.4     │ 1.5     │ 2      │
# │ 2   │ Iris-versicolor │ 4.7     │ 4.9     │ 2      │
# │ 3   │ Iris-virginica  │ 6.0     │ 5.9     │ 2      │

# sum 求和
# prod  prod函数用于求一列元素的乘积,可用于求积。
by(iris, :Species, sum = :PetalLength => sum,prod = :PetalWidth => prod)
# 3×3 DataFrame
# │ Row │ Species         │ sum     │ prod    │
# │     │ String          │ Float64 │ Float64 │
# ├─────┼─────────────────┼─────────┼─────────┤
# │ 1   │ Iris-setosa     │ 2.9     │ 0.04    │
# │ 2   │ Iris-versicolor │ 9.6     │ 2.1     │
# │ 3   │ Iris-virginica  │ 11.9    │ 5.25    │

#比较复杂的计算
by(iris, :Species, [:PetalLength, :SepalLength] =>
              x -> (a=mean(x.PetalLength)/mean(x.SepalLength), b=sum(x.PetalLength)))
              # 3×3 DataFrame
              # │ Row │ Species         │ a        │ b       │
              # │     │ String          │ Float64  │ Float64 │
              # ├─────┼─────────────────┼──────────┼─────────┤
              # │ 1   │ Iris-setosa     │ 0.292929 │ 2.9     │
              # │ 2   │ Iris-versicolor │ 0.690647 │ 9.6     │
              # │ 3   │ Iris-virginica  │ 0.88806  │ 11.9    │

#by 函数支持 do 代码块.
by(iris, :Species) do df
    (m = mean(df.PetalLength), s² = var(df.PetalLength))
end

# 3×3 DataFrame
# │ Row │ Species         │ m       │ s²      │
# │     │ String          │ Float64 │ Float64 │
# ├─────┼─────────────────┼─────────┼─────────┤
# │ 1   │ Iris-setosa     │ 1.45    │ 0.005   │
# │ 2   │ Iris-versicolor │ 4.8     │ 0.02    │
# │ 3   │ Iris-virginica  │ 5.95    │ 0.005   │

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

October-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值