7  Lab: Built-in for the Win

In this lab we’re going to apply all we’ve learnt so far about the built-in data types and basic language features with some real-world data from the OpenNeuroDatasets.

7.1 Exercises 1

Here’s some data from a public experiment.

Code
RAWDATA = """\
onset   duration    trial_type  rewards
13  0   options_partner  n/a
16  0   decision_risky_partner    25
20.072093   0   outcome_other_neg_partner      0
27.661415   0   options_solo       0
33.796415   0   decision_safe_solo     0
42.856121   0   outcome_safe_solo      0
45.391388   0   happiness_rating      34
56.883578   0   options_social   n/a
65.835578   0   decision_risky_social     21
74.897329   0   outcome_other_pos_social       0
85.472048   0   options_solo       0
95.852048   0   decision_safe_solo     0
108.889945  0   outcome_safe_solo      0
111.425148  0   happiness_rating      32
125.419236  0   options_partner   20
128.419236  0   decision_safe_partner     20
132.457838  0   outcome_safe_partner      20
142.032034  0   options_social    10
145.179034  0   decision_safe_social      10
152.239768  0   outcome_safe_social   10
154.774905  0   happiness_rating      36
170.170194  0   options_solo       0
182.227194  0   decision_safe_solo     0
190.285498  0   outcome_safe_solo      0
197.857785  0   options_social   -25
212.906785  0   decision_safe_social     -25
218.957288  0   outcome_safe_social  -25
221.492477  0   happiness_rating      34
232.567507  0   options_social    15
242.986507  0   decision_safe_social      15
250.031015  0   outcome_safe_social   15
257.603337  0   options_partner  n/a
260.603337  0   decision_risky_partner  18.5
265.909711  0   outcome_other_pos_partner      0
268.444998  0   happiness_rating      34
277.402022  0   options_partner  n/a
280.402022  0   decision_risky_partner     7
284.30704   0   outcome_other_neg_partner      0
290.878961  0   options_solo     n/a
299.346961  0   decision_risky_solo 12.5
306.390476  0   outcome_self_neg_solo      0
308.925866  0   happiness_rating      34
319.617418  0   options_solo      30
329.170418  0   decision_safe_solo    30
336.230193  0   outcome_safe_solo     30
348.806325  0   options_social   n/a
352.850325  0   decision_risky_social     10
362.900485  0   outcome_other_neg_social       0
365.43567   0   happiness_rating      36
378.229089  0   options_partner  -15
381.229089  0   decision_safe_partner    -15
387.035498  0   outcome_safe_partner     -15
395.608814  0   options_solo     -20
400.666814  0   decision_safe_solo   -20
409.71943   0   outcome_safe_solo    -20
412.254679  0   happiness_rating      36
425.698328  0   options_partner  -10
428.698328  0   decision_safe_partner    -10
432.586891  0   outcome_safe_partner     -10
441.160085  0   options_solo      10
450.962085  0   decision_safe_solo    10
462.009382  0   outcome_safe_solo     10
464.544614  0   happiness_rating      36
475.570105  0   options_partner    0
478.570105  0   decision_safe_partner      0
484.826744  0   outcome_safe_partner       0
497.386636  0   options_partner  n/a
500.386636  0   decision_risky_partner  24.5
505.04221   0   outcome_other_neg_partner      0
507.577445  0   happiness_rating      38
523.506321  0   options_solo     -25
533.417321  0   decision_safe_solo   -25
546.457133  0   outcome_safe_solo    -25
554.029535  0   options_partner   10
557.029535  0   decision_safe_partner     10
560.934817  0   outcome_safe_partner      10
563.470099  0   happiness_rating      38
580.800034  0   options_partner    0
583.800034  0   decision_safe_partner      0
588.005449  0   outcome_safe_partner       0
597.579626  0   options_partner  n/a
600.579626  0   decision_risky_partner    27
604.401331  0   outcome_other_neg_partner      0
606.936571  0   happiness_rating      36
618.979118  0   options_solo       0
625.361118  0   decision_safe_solo     0
633.406885  0   outcome_safe_solo      0
639.978503  0   options_social   n/a
646.360503  0   decision_risky_social    8.5
652.404718  0   outcome_other_neg_social       0
654.939858  0   happiness_rating      40
668.467306  0   options_partner  -30
671.467306  0   decision_safe_partner    -30
676.439628  0   outcome_safe_partner     -30
684.012275  0   options_partner  n/a
687.012275  0   decision_risky_partner    42
692.068261  0   outcome_other_neg_partner      0
694.603454  0   happiness_rating      38
707.663534  0   options_social   n/a
712.080534  0   decision_risky_social    4.5
725.126869  0   outcome_other_pos_social       0
732.699192  0   options_solo     -25
739.904192  0   decision_safe_solo   -25
749.962459  0   outcome_safe_solo    -25
752.497674  0   happiness_rating      36
764.590285  0   options_partner  -20
767.590285  0   decision_safe_partner    -20
771.662329  0   outcome_safe_partner     -20
779.234763  0   options_solo     -25
785.175763  0   decision_safe_solo   -25
792.228033  0   outcome_safe_solo    -25
794.763228  0   happiness_rating      36
809.024403  0   options_partner  n/a
812.024403  0   decision_risky_partner  13.5
816.046131  0   outcome_other_neg_partner      0
822.61811   0   options_social   n/a
827.36811   0   decision_risky_social     54
836.428364  0   outcome_other_pos_social       0
838.963641  0   happiness_rating      34
857.444384  0   options_social   -20
868.535384  0   decision_safe_social     -20
877.5931    0   outcome_safe_social  -20
886.166317  0   options_solo     -10
894.735317  0   decision_safe_solo   -10
902.795647  0   outcome_safe_solo    -10
905.330966  0   happiness_rating      34
919.60851   0   options_partner  -30
922.60851   0   decision_safe_partner    -30
928.932253  0   outcome_safe_partner     -30
936.504693  0   options_social   -30
939.278693  0   decision_safe_social     -30
949.331248  0   outcome_safe_social  -30
951.866476  0   happiness_rating      34
963.108331  0   options_social   -20
973.383331  0   decision_safe_social     -20
984.441376  0   outcome_safe_social  -20
995.01607   0   options_social   n/a
1001.53507  0   decision_risky_social     21
1009.593852 0   outcome_other_pos_social       0
1012.129125 0   happiness_rating      36
1027.791092 0   options_social   -15
1032.734092 0   decision_safe_social     -15
1043.786732 0   outcome_safe_social  -15
1054.361298 0   options_social    30
1061.830298 0   decision_safe_social      30
1070.890669 0   outcome_safe_social   30
1073.425867 0   happiness_rating      38
1083.566977 0   options_social   n/a
1090.877977 0   decision_risky_social     21
1101.93096  0   outcome_other_neg_social       0
1115.490485 0   options_partner  -30
1118.490485 0   decision_safe_partner    -30
1122.89696  0   outcome_safe_partner     -30
1125.432252 0   happiness_rating      38
1136.907599 0   options_solo       0
1141.245599 0   decision_safe_solo     0
1150.301231 0   outcome_safe_solo      0
1161.876605 0   options_solo       0
1167.021605 0   decision_safe_solo     0
1177.071675 0   outcome_safe_solo      0
1179.606882 0   happiness_rating      36
1192.600313 0   options_solo     n/a
1200.694313 0   decision_risky_solo -7.5
1211.748317 0   outcome_self_pos_solo      0
1217.318979 0   options_social   n/a
1225.156979 0   decision_risky_social      0
1233.214511 0   outcome_other_pos_social       0
1235.749697 0   happiness_rating      34
1253.413602 0   options_solo      30
1265.045602 0   decision_safe_solo    30
1273.095128 0   outcome_safe_solo     30
1280.667331 0   options_partner    0
1283.667331 0   decision_safe_partner      0
1291.525599 0   outcome_safe_partner       0
1294.060885 0   happiness_rating      34
1301.933544 0   options_social   n/a
1307.381544 0   decision_risky_social      9
1317.42882  0   outcome_other_pos_social       0
1326.001946 0   options_solo      25
1332.868946 0   decision_safe_solo    25
1339.929323 0   outcome_safe_solo     25
1342.464466 0   happiness_rating      32
1355.758003 0   options_partner   30
1358.758003 0   decision_safe_partner     30
1367.350136 0   outcome_safe_partner      30
1373.921441 0   options_solo     -25
1380.220441 0   decision_safe_solo   -25
1388.266282 0   outcome_safe_solo    -25
1390.801237 0   happiness_rating      34
1408.081464 0   options_partner  -15
1411.081464 0   decision_safe_partner    -15
1417.688532 0   outcome_safe_partner     -15
1427.263315 0   options_solo       0
1431.404315 0   decision_safe_solo     0
1439.455158 0   outcome_safe_solo      0
1441.990402 0   happiness_rating      34
1453.349179 0   options_social   -15
1457.004179 0   decision_safe_social     -15
1463.056746 0   outcome_safe_social  -15
1471.629709 0   options_social   n/a
1475.652709 0   decision_risky_social      6
1485.707198 0   outcome_other_neg_social       0
1488.24238  0   happiness_rating      36
1499.9513   0   options_solo     -25
1504.8203   0   decision_safe_solo   -25
1510.87643  0   outcome_safe_solo    -25
1523.452588 0   options_social    10
1530.307588 0   decision_safe_social      10
1539.364813 0   outcome_safe_social   10
1541.89997  0   happiness_rating      36
"""
  1. Copy the data into a python file
  2. Traverse and print the lines. Hint: Look at strings methods
  3. Make a list of all the lines
  4. Split each line into a tuple of 4 elements (representing onset, duration, trial_type and rewards)
  5. Do the same but with dictionaries, that is, for each line you should get a dictionary that looks like this
{
    "onset": some-value,
    "duration": some-value,
    "trial_type": some-value,
    "rewards": some-value,
}
  1. Sort the list of dictionaries according to the rewards value . Hint: Discard missing reward values.
  2. Repeat the same but in descendant order (larger values first).
  3. Make a list of the unique “trial_type” values that appear in the data.
  4. Make a dictionary that counts the number of appearances of each “trial_type”.
  5. Make a list of only the entries where “trial_type” is of type “decision_SOMETHING”
  6. Print for each line a string that follows this pattern:
"For the trial type: <TRIAL-TYPE> the reward is <REWARD-VALUE>"
  1. Write a function called cleanup that takes the raw input string and returns a list of dictionaries (like exercise item 5)