
О проекте
Этот проект посвящён тому, как в выборке Sleep Health & Lifestyle распределяются расстройства сна и какие факторы с ними связаны. В датасете есть люди разных возрастов и профессий, для каждого указаны длительность и качество сна, уровень стресса, физическая активность, шаги за день и тип нарушения сна (или его отсутствие).
В фокусе несколько вопросов: какова доля людей без расстройств и какие нарушения встречаются чаще, как различаются группы по длительности сна, уровню стресса и профессии. На основе этих срезов я выделяю условные «зоны риска» — сочетания факторов, при которых расстройства появляются чаще, например короткий сон на фоне высокого стресса и низкой физической активности.
Все выводы строятся вокруг визуализаций: круговая диаграмма показывает общую картину по типам нарушений, отдельные графики сравнивают группы по длительности сна, уровню стресса и профессиям, а точечный график помогает увидеть, как физическая активность влияет на сон. В итоге получилась цельная история о том, как в этой выборке устроен сон и какие характеристики чаще всего соседствуют с диагнозами.
В проекте я использую пять визуализаций:
1. Круговая диаграмма типов расстройств. Показывает, какая доля людей без нарушений сна и как распределены основные диагнозы между собой.
2. Столбчатая диаграмма по длительности сна. Сравнивает, как часто расстройства встречаются у тех, кто спит <6 часов, 6–8 часов и >8 часов.
3. Линейный график «стресс — качество сна». Для каждого уровня стресса видно среднее качество сна у людей без диагнозов и с расстройствами.
4. Точечная диаграмма «шаги, сон и стресс». Показывает, как сочетаются физическая активность, длительность сна и уровень стресса у отдельных людей.
5. Горизонтальная столбчатая диаграмма профессий. Демонстрирует, в каких профессиях доля людей с расстройствами сна выше, а в каких — ниже.

