在 Debian 上使用 Go 进行数据分析
一 环境准备
二 常用库与用途
三 快速上手示例
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")
mean := col.Mean()
fmt.Printf("Mean of value: %.2f\n", mean)
}
package main
import (
"fmt"
"strconv"
"github.com/xuri/excelize/v2"
)
func contains(slice []string, item string) bool {
for _, v := range slice {
if v == item {
return true
}
}
return false
}
func main() {
f, err := excelize.OpenFile("myBook.xlsx")
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
sheet := f.GetSheetName(0)
rows, err := f.GetRows(sheet)
if err != nil {
fmt.Println(err)
return
}
var suc, all []string
for i, row := range rows {
if i == 0 { continue } // 跳过标题
if len(row) > 0 && row[0] != "" {
suc = append(suc, row[0])
}
if len(row) > 1 && row[1] != "" {
all = append(all, row[1])
}
}
var failed []string
for _, ip := range all {
if !contains(suc, ip) {
failed = append(failed, ip)
}
}
fmt.Printf("成功: %d, 全部: %d, 失败: %d\n", len(suc), len(all), len(failed))
f.SetCellValue(sheet, "C1", "分发失败IP地址")
for i, ip := range failed {
cell, _ := excelize.CoordinatesToCellName(3, i+2) // C列,从第2行开始
f.SetCellValue(sheet, cell, ip)
}
if err := f.Save(); err != nil {
fmt.Println(err)
}
}
package main
import (
"log"
"github.com/go-plotly/plotly"
)
func main() {
scatter := plotly.NewScatter()
scatter.X = []float64{1, 2, 3, 4, 5}
scatter.Y = []float64{1.2, 2.2, 3.3, 4.5, 5.5}
scatter.Name = "Scatter"
if err := plotly.NewPlot(scatter, "scatter.html"); err != nil {
log.Fatal(err)
}
}
四 性能与工程化建议