Skip to content

Commit 7070f84

Browse files
committed
Make average work as in pandas
1 parent f7faade commit 7070f84

File tree

4 files changed

+38
-2
lines changed

4 files changed

+38
-2
lines changed

src/DataFrame-Math/DataPearsonCorrelationMethod.class.st

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ DataPearsonCorrelationMethod class >> between: x and: y [
1111
| xDeviation yDeviation |
1212
x size = y size ifFalse: [ SizeMismatch signal: 'Correlation can not be calculated for two series of different size' ].
1313

14-
xDeviation := (x values replaceAll: nil with: 0) - x average.
15-
yDeviation := (y values replaceAll: nil with: 0) - y average.
14+
xDeviation := (x values replaceAll: nil with: 0) - (x sum / x size).
15+
yDeviation := (y values replaceAll: nil with: 0) - (y sum / y size).
1616

1717
^ (xDeviation * yDeviation) sum / ((xDeviation ** 2) sum * (yDeviation ** 2) sum) sqrt
1818
]

src/DataFrame-Tests/DataFrameStatsTest.class.st

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,23 @@ DataFrameStatsTest >> testAverage [
3232
self assert: actual closeTo: expected
3333
]
3434

35+
{ #category : #tests }
36+
DataFrameStatsTest >> testAverageWithNils [
37+
38+
| expected actual |
39+
df := DataFrame withRows: #( #( 1 1 ) #( 2 nil ) #( nil 3 ) #( 4 4 ) ).
40+
df columnNames: #( dogs cats ).
41+
42+
expected := {
43+
(7 / 3).
44+
(8 / 3) } asDataSeries.
45+
expected name: #average.
46+
expected keys: df columnNames.
47+
48+
actual := df average.
49+
self assert: actual closeTo: expected
50+
]
51+
3552
{ #category : #tests }
3653
DataFrameStatsTest >> testCorrelationMatrix [
3754

src/DataFrame-Tests/DataSeriesTest.class.st

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,18 @@ DataSeriesTest >> testAtTransformIfAbsent [
531531
self assert: exceptionBlockEvaluated
532532
]
533533

534+
{ #category : #'tests - arithmetic' }
535+
DataSeriesTest >> testAverage [
536+
537+
self assert: #( 1 2 3 4 ) asDataSeries average equals: 5 / 2
538+
]
539+
540+
{ #category : #'tests - arithmetic' }
541+
DataSeriesTest >> testAverageWithNils [
542+
543+
self assert: #( 2 nil 4 ) asDataSeries average equals: 3
544+
]
545+
534546
{ #category : #'tests - comparing' }
535547
DataSeriesTest >> testBooleanGreaterThanEqualFromScalar [
536548

src/DataFrame/DataSeries.class.st

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ DataSeries >> atIndex: aNumber transform: aBlock [
160160
self at: key transform: aBlock
161161
]
162162

163+
{ #category : #information }
164+
DataSeries >> average [
165+
"We do not count the nils"
166+
167+
^ (self values reject: #isNil) average
168+
]
169+
163170
{ #category : #'data-types' }
164171
DataSeries >> calculateDataType [
165172

0 commit comments

Comments
 (0)