Пошаговый план работы
Сначала я подключила базовые библиотеки для анализа данных (pandas, numpy, matplotlib) и загрузила датасет в Google Colab.
После этого вывела первые строки таблицы, чтобы проверить, что файл прочитался правильно.
Здесь я подготовила данные к анализу: очистила столбец с диагнозами сна (заполнила пропуски, привела к одному формату) и на его основе создала бинарный признак AnyDisorder — есть расстройство или нет. Затем перевела в числовой тип все ключевые показатели (возраст, длительность и качество сна, стресс, шаги). В конце проверила сводную статистику, чтобы убедиться, что данные выглядят корректно и их можно использовать для построения графиков.
Потом я задала визуальный язык проекта. Сначала собрала свою палитру в словаре PINK: четыре оттенка розового, белый и чёрный фон. Затем через plt.rcParams.update настроила общий стиль для всех графиков: чёрный фон фигуры и осей, розовые подписи и деления, белый текст, размер шрифта заголовков. Отдельная функция style_ax (ax) убирает верхнюю и правую рамку и добавляет мягкую розовую сетку, чтобы все диаграммы выглядели единообразно и читались как часть одного проекта.
Визуализация данных
С первого графика я начинаю с самого очевидного вопроса: какие вообще расстройства сна есть в выборке и насколько они часты. Я просто беру колонку с диагнозами, перевожу названия на русский и считаю, сколько человек попадает в каждую категорию. Потом превращаю это в круговую диаграмму, где каждый сектор — это своей «кусок» выборки.
По этому пирогу видно общий ландшафт данных: какую долю составляют люди без диагнозов и сколько остаётся на бессонницу, апноэ и другие нарушения. Это сразу даёт понимание масштаба проблемы: расстройства сна — это редкие исключения или заметная часть всей выборки.
Дальше я перехожу от «какие диагнозы бывают» к вопросу «как режим сна связан с рисками». Для этого я делю длительность сна на три простые группы: меньше 6 часов, 6–8 часов и больше 8 часов. В каждой из них считаю, какой процент людей имеет расстройство сна, и рисую три столбца — по одному на группу.
Такой формат хорошо показывает именно сравнение: вторую цифру (проценты) не нужно высчитывать в голове, она уже подписана над столбцом. По графику можно быстро увидеть, что люди с очень коротким сном заметно чаще оказываются в группе с диагнозом, а «коридор» 6–8 часов выглядит наиболее спокойным. Длинный сон в этой выборке тоже не даёт полного иммунитета — доля нарушений там не нулевая, но обычно ниже, чем в зоне хронического недосыпа.
На третьем графике я смотрю уже не на то, «есть ли диагноз», а на субъективное качество сна при разном уровне стресса. Для каждого значения по шкале стресса я отдельно считаю среднее качество сна у людей с расстройствами и без них, а потом строю две линии на одном поле.
Получается довольно интуитивная картинка: по оси X растёт стресс, по оси Y — проседает качество сна. Линия для людей с диагнозами почти всегда проходит ниже, чем у тех, у кого расстройств нет: при равном уровне стресса они в среднем спят хуже. В итоге график читается как простая история: чем выше стресс, тем ниже оценка сна, и особенно заметно это у тех, кто уже попал в группу с нарушениями.
На этой диаграмме хорошо видно, где на самом деле живут данные: основное облако точек сосредоточено в районе 6–8 часов сна и средних значений по шагам. Отдельно можно присмотреться к зоне короткого сна и маленькой активности — там чаще встречаются точки с высоким уровнем стресса. То есть график даёт ощущение, как реальные режимы дня (сон + движение) сочетаются с субъективным напряжением.
Последний график отвечает на вопрос «кто страдает сильнее» в разрезе профессий. Я перевожу названия должностей на русский, выбираю несколько самых распространённых и для каждой считаю долю людей с расстройством сна. Всё это выкладываю в виде горизонтальных столбиков, отсортированных от меньшей доли к большей.
Заключение
В этом проекте я смотрела на сон как на часть повседневной жизни: кто сталкивается с расстройствами, как они связаны с режимом сна, уровнем стресса и образом жизни. Сначала я подсчитала, какие диагнозы вообще есть в выборке и какова их доля. На круговой диаграмме видно, что основную массу составляют люди без нарушений, но бессонница и апноэ всё равно занимают заметное место.
Дальше я перешла к режиму сна и стрессу. Разбиение по длительности сна показывает, что в группе с менее чем 6 часами нарушений больше, чем при сне 6–8 часов. На линиях «стресс — качество сна» хорошо видно, что с ростом стресса оценка сна падает, а у людей с диагнозами она почти на всём диапазоне ниже, чем у тех, у кого расстройства нет. Точечная диаграмма с шагами добавляет контекст: проблемные сочетания типа «мало сплю, мало двигаюсь и много стрессую» в выборке присутствуют, хотя и не доминируют.
Наконец, разрез по профессиям показывает, что в некоторых видах занятости доля людей с расстройствами сна выше средней. В сумме это складывается в цельную картину: короткий сон и высокий стресс связаны с повышенным риском нарушений, а профессиональная и поведенческая среда может усиливать или ослаблять этот эффект.
Использованные инструменты
Kaggle — источник данных: датасет о сне и образе жизни (Sleep Health & Lifestyle, расширенная версия в формате CSV).
Google Colab — среда, в которой я загружала файл, запускала код и сохраняла графики.
Pandas — загрузка CSV (read_csv), очистка и приведение типов, создание новых признаков (группы сна, стресса), группировки (groupby, crosstab) и подготовка сводных таблиц для визуализаций.
NumPy — базовые числовые операции: задание границ интервалов (bins), работа с массивами, поддержка расчётов для группировок.
Matplotlib — построение и стилизация всех графиков: палитра в духе «Бойцовского клуба», тёмный фон, подписи осей и заголовков, сохранение изображений в нужном разрешении.
ChatGPT — помощь в написании и корректировке кода, подборе форматов графиков и формулировке текстовых комментариев к результатам.