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 │