Your client, SleepInc, has shared anonymized sleep data from their hot new sleep tracking app SleepScope. As their data science consultant, your mission is to analyze the lifestyle survey data with Python to discover relationships between exercise, gender, occupation, and sleep quality. See if you can identify patterns leading to insights on sleep quality.
💾 The data: sleep_health_data.csv
SleepInc has provided you with an anonymized dataset of sleep and lifestyle metrics for 374 individuals. This dataset contains average values for each person calculated over the past six months. The data is saved as sleep_health_data.csv.
The dataset includes 13 columns covering sleep duration, quality, disorders, exercise, stress, diet, demographics, and other factors related to sleep health.
| Column | Description |
|---|---|
Person ID | An identifier for each individual. |
Gender | The gender of the person (Male/Female). |
Age | The age of the person in years. |
Occupation | The occupation or profession of the person. |
Sleep Duration (hours) | The average number of hours the person sleeps per day. |
Quality of Sleep (scale: 1-10) | A subjective rating of the quality of sleep, ranging from 1 to 10. |
Physical Activity Level (minutes/day) | The average number of minutes the person engages in physical activity daily. |
Stress Level (scale: 1-10) | A subjective rating of the stress level experienced by the person, ranging from 1 to 10. |
BMI Category | The BMI category of the person (e.g., Underweight, Normal, Overweight). |
Blood Pressure (systolic/diastolic) | The average blood pressure measurement of the person, indicated as systolic pressure over diastolic pressure. |
Heart Rate (bpm) | The average resting heart rate of the person in beats per minute. |
Daily Steps | The average number of steps the person takes per day. |
Sleep Disorder | The presence or absence of a sleep disorder in the person (None, Insomnia, Sleep Apnea). |
Project Instructions
- Which occupation has the lowest average sleep duration? Save this in a string variable called lowest_sleep_occ.
- Which occupation has the lowest average sleep quality? Save this in a string variable called lowest_sleep_quality_occ. Did the occupation with the lowest sleep duration also have the lowest sleep quality? If so assign a boolean value to variable same_occ variable, True if it is the same occupation, and False if it isn't.
- Let's explore how BMI Category can affect sleep disorder rates. Start by finding what ratio of app users in each BMI Category have been diagnosed with Insomnia. Create a dictionary named: bmi_insomnia_ratios. The key should be the BMI Category as a string, while the value should be the ratio of people in this category with insomnia as a float rounded to two decimal places.
- Please note the keys are case-sensitive, and should be formatted as shown in the example dictionary.
import pandas as pd
sleep_health_data = pd.read_csv("sleep_health_data.csv")
sleep_health_data.head()# Find occupation with the lowest sleep duration
sleep_duration = sleep_health_data.groupby('Occupation')['Sleep Duration'].mean().sort_values(ascending=True)
lowest_sleep_occ = sleep_duration.index[0]
print("The occupation with the lowest sleep duration is:",lowest_sleep_occ)
# Find occupation with the lowest sleep quality
quality_of_Sleep = sleep_health_data.groupby('Occupation')['Quality of Sleep'].mean().sort_values(ascending=True)
lowest_sleep_quality_occ = quality_of_Sleep.index[0]
print("The occupation with the lowest sleep quality is:",lowest_sleep_quality_occ)
if lowest_sleep_occ == lowest_sleep_quality_occ:
same_occ = True
else:
same_occ = False
# Find what ratio of app users in each BMI category have been diagnosed with Insomnia
# Normal
# Filter the full dataframe to only rows where BMI Category is Normal and Sleep Disorder is Insomnia.
normal = sleep_health_data[(sleep_health_data["BMI Category"] == "Normal") &
(sleep_health_data["Sleep Disorder"] == "Insomnia")]
# Total normal rows
total_normal = len(sleep_health_data[sleep_health_data["BMI Category"] == "Normal"])
# Calculate normal insomnia ratio
normal_insomnia_ratio = round(len(normal) / total_normal, 2)
# Overweight
# Filter the full dataframe to only rows where BMI Category is Overweight and Sleep Disorder is Insomnia.
overweight = sleep_health_data[(sleep_health_data["BMI Category"] == "Overweight") &
(sleep_health_data["Sleep Disorder"] == "Insomnia")]
# Total overweight rows
total_overweight = len(sleep_health_data[sleep_health_data["BMI Category"] == "Overweight"])
# Calculate overweight insomnia ratio
overweight_insomnia_ratio = round(len(overweight) / total_overweight, 2)
# Obese
# Filter the full dataframe to only rows where BMI Category is Obese and Sleep Disorder is Insomnia.
obese = sleep_health_data[(sleep_health_data["BMI Category"] == "Obese") &
(sleep_health_data["Sleep Disorder"] == "Insomnia")]
# Total obese rows
total_obese = len(sleep_health_data[sleep_health_data["BMI Category"] == "Obese"])
# Calculate obese insomnia ratio
obese_insomnia_ratio = round(len(obese) / total_obese, 2)
# Create dictionary to store the ratios for each BMI category
bmi_insomnia_ratios = {
"Normal": normal_insomnia_ratio,
"Overweight": overweight_insomnia_ratio,
"Obese": obese_insomnia_ratio
}
print()
print("the ratios for each BMI category:")
for index, row in bmi_insomnia_ratios.items():
print(index + ": " + str(row))