| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- 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) {
- // Create the CSV Reader used to read in data from CSV files
- cr := csv.NewReader(r)
- // Adjusting for 0 based index
- column--
- // Read in all CSV data
- 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
- }
|