Advanced Python · Lesson 1 of 3
Reusable Python Analysis Functions and Testing
Structure analysis as testable functions and check normal, boundary, and invalid inputs.
Lesson
1. Introduction
An analysis repeated every week should not depend on someone remembering which notebook cells to run. Functions turn a calculation into an explicit contract, and tests catch regressions when data shape or business rules change.
2. Understand the concept
Keep pure calculations separate from file and network operations. Type hints document intended values, while runtime validation still protects against external data. A test should assert observable behavior rather than merely repeat the implementation.
3. Syntax and interpretation
def conversion_rate(conversions: int, visitors: int) -> float:
if visitors <= 0:
raise ValueError('visitors must be positive')
return conversions / visitorsThe function rejects a zero or negative denominator rather than returning a meaningless result.
4. Apply it to an analysis
Structure analysis as testable functions and check normal, boundary, and invalid inputs. Start with a small, known example and state what each row or value represents. After the transformation, check row counts, types, keys, and units against the original data. If an assumption fails, stop and investigate instead of presenting the output as a valid result.
5. Common mistakes
- Testing only one ordinary case and missing empty or invalid data.
- Catching exceptions inside a calculation and returning an invented fallback.
6. Practice task
Add a test that verifies conversion_rate raises ValueError when visitors is negative.
7. One possible solution
try:
conversion_rate(1, -2)
except ValueError:
print('test passed')8. Summary and next step
Structure analysis as testable functions and check normal, boundary, and invalid inputs. Use the next lesson in this module to extend the idea with another technique and a more realistic analysis case.
Visual guide
Working through Reusable Python Analysis Functions and Testing
-
Step 01
Define
State the question, data grain, and expected output.
-
Step 02
Apply
Use the method and check its assumptions on a small example.
-
Step 03
Verify
Reconcile the result and communicate limitations.
Code examples
assert conversion_rate(5, 100) == 0.05
The expected conversion rate is 0.05.
try:
conversion_rate(1, 0)
except ValueError:
print('invalid denominator')
invalid denominator
Key points
- Structure analysis as testable functions and check normal, boundary, and invalid inputs.
- Check the result against the stated data definition and a representative example.
- Record assumptions and report data-quality limitations rather than hiding them.
Check your understanding
Practice
Your learning progress