Анализ общедоступного набора данных из Kaggle

Близится февраль, и это официальный месяц несостоявшейся новогодней резолюции. С учетом сказанного, это хороший сезон для анализа того, что мы можем узнать из набора данных Новогодняя резолюция.

То, что мы будем использовать здесь, взято из Kaggle. Это ссылка для скачивания набора данных. По словам загрузившего файл, набор данных содержит 5011 твитов, касающихся новогодних решений 2015 года. Взглянув на добытые данные, вы получите общее представление о том, что пользователи твиттера из Соединенных Штатов.

В этом реальном практическом упражнении мы рассмотрим следующее:

  • Превратите CSV-файл во фрейм данных.
  • Устранение некоторых простых ошибок.
  • Проверьте пропущенные значения.
  • Данные GroupBy на основе различных функций.
  • Найдите наибольшее количество новогодних обещаний на основе различных факторов.
  • Получите лучшие твиты от самого высокого к самому низкому и наоборот.
  • Создайте линейный график.
  • Создайте гистограмму.

Важно: я использовал блокнот jupyter для запуска кода. В руководстве предполагается, что вы знаете, как программировать на Python. Если вы впервые, эта ссылка может помочь вам создать основу для Python.

Импорт библиотек

Необходимые библиотеки следующие:

  • Pandas для управления и анализа.
  • Matplotlib и Seaborn для визуализации данных.
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

Загрузка набора данных

Мы будем использовать функцию read_csv для чтения CSV-файла и сохранения его в переменной с именем df.

df = pd.read_csv('new_year_resolutions_dataset.csv')

Я получил ошибку так рано при открытии файла csv.

ParserError: Error tokenizing data. C error: Expected 4 fields in line 18, saw 5

Основываясь на показанной ошибке, мы видим здесь проблему парсера. Давайте исследуем и откроем файл, чтобы увидеть, как выглядят данные.

Если вы откроете файл, вы заметите, что разделителем CSV-файла является не запятая, а точка с запятой (это также было указано загрузчиком набора данных). Таким образом, синтаксический анализатор испытывает трудности с тем, какой разделитель следует использовать. Итак, давайте укажем разделитель следующим образом:

df = pd.read_csv('new_year_resolutions_dataset.csv', sep=';')

Отлично ошибка ушла.

Аудит данных

Давайте проверим, как выглядит фрейм данных.

df

После выполнения вышеуказанной команды у нас есть общий вид данных, с которыми мы собираемся иметь дело. Теперь давайте получим более подробную информацию о фрейме данных. Начиная с его формы.

df.shape

Результат:

(5002, 14)

На основе вывода кадр данных состоит из 5002 строк и 14 столбцов. На данный момент это означает, что у нас есть 5002 твита, которые можно обработать и проанализировать. Тем не менее число не так далеко от 5011.

Получив форму, давайте получим общую информацию о фрейме данных.

df.info()

Это скриншот вывода:

Информация говорит нам о том, что здесь много пропущенных значений. Давайте получим сумму всех пропущенных значений в этом наборе данных.

df.isnull().sum()

Это скриншот вывода:

Исходя из приведенного выше результата, в 3 столбцах отсутствуют тысячи значений.

Удалить столбцы

Прежде чем мы займемся отсутствующими значениями, давайте еще раз взглянем на фрейм данных и удалим ненужные нам столбцы.

Важно! Если вы впервые изучаете науку о данных. Нет правильного и неправильного в том, какие столбцы нужно удалить. Это основано на личных предпочтениях в связи с тем, какая информация необходима.

Что касается конфиденциальности пользователя, я удалю имя и tweet_id. Тогда мне не понадобятся retweet_count, text, tweet_coord, tweet_created, tweet_id и user_timezone, поэтому я тоже уберу эти столбцы.

dataFrame = df.drop(columns=['name', 'retweet_count', 'text', 'tweet_coord', 'tweet_created', 'tweet_id', 'user_timezone'])

Я сохранил результат в новой переменной. Давайте проверим это.

