Spis treści:
Eksploracja danych z bibliotekami dplyr, tidyr oraz stringr
- Podzbiory kolumn
- Filtrowanie wierszy
- Operatory logiczne, algebra Boola, prawa de Morgana
- Tworzenie nowych kolumn (1x Challenge)
- Wartości brakujące
- Manipulowanie tekstem (3x Challenge)
- Agregacja danych (1x Challenge)
- Tabele przestawne, dane w formacie long oraz wide
- Łączenie tabel
Przydatne materiały:
- dplyr cheatsheet
- tidyr cheatsheet
- stringr cheatsheet
- ggplot2 cheatsheet
- A. Kassambara - Guide to Create Beautiful Graphics in R.
if(!require('tidyverse')) install.packages('tidyverse')
## Ładowanie wymaganego pakietu: tidyverse
## Warning: pakiet 'tidyverse' został zbudowany w wersji R 4.2.2
## ── Attaching packages
## ───────────────────────────────────────
## tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0 ✔ purrr 0.3.5
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.2.1 ✔ stringr 1.4.1
## ✔ readr 2.1.3 ✔ forcats 0.5.2
## Warning: pakiet 'ggplot2' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'tibble' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'tidyr' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'readr' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'purrr' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'dplyr' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'stringr' został zbudowany w wersji R 4.2.2
## Warning: pakiet 'forcats' został zbudowany w wersji R 4.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(tidyverse)
if(!require('dplyr')) install.packages('dplyr')
library(dplyr)
if(!require('stringr')) install.packages('stringr')
library(stringr)
if(!require('lubridate')) install.packages('lubridate')
## Ładowanie wymaganego pakietu: lubridate
## Warning: pakiet 'lubridate' został zbudowany w wersji R 4.2.2
## Ładowanie wymaganego pakietu: timechange
## Warning: pakiet 'timechange' został zbudowany w wersji R 4.2.2
##
## Dołączanie pakietu: 'lubridate'
##
## Następujące obiekty zostały zakryte z 'package:base':
##
## date, intersect, setdiff, union
library(lubridate)
if(!require('readr')) install.packages('readr')
library(readr)
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 Netlixie.
# dane <- dane %>%
# rename(Title = X.U.FEFF.Title)
CHALLENGE 1: Jaki jest najstarszy film Woody’ego Allena dostępny na Netflixie?
dane %>%
select(Title, Release.Date, Series.or.Movie, Netflix.Link, Director) %>%
filter((str_detect(Director, 'Woody Allen')) & !(is.null(Netflix.Link)) & (Series.or.Movie == "Movie")) %>%
arrange(Release.Date)%>%
head(1)
## Title Release.Date Series.or.Movie
## 1 You Will Meet a Tall Dark Stranger 10/22/2010 Movie
## Netflix.Link Director
## 1 https://www.netflix.com/watch/70136072 Woody Allen
CHALLENGE 2: Jakie są trzy najwyżej oceniane komedie dostępne w języku polskim?
dane %>%
select(Title, IMDb.Score, Languages, Genre) %>%
filter(str_detect(Languages, 'Polish') & str_detect(Genre, 'Comedy'))%>%
arrange(-IMDb.Score)%>%
head(3)
## Title IMDb.Score Languages
## 1 Rake 8.5 English, Polish, Indonesian, Turkish
## 2 Teddy Bear 8.2 Polish, English
## 3 Trois Couleurs - Blanc 7.6 Polish, French, English
## Genre
## 1 Comedy, Drama
## 2 Comedy
## 3 Comedy, Drama, Romance
dane %>%
rowwise() %>%
mutate(avg_score = mean(c(IMDb.Score * 10
,Hidden.Gem.Score * 10
,Rotten.Tomatoes.Score
,Metacritic.Score)
,na.rm = TRUE) %>%
round(2)) %>%
select(Title, avg_score, Languages, Genre) %>%
filter(str_detect(Languages, 'Polish') & str_detect(Genre, 'Comedy'))%>%
arrange(-avg_score)%>%
head(3)
## # A tibble: 3 × 4
## # Rowwise:
## Title avg_score Languages Genre
## <chr> <dbl> <chr> <chr>
## 1 Teddy Bear 81.3 Polish, English Comedy
## 2 Bogdan Boner: Egzorcysta 78 Polish Comedy, Animation
## 3 Drunk History - Pó? litra historii 76.5 Polish Comedy
CHALLENGE 3: Dla produkcji z lat 2019 oraz 2020 jaki jest średni czas między premierą a pojawieniem się na Netflixie?
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')
)
dane_3 = dane %>%
select(Title, Release.Date, Netflix.Release.Date)%>%
drop_na(Release.Date)%>%
drop_na(Netflix.Release.Date)%>%
filter(between(year(Release.Date),2019,2020))%>%
mutate(roznica = (Netflix.Release.Date - Release.Date))
mean(dane_3$roznica)
## Time difference of 107.0268 days
CHALLENGE 4: Jakie są najpopularniejsze tagi dla produkcji dostępnych w języku polskim?
dane%>%
select(Tags, Title, Languages) %>%
filter(str_detect(Languages, 'Polish'))%>%
pull(Tags) %>%
paste0(collapse = ', ') %>%
str_extract_all('[A-Za-z]+') %>%
unlist() %>%
table() %>%
as.data.frame()%>%
rename(Tag = ".", Ilosc = Freq)%>%
arrange(-Ilosc)
## Tag Ilosc
## 1 Dramas 195
## 2 Movies 142
## 3 TV 73
## 4 Polish 68
## 5 on 55
## 6 Films 51
## 7 Crime 41
## 8 Thrillers 40
## 9 Comedies 37
## 10 International 35
## 11 Romantic 35
## 12 Based 30
## 13 Shows 29
## 14 Action 25
## 15 based 25
## 16 Books 23
## 17 Classic 21
## 18 Adventure 20
## 19 Historical 15
## 20 Military 14
## 21 Period 11
## 22 Pieces 11
## 23 Biographical 10
## 24 Horror 10
## 25 Independent 10
## 26 life 10
## 27 Life 10
## 28 real 10
## 29 Real 10
## 30 European 9
## 31 a 8
## 32 book 8
## 33 British 8
## 34 French 8
## 35 Issue 8
## 36 Political 8
## 37 Social 8
## 38 Century 7
## 39 Music 7
## 40 th 7
## 41 US 7
## 42 Musicals 6
## 43 Thriller 6
## 44 Critically 5
## 45 Documentaries 5
## 46 Mysteries 5
## 47 Acclaimed 4
## 48 Cult 4
## 49 Dark 4
## 50 Favourites 4
## 51 Fi 4
## 52 literature 4
## 53 Programmes 4
## 54 Sci 4
## 55 Sports 4
## 56 Tearjerkers 4
## 57 Award 3
## 58 Chinese 3
## 59 Documentary 3
## 60 Fantasy 3
## 61 German 3
## 62 Japanese 3
## 63 Kids 3
## 64 Psychological 3
## 65 Supernatural 3
## 66 Adventures 2
## 67 Blockbuster 2
## 68 Cartoons 2
## 69 classic 2
## 70 Comedy 2
## 71 contemporary 2
## 72 Czech 2
## 73 Gangster 2
## 74 Gay 2
## 75 Lesbian 2
## 76 Police 2
## 77 Satires 2
## 78 Spoofs 2
## 79 Teen 2
## 80 War 2
## 81 winning 2
## 82 Winning 2
## 83 acclaimed 1
## 84 African 1
## 85 American 1
## 86 and 1
## 87 Australian 1
## 88 Blockbusters 1
## 89 Book 1
## 90 Classical 1
## 91 Classics 1
## 92 Comic 1
## 93 Courtroom 1
## 94 Docs 1
## 95 Dutch 1
## 96 Eastern 1
## 97 Education 1
## 98 Favorites 1
## 99 for 1
## 100 Globe 1
## 101 Golden 1
## 102 Gory 1
## 103 Late 1
## 104 Latin 1
## 105 Mainland 1
## 106 Mexican 1
## 107 Mockumentaries 1
## 108 Modern 1
## 109 Nature 1
## 110 Night 1
## 111 Oscar 1
## 112 Romance 1
## 113 Russian 1
## 114 Satanic 1
## 115 Science 1
## 116 Screams 1
## 117 Showbiz 1
## 118 Steamy 1
## 119 Stories 1
## 120 Superhero 1
## 121 Zombie 1
CHALLENGE 5: Jakie są średnie oceny filmów wyprodukowanych w poszczególnych dekadach (tzn. lata 60, 70, 80, 90 etc.)?
dane%>%
mutate(Dekada = floor(year(Release.Date)/10)*10)%>%
drop_na(Dekada)%>%
group_by(Dekada)%>%
summarize(SredniaOcena = mean(IMDb.Score, na.rm = TRUE) %>% round(2)) %>%
# arrange(-SredniaOcena)
arrange(Dekada)
## # A tibble: 10 × 2
## Dekada SredniaOcena
## <dbl> <dbl>
## 1 1930 7.46
## 2 1940 7.43
## 3 1950 7.37
## 4 1960 7.46
## 5 1970 7.33
## 6 1980 7.11
## 7 1990 6.88
## 8 2000 6.85
## 9 2010 6.94
## 10 2020 7.04