@@ -220,7 +220,15 @@ DataSeries >> average [
220220{ #category : #' data-types' }
221221DataSeries >> 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' }
271279DataSeries >> 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' }
277292DataSeries >> 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 [
367387DataSeries >> 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 }
516542DataSeries >> 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 }
522557DataSeries >> 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 }
529568DataSeries >> 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' }
612655DataSeries >> 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 }
729778DataSeries >> 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 [
743792DataSeries >> 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 }
750803DataSeries >> 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 [
761818DataSeries >> 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 }
768830DataSeries >> 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 [
777843DataSeries >> 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 [
786856DataSeries >> 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 }
795869DataSeries >> 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 [
806883DataSeries >> 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 }
860941DataSeries >> 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 }
867952DataSeries >> 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 [
884976DataSeries >> 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 }
891987DataSeries >> 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 }
898998DataSeries >> 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 [
9141021DataSeries >> 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 [
9301041DataSeries >> 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 [
9591076DataSeries >> 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 }
9661087DataSeries >> 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 [
11651292DataSeries >> 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