Source: Psi Chi R Contest

#Load packages and import data

#install.packages(tidyverse)

library(ggplot2)
library(dplyr)
library(readr)
library(tidyr)

feb=read.csv('feb2024_imdb_top_1000.csv')

Level 1 -

To facilitate analyses, the ‘Runtime’ variable will need to be fixed so that ‘min’ is removed, and the column only contains numerical values. -To facilitate analyses, the ‘Genre’ variable will need to be edited so that each genre separated by a comma is listed in its own respective column.

feb2=feb %>% 
  mutate(Genre =strsplit(Genre, ", ")) %>% 
  unnest_wider(Genre,names_sep = "_")

feb2$Runtime=gsub("min","",feb$Runtime) 

Level 2-

Provide the mean, standard deviation, median, and range of values for ‘IMDB_Rating’

-Provide the mean, standard deviation, median, and range of values for ‘Gross’

summary(feb2$IMDB_Rating)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   7.600   7.700   7.900   7.949   8.100   9.300
mean(feb2$IMDB_Rating,na.rm = T) #Mean is 7.949
## [1] 7.9493
median(feb2$IMDB_Rating,na.rm = T) #Median is 7.9
## [1] 7.9
sd(feb2$IMDB_Rating,na.rm = T) #Standard dev. is 0.275
## [1] 0.2754912
range(feb2$IMDB_Rating,na.rm = T) #Range is 7.6 to 9.3
## [1] 7.6 9.3
summary(feb2$Gross)
##      Min.   1st Qu.    Median      Mean   3rd Qu.      Max.      NA's 
##      1305   3253559  23530892  68034751  80750894 936662225       169
mean(feb2$Gross,na.rm = T) #Mean is $68,034,751
## [1] 68034751
median(feb2$Gross,na.rm = T) #Median is $23,530,892
## [1] 23530892
sd(feb2$Gross,na.rm = T) #Standard dev. is $109,750,043
## [1] 109750043
range(feb2$Gross,na.rm = T) #Range is $1,305 to $936,662,225
## [1]      1305 936662225

Level 3-

Provide the mean values for IMDB rating by Released Year- What is the mean ‘IMDB_rating’ of Romance movies?

IMDB_Rating_by_Year=feb2 %>% 
  group_by(Released_Year) %>% 
  summarise(Mean_Rating=mean(IMDB_Rating,na.rm = T))

print(IMDB_Rating_by_Year) #Results printed here
## # A tibble: 100 × 2
##    Released_Year Mean_Rating
##    <chr>               <dbl>
##  1 1920                  8.1
##  2 1921                  8.3
##  3 1922                  7.9
##  4 1924                  8.2
##  5 1925                  8.1
##  6 1926                  8.1
##  7 1927                  8.2
##  8 1928                  8.1
##  9 1930                  8  
## 10 1931                  8.2
## # ℹ 90 more rows
feb3=feb2 %>% 
  filter(Genre_1=='Romance' |
         Genre_2=='Romance' |
         Genre_3=='Romance')

mean(feb3$IMDB_Rating,na.rm = T) #Mean rating of Romance movies is 7.9256
## [1] 7.9256

Level 4-

Create a plot that shows the average ‘IMDB_rating’ for Romance movies over time. -Find the star who was lead in the most romance movies

Romance_Plot=feb3%>% 
  mutate(Released_Year=as.numeric(Released_Year)) %>%
  group_by(Released_Year) %>% 
  summarise(Romance_Mean_Rating=mean(IMDB_Rating)) %>% 
  ggplot(aes(x=Released_Year,y=Romance_Mean_Rating))+
  geom_line(lwd=1,color='darkred') +
  labs(title='The Peaks and Valleys of Love in Romance Movies from 1920 to 2020',subtitle ='Looking at years with the highest and lowest average IMDB ratings',x='Release Years',y='Average IMDB Rating')+
  theme_bw()+
  theme(plot.title = element_text(hjust=.5),
        plot.subtitle = element_text(hjust = .5))+
  expand_limits(x=2025,y=7.5)

print(Romance_Plot) #Line plot on rating averages for romance movies

Romance_Lead=feb3 %>% 
  group_by(Lead_Star=Star1) %>% 
  summarise(Movie_Count=n()) %>% 
  arrange(-Movie_Count)

