Speed Up Python: Hands-On Case Studies for Faster Code Using Profiling, Data Structures, and Parallel Processing