Web analytics data pattern in Data Analysis Python - Time & Space Complexity
When analyzing web analytics data, we often process many records to find patterns.
We want to know how the time to analyze grows as the data size grows.
Analyze the time complexity of the following code snippet.
import pandas as pd
def count_page_views(df):
counts = {}
for page in df['page_url']:
counts[page] = counts.get(page, 0) + 1
return counts
This code counts how many times each page URL appears in the data.
- Primary operation: Looping through each page URL in the data.
- How many times: Once for every record in the dataset.
As the number of page views grows, the time to count them grows roughly the same.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 10 loops |
| 100 | About 100 loops |
| 1000 | About 1000 loops |
Pattern observation: The time grows directly with the number of records.
Time Complexity: O(n)
This means the time to count page views grows in a straight line as data grows.
[X] Wrong: "Counting page views takes the same time no matter how many records there are."
[OK] Correct: The code must look at each record once, so more records mean more time.
Understanding how data size affects processing time helps you explain your approach clearly in interviews.
"What if we used nested loops to compare each page URL with every other? How would the time complexity change?"
Practice
Solution
Step 1: Understand the purpose of web analytics data
Web analytics data tracks visitor actions like page views and clicks.Step 2: Identify what patterns reveal
Patterns show how visitors interact, such as popular pages and visit duration.Final Answer:
How visitors interact with the website -> Option CQuick Check:
Visitor interaction = Understanding web analytics data [OK]
- Confusing analytics with technical website details
- Thinking analytics shows website design choices
- Assuming analytics reveals server specs
pages?Solution
Step 1: Identify correct method to count items in a list
Python'scollections.Countercounts occurrences of each item in a list.Step 2: Check each option's validity
from collections import Counter visit_counts = Counter(pages) usesCounter(pages)correctly. Others use invalid methods or wrong functions.Final Answer:
from collections import Counter\nvisit_counts = Counter(pages) -> Option AQuick Check:
Use Counter to count list items [OK]
- Using .count() without argument
- Trying to sum strings
- Using .length() which is not a Python method
import pandas as pd
# Sample data
web_data = pd.DataFrame({
'page': ['home', 'about', 'home', 'contact', 'home', 'about'],
'duration': [30, 45, 25, 10, 35, 50]
})
# Calculate average duration per page
avg_duration = web_data.groupby('page')['duration'].mean().round(1)
print(avg_duration)Solution
Step 1: Group data by 'page' and calculate mean duration
For 'about': (45 + 50) / 2 = 47.5; 'contact': 10; 'home': (30 + 25 + 35) / 3 = 30.0Step 2: Round the means to 1 decimal place
Values are 47.5, 10.0, and 30.0 respectively, matching page about 47.5 contact 10.0 home 30.0 Name: duration, dtype: float64.Final Answer:
page\nabout 47.5\ncontact 10.0\nhome 30.0\nName: duration, dtype: float64 -> Option DQuick Check:
Mean durations rounded = page about 47.5 contact 10.0 home 30.0 Name: duration, dtype: float64 [OK]
- Incorrect averaging of durations
- Not rounding results
- Confusing data types in output
import pandas as pd
web_data = pd.DataFrame({
'page': ['home', 'about', 'home', 'contact', 'home', 'about']
})
most_visited = web_data['page'].max()
print(most_visited)Solution
Step 1: Understand what max() does on a string column
max() returns the largest value alphabetically, not the count of visits.Step 2: Identify correct method to find most visited page
Use value_counts().idxmax() to find the page with highest visits.Final Answer:
Using max() returns the lexicographically largest page, not the most visited -> Option BQuick Check:
max() on strings = lex order, not frequency [OK]
- Assuming max() finds most frequent item
- Expecting max() to count occurrences
- Confusing max() with mode()
visits with columns user_id, page, and duration (seconds spent). How would you find the average duration per user for only pages visited more than twice by that user?Solution
Step 1: Group data by user and page to count visits
Use groupby(['user_id', 'page']) and filter groups with count > 2.Step 2: Calculate average duration per user from filtered data
After filtering, group by user_id and compute mean duration.Final Answer:
Group by user and page, filter groups with count > 2, then average durations per user -> Option AQuick Check:
Filter by visit count, then average durations per user [OK]
- Filtering by duration instead of visit count
- Ignoring grouping by page before filtering
- Averaging durations without filtering visits
Ready to prove it?
Pass the test and this pattern moves unknown