print(Romance_Lead) #Cary Grant
## # A tibble: 112 × 2
##    Lead_Star       Movie_Count
##    <chr>                 <int>
##  1 Cary Grant                4
##  2 Ethan Hawke               3
##  3 Humphrey Bogart           3
##  4 Aamir Khan                2
##  5 Audrey Tautou             2
##  6 Charles Chaplin           2
##  7 Keira Knightley           2
##  8 Tom Hanks                 2
##  9 Woody Allen               2
## 10 Abhay Deol                1
## # ℹ 102 more rows

Extra Stuff - not part of the submission

Which the top ten directors with the highest average IMDB and Meta scores the most times

library(forcats)

feb2.1=feb2 %>% 
  group_by(Director) %>% 
  filter(Released_Year>=2000) %>% 
  summarise(IMDB_Avg=mean(IMDB_Rating,na.rm = T),Meta_Avg=mean(Meta_score,na.rm = T),Headcount=n()) %>% 
  arrange(desc(Headcount),desc(IMDB_Avg),desc(Meta_Avg)) %>% 
  head(10) %>% 
  mutate(Headcount=as.numeric(Headcount))
feb2.1%>% 
  ggplot(aes(x=fct_reorder(Director,-Headcount),y=Headcount))+
  geom_col(fill='darkgreen')+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 45, hjust = 1,size = 7),
        plot.title = element_text(hjust = .5),
        plot.subtitle = element_text(hjust = .5))+
  labs(y='Count',x='Directors',title='Top 10 Directors with the highest average IMDB and Meta ratings',subtitle = 'Looking at directors starting from year 2000 to now' )
Column Chart on Top 10 directors

Column Chart on Top 10 directors

Aggregate count on genres 1-3

feb3=feb2 %>% 
  mutate(Genre=paste(Genre_1,Genre_2,Genre_3,sep = ", ")) %>% 
  mutate(across(everything(), as.character)) %>% 
  pivot_longer(cols = c('Genre_1','Genre_2','Genre_3'),names_to = "Genre_column",values_to = "Genre_Aggregate") %>% 
  mutate(Gross=as.numeric(Gross),No_of_Votes=as.numeric(No_of_Votes))

feb4=feb3%>% 
  group_by(Genre_Aggregate) %>% 
  summarise(count=n())

feb4 %>% 
  na.omit() %>% 
  ggplot(aes(fill=count,y=fct_reorder(Genre_Aggregate,count),x=count)) +
  theme_bw()+
  geom_col()+
  labs(fill=' ',title = 'Supply and Demand, or Supply OR Demand?',subtitle = 'Looking at genres that gets the most, and the least, production',y='Genres',x='Production Count' )+
  expand_limits(x=800)+
  theme(plot.title = element_text(hjust = .5),
        plot.subtitle = element_text(hjust = .5))

