Всем привет! Я провел исследовательский анализ данных и визуализацию для набора данных YouTube Trending Videos в США, используя Python.
Коды будут выше соответствующих описаний для всех моих шагов. Посмотрим, что я нашел!
from google.colab import files uploaded = files.upload() import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plot df = pd.read_csv(‘US_youtube_trending_data.csv’) df.head(3) df.tail(3) df.shape
Я начал с загрузки набора данных и импорта библиотек. Набор данных доступен на Kaggle. Затем был создан фрейм данных. Вы можете увидеть первые 3 строки на рисунке 1. Набор данных состоит из 14798 строк и 16 столбцов. Другими словами, в наборе данных 16 функций.
from datetime import datetime df[‘trending_date’] = pd.to_datetime(df[‘trending_date’], format=”%Y-%m-%dT%H:%M”) df[‘publishedAt’] = pd.to_datetime(df[‘publishedAt’], format=”%Y-%m-%dT%H:%M”) df.head(3)
Как показано на рисунке 1, столбцы с датой публикации и датой тенденции имеют неправильный формат. Чтобы избежать этой сложности, используются приведенные выше коды. Теперь фрейм данных выглядит, как на рисунке 2. Дата тенденции набора данных включает данные с 12 августа 2020 года по 24 октября 2020 года, а дата публикации началась 11 августа 2020 года и закончилась 19 октября 2020 года.
df.nunique()
Как я уже упоминал ранее, есть 16 функций. Цифры не могли показать все особенности. Приведенный выше код показал нам функции и количество уникальных переменных. Результат показан на рисунке 3.
trends = df.drop([‘video_id’, ‘categoryId’, ‘comments_disabled’, ‘ratings_disabled’], axis=1) correlation = trends.corr() fig = plot.figure(figsize=(10, 8)) sns.heatmap(correlation, xticklabels = correlation.columns, yticklabels = correlation.columns, annot = True, cmap=’RdPu’, annot_kws={‘weight’:’bold’}) plot.title('Heat Map')
Давайте посмотрим на корреляцию. Чтобы найти приемлемые результаты, я удалил несколько столбцов с категорией, в которых указаны идентификатор видео, идентификатор категории, отключенные комментарии и рейтинги. Таким образом, мы можем увидеть корреляцию количества просмотров, лайков, антипатий и количества комментариев с помощью тепловой карты. Мы видим, что с коэффициентом 0,92 наибольшая корреляция наблюдается между количеством просмотров и лайками на рисунке 4.
colors = ["#CD4FDE"] sns.set_palette(sns.color_palette(colors)) sns.lmplot(x = ‘likes’, y = ‘view_count’, data = trends) plot.title(‘View Count vs. Likes’)
Линейность между количеством просмотров и лайками более четко видна на рисунке 5.
sns.set(rc={‘figure.figsize’:(12,10)}) ax= sns.lineplot(x=’trending_date’, y=’view_count’, data=df, ci=False, color=’#CE4DBD’) plot.title(‘View Count vs. Trending Date’)
Давайте посмотрим на взаимосвязь между количеством просмотров и датой тренда. Для этого используется линейный график. Количество просмотров после 15 августа действительно велико по сравнению со всеми датами с тенденциями в тренде. А наименьшее количество просмотров наблюдается после 15 сентября.
sns.set(rc={‘figure.figsize’:(8,5)}) ax= sns.lineplot(x=’publishedAt’, y=’likes’, data=df, ci=False, color=’#CE4DBD’) plot.title(‘Likes vs. Published Date’)
Аналогичный линейный сюжет был создан для лайков и опубликованных дат. Итак, после 15 августа лайков стало больше. Результат показан на рисунке 7.
sns.set(rc={'figure.figsize':(8,10)}) top10channel = df.groupby(["channelTitle"]).size().sort_values(ascending = False).head(10) sns.barplot(top10channel.values, top10channel.index.values, palette = "rocket") plot.title("Top 10 Trending Youtube Channels")
Затем каналы отсортированы по частоте. Вы можете увидеть 10 самых популярных каналов на Рисунке 8. Самый популярный канал - это NBA.
sns.set(rc={'figure.figsize':(8,12)}) by_channel = df.groupby("title").size().reset_index(name="view_count") \.sort_values("view_count", ascending=False).head(20) ax =sns.barplot(x="view_count", y="title", data=by_channel,palette=sns.cubehelix_palette(n_colors=22, reverse=True)) plot.title('Most Viewed Videos') plot.xlabel("View") plot.ylabel("Video Title")
Самые просматриваемые видео показаны на Рисунке 9. Сначала были сгруппированы названия видео. Затем он отсортирован по количеству просмотров. Итак, Justin Bieber - Holy ft. Chance The Rapper - это самое просматриваемое видео в наборе данных.
df.loc[df['categoryId'] ==1, 'category'] = 'Film & Animation' df.loc[df['categoryId'] ==2, 'category'] = 'Autos & Vehicles' df.loc[df['categoryId'] ==10, 'category'] = 'Music' df.loc[df['categoryId'] ==15, 'category'] = 'Pets & Animals' df.loc[df['categoryId'] ==17, 'category'] = 'Sports' df.loc[df['categoryId'] ==19, 'category'] = 'Travel & Events' df.loc[df['categoryId'] ==20, 'category'] = 'Gaming' df.loc[df['categoryId'] ==22, 'category'] = 'People & Blogs' df.loc[df['categoryId'] ==23, 'category'] = 'Comedy' df.loc[df['categoryId'] ==24, 'category'] = 'Entertainment' df.loc[df['categoryId'] ==25, 'category'] = 'News & Politics' df.loc[df['categoryId'] ==26, 'category'] = 'Howto & Style' df.loc[df['categoryId'] ==27, 'category'] = 'Education' df.loc[df['categoryId'] ==28, 'category'] = 'Science & Technology' df.loc[df['categoryId'] ==29, 'category'] = 'Nonprofits & Activism' df.head(5)
Как известно, набор данных не имеет названия категории. У него есть только идентификаторы категорий. По этой причине был добавлен столбец категории. В столбце категории отображаются названия категорий. Я принял этот веб-сайт как ссылку при сопоставлении идентификатора категории и имени категории. Таким образом можно создавать графики в соответствии с названием категории. Вы можете увидеть столбец категории на рисунке 10.
sns.set(rc={'figure.figsize':(10,10)}) ax= sns.barplot(x='likes', y='category', data=df, ci=False, palette='magma') plot.title('Likes vs. Category') plot.xlabel("Likes") plot.ylabel("Category")
Посмотрим, у какой категории больше всего лайков. Категория «Музыка» имеет больше всего лайков, а «Новости и политика» - меньше всего лайков, как показано на Рисунке 11.
sns.set(rc={‘figure.figsize’:(10,15)}) ax= sns.barplot(x=’view_count’, y=’category’, data=df, ci=False, palette=’rocket’ , hue=’ratings_disabled’)
На рисунке 12 мы видим, какие категории просматриваются больше. Также мы можем видеть, отключены ли рейтинги для категорий. Фиолетовая полоса показывает, что рейтинги видео не отключены, а коралловая полоса показывает, что оценки видео отключены. Рейтинги в основном отключены для музыкальной категории.
sns.set(rc={‘figure.figsize’:(5,5)}) sns.barplot(x=’comments_disabled’, y=’view_count’, data=df, palette=’magma’, ci= False) plot.title(‘View Count vs. Comments Disabled’)
На рисунке 13 показана взаимосвязь между количеством просмотров и отключенными комментариями. Как видно, видео с отключенными комментариями получили больше просмотров.
sns.set(rc={‘figure.figsize’:(10,6)}) df.likes.plot(kind=’line’,color=’#93089A’, label = ‘Likes’, linestyle = ‘ --‘) df.dislikes.plot(color=’black’, label = ‘Dislikes’) plot.title(‘Likes vs. Dislikes’) plot.xlabel(‘Number of videos’) plot.ylabel(‘Likes and Dislikes’)
Сравним лайки и антипатии по количеству видео. Фиолетовая линия показывает лайки, а черная - антипатии. Сюжет показывает, что популярные видео получили больше лайков, чем антипатий.
sns.set(rc={‘figure.figsize’:(20,8)}) sns_ax = sns.boxplot(x=’category’,y=’comment_count’,data=df) category_boxplot = sns_ax.set_xticklabels(labels, rotation=90) category_boxplot = sns_ax.set(yscale=”log”) plot.title(‘Boxplot : Category vs. Comment’) plot.ylabel(‘comments’)
Ящичковая диаграмма помогает сравнить соответствующие медианы каждой ящичной диаграммы. Кроме того, создание коробчатой диаграммы - самый простой способ выявить выбросы. На рисунке 15 категории сравнивались согласно комментариям. Как видите, наибольшее количество комментариев находится в категории «Игры». Наименьшее среднее количество комментариев у категории «Путешествия и события». Музыка получила больше всего выбросов.