1
1
package main
2
2
3
3
import (
4
- "bufio"
5
- "fmt"
6
- "log"
7
4
"math"
8
- "os"
9
- "strconv"
10
5
)
11
6
12
7
type Stats struct {
@@ -18,19 +13,15 @@ func (s *Stats) Add(x ...float64) { //append
18
13
}
19
14
20
15
func (s * Stats ) Mean () float64 {
21
- var x float64
22
- x = 0
23
- var i int
24
- for i = 0 ; i < len (s .data ); i ++ {
25
- x = x + s .data [i ]
16
+ mean := 0.0
17
+ for _ , x := range s .data {
18
+ mean += x
26
19
}
27
- x = x / float64 (len (s .data )) //has to divide float by float, not float by integer
28
- return x
20
+ return mean / float64 (len (s .data )) //has to divide float by float, not float by integer
29
21
}
30
22
31
23
func (s * Stats ) Min () float64 {
32
- var min float64
33
- min = 1e100
24
+ min := math .MaxFloat64
34
25
for _ , x := range s .data {
35
26
if x < min {
36
27
min = x
@@ -39,102 +30,29 @@ func (s *Stats) Min() float64 {
39
30
return min
40
31
}
41
32
42
- func (s * Stats ) Add (x ... float64 ) {
43
- s .data = append (s .data , x ... )
44
- }
45
-
46
- func (s * Stats ) Mean () float64 {
47
- var x float64
48
- x = 0
49
- var i int
50
- for i = 0 ; i < len (s .data ); i ++ {
51
- x = x + s .data [i ]
52
- }
53
- x = x / float64 (len (s .data ))
54
- return x
55
- }
56
-
57
33
func (s * Stats ) Max () float64 {
58
- var max float64
59
- max = 0
60
- var i int
61
- for i = 0 ; i < len (s .data ); i ++ {
62
- if s .data [i ] > max {
63
- max = s .data [i ]
34
+ max := - math .MaxFloat64
35
+ for _ , x := range s .data {
36
+ if x > max {
37
+ max = x
64
38
}
65
39
}
66
-
67
40
return max
68
41
}
69
42
70
- func (s * Stats ) Min () float64 {
71
- var max float64
72
- max = 0
73
- var i int
74
- for i = 0 ; i < len (s .data ); i ++ {
75
- if s .data [i ] > max {
76
- max = s .data [i ]
77
- }
43
+ func (s * Stats ) Stan () float64 {
44
+ stdev := 0.0
45
+ for _ , x := range s .data {
46
+ stdev += (x - s .Mean ()) * (x - s .Mean ())
78
47
}
79
-
80
- return max
48
+ stdev = stdev / float64 (len (s .data ))
49
+ stdev = math .Sqrt (stdev )
50
+ return stdev
81
51
}
82
- func main () {
83
- fin , err := os .Open ("CFSB.csv" ) //reading in data set
84
- if err != nil {
85
- log .Fatal (err )
86
- }
87
- defer fin .Close ()
88
- s := bufio .NewScanner (fin )
89
- var data []float64
90
- for s .Scan () {
91
- x , err := strconv .ParseFloat (s .Text (), 64 )
92
- if err != nil {
93
- log .Fatal (err )
94
- }
95
- data = append (data , x )
96
- }
97
-
98
- var mean float64 //calcs stats
99
- for _ , x := range data {
100
- mean = mean + x
101
- }
102
- mean = mean / float64 (len (data ))
103
- fmt .Printf ("Mean: %.3f\n " , mean )
104
52
105
- var max float64
106
- for _ , x := range data {
107
- if x > max {
108
- max = x
109
- }
110
- }
111
- fmt .Printf ("Max: %.3f\n " , max )
112
-
113
- var min float64
114
- min = max + 1
115
- for _ , x := range data {
116
- if x < min {
117
- min = x
118
- }
119
- }
120
- fmt .Printf ("Min: %.3f\n " , min )
121
-
122
- var hist = map [float64 ]int {}
123
- for _ , x := range data {
124
- hist [x ]++
125
- }
126
- var key float64
127
- var val int
128
- for k , v := range hist {
129
- if v > val {
130
- val = v
131
- key = k
132
- }
133
- }
134
- fmt .Printf ("Mode: %.3f (%d)\n " , key , val )
135
-
136
- sorted := make ([]float64 , len (data ))
137
- copy (sorted , data )
53
+ func (s * Stats ) Sort () []float64 {
54
+ sorted := make ([]float64 , len (s .data ))
55
+ copy (sorted , s .data )
138
56
// Insertion sort from https://en.wikipedia.org/wiki/Insertion_sort
139
57
i := 1
140
58
for i < len (sorted ) {
@@ -145,13 +63,8 @@ func main() {
145
63
}
146
64
i ++
147
65
}
148
- fmt .Printf ("Median: %.3f\n " , sorted [len (sorted )/ 2 ])
66
+ return sorted
67
+ }
149
68
150
- var stdev float64
151
- for _ , x := range data {
152
- stdev += (x - mean ) * (x - mean )
153
- }
154
- stdev /= float64 (len (data ) - 1 )
155
- stdev = math .Sqrt (stdev )
156
- fmt .Printf ("Std Dev: %.3f\n " , stdev )
69
+ func main () {
157
70
}
0 commit comments