Skip to content

Commit 8e3d7f2

Browse files
authored
Merge pull request #262 from Joshua-Dias-Barreto/chainedSorting
Added runnable examples for all categories of methods for the DataSeries class
2 parents 6fdbd01 + 51ce6f4 commit 8e3d7f2

1 file changed

Lines changed: 146 additions & 15 deletions

File tree

src/DataFrame/DataSeries.class.st

Lines changed: 146 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,15 @@ DataSeries >> average [
220220
{ #category : #'data-types' }
221221
DataSeries >> calculateDataType [
222222
"Returns the data type of the data series"
223-
223+
224+
"(#(1 2 3) asDataSeries calculateDataType) >>> SmallInteger"
225+
226+
"(#(1 a 3) asDataSeries calculateDataType) >>> Object"
227+
228+
"(#(1.1 2.5 3.7) asDataSeries calculateDataType) >>> SmallFloat64"
229+
230+
"(#(1.1 2.5 3) asDataSeries calculateDataType) >>> Number"
231+
224232
^ self values calculateDataType
225233
]
226234

@@ -270,12 +278,24 @@ DataSeries >> collectWithNotNils: aBlock [
270278
{ #category : #'math functions' }
271279
DataSeries >> correlationWith: otherSeries [
272280
"Calculate the Pearson correlation coefficient between self and the other series"
273-
^ self correlationWith: otherSeries using: DataPearsonCorrelationMethod
281+
282+
"((#(1 2 4) asDataSeries) correlationWith: (#(2 4 8) asDataSeries)) >>> 1."
283+
284+
"((#(1 2 4) asDataSeries) correlationWith: (#(-3 -6 -12) asDataSeries)) >>> -1."
285+
286+
^ self
287+
correlationWith: otherSeries
288+
using: DataPearsonCorrelationMethod
274289
]
275290

276291
{ #category : #'math functions' }
277292
DataSeries >> correlationWith: otherSeries using: aCorrelationCoefficient [
278293
"Calculate the correlation coefficient between self and the other series using the given method"
294+
295+
"((#(1 2 4) asDataSeries) correlationWith: (#(2 4 8) asDataSeries) using: DataPearsonCorrelationMethod) >>> 1."
296+
297+
"((#(1 2 4) asDataSeries) correlationWith: (#(-3 -6 -12) asDataSeries) using: DataPearsonCorrelationMethod) >>> -1."
298+
279299
^ aCorrelationCoefficient between: self and: otherSeries
280300
]
281301

@@ -367,6 +387,12 @@ DataSeries >> eighth [
367387
DataSeries >> encodeOneHot [
368388
"Encode the values of the DataSeries into one-hot vectors."
369389

390+
"(#(a b) asDataSeries encodeOneHot) >>>(#(#(1 0) #(0 1))asDataSeries) "
391+
392+
"(#(1 2 3) asDataSeries encodeOneHot) >>>(#(#(1 0 0) #(0 1 0) #(0 0 1))asDataSeries) "
393+
394+
"(#(23 0.5 542) asDataSeries encodeOneHot) >>>(#(#(0 1 0) #(1 0 0) #(0 0 1))asDataSeries) "
395+
370396
| uniqueValues encodingDataSeries oneHotValues |
371397
uniqueValues := self removeDuplicates sortIfPossible.
372398
encodingDataSeries := self class new.
@@ -515,24 +541,41 @@ DataSeries >> groupByUniqueValuesAndAggregateUsing: aBlock as: aNewName [
515541
{ #category : #testing }
516542
DataSeries >> hasNil [
517543
"return true if data series has at least one nil value"
518-
^ self includes: nil.
544+
545+
"(#(a nil b) asDataSeries hasNil) >>> true"
546+
547+
"(#(a 'nil' b) asDataSeries hasNil) >>> false"
548+
549+
"(#(1 nil 3) asDataSeries hasNil) >>> true"
550+
551+
"(#(1 0 3) asDataSeries hasNil) >>> false"
552+
553+
^ self includes: nil
519554
]
520555

521556
{ #category : #slicing }
522557
DataSeries >> head [
523558
"Returns a data series with first 5 elements of the receiver"
524-
559+
560+
"(#(a b c d e f g h i j) asDataSeries head) >>> (#(a b c d e) asDataSeries)"
561+
562+
"(#(1 2 3 4 5 6 7 8 9 10) asDataSeries head) >>> (#(1 2 3 4 5) asDataSeries)"
563+
525564
^ self head: self defaultHeadTailSize
526565
]
527566

528567
{ #category : #slicing }
529568
DataSeries >> head: aNumber [
530569
"Returns a data series with first aNumber elements of the receiver"
531570

571+
"(#(a b c d e f g h i j) asDataSeries head: 3) >>> (#(a b c) asDataSeries)"
572+
573+
"(#(1 2 3 4 5 6 7 8 9 10) asDataSeries head: 1) >>> (#(1) asDataSeries)"
574+
532575
^ self species
533-
withKeys: (self keys copyFrom: 1 to: aNumber)
534-
values: (self values copyFrom: 1 to: aNumber)
535-
name: self name
576+
withKeys: (self keys copyFrom: 1 to: aNumber)
577+
values: (self values copyFrom: 1 to: aNumber)
578+
name: self name
536579
]
537580

538581
{ #category : #initialization }
@@ -610,6 +653,12 @@ DataSeries >> last [
610653

611654
{ #category : #'math functions' }
612655
DataSeries >> log: base [
656+
"Returns a data series containing the logarithm of each value in the receiver using the specified base."
657+
658+
"(#(1 2 4 8 16) asDataSeries log: 2) >>> (#(0.0 1.0 2.0 3.0 4.0) asDataSeries)"
659+
660+
"(#(1 10 100) asDataSeries log: 10) >>> (#(0.0 1.0 2.0) asDataSeries)"
661+
613662
^ self collect: [ :each | each log: base ]
614663
]
615664

@@ -728,7 +777,7 @@ DataSeries >> reject: aBlock [
728777
{ #category : #removing }
729778
DataSeries >> removeAt: aKey [
730779
"Removes element from the data series with key aKey"
731-
780+
732781
^ self removeKey: aKey
733782
]
734783

@@ -743,13 +792,21 @@ DataSeries >> removeAtIndex: aNumber [
743792
DataSeries >> removeDuplicates [
744793
"Answer the unique values of the receiver by removing duplicates"
745794

795+
"(#(1 2 3 3 2) asDataSeries removeDuplicates) >>> (#(1 2 3))"
796+
797+
"(#(c d b c d d) asDataSeries removeDuplicates) >>> (#(#c #d #b))"
798+
746799
^ self asSet asArray
747800
]
748801

749802
{ #category : #removing }
750803
DataSeries >> removeNils [
751804
"Removes elements with nil values from the data series"
752805

806+
"(#(nil 1 nil nil 2) asDataSeries removeNils) >>> (DataSeries withKeys: #(2 5) values: #(1 2))"
807+
808+
"(#(a b 'nil' nil nil nil) asDataSeries removeNils) >>> (#(a b 'nil') asDataSeries)"
809+
753810
| keysWithNilValues |
754811
keysWithNilValues := OrderedCollection new.
755812
self associationsDo: [ :each |
@@ -761,13 +818,22 @@ DataSeries >> removeNils [
761818
DataSeries >> replaceNilsWith: anObject [
762819
"Replaces nils inplace with anObject"
763820

764-
self withIndexDo: [ :ele :index | ele ifNil: [ self atIndex: index put: anObject ] ]
821+
"(#(a 'nil' nil d nil) asDataSeries replaceNilsWith: #b) >>> (#(a 'nil' b d b) asDataSeries)"
822+
823+
"(#(1 0 nil 3 nil) asDataSeries replaceNilsWith: 7) >>> (#(1 0 7 3 7) asDataSeries)"
824+
825+
self withIndexDo: [ :ele :index |
826+
ele ifNil: [ self atIndex: index put: anObject ] ]
765827
]
766828

767829
{ #category : #replacing }
768830
DataSeries >> replaceNilsWithAverage [
769831
"Replaces nils inplace with average"
770832

833+
"(#(1 2 nil 3 nil) asDataSeries replaceNilsWithAverage) >>> (#(1 2 2 3 2) asDataSeries)"
834+
835+
"(#(3 6 2 9 nil) asDataSeries replaceNilsWithAverage) >>> (#(3 6 2 9 5) asDataSeries)"
836+
771837
| mean |
772838
mean := (self select: [ :ele | ele isNotNil ]) average.
773839
self replaceNilsWith: mean
@@ -777,6 +843,10 @@ DataSeries >> replaceNilsWithAverage [
777843
DataSeries >> replaceNilsWithMedian [
778844
"Replaces nils inplace with median"
779845

846+
"(#(1 2 nil 3) asDataSeries replaceNilsWithMedian) >>> (#(1 2 2 3) asDataSeries)"
847+
848+
"(#(3 7 nil 9 nil) asDataSeries replaceNilsWithMedian) >>> (#(3 7 7 9 7) asDataSeries)"
849+
780850
| median |
781851
median := (self select: [ :ele | ele isNotNil ]) median.
782852
self replaceNilsWith: median
@@ -786,16 +856,23 @@ DataSeries >> replaceNilsWithMedian [
786856
DataSeries >> replaceNilsWithMode [
787857
"Replaces nils inplace with mode"
788858

859+
"(#(1 2 1 3 nil) asDataSeries replaceNilsWithMode) >>> (#(1 2 1 3 1) asDataSeries)"
860+
861+
"(#(a a a b nil) asDataSeries replaceNilsWithMode) >>> (#(a a a b a) asDataSeries)"
862+
789863
| mode |
790864
mode := (self select: [ :ele | ele isNotNil ]) mode.
791865
self replaceNilsWith: mode
792866
]
793867

794868
{ #category : #replacing }
795869
DataSeries >> replaceNilsWithPreviousValue [
796-
797870
"Replaces nils inplace with previous non-nil value"
798871

872+
"(#(nil 2 nil 3 nil) asDataSeries replaceNilsWithPreviousValue) >>> (#(nil 2 2 3 3) asDataSeries)"
873+
874+
"(#(a nil b c nil) asDataSeries replaceNilsWithPreviousValue) >>> (#(a a b c c) asDataSeries)"
875+
799876
| value |
800877
self withIndexDo: [ :ele :index |
801878
index > 1 ifTrue: [ ele ifNil: [ self atIndex: index put: value ] ].
@@ -806,6 +883,10 @@ DataSeries >> replaceNilsWithPreviousValue [
806883
DataSeries >> replaceNilsWithZeros [
807884
"Replaces nils inplace with zero"
808885

886+
"(#(1 2 nil 3 nil) asDataSeries replaceNilsWithZeros) >>> (#(1 2 0 3 0) asDataSeries)"
887+
888+
"(#(a b c d nil) asDataSeries replaceNilsWithZeros) >>> (#(a b c d 0) asDataSeries)"
889+
809890
self replaceNilsWith: 0
810891
]
811892

@@ -859,14 +940,25 @@ DataSeries >> sixth [
859940
{ #category : #sorting }
860941
DataSeries >> sort [
861942
"Arranges a data series in ascending order of its values"
862-
943+
944+
"(#(a c b) asDataSeries sort) >>> (DataSeries withKeys: #(1 3 2) values: #(a b c))"
945+
946+
"(#(500 5 37) asDataSeries sort) >>> (DataSeries withKeys: #(2 3 1) values: #(5 37 500))"
947+
863948
self sort: [ :a :b | a <= b ]
864949
]
865950

866951
{ #category : #sorting }
867952
DataSeries >> sort: aBlock [
868953
"Arranges a data series by applying aBlock on its values"
869954

955+
"(#( z aaa cc ) asDataSeries sort: [ :a :b |
956+
a asString size < b asString size ])
957+
>>> (DataSeries withKeys: #( 1 3 2 ) values: #( z cc aaa ))."
958+
959+
"(#( 500 5 37 ) asDataSeries sort: [ :a :b | a >= b ])
960+
>>> (DataSeries withKeys: #( 1 3 2 ) values: #( 500 37 5 ))"
961+
870962
| associationBlock |
871963
associationBlock := [ :a :b | aBlock value: a value value: b value ].
872964
self sortAssociations: associationBlock
@@ -884,20 +976,35 @@ DataSeries >> sortAssociations: aBlock [
884976
DataSeries >> sortDescending [
885977
"Arranges a data series in descending order of its values"
886978

979+
"(#(a c b) asDataSeries sortDescending) >>> (DataSeries withKeys: #(2 3 1) values: #(c b a))"
980+
981+
"(#(500 5 37) asDataSeries sortDescending) >>> (DataSeries withKeys: #(1 3 2) values: #(500 37 5))"
982+
887983
self sort: [ :a :b | a > b ]
888984
]
889985

890986
{ #category : #sorting }
891987
DataSeries >> sorted [
892988
"Returns a sorted copy of the data series without rearranging the original data series"
893-
989+
990+
"(#(a c b) asDataSeries sorted) >>> (DataSeries withKeys: #(1 3 2) values: #(a b c))"
991+
992+
"(#(500 5 37) asDataSeries sorted) >>> (DataSeries withKeys: #(2 3 1) values: #(5 37 500))"
993+
894994
^ self sorted: [ :a :b | a <= b ]
895995
]
896996

897997
{ #category : #sorting }
898998
DataSeries >> sorted: aBlock [
899999
"Returns a copy of the data series after applying aBlock without rearranging the original data series"
9001000

1001+
"(#( z aaa cc ) asDataSeries sorted: [ :a :b |
1002+
a asString size < b asString size ])
1003+
>>> (DataSeries withKeys: #( 1 3 2 ) values: #( z cc aaa ))."
1004+
1005+
"(#( 500 5 37 ) asDataSeries sorted: [ :a :b | a >= b ])
1006+
>>> (DataSeries withKeys: #( 1 3 2 ) values: #( 500 37 5 ))"
1007+
9011008
| associationBlock |
9021009
associationBlock := [ :a :b | aBlock value: a value value: b value ].
9031010
^ self sortedAssociations: associationBlock
@@ -914,6 +1021,10 @@ DataSeries >> sortedAssociations: aBlock [
9141021
DataSeries >> sortedDescending [
9151022
"Returns a sorted copy of the data series in descending order without rearranging the original data series"
9161023

1024+
"(#(a c b) asDataSeries sortedDescending) >>> (DataSeries withKeys: #(2 3 1) values: #(c b a))"
1025+
1026+
"(#(50 5 37) asDataSeries sortedDescending) >>> (DataSeries withKeys: #(1 3 2) values: #(50 37 5))"
1027+
9171028
^ self sorted: [ :a :b | a > b ]
9181029
]
9191030

@@ -930,6 +1041,12 @@ DataSeries >> stdev [
9301041
DataSeries >> sum [
9311042
"Return the sum of the values over the requested axis. Nil values are excluded."
9321043

1044+
"(#(1 1 1) asDataSeries sum) >>> 3"
1045+
1046+
"(#(1 nil 1) asDataSeries sum) >>> 2"
1047+
1048+
"(#(1 1.1 1) asDataSeries sum) >>> 3.1"
1049+
9331050
| result |
9341051
result := 0.
9351052
self do: [ :each | each ifNotNil: [ result := result + each ] ].
@@ -959,17 +1076,27 @@ DataSeries >> summary [
9591076
DataSeries >> tail [
9601077
"Returns a data series with last 5 elements of the receiver"
9611078

1079+
"(#(a b c d e f) asDataSeries tail) >>> (DataSeries withKeys: #(2 3 4 5 6) values: #(b c d e f) )"
1080+
1081+
"(#(1 2 3 4 5 6 7) asDataSeries tail) >>> (DataSeries withKeys: #(3 4 5 6 7) values: #(3 4 5 6 7) )"
1082+
9621083
^ self tail: self defaultHeadTailSize
9631084
]
9641085

9651086
{ #category : #slicing }
9661087
DataSeries >> tail: aNumber [
9671088
"Returns a data series with last aNumber elements of the receiver"
9681089

1090+
"(#(a b c d e f) asDataSeries tail: 3) >>> (DataSeries withKeys: #(4 5 6) values: #(d e f) )"
1091+
1092+
"(#(1 2 3 4 5 6 7) asDataSeries tail: 2) >>> (DataSeries withKeys: #(6 7) values: #(6 7) )"
1093+
9691094
^ self species
970-
withKeys: (self keys copyFrom: self size - aNumber + 1 to: self size)
971-
values: (self values copyFrom: self size - aNumber + 1 to: self size)
972-
name: self name
1095+
withKeys:
1096+
(self keys copyFrom: self size - aNumber + 1 to: self size)
1097+
values:
1098+
(self values copyFrom: self size - aNumber + 1 to: self size)
1099+
name: self name
9731100
]
9741101

9751102
{ #category : #accessing }
@@ -1165,6 +1292,10 @@ DataSeries >> withSeries: otherDataSeries collect: twoArgBlock [
11651292
DataSeries >> withoutNils [
11661293
"Returns a copy of the data series without the nil values"
11671294

1295+
"(#(nil 1 nil nil 2) asDataSeries withoutNils) >>> (DataSeries withKeys: #(2 5) values: #(1 2))"
1296+
1297+
"(#(a b 'nil' nil nil nil) asDataSeries withoutNils) >>> (#(a b 'nil') asDataSeries)"
1298+
11681299
^ self reject: #isNil
11691300
]
11701301

0 commit comments

Comments
 (0)