dataFrame

Это скриншот вывода:

Давайте еще раз проверим, есть ли еще недостающие данные.

dataFrame.isnull().sum()

Это скриншот вывода:

Хороший. Больше не нужно иметь дело с пропущенными значениями.

После того, как мы закончили с очисткой, пришло время проанализировать, что мы можем узнать из данных. Новогоднее решение человека находится в столбце «разрешение_темы». Итак, давайте посчитаем, сколько новогодних разрешений у нас есть в наборе данных.

dataFrame['resolution_topics'].count()

Вывод по-прежнему 5002, что совпадает с тем, что мы изначально получили из первой версии фрейма данных.

Твиты по дате

Я хочу знать количество твитов в день. Давайте сосредоточимся на столбце tweet_date, сгруппировав все одинаковые даты, а затем подсчитав общее количество.

tweetDate = dataFrame.groupby('tweet_date').count()

После этого важно сбросить индекс.

tweetDate.reset_index(inplace=True)

Затем проверьте, как выглядят данные после обработки.

tweetDate[['tweet_date', 'resolution_topics']]

Это скриншот вывода:

Давайте посмотрим самый ранний твит.

tweetDate['tweet_date'].min()

Результат:

'2014-12-21'

Как насчет последнего твита.

tweetDate['tweet_date'].max()

Результат:

'2015-01-02'

Затем давайте получим топ-5 самых высоких твитов по дате.

tweetDate.sort_values(ascending=False, by=['resolution_topics']).head(5)[['tweet_date', 'resolution_topics']]

Это скриншот вывода:

Наконец, давайте визуализируем данные, создав график.

plt.figure(figsize=(10,5)) # Adjust the size of the graph
tweetDatePlot = sns.lineplot(data=tweetDate, x='tweet_date', y='resolution_topics') # Creates the graph
tweetDatePlot.tick_params(axis='x', rotation=90) # turn the xlabel to 90 degrees.  Or else, the labels will be on top of one another.

Я размещаю комментарий к каждой строке, чтобы объяснить ее назначение.

Вот как выглядит график:

Твиты по штатам

Я хочу знать твиты по штатам. Поэтому сначала сгруппируйте tweet_state, а затем посчитайте общее разрешение для каждого состояния.

tweetState = dataFrame.groupby('tweet_state').count()

После этого важно сбросить индекс.

tweetState.reset_index(inplace=True)

Затем проверьте, как выглядят данные после обработки.

tweetState[['tweet_state', 'resolution_topics']]

Давайте получим наибольшее количество твитов по штатам.

tweetState[tweetState.resolution_topics == tweetState.resolution_topics.max()][['tweet_state', 'resolution_topics']]

На рисунке 8 ниже показано, что это CA с 739 твитами.

Как насчет наименьшего количества твитов по штатам.

tweetState[tweetState.resolution_topics == tweetState.resolution_topics.min()][['tweet_state', 'resolution_topics']]

На рисунке 9 ниже показано, что это ND только с 3 твитами.

Теперь давайте возьмем топ-5 самых популярных твитов по штатам.

tweetState[['tweet_state', 'resolution_topics']].sort_values(by='resolution_topics', ascending=False).head(5)

Это скриншот вывода:

Как насчет 5 наименьших твитов по штатам.

tweetState[['tweet_state', 'resolution_topics']].sort_values(by='resolution_topics').head(5)

Это скриншот вывода:

Наконец, давайте визуализируем данные, создав график.

plt.figure(figsize=(20,5))
sns.barplot(data=tweetState, x='tweet_state', y='resolution_topics')

Вот как выглядит график:

Твиты по регионам

На этот раз я хочу знать твиты по регионам. Сгруппируйте tweet_region, затем подсчитайте общее разрешение для каждого региона.

tweetRegion = dataFrame.groupby('tweet_region').count()

После этого важно сбросить индекс.

tweetRegion.reset_index(inplace=True)

Затем проверьте, как выглядят данные после обработки.

tweetRegion[['tweet_region', 'resolution_topics']]

