<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Movies - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Movies - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 26 Jul 2026 04:14:29 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/movies/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to build an API with Lambdas and API Gateway ]]>
                </title>
                <description>
                    <![CDATA[ By Sam Williams Do you want to access your database, control your system, or execute some code from another website? An API can do all of this for you, and they’re surprisingly easy to set up. An API is a URL that you can perform GET, PUT, POST, and ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/building-an-api-with-lambdas-and-api-gateway-11254e23b703/</link>
                <guid isPermaLink="false">66d460ce3a8352b6c5a2aaf1</guid>
                
                    <category>
                        <![CDATA[ api ]]>
                    </category>
                
                    <category>
                        <![CDATA[ aws lambda ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Movies ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 18 Jul 2018 20:39:01 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*VjGHQOLK4sJDqYvzTkx30g.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Sam Williams</p>
<p>Do you want to access your database, control your system, or execute some code from another website? An API can do all of this for you, and they’re surprisingly easy to set up.</p>
<p>An API is a URL that you can perform <code>GET</code><em>,</em> <code>PUT</code><em>,</em> <code>POST</code>, and <code>DELETE</code> requests on to control another service. If you make one yourself, then you can build these APIs to do whatever you want behind the scenes. Common uses are providing database control, performing actions on third-party APIs (API-ception), or controlling another service.</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/4_WI8ZGIcXY" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
<h3 id="heading-why-use-an-api">Why use an API?</h3>
<p>You may ask why we need an API when we can access the database directly or run the code on the website. There are a few massive advantages to APIs over running the code in your website.</p>
<h4 id="heading-hide-your-access-keys-and-tokens">Hide your access keys and tokens</h4>
<p>This is possibly the <strong>most important reason</strong> to use an API. If you are accessing a database, then you’re going to need the database details as well as user and access token/key data.</p>
<p>If you access the database from the website, then you’re going to have all of these details in the source code of your site. This is <strong>really bad practice,</strong> as anyone can look into the source control and steal your details. This doesn’t sound too bad, but what if these are your AWS or Google Cloud Compute credentials? The people accessing your site could then use these to run whatever they want on your account, leaving you with a huge bill.</p>
<p>Running these processes from behind an API means no one can see any of the private details — they can’t steal them to use in their own projects. If you store your website code in GitHub or another public source control, then it also means that they aren’t visible there, either.</p>
<h4 id="heading-run-the-code-elsewhere">Run the code elsewhere</h4>
<p>What if you aren’t using any other services and aren’t using any secret keys? If you are running a large or complex bit of code, or if you don’t want anyone else reading your code and discovering how it works, then you can still use an API.</p>
<h4 id="heading-control-who-has-access">Control who has access</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/mobDuXc3Fnbib2-rOnW7ZOY4n7HMm8iUqOhq" alt="Image" width="800" height="533" loading="lazy">
_[Locked, closed green door](https://www.pexels.com/photo/door-green-closed-lock-4291/" rel="noopener" target="<em>blank" title=").</em></p>
<p>Providing an API also allows you to restrict who is able to access the database or run the code. You can do this by requiring an API key. This key is used to identify the user making the request, and then allowing or rejecting the request.</p>
<p>This can be used to allow only a few people to access the service, or even to create a tier system. This is how a lot of paid APIs work. Everyone is given free but limited access, and then you allow payment for access to superior parts of the service or just a higher rate of requests.</p>
<h3 id="heading-building-the-api">Building the API</h3>
<p>Now that we know some reasons why we might want to create an API, let’s do just that. We’re going to use API Gateway and AWS Lambdas, because it’s simpler than running a server. Make sure you have an AWS account and are logged in.</p>
<h4 id="heading-setting-up-an-api-gateway">Setting up an API Gateway</h4>
<p>We’ll start by opening the API Gateway service and clicking “Get Started”<em>.</em> On the next page, we need to select the “New API” option. Then we’ll give our API a name and description, and click “Create API”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/V3XpqCcqXz7t2yywu6dOwQK8Lfhhdhl9TCdx" alt="Image" width="800" height="397" loading="lazy"></p>
<p>Clicking “Create API” will get us into the configuration page for the API.</p>
<p>The first thing we need to do is to add a resource onto the API. Using resources allows us to group similar API calls together using nested slashes. We are going to create an API that we can use to make recommendations on what to watch. Therefore we can have <code>/tv-shows</code> and <code>/movies</code> as two base methods.</p>
<p>Click the “Actions” dropdown and select “Create Resource”<em>.</em> Name your resources, making sure that they are both in the “/” path.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/pUpkZpJGX095a02J0Wx3GuSGO1khay6YVogm" alt="Image" width="800" height="728" loading="lazy"></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/RZpG3Q2QcVqjG4k8lUfemrEKEFR-3Aa5RHJw" alt="Image" width="800" height="444" loading="lazy"></p>
<p>We want users to be able to go to “/movies/horror”or “/tv-shows/comedy”, and we can do this by adding path parameters. These are variables that we can access inside the API. To create one of these, we need to set the resource to <code>{resourceName}</code> as shown below. This can be done for “tv-shows”and “movies”.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/Y09YGFKPy2bamMfzHjWqJCsLOchP3NyLBTKs" alt="Image" width="800" height="562" loading="lazy"></p>
<p>Now that we have length and genre, we can create methods for getting and adding data to a table. Select one of the <code>{genre}</code> resources, click “Actions”, and then _“<em>Create Method”</em>._ This will create a small grey box below the resource which we can click. We are going to start with a <code>GET</code> request, so select that and click the tick button.</p>
<p>This is where we get to decide how to handle the request. We are going to use AWS Lambdas, but we need to create them before we can finish setting up the methods.</p>
<h4 id="heading-creating-the-lambdas">Creating the Lambdas</h4>
<p>We are able to respond to these API requests using Lambdas, which is great as they only run when we need them to. They are also really easy to create, so that’s what we’ll do now.</p>
<p>In the Lambda console, click “Create function”. Then we can name our first API function <code>movieAPI</code><em>,</em> set it to run Node 8.10, and “Create new role from template(s)”<em>.</em> We’ll name our new role “tableAPI” and add “Simple Microservice permissions” as the only template.</p>
<p>All code can be found at <a target="_blank" href="https://github.com/SamWSoftware/Projects/tree/master/movieAPI">https://github.com/SamWSoftware/Projects/tree/master/movieAPI</a></p>
<p>Clicking “Create function” will send us into the Lambda window. Scroll down to the “Function code” section and we’ll change the code. The first thing we’re going to do is to check what request method was used.</p>
<pre><code class="lang-js"><span class="hljs-built_in">exports</span>.handler = <span class="hljs-keyword">async</span> (event) =&gt; {
    <span class="hljs-built_in">console</span>.log(event);
    <span class="hljs-keyword">if</span> (event.httpMethod === <span class="hljs-string">'PUT'</span>){
        <span class="hljs-keyword">let</span> response = putMovie(event)
        <span class="hljs-keyword">return</span> done(response);
    } <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (event.httpMethod === <span class="hljs-string">'GET'</span>){
        <span class="hljs-keyword">let</span> response = getMovie(event);
        <span class="hljs-keyword">return</span> done(response);
    }
};
</code></pre>
<p>We’re going to start by writing the <code>getMovie</code>function. This function will start by getting the <code>genre</code>from the path parameters. This is where using path parameters can make this process easy.</p>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> getMovie = <span class="hljs-function"><span class="hljs-params">event</span> =&gt;</span> {
    <span class="hljs-keyword">let</span> genre = event.pathParameters.genre;
    <span class="hljs-keyword">return</span>;
}
</code></pre>
<p>With the genre that the user requested, we are going to get a recommended movie for them. I copied these from <a target="_blank" href="https://www.imdb.com/list/ls000441429/">25 Top Films From Each Genre</a> and added them to an object with the genre as the key. We can then get the film by getting the value of the genre requested.</p>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> movies = {
    <span class="hljs-attr">action</span>: <span class="hljs-string">'Desperado (1995)'</span>,
    <span class="hljs-attr">fantasy</span>: <span class="hljs-string">'Inception (2010)'</span>,
    ...
    horror: <span class="hljs-string">'Black Swan (2010)'</span>
}

<span class="hljs-keyword">const</span> getMovie = <span class="hljs-function"><span class="hljs-params">event</span> =&gt;</span> {
    <span class="hljs-keyword">let</span> genre = event.pathParameters.genre;
    <span class="hljs-keyword">return</span> movies[genre];
}
</code></pre>
<p>This means that the title of the movie is being passed into the <code>done</code> function. This function is used, as API Gateway expects the data to come back in a very specific format. This function turns a string into that required format.</p>
<pre><code class="lang-js"><span class="hljs-keyword">const</span> done = <span class="hljs-function"><span class="hljs-params">response</span> =&gt;</span> {
    <span class="hljs-keyword">return</span> {
        <span class="hljs-attr">statusCode</span>: <span class="hljs-string">'200'</span>,
        <span class="hljs-attr">body</span>: <span class="hljs-built_in">JSON</span>.stringify(response),
        <span class="hljs-attr">headers</span>: {
            <span class="hljs-string">'Content-Type'</span>: <span class="hljs-string">'application/json'</span>,
            <span class="hljs-string">'Access-Control-Allow-Methods'</span>: <span class="hljs-string">'*'</span>,
            <span class="hljs-string">'Access-Control-Allow-Origin'</span>: <span class="hljs-string">'*'</span>
        }
    }
}
</code></pre>
<p>We can do a very similar thing for a <code>tv-showsAPI</code> function, reusing most of the code. Just change the function names and the movie suggestions to tv show.</p>
<h4 id="heading-connecting-the-lambdas-to-api-gateway">Connecting the Lambdas to API Gateway</h4>
<p>Back in API Gateway, we can add our new Lambdas to the methods we created earlier. We need to make sure that “Use Lambda Proxy integration” is selected and that we are pointing at the correct Lambda. Clicking “Save” will ask you for permissions to access this Lambda, to which we can give the “OK”<em>.</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/XBHJhtze5MscnYcFHruORyPAtD93M26anNO9" alt="Image" width="800" height="581" loading="lazy"></p>
<p>Do this for the <code>GET</code> methods on both resources and we can start to test. Selecting the methods should now show a method execution diagram. This sounds complicated but the only bit we need is the “TEST” section.</p>
<p>Clicking “TEST” will open a new section where we can try out the API. There are lots of things you can set here, but the only one we care about is the <code>Path {genre}</code><em>.</em> We need to set this to the genre we’re requesting. Entering “western” as the genre and hitting the “Test” button gets a response like this:</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/i34jkqAn9b7XhoR6nAr2kpeuGCMX5gGbXbjA" alt="Image" width="800" height="499" loading="lazy"></p>
<p>We got our API working! Now we need to make sure that other people can access it. There are two steps to this.</p>
<ol>
<li>We enable CORS — Select the “{genre}” resource and then click “Actions” and “Enable CORS”<em>.</em> Leave everything as defaults and, when asked, click “Yes, replace existing values”<em>.</em></li>
<li>Deploy our API — Click on “Actions” and _“<em>Deploy API”. Set the deployment stage to “[New Stage]” and then give your stage a name like “production” or </em>“<em>public”</em>._</li>
</ol>
<p>Once your API has deployed you should get a URL like this. This is the base of your API. You can add <code>/movies/western</code> to access your API.</p>
<pre><code class="lang-js">https:<span class="hljs-comment">//{uniqueCode}.execute-api.eu-west-1.amazonaws.com/production</span>
</code></pre>
<p>Your API URL might end up something like:</p>
<pre><code>https:<span class="hljs-comment">//fds1fe31fes476s.execute-api.eu-west-1.amazonaws.com/production/movies/western</span>
</code></pre><p>That’s all for this article. In the next one we’ll connect this API to Dynamo tables and let users vote on their favourite movies in each genre. You can read that article below<em>.</em></p>
<p><a target="_blank" href="https://medium.com/@samwsoftware/building-an-api-with-lambdas-and-api-gateway-part-2-7c674a0eb121"><strong>Building an API with Lambdas and API Gateway — Part 2</strong></a><br><a target="_blank" href="https://medium.com/@samwsoftware/building-an-api-with-lambdas-and-api-gateway-part-2-7c674a0eb121"><em>In the first part we created an API which passed requests through to a Lambda which returned the top tv show or movie…</em></a><br><a target="_blank" href="https://medium.com/@samwsoftware/building-an-api-with-lambdas-and-api-gateway-part-2-7c674a0eb121">medium.com</a></p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Women only said 27% of the words in 2016’s biggest movies. ]]>
                </title>
                <description>
                    <![CDATA[ By Amber Thomas Movie trailers in 2016 promised viewers so many strong female characters. Jyn Erso. Dory. Harley Quinn. Judy Hopps. Wonder Woman. I felt like this could be the year for gender equality in Hollywood’s biggest films. I was wrong. And I ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/women-only-said-27-of-the-words-in-2016s-biggest-movies-955cb480c3c4/</link>
                <guid isPermaLink="false">66c36783b737bb2ce7073233</guid>
                
                    <category>
                        <![CDATA[ Data Science ]]>
                    </category>
                
                    <category>
                        <![CDATA[ feminism ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Movies ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Web Development ]]>
                    </category>
                
                    <category>
                        <![CDATA[ women in tech ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 12 Jan 2017 13:56:31 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*92SrZzQkJAqwJoHu1xPneQ.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Amber Thomas</p>
<p>Movie trailers in 2016 promised viewers so many strong female characters. Jyn Erso. Dory. Harley Quinn. Judy Hopps. Wonder Woman. I felt like this could be the year for gender equality in Hollywood’s biggest films.</p>
<p>I was wrong.</p>
<p>And I don’t make this statement lightly.</p>
<p>As a scientist, I turn to data to answer questions I have about the world. And I’ve got the data to back up my claim. In fact, you can have the data, code, and resulting <a target="_blank" href="http://amber.rbind.io/2016MovieDialogue/">data visualization</a> that I made trying to better understand this topic. But first, let me tell you how I became so interested.</p>
<p>It all started when I went to see Rogue One: A Star Wars Story. All promotional materials for the movie indicated that Jyn Erso (played by Felicity Jones) was the main character. I mean, just look at the poster.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*wEaxUjOocqR_ObtsKJaz0w.jpeg" alt="Image" width="800" height="1184" loading="lazy"></p>
<p>When your picture is several times larger than everyone else’s, you’re probably the main character.</p>
<p>What I didn’t notice at first was that Jyn is the only woman on that poster.</p>
<p>I went into the movie theater expecting to see men and women fighting side by side. I left feeling certain that I could count every female character from the movie on one hand. While Jyn <em>was</em> the main character, I was profoundly aware that she was often the only woman in any scene.</p>
<p>It felt strangely familiar to have a lead female character be so outnumbered. Then I realized that Jyn and Princess Leia suffered the same inequality 39 years apart. I was overwhelmed with a need to know exactly how female representation in Star Wars movies has changed. But it seemed unfair to compare movies made today with movies made decades ago.</p>
<p>So instead, I decided to look for female equality across the Top 10 Worldwide <a target="_blank" href="http://www.the-numbers.com/movie/records/worldwide/2016">Highest Grossing Films</a> of 2016. They were:</p>
<ul>
<li><a target="_blank" href="http://www.imdb.com/title/tt3498820/?ref_=nv_sr_1">Captain America: Civil War</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt2277860/?ref_=nv_sr_1">Finding Dory</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt2948356/?ref_=nv_sr_1">Zootopia</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt3040964/?ref_=nv_sr_1">The Jungle Book</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt2709768/?ref_=nv_sr_1">The Secret Life of Pets</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt2975590/?ref_=nv_sr_1">Batman V. Superman: Dawn of Justice</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt3748528/?ref_=nv_sr_2">Rogue One: A Star Wars Story</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt1431045/?ref_=nv_sr_1">Deadpool</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt3183660/?ref_=nv_sr_1">Fantastic Beasts and Where to Find Them</a></li>
<li><a target="_blank" href="http://www.imdb.com/title/tt1386697/?ref_=nv_sr_1">Suicide Squad</a></li>
</ul>
<p>With so many powerful women in these films, some of them must be gender-equal, right?</p>
<h3 id="heading-the-data"><strong>The Data</strong></h3>
<p>Now that I decided what I wanted to investigate, I needed to figure out how to do it. Similar data exploration projects have focused on <a target="_blank" href="http://polygraph.cool/films/">dialogue</a> or <a target="_blank" href="https://seejane.org/research-informs-empowers/data/">screen-time</a> equality. Both seemed like good options, but I wanted the ability to report on equality at the movie and character level.</p>
<p>In the end, I decided to explore the movies’ dialogue. This choice gave me the ability to focus on characters with an active role in the story and to cut non-speaking characters from my analysis.</p>
<p>Luckily for me, dedicated movie fans often transcribe a movie’s dialogue and make it freely available online. If I couldn’t find a transcript, I used closed-caption files instead. For those, I re-watched the movie and manually assigned characters to their spoken lines.</p>
<p>This process was a labor of love. It was time consuming, but I have no regrets.</p>
<h3 id="heading-analysis">Analysis</h3>
<p>Once I had all of the transcripts, I just needed to read the .txt files into <a target="_blank" href="https://cran.r-project.org/">R</a> and separate the characters from their lines. For the Rogue One transcript, that process looked like this:</p>
<p>Now that I had a data frame with both Character and Words columns, I had to assign genders to each Character. To remain consistent with my categorizations, I came up with a few simple rules:</p>
<ol>
<li>When possible, assign gender according to the pronouns that other characters use. For example, if a character is referred to by others as “he” or “him”, then he is categorized as “male”.</li>
<li>If there is no pronoun used throughout the movie but the character is named or credited (on <a target="_blank" href="http://www.imdb.com/">IMDB</a>), use the gender of the actor or actress. Note that the gender of an actor or actress was assumed based on publicly available information as of January 2017.</li>
<li>If no pronoun is used for the character and the character is not named or credited, refer to the closed captions. Sometimes they will identify the character that spoke.</li>
<li>If all else fails, make an educated guess based on the character’s voice.</li>
</ol>
<p>I’ll be the first to say that these methods are not perfect. In fact, here are some caveats:</p>
<ol>
<li>If a male character was voiced by a female actress (or vice versa) and the character was never addressed by other characters using pronouns, he may be incorrectly labelled. (I don’t think this happened, but anything is possible.)</li>
<li>Voices that are not associated with a physical embodiment of a character (e.g., the voice of a computer) were categorized according to the gender of their voice actor/actress.</li>
<li>I can never <em>really</em> know the gender of any character, but I’m using the cues and information that I have at my disposal.</li>
</ol>
<p>Again, I am far from infallible, so if you caught a mistake on my part, please <a target="_blank" href="https://proquestionasker.github.io/contact/">let me know</a>.</p>
<p>So now I just needed to count the number of words spoken by each character. Again, I was able to do this in R using the <code>dplyr</code> and <code>stringi</code> packages.</p>
<p>It’s worth noting that I included every speaking character in this analysis. So yes, every stormtrooper who shouts a simple “Wait, stop!” before getting shot is included.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*Nix-DNJovl_3XwRVmJPc8Q.jpeg" alt="Image" width="600" height="316" loading="lazy">
<em>Spoiler Alert: The stormtroopers in Rogue One are all voiced by men.</em></p>
<h3 id="heading-data-visualization">Data Visualization</h3>
<p>I had my data. Unfortunately, tables upon tables of word counts and character names don’t give anyone much insight. Like any good data exploration project, it was time to visualize my results. I had to work through a few iterations before I found the best one.</p>
<p>Scatterplots and bar charts both masked characters with small roles.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*79391ccZ2PRJ3bUjdtzOHA.jpeg" alt="Image" width="800" height="220" loading="lazy"></p>
<p>A simple bubble chart was better but it became difficult to identify individual characters. It was also challenging to understand movie-level statistics.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*ztI4yRBsYS7iKaJqe6D8PA.jpeg" alt="Image" width="156" height="137" loading="lazy">
<em>Which bubble is which?!</em></p>
<p>In the end, I decided to learn enough d3.js to make <a target="_blank" href="http://amber.rbind.io/2016MovieDialogue/">an interactive graphic</a>. Here, each bubble represents a character, and the bubble’s area is scaled based on the number of words spoken. Female and male bubbles can be separated for better insight. The stacked bars below indicate movie-level information.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*MH6WhQJc64Sy_ASXfSi9pA.gif" alt="Image" width="608" height="600" loading="lazy">
_Full interactive version [here](https://proquestionasker.github.io/projects/MovieDialogueInteractive/" rel="noopener" target="<em>blank" title=")</em></p>
<p>Go ahead, check out the <a target="_blank" href="http://amber.rbind.io/2016MovieDialogue/">full interactive version</a>.</p>
<p>Interested in exploring the raw word-count data for yourself? I’ve made all of the data and code used to generate these visualizations open source. It’s available <a target="_blank" href="https://github.com/ProQuestionAsker/2016MovieDialogue">here</a>:</p>
<p><a target="_blank" href="https://github.com/ProQuestionAsker/2016MovieDialogue"><strong>ProQuestionAsker/2016MovieDialogue</strong></a><br><a target="_blank" href="https://github.com/ProQuestionAsker/2016MovieDialogue">_Contribute to 2016MovieDialogue development by creating an account on GitHub._github.com</a></p>
<h3 id="heading-takeaways">Takeaways</h3>
<p>Ok, so the analysis is done. I’ve got a fancy (and fun-to-play-with) visualization. What did I find?</p>
<p>I recommend taking a quick second to look at something “a-Dory-ble” before going on, because this post is about to get real depressing real fast.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*MHd8U2CfQdn4uO32Kz7jbA.jpeg" alt="Image" width="800" height="400" loading="lazy"></p>
<p>Aw, so cute. Feeling good?</p>
<p>All right, here we go.</p>
<p>This is a static version of what the visualization for all 10 movies looks like:</p>
<p><em>(If you’d like to check out the interactive visualization, go <a target="_blank" href="https://github.com/ProQuestionAsker/2016MovieDialogue">here</a>.)</em></p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*8KRKoDWaCXmD2Vc8CTR2Hg.jpeg" alt="Image" width="800" height="484" loading="lazy">
_The interactive version of this visualization can be found [here](https://proquestionasker.github.io/projects/MovieDialogueInteractive/" rel="noopener" target="<em>blank" title=").</em></p>
<p>There are a couple of things here that I need to point out:</p>
<p><strong>Not one of the top 10 movies of 2016 had a 50% speaking, female cast.</strong></p>
<p>Finding Dory was the closest to this level of equality with 43% female characters. To be equal, the movie would have needed 8 more speaking, female roles.</p>
<p>Rogue One was the worst. Only 9% of its speaking characters were female. Of those 10 characters, 1 was a computer voice, 1 appeared on screen for no more than 5 seconds, and 1 was a CGI cameo that said 1 word.</p>
<p><strong>Only 1 of 2016’s top 10 movies had 50% dialogue by a female character.</strong></p>
<p>Finding Dory comes out on top here too with 53% female dialogue. But, 76% of that dialogue came from Dory alone.</p>
<p>Trailing at the end was The Jungle Book with only 10% of its dialogue spoken by a female character. Keep in mind, this is <em>after</em> casting Scarlett Johansson as the voice of the historically-male snake, Kaa.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*6ntt5aIdPDh-w-gpxh71AA.png" alt="Image" width="629" height="473" loading="lazy">
<em>We’re gender equal….Trusssssssst in me….</em></p>
<p>Here’s a few more:</p>
<ul>
<li>Finding Dory and Zootopia were the only 2 movies in 2016’s top 10 in which a female character had the most dialogue.</li>
<li>Female characters were outnumbered in Captain America: Civil War’s final battle 5:1. Throughout the movie, they only contributed 16% of the dialogue.</li>
<li>Batman spoke 2.4 times more than Superman and 6 times more than Wonder Woman in Batman V. Superman.</li>
<li>78% of the female-spoken lines in Rogue One came from Jyn Erso.</li>
<li>While Harley Quinn was a highly advertised character in Suicide Squad, she only spoke 42% as many words as Floyd/Deadshot (played by Will Smith). Notably, Amanda Waller (played by Viola Davis) spoke frequently, totaling just 222 words (16%) short of Deadshot’s word count.</li>
</ul>
<p>I started this project because I had a feeling that Rogue One’s cast and dialogue were not equally divided between male and female characters. I was shocked (and saddened) to find that almost none of the top 10 movies from last year were gender equal.</p>
<p>We can do better.</p>
<p><em>Added</em>: If you’re looking for more studies and data explorations like this, check out:</p>
<ul>
<li><a target="_blank" href="http://annenberg.usc.edu/sitecore/shell/Controls/Rich%20Text%20Editor/~/media/10575E37F34248C585602A69C18F2CBE.ashx">Inequality in 800 popular films from 2007–2015</a> (includes gender, race/ethnicity, sexual orientation, and disability)</li>
<li><a target="_blank" href="http://polygraph.cool/films/">This exploration</a> of 2000 randomly selected movie scripts from 1980’s — 2010's</li>
<li><a target="_blank" href="https://seejane.org/research-informs-empowers/data/">This research</a> on 200 biggest movies from 2014 &amp; 2015</li>
<li><a target="_blank" href="http://womenintvfilm.sdsu.edu/files/2014_Its_a_Mans_World_Report.pdf">Female representations in 2014’s biggest movies</a></li>
<li><a target="_blank" href="https://twitter.com/haleshannon/status/811669382065590272">This Twitter thread</a> about gender equality in 2016’s animated films</li>
</ul>
<p>TL;DR Version: Women represent (on average) 30–35% of speaking roles across each of these investigations.</p>
<p><em>Added</em>: Have questions or comments about my methodology or conclusions? Check out my follow-up article featuring the most frequently asked questions.</p>
<p><a target="_blank" href="https://medium.com/@ProQuesAsker/i-analyzed-the-dialogue-in-2016s-biggest-movies-and-it-started-a-lot-of-conversations-b9c815f24313"><strong>I analyzed the dialogue in 2016’s biggest movies and it started a lot of conversations.</strong></a><br><a target="_blank" href="https://medium.com/@ProQuesAsker/i-analyzed-the-dialogue-in-2016s-biggest-movies-and-it-started-a-lot-of-conversations-b9c815f24313">_A few weeks ago I published a story about my analysis of the dialogue in 2016’s 10 Highest Grossing Films. I am so…_medium.com</a></p>
<p><strong>If you liked this article and want to see more like it, please click the green heart below and share away on your social media network of choice.</strong></p>
<p>I am currently spending my time working on personal projects and data visualizations like this while I look for a data science job. So, if you have a fun project idea (or a job inquiry) you’d like to discuss with me, please reach out to me on <a target="_blank" href="https://twitter.com/ProQuesAsker">Twitter</a> or by <a target="_blank" href="mailto:amberthomasmsc@gmail.com">email</a>.</p>
<p>Thank you!</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
