library("jsonlite") library("tidyverse") data<-fromJSON(txt = "/home/labourde/Bureau/projet-analyse-exploratoire/db_animes/db_animes.json") dfAnimes <- as.data.frame(data) #Filtrage des animes sortis avant 1960 (pas de télé :() et après 2021 et des OVAs, films, etc dfAnimes %>% filter(start_season$year > 1960) %>% filter(start_season$year < 2021) %>% filter(media_type == "tv") -> dfAnimes #Dedoublage de la colonne saison dfAnimes %>% mutate(annee = start_season$year) %>% mutate(saison = start_season$season) -> dfAnimes #Transformation de la colonne genre pour la rendre utilisable getgenre <- function(i){ dfAnimes[i,13][[1]][[2]] -> res return(res) } dfAnimes %>% mutate(genres = lapply(1:4691, getgenre)) -> dfAnimes #Nettoyage des colonnes non utilisées dfAnimes <- select(dfAnimes, title, mean, rank, annee, saison, num_episodes, source, genres) ####### Distribution des genres distributeGenres <- function(i){ line <- as.data.frame(i$genres) line %>% rename(genres = 1) -> Genres i[ , !(names(dfAnimes) %in% c("genres"))] -> anime newdf <- cbind(anime, Genres) return(newdf) } dfAnimesFinal <- data.frame(matrix(ncol = ncol(dfAnimes), nrow = 0)) x <- names(dfAnimes) colnames(dfAnimesFinal) <- x dfAnimesFinal for(i in 1:nrow(dfAnimes)) { row <- dfAnimes[i,] animeWithGenres <- distributeGenres(row) dfAnimesFinal <- rbind(dfAnimesFinal,animeWithGenres) } dfAnimesFinal ####### Plot the genre the most represented dfAnimesFinal %>% mutate(Nombre=sum(1)) %>% group_by(genres) %>% summarise(NombreGenre=sum(Nombre)) %>% arrange(desc(NombreGenre)) -> mostCommonGenre mostCommonGenre <- head(mostCommonGenre,10) ggplot(mostCommonGenre,aes(x=reorder(genres,NombreGenre),y=NombreGenre)) + geom_bar(stat='Identity',aes(fill=genres)) + labs(y="Occurence", x = "Genre") + ggtitle("Les 10 genres les plus représentés") ####### Evolution des 5 genres les plus représentés sur les 5 dernières années dfAnimesFinal %>% filter(annee>1999) %>% mutate(Nombre=1) %>% group_by(genres,annee) %>% summarise(NombreGenre=sum(Nombre)) %>% arrange(desc(NombreGenre)) %>% group_by(annee) %>% slice_max(order_by = NombreGenre, n = 5) -> mostCommonGenrePast10Years ggplot(mostCommonGenrePast10Years,aes(x=annee,y=NombreGenre,color=genres)) + geom_point() + geom_line() + labs(y="Occurence", x = "Genre") + ggtitle("Evolution des 5 genres les plus représentés sur les 20 dernières années") #Nombre d'animes durant plus de 2 cours (estimés à 30 épisodes) par an => a améliorer dfAnimes %>% filter(num_episodes>30) %>% group_by(annee) %>% count() %>% rename(nbAnimes = n) -> longbois longbois %>% ggplot(aes(annee, nbAnimes)) + geom_col() #Evolution du nombre de lettre (moyenne et médiane) dans les titres par année dfAnimes %>% group_by(annee) %>% summarise(lettres=mean(nchar(data.title))) -> dfAnimes dfAnimes %>% group_by(annee) %>% summarise(lettres=median(nchar(data.title))) -> medLettersByYear meanLettersByYear %>% ggplot(aes(annee, lettres)) + geom_col() medLettersByYear %>% ggplot(aes(annee, lettres)) + geom_col() #Evolution des 5 genres les plus représentés # Explosion de la colonne tags dfAnimes %>% mutate(annee = anime$year) %>% mutate(saison = start_season$season) -> animes_genres_doubles