In [4]:
import csv
import numpy as np

tempsLst = []
with open("nino34.csv") as ifh:
    nino = csv.DictReader(ifh)
    for row in nino:
        tempsLst.append(float(row["TOTAL"]))
        
#print(tempsLst)

temps = np.array(tempsLst)
median = 20.0
half = len(temps)//2
while len(temps[temps < median]) < half:
    #if len(temps[temps < median]) < half:
    #    median += 0.1
    #else:
    #    median -= 0.1
    median += 0.1
    #print("Median so far", median)
        
print(median)
27.0000000000001
In [5]:
a = np.array([
    1.01, 0.57, 0.64, 0.14, -0.09, 0.96
])

b = np.where(
    a < 0,  # Condition
    a * -1, # Values to use where true
    a * 2   # Values to use where false
)

print(a)
print(b)
[ 1.01  0.57  0.64  0.14 -0.09  0.96]
[2.02 1.14 1.28 0.28 0.09 1.92]
In [9]:
a = np.array([
    1.01, 0.57, 0.64, 0.14, -0.09, 0.96
])

b = np.where(
    a < 0, # if val < 0:
    0,     # use 0
    np.where(
        a > 1, # elif val > 1:
        1,     # use 1
        a      # else: use original value
    )
)

print(a)
print(b)
[ 1.01  0.57  0.64  0.14 -0.09  0.96]
[1.   0.57 0.64 0.14 0.   0.96]
In [19]:
import csv
import matplotlib.pyplot as plt
import numpy as np

monsLst = []
tempsLst = []
with open("nino34.csv") as ifh:
    nino = csv.DictReader(ifh)
    for row in nino:
        monsLst.append(f"{row['YR']}-{row['MON']}")
        tempsLst.append(float(row["TOTAL"]))
        
#print(monsLst)
#print(tempsLst)

mons = np.array(monsLst)
temps = np.array(tempsLst)
mean = np.mean(temps)
stddev = np.std(temps)
mask = (
    (temps < mean - 2*stddev) |
    (temps > mean + 2*stddev)
)
#print(mask)
monsMasked = mons[mask]
tempsMasked = temps[mask]
#print(monsMasked)
#print(tempsMasked)

print(
    f"Mean temperature: {mean}. Std. dev.: {stddev}. " +
    f"Expected range: {mean-2*stddev} to {mean+2*stddev}."
)
print("Outlier samples:")
#for temp in tempsMasked:
#for mon in monsMasked:
for idx in range(len(tempsMasked)):
    print(f"  {monsMasked[idx]}: {tempsMasked[idx]}")
    
plt.plot(temps)

xsMasked = np.array(range(len(temps)))[mask]
plt.plot(xsMasked, tempsMasked, "ro")

plt.show()
Mean temperature: 26.906149614961496. Std. dev.: 0.9838960316810499. Expected range: 24.938357551599395 to 28.873941678323597.
Outlier samples:
  1950-1: 24.56
  1955-10: 24.41
  1955-11: 24.25
  1955-12: 24.57
  1971-1: 24.82
  1973-10: 24.74
  1973-11: 24.34
  1973-12: 24.34
  1974-1: 24.47
  1975-10: 24.89
  1975-12: 24.67
  1976-1: 24.54
  1983-1: 28.88
  1988-10: 24.82
  1988-11: 24.66
  1988-12: 24.64
  1989-1: 24.59
  1992-4: 29.02
  1992-5: 28.97
  1997-10: 29.07
  1997-11: 29.11
  1997-12: 28.89
  1998-1: 28.93
  1998-12: 24.92
  1999-1: 24.87
  1999-12: 24.87
  2000-1: 24.79
  2008-1: 24.87
  2015-6: 28.9
  2015-9: 28.92
  2015-10: 29.07
  2015-11: 29.41
  2015-12: 29.26
  2016-1: 29.11
  2016-2: 29.0
  2016-3: 28.9
