Memory usage analysis in Data Analysis Python - Time & Space Complexity
When we analyze time complexity, we want to understand how the runtime grows as the data size grows.
We ask: How does the work increase as the input size grows?
Analyze the time complexity of the following code snippet.
import pandas as pd
def calculate_mean(df):
means = {}
for col in df.columns:
means[col] = df[col].mean()
return means
# df is a DataFrame with n rows and m columns
This code calculates the average value for each column in a data table.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Looping over each column and computing the mean of all rows in that column.
- How many times: The loop runs once for each column (m times), and inside each, the mean function processes all rows (n times).
As the number of rows (n) or columns (m) grows, the work grows too.
| Input Size (n rows, m columns) | Approx. Operations |
|---|---|
| 10 rows, 5 columns | About 50 operations (10*5) |
| 100 rows, 5 columns | About 500 operations (100*5) |
| 1000 rows, 10 columns | About 10,000 operations (1000*10) |
Pattern observation: The total work grows by multiplying rows and columns, so doubling either doubles the work.
Time Complexity: O(n * m)
This means the time to calculate all means grows proportionally with the number of rows times the number of columns.
[X] Wrong: "Calculating the mean for each column is just O(m) because we loop over columns only."
[OK] Correct: Each mean calculation looks at all rows, so the work inside the loop depends on n, making total work depend on both n and m.
Understanding how data size affects processing time is key in data science. This skill helps you explain and improve data handling in real projects.
"What if we used a built-in function that calculates means for all columns at once? How would the time complexity change?"
Practice
memory_usage(deep=True) method in pandas do?Solution
Step 1: Understand memory_usage method
Thememory_usagemethod reports memory used by each column in a DataFrame.Step 2: Effect of deep=True parameter
Usingdeep=Truemakes it include memory used by object types like strings, giving detailed info.Final Answer:
It shows detailed memory usage of each column including object types. -> Option DQuick Check:
memory_usage(deep=True) = detailed memory info [OK]
- Thinking it deletes or compresses data
- Confusing it with counting rows
- Ignoring deep=True effect
df including deep analysis?Solution
Step 1: Recall pandas method name
The correct method ismemory_usagewith underscore, called on DataFrame.Step 2: Check method call syntax
It is called asdf.memory_usage(deep=True). Other options have wrong method names or syntax.Final Answer:
df.memory_usage(deep=True) -> Option CQuick Check:
Correct method name and call = df.memory_usage(deep=True) [OK]
- Misspelling method as memoryusage
- Using function style instead of method
- Adding get_ prefix incorrectly
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': ['x', 'y', 'z']
})
print(df.memory_usage(deep=True))Solution
Step 1: Understand DataFrame columns
Column 'A' is integers, 'B' is strings (object type), and index is default integer index.Step 2: memory_usage(deep=True) output
This method returns a Series showing memory used by index and each column separately, including deep memory for object column 'B'.Final Answer:
Index memory + int64 column + object column memory sizes -> Option BQuick Check:
memory_usage(deep=True) lists memory per column [OK]
- Expecting a single total number output
- Ignoring index memory
- Thinking deep=True causes error
import pandas as pd
df = pd.DataFrame({'col': ['a', 'b', 'c']})
print(df.memory_usage(deep=False))Solution
Step 1: Check memory_usage with deep=False
By default or with deep=False, memory_usage does not count full memory used by object columns like strings.Step 2: Effect on output
This means the reported memory for 'col' will be underestimated, missing actual string memory.Final Answer:
It does not show full memory usage of string data. -> Option AQuick Check:
deep=False skips detailed object memory [OK]
- Thinking memory_usage method is missing
- Assuming deep=False causes error
- Believing numeric columns are required
Solution
Step 1: Analyze memory usage of string columns
Usingmemory_usage(deep=True)shows string columns use a lot of memory.Step 2: Convert strings to categorical
Changing string columns to categorical reduces memory by storing unique values once.Step 3: Avoid data loss
Converting to categorical keeps data but uses less memory, unlike dropping or wrong type conversion.Final Answer:
Convert string columns to categorical type after checking memory usage. -> Option AQuick Check:
Convert strings to categorical for memory saving [OK]
- Dropping important columns blindly
- Ignoring deep=True memory insights
- Converting all columns to float causing errors
Ready to prove it?
Pass the test and this pattern moves unknown
