feat: Initial version

This commit is contained in:
rjianu
2023-07-12 15:05:07 +03:00
commit b1f95ed90c
9 changed files with 326 additions and 0 deletions

49
csv.go Normal file
View File

@@ -0,0 +1,49 @@
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
}