Concepts

Week 1

  • Python install
  • VS Code install
  • editing a .py Python program and executing it in the shell
  • the REPL
  • expressions and evaluating them
  • mathematical operators and operator precedence
  • using brackets ( and ) to override operator precedence
  • numeric vs character string data types

Week 2

  • variables: str, int, float, bool, inspect using type()
  • conversion: str(), int(), float()
  • operators: + - * /, **, modulus %
  • logical operators < > == >= <= != and or not True False
  • operator precedence, using brackets ( ) to save your sanity
  • import statements—for example, from math import cos
  • print() and formatted output using f-strings
  • getting input from the user using input()
  • commenting code using #
  • reserved keywords in Python (e.g. for, return, etc)
  • operations on strings (strings are “objects” with “methods”)
  • getting help using help()
  • conditionals using if elif else
  • the list variable type in Python
  • loops using while and for
  • range() & zero-based indexing in Python

Week 3

  • in Python list variables are pointers
  • b = a vs b = a.copy()
  • NumPy arrays
  • creating arrays
  • np.zeros() and np.ones()
  • shape of arrays using np.shape()
  • multidimensional arrays
  • vectorized operations on arrays
  • slicing & indexing into arrays
  • functions in Python
    • defining a function
    • function header
    • inputs
    • the work
    • outputs
    • variable scope
    • named inputs
    • default values
    • idea of modularity of code

Week 4

  • Python dictionaries
  • Python list comprehensions
  • using the enumerate keyword in for loops
  • hexadecimal
  • Python functions as variables
  • progress bar using tqdm
  • file input & output: low-level
    • all files are binary, a series of 8-bit bytes
    • ASCII encoding (and utf-8 more modern version)
    • using hex editor to view a file as hexadecimal bytes
    • Python defaults: 32-bit int, 64-bit float, 8-bit char
    • little-endian vs big-endian byte ordering (sys.byteorder to check)
    • using numpy to read and write binary bytes by specifying dtype
  • file input & output: high-level using NumPy & pandas

Week 5

  • procedural programming: functions acting on data structures
  • object-oriented programming (OOP): classes & objects encapsulate attributes & methods
  • hierarchical organization of Classes (and superclasses and subclasses)
  • attributes (data)
  • methods (functions)
  • the __init__() method and the self variable
  • inheritance
  • overriding inherited methods
  • polymorphism
  • super().__init__()
  • special methods: __str__() and __repr__()
  • copying objects
    • shallow copy using the copy module copy.copy()
    • deep copy using copy.deepcopy()
  • operator overloading, e.g. __eq()__, __lt__(), __gt__()

Week 6

  • matplotlib in Python
  • plt.plot() & plt.show()
  • dots, lines, colours, shapes
  • plt.subplot() vs fig, ax = plt.subplots()
  • axis labels, axis limits
  • figure title
  • legend
  • fig.tight_layout()
  • fig.savefig()
  • graphics file formats
  • bitmap vs vector graphics

Week 7

  • plaintext documents
  • pandoc + markdown
  • LaTeX

Week 8

  • writing clean code
  • sketching a directed graph
  • raw data, processed data, summary tables, figures, stats

Week 9 & 10

  • time domain vs frequency domain
  • Fourier series
  • Fourier decomposition
  • sampling
  • nyquist frequency
  • aliasing
  • spectrum of a signal (frequency vs magnitude)
  • power spectral density (e.g. Welch method)
  • decibel scale
  • spectrogram
  • filtering
  • low-pass, high-pass, band-pass, band-stop
  • corner / cutoff frequency
  • filter roll-off
  • derivatives of noisy signals
  • quantization & bit depth

Week 10 & 11

  • population vs sample & parameter estimation
  • role of sample size
  • sampling distribution of means
  • standard error of the mean
  • logic of null hypothesis significance testing
  • what is a p-value
  • type I and type II errors
  • effect size
  • statistical power
  • confidence intervals
  • parametric vs resampling methods