Dans le cadre d'un projet sur l'utilisation d'Apache SPARK, nous devions choisir un jeu de données et répondre à une problématique lié à ce dataset à l'aide d'Apache SPARK. Nous avons choisi un dataset sur les Vidéos Youtube "Tendances" disponible sur Kaggle. Pour plus de détail voir lien
Notre problématique était simple : Interpréter les tendances Youtube et essayer de découvrir des méchanismes, facteurs de tendance
Le dataset se divise en deux partie;
Premièrement en un fichier json contenant des informations sur les categories et notamment le nom d'une catégorie pour un id donné (les deux informations qui nous importent ici)
Deuxièmement en fichiers csv contenant toutes les informations nécéssaires sur les vidéos en tendances. Chaque pays a un fichier qui lui est propre (USA, Great Britain, Germany, Canada, France, Russia, Mexico, South Korea, Japan, India)
Un exemple de ligne :
video_id | channel_title | trending_date | title | category_id | publish_time | tags | views | likes | dislikes | comment_count | thumbnail_link | comments_disabled | ratings_disabled | video_error_or_removed | description |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
FlsCjmMhFmw | YouTube Spotlight | 17.10.12 | YouTube Rewind: The Shape of 2017 | #YouTubeRewind | 24 | 24 2017-12-06T17:58:51.000Z | Rewind"|"Rewind 2017"|"youtube rewind 2017"|"#YouTubeRewind"|"Rewind 2016"|"Dan and Phil"|"Grace Hel... | 100911567 | 2656682 | 1353661 | 682890 | https://i.ytimg.com/vi/FlsCjmMhFmw/default.jpg | False | False | False | YouTube Rewind 2017. Celebrating the videos, people, music and memes that made 2017. #YouTubeRewind... |
Certaines informations ("video_id", "thumbnail_link", "tags") ne nous étaient pas utile dans le cadre de notre démarche, nous les avons donc pas retenues.
L'information "category_id" étant difficilement inteprétable, nous avons donc rajouté une nouvelle colonne "category_name" en nous basant sur le fichier json category.
Voilà à quoi ressemble nos nouvelles lignes de données :
channel_title | trending_date | title | category_id | publish_time | views | likes | dislikes | comment_count | comments_disabled | ratings_disabled | video_error_or_removed | description | category_name |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
YouTube Spotlight | 17.10.12 | YouTube Rewind: The Shape of 2017 | #YouTubeRewind | 24 | 24 2017-12-06T17:58:51.000Z | 100911567 | 2656682 | 1353661 | 682890 | False | False | False | YouTube Rewind 2017. Celebrating the videos, people, music and memes that made 2017. #YouTubeRewind... | Entertainment |
Les divers exemples ci-dessous se basent sur le dataset français.
readVideosFile(spark, "FR")
→ Récupère un fichier selon le code langue et le renvoie dans un dataframe
readCategoriesFile(spark)
→ Récupère le fichier category et le renvoie dans un dataframe
getGlobalVideosDf(spark, lang_code_to_continent)
→ Créé un dataframe regroupant tous les fichiers du dataset hormis category, rajoute également deux nouvelles colonnes "lang_code" ainsi que "continent" ("North_America", "Europe", "Asia", "Russia")
getTotalViewsPerCategoryForSpecificChannel(spark, df, artist)
→ Renvoie un dataframe avec, pour une chaîne youtube donnée, le nombre de vidéos faites par catégorie ainsi que le nombre total de vues associé
Exemple avec la chaîne youtube "Anil B" :
getMostWatchedChannelsForSpecificYear(df, yearRequested)
→ -> Renvoie un dataframe avec les chaînes youtube ayant été le plus visionné pour des vidéos parues une année spécifique
Exemple :
getMostWatchedCategoryForEachYear(spark, df)
→ Renvoie un dataframe avec pour chaque année, le nom de la catégorie la plus visionnée ainsi que le nombre de vues cumulées
Exemple :
getVideosFromCategory(df, requestedCategory)
→ Renvoie un dataframe de vidéos appartenant à une catégorie précise
getMeanLikesDislikesPerXX(df, column_name)
→ Renvoie un dataframe avec la moyenne de likes et de dislikes par groupe de colonne choisie spécifiquement
Exemple : getMeanLikesDislikesPerXX(fr_videos, "category_name")
getBestRatioPerXX(df, column_name)
→ Renvoie un dataframe avec la moyenne de likes, de dislikes, le ratio likes/dislikes, le % likes ainsi que le % de dislikes par groupe de colonne choisie spécifiquement
Exemple : getBestRatioPerXX(fr_videos, "category_name")
doTrendingsVideosHaveDescription(df)
→ -> Renvoie le % de vidéos en tendances qui n'ont pas de description
Exemple : 7% de vidéos n'ont pas de description
doMostViewedVideosAreTheMostCommentedOnes(df)
→ -> Renvoie un dataframe avec les 100 vidéos les plus visionnées, leur titre, leur chaîne, leur categorie, leur nombre de commentaires et le % de commentaires par rapport à la moyenne (TO DO : A remplacer par la médiane)
Exemple :
Pleins de fonctionnalités peuvent-être imaginées:
- Quelles sont les catégories qui reviennent le plus selon les pays / continent ?
- etc.
- Le projet a été développé avec intellij IDEA
- Scala sdk 2.12.15
- Java sdk 11.0.5
- Spark
- Scala