library(tidyverse)
library(mdsr)
library(RMySQL)
db <- dbConnect_scidb(dbname = "imdb")
The International Movie Database (IMDB) is a well known internet database containing information pertaining to actors and movies. Society imposes binary gender options on individuals, so we explored how this manifests in the data stored with the IMDB.
We used the names, person_info, and cast_info tables from the IMDB. These tables joined to provide the necessary information linking the actors and other data.
To begin our exploration of gender and its appearance in the IMDB, we utilized a function to count distinct options for the ‘Gender’ column of the ‘Names’ table. The return on this endeavor was 2, which indicates the IMDB is still enforcing the gender binary.
db %>%
dbGetQuery("Select COUNT(DISTINCT gender)
From name;")
## COUNT(DISTINCT gender)
## 1 2
The next stage of our analysis focused on trying to find actors that identify as trans from the IMDB. The only column that contained the words trans, transgender, transfem, transmasc, etc, were located in the ‘notes’ column for person_info. We joined the ‘person_info’ and ‘name’ columns to produce a table that included the ‘notes’ and ‘names’ column. This enabled the filtering out of trans identified individuals present in the database. It was really hard to separate words involving gender from other words spelled with ‘trans’, such as “transform”, “transport”, “transfuse”, and “trans-atlantic”. The table we ended up with also includes cis folks that have acted in trans roles (also problematic). The IMDB participates in trans erasure to some degree. It should not have been this difficult to find trans actors in a database.
The table below shows Joanna Fang, a random actor from the data set created in this process:
trans_actors_whole_info <- db %>%
dbGetQuery(" Select gender, name, note, person_id, info
FROM name
JOIN person_info on person_info.person_id= name.id
WHERE info LIKE '%trans%' AND
info is not NULL AND
info not LIKE '%transa%' AND
info not LIKE '%transb%' AND
info not LIKE '%transc%' AND
info not LIKE '%transd%' AND
info not LIKE '%transe%' AND
info not LIKE '%transh%' AND
info not LIKE '%transi%' AND
info not LIKE '%transj%' AND
info not LIKE '%transk%' AND
info not LIKE '%transl%' AND
info not LIKE '%transn%' AND
info not LIKE '%transo%' AND
info not LIKE '%transp%' AND
info not LIKE '%transq%' AND
info not LIKE '%transr%' AND
info not LIKE '%transt%' AND
info not LIKE '%transu%' AND
info not LIKE '%transv%' AND
info not LIKE '%transw%' AND
info not LIKE '%transx%' AND
info not LIKE '%transy%' AND
info not LIKE '%transz%' AND
info not LIKE '%transac%' AND
info not Like '%trans-racial%' AND
info not LIKE '%transp%' AND
info not LIKE '%transi%' AND
info not LIKE '%transc%' AND
info not Like '%trans media%' AND
info not like '%transfix%' AND
info not like '%trans-atlantic%' AND
info not LIKE '%transy%' AND
info not LIKE '%transfer%' AND
info not LIKE '%transfo%' AND
info not LIKE '%transat%' AND
info not LIKE '%transgre%' AND
info not LIKE '%transmu%' AND
info not LIKE '%transmit%' AND
info not LIKE '%transGr%' AND
info not LIKE '%transfigu%' AND
info not LIKE '%transwor%' AND
info not LIKE '%transmis%' AND
info not LIKE '%transeau%' AND
info not LIKE '%transk%' AND
info not LIKE '%translu%' AND
info not LIKE '%transfus%' AND
info not LIKE '%transmalians%' AND
info not LIKE '%trans-am%' AND
info not LIKE '%Autrans%' AND
info not LIKE '%trans canada%' AND
info not LIKE '%trans-siberian%' AND
info not LIKE '%trans national%' AND
info not LIKE '%transmigr%' AND
info not LIKE '%transtra%' AND
info not LIKE '%transequr%' AND
info not LIKE '%transue%' AND
info not LIKE '%trans.%' AND
info not LIKE '%transom%' AND
info not LIKE '%transpar%' AND
info not LIKE '%transmed%' AND
info not LIKE '%transs%' AND
info not LIKE '%transv%' AND
info not LIKE '%translat%' AND
info not LIKE '%transnati%' AND
info not LIKE '%transmetr%' AND
info not LIKE '%transfer%' AND
info not LIKE '%transfa%' AND
info not LIKE '%transl%';")
trans_actors_whole_info %>%
slice(174)
## # A tibble: 1 x 5
## gender name note person_id info
## <chr> <chr> <chr> <int> <chr>
## 1 <NA> Fang, Joanna <NA> 6218997 First openly transgender woman to w~
The gender of well known actors like Laverne Cox1 and Caitlyn Jenner2 are listed correctly, but for less known trans actors gendered labeling becomes more complex. There is not a clear and consistent way that gender is assigned to non-binary actors. Additionally a number of trans actors were listed multiple times with any combination of F, M, and Null. The gender for Joanna Fang 3, a transgender woman, is listed as NA in the table above.
Another example of this strange gender record keeping is Aja, a drag performer. Aja is listed 6 times and, one of which the gender is marked M.
db %>%
dbGetQuery("Select name, gender
From name
where name= 'aja'")
## name gender
## 1 Aja m
## 2 Aja f
## 3 Aja f
## 4 Aja f
## 5 Aja f
## 6 Aja f
As another step of our analysis, we looked at the number of movies top actors were in. We took the top ten trans actors4 and the top ten cisgender actors5, and compared the number of movies each acted in. This showed a vast difference in the number of movies between the two groups; for example, the 5th top trans actress Lana Wachowski is listed with 62 movie productions, while the 5th top non-trans actor Anthony Hopkins is listed with 481 movie productions.
## name Number of movies acted in
## 1 Jenner, Caitlyn 450
## 2 Cox, Laverne 217
## 3 Bono, Chaz 140
## 4 Arquette, Alexis 117
## 5 Wachowski, Lana 62
## 6 Carrera, Carmen 61
## 7 Lepore, Amanda 44
## 8 Ervin, Erika 37
## 9 Lazzarato, Gigi 29
## 10 Lysette, Trace 25
## name Number of movies acted in
## 1 Smith, Will 1392
## 2 Hanks, Tom 1142
## 3 Depp, Johnny 690
## 4 Willis, Bruce 577
## 5 Alba, Jessica 523
## 6 Hayek, Salma 489
## 7 Oldman, Gary 254
## 8 Gabin, Jean 148
## 9 Cruz, Penelope 1
rank <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
num <- c(217, 37, 140, 44, 29, 61, 62, 25, 450, 117, 577, 690, 254, 1142, 1392, 523, 489, 1, 148, 221)
id <- c("t", "t", "t", "t", "t","t", "t", "t", "t", "t", "n", "n", "n", "n", "n", "n", "n", "n", "n", "n")
df2 <- data.frame(rank, num, id)
#line graph with colored area under graph
name <- c("Caitlyn Jenner","Laverne Cox","Chaz Bono","Alexis Arquette","Lana Wachowski","Carmen Carerra","Amanda Lepore","Erika Ervin","Gigi Lazzarato","Trace Lysette","Will Smith","Tom Hanks","Johnny Depp","Bruce Willis","Jessica Alba","Salma Hayek","Gary Oldman"," Louis de Funès","Jean Gabin","Penelope Cruz")
#bar graph with vertical name labels
plot<- ggplot(df2, aes(x=rank, y= num,fill=id))
plot+
geom_bar(position = 'dodge', stat='identity')+
geom_text(aes(label=paste(name)), position=position_dodge(width=0.9), angle=90, hjust=-0.05)+
theme(plot.title = element_text(size=15,face = "italic", color = "gray23", hjust = 0.5))+
guides(color=FALSE)+
scale_x_continuous("IMDB rank",breaks=c(1,2,3,4,5,6,7,8,9,10),expand=c(0,0.2)) +
scale_y_continuous("Number of movie productions", limit=c(0,1750),breaks=seq(0,1750,250),expand=c(0,0)) +
scale_fill_discrete(name = "Identity", labels = c("cisgender", "transgender")) +
labs(title="Movie productions for top ten actors")
#filled in graph
ggplot(df2, aes(x = rank, y = num, group=id)) +
geom_area(aes(fill = id), alpha=0.4) +
geom_line(aes(color=id),position = "stack")+
geom_point(aes(color=id),position = "stack")+
theme(plot.title = element_text(size=20,face = "italic", color = "gray23", hjust = 0.5),panel.grid.major = element_line(linetype = "blank"),
panel.grid.minor = element_line(linetype="blank"))+
guides(color=FALSE)+
scale_fill_discrete(name = "Identity", labels = c("cisgender", "transgender")) +
scale_x_continuous("IMDB rank",limit=c(1,10),breaks=seq(1,10,1), expand=c(0,0.2)) +
scale_y_continuous("Number of movie productions", limit=c(0,1500),breaks = seq(0,1500,250),expand=c(0,0)) +
labs(title="Movie productions for top ten actors")+
#first set of annotation
annotate("segment", x=5,xend=6, y=1392, yend=1392)+
annotate("segment", x = 6, xend = 6, y = 1392, yend = 1320)+
geom_point(aes(x=5, y= 1392), fill="white", color="black", shape=21, size=8)+
annotate("text", x= 6, y=1300, label= "1392 movie production", size= 4, fontface="italic")+
annotate("text", x= 6, y=1230, label= "for cisgendender actress", size= 4, fontface="italic")+
annotate("text", x= 6, y=1160, label= "Jessica Alba", size= 4, fontface="italic")+
#second set of annotation
annotate("segment", x=9,xend=8, y=450, yend=450)+
annotate("segment", x = 8, xend = 8, y = 450, yend = 590)+
geom_point(aes(x=9, y= 450), fill="white", color="black", shape=21, size=8)+
annotate("text", x= 8, y=770, label= "540 movie productions", size= 4, fontface="italic")+
annotate("text", x= 8, y=700, label= "for transgendender YouTuber", size= 4, fontface="italic")+
annotate("text", x= 8, y=630, label= "Gigi Lazzarato", size= 4, fontface="italic")
From the graphs above, it is clear that the number of movie productions for cisgender actors is much higher than the number of movie productions for transgender actors, often by an order of magnitude. In the graph below, the average number for top ten actors differs by over 400 movie productions.
#average number of productions for top-ten trans actors
# = 118.2
df2 %>%
filter(id == "t") %>%
summarize(avg_productions = mean(num))
## avg_productions
## 1 118.2
#average number of productions for top-ten non-trans actors
df2 %>%
filter(id == "n") %>%
summarize(avg_productions = mean(num))
## avg_productions
## 1 543.7
# = 543.7
produc <- c(543.7, 118.2)
ids <- c("cisgender", "transgender")
df3 <- data.frame(produc, ids)
ggplot(df3, aes(x = ids, y = produc, fill = ids)) +
geom_col(width = .9) +
ylab("Average number of movie productions") +
xlab("Identity") +
guides(fill=FALSE) +
scale_y_continuous(breaks = c(0, 100, 200, 300, 400, 500)) +
geom_text(aes(label = produc), nudge_y = -20, size = 4) +
ggtitle("Average movie productions for top ten actors")
For part of our project, we also wanted to look at how the database changed over time. However, public logs are not available. In searching for the history of the database, we also found that any user could submit edits to the database. After our analysis, we propose to submit changes to the IMDB database to make it more inclusive in terms of gender. The ‘gender’ column should include a wide range of gender identities, and remove previous and incorrect entries for gender.
We also wanted to look at the salary of trans and non-trans actors in the database. To do this, we looked at the top ten trans actors, and found the number of movie productions each was in. Then, we found non-trans actors with the same number of movie productions. Our next step would have been to compare the salaries for actors with roughly the same amount of success; however this branch of our project was unable to be continued, as we were unable to find the salaries of actors.
Further investigation could look into the gross values for each movie where main characters were trans, compared to the same values for non-trans main characters. We also recomend that the IMDB consider updating its information for trans folk, and consider updating the gender classification system from binary to a non-binary system.
This project was made possible by Smith College, IMDB, GitHub, MySQL Workbench, and Google Docs. We would like to add an extra special thanks to google docs for enabling quality organization and collaboration6. The issue tab was some help in planing our initial launch of this project 7.
wordcountaddin::text_stats("Mini-Project-4.Rmd")