LS0tDQp0aXRsZTogJ1BzaSBDaGkgUiBDb250ZXN0IC0gRmViIDIwMjQnDQphdXRob3I6ICdCeSBBbGFuIExhbScNCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBhbHdheXNfYWxsb3dfaHRtbDogeWVzDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogbm8NCiAgICBhbmNob3Jfc2VjdGlvbnM6IFRSVUUNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KWyoqU291cmNlKio6IFBzaSBDaGkgUiBDb250ZXN0XShodHRwczovL29zZi5pby9temtmdC8pDQoNCg0KYGBge3Igc2V0dXAsaW5jbHVkZT1GfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KG1lc3NhZ2U9Rix3YXJuaW5nPUYsZWNobyA9IFQpDQpgYGANCg0KYGBge3J9DQojTG9hZCBwYWNrYWdlcyBhbmQgaW1wb3J0IGRhdGENCg0KI2luc3RhbGwucGFja2FnZXModGlkeXZlcnNlKQ0KDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyZWFkcikNCmxpYnJhcnkodGlkeXIpDQoNCmZlYj1yZWFkLmNzdignZmViMjAyNF9pbWRiX3RvcF8xMDAwLmNzdicpDQpgYGANCg0KDQojIyBMZXZlbCAxIC0NClRvIGZhY2lsaXRhdGUgYW5hbHlzZXMsIHRoZSDigJhSdW50aW1l4oCZIHZhcmlhYmxlIHdpbGwgbmVlZCB0byBiZSBmaXhlZCBzbyB0aGF0IOKAmG1pbuKAmSBpcyByZW1vdmVkLCBhbmQgdGhlIGNvbHVtbiBvbmx5IGNvbnRhaW5zIG51bWVyaWNhbCB2YWx1ZXMuIA0KLVRvIGZhY2lsaXRhdGUgYW5hbHlzZXMsIHRoZSDigJhHZW5yZeKAmSB2YXJpYWJsZSB3aWxsIG5lZWQgdG8gYmUgZWRpdGVkIHNvIHRoYXQgZWFjaCBnZW5yZSBzZXBhcmF0ZWQgYnkgYSBjb21tYSBpcyBsaXN0ZWQgaW4gaXRzIG93biByZXNwZWN0aXZlIGNvbHVtbi4NCg0KYGBge3J9DQpmZWIyPWZlYiAlPiUgDQogIG11dGF0ZShHZW5yZSA9c3Ryc3BsaXQoR2VucmUsICIsICIpKSAlPiUgDQogIHVubmVzdF93aWRlcihHZW5yZSxuYW1lc19zZXAgPSAiXyIpDQoNCmZlYjIkUnVudGltZT1nc3ViKCJtaW4iLCIiLGZlYiRSdW50aW1lKSANCg0KDQpgYGANCg0KDQojIyBMZXZlbCAyLQ0KUHJvdmlkZSB0aGUgbWVhbiwgc3RhbmRhcmQgZGV2aWF0aW9uLCBtZWRpYW4sIGFuZCByYW5nZSBvZiB2YWx1ZXMgZm9yIOKAmElNREJfUmF0aW5n4oCZDQoNCi1Qcm92aWRlIHRoZSBtZWFuLCBzdGFuZGFyZCBkZXZpYXRpb24sIG1lZGlhbiwgYW5kIHJhbmdlIG9mIHZhbHVlcyBmb3Ig4oCYR3Jvc3PigJkNCg0KYGBge3J9DQpzdW1tYXJ5KGZlYjIkSU1EQl9SYXRpbmcpDQoNCm1lYW4oZmViMiRJTURCX1JhdGluZyxuYS5ybSA9IFQpICNNZWFuIGlzIDcuOTQ5DQptZWRpYW4oZmViMiRJTURCX1JhdGluZyxuYS5ybSA9IFQpICNNZWRpYW4gaXMgNy45DQpzZChmZWIyJElNREJfUmF0aW5nLG5hLnJtID0gVCkgI1N0YW5kYXJkIGRldi4gaXMgMC4yNzUNCnJhbmdlKGZlYjIkSU1EQl9SYXRpbmcsbmEucm0gPSBUKSAjUmFuZ2UgaXMgNy42IHRvIDkuMw0KDQpzdW1tYXJ5KGZlYjIkR3Jvc3MpDQoNCm1lYW4oZmViMiRHcm9zcyxuYS5ybSA9IFQpICNNZWFuIGlzICQ2OCwwMzQsNzUxDQptZWRpYW4oZmViMiRHcm9zcyxuYS5ybSA9IFQpICNNZWRpYW4gaXMgJDIzLDUzMCw4OTINCnNkKGZlYjIkR3Jvc3MsbmEucm0gPSBUKSAjU3RhbmRhcmQgZGV2LiBpcyAkMTA5LDc1MCwwNDMNCnJhbmdlKGZlYjIkR3Jvc3MsbmEucm0gPSBUKSAjUmFuZ2UgaXMgJDEsMzA1IHRvICQ5MzYsNjYyLDIyNQ0KDQpgYGANCg0KDQojIyBMZXZlbCAzLQ0KUHJvdmlkZSB0aGUgbWVhbiB2YWx1ZXMgZm9yIElNREIgcmF0aW5nIGJ5IFJlbGVhc2VkIFllYXItDQpXaGF0IGlzIHRoZSBtZWFuIOKAmElNREJfcmF0aW5n4oCZIG9mIFJvbWFuY2UgbW92aWVzPw0KDQpgYGB7cn0NCklNREJfUmF0aW5nX2J5X1llYXI9ZmViMiAlPiUgDQogIGdyb3VwX2J5KFJlbGVhc2VkX1llYXIpICU+JSANCiAgc3VtbWFyaXNlKE1lYW5fUmF0aW5nPW1lYW4oSU1EQl9SYXRpbmcsbmEucm0gPSBUKSkNCg0KcHJpbnQoSU1EQl9SYXRpbmdfYnlfWWVhcikgI1Jlc3VsdHMgcHJpbnRlZCBoZXJlDQoNCmZlYjM9ZmViMiAlPiUgDQogIGZpbHRlcihHZW5yZV8xPT0nUm9tYW5jZScgfA0KICAgICAgICAgR2VucmVfMj09J1JvbWFuY2UnIHwNCiAgICAgICAgIEdlbnJlXzM9PSdSb21hbmNlJykNCg0KbWVhbihmZWIzJElNREJfUmF0aW5nLG5hLnJtID0gVCkgI01lYW4gcmF0aW5nIG9mIFJvbWFuY2UgbW92aWVzIGlzIDcuOTI1Ng0KDQpgYGANCg0KIyMgTGV2ZWwgNC0NCkNyZWF0ZSBhIHBsb3QgdGhhdCBzaG93cyB0aGUgYXZlcmFnZSDigJhJTURCX3JhdGluZ+KAmSBmb3IgUm9tYW5jZSBtb3ZpZXMgb3ZlciB0aW1lLg0KLUZpbmQgdGhlIHN0YXIgd2hvIHdhcyBsZWFkIGluIHRoZSBtb3N0IHJvbWFuY2UgbW92aWVzDQoNCmBgYHtyfQ0KDQpSb21hbmNlX1Bsb3Q9ZmViMyU+JSANCiAgbXV0YXRlKFJlbGVhc2VkX1llYXI9YXMubnVtZXJpYyhSZWxlYXNlZF9ZZWFyKSkgJT4lDQogIGdyb3VwX2J5KFJlbGVhc2VkX1llYXIpICU+JSANCiAgc3VtbWFyaXNlKFJvbWFuY2VfTWVhbl9SYXRpbmc9bWVhbihJTURCX1JhdGluZykpICU+JSANCiAgZ2dwbG90KGFlcyh4PVJlbGVhc2VkX1llYXIseT1Sb21hbmNlX01lYW5fUmF0aW5nKSkrDQogIGdlb21fbGluZShsd2Q9MSxjb2xvcj0nZGFya3JlZCcpICsNCiAgbGFicyh0aXRsZT0nVGhlIFBlYWtzIGFuZCBWYWxsZXlzIG9mIExvdmUgaW4gUm9tYW5jZSBNb3ZpZXMgZnJvbSAxOTIwIHRvIDIwMjAnLHN1YnRpdGxlID0nTG9va2luZyBhdCB5ZWFycyB3aXRoIHRoZSBoaWdoZXN0IGFuZCBsb3dlc3QgYXZlcmFnZSBJTURCIHJhdGluZ3MnLHg9J1JlbGVhc2UgWWVhcnMnLHk9J0F2ZXJhZ2UgSU1EQiBSYXRpbmcnKSsNCiAgdGhlbWVfYncoKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdD0uNSksDQogICAgICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAuNSkpKw0KICBleHBhbmRfbGltaXRzKHg9MjAyNSx5PTcuNSkNCg0KcHJpbnQoUm9tYW5jZV9QbG90KSAjTGluZSBwbG90IG9uIHJhdGluZyBhdmVyYWdlcyBmb3Igcm9tYW5jZSBtb3ZpZXMNCg0KUm9tYW5jZV9MZWFkPWZlYjMgJT4lIA0KICBncm91cF9ieShMZWFkX1N0YXI9U3RhcjEpICU+JSANCiAgc3VtbWFyaXNlKE1vdmllX0NvdW50PW4oKSkgJT4lIA0KICBhcnJhbmdlKC1Nb3ZpZV9Db3VudCkNCg0KcHJpbnQoUm9tYW5jZV9MZWFkKSAjQ2FyeSBHcmFudA0KYGBgDQoNCiMjIEV4dHJhIFN0dWZmIC0gbm90IHBhcnQgb2YgdGhlIHN1Ym1pc3Npb24NCg0KIyMjIFdoaWNoIHRoZSB0b3AgdGVuIGRpcmVjdG9ycyB3aXRoIHRoZSBoaWdoZXN0IGF2ZXJhZ2UgSU1EQiBhbmQgTWV0YSBzY29yZXMgdGhlIG1vc3QgdGltZXMNCmBgYHtyfQ0KbGlicmFyeShmb3JjYXRzKQ0KDQpmZWIyLjE9ZmViMiAlPiUgDQogIGdyb3VwX2J5KERpcmVjdG9yKSAlPiUgDQogIGZpbHRlcihSZWxlYXNlZF9ZZWFyPj0yMDAwKSAlPiUgDQogIHN1bW1hcmlzZShJTURCX0F2Zz1tZWFuKElNREJfUmF0aW5nLG5hLnJtID0gVCksTWV0YV9Bdmc9bWVhbihNZXRhX3Njb3JlLG5hLnJtID0gVCksSGVhZGNvdW50PW4oKSkgJT4lIA0KICBhcnJhbmdlKGRlc2MoSGVhZGNvdW50KSxkZXNjKElNREJfQXZnKSxkZXNjKE1ldGFfQXZnKSkgJT4lIA0KICBoZWFkKDEwKSAlPiUgDQogIG11dGF0ZShIZWFkY291bnQ9YXMubnVtZXJpYyhIZWFkY291bnQpKQ0KYGBgDQoNCmBgYHtyLGZpZy5jYXA9J0NvbHVtbiBDaGFydCBvbiBUb3AgMTAgZGlyZWN0b3JzJ30NCmZlYjIuMSU+JSANCiAgZ2dwbG90KGFlcyh4PWZjdF9yZW9yZGVyKERpcmVjdG9yLC1IZWFkY291bnQpLHk9SGVhZGNvdW50KSkrDQogIGdlb21fY29sKGZpbGw9J2RhcmtncmVlbicpKw0KICB0aGVtZV9idygpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsc2l6ZSA9IDcpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpLA0KICAgICAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gLjUpKSsNCiAgbGFicyh5PSdDb3VudCcseD0nRGlyZWN0b3JzJyx0aXRsZT0nVG9wIDEwIERpcmVjdG9ycyB3aXRoIHRoZSBoaWdoZXN0IGF2ZXJhZ2UgSU1EQiBhbmQgTWV0YSByYXRpbmdzJyxzdWJ0aXRsZSA9ICdMb29raW5nIGF0IGRpcmVjdG9ycyBzdGFydGluZyBmcm9tIHllYXIgMjAwMCB0byBub3cnICkNCmBgYA0KDQojIyBBZ2dyZWdhdGUgY291bnQgb24gZ2VucmVzIDEtMw0KYGBge3J9DQpmZWIzPWZlYjIgJT4lIA0KICBtdXRhdGUoR2VucmU9cGFzdGUoR2VucmVfMSxHZW5yZV8yLEdlbnJlXzMsc2VwID0gIiwgIikpICU+JSANCiAgbXV0YXRlKGFjcm9zcyhldmVyeXRoaW5nKCksIGFzLmNoYXJhY3RlcikpICU+JSANCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBjKCdHZW5yZV8xJywnR2VucmVfMicsJ0dlbnJlXzMnKSxuYW1lc190byA9ICJHZW5yZV9jb2x1bW4iLHZhbHVlc190byA9ICJHZW5yZV9BZ2dyZWdhdGUiKSAlPiUgDQogIG11dGF0ZShHcm9zcz1hcy5udW1lcmljKEdyb3NzKSxOb19vZl9Wb3Rlcz1hcy5udW1lcmljKE5vX29mX1ZvdGVzKSkNCg0KZmViND1mZWIzJT4lIA0KICBncm91cF9ieShHZW5yZV9BZ2dyZWdhdGUpICU+JSANCiAgc3VtbWFyaXNlKGNvdW50PW4oKSkNCg0KZmViNCAlPiUgDQogIG5hLm9taXQoKSAlPiUgDQogIGdncGxvdChhZXMoZmlsbD1jb3VudCx5PWZjdF9yZW9yZGVyKEdlbnJlX0FnZ3JlZ2F0ZSxjb3VudCkseD1jb3VudCkpICsNCiAgdGhlbWVfYncoKSsNCiAgZ2VvbV9jb2woKSsNCiAgbGFicyhmaWxsPScgJyx0aXRsZSA9ICdTdXBwbHkgYW5kIERlbWFuZCwgb3IgU3VwcGx5IE9SIERlbWFuZD8nLHN1YnRpdGxlID0gJ0xvb2tpbmcgYXQgZ2VucmVzIHRoYXQgZ2V0cyB0aGUgbW9zdCwgYW5kIHRoZSBsZWFzdCwgcHJvZHVjdGlvbicseT0nR2VucmVzJyx4PSdQcm9kdWN0aW9uIENvdW50JyApKw0KICBleHBhbmRfbGltaXRzKHg9ODAwKSsNCiAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSwNCiAgICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IC41KSkNCg0KYGBgDQoNCg0K