csv.go 1010 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package main
  2. import (
  3. "encoding/csv"
  4. "fmt"
  5. "io"
  6. "strconv"
  7. )
  8. type statsFunc func(data []float64) float64
  9. func sum(data []float64) float64 {
  10. sum := 0.0
  11. for _, v := range data {
  12. sum += v
  13. }
  14. return sum
  15. }
  16. func avg(data []float64) float64 {
  17. return sum(data) / float64(len(data))
  18. }
  19. func csv2float(r io.Reader, column int) ([]float64, error) {
  20. // Create the CSV Reader used to read in data from CSV files
  21. cr := csv.NewReader(r)
  22. cr.ReuseRecord = true
  23. // Adjusting for 0 based index
  24. column--
  25. var data []float64
  26. for i := 0; ; i++ {
  27. row, err := cr.Read()
  28. if err == io.EOF {
  29. break
  30. }
  31. if err != nil {
  32. return nil, fmt.Errorf("cannot read data from file: %w", err)
  33. }
  34. if i == 0 {
  35. continue
  36. }
  37. if len(row) <= column {
  38. return nil, fmt.Errorf("%w: file has only %d columns", ErrInvalidColumn, len(row))
  39. }
  40. v, err := strconv.ParseFloat(row[column], 64)
  41. if err != nil {
  42. return nil, fmt.Errorf("%w: %s", ErrNotNumber, err)
  43. }
  44. data = append(data, v)
  45. }
  46. return data, nil
  47. }