library("jsonlite") library("tidyverse") data<-fromJSON("C:\\Users\\Marianne\\Desktop\\projet-analyse-exploratoire\\db_animes\\db_animes.json") dfAnimes <- as.data.frame(data) #Filtrage des animes sortis avant 1960 (premier anime créé pour la télévision en 1961) et apres 2021 (pas encore sortis) 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 en annee et 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 utilisees dfAnimes <- select(dfAnimes, title, mean, rank, annee, saison, num_episodes, source, genres) #Rename la colonne des notes utilisateurs pour eviter la confusion avec la fonction mean rename(dfAnimes, note = mean) -> dfAnimes #Nombre et pourcentage d'animes dits "fleuves" (estimes à plus de 50 episodes) parmis les nouveaux animes lancés chaque année dfAnimes %>% filter(num_episodes>50) %>% group_by(annee) %>% count() %>% rename(nbAnimes = n) -> longbois longbois %>% ggplot(aes(annee, nbAnimes)) + geom_point() + geom_line() + labs(y="Nombre de nouveaux animes sortis", x = "Année") + ggtitle("Evolution du nombre de nouveaux animes dits \"fleuves\" de 1961 à 2020") dfAnimes %>% group_by(annee) %>% count() %>% rename(nbAnimes = n) -> allbois left_join(longbois, allbois, by="annee", suffix = c("_long", "_all")) %>% mutate(pourcentage_long = (nbAnimes_long/nbAnimes_all*100)) -> dFLong dFLong %>% ggplot(aes(annee, pourcentage_long)) + geom_point() + geom_line() + labs(y="Poucentage de nouveaux animes \"fleuves\"", x = "Année") + ggtitle("Evolution du pourcentage d'animes dits \"fleuves\" parmi les nouveaux animes de 1961 à 2020") #Evolution du nombre de caracteres (moyen et median) dans les titres dfAnimes %>% group_by(annee) %>% summarise(lettres=mean(nchar(title))) -> meanLettersByYear dfAnimes %>% group_by(annee) %>% summarise(lettres=median(nchar(title))) -> medLettersByYear meanLettersByYear %>% ggplot(aes(annee, lettres)) + geom_point()+ geom_line() + labs(y="Nombre moyen de caractères", x = "Année") + ggtitle("Nombre moyen de caractères dans les titres des nouveaux animes de 1961 à 2020") medLettersByYear %>% ggplot(aes(annee, lettres)) + geom_point()+ geom_line() + labs(y="Nombre médian de caractères", x = "Année") + ggtitle("Nombre médian de caractères dans les titres des nouveaux animes de 1961 à 2020") #Nombre sources des animes par an dfAnimes %>% #filter(source %in% c("original", "manga", "light_novel", "game", "visual_novel", "other", "novel")) %>% group_by(source, annee) %>% count() %>% rename(nbAnimes = n) -> dFSources dFSources %>% ggplot(aes(annee, nbAnimes, fill = source)) + geom_col() + labs(y="Nombre de nouveaux animes", x = "Année") + ggtitle("Répartition des sources nouveaux animes sortis chaque année de 1961 à 2020") #Analyse des notes #Les animes deviennent ils meilleurs avec le temps ? dfAnimes %>% group_by(annee)%>% filter(!is.na(note))%>% summarise(moy_ratings = mean(note)) -> dFRatingsAnnee dFRatingsAnnee %>% ggplot(aes(annee, moy_ratings))+geom_point()+geom_line()+ labs(y="Note moyenne des animes sortis cette année", x = "Année") + ggtitle("Note moyenne des nouveaux animes de 1961 à 2020") dfAnimes %>% group_by(annee)%>% filter(!is.na(note))%>% summarise(med_ratings = median(note)) -> dFRatingsAnneeMed dFRatingsAnneeMed %>% ggplot(aes(annee, med_ratings))+geom_point()+geom_line()+ labs(y="Note médiane des animes sortis cette année", x = "Année") + ggtitle("Note médiane des nouveaux animes de 1961 à 2020") #En quelle saison sortent les meilleurs animes ? dfAnimes %>% group_by(saison)%>% filter(!is.na(note))%>% summarise(moy_ratings = mean(note)) -> dFRatingsSaison dFRatingsSaison %>% ggplot(aes(saison, moy_ratings, shape = saison, color = saison))+geom_point(size = 3)+ labs(y="Note moyenne des animes sortis en cette saison", x = "Année") + ggtitle("Note moyenne des nouveaux animes selon la saison") dfAnimes %>% group_by(saison)%>% filter(!is.na(note))%>% summarise(moy_ratings = median(note)) -> dFRatingsSaisonMed dFRatingsSaisonMed %>% ggplot(aes(saison, moy_ratings, shape = saison, color = saison))+geom_point(size = 3)+ labs(y="Note médiane des animes sortis en cette saison", x = "Année") + ggtitle("Note médiane des nouveaux animes selon la saison") ####### 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")