In [20]:
#!wget https://student.cs.uwaterloo.ca/~cs114/src/sparse.csv

with open("sparse.csv") as ifh:
    scores = csv.DictReader(ifh)
    fieldnames = list(scores.fieldnames or [])
    for row in scores:
        studentScores = []
        scoreMask = []
        for field in fieldnames:
            if field != "Student ID":
                val = row[field]
                if val == "":
                    studentScores.append(0.0)
                    scoreMask.append(False)
                else:
                    studentScores.append(float(val))
                    scoreMask.append(True)
                    
        studentScoresA = np.array(studentScores)
        scoreMaskA = np.array(scoreMask)
        print(
            "Mean score:", np.mean(studentScoresA),
            "Mean of submitted:", np.mean(studentScoresA[scoreMaskA])
        )
Mean score: 89.67 Mean of submitted: 99.63333333333334
Mean score: 99.03 Mean of submitted: 99.03
Mean score: 79.9 Mean of submitted: 99.875
Mean score: 91.72999999999999 Mean of submitted: 91.72999999999999
Mean score: 78.89 Mean of submitted: 98.6125
Mean score: 67.5 Mean of submitted: 84.375
Mean score: 89.58 Mean of submitted: 99.53333333333333
Mean score: 74.66 Mean of submitted: 93.325
Mean score: 100.0 Mean of submitted: 100.0
Mean score: 98.35 Mean of submitted: 98.35
Mean score: 49.56 Mean of submitted: 99.12
Mean score: 74.96000000000001 Mean of submitted: 83.28888888888889
Mean score: 89.69 Mean of submitted: 99.65555555555555
Mean score: 92.32000000000001 Mean of submitted: 92.32000000000001
Mean score: 98.97999999999999 Mean of submitted: 98.97999999999999
Mean score: 10.48 Mean of submitted: 10.48
Mean score: 68.55 Mean of submitted: 97.92857142857142
Mean score: 99.88 Mean of submitted: 99.88
Mean score: 80.64999999999999 Mean of submitted: 89.6111111111111
Mean score: 80.0 Mean of submitted: 100.0
Mean score: 89.74000000000001 Mean of submitted: 89.74000000000001
Mean score: 80.0 Mean of submitted: 100.0
Mean score: 69.08 Mean of submitted: 86.35
Mean score: 98.64 Mean of submitted: 98.64
Mean score: 99.81 Mean of submitted: 99.81
Mean score: 81.64 Mean of submitted: 90.71111111111111
Mean score: 99.08000000000001 Mean of submitted: 99.08000000000001
Mean score: 98.46000000000001 Mean of submitted: 98.46000000000001
Mean score: 89.83 Mean of submitted: 99.8111111111111
Mean score: 85.94000000000001 Mean of submitted: 95.48888888888888
Mean score: 79.46000000000001 Mean of submitted: 99.325
Mean score: 84.78 Mean of submitted: 84.78
Mean score: 98.92 Mean of submitted: 98.92
Mean score: 95.18 Mean of submitted: 95.18
Mean score: 90.0 Mean of submitted: 100.0
Mean score: 92.27 Mean of submitted: 92.27
Mean score: 76.91 Mean of submitted: 85.45555555555556
Mean score: 88.49 Mean of submitted: 98.32222222222222
Mean score: 85.35 Mean of submitted: 94.83333333333333
Mean score: 99.97 Mean of submitted: 99.97
Mean score: 82.73999999999998 Mean of submitted: 91.93333333333334
Mean score: 97.78 Mean of submitted: 97.78
Mean score: 86.66000000000001 Mean of submitted: 96.28888888888889
Mean score: 99.56 Mean of submitted: 99.56
Mean score: 76.80999999999999 Mean of submitted: 85.34444444444445
Mean score: 98.38 Mean of submitted: 98.38
Mean score: 86.05 Mean of submitted: 95.6111111111111
Mean score: 89.86 Mean of submitted: 99.84444444444445
Mean score: 91.85000000000001 Mean of submitted: 91.85000000000001
Mean score: 87.84 Mean of submitted: 97.6
Mean score: 89.24999999999999 Mean of submitted: 99.16666666666666
Mean score: 82.41 Mean of submitted: 91.56666666666666
Mean score: 69.74 Mean of submitted: 99.62857142857142
Mean score: 79.63 Mean of submitted: 88.47777777777777
Mean score: 88.83999999999999 Mean of submitted: 98.71111111111111
Mean score: 84.66999999999999 Mean of submitted: 84.66999999999999
Mean score: 90.0 Mean of submitted: 100.0
Mean score: 98.13 Mean of submitted: 98.13
Mean score: 88.36999999999999 Mean of submitted: 98.18888888888888
Mean score: 74.94000000000001 Mean of submitted: 83.26666666666668
Mean score: 99.67 Mean of submitted: 99.67
Mean score: 86.63 Mean of submitted: 96.25555555555555
Mean score: 96.96000000000001 Mean of submitted: 96.96000000000001
Mean score: 77.9 Mean of submitted: 97.375
Mean score: 79.68 Mean of submitted: 88.53333333333333
Mean score: 99.55 Mean of submitted: 99.55
Mean score: 83.86999999999999 Mean of submitted: 93.1888888888889
Mean score: 89.46 Mean of submitted: 99.39999999999999
Mean score: 79.10999999999999 Mean of submitted: 98.8875
Mean score: 74.74 Mean of submitted: 93.42500000000001
Mean score: 80.0 Mean of submitted: 100.0
Mean score: 80.29 Mean of submitted: 89.21111111111112
Mean score: 79.35 Mean of submitted: 99.1875
Mean score: 96.74 Mean of submitted: 96.74
Mean score: 89.49 Mean of submitted: 99.43333333333334
Mean score: 85.64 Mean of submitted: 95.15555555555555
Mean score: 89.67999999999999 Mean of submitted: 99.64444444444445
Mean score: 87.41 Mean of submitted: 97.1222222222222
Mean score: 97.09 Mean of submitted: 97.09
Mean score: 79.29 Mean of submitted: 88.1
Mean score: 69.84 Mean of submitted: 99.77142857142857
Mean score: 92.11999999999999 Mean of submitted: 92.11999999999999
Mean score: 97.71000000000001 Mean of submitted: 97.71000000000001
Mean score: 55.5 Mean of submitted: 79.28571428571429
Mean score: 79.08 Mean of submitted: 98.85
Mean score: 97.08 Mean of submitted: 97.08
Mean score: 90.0 Mean of submitted: 100.0
Mean score: 76.68 Mean of submitted: 95.85000000000001
Mean score: 97.45 Mean of submitted: 97.45
Mean score: 95.24000000000001 Mean of submitted: 95.24000000000001
Mean score: 89.95 Mean of submitted: 99.94444444444444
Mean score: 82.95 Mean of submitted: 92.16666666666667
Mean score: 88.7 Mean of submitted: 98.55555555555556
Mean score: 96.24 Mean of submitted: 96.24
Mean score: 96.36 Mean of submitted: 96.36
Mean score: 59.339999999999996 Mean of submitted: 98.89999999999999
Mean score: 76.60999999999999 Mean of submitted: 85.1222222222222
Mean score: 100.0 Mean of submitted: 100.0
Mean score: 84.86 Mean of submitted: 94.28888888888888
Mean score: 96.46000000000001 Mean of submitted: 96.46000000000001
Mean score: 67.85 Mean of submitted: 84.8125
Mean score: 88.72 Mean of submitted: 98.57777777777778
Mean score: 72.25 Mean of submitted: 90.3125
Mean score: 88.99 Mean of submitted: 98.87777777777778
Mean score: 84.85999999999999 Mean of submitted: 94.28888888888889
Mean score: 89.17 Mean of submitted: 99.07777777777778
Mean score: 64.52000000000001 Mean of submitted: 92.17142857142858
Mean score: 97.17 Mean of submitted: 97.17
Mean score: 74.63 Mean of submitted: 82.92222222222222
Mean score: 78.78 Mean of submitted: 98.475
Mean score: 85.02000000000001 Mean of submitted: 94.46666666666667
Mean score: 100.0 Mean of submitted: 100.0
Mean score: 78.22 Mean of submitted: 86.91111111111111
Mean score: 78.05999999999999 Mean of submitted: 97.575
Mean score: 87.03999999999999 Mean of submitted: 96.71111111111111
Mean score: 89.32000000000001 Mean of submitted: 99.24444444444445
Mean score: 95.98 Mean of submitted: 95.98
Mean score: 89.42999999999999 Mean of submitted: 99.36666666666666
Mean score: 96.55 Mean of submitted: 96.55
Mean score: 99.94000000000001 Mean of submitted: 99.94000000000001
Mean score: 92.94000000000001 Mean of submitted: 92.94000000000001
Mean score: 98.57 Mean of submitted: 98.57
Mean score: 83.88 Mean of submitted: 83.88
Mean score: 79.58 Mean of submitted: 99.475
Mean score: 87.47 Mean of submitted: 97.1888888888889
Mean score: 99.67 Mean of submitted: 99.67
Mean score: 85.11 Mean of submitted: 94.56666666666666
Mean score: 98.83000000000001 Mean of submitted: 98.83000000000001
Mean score: 97.39000000000001 Mean of submitted: 97.39000000000001
Mean score: 75.77000000000001 Mean of submitted: 94.7125
Mean score: 80.0 Mean of submitted: 100.0
Mean score: 88.95 Mean of submitted: 88.95
Mean score: 100.0 Mean of submitted: 100.0
Mean score: 96.14 Mean of submitted: 96.14
Mean score: 98.69000000000001 Mean of submitted: 98.69000000000001
Mean score: 92.64 Mean of submitted: 92.64
Mean score: 69.82000000000001 Mean of submitted: 99.74285714285715
Mean score: 99.28 Mean of submitted: 99.28
Mean score: 99.71000000000001 Mean of submitted: 99.71000000000001
Mean score: 84.63 Mean of submitted: 94.03333333333333
Mean score: 98.96000000000001 Mean of submitted: 98.96000000000001
Mean score: 70.55 Mean of submitted: 88.1875
Mean score: 78.77 Mean of submitted: 98.4625
Mean score: 90.0 Mean of submitted: 100.0
Mean score: 83.14000000000001 Mean of submitted: 92.3777777777778
Mean score: 77.4 Mean of submitted: 77.4
Mean score: 63.46999999999999 Mean of submitted: 79.3375
Mean score: 71.14 Mean of submitted: 79.04444444444444
Mean score: 51.160000000000004 Mean of submitted: 73.08571428571429
Mean score: 72.78 Mean of submitted: 72.78
Mean score: 73.75 Mean of submitted: 81.94444444444446
Mean score: 68.99 Mean of submitted: 76.65555555555555
Mean score: 63.019999999999996 Mean of submitted: 70.02222222222221
Mean score: 76.42 Mean of submitted: 76.42
Mean score: 63.790000000000006 Mean of submitted: 70.8777777777778
In [22]:
a = np.array([1.1, 2.2, 3.3])
np.savetxt("my-vector.ssv", a)
b = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
])
np.savetxt("my-matrix.ssv", b)
In [23]:
a = np.loadtxt("my-vector.ssv")
b = np.loadtxt("my-matrix.ssv")
print(a)
print(b)
[1.1 2.2 3.3]
[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]
In [29]:
# camelCase
# snake_case

class StatsList:
    """
    Stores a list of numbers and provides some simple statistics.
    """
    lst: list[float]
    
    def __init__(self) -> None:
        self.lst = []
    
x = StatsList()
print(x.lst)
print(x)
[]
<__main__.StatsList object at 0x7f1a14fbb280>