50 lines
976 B
Go
50 lines
976 B
Go
package main
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"io"
|
|
"strconv"
|
|
)
|
|
|
|
type statsFunc func(data []float64) float64
|
|
|
|
func sum(data []float64) float64 {
|
|
sum := 0.0
|
|
for _, v := range data {
|
|
sum += v
|
|
}
|
|
return sum
|
|
}
|
|
|
|
func avg(data []float64) float64 {
|
|
return sum(data) / float64(len(data))
|
|
}
|
|
|
|
func csv2float(r io.Reader, column int) ([]float64, error) {
|
|
cr := csv.NewReader(r)
|
|
if column < 1 {
|
|
return nil, fmt.Errorf("%w: please provide a valid column number", ErrInvalidColumn)
|
|
}
|
|
column--
|
|
allData, err := cr.ReadAll()
|
|
if err != nil {
|
|
return nil, fmt.Errorf("cannot read data from file: %w", err)
|
|
}
|
|
var data []float64
|
|
for i, row := range allData {
|
|
if i == 0 {
|
|
continue
|
|
}
|
|
if len(row) <= column {
|
|
return nil, fmt.Errorf("%w: File has only %d columns", ErrInvalidColumn, len(row))
|
|
}
|
|
v, err := strconv.ParseFloat(row[column], 64)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("%w: %s", ErrNotNumber, err)
|
|
}
|
|
data = append(data, v)
|
|
}
|
|
return data, nil
|
|
}
|