Python for Data Scientists II
Intermediate
Python
by Pavel
University approvals: 1
(ZHAW - Zürcher Hochschule für Angewandte Wissenschaften: 1)
- Classes, Objects, Constants, and Magic Methods Card
- itertools in Data Science: Product, Combinations, Permutations Card
- Playing Cards with OOP: Card and Deck Card
- Feature-Set Experiments with OOP Card
- Route Optimization I: Domain Modeling, Constraints, and Local vs Global Decisions Card
- Route Optimization II: Search Space, Brute Force, and Practical Heuristics Card
- Damage Regression I: Data Ingestion, Cleaning, and Vocabulary Mapping Card
- Damage Regression II: Combinatorial Feature Expansion and Baseline Prediction Card
- Feature Subset Optimization I: Search Space Modeling and Feasibility Checks Card
- Feature Subset Optimization II: Heuristics, Baselines, and Validation Discipline Card
- CPU-bound vs I/O-bound — multiprocessing and asyncio Card
- CSV files and tabular I/O in Python Card
- HTML pages as messy data sources Card
- HTTP, URLs, and the query string (?…) Card
- requests, JSON APIs, and robust fetching Card
- SQLite from Python Card
- Text encodings (UTF-8, Latin-1, Windows-1252) Card
- XML data and ElementTree Card
- Why pandas uses columnar storage Card
- Creating and modifying DataFrame columns Card
- Dates and times in pandas Card
- GroupBy: split-apply-combine in pandas Card
- Handling missing data: NaN, fillna, and dropna Card
- Merging and concatenating DataFrames Card
- Reshaping: pivot tables and melt Card
- Selecting data with loc, iloc, and boolean indexing Card
- Validation vs sanitization: the boundary-first principle Card
- Vectorized operations vs apply in pandas Card
- Vectorized string operations with .str Card
- Python decorators: functions wrapping functions Card
- Advanced decorators: stacking, parameters, and @property Card
- Python dataclasses for trusted domain objects Card
- Pydantic for boundary validation Card
- ORM: bridging objects and SQL with SQLAlchemy Card
- Base cases anchor recursive solutions Card
- Recursion mirrors problem structure Card
- Fibonacci pitfalls: branching work Card
- Divide-and-conquer search on sorted data Card
- Recursion depth and the call stack Card
- Tree-shaped data and recursive visitation Card
- Mutual recursion on complementary predicates Card
- Debugging recursive programs Card
- Big-O: describe growth, not microseconds Card
- Nested loops imply quadratic explosions Card
- Empirical timings with perf_counter Card
- Linear scans vs logarithmic hunts Card
- Space complexity: recursion stack vs buffers Card
- Checking sorted-order invariants cheaply Card
- Experiments spanning input sizes Card
- Amortisation snapshot: list append Card
- Exceptions signal contract violations cleanly Card
- Assertions vs validator contracts Card
- Normalising calculators and tokens Card
- Structured token ladders Card
- Guard clauses before brittle arithmetic Card
- Network-shaped failures without fragile parsing Card
- Whitelist vs blacklist at simple parsers Card
- Static methods versus instance misuse Card
- Why vectorised kernels beat naive Python loops numerically hot Card
- JIT accelerators caveats Card
- Profiling before rewriting Card
- Type hints aiding maintainability—not runtime magic Card
- Linters versus formatters Card
- Docker reproducibility anecdotes Card
- Testing discipline vs folklore speedups Card
- A simple timing decorator (wraps-preserving ergonomics) Card