Wizualizacja danych z biblioteką ggplot2
- Wykresy zmiennej ilościowej
- Wykresy zmiennej jakościowej
- Wykresy dwóch zmiennych ilościowych
- Wykresy dwóch zmiennych jakościowych
- Wykresy zmiennej ilościowej vs zmiennej jakościowej
- Wykresy bąbelkowe (3x Challenge)
- Kilka wykresów na jednym panelu (2x Challenge).
Przydatne materiały:
- ggplot2 cheatsheet
- A. Kassambara - Guide to Create Beautiful Graphics in R.
Dane pochodzą ze strony https://flixgem.com/ (wersja zbioru danych z dnia 12 marca 2021). Dane zawierają informacje na temat 9425 filmów i seriali dostępnych na Netlix.
CHALLENGE 6: Stwórz analogiczny wykres pokazujący aktorów grających w najpopularniejszych produkcjach (score i votes).
n_productions = 50
n_actors = 25
dane_aktorzy <- dane %>%
select(c(Title, Actors, IMDb.Votes, IMDb.Score)) %>%
arrange(-IMDb.Votes) %>%
head(n_productions)
aktorzy <- dane_aktorzy %>%
select(Actors) %>%
unlist() %>%
strsplit(',') %>%
unlist() %>%
trimws() %>%
table() %>%
as.data.frame()
aktorzy <- data.frame(
Actors = aktorzy$.
,`Count` = aktorzy$Freq
,`IMDb Score Average` = NA
,`IMDb Votes Average` = NA
)
for (i in 1:nrow(aktorzy)) {
aktorzy$IMDb.Score.Average[i] <- dane_aktorzy %>%
filter(str_detect(Actors, aktorzy$Actors[i] %>%
as.character() %>% eval())) %>%
select(IMDb.Score) %>% unlist() %>% mean(na.rm = TRUE)
aktorzy$IMDb.Votes.Average[i] <- dane_aktorzy %>%
filter(str_detect(Actors, aktorzy$Actors[i] %>%
as.character() %>% eval())) %>%
select(IMDb.Votes) %>% unlist() %>% mean(na.rm = TRUE)
}
aktorzy%>%
# arrange(desc(IMDb.Votes.Average))%>%
arrange(-Count, -IMDb.Votes.Average)%>%
head(n_actors)%>%
ggplot(aes(IMDb.Score.Average, IMDb.Votes.Average, label = Actors)) +
geom_point(aes(color = Actors, size = Count)) +
geom_text_repel() +
theme(legend.position = 'none') +
labs(title = sprintf('Top %i aktorow pod wzgledem liczby wystapien oraz sredniej liczby glosow \n imdb dla top %i produkcji', n_actors, n_productions))
CHALLENGE 7: Stwórz analogiczny wykres pokazujący w jakich latach powstawały najpopularniejsze produkcje
dane = dane %>%
mutate(
Release.Date = Release.Date %>% as.Date(format = '%m/%d/%Y')
,Netflix.Release.Date = Netflix.Release.Date %>% as.Date(format = '%m/%d/%Y')
)
# miejsce na kod
n=100
dane %>%
select(c(Title, Release.Date, IMDb.Votes)) %>%
arrange(-IMDb.Votes) %>%
head(n) %>%
mutate(Dekada = floor(year(Release.Date)/10)*10)%>%
count(Dekada)%>%
arrange(Dekada)%>%
mutate(Dekada = as.character(Dekada))%>%
rename(Ilosc = n)%>%
ggplot(aes(x=Dekada,y=Ilosc))+
geom_col(aes(fill=Dekada))+
scale_fill_brewer(palette="Set1")+
labs(title = sprintf('Ilosc wyprodukowanych produkcji w danej dekadzie dla top %i \nnajpopularniejszych produkcji', n))+
geom_text(aes(label = Ilosc), vjust = 1.5)
CHALLENGE 8: Jakie są najpopularniejsze języki dostępne na Netflixie? Podpowiedź: wykres kolumnowy.
n_jezyki = 10
dane%>%
pull(Languages) %>%
paste0(collapse = ', ') %>%
str_extract_all('[A-Za-z]+') %>%
unlist() %>%
table() %>%
as.data.frame()%>%
rename(Jezyk = ".", Ilosc = Freq)%>%
arrange(-Ilosc)%>%
head(n_jezyki)%>%
ggplot(aes(x=Jezyk,y=Ilosc))+
geom_col(aes(fill=Jezyk))+
labs(title = sprintf('%i najpopularniejszych jezykow', n_jezyki))+
geom_text(aes(label = Ilosc), vjust = 1)
Kilka wykresów na jednym panelu
CHALLENGE 9: Dla filmów i seriali stwórz wykresy ocen z poszczególnych portali (Hidden Gem, IMDb, Rotten Tomatoes, Metacritic). Podpowiedź: warto odpiwotować dane do formatu long.
n_top = 5
p_movies<-dane %>%
select(Title, Series.or.Movie, Hidden.Gem.Score, IMDb.Score, Rotten.Tomatoes.Score, Metacritic.Score)%>%
filter(Series.or.Movie == "Movie")%>%
drop_na()%>%
mutate(Rotten.Tomatoes.Score=Rotten.Tomatoes.Score/10, Metacritic.Score=Metacritic.Score/10, SredniaOcena = (Hidden.Gem.Score + IMDb.Score + Rotten.Tomatoes.Score + Metacritic.Score)/4)%>%
arrange(-SredniaOcena)%>%
head(n_top)%>%
pivot_longer(Hidden.Gem.Score:Metacritic.Score)%>%
rename(Ocena = value, Witryna = name )%>%
ggplot(aes(x=Title, y = Ocena, fill=Witryna))+
geom_bar(stat="identity", position="dodge")+
labs(title = sprintf("Oceny filmow z roznych witryn dla %i najlepszych filmow na podstawie \nsredniej oceny ze wszystkich witryn", n_top))+
theme(axis.text.x = element_text(angle = 90, vjust = 0.8))+
scale_x_discrete(labels = function(x) str_wrap(x, width = 10))
p_series<-dane %>%
select(Title, Series.or.Movie, Hidden.Gem.Score, IMDb.Score, Rotten.Tomatoes.Score, Metacritic.Score)%>%
filter(Series.or.Movie == "Series")%>%
drop_na()%>%
mutate(Rotten.Tomatoes.Score=Rotten.Tomatoes.Score/10, Metacritic.Score=Metacritic.Score/10, SredniaOcena = (Hidden.Gem.Score + IMDb.Score + Rotten.Tomatoes.Score + Metacritic.Score)/4)%>%
arrange(-SredniaOcena)%>%
head(n_top)%>%
pivot_longer(Hidden.Gem.Score:Metacritic.Score)%>%
rename(Ocena = value, Witryna = name )%>%
ggplot(aes(x=Title, y = Ocena, fill=Witryna))+
geom_bar(stat="identity", position="dodge")+
labs(title = sprintf("Oceny serialow z roznych witryn dla %i najlepszych serialow na podstawie \nsredniej oceny ze wszystkich witryn", n_top))+
theme(axis.text.x = element_text(angle = 90, vjust = 0.8))+
scale_x_discrete(labels = function(x) str_wrap(x, width = 10))
grid.arrange(p_movies, p_series, nrow = 2)
p_movies
p_series
CHALLENGE 10: Jakie wytwórnie filmowe produkują najwięcej i jak się to zmieniało na przestrzeni ostatnich lat?
dekady<-sort(as.numeric(na.omit(unique(floor(year(dane$Release.Date)/10)*10))))
top_prodhouse<-dane%>%
select(Production.House, Series.or.Movie)%>%
filter(Series.or.Movie == "Movie" & Production.House!="")%>%
count(Production.House)%>%
arrange(-n)%>%
head(10)
dane%>%
select(Production.House, Series.or.Movie, Release.Date)%>%
filter(Series.or.Movie == "Movie" & Production.House %in% top_prodhouse$Production.House)%>%
mutate(Dekada = floor(year(Release.Date)/10)*10)%>%
count(Production.House, Dekada)%>%
arrange(-n)%>%
rename(Wytwornia=Production.House, Ilosc = n)%>%
ggplot(aes(x = Dekada, y = Ilosc, label=Wytwornia))+
geom_point(aes(color = Wytwornia, size = Ilosc))+
labs(title=sprintf("Najpopularniejsze wytwornie w poszczegolnych \ndekadach"))
top_prodhouse%>%
rename(Wytwornia=Production.House, Ilosc = n)%>%
ggplot(aes(x=Wytwornia, y=Ilosc, fill=Wytwornia))+
geom_col()+
theme(axis.text.x = element_text(angle = 90, vjust = 0.8))+
scale_x_discrete(labels = function(x) str_wrap(x, width = 10))+
geom_text(aes(label = Ilosc), vjust = 1)+
labs(title=sprintf("Najpopularniejsze wytwornie"))
dane%>%
select(Production.House, Series.or.Movie, Release.Date)%>%
filter(Series.or.Movie == "Movie" & Production.House =="Netflix")%>%
mutate(Rok = year(Release.Date))%>%
count(Production.House, Rok)%>%
arrange(-n)%>%
rename(Wytwornia=Production.House, Ilosc = n)
## Wytwornia Rok Ilosc
## 1 Netflix 2017 15
## 2 Netflix 2019 12
## 3 Netflix 2016 10
## 4 Netflix 2018 8
## 5 Netflix 2014 3
## 6 Netflix 2015 3
## 7 Netflix 2013 2
dane%>%
select(Production.House, Series.or.Movie, Release.Date)%>%
filter(Series.or.Movie == "Movie" & Production.House =="Paramount")%>%
mutate(Rok = year(Release.Date))%>%
count(Production.House, Rok)%>%
arrange(-n)%>%
rename(Wytwornia=Production.House, Ilosc = n)
## Wytwornia Rok Ilosc
## 1 Paramount 1960 2
## 2 Paramount 1982 2
## 3 Paramount 1986 2
## 4 Paramount 2003 2
## 5 Paramount 1979 1
## 6 Paramount 1980 1
## 7 Paramount 1988 1
## 8 Paramount 1990 1
## 9 Paramount 2002 1
## 10 Paramount 2004 1
## 11 Paramount 2011 1
dane%>%
select(Production.House, Series.or.Movie, Release.Date)%>%
filter(Series.or.Movie == "Movie" & Production.House =="Universal Pictures")%>%
mutate(Rok = year(Release.Date))%>%
count(Production.House, Rok)%>%
arrange(-n)%>%
rename(Wytwornia=Production.House, Ilosc = n)
## Wytwornia Rok Ilosc
## 1 Universal Pictures 1996 5
## 2 Universal Pictures 1985 3
## 3 Universal Pictures 2005 3
## 4 Universal Pictures 1995 2
## 5 Universal Pictures 2003 2
## 6 Universal Pictures 2006 2
## 7 Universal Pictures 1978 1
## 8 Universal Pictures 1980 1
## 9 Universal Pictures 1982 1
## 10 Universal Pictures 1983 1
## 11 Universal Pictures 1989 1
## 12 Universal Pictures 1992 1
## 13 Universal Pictures 1993 1
## 14 Universal Pictures 1998 1
## 15 Universal Pictures 1999 1
## 16 Universal Pictures 2001 1
## 17 Universal Pictures 2008 1
## 18 Universal Pictures 2010 1
## 19 Universal Pictures 2015 1
## 20 Universal Pictures 2016 1