Źródło: https://www.kaggle.com/datasets/omarhanyy/imdb-top-1000
IMDb (znana również jako Internet Movie Database) to internetowa baza danych informacji związanych z filmami, łącząca opis fabuły filmu, oceny Metastore, oceny i recenzje krytyków i użytkowników, daty premiery i wiele innych aspektów. Większość danych w bazie jest dostarczana przez wolontariuszy.
Zestaw danych zawiera 1000 najlepszych filmów wszech czasów IMDB z atrybutami takimi jak tytuł, certyfikat, czas trwania, gatunek itp. Typowe użycie tego zbioru danych koncenturuje się na analizie dostępnych atrybutów dotyczących samych filmów (gatunek, ograniczenia wiekowe, rok premiery, długość, liczba głosów, IMDB Score, itp.). W niniejszej analizie przedmiotem zainteresowania będą jednak imiona i nazwiska aktorów występujących w każdej z czterech głównych ról dla poszczególnych produkcji.
#ładowanie pakietów do sesji
library (rmarkdown)
library (dplyr)
library (ggplot2)
library (ggeasy)
library (knitr)
library (tidyverse)
library (plotly)
setwd("C:/Users/Inspe/Documents/dokumenty")
imdb_top_1000 <- read.csv("~/dokumenty/imdb_top_1000.csv")
# tworzenie wektora z kolumny pliku csv
RokProd <- as.vector(imdb_top_1000$Released_Year)
# określenie daty produkcji najstarszego filmu w zestawieniu
MinRokProd <- min(RokProd)
# konwertowanie tekstu na liczbę
MinRokProd <- as.numeric(MinRokProd)
MinRokProd
## [1] 1920
# dane uzupełniające
PierwszyRokProd <- 1895
PierwszyRokProd
## [1] 1895
# określanie liczby lat produkcji filmowych nie ujętych w zestawieniu
ile_lat_NIE <- MinRokProd - PierwszyRokProd
ile_lat_NIE
## [1] 25
# określanie liczby lat produkcji filmowych objętych zestawieniem
ile_lat_TAK <- 2024 - MinRokProd
ile_lat_TAK
## [1] 104
# udział procentowy produkcji nieuwzględnionych
Udział_lat_nie <- ile_lat_NIE/(ile_lat_NIE+ile_lat_TAK)
Udział_lat_nie
## [1] 0.1937984
# okreeślenie liczebności populacji na koniec okresu pominiętego w źródle danych
populacja1920 <- 1.920
populacja1920
## [1] 1.92
# określenie liczebności populacji na koniec okresu uwzględnionego
populacja2024 <- 8.116
populacja2024
## [1] 8.116
# udział procentowy maksymalnej wartości populacji na koniec okresu pominiętego względem okresu uwzględnionego
udział_pop_nie <- populacja1920/(populacja2024)
udział_pop_nie
## [1] 0.2365697
# oszacowanie liczby filmów nieuwzględnionych
udział_nie <- Udział_lat_nie * udział_pop_nie
udział_nie
## [1] 0.04584685
# obliczanie częstotliwości
ile_razy1 <- table(imdb_top_1000$Star1, exclude = NULL)
ile_razy2 <- table(imdb_top_1000$Star2, exclude = NULL)
ile_razy3 <- table(imdb_top_1000$Star3, exclude = NULL)
ile_razy4 <- table(imdb_top_1000$Star4, exclude = NULL)
# tworzenie ramek danych z tabel
rola1 <- data.frame(ile_razy1)
rola2 <- data.frame(ile_razy2)
rola3 <- data.frame(ile_razy3)
rola4 <- data.frame(ile_razy4)
# ograniczanie zestawu danych poprzez filtrowanie pojedyńczych wystąpień
rola01 <- filter(rola1, Freq > 1)
rola02 <- filter(rola2, Freq > 1)
rola03 <- filter(rola3, Freq > 1)
rola04 <- filter(rola3, Freq > 1)
# definiowanie wag
waga1 = 1.0
waga2 = 0.9
waga3 = 0.8
waga4 = 0.7
# obliczanie iloczynu wagi i częstotliwości wystąpień
rola001 <- mutate(rola01, Index = Freq * waga1)
rola002 <- mutate(rola02, Index = Freq * waga2)
rola003 <- mutate(rola03, Index = Freq * waga3)
rola004 <- mutate(rola04, Index = Freq * waga4)
# łączenie ramek danych
merge_a <- full_join(rola001, rola002, by = "Var1")
merge_b <- full_join(rola003, rola004, by = "Var1")
merge_all <- full_join(merge_a, merge_b, by = "Var1")
#zamiana NA na zera
merge_all[is.na(merge_all)] <- 0
#obliczenie indeksu skonsolidowanego
result <- mutate(merge_all, CombIndex = Index.x.x + Index.x.y + Index.y.y + Index.y.x,)
#sortowanie degresywne 25 najlepszych wyników
result1 <- result %>% arrange(desc(CombIndex)) %>% head(25)
knitr::kable(result1, caption = 'TOP25::Najlepsi aktorzy filmowi wszechczasów - indeks skonsolidowany')
| Var1 | Freq.x.x | Index.x.x | Freq.y.x | Index.y.x | Freq.x.y | Index.x.y | Freq.y.y | Index.y.y | CombIndex |
|---|---|---|---|---|---|---|---|---|---|
| Robert De Niro | 11 | 11 | 3 | 2.7 | 3 | 2.4 | 3 | 2.1 | 18.2 |
| Al Pacino | 10 | 10 | 3 | 2.7 | 0 | 0.0 | 0 | 0.0 | 12.7 |
| Tom Hanks | 12 | 12 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 12.0 |
| Clint Eastwood | 10 | 10 | 2 | 1.8 | 0 | 0.0 | 0 | 0.0 | 11.8 |
| Christian Bale | 8 | 8 | 3 | 2.7 | 0 | 0.0 | 0 | 0.0 | 10.7 |
| Brad Pitt | 4 | 4 | 4 | 3.6 | 2 | 1.6 | 2 | 1.4 | 10.6 |
| Ethan Hawke | 5 | 5 | 2 | 1.8 | 2 | 1.6 | 2 | 1.4 | 9.8 |
| Humphrey Bogart | 9 | 9 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 9.0 |
| Leonardo DiCaprio | 9 | 9 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 9.0 |
| Denzel Washington | 7 | 7 | 2 | 1.8 | 0 | 0.0 | 0 | 0.0 | 8.8 |
| Matt Damon | 4 | 4 | 5 | 4.5 | 0 | 0.0 | 0 | 0.0 | 8.5 |
| James Stewart | 8 | 8 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 8.0 |
| Johnny Depp | 8 | 8 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 8.0 |
| Rachel McAdams | 0 | 0 | 2 | 1.8 | 4 | 3.2 | 4 | 2.8 | 7.8 |
| Scarlett Johansson | 0 | 0 | 2 | 1.8 | 4 | 3.2 | 4 | 2.8 | 7.8 |
| Harrison Ford | 5 | 5 | 3 | 2.7 | 0 | 0.0 | 0 | 0.0 | 7.7 |
| Edward Norton | 3 | 3 | 0 | 0.0 | 3 | 2.4 | 3 | 2.1 | 7.5 |
| Rupert Grint | 0 | 0 | 0 | 0.0 | 5 | 4.0 | 5 | 3.5 | 7.5 |
| Aamir Khan | 7 | 7 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 7.0 |
| Toshirô Mifune | 7 | 7 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 7.0 |
| Russell Crowe | 5 | 5 | 2 | 1.8 | 0 | 0.0 | 0 | 0.0 | 6.8 |
| Ed Harris | 0 | 0 | 4 | 3.6 | 2 | 1.6 | 2 | 1.4 | 6.6 |
| Morgan Freeman | 2 | 2 | 0 | 0.0 | 3 | 2.4 | 3 | 2.1 | 6.5 |
| Emma Watson | 0 | 0 | 7 | 6.3 | 0 | 0.0 | 0 | 0.0 | 6.3 |
| Cary Grant | 6 | 6 | 0 | 0.0 | 0 | 0.0 | 0 | 0.0 | 6.0 |
#wizualizacja
chart2 <- ggplot(data = result1, aes(x = reorder(Var1, -CombIndex), y = CombIndex, fill = CombIndex))
chart2 <- chart2 + geom_bar( stat = "identity")
chart2 <- chart2 + ggeasy::easy_rotate_labels(which = "x", angle = 90)
chart2 <- chart2 + labs(x="", y="", title = "Najlepsi aktorzy wszechczasów", subtitle = "Próba oszacowania na podstawie analizy występów w TOP 1000 filmów IMDB")
chart2