diff --git a/Group 3/.ipynb_checkpoints/Solutions - Tutorial & Active Learning Notebook -checkpoint.ipynb b/Group 3/.ipynb_checkpoints/Solutions - Tutorial & Active Learning Notebook -checkpoint.ipynb new file mode 100644 index 0000000..0debde9 --- /dev/null +++ b/Group 3/.ipynb_checkpoints/Solutions - Tutorial & Active Learning Notebook -checkpoint.ipynb @@ -0,0 +1,3902 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "293c97c7", + "metadata": {}, + "source": [ + "# Solutions to Tutorial & Active Learning Notebook with the dataset\n", + "## \"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)\n", + "\n", + "\n", + "These solutions are meant to accompany the Tutorial Active Learning Notebook with the dataset\n", + "\"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)" + ] + }, + { + "cell_type": "markdown", + "id": "33c03398", + "metadata": {}, + "source": [ + "### The following was part of the tutorial, which will be repeated here for the purpose of consistency" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "be7d63fd", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f37f7ce", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1353Who'll Stop the RainAction, Crime, Drama1978126 min6.7A Vietnam veteran gets conned into helping an ...3003NaNNaN
1354The Wings of the DoveDrama, Romance1997102 min7.1An impoverished woman who has been forced to c...12580NaNNaN
1355WitnessDrama, Romance, Thriller1985112 min7.4When a young Amish boy is sole witness to a mu...97031NaNNaN
1356The ZodiacCrime, Drama, Horror2005158 min5.3An elusive serial killer known as the Zodiac t...7333NaNNaN
1357ZodiacCrime, Drama, Mystery2007157 min7.7Between 1968 and 1983, a San Francisco cartoon...546602NaNNaN
\n", + "

1358 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1353 Who'll Stop the Rain Action, Crime, Drama \n", + "1354 The Wings of the Dove Drama, Romance \n", + "1355 Witness Drama, Romance, Thriller \n", + "1356 The Zodiac Crime, Drama, Horror \n", + "1357 Zodiac Crime, Drama, Mystery \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1353 1978 126 min 6.7 \n", + "1354 1997 102 min 7.1 \n", + "1355 1985 112 min 7.4 \n", + "1356 2005 158 min 5.3 \n", + "1357 2007 157 min 7.7 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1353 A Vietnam veteran gets conned into helping an ... 3003 \n", + "1354 An impoverished woman who has been forced to c... 12580 \n", + "1355 When a young Amish boy is sole witness to a mu... 97031 \n", + "1356 An elusive serial killer known as the Zodiac t... 7333 \n", + "1357 Between 1968 and 1983, a San Francisco cartoon... 546602 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1353 NaN NaN \n", + "1354 NaN NaN \n", + "1355 NaN NaN \n", + "1356 NaN NaN \n", + "1357 NaN NaN \n", + "\n", + "[1358 rows x 9 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = pd.read_csv('data/IMDB_noir_1000.csv')\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "792f2124", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1246 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1246 rows x 9 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df.dropna()\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ebd3de33", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8,201Raoul WalshGeorge Raft
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716Stuart HeislerAlbert Dekker
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1199 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "5 They Drive by Night Crime, Drama, Film-Noir \n", + "6 Among the Living Drama, Film-Noir, Mystery \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "5 1940 95 min 7.2 \n", + "6 1941 67 min 6.4 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "5 When one of two truck-driving brothers loses a... 8,201 \n", + "6 A mentally-unstable man who has been kept in i... 716 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "5 Raoul Walsh George Raft \n", + "6 Stuart Heisler Albert Dekker \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1199 rows x 9 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df[(film_noir_df.Stars != '|')]\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6b06cb9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
46The Curse of the Cat PeopleDrama, Horror, Mystery194470 min6.7The young, friendless daughter of Oliver and A...30,005George CukorCharles Boyer
49Double IndemnityCrime, Drama, Film-Noir1944107 min8.3A Los Angeles insurance representative lets an...3,655John BrahmLaird Cregar
1217Charley VarrickCrime, Drama, Thriller1973111 min7.5A man, his wife and their friend stage a blood...18,602Roger DonaldsonAlec Baldwin
973The Long WaitAdventure, Crime, Drama195494 min6.5An amnesiac finally learns his true identity.....1,696Hugo FregoneseJack Palance
665The Steel JungleCrime, Drama, Film-Noir195686 min5.7A power struggle emerges among convicts condem...4,862Robert WiseHarry Belafonte
1206The Black DahliaCrime, Drama, Mystery2006121 min5.6Two policemen see their personal and professio...8,574Dick RichardsRobert Mitchum
54LauraDrama, Film-Noir, Mystery194488 min7.9A police detective falls in love with the woma...5,136Robert SiodmakFranchot Tone
894He Ran All the WayCrime, Drama, Film-Noir195177 min7.0Nick and his partner Al stage a payroll holdup...748Nathan JuranRichard Conte
645Death of a ScoundrelCrime, Drama, Film-Noir1956119 min6.9The New York police investigates the murder of...159Joseph KaneRod Cameron
31MoontideCrime, Drama, Film-Noir194294 min6.8In California, Bobo and his mooching 'pal' Tin...545Jack HivelyBurgess Meredith
\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "46 The Curse of the Cat People Drama, Horror, Mystery \n", + "49 Double Indemnity Crime, Drama, Film-Noir \n", + "1217 Charley Varrick Crime, Drama, Thriller \n", + "973 The Long Wait Adventure, Crime, Drama \n", + "665 The Steel Jungle Crime, Drama, Film-Noir \n", + "1206 The Black Dahlia Crime, Drama, Mystery \n", + "54 Laura Drama, Film-Noir, Mystery \n", + "894 He Ran All the Way Crime, Drama, Film-Noir \n", + "645 Death of a Scoundrel Crime, Drama, Film-Noir \n", + "31 Moontide Crime, Drama, Film-Noir \n", + "\n", + " Year Runtime Rating \\\n", + "46 1944 70 min 6.7 \n", + "49 1944 107 min 8.3 \n", + "1217 1973 111 min 7.5 \n", + "973 1954 94 min 6.5 \n", + "665 1956 86 min 5.7 \n", + "1206 2006 121 min 5.6 \n", + "54 1944 88 min 7.9 \n", + "894 1951 77 min 7.0 \n", + "645 1956 119 min 6.9 \n", + "31 1942 94 min 6.8 \n", + "\n", + " desc Votes \\\n", + "46 The young, friendless daughter of Oliver and A... 30,005 \n", + "49 A Los Angeles insurance representative lets an... 3,655 \n", + "1217 A man, his wife and their friend stage a blood... 18,602 \n", + "973 An amnesiac finally learns his true identity..... 1,696 \n", + "665 A power struggle emerges among convicts condem... 4,862 \n", + "1206 Two policemen see their personal and professio... 8,574 \n", + "54 A police detective falls in love with the woma... 5,136 \n", + "894 Nick and his partner Al stage a payroll holdup... 748 \n", + "645 The New York police investigates the murder of... 159 \n", + "31 In California, Bobo and his mooching 'pal' Tin... 545 \n", + "\n", + " Director Stars \n", + "46 George Cukor Charles Boyer \n", + "49 John Brahm Laird Cregar \n", + "1217 Roger Donaldson Alec Baldwin \n", + "973 Hugo Fregonese Jack Palance \n", + "665 Robert Wise Harry Belafonte \n", + "1206 Dick Richards Robert Mitchum \n", + "54 Robert Siodmak Franchot Tone \n", + "894 Nathan Juran Richard Conte \n", + "645 Joseph Kane Rod Cameron \n", + "31 Jack Hively Burgess Meredith " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " film_noir_df.sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9f7b1545", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 1199 entries, 2 to 1321\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Title 1199 non-null object \n", + " 1 Genre 1199 non-null object \n", + " 2 Year 1199 non-null object \n", + " 3 Runtime 1199 non-null object \n", + " 4 Rating 1199 non-null float64\n", + " 5 desc 1199 non-null object \n", + " 6 Votes 1199 non-null object \n", + " 7 Director 1199 non-null object \n", + " 8 Stars 1199 non-null object \n", + "dtypes: float64(1), object(8)\n", + "memory usage: 93.7+ KB\n" + ] + } + ], + "source": [ + "film_noir_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "02212fde", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
count11991199119911991199.0000001199119911991199
unique8461076884NaN860793394446
topFearCrime, Drama, Film-Noir194782 minNaNJim Fletcher, waking up from a coma, finds he ...296Anthony MannHumphrey Bogart
freq354912343NaN242727
meanNaNNaNNaNNaN6.728023NaNNaNNaNNaN
stdNaNNaNNaNNaN0.634760NaNNaNNaNNaN
minNaNNaNNaNNaN3.600000NaNNaNNaNNaN
25%NaNNaNNaNNaN6.300000NaNNaNNaNNaN
50%NaNNaNNaNNaN6.700000NaNNaNNaNNaN
75%NaNNaNNaNNaN7.200000NaNNaNNaNNaN
maxNaNNaNNaNNaN8.800000NaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " Title Genre Year Runtime Rating \\\n", + "count 1199 1199 1199 1199 1199.000000 \n", + "unique 846 107 68 84 NaN \n", + "top Fear Crime, Drama, Film-Noir 1947 82 min NaN \n", + "freq 3 549 123 43 NaN \n", + "mean NaN NaN NaN NaN 6.728023 \n", + "std NaN NaN NaN NaN 0.634760 \n", + "min NaN NaN NaN NaN 3.600000 \n", + "25% NaN NaN NaN NaN 6.300000 \n", + "50% NaN NaN NaN NaN 6.700000 \n", + "75% NaN NaN NaN NaN 7.200000 \n", + "max NaN NaN NaN NaN 8.800000 \n", + "\n", + " desc Votes Director \\\n", + "count 1199 1199 1199 \n", + "unique 860 793 394 \n", + "top Jim Fletcher, waking up from a coma, finds he ... 296 Anthony Mann \n", + "freq 2 4 27 \n", + "mean NaN NaN NaN \n", + "std NaN NaN NaN \n", + "min NaN NaN NaN \n", + "25% NaN NaN NaN \n", + "50% NaN NaN NaN \n", + "75% NaN NaN NaN \n", + "max NaN NaN NaN \n", + "\n", + " Stars \n", + "count 1199 \n", + "unique 446 \n", + "top Humphrey Bogart \n", + "freq 27 \n", + "mean NaN \n", + "std NaN \n", + "min NaN \n", + "25% NaN \n", + "50% NaN \n", + "75% NaN \n", + "max NaN " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df.describe(include = 'all')" + ] + }, + { + "cell_type": "markdown", + "id": "e2f6c301", + "metadata": {}, + "source": [ + "# The solutions to the Active Learning Exercises start here" + ] + }, + { + "cell_type": "markdown", + "id": "6965f92c", + "metadata": {}, + "source": [ + "### Solution to Q1a" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "eccc46a0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "107" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distinct_genre_noir = len(pd.unique(film_noir_df['Genre']))\n", + "distinct_genre_noir" + ] + }, + { + "cell_type": "markdown", + "id": "ca4cb65f", + "metadata": {}, + "source": [ + "### Solution to Q1b" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f225ba25", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCount
36Crime, Drama, Film-Noir549
4Action, Crime, Drama38
62Drama, Film-Noir38
67Drama, Film-Noir, Thriller37
40Crime, Drama, Mystery36
42Crime, Drama, Thriller36
64Drama, Film-Noir, Mystery35
45Crime, Film-Noir, Mystery32
34Crime, Drama28
48Crime, Film-Noir, Thriller27
\n", + "
" + ], + "text/plain": [ + " Genre Count\n", + "36 Crime, Drama, Film-Noir 549\n", + "4 Action, Crime, Drama 38\n", + "62 Drama, Film-Noir 38\n", + "67 Drama, Film-Noir, Thriller 37\n", + "40 Crime, Drama, Mystery 36\n", + "42 Crime, Drama, Thriller 36\n", + "64 Drama, Film-Noir, Mystery 35\n", + "45 Crime, Film-Noir, Mystery 32\n", + "34 Crime, Drama 28\n", + "48 Crime, Film-Noir, Thriller 27" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_genre = film_noir_df.groupby(['Genre'])['Genre'].count().reset_index(name = 'Count').sort_values(['Count'], ascending = False)\n", + "sub_genre.head(10)" + ] + }, + { + "cell_type": "markdown", + "id": "7b8d411d", + "metadata": {}, + "source": [ + "By completing this exercise, you know now how to produce the distinct entries of genres within the dataset. There are a total of 110 distinct entries. Additionally, you know how to retrieve the 10 most popular genre combinations of those distinct entries, which are listed below: \n", + "1. Crime, Drama, Film-Noir\t\n", + "2. Action, Crime, Drama\t\n", + "3. Drama, Film-Noir\n", + "4. Drama, Film-Noir, Thriller\n", + "5. Crime, Drama, Mystery\t\n", + "6. Crime, Drama, Thriller\t\n", + "7. Drama, Film-Noir, Mystery\n", + "8. Crime, Film-Noir, Mystery\n", + "9. Crime, Drama\n", + "10. Crime, Film-Noir, Thriller" + ] + }, + { + "cell_type": "markdown", + "id": "0eec500b", + "metadata": {}, + "source": [ + "### Solution to Q2" + ] + }, + { + "cell_type": "markdown", + "id": "0c83c0f7", + "metadata": {}, + "source": [ + "In this exercise, the formula will be used: the index of popularity of a film = rating x votes, which is then divided by the number of genres. To find out what sort of subgenres were popular throughout the Film Noir age, we made two additional variables. The first variable is the 'Score', which is created by multiplying 'Rating' with 'Votes'. The second variable is the 'Popularity Index', which is created by dividing the score by the number of distinct entries of genre. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1048f297", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3056949452.py:1: FutureWarning: The default value of regex will change from True to False in a future version.\n", + " film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')\n", + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3056949452.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')\n" + ] + } + ], + "source": [ + "film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fcdcfaa1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\1090731777.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df[['Votes']] = film_noir_df[['Votes']].astype(float)\n" + ] + } + ], + "source": [ + "film_noir_df[['Votes']] = film_noir_df[['Votes']].astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3926bdcb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3217846436.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df['index'] = film_noir_df[['Rating','Votes']].apply(lambda x:x['Rating']*x['Votes'],axis=1)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStarsindex
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13469.0William WylerBette Davis102364.4
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138097.0Alfred HitchcockLaurence Olivier1118585.7
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4268.0Boris IngsterPeter Lorre29022.4
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8201.0Raoul WalshGeorge Raft59047.2
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716.0Stuart HeislerAlbert Dekker4582.4
\n", + "
" + ], + "text/plain": [ + " Title Genre Year \\\n", + "2 The Letter Crime, Drama, Film-Noir 1940 \n", + "3 Rebecca Drama, Film-Noir, Mystery 1940 \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir 1940 \n", + "5 They Drive by Night Crime, Drama, Film-Noir 1940 \n", + "6 Among the Living Drama, Film-Noir, Mystery 1941 \n", + "\n", + " Runtime Rating desc \\\n", + "2 95 min 7.6 The wife of a rubber plantation administrator ... \n", + "3 130 min 8.1 A self-conscious woman juggles adjusting to he... \n", + "4 64 min 6.8 An aspiring reporter is the key witness at the... \n", + "5 95 min 7.2 When one of two truck-driving brothers loses a... \n", + "6 67 min 6.4 A mentally-unstable man who has been kept in i... \n", + "\n", + " Votes Director Stars index \n", + "2 13469.0 William Wyler Bette Davis 102364.4 \n", + "3 138097.0 Alfred Hitchcock Laurence Olivier 1118585.7 \n", + "4 4268.0 Boris Ingster Peter Lorre 29022.4 \n", + "5 8201.0 Raoul Walsh George Raft 59047.2 \n", + "6 716.0 Stuart Heisler Albert Dekker 4582.4 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df['index'] = film_noir_df[['Rating','Votes']].apply(lambda x:x['Rating']*x['Votes'],axis=1)\n", + "film_noir_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ecdf1523", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreScore
0Action, Adventure, Comedy20358.4
1Action, Adventure, Crime10211307.9
2Action, Adventure, Drama67133.0
3Action, Comedy, Crime1253.7
4Action, Crime, Drama21943607.2
5Action, Crime, Film-Noir66562.9
6Action, Crime, Thriller928085.3
7Action, Drama, Film-Noir86388.4
8Action, Drama, Romance202316.9
9Action, Drama, Sci-Fi30893.4
\n", + "
" + ], + "text/plain": [ + " Genre Score\n", + "0 Action, Adventure, Comedy 20358.4\n", + "1 Action, Adventure, Crime 10211307.9\n", + "2 Action, Adventure, Drama 67133.0\n", + "3 Action, Comedy, Crime 1253.7\n", + "4 Action, Crime, Drama 21943607.2\n", + "5 Action, Crime, Film-Noir 66562.9\n", + "6 Action, Crime, Thriller 928085.3\n", + "7 Action, Drama, Film-Noir 86388.4\n", + "8 Action, Drama, Romance 202316.9\n", + "9 Action, Drama, Sci-Fi 30893.4" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Score is made by adding all the Votes together by Genre. \n", + "score_sum = film_noir_df.groupby('Genre')['index'].sum().reset_index(name = 'Score')\n", + "score_sum.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b0ef623b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCount
36Crime, Drama, Film-Noir549
4Action, Crime, Drama38
62Drama, Film-Noir38
67Drama, Film-Noir, Thriller37
40Crime, Drama, Mystery36
42Crime, Drama, Thriller36
64Drama, Film-Noir, Mystery35
45Crime, Film-Noir, Mystery32
34Crime, Drama28
48Crime, Film-Noir, Thriller27
\n", + "
" + ], + "text/plain": [ + " Genre Count\n", + "36 Crime, Drama, Film-Noir 549\n", + "4 Action, Crime, Drama 38\n", + "62 Drama, Film-Noir 38\n", + "67 Drama, Film-Noir, Thriller 37\n", + "40 Crime, Drama, Mystery 36\n", + "42 Crime, Drama, Thriller 36\n", + "64 Drama, Film-Noir, Mystery 35\n", + "45 Crime, Film-Noir, Mystery 32\n", + "34 Crime, Drama 28\n", + "48 Crime, Film-Noir, Thriller 27" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_genre = film_noir_df.groupby(['Genre'])['Genre'].count().reset_index(name = 'Count').sort_values(['Count'], ascending = False)\n", + "sub_genre.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2b6ce0b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCountScorePopularity_Index
0Action, Adventure, Comedy120358.420358.40
1Action, Adventure, Crime910211307.91134589.77
2Action, Adventure, Drama467133.016783.25
3Action, Comedy, Crime11253.71253.70
4Action, Crime, Drama3821943607.2577463.35
...............
102Mystery, Romance, Thriller149102.849102.80
103Mystery, Thriller9649929.372214.37
104Romance, Thriller199097.899097.80
105Romance, Western6286896.947816.15
106Western962988.36998.70
\n", + "

107 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " Genre Count Score \\\n", + "0 Action, Adventure, Comedy 1 20358.4 \n", + "1 Action, Adventure, Crime 9 10211307.9 \n", + "2 Action, Adventure, Drama 4 67133.0 \n", + "3 Action, Comedy, Crime 1 1253.7 \n", + "4 Action, Crime, Drama 38 21943607.2 \n", + ".. ... ... ... \n", + "102 Mystery, Romance, Thriller 1 49102.8 \n", + "103 Mystery, Thriller 9 649929.3 \n", + "104 Romance, Thriller 1 99097.8 \n", + "105 Romance, Western 6 286896.9 \n", + "106 Western 9 62988.3 \n", + "\n", + " Popularity_Index \n", + "0 20358.40 \n", + "1 1134589.77 \n", + "2 16783.25 \n", + "3 1253.70 \n", + "4 577463.35 \n", + ".. ... \n", + "102 49102.80 \n", + "103 72214.37 \n", + "104 99097.80 \n", + "105 47816.15 \n", + "106 6998.70 \n", + "\n", + "[107 rows x 4 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = score_sum.set_index('Genre').combine_first(sub_genre.set_index('Genre')).reset_index()\n", + "df['Popularity_Index'] = round((df['Score']/df['Count']),2)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ed214020", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCountScorePopularity_Index
52Crime, Mystery, Romance18427737.08427737.00
82Drama, Sci-Fi, Thriller14552758.64552758.60
88Fantasy, Mystery, Sci-Fi11828742.41828742.40
55Crime, Thriller45072501.41268125.35
1Action, Adventure, Crime910211307.91134589.77
42Crime, Drama, Thriller3630435650.0845434.72
4Action, Crime, Drama3821943607.2577463.35
49Crime, Horror, Mystery21150192.9575096.45
50Crime, Horror, Thriller2963051.1481525.55
40Crime, Drama, Mystery3616859983.7468332.88
41Crime, Drama, Romance145922509.5423036.39
34Crime, Drama288400263.8300009.42
56Drama143745969.2267569.23
90Film-Noir, Horror, Thriller2469127.6234563.80
67Drama, Film-Noir, Thriller378005838.7216374.02
97Horror, Mystery1213011.5213011.50
8Action, Drama, Romance1202316.9202316.90
6Action, Crime, Thriller5928085.3185617.06
35Crime, Drama, Fantasy5835020.9167004.18
95Film-Noir, Thriller101616739.0161673.90
\n", + "
" + ], + "text/plain": [ + " Genre Count Score \\\n", + "52 Crime, Mystery, Romance 1 8427737.0 \n", + "82 Drama, Sci-Fi, Thriller 1 4552758.6 \n", + "88 Fantasy, Mystery, Sci-Fi 1 1828742.4 \n", + "55 Crime, Thriller 4 5072501.4 \n", + "1 Action, Adventure, Crime 9 10211307.9 \n", + "42 Crime, Drama, Thriller 36 30435650.0 \n", + "4 Action, Crime, Drama 38 21943607.2 \n", + "49 Crime, Horror, Mystery 2 1150192.9 \n", + "50 Crime, Horror, Thriller 2 963051.1 \n", + "40 Crime, Drama, Mystery 36 16859983.7 \n", + "41 Crime, Drama, Romance 14 5922509.5 \n", + "34 Crime, Drama 28 8400263.8 \n", + "56 Drama 14 3745969.2 \n", + "90 Film-Noir, Horror, Thriller 2 469127.6 \n", + "67 Drama, Film-Noir, Thriller 37 8005838.7 \n", + "97 Horror, Mystery 1 213011.5 \n", + "8 Action, Drama, Romance 1 202316.9 \n", + "6 Action, Crime, Thriller 5 928085.3 \n", + "35 Crime, Drama, Fantasy 5 835020.9 \n", + "95 Film-Noir, Thriller 10 1616739.0 \n", + "\n", + " Popularity_Index \n", + "52 8427737.00 \n", + "82 4552758.60 \n", + "88 1828742.40 \n", + "55 1268125.35 \n", + "1 1134589.77 \n", + "42 845434.72 \n", + "4 577463.35 \n", + "49 575096.45 \n", + "50 481525.55 \n", + "40 468332.88 \n", + "41 423036.39 \n", + "34 300009.42 \n", + "56 267569.23 \n", + "90 234563.80 \n", + "67 216374.02 \n", + "97 213011.50 \n", + "8 202316.90 \n", + "6 185617.06 \n", + "35 167004.18 \n", + "95 161673.90 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df.sort_values(by='Popularity_Index', ascending=False)\n", + "for_visual = df.head(20)\n", + "for_visual" + ] + }, + { + "cell_type": "markdown", + "id": "af2b5f6d", + "metadata": {}, + "source": [ + "#### Import alert" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "72849600", + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment the below code if you haven't installed matplotlib yet\n", + "\n", + "#pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a079ff70", + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment the below code if you haven't installed the current version of seaborn yet\n", + "\n", + "#pip install seaborn==0.11.0" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "69b9621e", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from pandas import Series, DataFrame\n", + "%matplotlib inline\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as pltb" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "fbe96cbd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gTPPPJPnn3+ejTbaiK233ppjjz2WDTfckA996EMcdNBB/P73v2fQoHJz4phRB0HQJ6+++ipjxoxh3LhxrLTSSuy7777ccsst7LnnngBMmDCBWbNm8cILLwDwqU99isUWW4wRI0aw5ZZbcuedd+b+rAsvvJANNtiAsWPHMmPGDO6///45rzUryd4YNmwYEyZM4Oqrr+bBBx/kzTffZL311sv12RtttBErrrgigwYNYsyYMTzxxBM8+OCDrLLKKqy++upIYo899pjz/uuvv55jjz2WMWPGsMUWW/Daa6/x1FNPMXToUE477TS22WYbDjjgAFZdddXc3783YkYdBEGfNGzUzbSrDNUIO2sNP5PEQgst1GP53y6O+PHHH+e4447jrrvuYplllmHvvffu8b5hw4blkve//uu/OOaYY1hrrbXYZ599crUBWHTRRef8P3jwYN56662236eBmXHJJZew5pprzvPavffey/Dhw3n22Wdzf35fxIw6CIJkNt98c8477zzA7bsjRoxgySWXBOCKK67gtddeY9asWUyaNIkNN9yQlVdemfvvv5/XX3+dF154gRtuuGGePl988UWGDRvGUkstxT/+8Q+uueaaXLIsscQSvPTSS3Oef/CDH+Tpp5/m/PPPZ7fddiv1Pddaay0ef/xx/vKXvwBwwQUXzHntox/9KCeddNKcm9bUqVMBePLJJzn++OOZOnUq11xzDXfccUcpGSDnjFrSocB/AQbcC+xjZpF8IAi6TU1qnB555JHss88+jB49mqFDh3LOOefMeW2jjTZiu+2246mnnuLwww9nhRVWAGDnnXdm9OjRrL766owdO3aePtdff33Gjh3LOuusw/ve9z4222yzXLLsv//+bLvttiy//PLceOONcz5r2rRpLLPMMqW+55AhQzj11FPZbrvtGDFiBOPHj+e+++4D4PDDD+eQQw5h9OjRmBmjRo3iqquuYt999+W4445jhRVW4IwzzmDvvffmrrvuYsiQIYXl6Le4raT3ALcAa5vZq5IuBH5vZmf31mbcuHHWIy6yv3jNmpx8QVA3HnjgAd7//vcPtBi5OfLII1l88cX52te+NqBybL/99hx66KFstdVWAypHb7T7XSVNMbNx7d6f1/SxELCYpIWAoUA1hpcgCIIKef7551ljjTVYbLHFaquki9Cv6cPM/irpOOAp4FXgejO7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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for_visual.plot.bar(x='Genre', y='Popularity_Index', color=\"red\",title='Top 20')\n", + "pltb.show()" + ] + }, + { + "cell_type": "markdown", + "id": "2a240e8e", + "metadata": {}, + "source": [ + "It is not difficult to see that the most popular type is \"Crime, Mystery, Romance\", followed by \"Drama, Sci-Fi, Thriller\" and \"Fantasy, Mystery, Sci-Fi\t\". However, these top-3 types have only one film. To be precise, the success of a film does not represent the success of a genre. \n", + "From this point of view, the most popular film noir type is \"Crime, Drama, Thriller\".\n", + "Taken together, Crime and Drama seem to be the most well-received genres." + ] + }, + { + "cell_type": "markdown", + "id": "dc36a6f5", + "metadata": {}, + "source": [ + "### Solution to Q3a" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "ccec903a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Director
Anthony Mann27
Fritz Lang25
Robert Siodmak20
Alfred Hitchcock19
Don Siegel18
Robert Wise16
Joseph H. Lewis15
Phil Karlson14
Otto Preminger14
Henry Hathaway13
\n", + "
" + ], + "text/plain": [ + " Director\n", + "Anthony Mann 27\n", + "Fritz Lang 25\n", + "Robert Siodmak 20\n", + "Alfred Hitchcock 19\n", + "Don Siegel 18\n", + "Robert Wise 16\n", + "Joseph H. Lewis 15\n", + "Phil Karlson 14\n", + "Otto Preminger 14\n", + "Henry Hathaway 13" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "most_freq_directors = film_noir_df['Director'].value_counts().to_frame()\n", + "most_freq_directors.head(10)" + ] + }, + { + "cell_type": "markdown", + "id": "cfc6b65f", + "metadata": {}, + "source": [ + "### Solution to Q3b" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "79ff96fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RatingVotesindex
Director
Anthony Mann180.0116606.0754324.9
Fritz Lang165.2225367.01517324.7
Robert Siodmak135.4121965.0846361.2
Alfred Hitchcock130.82331819.015703724.4
Don Siegel124.9158977.01095342.1
Robert Wise105.4153326.01087370.6
Joseph H. Lewis100.753984.0354194.5
Phil Karlson93.740347.0272411.8
Otto Preminger93.1166436.01115311.7
Henry Hathaway89.596051.0678194.5
\n", + "
" + ], + "text/plain": [ + " Rating Votes index\n", + "Director \n", + "Anthony Mann 180.0 116606.0 754324.9\n", + "Fritz Lang 165.2 225367.0 1517324.7\n", + "Robert Siodmak 135.4 121965.0 846361.2\n", + "Alfred Hitchcock 130.8 2331819.0 15703724.4\n", + "Don Siegel 124.9 158977.0 1095342.1\n", + "Robert Wise 105.4 153326.0 1087370.6\n", + "Joseph H. Lewis 100.7 53984.0 354194.5\n", + "Phil Karlson 93.7 40347.0 272411.8\n", + "Otto Preminger 93.1 166436.0 1115311.7\n", + "Henry Hathaway 89.5 96051.0 678194.5" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "directors_noir = film_noir_df.groupby('Director').sum()\n", + "directors_noir_pop = directors_noir.nlargest(10, 'Rating')\n", + "directors_noir_pop" + ] + }, + { + "cell_type": "markdown", + "id": "fc1d693a", + "metadata": {}, + "source": [ + "As is visible, the 10 directors with the most dominating presence are the following: \n", + "1. Anthony Mann who directed 27 movies\n", + "2. Fritz Lang who directed 25 movies\n", + "3. Robert Siodmak who directed 20 movies\n", + "4. Alfred Hitchcock who directed 19 movies\n", + "5. Don Siegel who directed 18 movies\n", + "6. Robert Wise who directed 16 movies\n", + "7. Joseph H. Lewis who directed 15 movies\n", + "8. Phil Karlson and Otto Preminger who both directed 14 movies, each\n", + "10. Henry Hathaway who directed 13 movies.\n", + "\n", + "As is visible, the movies directed by those directors are enjoyed by the viewers. The ordering of the 'Rating' is the same as the list produced in Q3a. \n", + "\n", + "1. Anthony Mann gained a total rating of 180\n", + "2. Fritz Lang gained a total rating of 165,2\n", + "3. Robert Siodmak gained a total rating of 135,4\n", + "4. Alfred Hitchcock gained a total rating of 130,8\n", + "5. Don Siegel gained a total rating of 124,9\n", + "6. Robert Wise gained a total rating of 105,4\n", + "7. Joseph H. Lewis gained a total rating of 100,7\n", + "8. Phil Karlson gained a total rating of 93,7\n", + "9. Otto Preminger gained a total rating of 93,1\n", + "10. Henry Hathaway gained a total rating of 89,5" + ] + }, + { + "cell_type": "markdown", + "id": "358bbdaa", + "metadata": {}, + "source": [ + "### Solution to Q4" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f82581d7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RatingVotesindex
Stars
Humphrey Bogart181.91502272.010366051.2
Edward G. Robinson125.797388.0645711.1
Robert Mitchum122.6318835.02122339.3
Joan Crawford122.5140740.01009009.9
Barbara Stanwyck119.386870.0578627.4
Ida Lupino111.857265.0418859.2
Glenn Ford93.083316.0581342.6
George Raft91.320982.0149333.0
Alan Ladd89.455487.0385819.5
John Payne89.027650.0192780.6
\n", + "
" + ], + "text/plain": [ + " Rating Votes index\n", + "Stars \n", + "Humphrey Bogart 181.9 1502272.0 10366051.2\n", + "Edward G. Robinson 125.7 97388.0 645711.1\n", + "Robert Mitchum 122.6 318835.0 2122339.3\n", + "Joan Crawford 122.5 140740.0 1009009.9\n", + "Barbara Stanwyck 119.3 86870.0 578627.4\n", + "Ida Lupino 111.8 57265.0 418859.2\n", + "Glenn Ford 93.0 83316.0 581342.6\n", + "George Raft 91.3 20982.0 149333.0\n", + "Alan Ladd 89.4 55487.0 385819.5\n", + "John Payne 89.0 27650.0 192780.6" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stars_noir = film_noir_df.groupby('Stars').sum()\n", + "stars_noir_pop = stars_noir.nlargest(10, 'Rating')\n", + "stars_noir_pop" + ] + }, + { + "cell_type": "markdown", + "id": "57893d90", + "metadata": {}, + "source": [ + "By completing this exercise you now know how to produce code to see which movie stars had the most success during their Film-Noir career. The following is a list of the 10 movie stars who had the most success based on their Rating:\n", + "1. Humphrey Bogart\n", + "2. Edward G. Robinson\n", + "3. Robert Mitchum\n", + "4. Joan Crawford\n", + "5. Barbara Stanwyck\n", + "6. Ida Lupino\n", + "7. Glenn Ford\n", + "8. George Raft\n", + "9. Alan Ladd\n", + "10. John Payne" + ] + }, + { + "cell_type": "markdown", + "id": "c978595f", + "metadata": {}, + "source": [ + "### Solution to Q5a" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "a5c389cf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: wordcloud in c:\\users\\gebruiker 1\\appdata\\roaming\\python\\python39\\site-packages (1.8.2.2)\n", + "Requirement already satisfied: pillow in c:\\programdata\\anaconda3\\lib\\site-packages (9.0.1)\n", + "Requirement already satisfied: matplotlib in c:\\programdata\\anaconda3\\lib\\site-packages (from wordcloud) (3.5.1)\n", + "Requirement already satisfied: numpy>=1.6.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from wordcloud) (1.21.5)\n", + "Requirement already satisfied: python-dateutil>=2.7 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (2.8.2)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (1.3.2)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (0.11.0)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (3.0.4)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (4.25.0)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (21.3)\n", + "Requirement already satisfied: six>=1.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from python-dateutil>=2.7->matplotlib->wordcloud) (1.16.0)\n" + ] + } + ], + "source": [ + "!pip install wordcloud pillow\n", + "from wordcloud import WordCloud, STOPWORDS\n", + "from PIL import Image\n", + "\n", + "# clean 'See full summary' suffix\n", + "# removesuffix doesn't work\n", + "desc = film_noir_df['desc']\n", + "descriptions = []\n", + "for description in desc:\n", + " if description.endswith(\"»\"):\n", + " description = description[:description.find(\"... See full\")]\n", + " descriptions.append(description)\n", + "\n", + "\n", + "stop_w=set(STOPWORDS)\n", + "word_cloud= WordCloud(stopwords = stop_w).generate(str(descriptions))\n", + "img= word_cloud.to_image()\n", + "img.show()" + ] + }, + { + "cell_type": "markdown", + "id": "17999037", + "metadata": {}, + "source": [ + "### Solution to Q5b" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b62b28f7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('murder', 168),\n", + " ('man', 150),\n", + " ('woman', 113),\n", + " ('police', 106),\n", + " ('new', 98),\n", + " ('young', 88),\n", + " ('wife', 87),\n", + " ('', 78),\n", + " ('detective', 74),\n", + " ('finds', 65),\n", + " ('one', 63),\n", + " ('two', 57),\n", + " ('find', 57),\n", + " ('becomes', 53),\n", + " ('falls', 51),\n", + " ('him.', 50),\n", + " ('gets', 49),\n", + " ('tries', 48),\n", + " ('prison', 46),\n", + " ('love', 46),\n", + " ('husband', 45),\n", + " ('american', 45),\n", + " ('help', 44),\n", + " ('crime', 43),\n", + " ('life', 43),\n", + " ('soon', 40),\n", + " ('beautiful', 39),\n", + " ('killer', 39),\n", + " ('former', 37),\n", + " ('los', 37),\n", + " ('murder.', 37),\n", + " ('private', 36),\n", + " ('takes', 36),\n", + " ('york', 36),\n", + " ('criminal', 36),\n", + " ('goes', 35),\n", + " ('involved', 35),\n", + " ('girl', 34),\n", + " ('war', 34),\n", + " ('old', 33),\n", + " ('family', 33),\n", + " ('accused', 32),\n", + " ('rich', 31),\n", + " ('hired', 30),\n", + " ('will', 30),\n", + " ('home', 30),\n", + " ('bank', 30),\n", + " ('local', 30),\n", + " ('murdered', 30),\n", + " ('kill', 30),\n", + " ('gangster', 28),\n", + " ('married', 28),\n", + " ('comes', 28),\n", + " ('plans', 28),\n", + " ('mysterious', 28),\n", + " ('robbery', 27),\n", + " ('wealthy', 27),\n", + " ('small', 27),\n", + " ('town', 27),\n", + " ('back', 27),\n", + " ('plan', 26),\n", + " ('must', 26),\n", + " ('may', 25),\n", + " ('boss', 25),\n", + " ('her.', 25),\n", + " ('meets', 25),\n", + " ('gang', 25),\n", + " ('doctor', 24),\n", + " ('go', 24),\n", + " ('take', 24),\n", + " ('murders', 24),\n", + " ('order', 24),\n", + " ('agent', 24),\n", + " ('night', 24),\n", + " ('attorney', 24),\n", + " ('prove', 23),\n", + " ('case', 23),\n", + " ('past', 23),\n", + " ('joe', 23),\n", + " ('friend', 23),\n", + " ('san', 22),\n", + " ('begins', 22),\n", + " ('killing', 22),\n", + " ('murder,', 22),\n", + " ('revenge', 22),\n", + " ('death', 21),\n", + " ('kills', 21),\n", + " ('story', 21),\n", + " ('angeles', 21),\n", + " ('writer', 21),\n", + " ('three', 20),\n", + " ('suspect', 20),\n", + " ('owner', 20),\n", + " ('returns', 20),\n", + " ('girlfriend', 20),\n", + " ('cop', 20),\n", + " ('killed', 20),\n", + " ('years', 19),\n", + " ('singer', 19),\n", + " ('female', 19),\n", + " ('men', 19),\n", + " ('sister', 19),\n", + " ('complex', 19),\n", + " ('city', 19),\n", + " ('innocent', 19),\n", + " ('even', 19),\n", + " ('father', 19),\n", + " ('newspaper', 19),\n", + " ('next', 19),\n", + " ('homicide', 19),\n", + " ('lawyer', 19),\n", + " ('discovers', 18),\n", + " ('trying', 18),\n", + " ('marries', 18),\n", + " ('nazi', 18),\n", + " ('now', 18),\n", + " ('try', 18),\n", + " ('make', 18),\n", + " ('john', 18),\n", + " ('train', 18),\n", + " ('corrupt', 18),\n", + " ('escapes', 17),\n", + " ('money', 17),\n", + " ('committed', 17),\n", + " ('found', 17),\n", + " ('husband,', 17),\n", + " ('job', 17),\n", + " ('investigates', 17),\n", + " ('seeks', 17),\n", + " ('murdered.', 16),\n", + " ('escape', 16),\n", + " ('mexico', 16),\n", + " ('son', 16),\n", + " ('decides', 16),\n", + " ('small-town', 16),\n", + " ('leads', 16),\n", + " ('attempt', 16),\n", + " ('boy', 16),\n", + " ('veteran', 16),\n", + " ('mob', 16),\n", + " ('secret', 15),\n", + " ('affair', 15),\n", + " ('real', 15),\n", + " ('working', 15),\n", + " ('them.', 15),\n", + " ('dead', 15),\n", + " ('world', 15),\n", + " ('ruthless', 15),\n", + " ('tough', 15),\n", + " ('framed', 15),\n", + " ('investigator', 15),\n", + " ('investigation', 15),\n", + " ('nick', 15),\n", + " ('brother', 15),\n", + " ('run', 15),\n", + " ('escaped', 15),\n", + " ('group', 14),\n", + " ('starts', 14),\n", + " ('become', 14),\n", + " ('insurance', 14),\n", + " ('stumbles', 14),\n", + " ('helps', 14),\n", + " ('relationship', 14),\n", + " ('nightclub', 14),\n", + " ('ends', 14),\n", + " ('convicted', 14),\n", + " ('murdering', 14),\n", + " ('falling', 14),\n", + " ('district', 14),\n", + " ('johnny', 14),\n", + " ('mobster', 14),\n", + " ('attempts', 14),\n", + " ('violent', 14),\n", + " ('drug', 14),\n", + " ('car', 14),\n", + " (\"wife's\", 13),\n", + " ('reporter', 13),\n", + " ('released', 13),\n", + " ('house', 13),\n", + " ('lover', 13),\n", + " ('french', 13),\n", + " ('ring', 13),\n", + " ('ship', 13),\n", + " ('mystery', 13),\n", + " ('missing', 13),\n", + " ('hires', 13),\n", + " ('suspects', 13),\n", + " ('turns', 13),\n", + " ('whose', 13),\n", + " ('vicious', 13),\n", + " ('wife.', 13),\n", + " ('agents', 13),\n", + " ('marrying', 13),\n", + " ('marry', 13),\n", + " ('determined', 13),\n", + " ('bill', 13),\n", + " ('caught', 13),\n", + " ('sentence', 13),\n", + " ('town,', 13),\n", + " ('detectives', 13),\n", + " ('killer.', 13),\n", + " ('crime.', 13),\n", + " ('undercover', 13),\n", + " ('believes', 13),\n", + " ('company', 12),\n", + " ('francisco', 12),\n", + " ('woman.', 12),\n", + " ('fugitive', 12),\n", + " ('husband.', 12),\n", + " ('identity', 12),\n", + " ('search', 12),\n", + " ('artist', 12),\n", + " ('daughter', 12),\n", + " ('career', 12),\n", + " ('web', 12),\n", + " ('dancer', 12),\n", + " ('double', 12),\n", + " ('business', 12),\n", + " ('widow', 12),\n", + " ('dangerous', 12),\n", + " (\"woman's\", 12),\n", + " ('sets', 12),\n", + " ('turned', 12),\n", + " ('us', 12),\n", + " ('ex-con', 12),\n", + " ('california', 11),\n", + " ('wants', 11),\n", + " ('looking', 11),\n", + " ('track', 11),\n", + " ('spy', 11),\n", + " ('clear', 11),\n", + " ('him,', 11),\n", + " ('hide', 11),\n", + " ('philip', 11),\n", + " ('scheme', 11),\n", + " ('accidentally', 11),\n", + " ('deadly', 11),\n", + " ('plot', 11),\n", + " ('girlfriend,', 11),\n", + " ('younger', 11),\n", + " ('threatens', 11),\n", + " ('her,', 11),\n", + " ('army', 11),\n", + " ('war,', 11),\n", + " ('woman,', 11),\n", + " ('driver', 11),\n", + " ('love,', 11),\n", + " ('around', 11),\n", + " ('house,', 11),\n", + " ('victim', 11),\n", + " ('convict', 11),\n", + " ('british', 11),\n", + " ('tells', 11),\n", + " ('frank', 11),\n", + " ('jim', 11),\n", + " ('claims', 10),\n", + " ('prison,', 10),\n", + " ('george', 10),\n", + " ('partner', 10),\n", + " ('getting', 10),\n", + " ('amnesia', 10),\n", + " ('people', 10),\n", + " ('suspected', 10),\n", + " ('suspicion', 10),\n", + " ('stop', 10),\n", + " ('marlowe', 10),\n", + " ('secretary', 10),\n", + " ('lieutenant', 10),\n", + " ('part', 10),\n", + " ('ring.', 10),\n", + " ('captain', 10),\n", + " ('witnesses', 10),\n", + " ('solve', 10),\n", + " ('desperate', 10),\n", + " ('successful', 10),\n", + " ('-', 10),\n", + " ('plots', 10),\n", + " ('film', 10),\n", + " ('gambler', 10),\n", + " ('angeles,', 10),\n", + " ('fall', 10),\n", + " ('women', 10),\n", + " ('believe', 10),\n", + " ('investigating', 10),\n", + " ('chief', 10),\n", + " ('away', 10),\n", + " ('circumstances', 10),\n", + " ('bookie', 10),\n", + " ('commits', 10),\n", + " ('blonde', 10),\n", + " ('hides', 10),\n", + " ('finally', 10),\n", + " ('club', 10),\n", + " ('stolen', 10),\n", + " ('communist', 10),\n", + " ('trouble', 9),\n", + " ('railroad', 9),\n", + " ('time', 9),\n", + " ('older', 9),\n", + " ('events', 9),\n", + " ('blackmail', 9),\n", + " ('murderous', 9),\n", + " ('murderer', 9),\n", + " ('chance', 9),\n", + " ('con', 9),\n", + " ('arrives', 9),\n", + " ('unscrupulous', 9),\n", + " ('murdered,', 9),\n", + " ('socialite', 9),\n", + " ('fellow', 9),\n", + " ('mother', 9),\n", + " ('money.', 9),\n", + " ('small-time', 9),\n", + " ('thinks', 9),\n", + " ('serial', 9),\n", + " ('act', 9),\n", + " ('fight', 9),\n", + " ('uncle', 9),\n", + " ('mike', 9),\n", + " ('seeking', 9),\n", + " ('investigate', 9),\n", + " ('heist.', 9),\n", + " ('lovely', 9),\n", + " ('clues', 9),\n", + " ('wounded', 9),\n", + " ('catches', 9),\n", + " ('jewel', 9),\n", + " ('hiding', 9),\n", + " ('boxer', 9),\n", + " ('state', 9),\n", + " ('honest', 9),\n", + " ('u.s.', 9),\n", + " ('forces', 9),\n", + " ('la', 9),\n", + " ('without', 9),\n", + " ('heist', 9),\n", + " ('syndicate', 9),\n", + " ('wrongly', 9),\n", + " ('name', 9),\n", + " ('korean', 9),\n", + " ('first', 8),\n", + " ('charged', 8),\n", + " ('causes', 8),\n", + " ('makes', 8),\n", + " ('inspector', 8),\n", + " ('body', 8),\n", + " ('pianist', 8),\n", + " ('professor', 8),\n", + " ('ww2,', 8),\n", + " ('york,', 8),\n", + " ('stranger', 8),\n", + " ('head', 8),\n", + " ('stage', 8),\n", + " ('pilot', 8),\n", + " ('steve', 8),\n", + " ('authorities', 8),\n", + " ('seems', 8),\n", + " ('witnessed', 8),\n", + " ('travels', 8),\n", + " ('estate', 8),\n", + " ('true', 8),\n", + " ('innocence.', 8),\n", + " ('dreams', 8),\n", + " ('apartment', 8),\n", + " ('boyfriend', 8),\n", + " ('leading', 8),\n", + " ('paroled', 8),\n", + " ('crooked', 8),\n", + " ('fbi', 8),\n", + " ('come', 8),\n", + " ('robber', 8),\n", + " ('best', 8),\n", + " ('top', 8),\n", + " ('treasury', 8),\n", + " ('officer', 8),\n", + " ('defends', 8),\n", + " ('parole', 8),\n", + " ('teenage', 8),\n", + " ('shot', 8),\n", + " ('sees', 8),\n", + " ('kidnapped', 8),\n", + " ('learns', 8),\n", + " ('living', 8),\n", + " ('shoots', 7),\n", + " ('himself.', 7),\n", + " ('brothers', 7),\n", + " ('work', 7),\n", + " ('thief', 7),\n", + " ('gambling', 7),\n", + " ('charming', 7),\n", + " ('cynical', 7),\n", + " ('memory.', 7),\n", + " ('follows', 7),\n", + " ('know', 7),\n", + " ('dead,', 7),\n", + " ('nurse', 7),\n", + " ('seemingly', 7),\n", + " ('interest', 7),\n", + " ('manipulative', 7),\n", + " ('moves', 7),\n", + " ('england', 7),\n", + " ('onto', 7),\n", + " ('it.', 7),\n", + " ('drawn', 7),\n", + " ('leader', 7),\n", + " ('lives', 7),\n", + " ('trapped', 7),\n", + " ('orleans', 7),\n", + " ('disappearance', 7),\n", + " ('gold', 7),\n", + " ('prevent', 7),\n", + " ('well', 7),\n", + " ('everyone', 7),\n", + " ('widow,', 7),\n", + " ('uses', 7),\n", + " ('recover', 7),\n", + " ('got', 7),\n", + " ('series', 7),\n", + " ('eye', 7),\n", + " ('might', 7),\n", + " ('however,', 7),\n", + " ('casino', 7),\n", + " ('lover.', 7),\n", + " ('named', 7),\n", + " ('department', 7),\n", + " ('rob', 7),\n", + " ('hit', 7),\n", + " ('much', 7),\n", + " ('information', 7),\n", + " ('made', 7),\n", + " ('commit', 7),\n", + " ('wife,', 7),\n", + " ('trip', 7),\n", + " ('middle-aged', 7),\n", + " ('defense', 7),\n", + " ('editor', 7),\n", + " ('investigate.', 7),\n", + " ('works', 7),\n", + " ('runs', 7),\n", + " ('despite', 7),\n", + " ('couple', 7),\n", + " ('big', 7),\n", + " ('led', 7),\n", + " ('set', 7),\n", + " ('streets', 7),\n", + " ('steals', 7),\n", + " ('keep', 7),\n", + " ('death.', 7),\n", + " ('cause', 7),\n", + " ('mysteriously', 7),\n", + " ('later', 7),\n", + " ('man,', 7),\n", + " ('case.', 7),\n", + " ('break', 7),\n", + " ('psychopathic', 7),\n", + " ('pursued', 7),\n", + " ('still', 7),\n", + " ('jane', 7),\n", + " ('sent', 7),\n", + " ('lead', 7),\n", + " ('friend,', 7),\n", + " ('evidence', 7),\n", + " ('smuggling', 7),\n", + " ('&', 7),\n", + " ('early', 7),\n", + " ('using', 7),\n", + " ('way', 7),\n", + " ('four', 7),\n", + " ('cops', 7),\n", + " ('underworld', 7),\n", + " ('neighbor', 7),\n", + " ('robbery.', 7),\n", + " ('forced', 7),\n", + " ('testify', 7),\n", + " ('steal', 7),\n", + " ('last', 7),\n", + " (\"owner's\", 6),\n", + " ('twin', 6),\n", + " ('foster', 6),\n", + " ('notorious', 6),\n", + " ('claire', 6),\n", + " ('frankie', 6),\n", + " ('model', 6),\n", + " ('look', 6),\n", + " ('disturbed', 6),\n", + " ('rather', 6),\n", + " ('guy', 6),\n", + " ('heiress', 6),\n", + " ('planning', 6),\n", + " ('struggles', 6),\n", + " ('turn', 6),\n", + " ('lost', 6),\n", + " ('german', 6),\n", + " ('expert', 6),\n", + " ('assassin', 6),\n", + " ('marked', 6),\n", + " ('foreign', 6),\n", + " ('radio', 6),\n", + " ('girl,', 6),\n", + " ('uncovers', 6),\n", + " ('vacation', 6),\n", + " ('there.', 6),\n", + " ('femme', 6),\n", + " ('realizes', 6),\n", + " ('usa', 6),\n", + " ('aunt', 6),\n", + " ('happy', 6),\n", + " ('although', 6),\n", + " ('jack', 6),\n", + " ('ii', 6),\n", + " ('major', 6),\n", + " ('deceit.', 6),\n", + " ('harry', 6),\n", + " ('prisoner', 6),\n", + " ('meet', 6),\n", + " ('civil', 6),\n", + " ('ann', 6),\n", + " ('across', 6),\n", + " ('al', 6),\n", + " ('death,', 6),\n", + " ('musician', 6),\n", + " ('strange', 6),\n", + " ('alcoholic', 6),\n", + " ('keeps', 6),\n", + " ('hours', 6),\n", + " ('based', 6),\n", + " ('persuades', 6),\n", + " ('fortune', 6),\n", + " ('psychiatrist', 6),\n", + " ('fate', 6),\n", + " ('cab', 6),\n", + " ('\"the', 6),\n", + " ('involvement', 6),\n", + " ('nuclear', 6),\n", + " ('public', 6),\n", + " ('apartment.', 6),\n", + " ('aided', 6),\n", + " ('composer', 6),\n", + " ('martin', 6),\n", + " ('worth', 6),\n", + " ('suicide', 6),\n", + " ('boyfriend.', 6),\n", + " ('shadowy', 6),\n", + " ('assumes', 6),\n", + " ('involving', 6),\n", + " ('poor', 6),\n", + " ('serious', 6),\n", + " ('upon', 6),\n", + " ('together', 6),\n", + " ('bride', 6),\n", + " ('job,', 6),\n", + " ('publisher', 6),\n", + " ('innocence', 6),\n", + " ('flee', 6),\n", + " ('beach', 6),\n", + " ('vic', 6),\n", + " ('angeles.', 6),\n", + " ('boss.', 6),\n", + " ('newly', 6),\n", + " ('hunter', 6),\n", + " ('want', 6),\n", + " ('man.', 6),\n", + " ('ranch', 6),\n", + " ('eve', 6),\n", + " ('rival', 6),\n", + " ('plant', 6),\n", + " ('hostage', 6),\n", + " ('client', 6),\n", + " ('visit', 6),\n", + " ('day,', 6),\n", + " ('dan', 6),\n", + " ('taken', 6),\n", + " ('businessman', 6),\n", + " ('coast,', 6),\n", + " ('taking', 6),\n", + " ('killers.', 6),\n", + " ('searching', 6),\n", + " ('star', 6),\n", + " ('mexican', 6),\n", + " ('federal', 6),\n", + " ('suspect.', 6),\n", + " ('eventually', 6),\n", + " ('camp', 6),\n", + " ('hero', 6),\n", + " ('visiting', 6),\n", + " ('gangsters', 6),\n", + " ('protect', 6),\n", + " ('responsible', 6),\n", + " ('creates', 6),\n", + " ('robbing', 6),\n", + " ('inmate', 6),\n", + " ('payroll', 6),\n", + " (\"husband's\", 6),\n", + " ('romance', 6),\n", + " ('reluctant', 6),\n", + " (\"brother's\", 6),\n", + " ('assigned', 6),\n", + " ('policeman', 6),\n", + " ('dollars', 6),\n", + " ('mechanic', 6),\n", + " ('prosecutor', 6),\n", + " ('catch', 6),\n", + " ('factory', 6),\n", + " ('helping', 6),\n", + " ('falsely', 5),\n", + " ('following', 5),\n", + " ('charles', 5),\n", + " ('gorgeous', 5),\n", + " ('decide', 5),\n", + " ('put', 5),\n", + " ('offers', 5),\n", + " ('whether', 5),\n", + " ('person', 5),\n", + " ('blackmailed', 5),\n", + " ('agents.', 5),\n", + " ('attention', 5),\n", + " ('accident,', 5),\n", + " ('truth', 5),\n", + " ('give', 5),\n", + " ('town.', 5),\n", + " ('village', 5),\n", + " ('hears', 5),\n", + " ('someone', 5),\n", + " ('family.', 5),\n", + " ('london', 5),\n", + " ('rises', 5),\n", + " ('family,', 5),\n", + " ('drifter', 5),\n", + " ('target', 5),\n", + " ('neale', 5),\n", + " ('threatened', 5),\n", + " ('devoted', 5),\n", + " ('risks', 5),\n", + " ('elusive', 5),\n", + " ('selfish', 5),\n", + " ('arrested', 5),\n", + " ('island', 5),\n", + " ('memory', 5),\n", + " ('faces', 5),\n", + " ('trouble.', 5),\n", + " ('student', 5),\n", + " ('illegal', 5),\n", + " ('unhappy', 5),\n", + " ('sister.', 5),\n", + " ('trap', 5),\n", + " ('witnessing', 5),\n", + " ('money,', 5),\n", + " ('poisoned', 5),\n", + " ('smuggled', 5),\n", + " ('shows', 5),\n", + " ('novelist', 5),\n", + " ('live', 5),\n", + " ('house.', 5),\n", + " ('days', 5),\n", + " ('special', 5),\n", + " ('reveals', 5),\n", + " ('though', 5),\n", + " ('assistant', 5),\n", + " ('glamorous', 5),\n", + " ('recurring', 5),\n", + " ('long', 5),\n", + " ('eddie', 5),\n", + " ('apparent', 5),\n", + " ('finding', 5),\n", + " ('big-time', 5),\n", + " ('straight', 5),\n", + " ('beautiful,', 5),\n", + " ('vincent', 5),\n", + " ('jealous', 5),\n", + " ('hunt', 5),\n", + " ('one.', 5),\n", + " ('mute', 5),\n", + " ('feels', 5),\n", + " ('scheming', 5),\n", + " ('seduces', 5),\n", + " ('hidden', 5),\n", + " ('really', 5),\n", + " ('killing.', 5),\n", + " ('difficult', 5),\n", + " ('unethical', 5),\n", + " ('characters', 5),\n", + " ('recently', 5),\n", + " ('farm', 5),\n", + " ('in-love', 5),\n", + " ('nearby', 5),\n", + " ('actor', 5),\n", + " ('mining', 5),\n", + " ('bad', 5),\n", + " ('threats', 5),\n", + " ('expecting', 5),\n", + " ('crook', 5),\n", + " ('lady', 5),\n", + " ('magazine', 5),\n", + " ('personal', 5),\n", + " ('sends', 5),\n", + " ('develops', 5),\n", + " ('frustrated', 5),\n", + " ('english', 5),\n", + " ('photographer', 5),\n", + " ('evade', 5),\n", + " ('return', 5),\n", + " ('brought', 5),\n", + " ('dead.', 5),\n", + " ('frame', 5),\n", + " ('feud', 5),\n", + " ('avoid', 5),\n", + " ('wish', 5),\n", + " ('struggling', 5),\n", + " ('stand', 5),\n", + " ('self', 5),\n", + " ('blind', 5),\n", + " ('judge', 5),\n", + " ('frames', 5),\n", + " ('large', 5),\n", + " ('shelter', 5),\n", + " ('inmates', 5),\n", + " ('joins', 5),\n", + " ('nightmare', 5),\n", + " ('racket.', 5),\n", + " ('lonely', 5),\n", + " ('instead.', 5),\n", + " ('another', 5),\n", + " ('jail', 5),\n", + " ('pretty', 5),\n", + " ('rap', 5),\n", + " (\"man's\", 5),\n", + " ('fiance', 5),\n", + " ('leave', 5),\n", + " ('mark', 5),\n", + " ('laura', 5),\n", + " ('among', 5),\n", + " ('mixed', 5),\n", + " ('vengeful', 5),\n", + " ('success', 5),\n", + " ('america', 5),\n", + " ('ambitious', 5),\n", + " ('always', 5),\n", + " ('given', 5),\n", + " ('armored', 5),\n", + " ('truck', 5),\n", + " ('obsessed', 5),\n", + " ('tracks', 5),\n", + " ('hoodlum', 5),\n", + " ('lover,', 5),\n", + " ('see', 5),\n", + " ('party', 5),\n", + " ('powerful', 5),\n", + " ('black', 5),\n", + " ('d.a.', 5),\n", + " ('service', 5),\n", + " ('deal', 5),\n", + " ('there,', 5),\n", + " ('daring', 5),\n", + " ('brother,', 5),\n", + " ('danger', 5),\n", + " ('becoming', 5),\n", + " ('pregnant', 5),\n", + " ('sadistic', 5),\n", + " ('start', 5),\n", + " ('gives', 5),\n", + " ('hotel', 5),\n", + " ('sleazy', 5),\n", + " ('son.', 5),\n", + " ('deranged', 5),\n", + " ('serving', 5),\n", + " ('morning', 5),\n", + " ('gun', 5),\n", + " ('latest', 5),\n", + " ('precinct', 5),\n", + " ('mob,', 5),\n", + " ('psychopath', 5),\n", + " ('las', 5),\n", + " ('vegas', 5),\n", + " ('attractive', 5),\n", + " ('mountain', 5),\n", + " ('bar', 5),\n", + " ('kidnaps', 5),\n", + " ('james', 5),\n", + " ('brutal', 5),\n", + " ('perfect', 5),\n", + " ('convicts', 5),\n", + " ('pull', 5),\n", + " ('crime,', 5),\n", + " ('professional', 5),\n", + " ('hand', 4),\n", + " ('key', 4),\n", + " ('witness', 4),\n", + " ('trial', 4),\n", + " ('roy', 4),\n", + " ('earle', 4),\n", + " ('criminals', 4),\n", + " ('respectable', 4),\n", + " ('actress', 4),\n", + " ('results.', 4),\n", + " ('involves', 4),\n", + " ('criminals,', 4),\n", + " ('quest', 4),\n", + " ('clashes', 4),\n", + " ('blackmailer', 4),\n", + " ('fears', 4),\n", + " ('amnesiac', 4),\n", + " ('crimes', 4),\n", + " ('targeted', 4),\n", + " ('passage', 4),\n", + " ('unsolved', 4),\n", + " ('kelly', 4),\n", + " ('rid', 4),\n", + " ('employer', 4),\n", + " ('romantic', 4),\n", + " ('lynch', 4),\n", + " ('greenwich', 4),\n", + " ('something', 4),\n", + " ('clerk', 4),\n", + " ('befriends', 4),\n", + " (\"father's\", 4),\n", + " ('actress.', 4),\n", + " ('law.', 4),\n", + " ('lets', 4),\n", + " ('housewife', 4),\n", + " ('home,', 4),\n", + " ('italy', 4),\n", + " ('obsessive', 4),\n", + " ('landlady', 4),\n", + " ('lodger', 4),\n", + " ('ripper.', 4),\n", + " ('asylum', 4),\n", + " ('sensuous', 4),\n", + " ('concert', 4),\n", + " ('naive', 4),\n", + " ('middle', 4),\n", + " ('engages', 4),\n", + " ('blame', 4),\n", + " ('killed,', 4),\n", + " ('spanish', 4),\n", + " ('engineer', 4),\n", + " ('canadian', 4),\n", + " ('justice', 4),\n", + " ('wealth,', 4),\n", + " ('appears', 4),\n", + " ('racket', 4),\n", + " ('helped', 4),\n", + " ('entertainment', 4),\n", + " ('hall', 4),\n", + " ('f.b.i.', 4),\n", + " ('taxi', 4),\n", + " ('picks', 4),\n", + " ('amid', 4),\n", + " ('estranged', 4),\n", + " ('aid', 4),\n", + " ('daughter.', 4),\n", + " ('mrs.', 4),\n", + " ('2', 4),\n", + " ('painting', 4),\n", + " ('patient', 4),\n", + " ('detective,', 4),\n", + " ('discovering', 4),\n", + " ('fatal', 4),\n", + " ('untimely', 4),\n", + " ('dream', 4),\n", + " ('over,', 4),\n", + " ('seen', 4),\n", + " ('love.', 4),\n", + " ('breaks', 4),\n", + " ('past.', 4),\n", + " ('unfaithful', 4),\n", + " (\"eddie's\", 4),\n", + " ('nightmare.', 4),\n", + " ('scientists', 4),\n", + " ('never', 4),\n", + " ('happened.', 4),\n", + " ('convince', 4),\n", + " ('tom', 4),\n", + " ('leaving', 4),\n", + " ('impossible.', 4),\n", + " ('loan', 4),\n", + " ('tricks', 4),\n", + " ('expose', 4),\n", + " ('inheritance', 4),\n", + " ('rare', 4),\n", + " (\"detective's\", 4),\n", + " ('compromised', 4),\n", + " ('position', 4),\n", + " ('blake', 4),\n", + " ('south', 4),\n", + " ('america.', 4),\n", + " ('claim', 4),\n", + " ('cassin', 4),\n", + " ('taylor', 4),\n", + " ('identity,', 4),\n", + " ('haunted', 4),\n", + " ('wartime', 4),\n", + " ('shady', 4),\n", + " ('past,', 4),\n", + " ('share', 4),\n", + " ('dollar', 4),\n", + " ('psychotic', 4),\n", + " ('adulterous', 4),\n", + " ('discover', 4),\n", + " ('hits', 4),\n", + " ('collins', 4),\n", + " ('buddy', 4),\n", + " ('fiancée', 4),\n", + " ('suspicious', 4),\n", + " ('apparently', 4),\n", + " ('soldier', 4),\n", + " ('receive', 4),\n", + " ('highway', 4),\n", + " ('nevada', 4),\n", + " ('revenge.', 4),\n", + " ('ride', 4),\n", + " ('(barry', 4),\n", + " ('numbers', 4),\n", + " ('wrong', 4),\n", + " ('hollywood', 4),\n", + " ('left', 4),\n", + " ('leaves', 4),\n", + " ('offer', 4),\n", + " ('devilish', 4),\n", + " ('insinuates', 4),\n", + " ('cops.', 4),\n", + " ('east', 4),\n", + " ('london,', 4),\n", + " ('mentalist', 4),\n", + " ('lies', 4),\n", + " ('gas', 4),\n", + " ('crosses,', 4),\n", + " ('entire', 4),\n", + " ('adoptive', 4),\n", + " ('nasty', 4),\n", + " ('operation', 4),\n", + " ('located', 4),\n", + " ('room,', 4),\n", + " ('rancher', 4),\n", + " ('terrible', 4),\n", + " ('teen', 4),\n", + " ('cheating', 4),\n", + " ('gagin', 4),\n", + " ('intent', 4),\n", + " ('lands', 4),\n", + " ('valuable', 4),\n", + " ('day', 4),\n", + " ('larry', 4),\n", + " ('disappears.', 4),\n", + " ('infiltrates', 4),\n", + " ('life,', 4),\n", + " ('coast', 4),\n", + " ('suffering', 4),\n", + " ('psychology', 4),\n", + " ('paul', 4),\n", + " ('police,', 4),\n", + " ('plot.', 4),\n", + " ('fighter', 4),\n", + " ('fired', 4),\n", + " ('chicago', 4),\n", + " ('told', 4),\n", + " ('law', 4),\n", + " ('sentenced', 4),\n", + " ('acquires', 4),\n", + " ('means', 4),\n", + " ('down,', 4),\n", + " ('entangled', 4),\n", + " ('settle', 4),\n", + " ('stay', 4),\n", + " ('mental', 4),\n", + " ('olivia', 4),\n", + " ('opens', 4),\n", + " ('invalid', 4),\n", + " ('counterfeiting', 4),\n", + " ('trail', 4),\n", + " ('owned', 4),\n", + " ('stalks', 4),\n", + " ('political', 4),\n", + " ('friends', 4),\n", + " ('schemes', 4),\n", + " ('pursues', 4),\n", + " ('court.', 4),\n", + " ('southern', 4),\n", + " ('dangerously', 4),\n", + " ('prompting', 4),\n", + " ('sheriff', 4),\n", + " ('willing', 4),\n", + " ('betrayal.', 4),\n", + " ('morton', 4),\n", + " ('exchange', 4),\n", + " ('infiltrate', 4),\n", + " ('use', 4),\n", + " ('employee', 4),\n", + " ('quickly', 4),\n", + " ('desperately', 4),\n", + " ('manager', 4),\n", + " ('client,', 4),\n", + " ('asks', 4),\n", + " ('doomed', 4),\n", + " ('hood', 4),\n", + " ('hold', 4),\n", + " ('scene', 4),\n", + " ('heat', 4),\n", + " ('susan', 4),\n", + " ('luck', 4),\n", + " ('duty', 4),\n", + " ...]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desc = film_noir_df['desc']\n", + "descriptions = []\n", + "for description in desc:\n", + " if description.endswith(\"»\"):\n", + " description = description[:description.find(\"... See full\")]\n", + " descriptions.append(description)\n", + "\n", + " \n", + " \n", + "frequencies = {}\n", + "for description in descriptions:\n", + " for word in description.split(\" \"):\n", + " if word.lower() in frequencies:\n", + " frequencies[word.lower()] += 1\n", + " else:\n", + " if word.lower() not in stop_w:\n", + " frequencies[word.lower()] = 1\n", + "frequencies = sorted(frequencies.items(),key=lambda item:item[1],reverse=True)\n", + "frequencies" + ] + }, + { + "cell_type": "markdown", + "id": "7a12a0c3", + "metadata": {}, + "source": [ + "By completing the exercise now you are able to see the results from both methods are similar, and both ways of retrieving and displaying the frequencies are equally useful. Moreover, the results reveal the thematic patterns of the Film Noir genre." + ] + }, + { + "cell_type": "markdown", + "id": "8a19ab59", + "metadata": {}, + "source": [ + "### There are no solutions to Q6, as it was a free-style question, although it was slightly guided" + ] + }, + { + "cell_type": "markdown", + "id": "cbe1811d", + "metadata": {}, + "source": [ + "### There are no solutions to Q7, as it was a free-style question, especially because it was unguided" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Group 3/.ipynb_checkpoints/Tutorial & Active Learning Notebook-checkpoint.ipynb b/Group 3/.ipynb_checkpoints/Tutorial & Active Learning Notebook-checkpoint.ipynb new file mode 100644 index 0000000..f446e8a --- /dev/null +++ b/Group 3/.ipynb_checkpoints/Tutorial & Active Learning Notebook-checkpoint.ipynb @@ -0,0 +1,1585 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dd5165c8", + "metadata": {}, + "source": [ + "# Tutorial & Active Learning Notebook with the dataset\n", + "## \"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)\n", + "\n", + "\n", + "\n", + "\n", + "The dataset provides information about more than 1,000 Film Noir films from 1940 to 2003, including their title, genre, year, runtime, rating, description, votes, director, and stars. \n", + "\n", + " Note: The variable 'Rating' is based on contemporary ratings of the Film-Noir movies. This is to mean that the Ratings are views held by a contemporary audience, and most times not held by the audience stemming from the time these movies were produced.\n", + "\n", + "Have you ever heard of the term 'Film Noir'? Did you know this genre has long been regarded as one of cinema's most intriguing styles that defined post-war American cinematography? Did you know that this genre developed iconic cinematic motifs and tropes that inspire filmmakers in this day and age? \n", + "\n", + "The above mentioned reasons is why this Notebook (containing both the tutorial and the active learning exercises)\n", + "was created. For the tutorial, expect to be guided through the process of how to import the dataset and clean it. For the active learning exercises, you can expect the following structure: 1) the question, and 2) an introduction to the exercise, which is meant to motivate you, as the reader to answer the particular question.\n", + "The answers can be checked with the answer sheet file found at https://github.com/catalina255/film_noir_exploratory_analysis/blob/706454f178eba82cee913cbe7a8a45916f1549fb/Solutions%20-%20Tutorial%20&%20Active%20Learning%20Notebook%20.ipynb. " + ] + }, + { + "cell_type": "markdown", + "id": "b10f3d8e", + "metadata": {}, + "source": [ + "# Tutorial\n", + "As was mentioned before, you will be guided through the process of how to do everything which you need in order to complete the active learning exercises later on. " + ] + }, + { + "cell_type": "markdown", + "id": "0e330e53", + "metadata": {}, + "source": [ + "### Step 1: Download the data \n", + "You can download the data from the following GitHub repository:\n", + "https://github.com/catalina255/film_noir_exploratory_analysis\n", + "\n", + "Then, download the file named 'IMDB_noir_1000.csv'. " + ] + }, + { + "cell_type": "markdown", + "id": "feaa64f7", + "metadata": {}, + "source": [ + "#### Overview of required packages\n", + "This is an overview of the libraries which are required to work with the daya you just downloaded. \n", + "- The Pandas library\n", + "- The Seaborn library\n", + "- The NumPy library\n", + "- The Matplotlib library\n", + "\n", + "Do not be alarmed for now, it will be stated what to import when it is necessary. " + ] + }, + { + "cell_type": "markdown", + "id": "d4835d73", + "metadata": {}, + "source": [ + "### Step 2: loading the data" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "23b02272", + "metadata": {}, + "outputs": [], + "source": [ + "# In order to use the Pandas library, this first needs to be imported\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "a9409687", + "metadata": {}, + "source": [ + "To load the data, you specify the filepath as an argument to the pd.read_csv() function. \n", + "- Note: the filepath to the 'IMDB_noir_1000.csv' file is located in relation to where you store this Notebook.\n", + "\n", + "You assign this to a variable with a descriptive name, like we did with 'film_noir_df' and show the DataFrame by calling the variable name." + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "47808558", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1353Who'll Stop the RainAction, Crime, Drama1978126 min6.7A Vietnam veteran gets conned into helping an ...3003NaNNaN
1354The Wings of the DoveDrama, Romance1997102 min7.1An impoverished woman who has been forced to c...12580NaNNaN
1355WitnessDrama, Romance, Thriller1985112 min7.4When a young Amish boy is sole witness to a mu...97031NaNNaN
1356The ZodiacCrime, Drama, Horror2005158 min5.3An elusive serial killer known as the Zodiac t...7333NaNNaN
1357ZodiacCrime, Drama, Mystery2007157 min7.7Between 1968 and 1983, a San Francisco cartoon...546602NaNNaN
\n", + "

1358 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1353 Who'll Stop the Rain Action, Crime, Drama \n", + "1354 The Wings of the Dove Drama, Romance \n", + "1355 Witness Drama, Romance, Thriller \n", + "1356 The Zodiac Crime, Drama, Horror \n", + "1357 Zodiac Crime, Drama, Mystery \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1353 1978 126 min 6.7 \n", + "1354 1997 102 min 7.1 \n", + "1355 1985 112 min 7.4 \n", + "1356 2005 158 min 5.3 \n", + "1357 2007 157 min 7.7 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1353 A Vietnam veteran gets conned into helping an ... 3003 \n", + "1354 An impoverished woman who has been forced to c... 12580 \n", + "1355 When a young Amish boy is sole witness to a mu... 97031 \n", + "1356 An elusive serial killer known as the Zodiac t... 7333 \n", + "1357 Between 1968 and 1983, a San Francisco cartoon... 546602 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1353 NaN NaN \n", + "1354 NaN NaN \n", + "1355 NaN NaN \n", + "1356 NaN NaN \n", + "1357 NaN NaN \n", + "\n", + "[1358 rows x 9 columns]" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = pd.read_csv('data/IMDB_noir_1000.csv')\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "4e3ab1c3", + "metadata": {}, + "source": [ + "# Step 3: Cleaning the data" + ] + }, + { + "cell_type": "markdown", + "id": "7c6f519e", + "metadata": {}, + "source": [ + "Take a minute to look at the DataFrame. The DataFrame consists of 1358 rows by 9 columns. Ask yourself 'What stands out?'. The second thing that might stand out to you is that that there are a lot of values that correspond to NaN, while the second thing might be is that for the variable 'Stars', there is at least one Star named '|'. \n", + "\n", + "It is possible to drop the values that correspond to NaN, by simply running the following code. " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "id": "a84de0ba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1246 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1246 rows x 9 columns]" + ] + }, + "execution_count": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df.dropna()\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "b457369e", + "metadata": {}, + "source": [ + "Take another minute to look at the DataFrame. The DataFrame consists of 1246 rows by 9 columns. You can clearly see that we lost data due to dropping the NaN values.\n", + "But that is not the end. You still need to find a way to take care of the Stars that are named '|'. This can be achieved by running the following bit of code:" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "id": "63058fd5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8,201Raoul WalshGeorge Raft
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716Stuart HeislerAlbert Dekker
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1199 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "5 They Drive by Night Crime, Drama, Film-Noir \n", + "6 Among the Living Drama, Film-Noir, Mystery \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "5 1940 95 min 7.2 \n", + "6 1941 67 min 6.4 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "5 When one of two truck-driving brothers loses a... 8,201 \n", + "6 A mentally-unstable man who has been kept in i... 716 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "5 Raoul Walsh George Raft \n", + "6 Stuart Heisler Albert Dekker \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1199 rows x 9 columns]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df[(film_noir_df.Stars != '|')]\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "5f78003d", + "metadata": {}, + "source": [ + "Now, take yet another minute to look at the DataFrame. The DataFrame consists of 1199 rows by 9 columns. Our solution to take care of the Stars named '|', is not the only solution. Another more time-consuming solution is to check all the movies from which the Stars are named '|', and manually insert the names of the Stars in the csv file. " + ] + }, + { + "cell_type": "markdown", + "id": "a513fbd1", + "metadata": {}, + "source": [ + "# Step 4: Displaying the dataset, and providing basic statistics about the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c9ac9de4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
347Take One False StepCrime, Drama, Mystery194994 min6.4During a conference-trip to L.A., an academic ...3,649Fritz LangLouis Hayward
783BluebeardCrime, Horror, Thriller194472 min5.9In Paris, an artist hires portrait models, and...5,026Robert RossenJohn Garfield
134Nobody Lives ForeverCrime, Drama, Film-Noir1946100 min7.0Ex-GI Nick Blake gets involved in a scheme to ...597Jules DassinLucille Ball
78DetourCrime, Drama, Film-Noir194568 min7.3Chance events trap hitchhiking nightclub piani...1,191Edwin L. MarinGeorge Raft
1273Kill Me AgainAction, Crime, Drama198994 min6.3A young detective becomes involved with a beau...41,235Roger DonaldsonKevin Costner
592The Big KnifeCrime, Drama, Film-Noir1955111 min6.8Hollywood actor Charles Castle is pressured by...1,120Allan DwanJohn Payne
855DetourCrime, Drama, Film-Noir194568 min7.3Chance events trap hitchhiking nightclub piani...3,576George CukorRonald Colman
23CrossroadsCrime, Drama, Film-Noir194283 min6.7An amnesiac French diplomat is blackmailed for...332Robert SiodmakNancy Kelly
271PitfallCrime, Film-Noir, Thriller194886 min7.1Married insurance adjuster John Forbes falls f...693Ted TetzlaffGeorge Raft
186The GangsterCrime, Drama, Film-Noir194784 min6.5Shubunka (Barry Sulivan) is a cynical gangster...5,586Curtis BernhardtJoan Crawford
\n", + "
" + ], + "text/plain": [ + " Title Genre Year \\\n", + "347 Take One False Step Crime, Drama, Mystery 1949 \n", + "783 Bluebeard Crime, Horror, Thriller 1944 \n", + "134 Nobody Lives Forever Crime, Drama, Film-Noir 1946 \n", + "78 Detour Crime, Drama, Film-Noir 1945 \n", + "1273 Kill Me Again Action, Crime, Drama 1989 \n", + "592 The Big Knife Crime, Drama, Film-Noir 1955 \n", + "855 Detour Crime, Drama, Film-Noir 1945 \n", + "23 Crossroads Crime, Drama, Film-Noir 1942 \n", + "271 Pitfall Crime, Film-Noir, Thriller 1948 \n", + "186 The Gangster Crime, Drama, Film-Noir 1947 \n", + "\n", + " Runtime Rating desc \\\n", + "347 94 min 6.4 During a conference-trip to L.A., an academic ... \n", + "783 72 min 5.9 In Paris, an artist hires portrait models, and... \n", + "134 100 min 7.0 Ex-GI Nick Blake gets involved in a scheme to ... \n", + "78 68 min 7.3 Chance events trap hitchhiking nightclub piani... \n", + "1273 94 min 6.3 A young detective becomes involved with a beau... \n", + "592 111 min 6.8 Hollywood actor Charles Castle is pressured by... \n", + "855 68 min 7.3 Chance events trap hitchhiking nightclub piani... \n", + "23 83 min 6.7 An amnesiac French diplomat is blackmailed for... \n", + "271 86 min 7.1 Married insurance adjuster John Forbes falls f... \n", + "186 84 min 6.5 Shubunka (Barry Sulivan) is a cynical gangster... \n", + "\n", + " Votes Director Stars \n", + "347 3,649 Fritz Lang Louis Hayward \n", + "783 5,026 Robert Rossen John Garfield \n", + "134 597 Jules Dassin Lucille Ball \n", + "78 1,191 Edwin L. Marin George Raft \n", + "1273 41,235 Roger Donaldson Kevin Costner \n", + "592 1,120 Allan Dwan John Payne \n", + "855 3,576 George Cukor Ronald Colman \n", + "23 332 Robert Siodmak Nancy Kelly \n", + "271 693 Ted Tetzlaff George Raft \n", + "186 5,586 Curtis Bernhardt Joan Crawford " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The following code gives a random sample of the dataset. \n", + "film_noir_df.sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "0350dd89", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 1199 entries, 2 to 1321\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Title 1199 non-null object \n", + " 1 Genre 1199 non-null object \n", + " 2 Year 1199 non-null object \n", + " 3 Runtime 1199 non-null object \n", + " 4 Rating 1199 non-null float64\n", + " 5 desc 1199 non-null object \n", + " 6 Votes 1199 non-null object \n", + " 7 Director 1199 non-null object \n", + " 8 Stars 1199 non-null object \n", + "dtypes: float64(1), object(8)\n", + "memory usage: 93.7+ KB\n" + ] + } + ], + "source": [ + "# The folloing code provides some information about the data. \n", + "film_noir_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "eadcf1fa", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
count11991199119911991199.0000001199119911991199
unique8461076884NaN860793394446
topFearCrime, Drama, Film-Noir194782 minNaNJim Fletcher, waking up from a coma, finds he ...296Anthony MannHumphrey Bogart
freq354912343NaN242727
meanNaNNaNNaNNaN6.728023NaNNaNNaNNaN
stdNaNNaNNaNNaN0.634760NaNNaNNaNNaN
minNaNNaNNaNNaN3.600000NaNNaNNaNNaN
25%NaNNaNNaNNaN6.300000NaNNaNNaNNaN
50%NaNNaNNaNNaN6.700000NaNNaNNaNNaN
75%NaNNaNNaNNaN7.200000NaNNaNNaNNaN
maxNaNNaNNaNNaN8.800000NaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " Title Genre Year Runtime Rating \\\n", + "count 1199 1199 1199 1199 1199.000000 \n", + "unique 846 107 68 84 NaN \n", + "top Fear Crime, Drama, Film-Noir 1947 82 min NaN \n", + "freq 3 549 123 43 NaN \n", + "mean NaN NaN NaN NaN 6.728023 \n", + "std NaN NaN NaN NaN 0.634760 \n", + "min NaN NaN NaN NaN 3.600000 \n", + "25% NaN NaN NaN NaN 6.300000 \n", + "50% NaN NaN NaN NaN 6.700000 \n", + "75% NaN NaN NaN NaN 7.200000 \n", + "max NaN NaN NaN NaN 8.800000 \n", + "\n", + " desc Votes Director \\\n", + "count 1199 1199 1199 \n", + "unique 860 793 394 \n", + "top Jim Fletcher, waking up from a coma, finds he ... 296 Anthony Mann \n", + "freq 2 4 27 \n", + "mean NaN NaN NaN \n", + "std NaN NaN NaN \n", + "min NaN NaN NaN \n", + "25% NaN NaN NaN \n", + "50% NaN NaN NaN \n", + "75% NaN NaN NaN \n", + "max NaN NaN NaN \n", + "\n", + " Stars \n", + "count 1199 \n", + "unique 446 \n", + "top Humphrey Bogart \n", + "freq 27 \n", + "mean NaN \n", + "std NaN \n", + "min NaN \n", + "25% NaN \n", + "50% NaN \n", + "75% NaN \n", + "max NaN " + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The following code provides descriptive statistics for all the column in the data.\n", + "film_noir_df.describe(include = 'all')" + ] + }, + { + "cell_type": "markdown", + "id": "54a21934", + "metadata": {}, + "source": [ + "# Start of Active Learning Exercises" + ] + }, + { + "cell_type": "markdown", + "id": "90c35164", + "metadata": {}, + "source": [ + "## Exercise 1" + ] + }, + { + "cell_type": "markdown", + "id": "2eae14f2", + "metadata": {}, + "source": [ + "In this exercise and the following exercise, you will explore what sort of subgenres were most popular throughout the Film Noir age. Take note of how there are many combinations of genres, ranging from 1 to 3. \n", + "\n", + "We are trying to demonstrate that the genre of crime is quite common within Film-Noir, with this exercise. Additionally, with this exercise, we aim to observe the tendencies of Film-Noir viewers, in terms of which combinations of genre receives the most interest. In turn, this could prove helpful in determining people's future recommendations. \n", + "\n", + "In the first part of this exercise, answer the following question: Q1a) How many distinct entries are there of genre combinations?" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "f2daa01a", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q1a" + ] + }, + { + "cell_type": "markdown", + "id": "f7adcdbf", + "metadata": {}, + "source": [ + "The second part of this exercise continues where 1a left off. Q1b: Of those distinct entries, which are the 10 most popular genre combinations? " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c11d9ec5", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q1b" + ] + }, + { + "cell_type": "markdown", + "id": "686587d7", + "metadata": {}, + "source": [ + "## Exercise 2" + ] + }, + { + "cell_type": "markdown", + "id": "da1721f4", + "metadata": {}, + "source": [ + "As mentioned before, you will explore what sort of subgenres were popular throughout the Film Noir age. However, unlike in Exercise 1, you will now attempt to answer this question with the help of creating two additional variables. The first variable is the 'Score', which is created by multiplying 'Rating' with 'Votes'. The second variable is the 'Popularity Index', which is created by dividing the score by the number of distinct entries of genre. \n", + "\n", + "Essentially, we want to rate how popular IMDB rated Film-Noir movies through the application of the Popularity Index. Exploring this can reveal interesting patterns surrounding which combinations of genres receive the highest ratings. \n", + "\n", + "\n", + "Q2: Which subgenres were popular throughout the Film Noir time period using the variable 'Popularity Index'? Provide a column chart to help support your answer. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "006c4280", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q2" + ] + }, + { + "cell_type": "markdown", + "id": "dcea2467", + "metadata": {}, + "source": [ + "## Exercise 3\n", + "\n", + "In the following exercise, you will try to determine whether movies produced by several directors with a dominating presence were enjoyed by viewers. \n", + "\n", + "Q3a: Who are the directors with a dominating presence?\n", + "Q3b: Are the movies directed by those directors enjoyed by viewers?\n", + "\n", + "\n", + "The motivation behind both of these questions falls along the same lines, which is to see whether movies directed by the same select few people affects the enjoyment of those movies. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dc8114c9", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q3a" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2d01bed", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q3b" + ] + }, + { + "cell_type": "markdown", + "id": "c567bc88", + "metadata": {}, + "source": [ + "## Exercise 4\n", + "\n", + "In this exercise, you will look into what movie stars had the most succes during their Film Noir career. \n", + "\n", + "Q4: Which movie stars had the most success during their Film Noir career?\n", + "\n", + " Note: The variable 'Rating' is based on contemporary ratings of the Film-Noir movies. This is to mean that the Ratings are views held by a contemporary audience, and most times not held by the audience stemming from the time these movies were produced. \n", + "\n", + "The motivation for this exercise is using these results for future research, perhaps these movie stars were able to further their career due to their Film Noir career, or perhaps their career came to an end due to their Film Noir career. " + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "2be10f0a", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q4" + ] + }, + { + "cell_type": "markdown", + "id": "be4ee060", + "metadata": {}, + "source": [ + "## Exercise 5\n", + "In the next exercise, you are going to work with the short plot descriptions found in 'desc' column. The purpose is to observe the word frequency in the descriptions to see how well the words reflect the Film Noir genre. That being said, we are going to use two methods in order to see whether the results are the same. \n", + "\n", + "Q5a: In the first method you are asked to create a wordcloud visualisation for the most frequent used words in the 'desc' column. We suggest to clean the text of redundant suffixes, so first take a brief look at the corpus. Also, make sure to install the wordcloud and pillow packages to generate the wordcloud. \n", + "\n", + "Q5b: In the second method you are asked to manually extract the frequencies. We suggest to clean the text of redundant suffixes, so first take a brief look at the corpus. " + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "882f9326", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q5a" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "6ed47da8", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q5b" + ] + }, + { + "cell_type": "markdown", + "id": "a67ec4ad", + "metadata": {}, + "source": [ + "## Exercise 6: Free style\n", + "\n", + "If you haven't noticed by now, the dataset also contains movies from the Neo-Noir period, so an interesting analysis could consist of looking at different statistical changes from the initial release of this kind of movies and the revival of the genre later on in time. \n", + "\n", + "In this exercise, we encourage you to come up with your own question or questions which compares the Noir movies with the Neo-Noir movies, based on a particular variable. " + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "id": "b3a6d27b", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q6" + ] + }, + { + "cell_type": "markdown", + "id": "b8b56f16", + "metadata": {}, + "source": [ + "## Exercise 7: Free style" + ] + }, + { + "cell_type": "markdown", + "id": "3ada4ee5", + "metadata": {}, + "source": [ + "In this exercise, we encourage you to come up with your own question, or even questions, without guidance. Feel free to be as creative as possible. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e2a89cbc", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q7" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Group 3/Data Management Plan .pdf b/Group 3/Data Management Plan .pdf new file mode 100644 index 0000000..81799bc Binary files /dev/null and b/Group 3/Data Management Plan .pdf differ diff --git a/Group 3/README.md b/Group 3/README.md new file mode 100644 index 0000000..4e1d008 --- /dev/null +++ b/Group 3/README.md @@ -0,0 +1,4 @@ + Film Noir + +This repository is made to support the Film Noir project for the course Tools & Methods, group 3. +To access the website, clone the repository and you may access it from the local 'Website' folder by clicking index.html. diff --git a/Group 3/Solutions - Tutorial & Active Learning Notebook .ipynb b/Group 3/Solutions - Tutorial & Active Learning Notebook .ipynb new file mode 100644 index 0000000..0debde9 --- /dev/null +++ b/Group 3/Solutions - Tutorial & Active Learning Notebook .ipynb @@ -0,0 +1,3902 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "293c97c7", + "metadata": {}, + "source": [ + "# Solutions to Tutorial & Active Learning Notebook with the dataset\n", + "## \"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)\n", + "\n", + "\n", + "These solutions are meant to accompany the Tutorial Active Learning Notebook with the dataset\n", + "\"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)" + ] + }, + { + "cell_type": "markdown", + "id": "33c03398", + "metadata": {}, + "source": [ + "### The following was part of the tutorial, which will be repeated here for the purpose of consistency" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "be7d63fd", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3f37f7ce", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1353Who'll Stop the RainAction, Crime, Drama1978126 min6.7A Vietnam veteran gets conned into helping an ...3003NaNNaN
1354The Wings of the DoveDrama, Romance1997102 min7.1An impoverished woman who has been forced to c...12580NaNNaN
1355WitnessDrama, Romance, Thriller1985112 min7.4When a young Amish boy is sole witness to a mu...97031NaNNaN
1356The ZodiacCrime, Drama, Horror2005158 min5.3An elusive serial killer known as the Zodiac t...7333NaNNaN
1357ZodiacCrime, Drama, Mystery2007157 min7.7Between 1968 and 1983, a San Francisco cartoon...546602NaNNaN
\n", + "

1358 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1353 Who'll Stop the Rain Action, Crime, Drama \n", + "1354 The Wings of the Dove Drama, Romance \n", + "1355 Witness Drama, Romance, Thriller \n", + "1356 The Zodiac Crime, Drama, Horror \n", + "1357 Zodiac Crime, Drama, Mystery \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1353 1978 126 min 6.7 \n", + "1354 1997 102 min 7.1 \n", + "1355 1985 112 min 7.4 \n", + "1356 2005 158 min 5.3 \n", + "1357 2007 157 min 7.7 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1353 A Vietnam veteran gets conned into helping an ... 3003 \n", + "1354 An impoverished woman who has been forced to c... 12580 \n", + "1355 When a young Amish boy is sole witness to a mu... 97031 \n", + "1356 An elusive serial killer known as the Zodiac t... 7333 \n", + "1357 Between 1968 and 1983, a San Francisco cartoon... 546602 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1353 NaN NaN \n", + "1354 NaN NaN \n", + "1355 NaN NaN \n", + "1356 NaN NaN \n", + "1357 NaN NaN \n", + "\n", + "[1358 rows x 9 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = pd.read_csv('data/IMDB_noir_1000.csv')\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "792f2124", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1246 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1246 rows x 9 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df.dropna()\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "ebd3de33", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8,201Raoul WalshGeorge Raft
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716Stuart HeislerAlbert Dekker
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1199 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "5 They Drive by Night Crime, Drama, Film-Noir \n", + "6 Among the Living Drama, Film-Noir, Mystery \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "5 1940 95 min 7.2 \n", + "6 1941 67 min 6.4 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "5 When one of two truck-driving brothers loses a... 8,201 \n", + "6 A mentally-unstable man who has been kept in i... 716 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "5 Raoul Walsh George Raft \n", + "6 Stuart Heisler Albert Dekker \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1199 rows x 9 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df[(film_noir_df.Stars != '|')]\n", + "film_noir_df" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "6b06cb9c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
46The Curse of the Cat PeopleDrama, Horror, Mystery194470 min6.7The young, friendless daughter of Oliver and A...30,005George CukorCharles Boyer
49Double IndemnityCrime, Drama, Film-Noir1944107 min8.3A Los Angeles insurance representative lets an...3,655John BrahmLaird Cregar
1217Charley VarrickCrime, Drama, Thriller1973111 min7.5A man, his wife and their friend stage a blood...18,602Roger DonaldsonAlec Baldwin
973The Long WaitAdventure, Crime, Drama195494 min6.5An amnesiac finally learns his true identity.....1,696Hugo FregoneseJack Palance
665The Steel JungleCrime, Drama, Film-Noir195686 min5.7A power struggle emerges among convicts condem...4,862Robert WiseHarry Belafonte
1206The Black DahliaCrime, Drama, Mystery2006121 min5.6Two policemen see their personal and professio...8,574Dick RichardsRobert Mitchum
54LauraDrama, Film-Noir, Mystery194488 min7.9A police detective falls in love with the woma...5,136Robert SiodmakFranchot Tone
894He Ran All the WayCrime, Drama, Film-Noir195177 min7.0Nick and his partner Al stage a payroll holdup...748Nathan JuranRichard Conte
645Death of a ScoundrelCrime, Drama, Film-Noir1956119 min6.9The New York police investigates the murder of...159Joseph KaneRod Cameron
31MoontideCrime, Drama, Film-Noir194294 min6.8In California, Bobo and his mooching 'pal' Tin...545Jack HivelyBurgess Meredith
\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "46 The Curse of the Cat People Drama, Horror, Mystery \n", + "49 Double Indemnity Crime, Drama, Film-Noir \n", + "1217 Charley Varrick Crime, Drama, Thriller \n", + "973 The Long Wait Adventure, Crime, Drama \n", + "665 The Steel Jungle Crime, Drama, Film-Noir \n", + "1206 The Black Dahlia Crime, Drama, Mystery \n", + "54 Laura Drama, Film-Noir, Mystery \n", + "894 He Ran All the Way Crime, Drama, Film-Noir \n", + "645 Death of a Scoundrel Crime, Drama, Film-Noir \n", + "31 Moontide Crime, Drama, Film-Noir \n", + "\n", + " Year Runtime Rating \\\n", + "46 1944 70 min 6.7 \n", + "49 1944 107 min 8.3 \n", + "1217 1973 111 min 7.5 \n", + "973 1954 94 min 6.5 \n", + "665 1956 86 min 5.7 \n", + "1206 2006 121 min 5.6 \n", + "54 1944 88 min 7.9 \n", + "894 1951 77 min 7.0 \n", + "645 1956 119 min 6.9 \n", + "31 1942 94 min 6.8 \n", + "\n", + " desc Votes \\\n", + "46 The young, friendless daughter of Oliver and A... 30,005 \n", + "49 A Los Angeles insurance representative lets an... 3,655 \n", + "1217 A man, his wife and their friend stage a blood... 18,602 \n", + "973 An amnesiac finally learns his true identity..... 1,696 \n", + "665 A power struggle emerges among convicts condem... 4,862 \n", + "1206 Two policemen see their personal and professio... 8,574 \n", + "54 A police detective falls in love with the woma... 5,136 \n", + "894 Nick and his partner Al stage a payroll holdup... 748 \n", + "645 The New York police investigates the murder of... 159 \n", + "31 In California, Bobo and his mooching 'pal' Tin... 545 \n", + "\n", + " Director Stars \n", + "46 George Cukor Charles Boyer \n", + "49 John Brahm Laird Cregar \n", + "1217 Roger Donaldson Alec Baldwin \n", + "973 Hugo Fregonese Jack Palance \n", + "665 Robert Wise Harry Belafonte \n", + "1206 Dick Richards Robert Mitchum \n", + "54 Robert Siodmak Franchot Tone \n", + "894 Nathan Juran Richard Conte \n", + "645 Joseph Kane Rod Cameron \n", + "31 Jack Hively Burgess Meredith " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + " film_noir_df.sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9f7b1545", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 1199 entries, 2 to 1321\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Title 1199 non-null object \n", + " 1 Genre 1199 non-null object \n", + " 2 Year 1199 non-null object \n", + " 3 Runtime 1199 non-null object \n", + " 4 Rating 1199 non-null float64\n", + " 5 desc 1199 non-null object \n", + " 6 Votes 1199 non-null object \n", + " 7 Director 1199 non-null object \n", + " 8 Stars 1199 non-null object \n", + "dtypes: float64(1), object(8)\n", + "memory usage: 93.7+ KB\n" + ] + } + ], + "source": [ + "film_noir_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "02212fde", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
count11991199119911991199.0000001199119911991199
unique8461076884NaN860793394446
topFearCrime, Drama, Film-Noir194782 minNaNJim Fletcher, waking up from a coma, finds he ...296Anthony MannHumphrey Bogart
freq354912343NaN242727
meanNaNNaNNaNNaN6.728023NaNNaNNaNNaN
stdNaNNaNNaNNaN0.634760NaNNaNNaNNaN
minNaNNaNNaNNaN3.600000NaNNaNNaNNaN
25%NaNNaNNaNNaN6.300000NaNNaNNaNNaN
50%NaNNaNNaNNaN6.700000NaNNaNNaNNaN
75%NaNNaNNaNNaN7.200000NaNNaNNaNNaN
maxNaNNaNNaNNaN8.800000NaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " Title Genre Year Runtime Rating \\\n", + "count 1199 1199 1199 1199 1199.000000 \n", + "unique 846 107 68 84 NaN \n", + "top Fear Crime, Drama, Film-Noir 1947 82 min NaN \n", + "freq 3 549 123 43 NaN \n", + "mean NaN NaN NaN NaN 6.728023 \n", + "std NaN NaN NaN NaN 0.634760 \n", + "min NaN NaN NaN NaN 3.600000 \n", + "25% NaN NaN NaN NaN 6.300000 \n", + "50% NaN NaN NaN NaN 6.700000 \n", + "75% NaN NaN NaN NaN 7.200000 \n", + "max NaN NaN NaN NaN 8.800000 \n", + "\n", + " desc Votes Director \\\n", + "count 1199 1199 1199 \n", + "unique 860 793 394 \n", + "top Jim Fletcher, waking up from a coma, finds he ... 296 Anthony Mann \n", + "freq 2 4 27 \n", + "mean NaN NaN NaN \n", + "std NaN NaN NaN \n", + "min NaN NaN NaN \n", + "25% NaN NaN NaN \n", + "50% NaN NaN NaN \n", + "75% NaN NaN NaN \n", + "max NaN NaN NaN \n", + "\n", + " Stars \n", + "count 1199 \n", + "unique 446 \n", + "top Humphrey Bogart \n", + "freq 27 \n", + "mean NaN \n", + "std NaN \n", + "min NaN \n", + "25% NaN \n", + "50% NaN \n", + "75% NaN \n", + "max NaN " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df.describe(include = 'all')" + ] + }, + { + "cell_type": "markdown", + "id": "e2f6c301", + "metadata": {}, + "source": [ + "# The solutions to the Active Learning Exercises start here" + ] + }, + { + "cell_type": "markdown", + "id": "6965f92c", + "metadata": {}, + "source": [ + "### Solution to Q1a" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "eccc46a0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "107" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "distinct_genre_noir = len(pd.unique(film_noir_df['Genre']))\n", + "distinct_genre_noir" + ] + }, + { + "cell_type": "markdown", + "id": "ca4cb65f", + "metadata": {}, + "source": [ + "### Solution to Q1b" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f225ba25", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCount
36Crime, Drama, Film-Noir549
4Action, Crime, Drama38
62Drama, Film-Noir38
67Drama, Film-Noir, Thriller37
40Crime, Drama, Mystery36
42Crime, Drama, Thriller36
64Drama, Film-Noir, Mystery35
45Crime, Film-Noir, Mystery32
34Crime, Drama28
48Crime, Film-Noir, Thriller27
\n", + "
" + ], + "text/plain": [ + " Genre Count\n", + "36 Crime, Drama, Film-Noir 549\n", + "4 Action, Crime, Drama 38\n", + "62 Drama, Film-Noir 38\n", + "67 Drama, Film-Noir, Thriller 37\n", + "40 Crime, Drama, Mystery 36\n", + "42 Crime, Drama, Thriller 36\n", + "64 Drama, Film-Noir, Mystery 35\n", + "45 Crime, Film-Noir, Mystery 32\n", + "34 Crime, Drama 28\n", + "48 Crime, Film-Noir, Thriller 27" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_genre = film_noir_df.groupby(['Genre'])['Genre'].count().reset_index(name = 'Count').sort_values(['Count'], ascending = False)\n", + "sub_genre.head(10)" + ] + }, + { + "cell_type": "markdown", + "id": "7b8d411d", + "metadata": {}, + "source": [ + "By completing this exercise, you know now how to produce the distinct entries of genres within the dataset. There are a total of 110 distinct entries. Additionally, you know how to retrieve the 10 most popular genre combinations of those distinct entries, which are listed below: \n", + "1. Crime, Drama, Film-Noir\t\n", + "2. Action, Crime, Drama\t\n", + "3. Drama, Film-Noir\n", + "4. Drama, Film-Noir, Thriller\n", + "5. Crime, Drama, Mystery\t\n", + "6. Crime, Drama, Thriller\t\n", + "7. Drama, Film-Noir, Mystery\n", + "8. Crime, Film-Noir, Mystery\n", + "9. Crime, Drama\n", + "10. Crime, Film-Noir, Thriller" + ] + }, + { + "cell_type": "markdown", + "id": "0eec500b", + "metadata": {}, + "source": [ + "### Solution to Q2" + ] + }, + { + "cell_type": "markdown", + "id": "0c83c0f7", + "metadata": {}, + "source": [ + "In this exercise, the formula will be used: the index of popularity of a film = rating x votes, which is then divided by the number of genres. To find out what sort of subgenres were popular throughout the Film Noir age, we made two additional variables. The first variable is the 'Score', which is created by multiplying 'Rating' with 'Votes'. The second variable is the 'Popularity Index', which is created by dividing the score by the number of distinct entries of genre. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "1048f297", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3056949452.py:1: FutureWarning: The default value of regex will change from True to False in a future version.\n", + " film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')\n", + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3056949452.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')\n" + ] + } + ], + "source": [ + "film_noir_df['Votes'] = film_noir_df['Votes'].str.replace(r'[^\\w\\s]+', '')" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "fcdcfaa1", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\1090731777.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df[['Votes']] = film_noir_df[['Votes']].astype(float)\n" + ] + } + ], + "source": [ + "film_noir_df[['Votes']] = film_noir_df[['Votes']].astype(float)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "3926bdcb", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\gebruiker 1\\AppData\\Local\\Temp\\ipykernel_15456\\3217846436.py:1: SettingWithCopyWarning: \n", + "A value is trying to be set on a copy of a slice from a DataFrame.\n", + "Try using .loc[row_indexer,col_indexer] = value instead\n", + "\n", + "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", + " film_noir_df['index'] = film_noir_df[['Rating','Votes']].apply(lambda x:x['Rating']*x['Votes'],axis=1)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStarsindex
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13469.0William WylerBette Davis102364.4
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138097.0Alfred HitchcockLaurence Olivier1118585.7
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4268.0Boris IngsterPeter Lorre29022.4
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8201.0Raoul WalshGeorge Raft59047.2
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716.0Stuart HeislerAlbert Dekker4582.4
\n", + "
" + ], + "text/plain": [ + " Title Genre Year \\\n", + "2 The Letter Crime, Drama, Film-Noir 1940 \n", + "3 Rebecca Drama, Film-Noir, Mystery 1940 \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir 1940 \n", + "5 They Drive by Night Crime, Drama, Film-Noir 1940 \n", + "6 Among the Living Drama, Film-Noir, Mystery 1941 \n", + "\n", + " Runtime Rating desc \\\n", + "2 95 min 7.6 The wife of a rubber plantation administrator ... \n", + "3 130 min 8.1 A self-conscious woman juggles adjusting to he... \n", + "4 64 min 6.8 An aspiring reporter is the key witness at the... \n", + "5 95 min 7.2 When one of two truck-driving brothers loses a... \n", + "6 67 min 6.4 A mentally-unstable man who has been kept in i... \n", + "\n", + " Votes Director Stars index \n", + "2 13469.0 William Wyler Bette Davis 102364.4 \n", + "3 138097.0 Alfred Hitchcock Laurence Olivier 1118585.7 \n", + "4 4268.0 Boris Ingster Peter Lorre 29022.4 \n", + "5 8201.0 Raoul Walsh George Raft 59047.2 \n", + "6 716.0 Stuart Heisler Albert Dekker 4582.4 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df['index'] = film_noir_df[['Rating','Votes']].apply(lambda x:x['Rating']*x['Votes'],axis=1)\n", + "film_noir_df.head(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "ecdf1523", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreScore
0Action, Adventure, Comedy20358.4
1Action, Adventure, Crime10211307.9
2Action, Adventure, Drama67133.0
3Action, Comedy, Crime1253.7
4Action, Crime, Drama21943607.2
5Action, Crime, Film-Noir66562.9
6Action, Crime, Thriller928085.3
7Action, Drama, Film-Noir86388.4
8Action, Drama, Romance202316.9
9Action, Drama, Sci-Fi30893.4
\n", + "
" + ], + "text/plain": [ + " Genre Score\n", + "0 Action, Adventure, Comedy 20358.4\n", + "1 Action, Adventure, Crime 10211307.9\n", + "2 Action, Adventure, Drama 67133.0\n", + "3 Action, Comedy, Crime 1253.7\n", + "4 Action, Crime, Drama 21943607.2\n", + "5 Action, Crime, Film-Noir 66562.9\n", + "6 Action, Crime, Thriller 928085.3\n", + "7 Action, Drama, Film-Noir 86388.4\n", + "8 Action, Drama, Romance 202316.9\n", + "9 Action, Drama, Sci-Fi 30893.4" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Score is made by adding all the Votes together by Genre. \n", + "score_sum = film_noir_df.groupby('Genre')['index'].sum().reset_index(name = 'Score')\n", + "score_sum.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "b0ef623b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCount
36Crime, Drama, Film-Noir549
4Action, Crime, Drama38
62Drama, Film-Noir38
67Drama, Film-Noir, Thriller37
40Crime, Drama, Mystery36
42Crime, Drama, Thriller36
64Drama, Film-Noir, Mystery35
45Crime, Film-Noir, Mystery32
34Crime, Drama28
48Crime, Film-Noir, Thriller27
\n", + "
" + ], + "text/plain": [ + " Genre Count\n", + "36 Crime, Drama, Film-Noir 549\n", + "4 Action, Crime, Drama 38\n", + "62 Drama, Film-Noir 38\n", + "67 Drama, Film-Noir, Thriller 37\n", + "40 Crime, Drama, Mystery 36\n", + "42 Crime, Drama, Thriller 36\n", + "64 Drama, Film-Noir, Mystery 35\n", + "45 Crime, Film-Noir, Mystery 32\n", + "34 Crime, Drama 28\n", + "48 Crime, Film-Noir, Thriller 27" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "sub_genre = film_noir_df.groupby(['Genre'])['Genre'].count().reset_index(name = 'Count').sort_values(['Count'], ascending = False)\n", + "sub_genre.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "2b6ce0b0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCountScorePopularity_Index
0Action, Adventure, Comedy120358.420358.40
1Action, Adventure, Crime910211307.91134589.77
2Action, Adventure, Drama467133.016783.25
3Action, Comedy, Crime11253.71253.70
4Action, Crime, Drama3821943607.2577463.35
...............
102Mystery, Romance, Thriller149102.849102.80
103Mystery, Thriller9649929.372214.37
104Romance, Thriller199097.899097.80
105Romance, Western6286896.947816.15
106Western962988.36998.70
\n", + "

107 rows × 4 columns

\n", + "
" + ], + "text/plain": [ + " Genre Count Score \\\n", + "0 Action, Adventure, Comedy 1 20358.4 \n", + "1 Action, Adventure, Crime 9 10211307.9 \n", + "2 Action, Adventure, Drama 4 67133.0 \n", + "3 Action, Comedy, Crime 1 1253.7 \n", + "4 Action, Crime, Drama 38 21943607.2 \n", + ".. ... ... ... \n", + "102 Mystery, Romance, Thriller 1 49102.8 \n", + "103 Mystery, Thriller 9 649929.3 \n", + "104 Romance, Thriller 1 99097.8 \n", + "105 Romance, Western 6 286896.9 \n", + "106 Western 9 62988.3 \n", + "\n", + " Popularity_Index \n", + "0 20358.40 \n", + "1 1134589.77 \n", + "2 16783.25 \n", + "3 1253.70 \n", + "4 577463.35 \n", + ".. ... \n", + "102 49102.80 \n", + "103 72214.37 \n", + "104 99097.80 \n", + "105 47816.15 \n", + "106 6998.70 \n", + "\n", + "[107 rows x 4 columns]" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = score_sum.set_index('Genre').combine_first(sub_genre.set_index('Genre')).reset_index()\n", + "df['Popularity_Index'] = round((df['Score']/df['Count']),2)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "ed214020", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
GenreCountScorePopularity_Index
52Crime, Mystery, Romance18427737.08427737.00
82Drama, Sci-Fi, Thriller14552758.64552758.60
88Fantasy, Mystery, Sci-Fi11828742.41828742.40
55Crime, Thriller45072501.41268125.35
1Action, Adventure, Crime910211307.91134589.77
42Crime, Drama, Thriller3630435650.0845434.72
4Action, Crime, Drama3821943607.2577463.35
49Crime, Horror, Mystery21150192.9575096.45
50Crime, Horror, Thriller2963051.1481525.55
40Crime, Drama, Mystery3616859983.7468332.88
41Crime, Drama, Romance145922509.5423036.39
34Crime, Drama288400263.8300009.42
56Drama143745969.2267569.23
90Film-Noir, Horror, Thriller2469127.6234563.80
67Drama, Film-Noir, Thriller378005838.7216374.02
97Horror, Mystery1213011.5213011.50
8Action, Drama, Romance1202316.9202316.90
6Action, Crime, Thriller5928085.3185617.06
35Crime, Drama, Fantasy5835020.9167004.18
95Film-Noir, Thriller101616739.0161673.90
\n", + "
" + ], + "text/plain": [ + " Genre Count Score \\\n", + "52 Crime, Mystery, Romance 1 8427737.0 \n", + "82 Drama, Sci-Fi, Thriller 1 4552758.6 \n", + "88 Fantasy, Mystery, Sci-Fi 1 1828742.4 \n", + "55 Crime, Thriller 4 5072501.4 \n", + "1 Action, Adventure, Crime 9 10211307.9 \n", + "42 Crime, Drama, Thriller 36 30435650.0 \n", + "4 Action, Crime, Drama 38 21943607.2 \n", + "49 Crime, Horror, Mystery 2 1150192.9 \n", + "50 Crime, Horror, Thriller 2 963051.1 \n", + "40 Crime, Drama, Mystery 36 16859983.7 \n", + "41 Crime, Drama, Romance 14 5922509.5 \n", + "34 Crime, Drama 28 8400263.8 \n", + "56 Drama 14 3745969.2 \n", + "90 Film-Noir, Horror, Thriller 2 469127.6 \n", + "67 Drama, Film-Noir, Thriller 37 8005838.7 \n", + "97 Horror, Mystery 1 213011.5 \n", + "8 Action, Drama, Romance 1 202316.9 \n", + "6 Action, Crime, Thriller 5 928085.3 \n", + "35 Crime, Drama, Fantasy 5 835020.9 \n", + "95 Film-Noir, Thriller 10 1616739.0 \n", + "\n", + " Popularity_Index \n", + "52 8427737.00 \n", + "82 4552758.60 \n", + "88 1828742.40 \n", + "55 1268125.35 \n", + "1 1134589.77 \n", + "42 845434.72 \n", + "4 577463.35 \n", + "49 575096.45 \n", + "50 481525.55 \n", + "40 468332.88 \n", + "41 423036.39 \n", + "34 300009.42 \n", + "56 267569.23 \n", + "90 234563.80 \n", + "67 216374.02 \n", + "97 213011.50 \n", + "8 202316.90 \n", + "6 185617.06 \n", + "35 167004.18 \n", + "95 161673.90 " + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df.sort_values(by='Popularity_Index', ascending=False)\n", + "for_visual = df.head(20)\n", + "for_visual" + ] + }, + { + "cell_type": "markdown", + "id": "af2b5f6d", + "metadata": {}, + "source": [ + "#### Import alert" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "72849600", + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment the below code if you haven't installed matplotlib yet\n", + "\n", + "#pip install matplotlib" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "a079ff70", + "metadata": {}, + "outputs": [], + "source": [ + "# Uncomment the below code if you haven't installed the current version of seaborn yet\n", + "\n", + "#pip install seaborn==0.11.0" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "69b9621e", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from pandas import Series, DataFrame\n", + "%matplotlib inline\n", + "import seaborn as sns\n", + "import matplotlib.pyplot as pltb" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "fbe96cbd", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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gTPPPJPnn3+ejTbaiK233ppjjz2WDTfckA996EMcdNBB/P73v2fQoHJz4phRB0HQJ6+++ipjxoxh3LhxrLTSSuy7777ccsst7LnnngBMmDCBWbNm8cILLwDwqU99isUWW4wRI0aw5ZZbcuedd+b+rAsvvJANNtiAsWPHMmPGDO6///45rzUryd4YNmwYEyZM4Oqrr+bBBx/kzTffZL311sv12RtttBErrrgigwYNYsyYMTzxxBM8+OCDrLLKKqy++upIYo899pjz/uuvv55jjz2WMWPGsMUWW/Daa6/x1FNPMXToUE477TS22WYbDjjgAFZdddXc3783YkYdBEGfNGzUzbSrDNUIO2sNP5PEQgst1GP53y6O+PHHH+e4447jrrvuYplllmHvvffu8b5hw4blkve//uu/OOaYY1hrrbXYZ599crUBWHTRRef8P3jwYN56662236eBmXHJJZew5pprzvPavffey/Dhw3n22Wdzf35fxIw6CIJkNt98c8477zzA7bsjRoxgySWXBOCKK67gtddeY9asWUyaNIkNN9yQlVdemfvvv5/XX3+dF154gRtuuGGePl988UWGDRvGUkstxT/+8Q+uueaaXLIsscQSvPTSS3Oef/CDH+Tpp5/m/PPPZ7fddiv1Pddaay0ef/xx/vKXvwBwwQUXzHntox/9KCeddNKcm9bUqVMBePLJJzn++OOZOnUq11xzDXfccUcpGSDnjFrSocB/AQbcC+xjZpF8IAi6TU1qnB555JHss88+jB49mqFDh3LOOefMeW2jjTZiu+2246mnnuLwww9nhRVWAGDnnXdm9OjRrL766owdO3aePtdff33Gjh3LOuusw/ve9z4222yzXLLsv//+bLvttiy//PLceOONcz5r2rRpLLPMMqW+55AhQzj11FPZbrvtGDFiBOPHj+e+++4D4PDDD+eQQw5h9OjRmBmjRo3iqquuYt999+W4445jhRVW4IwzzmDvvffmrrvuYsiQIYXl6Le4raT3ALcAa5vZq5IuBH5vZmf31mbcuHHWIy6yv3jNmpx8QVA3HnjgAd7//vcPtBi5OfLII1l88cX52te+NqBybL/99hx66KFstdVWAypHb7T7XSVNMbNx7d6f1/SxELCYpIWAoUA1hpcgCIIKef7551ljjTVYbLHFaquki9Cv6cPM/irpOOAp4FXgejO7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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for_visual.plot.bar(x='Genre', y='Popularity_Index', color=\"red\",title='Top 20')\n", + "pltb.show()" + ] + }, + { + "cell_type": "markdown", + "id": "2a240e8e", + "metadata": {}, + "source": [ + "It is not difficult to see that the most popular type is \"Crime, Mystery, Romance\", followed by \"Drama, Sci-Fi, Thriller\" and \"Fantasy, Mystery, Sci-Fi\t\". However, these top-3 types have only one film. To be precise, the success of a film does not represent the success of a genre. \n", + "From this point of view, the most popular film noir type is \"Crime, Drama, Thriller\".\n", + "Taken together, Crime and Drama seem to be the most well-received genres." + ] + }, + { + "cell_type": "markdown", + "id": "dc36a6f5", + "metadata": {}, + "source": [ + "### Solution to Q3a" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "ccec903a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Director
Anthony Mann27
Fritz Lang25
Robert Siodmak20
Alfred Hitchcock19
Don Siegel18
Robert Wise16
Joseph H. Lewis15
Phil Karlson14
Otto Preminger14
Henry Hathaway13
\n", + "
" + ], + "text/plain": [ + " Director\n", + "Anthony Mann 27\n", + "Fritz Lang 25\n", + "Robert Siodmak 20\n", + "Alfred Hitchcock 19\n", + "Don Siegel 18\n", + "Robert Wise 16\n", + "Joseph H. Lewis 15\n", + "Phil Karlson 14\n", + "Otto Preminger 14\n", + "Henry Hathaway 13" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "most_freq_directors = film_noir_df['Director'].value_counts().to_frame()\n", + "most_freq_directors.head(10)" + ] + }, + { + "cell_type": "markdown", + "id": "cfc6b65f", + "metadata": {}, + "source": [ + "### Solution to Q3b" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "79ff96fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RatingVotesindex
Director
Anthony Mann180.0116606.0754324.9
Fritz Lang165.2225367.01517324.7
Robert Siodmak135.4121965.0846361.2
Alfred Hitchcock130.82331819.015703724.4
Don Siegel124.9158977.01095342.1
Robert Wise105.4153326.01087370.6
Joseph H. Lewis100.753984.0354194.5
Phil Karlson93.740347.0272411.8
Otto Preminger93.1166436.01115311.7
Henry Hathaway89.596051.0678194.5
\n", + "
" + ], + "text/plain": [ + " Rating Votes index\n", + "Director \n", + "Anthony Mann 180.0 116606.0 754324.9\n", + "Fritz Lang 165.2 225367.0 1517324.7\n", + "Robert Siodmak 135.4 121965.0 846361.2\n", + "Alfred Hitchcock 130.8 2331819.0 15703724.4\n", + "Don Siegel 124.9 158977.0 1095342.1\n", + "Robert Wise 105.4 153326.0 1087370.6\n", + "Joseph H. Lewis 100.7 53984.0 354194.5\n", + "Phil Karlson 93.7 40347.0 272411.8\n", + "Otto Preminger 93.1 166436.0 1115311.7\n", + "Henry Hathaway 89.5 96051.0 678194.5" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "directors_noir = film_noir_df.groupby('Director').sum()\n", + "directors_noir_pop = directors_noir.nlargest(10, 'Rating')\n", + "directors_noir_pop" + ] + }, + { + "cell_type": "markdown", + "id": "fc1d693a", + "metadata": {}, + "source": [ + "As is visible, the 10 directors with the most dominating presence are the following: \n", + "1. Anthony Mann who directed 27 movies\n", + "2. Fritz Lang who directed 25 movies\n", + "3. Robert Siodmak who directed 20 movies\n", + "4. Alfred Hitchcock who directed 19 movies\n", + "5. Don Siegel who directed 18 movies\n", + "6. Robert Wise who directed 16 movies\n", + "7. Joseph H. Lewis who directed 15 movies\n", + "8. Phil Karlson and Otto Preminger who both directed 14 movies, each\n", + "10. Henry Hathaway who directed 13 movies.\n", + "\n", + "As is visible, the movies directed by those directors are enjoyed by the viewers. The ordering of the 'Rating' is the same as the list produced in Q3a. \n", + "\n", + "1. Anthony Mann gained a total rating of 180\n", + "2. Fritz Lang gained a total rating of 165,2\n", + "3. Robert Siodmak gained a total rating of 135,4\n", + "4. Alfred Hitchcock gained a total rating of 130,8\n", + "5. Don Siegel gained a total rating of 124,9\n", + "6. Robert Wise gained a total rating of 105,4\n", + "7. Joseph H. Lewis gained a total rating of 100,7\n", + "8. Phil Karlson gained a total rating of 93,7\n", + "9. Otto Preminger gained a total rating of 93,1\n", + "10. Henry Hathaway gained a total rating of 89,5" + ] + }, + { + "cell_type": "markdown", + "id": "358bbdaa", + "metadata": {}, + "source": [ + "### Solution to Q4" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "f82581d7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
RatingVotesindex
Stars
Humphrey Bogart181.91502272.010366051.2
Edward G. Robinson125.797388.0645711.1
Robert Mitchum122.6318835.02122339.3
Joan Crawford122.5140740.01009009.9
Barbara Stanwyck119.386870.0578627.4
Ida Lupino111.857265.0418859.2
Glenn Ford93.083316.0581342.6
George Raft91.320982.0149333.0
Alan Ladd89.455487.0385819.5
John Payne89.027650.0192780.6
\n", + "
" + ], + "text/plain": [ + " Rating Votes index\n", + "Stars \n", + "Humphrey Bogart 181.9 1502272.0 10366051.2\n", + "Edward G. Robinson 125.7 97388.0 645711.1\n", + "Robert Mitchum 122.6 318835.0 2122339.3\n", + "Joan Crawford 122.5 140740.0 1009009.9\n", + "Barbara Stanwyck 119.3 86870.0 578627.4\n", + "Ida Lupino 111.8 57265.0 418859.2\n", + "Glenn Ford 93.0 83316.0 581342.6\n", + "George Raft 91.3 20982.0 149333.0\n", + "Alan Ladd 89.4 55487.0 385819.5\n", + "John Payne 89.0 27650.0 192780.6" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "stars_noir = film_noir_df.groupby('Stars').sum()\n", + "stars_noir_pop = stars_noir.nlargest(10, 'Rating')\n", + "stars_noir_pop" + ] + }, + { + "cell_type": "markdown", + "id": "57893d90", + "metadata": {}, + "source": [ + "By completing this exercise you now know how to produce code to see which movie stars had the most success during their Film-Noir career. The following is a list of the 10 movie stars who had the most success based on their Rating:\n", + "1. Humphrey Bogart\n", + "2. Edward G. Robinson\n", + "3. Robert Mitchum\n", + "4. Joan Crawford\n", + "5. Barbara Stanwyck\n", + "6. Ida Lupino\n", + "7. Glenn Ford\n", + "8. George Raft\n", + "9. Alan Ladd\n", + "10. John Payne" + ] + }, + { + "cell_type": "markdown", + "id": "c978595f", + "metadata": {}, + "source": [ + "### Solution to Q5a" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "a5c389cf", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: wordcloud in c:\\users\\gebruiker 1\\appdata\\roaming\\python\\python39\\site-packages (1.8.2.2)\n", + "Requirement already satisfied: pillow in c:\\programdata\\anaconda3\\lib\\site-packages (9.0.1)\n", + "Requirement already satisfied: matplotlib in c:\\programdata\\anaconda3\\lib\\site-packages (from wordcloud) (3.5.1)\n", + "Requirement already satisfied: numpy>=1.6.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from wordcloud) (1.21.5)\n", + "Requirement already satisfied: python-dateutil>=2.7 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (2.8.2)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (1.3.2)\n", + "Requirement already satisfied: cycler>=0.10 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (0.11.0)\n", + "Requirement already satisfied: pyparsing>=2.2.1 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (3.0.4)\n", + "Requirement already satisfied: fonttools>=4.22.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (4.25.0)\n", + "Requirement already satisfied: packaging>=20.0 in c:\\programdata\\anaconda3\\lib\\site-packages (from matplotlib->wordcloud) (21.3)\n", + "Requirement already satisfied: six>=1.5 in c:\\programdata\\anaconda3\\lib\\site-packages (from python-dateutil>=2.7->matplotlib->wordcloud) (1.16.0)\n" + ] + } + ], + "source": [ + "!pip install wordcloud pillow\n", + "from wordcloud import WordCloud, STOPWORDS\n", + "from PIL import Image\n", + "\n", + "# clean 'See full summary' suffix\n", + "# removesuffix doesn't work\n", + "desc = film_noir_df['desc']\n", + "descriptions = []\n", + "for description in desc:\n", + " if description.endswith(\"»\"):\n", + " description = description[:description.find(\"... See full\")]\n", + " descriptions.append(description)\n", + "\n", + "\n", + "stop_w=set(STOPWORDS)\n", + "word_cloud= WordCloud(stopwords = stop_w).generate(str(descriptions))\n", + "img= word_cloud.to_image()\n", + "img.show()" + ] + }, + { + "cell_type": "markdown", + "id": "17999037", + "metadata": {}, + "source": [ + "### Solution to Q5b" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "b62b28f7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('murder', 168),\n", + " ('man', 150),\n", + " ('woman', 113),\n", + " ('police', 106),\n", + " ('new', 98),\n", + " ('young', 88),\n", + " ('wife', 87),\n", + " ('', 78),\n", + " ('detective', 74),\n", + " ('finds', 65),\n", + " ('one', 63),\n", + " ('two', 57),\n", + " ('find', 57),\n", + " ('becomes', 53),\n", + " ('falls', 51),\n", + " ('him.', 50),\n", + " ('gets', 49),\n", + " ('tries', 48),\n", + " ('prison', 46),\n", + " ('love', 46),\n", + " ('husband', 45),\n", + " ('american', 45),\n", + " ('help', 44),\n", + " ('crime', 43),\n", + " ('life', 43),\n", + " ('soon', 40),\n", + " ('beautiful', 39),\n", + " ('killer', 39),\n", + " ('former', 37),\n", + " ('los', 37),\n", + " ('murder.', 37),\n", + " ('private', 36),\n", + " ('takes', 36),\n", + " ('york', 36),\n", + " ('criminal', 36),\n", + " ('goes', 35),\n", + " ('involved', 35),\n", + " ('girl', 34),\n", + " ('war', 34),\n", + " ('old', 33),\n", + " ('family', 33),\n", + " ('accused', 32),\n", + " ('rich', 31),\n", + " ('hired', 30),\n", + " ('will', 30),\n", + " ('home', 30),\n", + " ('bank', 30),\n", + " ('local', 30),\n", + " ('murdered', 30),\n", + " ('kill', 30),\n", + " ('gangster', 28),\n", + " ('married', 28),\n", + " ('comes', 28),\n", + " ('plans', 28),\n", + " ('mysterious', 28),\n", + " ('robbery', 27),\n", + " ('wealthy', 27),\n", + " ('small', 27),\n", + " ('town', 27),\n", + " ('back', 27),\n", + " ('plan', 26),\n", + " ('must', 26),\n", + " ('may', 25),\n", + " ('boss', 25),\n", + " ('her.', 25),\n", + " ('meets', 25),\n", + " ('gang', 25),\n", + " ('doctor', 24),\n", + " ('go', 24),\n", + " ('take', 24),\n", + " ('murders', 24),\n", + " ('order', 24),\n", + " ('agent', 24),\n", + " ('night', 24),\n", + " ('attorney', 24),\n", + " ('prove', 23),\n", + " ('case', 23),\n", + " ('past', 23),\n", + " ('joe', 23),\n", + " ('friend', 23),\n", + " ('san', 22),\n", + " ('begins', 22),\n", + " ('killing', 22),\n", + " ('murder,', 22),\n", + " ('revenge', 22),\n", + " ('death', 21),\n", + " ('kills', 21),\n", + " ('story', 21),\n", + " ('angeles', 21),\n", + " ('writer', 21),\n", + " ('three', 20),\n", + " ('suspect', 20),\n", + " ('owner', 20),\n", + " ('returns', 20),\n", + " ('girlfriend', 20),\n", + " ('cop', 20),\n", + " ('killed', 20),\n", + " ('years', 19),\n", + " ('singer', 19),\n", + " ('female', 19),\n", + " ('men', 19),\n", + " ('sister', 19),\n", + " ('complex', 19),\n", + " ('city', 19),\n", + " ('innocent', 19),\n", + " ('even', 19),\n", + " ('father', 19),\n", + " ('newspaper', 19),\n", + " ('next', 19),\n", + " ('homicide', 19),\n", + " ('lawyer', 19),\n", + " ('discovers', 18),\n", + " ('trying', 18),\n", + " ('marries', 18),\n", + " ('nazi', 18),\n", + " ('now', 18),\n", + " ('try', 18),\n", + " ('make', 18),\n", + " ('john', 18),\n", + " ('train', 18),\n", + " ('corrupt', 18),\n", + " ('escapes', 17),\n", + " ('money', 17),\n", + " ('committed', 17),\n", + " ('found', 17),\n", + " ('husband,', 17),\n", + " ('job', 17),\n", + " ('investigates', 17),\n", + " ('seeks', 17),\n", + " ('murdered.', 16),\n", + " ('escape', 16),\n", + " ('mexico', 16),\n", + " ('son', 16),\n", + " ('decides', 16),\n", + " ('small-town', 16),\n", + " ('leads', 16),\n", + " ('attempt', 16),\n", + " ('boy', 16),\n", + " ('veteran', 16),\n", + " ('mob', 16),\n", + " ('secret', 15),\n", + " ('affair', 15),\n", + " ('real', 15),\n", + " ('working', 15),\n", + " ('them.', 15),\n", + " ('dead', 15),\n", + " ('world', 15),\n", + " ('ruthless', 15),\n", + " ('tough', 15),\n", + " ('framed', 15),\n", + " ('investigator', 15),\n", + " ('investigation', 15),\n", + " ('nick', 15),\n", + " ('brother', 15),\n", + " ('run', 15),\n", + " ('escaped', 15),\n", + " ('group', 14),\n", + " ('starts', 14),\n", + " ('become', 14),\n", + " ('insurance', 14),\n", + " ('stumbles', 14),\n", + " ('helps', 14),\n", + " ('relationship', 14),\n", + " ('nightclub', 14),\n", + " ('ends', 14),\n", + " ('convicted', 14),\n", + " ('murdering', 14),\n", + " ('falling', 14),\n", + " ('district', 14),\n", + " ('johnny', 14),\n", + " ('mobster', 14),\n", + " ('attempts', 14),\n", + " ('violent', 14),\n", + " ('drug', 14),\n", + " ('car', 14),\n", + " (\"wife's\", 13),\n", + " ('reporter', 13),\n", + " ('released', 13),\n", + " ('house', 13),\n", + " ('lover', 13),\n", + " ('french', 13),\n", + " ('ring', 13),\n", + " ('ship', 13),\n", + " ('mystery', 13),\n", + " ('missing', 13),\n", + " ('hires', 13),\n", + " ('suspects', 13),\n", + " ('turns', 13),\n", + " ('whose', 13),\n", + " ('vicious', 13),\n", + " ('wife.', 13),\n", + " ('agents', 13),\n", + " ('marrying', 13),\n", + " ('marry', 13),\n", + " ('determined', 13),\n", + " ('bill', 13),\n", + " ('caught', 13),\n", + " ('sentence', 13),\n", + " ('town,', 13),\n", + " ('detectives', 13),\n", + " ('killer.', 13),\n", + " ('crime.', 13),\n", + " ('undercover', 13),\n", + " ('believes', 13),\n", + " ('company', 12),\n", + " ('francisco', 12),\n", + " ('woman.', 12),\n", + " ('fugitive', 12),\n", + " ('husband.', 12),\n", + " ('identity', 12),\n", + " ('search', 12),\n", + " ('artist', 12),\n", + " ('daughter', 12),\n", + " ('career', 12),\n", + " ('web', 12),\n", + " ('dancer', 12),\n", + " ('double', 12),\n", + " ('business', 12),\n", + " ('widow', 12),\n", + " ('dangerous', 12),\n", + " (\"woman's\", 12),\n", + " ('sets', 12),\n", + " ('turned', 12),\n", + " ('us', 12),\n", + " ('ex-con', 12),\n", + " ('california', 11),\n", + " ('wants', 11),\n", + " ('looking', 11),\n", + " ('track', 11),\n", + " ('spy', 11),\n", + " ('clear', 11),\n", + " ('him,', 11),\n", + " ('hide', 11),\n", + " ('philip', 11),\n", + " ('scheme', 11),\n", + " ('accidentally', 11),\n", + " ('deadly', 11),\n", + " ('plot', 11),\n", + " ('girlfriend,', 11),\n", + " ('younger', 11),\n", + " ('threatens', 11),\n", + " ('her,', 11),\n", + " ('army', 11),\n", + " ('war,', 11),\n", + " ('woman,', 11),\n", + " ('driver', 11),\n", + " ('love,', 11),\n", + " ('around', 11),\n", + " ('house,', 11),\n", + " ('victim', 11),\n", + " ('convict', 11),\n", + " ('british', 11),\n", + " ('tells', 11),\n", + " ('frank', 11),\n", + " ('jim', 11),\n", + " ('claims', 10),\n", + " ('prison,', 10),\n", + " ('george', 10),\n", + " ('partner', 10),\n", + " ('getting', 10),\n", + " ('amnesia', 10),\n", + " ('people', 10),\n", + " ('suspected', 10),\n", + " ('suspicion', 10),\n", + " ('stop', 10),\n", + " ('marlowe', 10),\n", + " ('secretary', 10),\n", + " ('lieutenant', 10),\n", + " ('part', 10),\n", + " ('ring.', 10),\n", + " ('captain', 10),\n", + " ('witnesses', 10),\n", + " ('solve', 10),\n", + " ('desperate', 10),\n", + " ('successful', 10),\n", + " ('-', 10),\n", + " ('plots', 10),\n", + " ('film', 10),\n", + " ('gambler', 10),\n", + " ('angeles,', 10),\n", + " ('fall', 10),\n", + " ('women', 10),\n", + " ('believe', 10),\n", + " ('investigating', 10),\n", + " ('chief', 10),\n", + " ('away', 10),\n", + " ('circumstances', 10),\n", + " ('bookie', 10),\n", + " ('commits', 10),\n", + " ('blonde', 10),\n", + " ('hides', 10),\n", + " ('finally', 10),\n", + " ('club', 10),\n", + " ('stolen', 10),\n", + " ('communist', 10),\n", + " ('trouble', 9),\n", + " ('railroad', 9),\n", + " ('time', 9),\n", + " ('older', 9),\n", + " ('events', 9),\n", + " ('blackmail', 9),\n", + " ('murderous', 9),\n", + " ('murderer', 9),\n", + " ('chance', 9),\n", + " ('con', 9),\n", + " ('arrives', 9),\n", + " ('unscrupulous', 9),\n", + " ('murdered,', 9),\n", + " ('socialite', 9),\n", + " ('fellow', 9),\n", + " ('mother', 9),\n", + " ('money.', 9),\n", + " ('small-time', 9),\n", + " ('thinks', 9),\n", + " ('serial', 9),\n", + " ('act', 9),\n", + " ('fight', 9),\n", + " ('uncle', 9),\n", + " ('mike', 9),\n", + " ('seeking', 9),\n", + " ('investigate', 9),\n", + " ('heist.', 9),\n", + " ('lovely', 9),\n", + " ('clues', 9),\n", + " ('wounded', 9),\n", + " ('catches', 9),\n", + " ('jewel', 9),\n", + " ('hiding', 9),\n", + " ('boxer', 9),\n", + " ('state', 9),\n", + " ('honest', 9),\n", + " ('u.s.', 9),\n", + " ('forces', 9),\n", + " ('la', 9),\n", + " ('without', 9),\n", + " ('heist', 9),\n", + " ('syndicate', 9),\n", + " ('wrongly', 9),\n", + " ('name', 9),\n", + " ('korean', 9),\n", + " ('first', 8),\n", + " ('charged', 8),\n", + " ('causes', 8),\n", + " ('makes', 8),\n", + " ('inspector', 8),\n", + " ('body', 8),\n", + " ('pianist', 8),\n", + " ('professor', 8),\n", + " ('ww2,', 8),\n", + " ('york,', 8),\n", + " ('stranger', 8),\n", + " ('head', 8),\n", + " ('stage', 8),\n", + " ('pilot', 8),\n", + " ('steve', 8),\n", + " ('authorities', 8),\n", + " ('seems', 8),\n", + " ('witnessed', 8),\n", + " ('travels', 8),\n", + " ('estate', 8),\n", + " ('true', 8),\n", + " ('innocence.', 8),\n", + " ('dreams', 8),\n", + " ('apartment', 8),\n", + " ('boyfriend', 8),\n", + " ('leading', 8),\n", + " ('paroled', 8),\n", + " ('crooked', 8),\n", + " ('fbi', 8),\n", + " ('come', 8),\n", + " ('robber', 8),\n", + " ('best', 8),\n", + " ('top', 8),\n", + " ('treasury', 8),\n", + " ('officer', 8),\n", + " ('defends', 8),\n", + " ('parole', 8),\n", + " ('teenage', 8),\n", + " ('shot', 8),\n", + " ('sees', 8),\n", + " ('kidnapped', 8),\n", + " ('learns', 8),\n", + " ('living', 8),\n", + " ('shoots', 7),\n", + " ('himself.', 7),\n", + " ('brothers', 7),\n", + " ('work', 7),\n", + " ('thief', 7),\n", + " ('gambling', 7),\n", + " ('charming', 7),\n", + " ('cynical', 7),\n", + " ('memory.', 7),\n", + " ('follows', 7),\n", + " ('know', 7),\n", + " ('dead,', 7),\n", + " ('nurse', 7),\n", + " ('seemingly', 7),\n", + " ('interest', 7),\n", + " ('manipulative', 7),\n", + " ('moves', 7),\n", + " ('england', 7),\n", + " ('onto', 7),\n", + " ('it.', 7),\n", + " ('drawn', 7),\n", + " ('leader', 7),\n", + " ('lives', 7),\n", + " ('trapped', 7),\n", + " ('orleans', 7),\n", + " ('disappearance', 7),\n", + " ('gold', 7),\n", + " ('prevent', 7),\n", + " ('well', 7),\n", + " ('everyone', 7),\n", + " ('widow,', 7),\n", + " ('uses', 7),\n", + " ('recover', 7),\n", + " ('got', 7),\n", + " ('series', 7),\n", + " ('eye', 7),\n", + " ('might', 7),\n", + " ('however,', 7),\n", + " ('casino', 7),\n", + " ('lover.', 7),\n", + " ('named', 7),\n", + " ('department', 7),\n", + " ('rob', 7),\n", + " ('hit', 7),\n", + " ('much', 7),\n", + " ('information', 7),\n", + " ('made', 7),\n", + " ('commit', 7),\n", + " ('wife,', 7),\n", + " ('trip', 7),\n", + " ('middle-aged', 7),\n", + " ('defense', 7),\n", + " ('editor', 7),\n", + " ('investigate.', 7),\n", + " ('works', 7),\n", + " ('runs', 7),\n", + " ('despite', 7),\n", + " ('couple', 7),\n", + " ('big', 7),\n", + " ('led', 7),\n", + " ('set', 7),\n", + " ('streets', 7),\n", + " ('steals', 7),\n", + " ('keep', 7),\n", + " ('death.', 7),\n", + " ('cause', 7),\n", + " ('mysteriously', 7),\n", + " ('later', 7),\n", + " ('man,', 7),\n", + " ('case.', 7),\n", + " ('break', 7),\n", + " ('psychopathic', 7),\n", + " ('pursued', 7),\n", + " ('still', 7),\n", + " ('jane', 7),\n", + " ('sent', 7),\n", + " ('lead', 7),\n", + " ('friend,', 7),\n", + " ('evidence', 7),\n", + " ('smuggling', 7),\n", + " ('&', 7),\n", + " ('early', 7),\n", + " ('using', 7),\n", + " ('way', 7),\n", + " ('four', 7),\n", + " ('cops', 7),\n", + " ('underworld', 7),\n", + " ('neighbor', 7),\n", + " ('robbery.', 7),\n", + " ('forced', 7),\n", + " ('testify', 7),\n", + " ('steal', 7),\n", + " ('last', 7),\n", + " (\"owner's\", 6),\n", + " ('twin', 6),\n", + " ('foster', 6),\n", + " ('notorious', 6),\n", + " ('claire', 6),\n", + " ('frankie', 6),\n", + " ('model', 6),\n", + " ('look', 6),\n", + " ('disturbed', 6),\n", + " ('rather', 6),\n", + " ('guy', 6),\n", + " ('heiress', 6),\n", + " ('planning', 6),\n", + " ('struggles', 6),\n", + " ('turn', 6),\n", + " ('lost', 6),\n", + " ('german', 6),\n", + " ('expert', 6),\n", + " ('assassin', 6),\n", + " ('marked', 6),\n", + " ('foreign', 6),\n", + " ('radio', 6),\n", + " ('girl,', 6),\n", + " ('uncovers', 6),\n", + " ('vacation', 6),\n", + " ('there.', 6),\n", + " ('femme', 6),\n", + " ('realizes', 6),\n", + " ('usa', 6),\n", + " ('aunt', 6),\n", + " ('happy', 6),\n", + " ('although', 6),\n", + " ('jack', 6),\n", + " ('ii', 6),\n", + " ('major', 6),\n", + " ('deceit.', 6),\n", + " ('harry', 6),\n", + " ('prisoner', 6),\n", + " ('meet', 6),\n", + " ('civil', 6),\n", + " ('ann', 6),\n", + " ('across', 6),\n", + " ('al', 6),\n", + " ('death,', 6),\n", + " ('musician', 6),\n", + " ('strange', 6),\n", + " ('alcoholic', 6),\n", + " ('keeps', 6),\n", + " ('hours', 6),\n", + " ('based', 6),\n", + " ('persuades', 6),\n", + " ('fortune', 6),\n", + " ('psychiatrist', 6),\n", + " ('fate', 6),\n", + " ('cab', 6),\n", + " ('\"the', 6),\n", + " ('involvement', 6),\n", + " ('nuclear', 6),\n", + " ('public', 6),\n", + " ('apartment.', 6),\n", + " ('aided', 6),\n", + " ('composer', 6),\n", + " ('martin', 6),\n", + " ('worth', 6),\n", + " ('suicide', 6),\n", + " ('boyfriend.', 6),\n", + " ('shadowy', 6),\n", + " ('assumes', 6),\n", + " ('involving', 6),\n", + " ('poor', 6),\n", + " ('serious', 6),\n", + " ('upon', 6),\n", + " ('together', 6),\n", + " ('bride', 6),\n", + " ('job,', 6),\n", + " ('publisher', 6),\n", + " ('innocence', 6),\n", + " ('flee', 6),\n", + " ('beach', 6),\n", + " ('vic', 6),\n", + " ('angeles.', 6),\n", + " ('boss.', 6),\n", + " ('newly', 6),\n", + " ('hunter', 6),\n", + " ('want', 6),\n", + " ('man.', 6),\n", + " ('ranch', 6),\n", + " ('eve', 6),\n", + " ('rival', 6),\n", + " ('plant', 6),\n", + " ('hostage', 6),\n", + " ('client', 6),\n", + " ('visit', 6),\n", + " ('day,', 6),\n", + " ('dan', 6),\n", + " ('taken', 6),\n", + " ('businessman', 6),\n", + " ('coast,', 6),\n", + " ('taking', 6),\n", + " ('killers.', 6),\n", + " ('searching', 6),\n", + " ('star', 6),\n", + " ('mexican', 6),\n", + " ('federal', 6),\n", + " ('suspect.', 6),\n", + " ('eventually', 6),\n", + " ('camp', 6),\n", + " ('hero', 6),\n", + " ('visiting', 6),\n", + " ('gangsters', 6),\n", + " ('protect', 6),\n", + " ('responsible', 6),\n", + " ('creates', 6),\n", + " ('robbing', 6),\n", + " ('inmate', 6),\n", + " ('payroll', 6),\n", + " (\"husband's\", 6),\n", + " ('romance', 6),\n", + " ('reluctant', 6),\n", + " (\"brother's\", 6),\n", + " ('assigned', 6),\n", + " ('policeman', 6),\n", + " ('dollars', 6),\n", + " ('mechanic', 6),\n", + " ('prosecutor', 6),\n", + " ('catch', 6),\n", + " ('factory', 6),\n", + " ('helping', 6),\n", + " ('falsely', 5),\n", + " ('following', 5),\n", + " ('charles', 5),\n", + " ('gorgeous', 5),\n", + " ('decide', 5),\n", + " ('put', 5),\n", + " ('offers', 5),\n", + " ('whether', 5),\n", + " ('person', 5),\n", + " ('blackmailed', 5),\n", + " ('agents.', 5),\n", + " ('attention', 5),\n", + " ('accident,', 5),\n", + " ('truth', 5),\n", + " ('give', 5),\n", + " ('town.', 5),\n", + " ('village', 5),\n", + " ('hears', 5),\n", + " ('someone', 5),\n", + " ('family.', 5),\n", + " ('london', 5),\n", + " ('rises', 5),\n", + " ('family,', 5),\n", + " ('drifter', 5),\n", + " ('target', 5),\n", + " ('neale', 5),\n", + " ('threatened', 5),\n", + " ('devoted', 5),\n", + " ('risks', 5),\n", + " ('elusive', 5),\n", + " ('selfish', 5),\n", + " ('arrested', 5),\n", + " ('island', 5),\n", + " ('memory', 5),\n", + " ('faces', 5),\n", + " ('trouble.', 5),\n", + " ('student', 5),\n", + " ('illegal', 5),\n", + " ('unhappy', 5),\n", + " ('sister.', 5),\n", + " ('trap', 5),\n", + " ('witnessing', 5),\n", + " ('money,', 5),\n", + " ('poisoned', 5),\n", + " ('smuggled', 5),\n", + " ('shows', 5),\n", + " ('novelist', 5),\n", + " ('live', 5),\n", + " ('house.', 5),\n", + " ('days', 5),\n", + " ('special', 5),\n", + " ('reveals', 5),\n", + " ('though', 5),\n", + " ('assistant', 5),\n", + " ('glamorous', 5),\n", + " ('recurring', 5),\n", + " ('long', 5),\n", + " ('eddie', 5),\n", + " ('apparent', 5),\n", + " ('finding', 5),\n", + " ('big-time', 5),\n", + " ('straight', 5),\n", + " ('beautiful,', 5),\n", + " ('vincent', 5),\n", + " ('jealous', 5),\n", + " ('hunt', 5),\n", + " ('one.', 5),\n", + " ('mute', 5),\n", + " ('feels', 5),\n", + " ('scheming', 5),\n", + " ('seduces', 5),\n", + " ('hidden', 5),\n", + " ('really', 5),\n", + " ('killing.', 5),\n", + " ('difficult', 5),\n", + " ('unethical', 5),\n", + " ('characters', 5),\n", + " ('recently', 5),\n", + " ('farm', 5),\n", + " ('in-love', 5),\n", + " ('nearby', 5),\n", + " ('actor', 5),\n", + " ('mining', 5),\n", + " ('bad', 5),\n", + " ('threats', 5),\n", + " ('expecting', 5),\n", + " ('crook', 5),\n", + " ('lady', 5),\n", + " ('magazine', 5),\n", + " ('personal', 5),\n", + " ('sends', 5),\n", + " ('develops', 5),\n", + " ('frustrated', 5),\n", + " ('english', 5),\n", + " ('photographer', 5),\n", + " ('evade', 5),\n", + " ('return', 5),\n", + " ('brought', 5),\n", + " ('dead.', 5),\n", + " ('frame', 5),\n", + " ('feud', 5),\n", + " ('avoid', 5),\n", + " ('wish', 5),\n", + " ('struggling', 5),\n", + " ('stand', 5),\n", + " ('self', 5),\n", + " ('blind', 5),\n", + " ('judge', 5),\n", + " ('frames', 5),\n", + " ('large', 5),\n", + " ('shelter', 5),\n", + " ('inmates', 5),\n", + " ('joins', 5),\n", + " ('nightmare', 5),\n", + " ('racket.', 5),\n", + " ('lonely', 5),\n", + " ('instead.', 5),\n", + " ('another', 5),\n", + " ('jail', 5),\n", + " ('pretty', 5),\n", + " ('rap', 5),\n", + " (\"man's\", 5),\n", + " ('fiance', 5),\n", + " ('leave', 5),\n", + " ('mark', 5),\n", + " ('laura', 5),\n", + " ('among', 5),\n", + " ('mixed', 5),\n", + " ('vengeful', 5),\n", + " ('success', 5),\n", + " ('america', 5),\n", + " ('ambitious', 5),\n", + " ('always', 5),\n", + " ('given', 5),\n", + " ('armored', 5),\n", + " ('truck', 5),\n", + " ('obsessed', 5),\n", + " ('tracks', 5),\n", + " ('hoodlum', 5),\n", + " ('lover,', 5),\n", + " ('see', 5),\n", + " ('party', 5),\n", + " ('powerful', 5),\n", + " ('black', 5),\n", + " ('d.a.', 5),\n", + " ('service', 5),\n", + " ('deal', 5),\n", + " ('there,', 5),\n", + " ('daring', 5),\n", + " ('brother,', 5),\n", + " ('danger', 5),\n", + " ('becoming', 5),\n", + " ('pregnant', 5),\n", + " ('sadistic', 5),\n", + " ('start', 5),\n", + " ('gives', 5),\n", + " ('hotel', 5),\n", + " ('sleazy', 5),\n", + " ('son.', 5),\n", + " ('deranged', 5),\n", + " ('serving', 5),\n", + " ('morning', 5),\n", + " ('gun', 5),\n", + " ('latest', 5),\n", + " ('precinct', 5),\n", + " ('mob,', 5),\n", + " ('psychopath', 5),\n", + " ('las', 5),\n", + " ('vegas', 5),\n", + " ('attractive', 5),\n", + " ('mountain', 5),\n", + " ('bar', 5),\n", + " ('kidnaps', 5),\n", + " ('james', 5),\n", + " ('brutal', 5),\n", + " ('perfect', 5),\n", + " ('convicts', 5),\n", + " ('pull', 5),\n", + " ('crime,', 5),\n", + " ('professional', 5),\n", + " ('hand', 4),\n", + " ('key', 4),\n", + " ('witness', 4),\n", + " ('trial', 4),\n", + " ('roy', 4),\n", + " ('earle', 4),\n", + " ('criminals', 4),\n", + " ('respectable', 4),\n", + " ('actress', 4),\n", + " ('results.', 4),\n", + " ('involves', 4),\n", + " ('criminals,', 4),\n", + " ('quest', 4),\n", + " ('clashes', 4),\n", + " ('blackmailer', 4),\n", + " ('fears', 4),\n", + " ('amnesiac', 4),\n", + " ('crimes', 4),\n", + " ('targeted', 4),\n", + " ('passage', 4),\n", + " ('unsolved', 4),\n", + " ('kelly', 4),\n", + " ('rid', 4),\n", + " ('employer', 4),\n", + " ('romantic', 4),\n", + " ('lynch', 4),\n", + " ('greenwich', 4),\n", + " ('something', 4),\n", + " ('clerk', 4),\n", + " ('befriends', 4),\n", + " (\"father's\", 4),\n", + " ('actress.', 4),\n", + " ('law.', 4),\n", + " ('lets', 4),\n", + " ('housewife', 4),\n", + " ('home,', 4),\n", + " ('italy', 4),\n", + " ('obsessive', 4),\n", + " ('landlady', 4),\n", + " ('lodger', 4),\n", + " ('ripper.', 4),\n", + " ('asylum', 4),\n", + " ('sensuous', 4),\n", + " ('concert', 4),\n", + " ('naive', 4),\n", + " ('middle', 4),\n", + " ('engages', 4),\n", + " ('blame', 4),\n", + " ('killed,', 4),\n", + " ('spanish', 4),\n", + " ('engineer', 4),\n", + " ('canadian', 4),\n", + " ('justice', 4),\n", + " ('wealth,', 4),\n", + " ('appears', 4),\n", + " ('racket', 4),\n", + " ('helped', 4),\n", + " ('entertainment', 4),\n", + " ('hall', 4),\n", + " ('f.b.i.', 4),\n", + " ('taxi', 4),\n", + " ('picks', 4),\n", + " ('amid', 4),\n", + " ('estranged', 4),\n", + " ('aid', 4),\n", + " ('daughter.', 4),\n", + " ('mrs.', 4),\n", + " ('2', 4),\n", + " ('painting', 4),\n", + " ('patient', 4),\n", + " ('detective,', 4),\n", + " ('discovering', 4),\n", + " ('fatal', 4),\n", + " ('untimely', 4),\n", + " ('dream', 4),\n", + " ('over,', 4),\n", + " ('seen', 4),\n", + " ('love.', 4),\n", + " ('breaks', 4),\n", + " ('past.', 4),\n", + " ('unfaithful', 4),\n", + " (\"eddie's\", 4),\n", + " ('nightmare.', 4),\n", + " ('scientists', 4),\n", + " ('never', 4),\n", + " ('happened.', 4),\n", + " ('convince', 4),\n", + " ('tom', 4),\n", + " ('leaving', 4),\n", + " ('impossible.', 4),\n", + " ('loan', 4),\n", + " ('tricks', 4),\n", + " ('expose', 4),\n", + " ('inheritance', 4),\n", + " ('rare', 4),\n", + " (\"detective's\", 4),\n", + " ('compromised', 4),\n", + " ('position', 4),\n", + " ('blake', 4),\n", + " ('south', 4),\n", + " ('america.', 4),\n", + " ('claim', 4),\n", + " ('cassin', 4),\n", + " ('taylor', 4),\n", + " ('identity,', 4),\n", + " ('haunted', 4),\n", + " ('wartime', 4),\n", + " ('shady', 4),\n", + " ('past,', 4),\n", + " ('share', 4),\n", + " ('dollar', 4),\n", + " ('psychotic', 4),\n", + " ('adulterous', 4),\n", + " ('discover', 4),\n", + " ('hits', 4),\n", + " ('collins', 4),\n", + " ('buddy', 4),\n", + " ('fiancée', 4),\n", + " ('suspicious', 4),\n", + " ('apparently', 4),\n", + " ('soldier', 4),\n", + " ('receive', 4),\n", + " ('highway', 4),\n", + " ('nevada', 4),\n", + " ('revenge.', 4),\n", + " ('ride', 4),\n", + " ('(barry', 4),\n", + " ('numbers', 4),\n", + " ('wrong', 4),\n", + " ('hollywood', 4),\n", + " ('left', 4),\n", + " ('leaves', 4),\n", + " ('offer', 4),\n", + " ('devilish', 4),\n", + " ('insinuates', 4),\n", + " ('cops.', 4),\n", + " ('east', 4),\n", + " ('london,', 4),\n", + " ('mentalist', 4),\n", + " ('lies', 4),\n", + " ('gas', 4),\n", + " ('crosses,', 4),\n", + " ('entire', 4),\n", + " ('adoptive', 4),\n", + " ('nasty', 4),\n", + " ('operation', 4),\n", + " ('located', 4),\n", + " ('room,', 4),\n", + " ('rancher', 4),\n", + " ('terrible', 4),\n", + " ('teen', 4),\n", + " ('cheating', 4),\n", + " ('gagin', 4),\n", + " ('intent', 4),\n", + " ('lands', 4),\n", + " ('valuable', 4),\n", + " ('day', 4),\n", + " ('larry', 4),\n", + " ('disappears.', 4),\n", + " ('infiltrates', 4),\n", + " ('life,', 4),\n", + " ('coast', 4),\n", + " ('suffering', 4),\n", + " ('psychology', 4),\n", + " ('paul', 4),\n", + " ('police,', 4),\n", + " ('plot.', 4),\n", + " ('fighter', 4),\n", + " ('fired', 4),\n", + " ('chicago', 4),\n", + " ('told', 4),\n", + " ('law', 4),\n", + " ('sentenced', 4),\n", + " ('acquires', 4),\n", + " ('means', 4),\n", + " ('down,', 4),\n", + " ('entangled', 4),\n", + " ('settle', 4),\n", + " ('stay', 4),\n", + " ('mental', 4),\n", + " ('olivia', 4),\n", + " ('opens', 4),\n", + " ('invalid', 4),\n", + " ('counterfeiting', 4),\n", + " ('trail', 4),\n", + " ('owned', 4),\n", + " ('stalks', 4),\n", + " ('political', 4),\n", + " ('friends', 4),\n", + " ('schemes', 4),\n", + " ('pursues', 4),\n", + " ('court.', 4),\n", + " ('southern', 4),\n", + " ('dangerously', 4),\n", + " ('prompting', 4),\n", + " ('sheriff', 4),\n", + " ('willing', 4),\n", + " ('betrayal.', 4),\n", + " ('morton', 4),\n", + " ('exchange', 4),\n", + " ('infiltrate', 4),\n", + " ('use', 4),\n", + " ('employee', 4),\n", + " ('quickly', 4),\n", + " ('desperately', 4),\n", + " ('manager', 4),\n", + " ('client,', 4),\n", + " ('asks', 4),\n", + " ('doomed', 4),\n", + " ('hood', 4),\n", + " ('hold', 4),\n", + " ('scene', 4),\n", + " ('heat', 4),\n", + " ('susan', 4),\n", + " ('luck', 4),\n", + " ('duty', 4),\n", + " ...]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "desc = film_noir_df['desc']\n", + "descriptions = []\n", + "for description in desc:\n", + " if description.endswith(\"»\"):\n", + " description = description[:description.find(\"... See full\")]\n", + " descriptions.append(description)\n", + "\n", + " \n", + " \n", + "frequencies = {}\n", + "for description in descriptions:\n", + " for word in description.split(\" \"):\n", + " if word.lower() in frequencies:\n", + " frequencies[word.lower()] += 1\n", + " else:\n", + " if word.lower() not in stop_w:\n", + " frequencies[word.lower()] = 1\n", + "frequencies = sorted(frequencies.items(),key=lambda item:item[1],reverse=True)\n", + "frequencies" + ] + }, + { + "cell_type": "markdown", + "id": "7a12a0c3", + "metadata": {}, + "source": [ + "By completing the exercise now you are able to see the results from both methods are similar, and both ways of retrieving and displaying the frequencies are equally useful. Moreover, the results reveal the thematic patterns of the Film Noir genre." + ] + }, + { + "cell_type": "markdown", + "id": "8a19ab59", + "metadata": {}, + "source": [ + "### There are no solutions to Q6, as it was a free-style question, although it was slightly guided" + ] + }, + { + "cell_type": "markdown", + "id": "cbe1811d", + "metadata": {}, + "source": [ + "### There are no solutions to Q7, as it was a free-style question, especially because it was unguided" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Group 3/Tutorial & Active Learning Notebook.ipynb b/Group 3/Tutorial & Active Learning Notebook.ipynb new file mode 100644 index 0000000..9725d79 --- /dev/null +++ b/Group 3/Tutorial & Active Learning Notebook.ipynb @@ -0,0 +1,1585 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "dd5165c8", + "metadata": {}, + "source": [ + "# Tutorial & Active Learning Notebook with the dataset\n", + "## \"Film Noir: They Shot Dark Pictures, Didn't They?\" (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they)\n", + "\n", + "\n", + "\n", + "\n", + "The dataset provides information about more than 1,000 Film Noir films from 1940 to 2003, including their title, genre, year, runtime, rating, description, votes, director, and stars. \n", + "\n", + " Note: The variable 'Rating' is based on contemporary ratings of the Film-Noir movies. This is to mean that the Ratings are views held by a contemporary audience, and most times not held by the audience stemming from the time these movies were produced.\n", + "\n", + "Have you ever heard of the term 'Film Noir'? Did you know this genre has long been regarded as one of cinema's most intriguing styles that defined post-war American cinematography? Did you know that this genre developed iconic cinematic motifs and tropes that inspire filmmakers in this day and age? \n", + "\n", + "The above mentioned reasons is why this Notebook (containing both the tutorial and the active learning exercises)\n", + "was created. For the tutorial, expect to be guided through the process of how to import the dataset and clean it. For the active learning exercises, you can expect the following structure: 1) the question, and 2) an introduction to the exercise, which is meant to motivate you, as the reader to answer the particular question.\n", + "The answers can be checked with the answer sheet file found at https://github.com/catalina255/film_noir_exploratory_analysis/blob/706454f178eba82cee913cbe7a8a45916f1549fb/Solutions%20-%20Tutorial%20&%20Active%20Learning%20Notebook%20.ipynb. " + ] + }, + { + "cell_type": "markdown", + "id": "b10f3d8e", + "metadata": {}, + "source": [ + "# Tutorial\n", + "As was mentioned before, you will be guided through the process of how to do everything which you need in order to complete the active learning exercises later on. " + ] + }, + { + "cell_type": "markdown", + "id": "0e330e53", + "metadata": {}, + "source": [ + "### Step 1: Download the data \n", + "You can download the data from the following GitHub repository:\n", + "https://github.com/catalina255/film_noir_exploratory_analysis\n", + "\n", + "Then, download the file named 'IMDB_noir_1000.csv'. " + ] + }, + { + "cell_type": "markdown", + "id": "feaa64f7", + "metadata": {}, + "source": [ + "#### Overview of required packages\n", + "This is an overview of the libraries which are required to work with the daya you just downloaded. \n", + "- The Pandas library\n", + "- The Seaborn library\n", + "- The NumPy library\n", + "- The Matplotlib library\n", + "\n", + "Do not be alarmed for now, it will be stated what to import when it is necessary. " + ] + }, + { + "cell_type": "markdown", + "id": "d4835d73", + "metadata": {}, + "source": [ + "### Step 2: loading the data" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "23b02272", + "metadata": {}, + "outputs": [], + "source": [ + "# In order to use the Pandas library, this first needs to be imported\n", + "import pandas as pd" + ] + }, + { + "cell_type": "markdown", + "id": "a9409687", + "metadata": {}, + "source": [ + "To load the data, you specify the filepath as an argument to the pd.read_csv() function. \n", + "- Note: the filepath to the 'IMDB_noir_1000.csv' file is located in relation to where you store this Notebook.\n", + "\n", + "You assign this to a variable with a descriptive name, like we did with 'film_noir_df' and show the DataFrame by calling the variable name." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "47808558", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1353Who'll Stop the RainAction, Crime, Drama1978126 min6.7A Vietnam veteran gets conned into helping an ...3003NaNNaN
1354The Wings of the DoveDrama, Romance1997102 min7.1An impoverished woman who has been forced to c...12580NaNNaN
1355WitnessDrama, Romance, Thriller1985112 min7.4When a young Amish boy is sole witness to a mu...97031NaNNaN
1356The ZodiacCrime, Drama, Horror2005158 min5.3An elusive serial killer known as the Zodiac t...7333NaNNaN
1357ZodiacCrime, Drama, Mystery2007157 min7.7Between 1968 and 1983, a San Francisco cartoon...546602NaNNaN
\n", + "

1358 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1353 Who'll Stop the Rain Action, Crime, Drama \n", + "1354 The Wings of the Dove Drama, Romance \n", + "1355 Witness Drama, Romance, Thriller \n", + "1356 The Zodiac Crime, Drama, Horror \n", + "1357 Zodiac Crime, Drama, Mystery \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1353 1978 126 min 6.7 \n", + "1354 1997 102 min 7.1 \n", + "1355 1985 112 min 7.4 \n", + "1356 2005 158 min 5.3 \n", + "1357 2007 157 min 7.7 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1353 A Vietnam veteran gets conned into helping an ... 3003 \n", + "1354 An impoverished woman who has been forced to c... 12580 \n", + "1355 When a young Amish boy is sole witness to a mu... 97031 \n", + "1356 An elusive serial killer known as the Zodiac t... 7333 \n", + "1357 Between 1968 and 1983, a San Francisco cartoon... 546602 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1353 NaN NaN \n", + "1354 NaN NaN \n", + "1355 NaN NaN \n", + "1356 NaN NaN \n", + "1357 NaN NaN \n", + "\n", + "[1358 rows x 9 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = pd.read_csv('data/IMDB_noir_1000.csv')\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "4e3ab1c3", + "metadata": {}, + "source": [ + "# Step 3: Cleaning the data" + ] + }, + { + "cell_type": "markdown", + "id": "7c6f519e", + "metadata": {}, + "source": [ + "Take a minute to look at the DataFrame. The DataFrame consists of 1358 rows by 9 columns. Ask yourself 'What stands out?'. The second thing that might stand out to you is that that there are a lot of values that correspond to NaN, while the second thing might be is that for the variable 'Stars', there is at least one Star named '|'. \n", + "\n", + "It is possible to drop the values that correspond to NaN, by simply running the following code. " + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "a84de0ba", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
0Angels Over BroadwayAdventure, Comedy, Crime194079 min6.5A cuckolded embezzler on the verge of suicide ...1,228Ben Hecht|
1City for ConquestDrama, Music, Sport1940104 min7.2Danny is a content truck driver, but his girl ...2,430Anatole Litvak|
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1246 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "0 Angels Over Broadway Adventure, Comedy, Crime \n", + "1 City for Conquest Drama, Music, Sport \n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "0 1940 79 min 6.5 \n", + "1 1940 104 min 7.2 \n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "0 A cuckolded embezzler on the verge of suicide ... 1,228 \n", + "1 Danny is a content truck driver, but his girl ... 2,430 \n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "0 Ben Hecht | \n", + "1 Anatole Litvak | \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1246 rows x 9 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df.dropna()\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "b457369e", + "metadata": {}, + "source": [ + "Take another minute to look at the DataFrame. The DataFrame consists of 1246 rows by 9 columns. You can clearly see that we lost data due to dropping the NaN values.\n", + "But that is not the end. You still need to find a way to take care of the Stars that are named '|'. This can be achieved by running the following bit of code:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "63058fd5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
2The LetterCrime, Drama, Film-Noir194095 min7.6The wife of a rubber plantation administrator ...13,469William WylerBette Davis
3RebeccaDrama, Film-Noir, Mystery1940130 min8.1A self-conscious woman juggles adjusting to he...138,097Alfred HitchcockLaurence Olivier
4Stranger on the Third FloorCrime, Drama, Film-Noir194064 min6.8An aspiring reporter is the key witness at the...4,268Boris IngsterPeter Lorre
5They Drive by NightCrime, Drama, Film-Noir194095 min7.2When one of two truck-driving brothers loses a...8,201Raoul WalshGeorge Raft
6Among the LivingDrama, Film-Noir, Mystery194167 min6.4A mentally-unstable man who has been kept in i...716Stuart HeislerAlbert Dekker
..............................
1317Point BlankCrime, Drama, Thriller196792 min7.3After being double-crossed and left for dead, ...2,981Karel ReiszNick Nolte
1318Point of No ReturnAction, Crime, Drama1993109 min6.1A government fakes the death of a criminal to ...12,545Iain SoftleyHelena Bonham Carter
1319The Postman Always Rings TwiceCrime, Drama, Romance1981122 min6.6The sensuous wife of a lunch wagon proprietor ...96,420Peter WeirHarrison Ford
1320Pretty PoisonComedy, Crime, Romance196889 min7.0When a mentally disturbed young man tells a pr...7,327Alexander BulkleyJustin Chambers
1321The Public EyeCrime, Drama, Romance199299 min6.5In the early 1940s, an infamous New York papar...542,608David FincherJake Gyllenhaal
\n", + "

1199 rows × 9 columns

\n", + "
" + ], + "text/plain": [ + " Title Genre \\\n", + "2 The Letter Crime, Drama, Film-Noir \n", + "3 Rebecca Drama, Film-Noir, Mystery \n", + "4 Stranger on the Third Floor Crime, Drama, Film-Noir \n", + "5 They Drive by Night Crime, Drama, Film-Noir \n", + "6 Among the Living Drama, Film-Noir, Mystery \n", + "... ... ... \n", + "1317 Point Blank Crime, Drama, Thriller \n", + "1318 Point of No Return Action, Crime, Drama \n", + "1319 The Postman Always Rings Twice Crime, Drama, Romance \n", + "1320 Pretty Poison Comedy, Crime, Romance \n", + "1321 The Public Eye Crime, Drama, Romance \n", + "\n", + " Year Runtime Rating \\\n", + "2 1940 95 min 7.6 \n", + "3 1940 130 min 8.1 \n", + "4 1940 64 min 6.8 \n", + "5 1940 95 min 7.2 \n", + "6 1941 67 min 6.4 \n", + "... ... ... ... \n", + "1317 1967 92 min 7.3 \n", + "1318 1993 109 min 6.1 \n", + "1319 1981 122 min 6.6 \n", + "1320 1968 89 min 7.0 \n", + "1321 1992 99 min 6.5 \n", + "\n", + " desc Votes \\\n", + "2 The wife of a rubber plantation administrator ... 13,469 \n", + "3 A self-conscious woman juggles adjusting to he... 138,097 \n", + "4 An aspiring reporter is the key witness at the... 4,268 \n", + "5 When one of two truck-driving brothers loses a... 8,201 \n", + "6 A mentally-unstable man who has been kept in i... 716 \n", + "... ... ... \n", + "1317 After being double-crossed and left for dead, ... 2,981 \n", + "1318 A government fakes the death of a criminal to ... 12,545 \n", + "1319 The sensuous wife of a lunch wagon proprietor ... 96,420 \n", + "1320 When a mentally disturbed young man tells a pr... 7,327 \n", + "1321 In the early 1940s, an infamous New York papar... 542,608 \n", + "\n", + " Director Stars \n", + "2 William Wyler Bette Davis \n", + "3 Alfred Hitchcock Laurence Olivier \n", + "4 Boris Ingster Peter Lorre \n", + "5 Raoul Walsh George Raft \n", + "6 Stuart Heisler Albert Dekker \n", + "... ... ... \n", + "1317 Karel Reisz Nick Nolte \n", + "1318 Iain Softley Helena Bonham Carter \n", + "1319 Peter Weir Harrison Ford \n", + "1320 Alexander Bulkley Justin Chambers \n", + "1321 David Fincher Jake Gyllenhaal \n", + "\n", + "[1199 rows x 9 columns]" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "film_noir_df = film_noir_df[(film_noir_df.Stars != '|')]\n", + "film_noir_df" + ] + }, + { + "cell_type": "markdown", + "id": "5f78003d", + "metadata": {}, + "source": [ + "Now, take yet another minute to look at the DataFrame. The DataFrame consists of 1199 rows by 9 columns. Our solution to take care of the Stars named '|', is not the only solution. Another more time-consuming solution is to check all the movies from which the Stars are named '|', and manually insert the names of the Stars in the csv file. " + ] + }, + { + "cell_type": "markdown", + "id": "a513fbd1", + "metadata": {}, + "source": [ + "# Step 4: Displaying the dataset, and providing basic statistics about the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "c9ac9de4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
284Station WestWestern194897 min6.6After two U.S. cavalrymen transporting a gold ...905Michael GordonBarbara Stanwyck
1087711 Ocean DriveAction, Crime, Drama1950102 min6.8An electronics expert creates a huge bookie br...10,345Robert SiodmakDorothy McGuire
920I Died a Thousand TimesCrime, Drama, Film-Noir1955109 min6.4After aging criminal Roy Earle is released fro...4,081Arthur LubinBrian Donlevy
818ConvictedAction, Crime, Drama195091 min6.8A D.A. becomes the prison warden where he trie...419Lewis GilbertJames Kenney
427UnmaskedAction, Crime, Drama195060 min5.9Roger Lewis, publisher of a vicious scandal sh...156W. Lee WilderLloyd Bridges
1126Sudden FearFilm-Noir, Thriller1952110 min7.5After an ambitious actor insinuates himself in...1,714Cy EndfieldFrank Lovejoy
1315PaybackAction, Crime, DramaI 1999100 min7.1After a successful heist, Porter is left for d...1,083,657Bryan SingerKevin Spacey
319House of StrangersCrime, Drama, Film-Noir1949101 min7.4After years in prison, Max promises revenge on...981Michael GordonIda Lupino
191I Love TroubleCrime, Film-Noir, Mystery194893 min6.7A wealthy man hires a detective to investigate...1,413Alfred L. WerkerLouis Hayward
805Cash on DemandCrime, Drama, Mystery196189 min7.4A charming but ruthless criminal holds the fam...2,371Tay GarnettLoretta Young
\n", + "
" + ], + "text/plain": [ + " Title Genre Year \\\n", + "284 Station West Western 1948 \n", + "1087 711 Ocean Drive Action, Crime, Drama 1950 \n", + "920 I Died a Thousand Times Crime, Drama, Film-Noir 1955 \n", + "818 Convicted Action, Crime, Drama 1950 \n", + "427 Unmasked Action, Crime, Drama 1950 \n", + "1126 Sudden Fear Film-Noir, Thriller 1952 \n", + "1315 Payback Action, Crime, Drama I 1999 \n", + "319 House of Strangers Crime, Drama, Film-Noir 1949 \n", + "191 I Love Trouble Crime, Film-Noir, Mystery 1948 \n", + "805 Cash on Demand Crime, Drama, Mystery 1961 \n", + "\n", + " Runtime Rating desc \\\n", + "284 97 min 6.6 After two U.S. cavalrymen transporting a gold ... \n", + "1087 102 min 6.8 An electronics expert creates a huge bookie br... \n", + "920 109 min 6.4 After aging criminal Roy Earle is released fro... \n", + "818 91 min 6.8 A D.A. becomes the prison warden where he trie... \n", + "427 60 min 5.9 Roger Lewis, publisher of a vicious scandal sh... \n", + "1126 110 min 7.5 After an ambitious actor insinuates himself in... \n", + "1315 100 min 7.1 After a successful heist, Porter is left for d... \n", + "319 101 min 7.4 After years in prison, Max promises revenge on... \n", + "191 93 min 6.7 A wealthy man hires a detective to investigate... \n", + "805 89 min 7.4 A charming but ruthless criminal holds the fam... \n", + "\n", + " Votes Director Stars \n", + "284 905 Michael Gordon Barbara Stanwyck \n", + "1087 10,345 Robert Siodmak Dorothy McGuire \n", + "920 4,081 Arthur Lubin Brian Donlevy \n", + "818 419 Lewis Gilbert James Kenney \n", + "427 156 W. Lee Wilder Lloyd Bridges \n", + "1126 1,714 Cy Endfield Frank Lovejoy \n", + "1315 1,083,657 Bryan Singer Kevin Spacey \n", + "319 981 Michael Gordon Ida Lupino \n", + "191 1,413 Alfred L. Werker Louis Hayward \n", + "805 2,371 Tay Garnett Loretta Young " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The following code gives a random sample of the dataset. \n", + "film_noir_df.sample(10)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "0350dd89", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Int64Index: 1199 entries, 2 to 1321\n", + "Data columns (total 9 columns):\n", + " # Column Non-Null Count Dtype \n", + "--- ------ -------------- ----- \n", + " 0 Title 1199 non-null object \n", + " 1 Genre 1199 non-null object \n", + " 2 Year 1199 non-null object \n", + " 3 Runtime 1199 non-null object \n", + " 4 Rating 1199 non-null float64\n", + " 5 desc 1199 non-null object \n", + " 6 Votes 1199 non-null object \n", + " 7 Director 1199 non-null object \n", + " 8 Stars 1199 non-null object \n", + "dtypes: float64(1), object(8)\n", + "memory usage: 93.7+ KB\n" + ] + } + ], + "source": [ + "# The folloing code provides some information about the data. \n", + "film_noir_df.info()" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "eadcf1fa", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
TitleGenreYearRuntimeRatingdescVotesDirectorStars
count11991199119911991199.0000001199119911991199
unique8461076884NaN860793394446
topFearCrime, Drama, Film-Noir194782 minNaNJim Fletcher, waking up from a coma, finds he ...296Anthony MannHumphrey Bogart
freq354912343NaN242727
meanNaNNaNNaNNaN6.728023NaNNaNNaNNaN
stdNaNNaNNaNNaN0.634760NaNNaNNaNNaN
minNaNNaNNaNNaN3.600000NaNNaNNaNNaN
25%NaNNaNNaNNaN6.300000NaNNaNNaNNaN
50%NaNNaNNaNNaN6.700000NaNNaNNaNNaN
75%NaNNaNNaNNaN7.200000NaNNaNNaNNaN
maxNaNNaNNaNNaN8.800000NaNNaNNaNNaN
\n", + "
" + ], + "text/plain": [ + " Title Genre Year Runtime Rating \\\n", + "count 1199 1199 1199 1199 1199.000000 \n", + "unique 846 107 68 84 NaN \n", + "top Fear Crime, Drama, Film-Noir 1947 82 min NaN \n", + "freq 3 549 123 43 NaN \n", + "mean NaN NaN NaN NaN 6.728023 \n", + "std NaN NaN NaN NaN 0.634760 \n", + "min NaN NaN NaN NaN 3.600000 \n", + "25% NaN NaN NaN NaN 6.300000 \n", + "50% NaN NaN NaN NaN 6.700000 \n", + "75% NaN NaN NaN NaN 7.200000 \n", + "max NaN NaN NaN NaN 8.800000 \n", + "\n", + " desc Votes Director \\\n", + "count 1199 1199 1199 \n", + "unique 860 793 394 \n", + "top Jim Fletcher, waking up from a coma, finds he ... 296 Anthony Mann \n", + "freq 2 4 27 \n", + "mean NaN NaN NaN \n", + "std NaN NaN NaN \n", + "min NaN NaN NaN \n", + "25% NaN NaN NaN \n", + "50% NaN NaN NaN \n", + "75% NaN NaN NaN \n", + "max NaN NaN NaN \n", + "\n", + " Stars \n", + "count 1199 \n", + "unique 446 \n", + "top Humphrey Bogart \n", + "freq 27 \n", + "mean NaN \n", + "std NaN \n", + "min NaN \n", + "25% NaN \n", + "50% NaN \n", + "75% NaN \n", + "max NaN " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# The following code provides descriptive statistics for all the column in the data.\n", + "film_noir_df.describe(include = 'all')" + ] + }, + { + "cell_type": "markdown", + "id": "54a21934", + "metadata": {}, + "source": [ + "# Start of Active Learning Exercises" + ] + }, + { + "cell_type": "markdown", + "id": "90c35164", + "metadata": {}, + "source": [ + "## Exercise 1" + ] + }, + { + "cell_type": "markdown", + "id": "2eae14f2", + "metadata": {}, + "source": [ + "In this exercise and the following exercise, you will explore what sort of subgenres were most popular throughout the Film Noir age. Take note of how there are many combinations of genres, ranging from 1 to 3. \n", + "\n", + "We are trying to demonstrate that the genre of crime is quite common within Film-Noir, with this exercise. Additionally, with this exercise, we aim to observe the tendencies of Film-Noir viewers, in terms of which combinations of genre receives the most interest. In turn, this could prove helpful in determining people's future recommendations. \n", + "\n", + "In the first part of this exercise, answer the following question: Q1a) How many distinct entries are there of genre combinations?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f2daa01a", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q1a" + ] + }, + { + "cell_type": "markdown", + "id": "f7adcdbf", + "metadata": {}, + "source": [ + "The second part of this exercise continues where 1a left off. Q1b: Of those distinct entries, which are the 10 most popular genre combinations? " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "c11d9ec5", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q1b" + ] + }, + { + "cell_type": "markdown", + "id": "686587d7", + "metadata": {}, + "source": [ + "## Exercise 2" + ] + }, + { + "cell_type": "markdown", + "id": "da1721f4", + "metadata": {}, + "source": [ + "As mentioned before, you will explore what sort of subgenres were popular throughout the Film Noir age. However, unlike in Exercise 1, you will now attempt to answer this question with the help of creating two additional variables. The first variable is the 'Score', which is created by multiplying 'Rating' with 'Votes'. The second variable is the 'Popularity Index', which is created by dividing the score by the number of distinct entries of genre. \n", + "\n", + "Essentially, we want to rate how popular IMDB rated Film-Noir movies through the application of the Popularity Index. Exploring this can reveal interesting patterns surrounding which combinations of genres receive the highest ratings. \n", + "\n", + "\n", + "Q2: Which subgenres were popular throughout the Film Noir time period using the variable 'Popularity Index'? Provide a column chart to help support your answer. " + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "006c4280", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q2" + ] + }, + { + "cell_type": "markdown", + "id": "dcea2467", + "metadata": {}, + "source": [ + "## Exercise 3\n", + "\n", + "In the following exercise, you will try to determine whether movies produced by several directors with a dominating presence were enjoyed by viewers. \n", + "\n", + "Q3a: Who are the directors with a dominating presence?\n", + "Q3b: Are the movies directed by those directors enjoyed by viewers?\n", + "\n", + "\n", + "The motivation behind both of these questions falls along the same lines, which is to see whether movies directed by the same select few people affects the enjoyment of those movies. " + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "dc8114c9", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q3a" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e2d01bed", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q3b" + ] + }, + { + "cell_type": "markdown", + "id": "c567bc88", + "metadata": {}, + "source": [ + "## Exercise 4\n", + "\n", + "In this exercise, you will look into what movie stars had the most succes during their Film Noir career. \n", + "\n", + "Q4: Which movie stars had the most success during their Film Noir career?\n", + "\n", + " Note: The variable 'Rating' is based on contemporary ratings of the Film-Noir movies. This is to mean that the Ratings are views held by a contemporary audience, and most times not held by the audience stemming from the time these movies were produced. \n", + "\n", + "The motivation for this exercise is using these results for future research, perhaps these movie stars were able to further their career due to their Film Noir career, or perhaps their career came to an end due to their Film Noir career. " + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "2be10f0a", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q4" + ] + }, + { + "cell_type": "markdown", + "id": "be4ee060", + "metadata": {}, + "source": [ + "## Exercise 5\n", + "In the next exercise, you are going to work with the short plot descriptions found in 'desc' column. The purpose is to observe the word frequency in the descriptions to see how well the words reflect the Film Noir genre. That being said, we are going to use two methods in order to see whether the results are the same. \n", + "\n", + "Q5a: In the first method you are asked to create a wordcloud visualisation for the most frequent used words in the 'desc' column. We suggest to clean the text of redundant suffixes, so first take a brief look at the corpus. Also, make sure to install the wordcloud and pillow packages to generate the wordcloud. \n", + "\n", + "Q5b: In the second method you are asked to manually extract the frequencies. We suggest to clean the text of redundant suffixes, so first take a brief look at the corpus. " + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "882f9326", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q5a" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "6ed47da8", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q5b" + ] + }, + { + "cell_type": "markdown", + "id": "a67ec4ad", + "metadata": {}, + "source": [ + "## Exercise 6: Free style\n", + "\n", + "If you haven't noticed by now, the dataset also contains movies from the Neo-Noir period, so an interesting analysis could consist of looking at different statistical changes from the initial release of this kind of movies and the revival of the genre later on in time. \n", + "\n", + "In this exercise, we encourage you to come up with your own question or questions which compares the Noir movies with the Neo-Noir movies, based on a particular variable. " + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "b3a6d27b", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q6" + ] + }, + { + "cell_type": "markdown", + "id": "b8b56f16", + "metadata": {}, + "source": [ + "## Exercise 7: Free style" + ] + }, + { + "cell_type": "markdown", + "id": "3ada4ee5", + "metadata": {}, + "source": [ + "In this exercise, we encourage you to come up with your own question, or even questions, without guidance. Feel free to be as creative as possible. " + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "e2a89cbc", + "metadata": {}, + "outputs": [], + "source": [ + "# Insert your code here for Q7" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Group 3/Website/About.html b/Group 3/Website/About.html new file mode 100644 index 0000000..45f57a0 --- /dev/null +++ b/Group 3/Website/About.html @@ -0,0 +1,436 @@ + + + + + + + + About + + + + +

Film Noir

+ + +
+
+ Film noir is a cinematic term used primarily to describe stylish Hollywood crime dramas, particularly those that emphasize cynical attitudes and motivations. The 1940s and 1950s are generally regarded as the "classic period" of American film noir. Film noir of this era is associated with a low-key, black-and-white visual style that has roots in German Expressionist cinematography. Many of the prototypical stories and much of the attitude of classic noir derive from the hardboiled school of crime fiction that emerged in the United States during the Great Depression. + The term film noir, French for 'black film' (literal) or 'dark film' (closer meaning), was first applied to Hollywood films by French critic Nino Frank in 1946, but was unrecognized by most American film industry professionals of that era. Frank is believed to have been inspired by the French literary publishing imprint Série noire, founded in 1945. +

+

+

+

+ +

Project description

+

Data description

+ ‘Film noir’ is a term you’ve probably heard hundreds of times, and has long been regarded as one of cinema’s most intriguing styles that defined post-war American cinematography. The genre developed iconic cinematic motifs and tropes that inspire filmmakers today. For this reason, our group decided to focus our research project on the topic of Film- Noir movies, and thereby we searched online for a suitable dataset. We will use the dataset “Film Noir: They Shot Dark Pictures, Didn’t They?” (https://www.kaggle.com/datasets/kabhishm/film-noir-they-shot-dark-pictures-didnt-they). This dataset has been recently updated and it contains over 1000 film-noir movies along with the following information: +
    +
  • 'Title' : The title of the movie
  • +
  • 'Genre' : The genre of the movie
  • +
  • 'Year' : Year of release
  • +
  • 'Runtime' : Total runtime of the movie
  • +
  • 'Rating' : Rating of the movie
  • +
  • 'desc' : Movie description
  • +
  • 'Votes' : Number of people who voted for the movie
  • +
  • 'Director' : Name of the director
  • +
  • 'Stars' : Leading star of the movie
  • +
+ + The dataset is taken from IMDb, which is an online database related to films, and series, among other media types. As the data we are working with is not produced by us, we had to evaluate the data. For the variable ‘desc’, we questioned who was writing the descriptions on IMDB. After looking it up, we can conclude that these are produced by anonymous contributors, which means that the movie descriptions in our dataset could have been written by anyone. We consider this a problem. For the variable ‘’Votes’, we questioned the time in which these votes were produced. The variable ‘Votes’ is based on contemporary votes as it gives IMDb users the chance to vote on various films. Therefore, we can only say how well film noir movies are received in this day and age. + + Datasheet for datasets (from http://dx.doi.org/10.1145/3458723) posed several interesting questions. Here is a list which we think is relevant to us: + +
    +
  • Does the dataset identify any subpopulations (e.g., by age, gender)?
  • +
    • No
    +
  • Is the dataset self-contained, or does it link to or otherwise rely on external resources (e.g., websites, tweets, other datasets)?
  • +
    • The dataset relies on the movie database IMDB. Rating and votes may change over time.
    +
  • What data does each instance consist of?
  • +
    • Raw (unprocessed) text.
    +
  • Is any information missing from individual instances?
  • +
    • Null values are present in place of stars and directors.
    +
  • What do the instances that comprise the dataset represent (e.g., documents, photos, people, countries)?
  • +
    • The instances are movies extracted from an online movie database along with movie descriptions, genre of the movie, number of people who voted for the movie, total runtime of the movie, name of the director and leading star of the movie.
    +
+ +

Goals of the research

+ In this research project, we have several goals in mind. At first glance, the information provided by the dataset would allow us to discover what sort of genres were popular throughout the Film Noir age, by correlating the rating of the movie with the actual votes from viewers. + Also, an important aspect would be the dominating presence of several directors and how they monopolized the genre, and if the viewers actually enjoy the movies produced by those specific directors. What is more, we will look into what movie stars had the most success during their Film Noir career. +

+ A short description of the plot is provided for each movie in the dataset, and we would be interested to determine what the most frequent words are used to describe the movies, if there was a particular inclination for a certain type of character or plot. In addition to that, the dataset also provides movies from the Neo-Noir period, so an interesting analysis could consist of looking at different statistical changes from the initial release of this kind of movies and the revival of the genre later on in time. + To actually perform the desired analysis, we want to make use of a few specific methodological approaches, pointedly exploratory data analysis and data visualization, using features provided by the Pandas library, Matplotlib library, and Numpy library. + +
+ We will navigate through the analysis using some of the tutorials provided by the Cultural Analytics Open Science Guide . We want to guide the user through how they will create their own Pandas DataFrame and use that in order to do some explanatory analysis and data visualization. + For the active learning exercises, we transformed our goals into questions, in order for it to be as engaging as possible, and provide a Jupyter Notebook with the solutions there as a learning experience. Of course, the users are free to come up with their own questions based on the dataset, which are clearly marked as free-style questions. + +

Description of output

+ Thinking of the structure of our project, our output has been transformed into a GitHub repository, where all the data and additional Jupyter Notebooks will be stored, so that all the changes and improvements could be visible. + Additionally, a Data Management Plan (DMP), in which it has been explicitly stated what data we are using, how we handled and stored it, and how the data is supposed to be managed once the project is completed. + As you probably noticed by now, we put together a website, because we think it is important for users to visualize and interact with the data and the outputs of the research project. + + + +

Contributor roles

+
Person - what they contributed
+ Catalina Cruceanu - Conceptualization, Formal analysis, Investigation, Methodology, Software, Visualization, Writing (DMP - original draft), Writing (review & editing), Exercise 5 +
+ Ece Demirtaş - Conceptualization, Formal analysis, Investigation, Methodology, Software, Visualization, Writing (original draft - review & editing), Exercise 3, Webdesign. +
+ Ziyi Wang - Conceptualization, Formal analysis,Investigation, Methodology, Software, Visualization, Writing (original draft), Exercise 2 +
+ Shannon Wietsma - Conceptualization, Formal analysis, Investigation, Methodology, Project administration, Software, Supervision, Visualization, Writing (original draft - review & editing), Exercise 1 & 4 +
+ +
+ + + +
+
+ +
+
+

+

Contributor roles

+

Person - what they contributed

+

Catalina Cruceanu -

+

Ece Demirtaş -

+

Ziyi Wang -

+

Shannon Wietsma -

+

+
+ + +
+ + +
+
+
+
+ + + \ No newline at end of file diff --git a/Group 3/Website/Gallery.html b/Group 3/Website/Gallery.html new file mode 100644 index 0000000..d35a742 --- /dev/null +++ b/Group 3/Website/Gallery.html @@ -0,0 +1,366 @@ + + + + + + + + Gallery + + + + +

Gallery

+ +
+
+
+
+ +
+
+ + +
+
+ +
+
+ +
+
+
+ +
+ + +
+ + + + +
+
+ + + + + +
+ +
+
+
+
+ + + \ No newline at end of file diff --git a/Group 3/Website/fonts/Caligraf-Light_PERSONAL_USE_ONLY.ttf b/Group 3/Website/fonts/Caligraf-Light_PERSONAL_USE_ONLY.ttf new file mode 100644 index 0000000..c4fcecd Binary files /dev/null and b/Group 3/Website/fonts/Caligraf-Light_PERSONAL_USE_ONLY.ttf differ diff --git a/Group 3/Website/fonts/Hornbill-Personal Use Regular.otf b/Group 3/Website/fonts/Hornbill-Personal Use Regular.otf new file mode 100644 index 0000000..c69112a Binary files /dev/null and b/Group 3/Website/fonts/Hornbill-Personal Use Regular.otf differ diff --git a/Group 3/Website/fonts/LeagueMono-ExtendedRegular.otf b/Group 3/Website/fonts/LeagueMono-ExtendedRegular.otf new file mode 100644 index 0000000..9bc65f0 Binary files /dev/null and b/Group 3/Website/fonts/LeagueMono-ExtendedRegular.otf differ diff --git a/Group 3/Website/fonts/LeagueMonoMedium.otf b/Group 3/Website/fonts/LeagueMonoMedium.otf new file mode 100644 index 0000000..25c8b23 Binary files /dev/null and b/Group 3/Website/fonts/LeagueMonoMedium.otf differ diff --git a/Group 3/Website/fonts/LiberationMono-Regular.ttf b/Group 3/Website/fonts/LiberationMono-Regular.ttf new file mode 100644 index 0000000..945aa06 Binary files /dev/null and b/Group 3/Website/fonts/LiberationMono-Regular.ttf differ diff --git a/Group 3/Website/fonts/Lucian Schoenschrift CAT.ttf b/Group 3/Website/fonts/Lucian Schoenschrift CAT.ttf new file mode 100644 index 0000000..139517a Binary files /dev/null and b/Group 3/Website/fonts/Lucian Schoenschrift CAT.ttf differ diff --git a/Group 3/Website/fonts/Portia-Aged.otf b/Group 3/Website/fonts/Portia-Aged.otf new file mode 100644 index 0000000..672f73d Binary files /dev/null and b/Group 3/Website/fonts/Portia-Aged.otf differ diff --git a/Group 3/Website/fonts/Portia-AgedOblique.otf b/Group 3/Website/fonts/Portia-AgedOblique.otf new file mode 100644 index 0000000..9053a16 Binary files /dev/null and b/Group 3/Website/fonts/Portia-AgedOblique.otf differ diff --git a/Group 3/Website/fonts/Portia-Display.otf b/Group 3/Website/fonts/Portia-Display.otf new file mode 100644 index 0000000..ec82dd1 Binary files /dev/null and b/Group 3/Website/fonts/Portia-Display.otf differ diff --git a/Group 3/Website/fonts/Portia-DisplayOblique.otf b/Group 3/Website/fonts/Portia-DisplayOblique.otf new file mode 100644 index 0000000..bd817ac Binary files /dev/null and b/Group 3/Website/fonts/Portia-DisplayOblique.otf differ diff --git a/Group 3/Website/fonts/Portia-Oblique.otf b/Group 3/Website/fonts/Portia-Oblique.otf new file mode 100644 index 0000000..971f004 Binary files /dev/null and b/Group 3/Website/fonts/Portia-Oblique.otf differ diff --git a/Group 3/Website/fonts/Portia.otf b/Group 3/Website/fonts/Portia.otf new file mode 100644 index 0000000..c959696 Binary files /dev/null and b/Group 3/Website/fonts/Portia.otf differ diff --git a/Group 3/Website/fonts/Skyfont-NonCommercial.otf b/Group 3/Website/fonts/Skyfont-NonCommercial.otf new file mode 100644 index 0000000..0eb52aa Binary files /dev/null and b/Group 3/Website/fonts/Skyfont-NonCommercial.otf differ diff --git a/Group 3/Website/fonts/balinest.regular.otf b/Group 3/Website/fonts/balinest.regular.otf new file mode 100644 index 0000000..c9b2fce Binary files /dev/null and b/Group 3/Website/fonts/balinest.regular.otf differ diff --git a/Group 3/Website/images/2144992.jpg b/Group 3/Website/images/2144992.jpg new file mode 100644 index 0000000..84cb7a4 Binary files /dev/null and b/Group 3/Website/images/2144992.jpg differ diff --git a/Group 3/Website/images/directors1.png b/Group 3/Website/images/directors1.png new file mode 100644 index 0000000..f7d4336 Binary files /dev/null and b/Group 3/Website/images/directors1.png differ diff --git a/Group 3/Website/images/film-noir-android-iphone-desktop-hd-backgrounds-wallpapers-1080p-4khd-wallpapers-desktop-background-android-iphone-1080p-4k-5imgo-1080x740.jpg b/Group 3/Website/images/film-noir-android-iphone-desktop-hd-backgrounds-wallpapers-1080p-4khd-wallpapers-desktop-background-android-iphone-1080p-4k-5imgo-1080x740.jpg new file mode 100644 index 0000000..a8bf865 Binary files /dev/null and b/Group 3/Website/images/film-noir-android-iphone-desktop-hd-backgrounds-wallpapers-1080p-4khd-wallpapers-desktop-background-android-iphone-1080p-4k-5imgo-1080x740.jpg differ diff --git a/Group 3/Website/images/pngegg.png b/Group 3/Website/images/pngegg.png new file mode 100644 index 0000000..6c3b3cd Binary files /dev/null and b/Group 3/Website/images/pngegg.png differ diff --git a/Group 3/Website/images/stars1.png b/Group 3/Website/images/stars1.png new file mode 100644 index 0000000..50457f0 Binary files /dev/null and b/Group 3/Website/images/stars1.png differ diff --git a/Group 3/Website/images/top20.png b/Group 3/Website/images/top20.png new file mode 100644 index 0000000..3d4664b Binary files /dev/null and b/Group 3/Website/images/top20.png differ diff --git a/Group 3/Website/images/wordcloudfilm.png b/Group 3/Website/images/wordcloudfilm.png new file mode 100644 index 0000000..cd9eb7a Binary files /dev/null and b/Group 3/Website/images/wordcloudfilm.png differ diff --git a/Group 3/Website/index.css b/Group 3/Website/index.css new file mode 100644 index 0000000..9066a39 --- /dev/null +++ b/Group 3/Website/index.css @@ -0,0 +1,224 @@ + +@font-face { + font-family: "Caligraf"; + src: url(./fonts/Caligraf-Light_PERSONAL_USE_ONLY.ttf); +} + + +@font-face { + font-family: "Balinest"; + src: url(./fonts/balinest.regular.otf); +} + +@font-face { + font-family: "Portia"; + src: url(./fonts/Portia-Aged.otf); +} + +@font-face { + font-family: "Lucien"; + src: url(./fonts/Lucian\ Schoenschrift\ CAT.ttf); +} + +body{ + background-color: black; +} + +html::after { + content: ""; + background: url(./images/2144992.jpg); + opacity:0.6; + left: 0; + bottom: 0; + right: 0; + position: absolute; + z-index: -1; + background-repeat: no-repeat; + background-size: cover; + min-height: 100%; + +} + +h1 { + text-align: center; + letter-spacing: .4rem; + font-family: "Portia"; + font-weight: bold; + font-size: 150px; + background-image: linear-gradient(#505050, #ffffff); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; +} + + +#p1{ + font-size: 70px; + text-align: center; + bottom: 150px; + color: rgb(255, 255, 255); + text-shadow: 5px 5px 10px rgb(0, 0, 0); + font-family: "Lucien"; + +} + +*{ + box-sizing: border-box; + font-family: 'Caligraf', sans-serif; + font-family: 'Caligraf', sans-serif; + } + .wrapper{ + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; + /*background: linear-gradient(-135deg, #000000, #e3eefe);*/ + /* background: linear-gradient(375deg, #7e7e7e, #000000); */ + /* background: linear-gradient(-45deg, #e3eefe 0%, #efddfb 100%);*/ + /* clip-path: circle(25px at calc(0% + 45px) 45px); */ + background: #000; + clip-path: circle(25px at calc(100% - 45px) 45px); + transition: all 0.3s ease-in-out; + } + #active:checked ~ .wrapper{ + clip-path: circle(75%); + } + .menu-btn{ + position: absolute; + z-index: 2; + right: 20px; + /* left: 20px; */ + top: 20px; + height: 50px; + width: 50px; + text-align: center; + line-height: 50px; + border-radius: 50%; + font-size: 20px; + color: #fff; + cursor: pointer; + /*background: linear-gradient(-135deg, #000000, #e3eefe);*/ + /* background: linear-gradient(375deg, #7e7e7e, #000000); */ + /* background: linear-gradient(-45deg, #e3eefe 0%, #efddfb 100%); */ + background: rgb(0, 0, 0); + transition: all 0.3s ease-in-out; + } + #active:checked ~ .menu-btn{ + color: #fff; + } + #active:checked ~ .menu-btn i:before{ + content: "\f00d"; + } + .wrapper ul{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + list-style: none; + text-align: center; + } + .wrapper ul li{ + margin: 15px 0; + } + .wrapper ul li a{ + color: none; + text-decoration: none; + font-size: 30px; + font-weight: 500; + padding: 5px 30px; + color: #fff; + border-radius: 50px; + background: #000; + position: relative; + line-height: 50px; + transition: all 0.3s ease; + } + .wrapper ul li a:after{ + position: absolute; + content: ""; + background: #fff; + background: linear-gradient(#000000, #ffffff, #000000); + /*background: linear-gradient(375deg, #000000, #ffffff);*/ + width: 104%; + height: 110%; + left: -2%; + top: -5%; + border-radius: 50px; + transform: scaleY(0); + z-index: -1; + animation: rotate 1.5s linear infinite; + transition: transform 0.3s ease; + } + .wrapper ul li a:hover:after{ + transform: scaleY(1); + } + .wrapper ul li a:hover{ + color: #fff; + } + input[type="checkbox"]{ + display: none; + } + .content{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + z-index: -1; + text-align: center; + width: 100%; + color: #202020; + } + .content .title{ + font-size: 40px; + font-weight: 700; + } + .content p{ + font-size: 35px; + font-weight: 600; + } + + @keyframes rotate { + 0%{ + filter: hue-rotate(0deg); + } + 100%{ + filter: hue-rotate(360deg); + } + } + + + +.social +{ + + position: absolute; + z-index: 10; + bottom: 0; + display: flex; + justify-content: center; + align-items: center; + filter: brightness(0) invert(1); +} +.social li +{ + list-style: none; + +} +.social li a +{ + + display: inline-block; + margin-right: 20px; + filter: invert(1); + transform: scale(0.5); + transition: 0.5s; +} +.social li a:hover +{ + transform: scale(0.5) translateY(-15px); +} + +img.github { + width: 70px; + height: auto; +} \ No newline at end of file diff --git a/Group 3/Website/index.html b/Group 3/Website/index.html new file mode 100644 index 0000000..18d3f15 --- /dev/null +++ b/Group 3/Website/index.html @@ -0,0 +1,40 @@ + + + + + + + + + Film Noir + + + +
+

FILM NOIR

+
+

+ "After all, crime is only… a left-handed form of human endeavor." +

+
+ + + +
+ +
+
+
+
+ +
+ + + + diff --git a/Group 3/data/IMDB_noir_1000.csv b/Group 3/data/IMDB_noir_1000.csv new file mode 100644 index 0000000..0c7e68d --- /dev/null +++ b/Group 3/data/IMDB_noir_1000.csv @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3bf95b6a8a96b55b41d554b27d42d2252235f4785737c3ec5703e7a6a08e94eb +size 342401 diff --git a/Group 3/data/stopwords.txt b/Group 3/data/stopwords.txt new file mode 100644 index 0000000..b39bc3e --- /dev/null +++ b/Group 3/data/stopwords.txt @@ -0,0 +1,733 @@ +x +y +your +yours +yourself +yourselves +you +yond +yonder +yon +ye +yet +z +zillion +j +u +umpteen +usually +us +username +uponed +upons +uponing +upon +ups +upping +upped +up +unto +until +unless +unlike +unliker +unlikest +under +underneath +use +used +usedest +r +rath +rather +rathest +rathe +re +relate +related +relatively +regarding +really +res +respecting +respectively +q +quite +que +qua +n +neither +neaths +neath +nethe +nethermost +necessary +necessariest +necessarier +never +nevertheless +nigh +nighest +nigher +nine +noone +nobody +nobodies +nowhere +nowheres +no +noes +nor +nos +no-one +none +not +notwithstanding +nothings +nothing +nathless +natheless +t +ten +tills +till +tilled +tilling +to +towards +toward +towardest +towarder +together +too +thy +thyself +thus +than +that +those +thou +though +thous +thouses +thoroughest +thorougher +thorough +thoroughly +thru +thruer +thruest +thro +through +throughout +throughest +througher +thine +this +thises +they +thee +the +then +thence +thenest +thener +them +themselves +these +therer +there +thereby +therest +thereafter +therein +thereupon +therefore +their +theirs +thing +things +three +two +o +oh +owt +owning +owned +own +owns +others +other +otherwise +otherwisest +otherwiser +of +often +oftener +oftenest +off +offs +offest +one +ought +oughts +our +ours +ourselves +ourself +out +outest +outed +outwith +outs +outside +over +overallest +overaller +overalls +overall +overs +or +orer +orest +on +oneself +onest +ons +onto +a +atween +at +athwart +atop +afore +afterward +afterwards +after +afterest +afterer +ain +an +any +anything +anybody +anyone +anyhow +anywhere +anent +anear +and +andor +another +around +ares +are +aest +aer +against +again +accordingly +abaft +abafter +abaftest +abovest +above +abover +abouter +aboutest +about +aid +amidst +amid +among +amongst +apartest +aparter +apart +appeared +appears +appear +appearing +appropriating +appropriate +appropriatest +appropriates +appropriater +appropriated +already +always +also +along +alongside +although +almost +all +allest +aller +allyou +alls +albeit +awfully +as +aside +asides +aslant +ases +astrider +astride +astridest +astraddlest +astraddler +astraddle +availablest +availabler +available +aughts +aught +vs +v +variousest +variouser +various +via +vis-a-vis +vis-a-viser +vis-a-visest +viz +very +veriest +verier +versus +k +g +go +gone +good +got +gotta +gotten +get +gets +getting +b +by +byandby +by-and-by +bist +both +but +buts +be +beyond +because +became +becomes +become +becoming +becomings +becominger +becomingest +behind +behinds +before +beforehand +beforehandest +beforehander +bettered +betters +better +bettering +betwixt +between +beneath +been +below +besides +beside +m +my +myself +mucher +muchest +much +must +musts +musths +musth +main +make +mayest +many +mauger +maugre +me +meanwhiles +meanwhile +mostly +most +moreover +more +might +mights +midst +midsts +h +huh +humph +he +hers +herself +her +hereby +herein +hereafters +hereafter +hereupon +hence +hadst +had +having +haves +have +has +hast +hardly +hae +hath +him +himself +hither +hitherest +hitherer +his +how-do-you-do +however +how +howbeit +howdoyoudo +hoos +hoo +w +woulded +woulding +would +woulds +was +wast +we +wert +were +with +withal +without +within +why +what +whatever +whateverer +whateverest +whatsoeverer +whatsoeverest +whatsoever +whence +whencesoever +whenever +whensoever +when +whenas +whether +wheen +whereto +whereupon +wherever +whereon +whereof +where +whereby +wherewithal +wherewith +whereinto +wherein +whereafter +whereas +wheresoever +wherefrom +which +whichever +whichsoever +whilst +while +whiles +whithersoever +whither +whoever +whosoever +whoso +whose +whomever +s +syne +syn +shalling +shall +shalled +shalls +shoulding +should +shoulded +shoulds +she +sayyid +sayid +said +saider +saidest +same +samest +sames +samer +saved +sans +sanses +sanserifs +sanserif +so +soer +soest +sobeit +someone +somebody +somehow +some +somewhere +somewhat +something +sometimest +sometimes +sometimer +sometime +several +severaler +severalest +serious +seriousest +seriouser +senza +send +sent +seem +seems +seemed +seemingest +seeminger +seemings +seven +summat +sups +sup +supping +supped +such +since +sine +sines +sith +six +stop +stopped +p +plaintiff +plenty +plenties +please +pleased +pleases +per +perhaps +particulars +particularly +particular +particularest +particularer +pro +providing +provides +provided +provide +probably +l +layabout +layabouts +latter +latterest +latterer +latterly +latters +lots +lotting +lotted +lot +lest +less +ie +ifs +if +i +info +information +itself +its +it +is +idem +idemer +idemest +immediate +immediately +immediatest +immediater +in +inwards +inwardest +inwarder +inward +inasmuch +into +instead +insofar +indicates +indicated +indicate +indicating +indeed +inc +f +fact +facts +fs +figupon +figupons +figuponing +figuponed +few +fewer +fewest +frae +from +failing +failings +five +furthers +furtherer +furthered +furtherest +further +furthering +furthermore +fourscore +followthrough +for +forwhy +fornenst +formerly +former +formerer +formerest +formers +forbye +forby +fore +forever +forer +fores +four +d +ddays +dday +do +doing +doings +doe +does +doth +downwarder +downwardest +downward +downwards +downs +done +doner +dones +donest +dos +dost +did +differentest +differenter +different +describing +describe +describes +described +despiting +despites +despited +despite +during +c +cum +circa +chez +cer +certain +certainest +certainer +cest +canst +cannot +cant +cants +canting +cantest +canted +co +could +couldst +comeon +comeons +come-ons +come-on +concerning +concerninger +concerningest +consequently +considering +e +eg +eight +either +even +evens +evenser +evensest +evened +evenest +ever +everyone +everything +everybody +everywhere +every +ere +each +et +etc +elsewhere +else +ex +excepted +excepts +except +excepting +exes +enough \ No newline at end of file