Digital Wellbeing Dashboard Analysis - codepath/compsci_guides GitHub Wiki

Unit 4 Session 1 Advanced (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • Q: What is the structure of the input?

    • A: The input is a dictionary where each key is a day of the week (e.g., "Monday", "Tuesday") and the value is another dictionary. This nested dictionary's keys represent app categories (e.g., "Social Media", "Entertainment") and its values represent the time spent (in minutes) on that category during that day.
  • Q: What is the output?

    • A: The output is a dictionary with three keys:
      1. "total_category_usage": a dictionary showing the total time spent on each category across the entire week.
      2. "busiest_day": the day with the highest total usage.
      3. "most_used_category": the category with the highest total usage over the week.
  • Q: Are there any constraints on the input, such as valid day names?

    • A: It is assumed that the input contains valid day names and category names.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Iterate through the data to compute the total time spent on each category, the total time spent on each day, and then determine the busiest day and most-used category.

1) Initialize an empty dictionary `total_category_usage` to store the total time spent on each category.
2) Initialize an empty dictionary `daily_totals` to store the total time spent each day.
3) Iterate through each `day, categories` in `weekly_usage.items()`:
   a) Initialize `daily_total` to 0.
   b) For each `category, time` in `categories.items()`:
      - Add `time` to `daily_total`.
      - Update `total_category_usage` by adding `time` to the corresponding category.
   c) Store `daily_total` in `daily_totals` with the corresponding `day`.
4) Determine `busiest_day` by finding the key in `daily_totals` with the maximum value.
5) Determine `most_used_category` by finding the key in `total_category_usage` with the maximum value.
6) Return a dictionary containing `total_category_usage`, `busiest_day`, and `most_used_category`.

**⚠️ Common Mistakes**

- Not correctly summing the total time across categories or days.
- Misidentifying the busiest day or most-used category due to incorrect comparisons.

I-mplement

def analyze_weekly_usage(weekly_usage):
    total_category_usage = {}
    daily_totals = {}

    for day, categories in weekly_usage.items():
        daily_total = 0
        for category, time in categories.items():
            daily_total += time
            if category in total_category_usage:
                total_category_usage[category] += time
            else:
                total_category_usage[category] = time
        daily_totals[day] = daily_total

    busiest_day = max(daily_totals, key=daily_totals.get)
    most_used_category = max(total_category_usage, key=total_category_usage.get)

    return {
        "total_category_usage": total_category_usage,
        "busiest_day": busiest_day,
        "most_used_category": most_used_category
    }