montanaflynn/stats

GitHub: montanaflynn/stats

一个零依赖、经过充分测试的 Golang 统计学计算库,提供丰富的描述性统计、回归分析和假设检验等功能。

Stars: 3022 | Forks: 174

# Stats - Golang 统计包 [![](https://img.shields.io/github/actions/workflow/status/montanaflynn/stats/go.yml)][action-url] [![](https://img.shields.io/codecov/c/github/montanaflynn/stats?token=wnw8dActnH)][codecov-url] [![](https://goreportcard.com/badge/github.com/montanaflynn/stats)][goreport-url] [![](https://godoc.org/github.com/montanaflynn/stats?status.svg)][godoc-url] [![](https://gistcdn.githack.com/montanaflynn/b02f1d78d8c0de8435895d7e7cd0d473/raw/17f2a5a69f1323ecd42c00e0683655da96d9ecc8/badge.svg)][pkggodev-url] [![](https://img.shields.io/badge/license-MIT-blue.svg)][license-url] 一个经过充分测试且功能全面的 Golang 统计库 / 包 / 模块,无任何依赖。 如果您有任何建议、问题或 bug 报告,请[创建一个 issue](https://github.com/montanaflynn/stats/issues),我会尽力为您提供帮助。此外,给本仓库点个 Star 就是对该项目最大的支持,非常感谢! ## 安装 ``` go get github.com/montanaflynn/stats ``` ## 示例用法 所有函数都可以在 [examples/functions/main.go](examples/functions/main.go) 中查看,这里有一个简单的示例: ``` // start with some source data to use data := []float64{1.0, 2.1, 3.2, 4.823, 4.1, 5.8} // you could also use different types like this // data := stats.LoadRawData([]int{1, 2, 3, 4, 5}) // data := stats.LoadRawData([]interface{}{1.1, "2", 3}) // etc... median, _ := stats.Median(data) fmt.Println(median) // 3.65 roundedMedian, _ := stats.Round(median, 0) fmt.Println(roundedMedian) // 4 ``` ## 文档 完整的 API 文档可在 [GoDoc.org](http://godoc.org/github.com/montanaflynn/stats) 或 [pkg.go.dev](https://pkg.go.dev/github.com/montanaflynn/stats) 上查看。 你也可以使用以下命令离线查看文档: ``` # 命令行 godoc . # show all exported apis godoc . Median # show a single function godoc -ex . Round # show function with example godoc . Float64Data # show the type and methods # 本地网站 godoc -http=:4444 # start the godoc server on port 4444 open http://localhost:4444/pkg/github.com/montanaflynn/stats/ ``` 导出的 API 如下所示: ``` var ( ErrEmptyInput = statsError{"Input must not be empty."} ErrNaN = statsError{"Not a number."} ErrNegative = statsError{"Must not contain negative values."} ErrZero = statsError{"Must not contain zero values."} ErrBounds = statsError{"Input is outside of range."} ErrSize = statsError{"Must be the same length."} ErrInfValue = statsError{"Value is infinite."} ErrYCoord = statsError{"Y Value must be greater than zero."} ) func Round(input float64, places int) (rounded float64, err error) {} type Float64Data []float64 func LoadRawData(raw interface{}) (f Float64Data) {} func AutoCorrelation(data Float64Data, lags int) (float64, error) {} func ChebyshevDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} func Correlation(data1, data2 Float64Data) (float64, error) {} func Covariance(data1, data2 Float64Data) (float64, error) {} func CovariancePopulation(data1, data2 Float64Data) (float64, error) {} func CumulativeSum(input Float64Data) ([]float64, error) {} func Describe(input Float64Data, allowNaN bool, percentiles *[]float64) (*Description, error) {} func DescribePercentileFunc(input Float64Data, allowNaN bool, percentiles *[]float64, percentileFunc func(Float64Data, float64) (float64, error)) (*Description, error) {} func Entropy(input Float64Data) (float64, error) {} func EuclideanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} func GeometricMean(input Float64Data) (float64, error) {} func HarmonicMean(input Float64Data) (float64, error) {} func InterQuartileRange(input Float64Data) (float64, error) {} func ManhattanDistance(dataPointX, dataPointY Float64Data) (distance float64, err error) {} func Max(input Float64Data) (max float64, err error) {} func Mean(input Float64Data) (float64, error) {} func Median(input Float64Data) (median float64, err error) {} func MedianAbsoluteDeviation(input Float64Data) (mad float64, err error) {} func MedianAbsoluteDeviationPopulation(input Float64Data) (mad float64, err error) {} func Midhinge(input Float64Data) (float64, error) {} func Min(input Float64Data) (min float64, err error) {} func MinkowskiDistance(dataPointX, dataPointY Float64Data, lambda float64) (distance float64, err error) {} func Mode(input Float64Data) (mode []float64, err error) {} func NormBoxMullerRvs(loc float64, scale float64, size int) []float64 {} func NormCdf(x float64, loc float64, scale float64) float64 {} func NormEntropy(loc float64, scale float64) float64 {} func NormFit(data []float64) [2]float64{} func NormInterval(alpha float64, loc float64, scale float64 ) [2]float64 {} func NormIsf(p float64, loc float64, scale float64) (x float64) {} func NormLogCdf(x float64, loc float64, scale float64) float64 {} func NormLogPdf(x float64, loc float64, scale float64) float64 {} func NormLogSf(x float64, loc float64, scale float64) float64 {} func NormMean(loc float64, scale float64) float64 {} func NormMedian(loc float64, scale float64) float64 {} func NormMoment(n int, loc float64, scale float64) float64 {} func NormPdf(x float64, loc float64, scale float64) float64 {} func NormPpf(p float64, loc float64, scale float64) (x float64) {} func NormSample(loc float64, scale float64, size int) []float64 {} func NormPpfRvs(loc float64, scale float64, size int) []float64 {} func NormSf(x float64, loc float64, scale float64) float64 {} func NormStats(loc float64, scale float64, moments string) []float64 {} func NormStd(loc float64, scale float64) float64 {} func NormVar(loc float64, scale float64) float64 {} func Pearson(data1, data2 Float64Data) (float64, error) {} func Percentile(input Float64Data, percent float64) (percentile float64, err error) {} func PercentileNearestRank(input Float64Data, percent float64) (percentile float64, err error) {} func PercentileWeighted(data, weights Float64Data, percent float64) (percentile float64, err error) {} func PopulationSkewness(input Float64Data) (float64, error) {} func PopulationVariance(input Float64Data) (pvar float64, err error) {} func Sample(input Float64Data, takenum int, replacement bool) ([]float64, error) {} func SampleSkewness(input Float64Data) (float64, error) {} func SampleVariance(input Float64Data) (svar float64, err error) {} func Skewness(input Float64Data) (float64, error) {} func Spearman(data1, data2 Float64Data) (float64, error) {} func Sigmoid(input Float64Data) ([]float64, error) {} func SoftMax(input Float64Data) ([]float64, error) {} func StableSample(input Float64Data, takenum int) ([]float64, error) {} func StandardDeviation(input Float64Data) (sdev float64, err error) {} func StandardDeviationPopulation(input Float64Data) (sdev float64, err error) {} func StandardDeviationSample(input Float64Data) (sdev float64, err error) {} func StdDevP(input Float64Data) (sdev float64, err error) {} func StdDevS(input Float64Data) (sdev float64, err error) {} func Sum(input Float64Data) (sum float64, err error) {} func TTest(data1, data2 Float64Data, populationMean float64) (t float64, pvalue float64, err error) {} func Trimean(input Float64Data) (float64, error) {} func VarP(input Float64Data) (sdev float64, err error) {} func VarS(input Float64Data) (sdev float64, err error) {} func Variance(input Float64Data) (sdev float64, err error) {} func ZTest(data1, data2 Float64Data, populationMean, populationStdDev float64) (z float64, pvalue float64, err error) {} func ProbGeom(a int, b int, p float64) (prob float64, err error) {} func ExpGeom(p float64) (exp float64, err error) {} func VarGeom(p float64) (exp float64, err error) {} type Coordinate struct { X, Y float64 } type Series []Coordinate func ExponentialRegression(s Series) (regressions Series, err error) {} func LinearRegression(s Series) (regressions Series, err error) {} func LogarithmicRegression(s Series) (regressions Series, err error) {} type Outliers struct { Mild Float64Data Extreme Float64Data } type Quartiles struct { Q1 float64 Q2 float64 Q3 float64 } func Quartile(input Float64Data) (Quartiles, error) {} func QuartileOutliers(input Float64Data) (Outliers, error) {} ``` ## 发布 发布通过 GitHub Actions 使用 [GoReleaser](https://goreleaser.com/) 自动完成。要创建新版本,请推送一个版本标签: ``` git tag v0.x.x git push origin v0.x.x ``` ## MIT 开源许可证 版权所有 (c) 2014-2026 Montana Flynn (https://montanaflynn.com) 特此免费授予任何获得本软件副本及相关文档文件(下称“本软件”)的人不受限制地处置本软件的权利,包括不受限制地享有使用、复制、修改、合并、发布、分发、再授权和/或售卖本软件副本的权利,以及授权享有本软件的人做出前述行为,但须符合以下条件: 上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。 本软件“按原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途的适用性和非侵权保证。在任何情况下,作者或版权持有人均不对因本软件或使用本软件或其他处置行为而产生的任何索赔、损害或其他责任承担责任,无论该等责任是基于合同行为、侵权行为还是由其他事由引起的。
标签:EVTX分析, Go, Ruby工具, 开发组件, 数学库, 日志审计, 统计学