
Идея проекта
Я беру большой набор новостных заголовков за 10+ лет и с помощью внешнего словаря (NRC Emotion Lexicon) считаем, как часто в разных разделах и в разные годы используются слова, связанные с разными типами эмоций (страх, гнев, радость, грусть и др.). Дальше я анализирую: 1.как распределены эти показатели в целом, 2.как они меняются по времени, 3.чем различаются разделы новостей между собой.
Данные и источники
В работе используется открытый датасет новостей: - News Category Dataset — набор заголовков новостей HuffPost за период 2012–2022 годов. - Для каждой новости есть: - headline — текст заголовка, - category — категория новости (Politics, World News, Entertainment и др.), - date — дата публикации, - дополнительные поля (автор, ссылка, короткое описание).
Данные взяты из открытого источника: - Описание датасета на Kaggle: News Category Dataset  - Зеркало на Hugging Face, откуда данные удобно загружать в Google Colab
Дополнительно используется внешний словарь: - NRC Emotion Lexicon — открытый лексикон, в котором для английских слов указано, к каким категориям эмоций они относятся (fear, anger, joy, sadness и др.). 
Почему эти данные интересны и полезны
1. Объём: около 200k заголовков: этого достаточно, чтобы применять Pandas, группировки и простые статистические методы. 2. Время: у каждой записи есть дата, можно анализировать динамику по годам. 3. Категории: у новости есть раздел (category), поэтому можно сравнивать разные типы новостей. 4. Однородный формат: все тексты, именно заголовки (короткие, однотипные по жанру), что уменьшает шум и делает сравнение корректнее.
Что именно я измеряю (принцип измерения «лексики эмоций»)
в проекте не оцениваются «чувства журналистов» и не даётся субъективная интерпретация текста.
Я работаю со следующей логикой: 1. Есть внешний словарь NRC Emotion Lexicon. В нём каждое слово либо отмечено как связанное с определёнными категориями эмоций, либо не отмечено. 2. Для каждого заголовка я: -привожу текст к нижнему регистру, -оставляю только буквы и пробелы, -разбиваю текст на слова (токенизация).
3. Каждое слово заголовка проверяется: присутствует ли оно в словаре и к каким категориям там отнесено.
4. Для каждой категории (например, fear или anger) считаю:
-сколько слов заголовка входят в соответствующий список словаря; -затем делим это число на общее количество слов в заголовке.
Таким образом, мы получаем метрики вида: -fear_rate — доля слов из списка fear относительно общего числа слов в заголовке; -anger_rate — аналогично по списку anger; -и т. д. по другим эмоциям.
Это количественные показатели лексики, а не субъективная оценка смысла или тональности.
Цели и задачи проекта
Цель: построить наглядную визуализацию того, как распределяется и меняется во времени лексика, связанная с разными эмоциональными категориями, в новостных заголовках.
Частные задачи: 1. Подготовить данные: очистить, привести к нужному формату, добавить нужные признаки (длина, год и т. д.). 2. С помощью словаря NRC посчитать показатели *_rate для нескольких категорий эмоций. 3. Построить не менее четырёх разных типов графиков: -распределения (гистограмма), -динамика по времени (линейный график), -сравнение групп (столбчатая диаграмма), -матрица различий (heatmap). 4. Оформить визуализацию в едином стиле (свои цвета, шрифт/палитра, настройка matplotlib). 5. Описать использованные статистические методы и сформулировать выводы.
Этап работы
Загрузка данных, Загрузка датасета через библиотеку datasets (Hugging Face), Преобразование в pandas.DataFrame, Осмотр размеров, списка колонок, первых строк. 2. Очистка и подготовка Преобразование date к типу datetime, Удаление строк без нужных полей (date/headline/category), Удаление дубликатов, Выделение года (year), Нормализация текста заголовка (нижний регистр + очистка), Подсчёт длины заголовка в словах (len_words) и символах (len_chars). 3. Соединение с NRC Emotion Lexicon и расчёт метрик Загрузка лексикона из открытого репозитория, Разбиение заголовков на слова (explode), Объединение (merge) со словарём по слову, Подсчёт количества слов каждой категории для каждого заголовка, Нормализация: деление на длину заголовка → anger_rate, fear_rate и т. д. 4. Настройка стиля визуализации Задание палитры (фон, цвет текста, сетка), Общие настройки шрифтов и размеров, Вспомогательная функция для удаления лишних рамок графика, (опционально) подключение собственного шрифта. 5. Построение графиков Гистограмма длины, Линейный график по годам, Горизонтальная столбчатая диаграмма по категориям, Тепловая карта. 6. Статистические методы Описательная статистика (средние, распределения), Группировки и агрегация (groupby + mean, count), Нормализация показателей (*_rate)
Нейросети в проекте
В процессе работы использовался ChatGPT для: - поиска открытых источников данных, - формулировки и редактирования текстовых объяснений и выводов.
Коды
подключает библиотеку datasets, загружает датасет новостных заголовков HuffPost, превращает его в таблицу pandas.DataFrame, выводит размер данных и первые строки. Очистка данных и подготовка
график 1
график 2
график 3
график 4
ГРАФИК 1. Гистограмма длины заголовков
График показывает, как в целом распределена длина заголовков HuffPost: какие длины встречаются чаще всего. - Видно типичный диапазон (например, пик около 6–12 слов) и есть ли хвост из очень длинных или очень коротких заголовков. - Это базовое представление о структуре данных и обоснование, почему дальше мы нормируем эмоциональные показатели на длину заголовка.
ГРАФИК 2. Линейная динамика fear_rate по годам
- Для каждого года посчитано среднее значение fear_rate — доля слов из словаря NRC, связанных с категорией fear, в заголовках этого года. - Линия показывает, есть ли общий рост или падение этого показателя, а также отдельные пики/провалы по годам. - Таким образом, мы видим, как меняется использование лексики из списка fear во времени на уровне заголовков.
ГРАФИК 3. Топ категорий по anger_rate (горизонтальные столбики)
- Для каждой категории новостей рассчитано среднее значение anger_rate и число заголовков; мелкие категории отсекаются фильтром count ≥ 500. - График показывает, в каких разделах новостей (политика, криминал, и т. п.) доля лексики из списка anger выше всего. - Это позволяет сравнить тематики между собой и сделать вывод, какие разделы систематически используют более «конфликтную» лексику по словарю NRC.
ГРАФИК 4. Тепловая карта категория × эмоции (*_rate)
- Для каждой категории новостей посчитаны средние значения нескольких метрик *_rate (anger, fear, joy, sadness и т. д.). - По вертикали — категории, по горизонтали — тип эмоции, цвет ячейки — средняя доля соответствующей лексики. - Это даёт компактный «эмоциональный профиль» категорий: видно, какие разделы ближе друг к другу по набору *_rate, а какие резко отличаются.
Список источников
1)Основной датасет — заголовки новостей
News Category Dataset — заголовки новостей HuffPost за 2012–2022 годы, с метаданными (категория, дата и др.). Этот датасет часто используют для NLP-задач и анализа текста в научных исследованиях и практических проектах. 
🔗 https://www.kaggle.com/datasets/rmisra/news-category-dataset
2)NRC Emotion Lexicon — словарь эмоций
NRC Emotion Lexicon — широко используемый словарь, в котором слова сопоставлены с набором эмоций: anger, fear, anticipation, trust, surprise, sadness, joy, disgust и др. 
🔗 https://saifmohammad.com/WebPages/NRC-Emotion-Lexicon.htm 
3)Научная работа о Datase-те News Category
Описание датасета в научной публикации (arXiv), где приводится его метаинформация: 🔗 https://arxiv.org/abs/2209.11429