数据分析模拟代码示例
以下是一个使用Go语言实现的基础数据分析模拟代码示例,包含数据生成、统计计算和简单可视化功能:
go
package main
import (
"fmt"
"math"
"math/rand"
"time"
)
// 生成模拟数据集
func generateData(size int) []float64 {
rand.Seed(time.Now().UnixNano())
data := make([]float64, size)
for i := 0; i < size; i++ {
data[i] = rand.NormFloat64()*10 + 50 // 正态分布数据,均值50,标准差10
}
return data
}
// 计算基本统计量
func calculateStats(data []float64) (mean, stdDev float64) {
var sum, squareSum float64
n := float64(len(data))
for _, v := range data {
sum += v
squareSum += v * v
}
mean = sum / n
variance := (squareSum - sum*sum/n) / (n - 1)
stdDev = math.Sqrt(variance)
return mean, stdDev
}
// 简单直方图可视化
func plotHistogram(data []float64, bins int) {
min, max := math.Inf(1), math.Inf(-1)
for _, v := range data {
if v < min {
min = v
}
if v > max {
max = v
}
}
bucketSize := (max - min) / float64(bins)
histogram := make([]int, bins)
for _, v := range data {
bin := int((v - min) / bucketSize)
if bin >= bins {
bin = bins - 1
}
histogram[bin]++
}
fmt.Println("\nHistogram:")
for i, count := range histogram {
lower := min + float64(i)*bucketSize
upper := min + float64(i+1)*bucketSize
fmt.Printf("%.1f-%.1f: %s\n", lower, upper, string(make([]rune, count/5)))
}
}
func main() {
// 生成1000个数据点
data := generateData(1000)
// 计算统计量
mean, stdDev := calculateStats(data)
fmt.Printf("Mean: %.2f\nStandard Deviation: %.2f\n", mean, stdDev)
// 绘制直方图
plotHistogram(data, 20)
}
代码功能说明
该代码实现了以下数据分析模拟功能:
数据生成 :使用math/rand包生成符合正态分布的模拟数据,设置均值为50,标准差为10
统计分析:计算数据集的平均值和标准差,使用标准统计公式:
- 平均值:\\mu = \\frac{\\sum x_i}{n}
- 标准差:\\sigma = \\sqrt{\\frac{\\sum (x_i - \\mu)\^2}{n-1}}
可视化:在终端输出简单的直方图,将数据范围划分为20个区间并显示每个区间的数据点数量
扩展建议
对于更复杂的数据分析需求,可以考虑以下扩展:
go
// 添加线性回归功能
func linearRegression(x, y []float64) (slope, intercept float64) {
var sumX, sumY, sumXY, sumX2 float64
n := float64(len(x))
for i := range x {
sumX += x[i]
sumY += y[i]
sumXY += x[i] * y[i]
sumX2 += x[i] * x[i]
}
slope = (n*sumXY - sumX*sumY) / (n*sumX2 - sumX*sumX)
intercept = (sumY - slope*sumX) / n
return slope, intercept
}
// 添加数据过滤功能
func filterData(data []float64, min, max float64) []float64 {
var filtered []float64
for _, v := range data {
if v >= min && v <= max {
filtered = append(filtered, v)
}
}
return filtered
}
该示例提供了数据分析的基础框架,可以根据具体需求进一步扩展功能或集成更专业的数据分析库。