在 Debian 中使用 Go 进行数据分析
一 环境准备
二 常用库与用途
三 快速上手示例
示例一 读取 CSV 并计算均值(gota)
package main
import (
"fmt"
"log"
"github.com/go-gota/gota/dataframe"
)
func main() {
df := dataframe.ReadCSV("data.csv")
fmt.Println(df.Head(5))
col := df.Col("value") // 假设存在数值列 "value"
mean := col.Mean()
fmt.Printf("Mean of value: %.2f\n", mean)
}
示例二 处理 Excel 并写回结果(excelize)
package main
import (
"fmt"
"github.com/xuri/excelize/v2"
)
func main() {
f, err := excelize.OpenFile("myBook.xlsx")
if err != nil { panic(err) }
defer f.Close()
sheet := f.GetSheetName(0)
rows, _ := f.GetRows(sheet)
var succ, total []string
for i, r := range rows {
if i == 0 { continue } // 跳过标题
if len(r) > 0 { total = append(total, r[0]) } // A列:全部
if len(r) > 1 && r[1] != "" { succ = append(succ, r[1]) } // B列:成功
}
// 计算差集:全部 - 成功
failed := make([]string, 0)
for _, t := range total {
found := false
for _, s := range succ {
if s == t {
found = true
break
}
}
if !found {
failed = append(failed, t)
}
}
f.SetCellValue(sheet, "C1", "分发失败IP地址")
for i, ip := range failed {
f.SetCellValue(sheet, fmt.Sprintf("C%d", i+2), ip)
}
if err := f.Save(); err != nil { panic(err) }
fmt.Printf("失败数量: %d\n", len(failed))
}
四 性能优化与工程化实践
五 可视化与机器学习扩展