Data Science from Scratch 2e: First Principles with Python