feat: Initial version
This commit is contained in:
49
csv.go
Normal file
49
csv.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user