Это скриншот вывода:

Давайте расположим его от большего числа к меньшему.

tweetRegion[['tweet_region', 'resolution_topics']].sort_values(by='resolution_topics', ascending=False)

Это скриншот вывода:

Теперь давайте визуализируем данные в виде графика.

plt.figure(figsize=(10,5))
sns.barplot(data=tweetRegion, x='resolution_topics', y='tweet_region')

Вот как выглядит график:

Твиты по полу

Я хочу узнать, кто больше всего твитит о новогоднем решении (женщина или мужчина). Сгруппируйте данные по полу, затем подсчитайте общее разрешение для каждого пола.

tweetGender = dataFrame.groupby('gender').count()

После этого важно сбросить индекс.

tweetGender.reset_index(inplace=True)

Затем проверьте, как выглядят данные после обработки.

tweetGender[['gender', 'resolution_topics']]

Это скриншот вывода:

Наконец, визуализируйте данные.

sns.barplot(data=tweetGender, x='gender', y='resolution_topics', order=['male', 'female'])

Вот как выглядит график:

Твиты по категориям

Я хочу знать твиты по категориям. Сгруппируйте данные по разрешению_категории, затем подсчитайте общее разрешение по категориям.

tweetCategory = dataFrame.groupby('resolution_category').count()

После этого важно сбросить индекс.

tweetCategory.reset_index(inplace=True)

Затем проверьте, как выглядят данные после обработки.

Давайте посмотрим на наибольшее количество твитов по категориям.

tweetCategory[tweetCategory.resolution_topics == tweetCategory.resolution_topics.max()][['resolution_category', 'resolution_topics']]

Это скриншот вывода:

Как насчет самой низкой.

tweetCategory[tweetCategory.resolution_topics == tweetCategory.resolution_topics.min()][['resolution_category', 'resolution_topics']]

Это скриншот вывода:

Мне интересно увидеть топ-3.

tweetCategory[['resolution_category', 'resolution_topics']].sort_values(by='resolution_topics', ascending=False).head(3)

Это скриншот вывода:

Мне также интересно узнать о 3 наименьших твитах по категориям.

tweetCategory[['resolution_category', 'resolution_topics']].sort_values(by='resolution_topics').head(3)

Это скриншот вывода:

Наконец, давайте посмотрим, как это выглядит, если мы визуализируем данные.

plt.figure(figsize=(10,7))
tweetRegionPlot = sns.barplot(data=tweetCategory, x='resolution_category', y='resolution_topics')
tweetRegionPlot.tick_params(axis='x', rotation=90)

Вот как выглядит график:

Что мы узнали из данных

2015 Новогодняя резолюция. На основе 5002 собранных твитов. Вот важные моменты, которые мы узнали:

Люди начали твитить о своем новогоднем решении еще 21 декабря 2014 года. Эта тенденция продолжалась до 2 января 2015 года.

Наибольшее количество твитов, связанных с новогодними решениями, было 31 декабря 2014 года.

Три самых популярных даты твитов:
1. 2014–12–31
2. 2015–01–01
3. 2014–12–29

Штат Калифорния имеет наибольшее количество твитов с новогодними пожеланиями. Нью-Йорк занимает второе место, затем Техас занимает третье место.

Основываясь на обработанных данных, мы можем предположить, что в топ-3 штатах больше всего пользователей твиттера.

Южный регион имеет наибольшее количество комбинированных твитов. Примерно на 50% выше по сравнению с северо-восточным и средним западным регионом.

Существует лишь небольшая разница между твитами пользователей мужского и женского пола. Так что это не очень хороший показатель того, кто больше всего твитит по полу. Нам нужно больше данных об этом факторе.

На основе трех самых популярных твитов по категориям: большинство людей больше заинтересованы в улучшении своего личного роста, включая здоровье и физическую форму. Но большое количество пользователей просто хотят поиздеваться над Новогодней Резолюцией.

Особая благодарность за набор данных, использованный в этой статье.





Да пребудет с вами код,

-Дуга