diff --git a/Mini_Project_SQL_with_Spark 5.6.ipynb b/Mini_Project_SQL_with_Spark 5.6.ipynb
new file mode 100644
index 000000000..e1bd71e6c
--- /dev/null
+++ b/Mini_Project_SQL_with_Spark 5.6.ipynb
@@ -0,0 +1 @@
+{"cells":[{"cell_type":"markdown","source":["## SQL at Scale with Spark SQL\n\nWelcome to the SQL mini project. For this project, you will use the Databricks Platform and work through a series of exercises using Spark SQL. The dataset size may not be too big but the intent here is to familiarize yourself with the Spark SQL interface which scales easily to huge datasets, without you having to worry about changing your SQL queries. \n\nThe data you need is present in the mini-project folder in the form of three CSV files. This data will be imported in Databricks to create the following tables under the __`country_club`__ database.\n\n \n1. The __`bookings`__ table,\n2. The __`facilities`__ table, and\n3. The __`members`__ table.\n\nYou will be uploading these datasets shortly into the Databricks platform to understand how to create a database within minutes! Once the database and the tables are populated, you will be focusing on the mini-project questions.\n\nIn the mini project, you'll be asked a series of questions. You can solve them using the databricks platform, but for the final deliverable,\nplease download this notebook as an IPython notebook (__`File -> Export -> IPython Notebook`__) and upload it to your GitHub."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"7dc8cef6-8322-4e3a-950b-757de959bbd7","inputWidgets":{},"title":""}}},{"cell_type":"markdown","source":["### Creating the Database\n\nWe will first create our database in which we will be creating our three tables of interest"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"3bd664ca-d7cc-4b4d-9c35-9957dd665c78","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql \ndrop database if exists country_club cascade;\ncreate database country_club;\nshow databases;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"98ba3faa-c4e8-48ef-9cc8-e2226e31582d","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["country_club"],["default"]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"databaseName","type":"\"string\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["
databaseName country_club default
"]}}],"execution_count":0},{"cell_type":"markdown","source":["### Creating the Tables\n\nIn this section, we will be creating the three tables of interest and populate them with the data from the CSV files already available to you. \nTo get started, first upload the three CSV files to the DBFS as depicted in the following figure\n\n\n\n\nOnce you have done this, please remember to execute the following code to build the dataframes which will be saved as tables in our database"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"89fe2dd6-f130-4979-abff-3cfd7eefc14f","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["# File location and type\nfile_location_bookings = \"/FileStore/tables/Bookings.csv\"\nfile_location_facilities = \"/FileStore/tables/Facilities.csv\"\nfile_location_members = \"/FileStore/tables/Members.csv\"\n\nfile_type = \"csv\"\n\n# CSV options\ninfer_schema = \"true\"\nfirst_row_is_header = \"true\"\ndelimiter = \",\"\n\n# The applied options are for CSV files. For other file types, these will be ignored.\nbookings_df = (spark.read.format(file_type) \n .option(\"inferSchema\", infer_schema) \n .option(\"header\", first_row_is_header) \n .option(\"sep\", delimiter) \n .load(file_location_bookings))\n\nfacilities_df = (spark.read.format(file_type) \n .option(\"inferSchema\", infer_schema) \n .option(\"header\", first_row_is_header) \n .option(\"sep\", delimiter) \n .load(file_location_facilities))\n\nmembers_df = (spark.read.format(file_type) \n .option(\"inferSchema\", infer_schema) \n .option(\"header\", first_row_is_header) \n .option(\"sep\", delimiter) \n .load(file_location_members))"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"936f355f-a485-4d3c-9a04-87bb55965d65","inputWidgets":{},"title":""}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["### Viewing the dataframe schemas\n\nWe can take a look at the schemas of our potential tables to be written to our database soon"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"f10ed1f5-65a6-4bc3-a902-606102a12222","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["print('Bookings Schema')\nbookings_df.printSchema()\nprint('Facilities Schema')\nfacilities_df.printSchema()\nprint('Members Schema')\nmembers_df.printSchema()"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"45dd3bb9-3cc9-415b-a0a7-891c8a0ade8c","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"datasetInfos":[],"data":"Bookings Schema\nroot\n |-- bookid: integer (nullable = true)\n |-- facid: integer (nullable = true)\n |-- memid: integer (nullable = true)\n |-- starttime: timestamp (nullable = true)\n |-- slots: integer (nullable = true)\n\nFacilities Schema\nroot\n |-- facid: integer (nullable = true)\n |-- name: string (nullable = true)\n |-- membercost: double (nullable = true)\n |-- guestcost: double (nullable = true)\n |-- initialoutlay: integer (nullable = true)\n |-- monthlymaintenance: integer (nullable = true)\n\nMembers Schema\nroot\n |-- memid: integer (nullable = true)\n |-- surname: string (nullable = true)\n |-- firstname: string (nullable = true)\n |-- address: string (nullable = true)\n |-- zipcode: integer (nullable = true)\n |-- telephone: string (nullable = true)\n |-- recommendedby: integer (nullable = true)\n |-- joindate: timestamp (nullable = true)\n\n","removedWidgets":[],"addedWidgets":{},"metadata":{},"type":"ansi","arguments":{}}},"output_type":"display_data","data":{"text/plain":["Bookings Schema\nroot\n |-- bookid: integer (nullable = true)\n |-- facid: integer (nullable = true)\n |-- memid: integer (nullable = true)\n |-- starttime: timestamp (nullable = true)\n |-- slots: integer (nullable = true)\n\nFacilities Schema\nroot\n |-- facid: integer (nullable = true)\n |-- name: string (nullable = true)\n |-- membercost: double (nullable = true)\n |-- guestcost: double (nullable = true)\n |-- initialoutlay: integer (nullable = true)\n |-- monthlymaintenance: integer (nullable = true)\n\nMembers Schema\nroot\n |-- memid: integer (nullable = true)\n |-- surname: string (nullable = true)\n |-- firstname: string (nullable = true)\n |-- address: string (nullable = true)\n |-- zipcode: integer (nullable = true)\n |-- telephone: string (nullable = true)\n |-- recommendedby: integer (nullable = true)\n |-- joindate: timestamp (nullable = true)\n\n"]}}],"execution_count":0},{"cell_type":"markdown","source":["### Create permanent tables\nWe will be creating three permanent tables here in our __`country_club`__ database as we discussed previously with the following code"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"8766081c-ff5f-4bfa-870c-dcb7f9d1698c","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["permanent_table_name_bookings = \"country_club.Bookings1\"\nbookings_df.write.format(\"parquet\").saveAsTable(permanent_table_name_bookings)\n\npermanent_table_name_facilities = \"country_club.Facilities1\"\nfacilities_df.write.format(\"parquet\").saveAsTable(permanent_table_name_facilities)\n\npermanent_table_name_members = \"country_club.Members1\"\nmembers_df.write.format(\"parquet\").saveAsTable(permanent_table_name_members)"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"a989021a-29b8-4159-9a8d-5f3a707379e3","inputWidgets":{},"title":""}},"outputs":[],"execution_count":0},{"cell_type":"markdown","source":["### Refresh tables and check them"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"a8d01df0-94bc-4097-845e-02e7e1637e4f","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nuse country_club;\nREFRESH table bookings1;\nREFRESH table facilities1;\nREFRESH table members1;\nshow tables;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"11600185-2386-4341-89cb-66d50b9a29ee","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["country_club","bookings1",false],["country_club","facilities1",false],["country_club","members1",false]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"database","type":"\"string\"","metadata":"{}"},{"name":"tableName","type":"\"string\"","metadata":"{}"},{"name":"isTemporary","type":"\"boolean\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["database tableName isTemporary country_club bookings1 false country_club facilities1 false country_club members1 false
"]}}],"execution_count":0},{"cell_type":"markdown","source":["### Test a sample SQL query\n\n__Note:__ You can use __`%sql`__ at the beginning of a cell and write SQL queries directly as seen in the following cell. Neat isn't it!"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"fdae66bd-5e7a-48f5-b715-ac4f761050ae","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nselect * from bookings1 limit 3"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"4339b5ab-b006-4458-aad5-b1f0a5c1ec87","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[[0,3,1,"2012-07-03T11:00:00.000+0000",2],[1,4,1,"2012-07-03T08:00:00.000+0000",2],[2,6,0,"2012-07-03T18:00:00.000+0000",2]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"bookid","type":"\"integer\"","metadata":"{}"},{"name":"facid","type":"\"integer\"","metadata":"{}"},{"name":"memid","type":"\"integer\"","metadata":"{}"},{"name":"starttime","type":"\"timestamp\"","metadata":"{}"},{"name":"slots","type":"\"integer\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["bookid facid memid starttime slots 0 3 1 2012-07-03T11:00:00.000+0000 2 1 4 1 2012-07-03T08:00:00.000+0000 2 2 6 0 2012-07-03T18:00:00.000+0000 2
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q1: Some of the facilities charge a fee to members, but some do not. Please list the names of the facilities that do."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"17c520af-243e-4a39-8a24-ea6aa3b6a368","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT name \nFROM facilities1 \nWHERE membercost = 0;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"21f137b3-edf7-4c65-853a-42b836fa3481","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Badminton Court"],["Table Tennis"],["Snooker Table"],["Pool Table"]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"name","type":"\"string\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["name Badminton Court Table Tennis Snooker Table Pool Table
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q2: How many facilities do not charge a fee to members?"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"79bf7b92-87d8-4efb-ba7d-f0edcb59cc4b","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT COUNT(*) AS Count \nFROM facilities1 \nWHERE membercost = 0;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"0b10a941-41e4-4145-b853-801859a6bfa5","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[[4]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"Count","type":"\"long\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":[""]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q3: How can you produce a list of facilities that charge a fee to members, where the fee is less than 20% of the facility's monthly maintenance cost? \n#### Return the facid, facility name, member cost, and monthly maintenance of the facilities in question."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"bc6cd845-0be6-4c95-ade4-7d52c3a13cc8","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT facid, \nname, \nmembercost, \nmonthlymaintenance \nFROM facilities1 \nWHERE (membercost > 0) \nAND (membercost < monthlymaintenance * .2)"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"d35a57f8-07ea-42dc-9f4f-53694daefff1","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[[0,"Tennis Court 1",5.0,200],[1,"Tennis Court 2",5.0,200],[4,"Massage Room 1",9.9,3000],[5,"Massage Room 2",9.9,3000],[6,"Squash Court",3.5,80]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"facid","type":"\"integer\"","metadata":"{}"},{"name":"name","type":"\"string\"","metadata":"{}"},{"name":"membercost","type":"\"double\"","metadata":"{}"},{"name":"monthlymaintenance","type":"\"integer\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["facid name membercost monthlymaintenance 0 Tennis Court 1 5.0 200 1 Tennis Court 2 5.0 200 4 Massage Room 1 9.9 3000 5 Massage Room 2 9.9 3000 6 Squash Court 3.5 80
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q4: How can you retrieve the details of facilities with ID 1 and 5? Write the query without using the OR operator."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"9bc31a3f-ab2c-413c-9b99-46581023ae0c","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT * \nFROM facilities1 \nWHERE facid IN (1, 5)"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"cb034b10-5840-43e9-a25a-62503daa7c09","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[[1,"Tennis Court 2",5.0,25.0,8000,200],[5,"Massage Room 2",9.9,80.0,4000,3000]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"facid","type":"\"integer\"","metadata":"{}"},{"name":"name","type":"\"string\"","metadata":"{}"},{"name":"membercost","type":"\"double\"","metadata":"{}"},{"name":"guestcost","type":"\"double\"","metadata":"{}"},{"name":"initialoutlay","type":"\"integer\"","metadata":"{}"},{"name":"monthlymaintenance","type":"\"integer\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["facid name membercost guestcost initialoutlay monthlymaintenance 1 Tennis Court 2 5.0 25.0 8000 200 5 Massage Room 2 9.9 80.0 4000 3000
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q5: How can you produce a list of facilities, with each labelled as 'cheap' or 'expensive', depending on if their monthly maintenance cost is more than $100? \n#### Return the name and monthly maintenance of the facilities in question."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"0e0302a2-2911-41be-9599-e12323e7f23c","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT name, \nmonthlymaintenance, \nCASE WHEN monthlymaintenance > 100 \nTHEN \"expensive\" \nELSE \"cheap\" END AS value \nFROM facilities1;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"41373ea4-9038-4c8f-842f-8aae7b074809","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Tennis Court 1",200,"expensive"],["Tennis Court 2",200,"expensive"],["Badminton Court",50,"cheap"],["Table Tennis",10,"cheap"],["Massage Room 1",3000,"expensive"],["Massage Room 2",3000,"expensive"],["Squash Court",80,"cheap"],["Snooker Table",15,"cheap"],["Pool Table",15,"cheap"]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"name","type":"\"string\"","metadata":"{}"},{"name":"monthlymaintenance","type":"\"integer\"","metadata":"{}"},{"name":"value","type":"\"string\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["name monthlymaintenance value Tennis Court 1 200 expensive Tennis Court 2 200 expensive Badminton Court 50 cheap Table Tennis 10 cheap Massage Room 1 3000 expensive Massage Room 2 3000 expensive Squash Court 80 cheap Snooker Table 15 cheap Pool Table 15 cheap
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q6: You'd like to get the first and last name of the last member(s) who signed up. Do not use the LIMIT clause for your solution."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"30f9e29f-9608-4c5d-a371-fc4cb22f9ea2","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT firstname, \nsurname \nFROM members1 \nWHERE joindate in (SELECT MAX(joindate) FROM members1)"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"74bf3f5b-924d-4d90-b978-ffd456c22f43","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Darren","Smith"]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"firstname","type":"\"string\"","metadata":"{}"},{"name":"surname","type":"\"string\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["firstname surname Darren Smith
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q7: How can you produce a list of all members who have used a tennis court?\n- Include in your output the name of the court, and the name of the member formatted as a single column. \n- Ensure no duplicate data\n- Also order by the member name."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"ded40971-9804-46e8-a647-5b9cefce363e","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT DISTINCT facilities1.name AS Court_Name, \nCONCAT(members1.firstname, \" \", members1.surname) AS Member_Name \nFROM ((bookings1 \nINNER JOIN members1 \nON bookings1.memid = members1.memid) \nINNER JOIN facilities1 \nON bookings1.facid = facilities1.facid) \nWHERE facilities1.name LIKE \"Tennis Court%\" \nORDER BY Member_Name;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"879ff42d-7f1d-47e6-a828-5cd82775c0ee","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Tennis Court 2","Anne Baker"],["Tennis Court 1","Anne Baker"],["Tennis Court 2","Burton Tracy"],["Tennis Court 1","Burton Tracy"],["Tennis Court 1","Charles Owen"],["Tennis Court 2","Charles Owen"],["Tennis Court 2","Darren Smith"],["Tennis Court 2","David Farrell"],["Tennis Court 1","David Farrell"],["Tennis Court 2","David Jones"],["Tennis Court 1","David Jones"],["Tennis Court 1","David Pinker"],["Tennis Court 1","Douglas Jones"],["Tennis Court 1","Erica Crumpet"],["Tennis Court 1","Florence Bader"],["Tennis Court 2","Florence Bader"],["Tennis Court 1","GUEST GUEST"],["Tennis Court 2","GUEST GUEST"],["Tennis Court 2","Gerald Butters"],["Tennis Court 1","Gerald Butters"],["Tennis Court 2","Henrietta Rumney"],["Tennis Court 1","Jack Smith"],["Tennis Court 2","Jack Smith"],["Tennis Court 2","Janice Joplette"],["Tennis Court 1","Janice Joplette"],["Tennis Court 2","Jemima Farrell"],["Tennis Court 1","Jemima Farrell"],["Tennis Court 1","Joan Coplin"],["Tennis Court 1","John Hunt"],["Tennis Court 2","John Hunt"],["Tennis Court 1","Matthew Genting"],["Tennis Court 2","Millicent Purview"],["Tennis Court 2","Nancy Dare"],["Tennis Court 1","Nancy Dare"],["Tennis Court 1","Ponder Stibbons"],["Tennis Court 2","Ponder Stibbons"],["Tennis Court 1","Ramnaresh Sarwin"],["Tennis Court 2","Ramnaresh Sarwin"],["Tennis Court 1","Tim Boothe"],["Tennis Court 2","Tim Boothe"],["Tennis Court 2","Tim Rownam"],["Tennis Court 1","Tim Rownam"],["Tennis Court 2","Timothy Baker"],["Tennis Court 1","Timothy Baker"],["Tennis Court 2","Tracy Smith"],["Tennis Court 1","Tracy Smith"]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"Court_Name","type":"\"string\"","metadata":"{}"},{"name":"Member_Name","type":"\"string\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["Court_Name Member_Name Tennis Court 2 Anne Baker Tennis Court 1 Anne Baker Tennis Court 2 Burton Tracy Tennis Court 1 Burton Tracy Tennis Court 1 Charles Owen Tennis Court 2 Charles Owen Tennis Court 2 Darren Smith Tennis Court 2 David Farrell Tennis Court 1 David Farrell Tennis Court 2 David Jones Tennis Court 1 David Jones Tennis Court 1 David Pinker Tennis Court 1 Douglas Jones Tennis Court 1 Erica Crumpet Tennis Court 1 Florence Bader Tennis Court 2 Florence Bader Tennis Court 1 GUEST GUEST Tennis Court 2 GUEST GUEST Tennis Court 2 Gerald Butters Tennis Court 1 Gerald Butters Tennis Court 2 Henrietta Rumney Tennis Court 1 Jack Smith Tennis Court 2 Jack Smith Tennis Court 2 Janice Joplette Tennis Court 1 Janice Joplette Tennis Court 2 Jemima Farrell Tennis Court 1 Jemima Farrell Tennis Court 1 Joan Coplin Tennis Court 1 John Hunt Tennis Court 2 John Hunt Tennis Court 1 Matthew Genting Tennis Court 2 Millicent Purview Tennis Court 2 Nancy Dare Tennis Court 1 Nancy Dare Tennis Court 1 Ponder Stibbons Tennis Court 2 Ponder Stibbons Tennis Court 1 Ramnaresh Sarwin Tennis Court 2 Ramnaresh Sarwin Tennis Court 1 Tim Boothe Tennis Court 2 Tim Boothe Tennis Court 2 Tim Rownam Tennis Court 1 Tim Rownam Tennis Court 2 Timothy Baker Tennis Court 1 Timothy Baker Tennis Court 2 Tracy Smith Tennis Court 1 Tracy Smith
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q8: How can you produce a list of bookings on the day of 2012-09-14 which will cost the member (or guest) more than $30? \n\n- Remember that guests have different costs to members (the listed costs are per half-hour 'slot')\n- The guest user's ID is always 0. \n\n#### Include in your output the name of the facility, the name of the member formatted as a single column, and the cost.\n\n- Order by descending cost, and do not use any subqueries."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"eb23ed45-ca1c-46b3-9371-ccf3d2904fb9","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT facilities1.name AS Facility_Name,\nCONCAT(members1.firstname, \" \", members1.surname) AS Member_Name,\nCASE WHEN bookings1.memid = 0 \nTHEN facilities1.guestcost * bookings1.slots \nELSE facilities1.membercost * bookings1.slots END AS Total_Cost \nFROM ((bookings1 \nINNER JOIN facilities1 \nON bookings1.facid = facilities1.facid) \nINNER JOIN members1 \nON bookings1.memid = members1.memid) \nWHERE bookings1.starttime LIKE \"2012-09-14%\" \nAND CASE WHEN bookings1.memid = 0 \nTHEN facilities1.guestcost * bookings1.slots > 30 \nELSE facilities1.membercost * bookings1.slots > 30 END \nORDER BY Total_Cost desc;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"3ec2175c-8f0f-45fd-ae9a-414a6fb3ce28","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Massage Room 2","GUEST GUEST",320.0],["Massage Room 1","GUEST GUEST",160.0],["Massage Room 1","GUEST GUEST",160.0],["Massage Room 1","GUEST GUEST",160.0],["Tennis Court 2","GUEST GUEST",150.0],["Tennis Court 2","GUEST GUEST",75.0],["Tennis Court 1","GUEST GUEST",75.0],["Tennis Court 1","GUEST GUEST",75.0],["Squash Court","GUEST GUEST",70.0],["Massage Room 1","Jemima Farrell",39.6],["Squash Court","GUEST GUEST",35.0],["Squash Court","GUEST GUEST",35.0]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"Facility_Name","type":"\"string\"","metadata":"{}"},{"name":"Member_Name","type":"\"string\"","metadata":"{}"},{"name":"Total_Cost","type":"\"double\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["Facility_Name Member_Name Total_Cost Massage Room 2 GUEST GUEST 320.0 Massage Room 1 GUEST GUEST 160.0 Massage Room 1 GUEST GUEST 160.0 Massage Room 1 GUEST GUEST 160.0 Tennis Court 2 GUEST GUEST 150.0 Tennis Court 2 GUEST GUEST 75.0 Tennis Court 1 GUEST GUEST 75.0 Tennis Court 1 GUEST GUEST 75.0 Squash Court GUEST GUEST 70.0 Massage Room 1 Jemima Farrell 39.6 Squash Court GUEST GUEST 35.0 Squash Court GUEST GUEST 35.0
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q9: This time, produce the same result as in Q8, but using a subquery."],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"757c6468-3d07-42e2-b2b9-59e82b96350a","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT facilities1.name AS Facility_Name,\nCONCAT(members1.firstname, \" \",members1.surname) AS Member_Name,\nCASE WHEN booking.memid = 0 \nTHEN facilities1.guestcost * booking.slots \nELSE facilities1.membercost * booking.slots END AS Total_Cost \nFROM \n(((SELECT * \nFROM bookings1 \nWHERE starttime LIKE \"2012-09-14%\") AS booking \nINNER JOIN facilities1 \nON booking.facid = facilities1.facid) \nINNER JOIN members1 \nON booking.memid = members1.memid) \nWHERE CASE WHEN booking.memid = 0 THEN facilities1.guestcost * booking.slots > 30 ELSE facilities1.membercost * booking.slots > 30 END \nORDER BY Total_Cost desc;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"72f9d8b6-2d51-4af1-9fa1-d183a0369d30","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Massage Room 2","GUEST GUEST",320.0],["Massage Room 1","GUEST GUEST",160.0],["Massage Room 1","GUEST GUEST",160.0],["Massage Room 1","GUEST GUEST",160.0],["Tennis Court 2","GUEST GUEST",150.0],["Tennis Court 2","GUEST GUEST",75.0],["Tennis Court 1","GUEST GUEST",75.0],["Tennis Court 1","GUEST GUEST",75.0],["Squash Court","GUEST GUEST",70.0],["Massage Room 1","Jemima Farrell",39.6],["Squash Court","GUEST GUEST",35.0],["Squash Court","GUEST GUEST",35.0]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"Facility_Name","type":"\"string\"","metadata":"{}"},{"name":"Member_Name","type":"\"string\"","metadata":"{}"},{"name":"Total_Cost","type":"\"double\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["Facility_Name Member_Name Total_Cost Massage Room 2 GUEST GUEST 320.0 Massage Room 1 GUEST GUEST 160.0 Massage Room 1 GUEST GUEST 160.0 Massage Room 1 GUEST GUEST 160.0 Tennis Court 2 GUEST GUEST 150.0 Tennis Court 2 GUEST GUEST 75.0 Tennis Court 1 GUEST GUEST 75.0 Tennis Court 1 GUEST GUEST 75.0 Squash Court GUEST GUEST 70.0 Massage Room 1 Jemima Farrell 39.6 Squash Court GUEST GUEST 35.0 Squash Court GUEST GUEST 35.0
"]}}],"execution_count":0},{"cell_type":"markdown","source":["#### Q10: Produce a list of facilities with a total revenue less than 1000.\n- The output should have facility name and total revenue, sorted by revenue. \n- Remember that there's a different cost for guests and members!"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"dc14e8de-3daa-4339-b78c-2a8d78e599d1","inputWidgets":{},"title":""}}},{"cell_type":"code","source":["%sql\nSELECT facilities1.name,\nSUM(CASE WHEN bookings1.memid = 0 \nTHEN facilities1.guestcost * bookings1.slots \nELSE facilities1.membercost * bookings1.slots END) AS Total_Revenue \nFROM \n((bookings1 \nINNER JOIN facilities1 \nON bookings1.facid = facilities1.facid) \nINNER JOIN members1 \nON bookings1.memid = members1.memid) \nGROUP BY facilities1.name \nHAVING SUM(CASE WHEN bookings1.memid = 0 THEN facilities1.guestcost * bookings1.slots ELSE facilities1.membercost * bookings1.slots END) < 1000 \nORDER BY Total_Revenue;"],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{"implicitDf":true},"nuid":"53422808-236b-4ebd-af5f-abc9c1bb70de","inputWidgets":{},"title":""}},"outputs":[{"output_type":"display_data","metadata":{"application/vnd.databricks.v1+output":{"overflow":false,"datasetInfos":[],"data":[["Table Tennis",180.0],["Snooker Table",240.0],["Pool Table",270.0]],"plotOptions":{"displayType":"table","customPlotOptions":{},"pivotColumns":null,"pivotAggregation":null,"xColumns":null,"yColumns":null},"columnCustomDisplayInfos":{},"aggType":"","isJsonSchema":true,"removedWidgets":[],"aggSchema":[],"schema":[{"name":"name","type":"\"string\"","metadata":"{}"},{"name":"Total_Revenue","type":"\"double\"","metadata":"{}"}],"aggError":"","aggData":[],"addedWidgets":{},"metadata":{},"dbfsResultPath":null,"type":"table","aggOverflow":false,"aggSeriesLimitReached":false,"arguments":{}}},"output_type":"display_data","data":{"text/html":["name Total_Revenue Table Tennis 180.0 Snooker Table 240.0 Pool Table 270.0
"]}}],"execution_count":0},{"cell_type":"code","source":[""],"metadata":{"application/vnd.databricks.v1+cell":{"showTitle":false,"cellMetadata":{},"nuid":"1ff7e759-05a7-4e6f-8e4f-9cc05a74316c","inputWidgets":{},"title":""}},"outputs":[],"execution_count":0}],"metadata":{"name":"Mini_Project_SQL_with_Spark","notebookId":1931807081501742,"application/vnd.databricks.v1+notebook":{"notebookName":"Mini_Project_SQL_with_Spark","dashboards":[],"notebookMetadata":{"pythonIndentUnit":4,"mostRecentlyExecutedCommandWithImplicitDF":{"commandId":551598812990950,"dataframes":["_sqldf"]}},"language":"python","widgets":{},"notebookOrigID":551598812990935}},"nbformat":4,"nbformat_minor":0}
diff --git a/mec-3.4.1-api-mini-project/.env b/mec-3.4.1-api-mini-project/.env
index 5d011ea41..8b1378917 100644
--- a/mec-3.4.1-api-mini-project/.env
+++ b/mec-3.4.1-api-mini-project/.env
@@ -1 +1 @@
-NASDAQ_API_KEY=KRfk96yoWvruWZ-LjPb
+
diff --git a/mec-3.4.1-api-mini-project/api_data_wrangling_mini_project.ipynb b/mec-3.4.1-api-mini-project/api_data_wrangling_mini_project.ipynb
index 0d34bd5cc..e0b34166d 100755
--- a/mec-3.4.1-api-mini-project/api_data_wrangling_mini_project.ipynb
+++ b/mec-3.4.1-api-mini-project/api_data_wrangling_mini_project.ipynb
@@ -2,147 +2,151 @@
"cells": [
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"This exercise will require you to pull some data from https://data.nasdaq.com/ (formerly Quandl API)."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"As a first step, you will need to register a free account on the https://data.nasdaq.com/ website."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "After you register, you will be provided with a unique API key, that you should store:\r\n",
- "\r\n",
- "*Note*: Use a `.env` file and put your key in there and `python-dotenv` to access it in this notebook. \r\n",
- "\r\n",
- "The code below uses a key that was used when generating this project but has since been deleted. Never submit your keys to source control. There is a `.env-example` file in this repository to illusrtate what you need. Copy that to a file called `.env` and use your own api key in that `.env` file. Make sure you also have a `.gitignore` file with a line for `.env` added to it. \r\n",
- "\r\n",
+ "After you register, you will be provided with a unique API key, that you should store:\n",
+ "\n",
+ "*Note*: Use a `.env` file and put your key in there and `python-dotenv` to access it in this notebook. \n",
+ "\n",
+ "The code below uses a key that was used when generating this project but has since been deleted. Never submit your keys to source control. There is a `.env-example` file in this repository to illusrtate what you need. Copy that to a file called `.env` and use your own api key in that `.env` file. Make sure you also have a `.gitignore` file with a line for `.env` added to it. \n",
+ "\n",
"The standard Python gitignore is [here](https://github.com/github/gitignore/blob/master/Python.gitignore) you can just copy that. "
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "7MadrSm5uJz-31r7rF4z\n"
+ ]
+ }
+ ],
"source": [
"# get api key from your .env file\n",
"import os\n",
"from dotenv import load_dotenv # if missing this module, simply run `pip install python-dotenv`\n",
"\n",
"load_dotenv()\n",
- "API_KEY = os.getenv('NASDAQ_API_KEY')\n",
+ "API_KEY = os.getenv('API_KEY')\n",
"\n",
"print(API_KEY)"
- ],
- "outputs": [
- {
- "output_type": "stream",
- "name": "stdout",
- "text": [
- "KRfk96yoWvruWZ-LjPbo\n"
- ]
- }
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Nasdaq Data has a large number of data sources, but, unfortunately, most of them require a Premium subscription. Still, there are also a good number of free datasets."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"For this mini project, we will focus on equities data from the Frankfurt Stock Exhange (FSE), which is available for free. We'll try and analyze the stock prices of a company called Carl Zeiss Meditec, which manufactures tools for eye examinations, as well as medical lasers for laser eye surgery: https://www.zeiss.com/meditec/int/home.html. The company is listed under the stock ticker AFX_X."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"You can find the detailed Nasdaq Data API instructions here: https://docs.data.nasdaq.com/docs/in-depth-usage"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"While there is a dedicated Python package for connecting to the Nasdaq API, we would prefer that you use the *requests* package, which can be easily downloaded using *pip* or *conda*. You can find the documentation for the package here: http://docs.python-requests.org/en/master/ "
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Finally, apart from the *requests* package, you are encouraged to not use any third party Python packages, such as *pandas*, and instead focus on what's available in the Python Standard Library (the *collections* module might come in handy: https://pymotw.com/3/collections/).\n",
"Also, since you won't have access to DataFrames, you are encouraged to us Python's native data structures - preferably dictionaries, though some questions can also be answered using lists.\n",
"You can read more on these data structures here: https://docs.python.org/3/tutorial/datastructures.html"
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"Keep in mind that the JSON responses you will be getting from the API map almost one-to-one to Python's dictionaries. Unfortunately, they can be very nested, so make sure you read up on indexing dictionaries in the documentation provided above."
- ],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 6,
- "source": [
- "# First, import the relevant modules"
- ],
+ "execution_count": 4,
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": [
+ "import requests"
+ ]
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
- "Note: API's can change a bit with each version, for this exercise it is reccomended to use the nasdaq api at `https://data.nasdaq.com/api/v3/`. This is the same api as what used to be quandl so `https://www.quandl.com/api/v3/` should work too.\r\n",
- "\r\n",
+ "Note: API's can change a bit with each version, for this exercise it is reccomended to use the nasdaq api at `https://data.nasdaq.com/api/v3/`. This is the same api as what used to be quandl so `https://www.quandl.com/api/v3/` should work too.\n",
+ "\n",
"Hint: We are looking for the `AFX_X` data on the `datasets/FSE/` dataset."
- ],
- "metadata": {}
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "source": [
- "# Now, call the Nasdaq API and pull out a small sample of the data (only one day) to get a glimpse\n",
- "# into the JSON structure that will be returned"
- ],
- "outputs": [],
- "metadata": {}
+ ]
},
{
"cell_type": "code",
- "execution_count": 9,
- "source": [
- "# Inspect the JSON structure of the object you created, and take note of how nested it is,\n",
- "# as well as the overall structure"
- ],
+ "execution_count": 50,
+ "metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "{'dataset': {'id': 10095370, 'dataset_code': 'AFX_X', 'database_code': 'FSE', 'name': 'Carl Zeiss Meditec (AFX_X)', 'description': 'Stock Prices for Carl Zeiss Meditec (2020-11-02) from the Frankfurt Stock Exchange. Trading System: Xetra ISIN: DE0005313704', 'refreshed_at': '2020-12-01T14:48:09.907Z', 'newest_available_date': '2020-12-01', 'oldest_available_date': '2000-06-07', 'column_names': ['Date', 'Open', 'High', 'Low', 'Close', 'Change', 'Traded Volume', 'Turnover', 'Last Price of the Day', 'Daily Traded Units', 'Daily Turnover'], 'frequency': 'daily', 'type': 'Time Series', 'premium': False, 'limit': None, 'transform': None, 'column_index': None, 'start_date': '2021-01-03', 'end_date': '2020-12-01', 'data': [], 'collapse': None, 'order': None, 'database_id': 6129}}\n"
+ "\n"
]
}
],
- "metadata": {}
+ "source": [
+ "#1. Collect data from the Franfurt Stock Exchange, for the ticker AFX_X, for the whole year 2017 (keep in mind that the date format is YYYY-MM-DD).\n",
+ "fse = requests.get(f'https://data.nasdaq.com/api/v3/datasets/FSE/AFX_X.json?api_key={API_KEY}')\n",
+ "fse = requests.get(f'https://data.nasdaq.com/api/v3/datasets/FSE/VNA_X?start_date=2017-01-01&end_date=2017-12-31&api_key={API_KEY}')\n",
+ "#2. Convert the returned JSON object into a Python dictionary.\n",
+ "json = fse.json()\n",
+ "print(type(json))"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 79,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": []
},
{
"cell_type": "markdown",
+ "metadata": {},
"source": [
"These are your tasks for this mini project:\n",
"\n",
@@ -153,28 +157,449 @@
"5. What was the largest change between any two days (based on Closing Price)?\n",
"6. What was the average daily trading volume during this year?\n",
"7. (Optional) What was the median trading volume during this year. (Note: you may need to implement your own function for calculating the median.)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 58,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "['Date', 'Open', 'High', 'Low', 'Close', 'Change', 'Traded Volume', 'Turnover', 'Last Price of the Day', 'Daily Traded Units', 'Daily Turnover']\n"
+ ]
+ }
],
- "metadata": {}
+ "source": [
+ "print(json['dataset']['column_names'])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
- "source": [],
+ "execution_count": 81,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "[['2017-12-29', 41.225, 41.425, 41.145, 41.39, None, 601057.0, 24840221.0, None, None, None], ['2017-12-28', 41.3, 41.34, 41.095, 41.22, None, 608053.0, 25062545.0, None, None, None], ['2017-12-27', 41.01, 41.335, 40.815, 41.335, None, 732911.0, 30168070.0, None, None, None], ['2017-12-22', 40.64, 40.975, 40.585, 40.975, None, 843468.0, 34444774.0, None, None, None], ['2017-12-21', 41.085, 41.1, 40.565, 40.7, None, 1384516.0, 56441896.0, None, None, None], ['2017-12-20', 41.715, 41.895, 40.935, 41.035, None, 1411562.0, 58322057.0, None, None, None], ['2017-12-19', 41.95, 42.215, 41.625, 41.64, None, 1314959.0, 55010330.0, None, None, None], ['2017-12-18', 41.5, 42.05, 40.92, 41.88, None, 2098187.0, 87316028.0, None, None, None], ['2017-12-15', 40.72, 41.35, 40.68, 41.35, None, 2733044.0, 112478446.0, None, None, None], ['2017-12-14', 40.79, 41.0, 40.63, 40.94, None, 1243035.0, 50820573.0, None, None, None], ['2017-12-13', 41.205, 41.22, 40.81, 40.845, None, 1036110.0, 42434183.0, None, None, None], ['2017-12-12', 41.36, 41.435, 40.845, 41.08, None, 1477381.0, 60712041.0, None, None, None], ['2017-12-11', 41.175, 41.355, 41.04, 41.125, None, 1043727.0, 42973562.0, None, None, None], ['2017-12-08', 41.13, 41.45, 40.99, 41.22, None, 1289642.0, 53150892.0, None, None, None], ['2017-12-07', 40.74, 41.23, 40.57, 40.84, None, 1376033.0, 56276968.0, None, None, None], ['2017-12-06', 40.54, 40.64, 40.165, 40.6, None, 1205912.0, 48764021.0, None, None, None], ['2017-12-05', 40.05, 40.775, 39.97, 40.665, None, 1948545.0, 78968966.0, None, None, None], ['2017-12-04', 39.79, 40.11, 39.585, 39.77, None, 1321182.0, 52627362.0, None, None, None], ['2017-12-01', 39.545, 39.845, 39.35, 39.44, None, 1495815.0, 59136311.0, None, None, None], ['2017-11-30', 38.95, 39.7, 38.915, 39.545, None, 3040962.0, 120157342.0, None, None, None], ['2017-11-29', 39.95, 40.025, 38.91, 39.025, None, 1493605.0, 58739775.0, None, None, None], ['2017-11-28', 39.825, 39.905, 39.5, 39.7, None, 1018883.0, 40423811.0, None, None, None], ['2017-11-27', 39.7, 40.04, 39.63, 39.8, None, 1095660.0, 43654747.0, None, None, None], ['2017-11-24', 39.595, 39.92, 39.355, 39.65, None, 999933.0, 39641078.0, None, None, None], ['2017-11-23', 39.275, 39.62, 39.21, 39.52, None, 1161907.0, 45849993.0, None, None, None], ['2017-11-22', 39.955, 40.03, 39.365, 39.365, None, 985055.0, 39043700.0, None, None, None], ['2017-11-21', 39.445, 40.23, 39.33, 39.93, None, 1531366.0, 61107977.0, None, None, None], ['2017-11-20', 39.245, 39.43, 39.14, 39.3, None, 1057105.0, 41546170.0, None, None, None], ['2017-11-17', 39.7, 39.79, 39.375, 39.375, None, 1048127.0, 41459027.0, None, None, None], ['2017-11-16', 39.45, 39.785, 39.3, 39.705, None, 1010748.0, 40046253.0, None, None, None], ['2017-11-15', 39.495, 39.495, 38.77, 39.265, None, 1408279.0, 55104780.0, None, None, None], ['2017-11-14', 39.53, 39.63, 39.285, 39.5, None, 1103999.0, 43589611.0, None, None, None], ['2017-11-13', 39.26, 39.465, 39.01, 39.43, None, 1423857.0, 55975814.0, None, None, None], ['2017-11-10', 39.24, 39.445, 38.935, 39.145, None, 2133301.0, 83564952.0, None, None, None], ['2017-11-09', 39.245, 39.29, 38.805, 39.115, None, 1762497.0, 68815373.0, None, None, None], ['2017-11-08', 39.22, 39.54, 38.205, 39.165, None, 1841312.0, 72049610.0, None, None, None], ['2017-11-07', 39.0, 39.165, 38.73, 39.05, None, 1378274.0, 53770377.0, None, None, None], ['2017-11-06', 38.8, 38.975, 38.68, 38.81, None, 773139.0, 30002877.0, None, None, None], ['2017-11-03', 38.72, 38.815, 38.55, 38.73, None, 1147296.0, 44421907.0, None, None, None], ['2017-11-02', 38.165, 38.69, 38.145, 38.49, None, 1744271.0, 67156177.0, None, None, None], ['2017-11-01', 38.1, 38.315, 37.54, 38.2, None, 1810355.0, 69008167.0, None, None, None], ['2017-10-30', 37.32, 37.76, 37.25, 37.76, None, 1259359.0, 47379195.0, None, None, None], ['2017-10-27', 36.9, 37.33, 36.79, 37.18, None, 1362626.0, 50636915.0, None, None, None], ['2017-10-26', 36.425, 36.775, 36.355, 36.67, None, 1773417.0, 64876374.0, None, None, None], ['2017-10-25', 36.5, 36.54, 36.21, 36.28, None, 1146901.0, 41641699.0, None, None, None], ['2017-10-24', 36.755, 37.1, 36.515, 36.64, None, 1182044.0, 43411836.0, None, None, None], ['2017-10-23', 37.63, 37.635, 36.855, 36.875, None, 1281333.0, 47497515.0, None, None, None], ['2017-10-20', 37.93, 37.96, 37.27, 37.45, None, 1180003.0, 44288477.0, None, None, None], ['2017-10-19', 37.885, 38.13, 37.55, 37.77, None, 1481919.0, 55992823.0, None, None, None], ['2017-10-18', 37.285, 37.835, 37.2, 37.685, None, 1179431.0, 44414462.0, None, None, None], ['2017-10-17', 37.19, 37.25, 36.99, 37.125, None, 959055.0, 35623810.0, None, None, None], ['2017-10-16', 36.91, 37.145, 36.695, 37.12, None, 796432.0, 29483832.0, None, None, None], ['2017-10-13', 36.93, 36.955, 36.665, 36.77, None, 1030081.0, 37900999.0, None, None, None], ['2017-10-12', 36.5, 36.995, 36.425, 36.88, None, 1131777.0, 41704147.0, None, None, None], ['2017-10-11', 36.28, 36.49, 36.095, 36.45, None, 741342.0, 26962219.0, None, None, None], ['2017-10-10', 36.36, 36.5, 36.08, 36.31, None, 1184571.0, 43063747.0, None, None, None], ['2017-10-09', 36.045, 36.145, 35.895, 36.125, None, 798410.0, 28795537.0, None, None, None], ['2017-10-06', 36.55, 36.585, 35.885, 35.97, None, 1780610.0, 64285160.0, None, None, None], ['2017-10-05', 36.82, 36.84, 36.35, 36.56, None, 1088678.0, 39791298.0, None, None, None], ['2017-10-04', 36.435, 36.945, 36.135, 36.745, None, 2021500.0, 74201081.0, None, None, None], ['2017-10-02', 36.17, 36.325, 36.0, 36.235, None, 981385.0, 35516802.0, None, None, None], ['2017-09-29', 35.845, 36.01, 35.75, 36.0, None, 1574374.0, 56587390.0, None, None, None], ['2017-09-28', 35.85, 35.885, 35.455, 35.805, None, 1391082.0, 49641573.0, None, None, None], ['2017-09-27', 36.4, 36.4, 35.675, 35.7, None, 1265947.0, 45369154.0, None, None, None], ['2017-09-26', 35.82, 36.515, 35.805, 36.25, None, 1461266.0, 53049635.0, None, None, None], ['2017-09-25', 35.505, 35.93, 35.45, 35.795, None, 864934.0, 30942056.0, None, None, None], ['2017-09-22', 35.41, 35.66, 35.32, 35.505, None, 848527.0, 30112639.0, None, None, None], ['2017-09-21', 35.815, 35.815, 35.35, 35.45, None, 1169809.0, 41477784.0, None, None, None], ['2017-09-20', 35.91, 36.01, 35.7, 35.91, None, 772531.0, 27712890.0, None, None, None], ['2017-09-19', 36.215, 36.26, 35.915, 35.97, None, 867630.0, 31271571.0, None, None, None], ['2017-09-18', 36.635, 36.69, 36.2, 36.22, None, 897147.0, 32668669.0, None, None, None], ['2017-09-15', 36.5, 36.52, 36.125, 36.435, None, 3900972.0, 142003486.0, None, None, None], ['2017-09-14', 36.395, 36.625, 36.275, 36.41, None, 1326481.0, 48313680.0, None, None, None], ['2017-09-13', 36.365, 36.575, 36.25, 36.48, None, 1222826.0, 44582558.0, None, None, None], ['2017-09-12', 36.48, 36.595, 36.36, 36.475, None, 1132496.0, 41307182.0, None, None, None], ['2017-09-11', 36.375, 36.52, 36.255, 36.4, None, 873615.0, 31805844.0, None, None, None], ['2017-09-08', 35.935, 36.305, 35.935, 36.195, None, 980317.0, 35462482.0, None, None, None], ['2017-09-07', 35.8, 35.995, 35.585, 35.935, None, 1244383.0, 44616052.0, None, None, None], ['2017-09-06', 35.0, 35.675, 34.925, 35.55, None, 1262464.0, 44764575.0, None, None, None], ['2017-09-05', 35.425, 35.455, 35.01, 35.195, None, 843906.0, 29727013.0, None, None, None], ['2017-09-04', 35.13, 35.385, 35.1, 35.3, None, 556925.0, 19645220.0, None, None, None], ['2017-09-01', 35.605, 35.685, 35.36, 35.42, None, 786143.0, 27887648.0, None, None, None], ['2017-08-31', 35.435, 35.69, 35.435, 35.505, None, 1190945.0, 42323783.0, None, None, None], ['2017-08-30', 35.16, 35.5, 35.005, 35.285, None, 1117782.0, 39481349.0, None, None, None], ['2017-08-29', 34.885, 35.07, 34.76, 34.945, None, 1153084.0, 40294995.0, None, None, None], ['2017-08-28', 35.02, 35.095, 34.765, 35.035, None, 575476.0, 20128131.0, None, None, None], ['2017-08-25', 35.25, 35.31, 34.985, 35.065, None, 978790.0, 34347195.0, None, None, None], ['2017-08-24', 35.25, 35.525, 35.21, 35.21, None, 808758.0, 28566900.0, None, None, None], ['2017-08-23', 35.445, 35.49, 35.185, 35.265, None, 762435.0, 26899770.0, None, None, None], ['2017-08-22', 35.45, 35.605, 35.4, 35.405, None, 765764.0, 27158693.0, None, None, None], ['2017-08-21', 35.115, 35.36, 34.97, 35.305, None, 778364.0, 27429654.0, None, None, None], ['2017-08-18', 35.305, 35.48, 35.19, 35.255, None, 1156950.0, 40858779.0, None, None, None], ['2017-08-17', 35.425, 35.81, 35.425, 35.49, None, 948061.0, 33743508.0, None, None, None], ['2017-08-16', 35.73, 35.925, 35.41, 35.47, None, 912185.0, 32414293.0, None, None, None], ['2017-08-15', 35.76, 35.885, 35.445, 35.605, None, 1031791.0, 36719404.0, None, None, None], ['2017-08-14', 35.275, 35.89, 35.2, 35.7, None, 1268298.0, 45247331.0, None, None, None], ['2017-08-11', 35.5, 35.64, 34.88, 35.09, None, 1376672.0, 48398546.0, None, None, None], ['2017-08-10', 35.64, 35.7, 35.315, 35.55, None, 954629.0, 33905737.0, None, None, None], ['2017-08-09', 35.54, 35.81, 35.415, 35.64, None, 1032164.0, 36780128.0, None, None, None], ['2017-08-08', 35.565, 35.79, 35.405, 35.71, None, 813306.0, 28992490.0, None, None, None], ['2017-08-07', 36.0, 36.0, 35.4, 35.625, None, 993748.0, 35384039.0, None, None, None], ['2017-08-04', 35.58, 36.005, 35.56, 35.9, None, 1048069.0, 37610121.0, None, None, None], ['2017-08-03', 35.4, 35.845, 35.335, 35.585, None, 1232461.0, 43873041.0, None, None, None], ['2017-08-02', 35.5, 35.77, 35.23, 35.44, None, 2159905.0, 76652742.0, None, None, None], ['2017-08-01', 34.185, 35.03, 34.185, 35.015, None, 1428589.0, 49719043.0, None, None, None], ['2017-07-31', 34.525, 34.625, 34.255, 34.255, None, 1226265.0, 42149590.0, None, None, None], ['2017-07-28', 34.91, 34.91, 34.32, 34.56, None, 1291761.0, 44621693.0, None, None, None], ['2017-07-27', 34.48, 35.345, 34.48, 35.005, None, 1345183.0, 47108133.0, None, None, None], ['2017-07-26', 34.315, 34.55, 34.19, 34.49, None, 1100747.0, 37890368.0, None, None, None], ['2017-07-25', 34.465, 34.57, 34.275, 34.39, None, 831703.0, 28627354.0, None, None, None], ['2017-07-24', 34.475, 34.705, 34.295, 34.38, None, 1065404.0, 36708290.0, None, None, None], ['2017-07-21', 34.42, 34.65, 34.275, 34.465, None, 1219659.0, 42017779.0, None, None, None], ['2017-07-20', 34.67, 34.845, 34.38, 34.43, None, 1120392.0, 38692096.0, None, None, None], ['2017-07-19', 34.585, 34.675, 34.425, 34.555, None, 933429.0, 32231381.0, None, None, None], ['2017-07-18', 34.575, 34.78, 34.48, 34.595, None, 1178023.0, 40774008.0, None, None, None], ['2017-07-17', 35.05, 35.125, 34.55, 34.65, None, 994306.0, 34508852.0, None, None, None], ['2017-07-14', 34.9, 35.175, 34.715, 35.01, None, 1164391.0, 40704830.0, None, None, None], ['2017-07-13', 34.87, 34.995, 34.7, 34.84, None, 909972.0, 31695835.0, None, None, None], ['2017-07-12', 34.16, 34.92, 34.13, 34.815, None, 1203034.0, 41655881.0, None, None, None], ['2017-07-11', 34.59, 34.59, 33.96, 34.17, None, 1193468.0, 40775450.0, None, None, None], ['2017-07-10', 34.145, 34.585, 34.145, 34.43, None, 1113906.0, 38372776.0, None, None, None], ['2017-07-07', 34.07, 34.08, 33.78, 33.95, None, 1155041.0, 39171093.0, None, None, None], ['2017-07-06', 34.525, 34.59, 33.74, 34.1, None, 1661288.0, 56571459.0, None, None, None], ['2017-07-05', 34.34, 34.45, 34.055, 34.445, None, 907138.0, 31133385.0, None, None, None], ['2017-07-04', 34.415, 34.54, 34.25, 34.405, None, 929186.0, 31955883.0, None, None, None], ['2017-07-03', 34.895, 34.91, 34.3, 34.53, None, 1081145.0, 37334057.0, None, None, None], ['2017-06-30', 34.49, 34.83, 34.205, 34.765, None, 1743689.0, 60419168.0, None, None, None], ['2017-06-29', 34.92, 35.215, 34.215, 34.545, None, 1702233.0, 58941623.0, None, None, None], ['2017-06-28', 34.96, 35.15, 34.6, 34.8, None, 1352427.0, 47155417.0, None, None, None], ['2017-06-27', 35.5, 35.59, 35.04, 35.125, None, 971323.0, 34191541.0, None, None, None], ['2017-06-26', 35.64, 35.78, 35.45, 35.5, None, 711806.0, 25324155.0, None, None, None], ['2017-06-23', 35.375, 35.74, 35.365, 35.6, None, 605987.0, 21578659.0, None, None, None], ['2017-06-22', 35.52, 35.555, 34.55, 35.4, None, 1133172.0, 40077360.0, None, None, None], ['2017-06-21', 35.995, 35.995, 35.42, 35.5, None, 1109333.0, 39488323.0, None, None, None], ['2017-06-20', 36.38, 36.385, 35.86, 35.965, None, 1102387.0, 39733201.0, None, None, None], ['2017-06-19', 36.45, 36.565, 36.155, 36.27, None, 751509.0, 27310028.0, None, None, None], ['2017-06-16', 36.285, 36.495, 36.035, 36.35, None, 2708923.0, 98420026.0, None, None, None], ['2017-06-15', 36.345, 36.7, 36.125, 36.185, None, 1394942.0, 50666215.0, None, None, None], ['2017-06-14', 35.95, 36.47, 35.81, 36.275, None, 1474349.0, 53508257.0, None, None, None], ['2017-06-13', 35.775, 36.085, 35.65, 35.83, None, 899809.0, 32285012.0, None, None, None], ['2017-06-12', 35.905, 36.0, 35.405, 35.61, None, 964494.0, 34340062.0, None, None, None], ['2017-06-09', 35.8, 36.03, 35.67, 35.995, None, 855293.0, 30725496.0, None, None, None], ['2017-06-08', 36.26, 36.43, 35.855, 35.89, None, 910894.0, 32860828.0, None, None, None], ['2017-06-07', 36.165, 36.56, 36.06, 36.28, None, 1522772.0, 55358099.0, None, None, None], ['2017-06-06', 35.87, 36.25, 35.535, 36.18, None, 2249405.0, 80988781.0, None, None, None], ['2017-06-02', 35.4, 35.915, 35.32, 35.905, None, 1509212.0, 53890609.0, None, None, None], ['2017-06-01', 34.805, 35.625, 34.635, 35.4, None, 2670943.0, 94268991.0, None, None, None], ['2017-05-31', 34.97, 35.275, 34.895, 34.975, None, 1606543.0, 56280617.0, None, None, None], ['2017-05-30', 34.815, 35.245, 34.745, 35.03, None, 1040767.0, 36479165.0, None, None, None], ['2017-05-29', 35.05, 35.065, 34.77, 34.85, None, 479585.0, 16721712.0, None, None, None], ['2017-05-26', 34.99, 35.28, 34.81, 34.98, None, 1060107.0, 37132136.0, None, None, None], ['2017-05-25', 35.1, 35.25, 34.835, 34.965, None, 744523.0, 26040310.0, None, None, None], ['2017-05-24', 34.955, 35.015, 34.305, 34.92, None, 1710780.0, 59474808.0, None, None, None], ['2017-05-23', 34.83, 34.87, 34.28, 34.495, None, 1399576.0, 48264736.0, None, None, None], ['2017-05-22', 34.39, 34.94, 34.38, 34.825, None, 1222210.0, 42488151.0, None, None, None], ['2017-05-19', 34.37, 34.73, 34.27, 34.35, None, 1819807.0, 62695579.0, None, None, None], ['2017-05-18', 34.45, 34.82, 34.185, 34.34, None, 2155789.0, 74159697.0, None, None, None], ['2017-05-17', 34.57, 34.78, 34.255, 34.66, None, 1915980.0, 66259874.0, None, None, None], ['2017-05-16', 35.655, 35.965, 35.54, 35.865, None, 1829267.0, 65483151.0, None, None, None], ['2017-05-15', 36.1, 36.185, 35.445, 35.655, None, 1621456.0, 57963632.0, None, None, None], ['2017-05-12', 35.55, 35.95, 35.505, 35.95, None, 2399764.0, 86010930.0, None, None, None], ['2017-05-11', 34.82, 35.765, 34.78, 35.55, None, 3126178.0, 110720040.0, None, None, None], ['2017-05-10', 34.65, 34.785, 34.415, 34.785, None, 1419844.0, 49222455.0, None, None, None], ['2017-05-09', 34.48, 34.97, 34.35, 34.64, None, 1750992.0, 60807785.0, None, None, None], ['2017-05-08', 34.15, 34.775, 34.15, 34.47, None, 1968354.0, 67951441.0, None, None, None], ['2017-05-05', 33.83, 34.145, 33.675, 34.085, None, 1485165.0, 50496085.0, None, None, None], ['2017-05-04', 33.685, 33.99, 33.42, 33.835, None, 1603664.0, 54226513.0, None, None, None], ['2017-05-03', 33.595, 33.765, 33.465, 33.59, None, 1248177.0, 41940157.0, None, None, None], ['2017-05-02', 33.39, 33.64, 33.045, 33.57, None, 2020909.0, 67578132.0, None, None, None], ['2017-04-28', 33.965, 33.965, 33.125, 33.235, None, 2250037.0, 74945444.0, None, None, None], ['2017-04-27', 33.75, 34.0, 33.615, 33.85, None, 1189265.0, 40232795.0, None, None, None], ['2017-04-26', 33.775, 33.985, 33.44, 33.89, None, 1173019.0, 39739022.0, None, None, None], ['2017-04-25', 33.43, 34.135, 33.33, 33.89, None, 1668864.0, 56484780.0, None, None, None], ['2017-04-24', 33.505, 33.61, 33.225, 33.38, None, 2505690.0, 83631889.0, None, None, None], ['2017-04-21', 33.645, 33.755, 33.195, 33.505, None, 1830004.0, 61197812.0, None, None, None], ['2017-04-20', 34.125, 34.175, 33.66, 33.7, None, 1464324.0, 49521743.0, None, None, None], ['2017-04-19', 34.315, 34.34, 33.98, 34.16, None, 1497935.0, 51127941.0, None, None, None], ['2017-04-18', 34.42, 34.585, 34.105, 34.375, None, 1456744.0, 49993484.0, None, None, None], ['2017-04-13', 34.3, 34.55, 34.25, 34.55, None, 1130793.0, 39005532.0, None, None, None], ['2017-04-12', 34.155, 34.525, 34.1, 34.355, None, 1418600.0, 48742545.0, None, None, None], ['2017-04-11', 33.905, 34.175, 33.89, 34.15, None, 1334812.0, 45501164.0, None, None, None], ['2017-04-10', 33.9, 33.95, 33.605, 33.945, None, 976008.0, 33022431.0, None, None, None], ['2017-04-07', 33.555, 33.89, 33.55, 33.81, None, 1245354.0, 42058867.0, None, None, None], ['2017-04-06', 33.44, 33.88, 33.44, 33.655, None, 1279422.0, 43062063.0, None, None, None], ['2017-04-05', 33.595, 33.67, 33.405, 33.51, None, 1247907.0, 41841367.0, None, None, None], ['2017-04-04', 33.14, 33.625, 33.12, 33.52, None, 1412273.0, 47301542.0, None, None, None], ['2017-04-03', 33.2, 33.2, 32.95, 33.185, None, 1098924.0, 36377790.0, None, None, None], ['2017-03-31', 32.585, 33.045, 32.55, 33.03, None, 1400053.0, 46049974.0, None, None, None], ['2017-03-30', 32.8, 32.805, 32.555, 32.715, None, 1138883.0, 37212643.0, None, None, None], ['2017-03-29', 32.45, 32.765, 32.295, 32.765, None, 1366373.0, 44540644.0, None, None, None], ['2017-03-28', 32.67, 32.765, 32.32, 32.46, None, 1358644.0, 44132290.0, None, None, None], ['2017-03-27', 32.6, 32.77, 32.405, 32.595, None, 990944.0, 32283093.0, None, None, None], ['2017-03-24', 32.52, 32.76, 32.485, 32.68, None, 948258.0, 30996490.0, None, None, None], ['2017-03-23', 32.445, 32.59, 32.32, 32.59, None, 1372593.0, 44624296.0, None, None, None], ['2017-03-22', 32.395, 32.61, 32.395, 32.445, None, 1331064.0, 43221125.0, None, None, None], ['2017-03-21', 32.58, 32.58, 32.4, 32.505, None, 1034376.0, 33593372.0, None, None, None], ['2017-03-20', 32.645, 32.745, 32.52, 32.55, None, 933804.0, 30443315.0, None, None, None], ['2017-03-17', 32.525, 32.745, 32.38, 32.71, None, 2486474.0, 81149012.0, None, None, None], ['2017-03-16', 32.49, 32.65, 32.43, 32.585, None, 2091661.0, 68106355.0, None, None, None], ['2017-03-15', 32.27, 32.27, 31.985, 32.215, None, 1154450.0, 37132114.0, None, None, None], ['2017-03-14', 32.025, 32.29, 31.92, 32.185, None, 1367474.0, 43883777.0, None, None, None], ['2017-03-13', 32.0, 32.28, 32.0, 32.1, None, 1344172.0, 43149844.0, None, None, None], ['2017-03-10', 32.765, 32.765, 32.005, 32.05, None, 2805533.0, 90397453.0, None, None, None], ['2017-03-09', 32.55, 32.87, 32.43, 32.655, None, 1521825.0, 49731230.0, None, None, None], ['2017-03-08', 32.59, 32.59, 32.27, 32.55, None, 1583434.0, 51386372.0, None, None, None], ['2017-03-07', 32.8, 33.18, 32.435, 32.62, None, 2264252.0, 74099675.0, None, None, None], ['2017-03-06', 32.665, 32.905, 32.575, 32.895, None, 1485150.0, 48649782.0, None, None, None], ['2017-03-03', 33.025, 33.04, 32.66, 32.82, None, 1780099.0, 58419579.0, None, None, None], ['2017-03-02', 33.095, 33.15, 32.89, 33.1, None, 1392995.0, 46026980.0, None, None, None], ['2017-03-01', 33.0, 33.09, 32.81, 33.06, None, 1587643.0, 52361412.0, None, None, None], ['2017-02-28', 33.025, 33.18, 32.625, 32.89, None, 2165586.0, 71214194.0, None, None, None], ['2017-02-27', 33.31, 33.315, 32.87, 33.04, None, 1242571.0, 41015807.0, None, None, None], ['2017-02-24', 33.35, 33.46, 33.085, 33.25, None, 1569880.0, 52174520.0, None, None, None], ['2017-02-23', 33.345, 33.405, 33.15, 33.35, None, 1112515.0, 37041481.0, None, None, None], ['2017-02-22', 33.0, 33.485, 32.97, 33.31, None, 1981963.0, 65992846.0, None, None, None], ['2017-02-21', 32.78, 33.075, 32.75, 32.95, None, 1321345.0, 43526332.0, None, None, None], ['2017-02-20', 33.0, 33.05, 32.835, 32.86, None, 701112.0, 23076010.0, None, None, None], ['2017-02-17', 32.83, 33.065, 32.62, 32.88, None, 1609227.0, 52901994.0, None, None, None], ['2017-02-16', 32.76, 32.94, 32.6, 32.865, None, 1368754.0, 44911948.0, None, None, None], ['2017-02-15', 32.615, 32.885, 32.535, 32.86, None, 1999129.0, 65480253.0, None, None, None], ['2017-02-14', 32.35, 32.515, 32.145, 32.505, None, 1588415.0, 51460458.0, None, None, None], ['2017-02-13', 32.355, 32.395, 32.15, 32.18, None, 1471864.0, 47486838.0, None, None, None], ['2017-02-10', 32.255, 32.29, 32.06, 32.29, None, 1471607.0, 47422355.0, None, None, None], ['2017-02-09', 32.365, 32.385, 31.935, 32.2, None, 2312232.0, 74509222.0, None, None, None], ['2017-02-08', 31.32, 32.32, 31.215, 32.2, None, 2809351.0, 89874852.0, None, None, None], ['2017-02-07', 30.67, 31.375, 30.59, 31.355, None, 1724119.0, 53663330.0, None, None, None], ['2017-02-06', 30.665, 30.835, 30.55, 30.58, None, 1514442.0, 46432461.0, None, None, None], ['2017-02-03', 30.795, 31.015, 30.66, 30.78, None, 1105674.0, 34038970.0, None, None, None], ['2017-02-02', 30.765, 30.915, 30.605, 30.665, None, 1362135.0, 41892577.0, None, None, None], ['2017-02-01', 30.63, 30.95, 30.505, 30.755, None, 1953175.0, 60079315.0, None, None, None], ['2017-01-31', 30.01, 30.365, 29.905, 30.27, None, 1571973.0, 47483499.0, None, None, None], ['2017-01-30', 30.05, 30.19, 29.745, 30.06, None, 1261362.0, 37810228.0, None, None, None], ['2017-01-27', 30.045, 30.08, 29.73, 30.015, None, 1361939.0, 40718988.0, None, None, None], ['2017-01-26', 30.07, 30.12, 29.81, 29.985, None, 1881781.0, 56384464.0, None, None, None], ['2017-01-25', 30.11, 30.145, 29.825, 29.955, None, 1918842.0, 57497812.0, None, None, None], ['2017-01-24', 30.46, 30.515, 30.05, 30.05, None, 1782575.0, 53883315.0, None, None, None], ['2017-01-23', 30.445, 30.555, 30.15, 30.385, None, 1923439.0, 58375436.0, None, None, None], ['2017-01-20', 30.42, 30.54, 30.005, 30.38, None, 1727697.0, 52422042.0, None, None, None], ['2017-01-19', 30.955, 30.955, 30.345, 30.45, None, 1737477.0, 53047844.0, None, None, None], ['2017-01-18', 30.95, 31.065, 30.775, 30.995, None, 1194228.0, 36964666.0, None, None, None], ['2017-01-17', 31.165, 31.17, 30.79, 30.9, None, 1208729.0, 37359507.0, None, None, None], ['2017-01-16', 30.93, 31.35, 30.93, 31.19, None, 920478.0, 28727634.0, None, None, None], ['2017-01-13', 31.215, 31.38, 30.88, 30.95, None, 1134887.0, 35256121.0, None, None, None], ['2017-01-12', 31.4, 31.44, 31.095, 31.16, None, 1269233.0, 39595118.0, None, None, None], ['2017-01-11', 31.39, 31.535, 31.255, 31.4, None, 1181293.0, 37089422.0, None, None, None], ['2017-01-10', 31.09, 31.525, 31.02, 31.475, None, 1241573.0, 38995926.0, None, None, None], ['2017-01-09', 31.38, 31.475, 31.025, 31.025, None, 1007257.0, 31355905.0, None, None, None], ['2017-01-06', 31.425, 31.75, 31.175, 31.25, None, 1236453.0, 38846256.0, None, None, None], ['2017-01-05', 31.065, 31.45, 31.03, 31.405, None, 1652789.0, 51686972.0, None, None, None], ['2017-01-04', 30.85, 30.96, 30.44, 30.8, None, 1265640.0, 38936241.0, None, None, None], ['2017-01-03', 31.48, 31.48, 30.745, 30.8, None, 1613584.0, 49922671.0, None, None, None], ['2017-01-02', 31.05, 31.48, 30.865, 31.35, None, 574317.0, 17953577.0, None, None, None]]\n"
+ ]
+ }
+ ],
+ "source": [
+ "dataset = json['dataset']['data']\n",
+ "print(dataset)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 88,
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": [
+ "#3. Calculate what the highest and lowest opening prices were for the stock in this period.\n",
+ "open_prices = {}\n",
+ "for data in dataset:\n",
+ " open_prices[data[0]] = data[1]\n",
+ "open_max = max(open_prices, key=open_prices.get), ':', max(open_prices.values())\n",
+ "open_min = min(open_prices, key=open_prices.get), ':', min(open_prices.values())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 89,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "('2017-12-19', ':', 41.95)\n",
+ "('2017-01-31', ':', 30.01)\n"
+ ]
+ }
+ ],
+ "source": [
+ "print(open_max)\n",
+ "print(open_min)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 92,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "('2017-11-08', ':', 1.3350000000000009)\n"
+ ]
+ }
+ ],
+ "source": [
+ "#4. What was the largest change in any one day (based on High and Low price)?\n",
+ "change_in_day = {}\n",
+ "for data in dataset:\n",
+ " change_in_day[data[0]] = data[2] - data[3]\n",
+ "max_change_in_day = max(change_in_day, key=change_in_day.get), ':', max(change_in_day.values())\n",
+ "print(max_change_in_day)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 97,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "(('2017-05-17', 'to', '2017-05-16'), ':', 1.2050000000000054)\n"
+ ]
+ }
+ ],
+ "source": [
+ "#5. What was the largest change between any two days (based on Closing Price)?\n",
+ "change_btw_days = {}\n",
+ "for i in range(len(dataset) - 1):\n",
+ " change_btw_days[dataset[i][0], 'to', dataset[i+1][0]] = abs(dataset[i][4] - dataset[i+1][4])\n",
+ "max_change_btw_days = max(change_btw_days, key=change_btw_days.get), \":\", max(change_btw_days.values())\n",
+ "print(max_change_btw_days)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 104,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1356351.1746031747\n"
+ ]
+ }
+ ],
+ "source": [
+ "#6. What was the average daily trading volume during this year?\n",
+ "volumes = []\n",
+ "for data in dataset:\n",
+ " volumes.append(data[6])\n",
+ "total_vol = sum(volumes)\n",
+ "trading_days = len(volumes)\n",
+ "average_vol = total_vol / trading_days\n",
+ "print(average_vol)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 116,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "1253768.0\n"
+ ]
+ }
+ ],
+ "source": [
+ "#7. Optional) What was the median trading volume during this year. (Note: you may need to implement your own function for calculating the median.)\n",
+ "volumes.sort()\n",
+ "median = (volumes[int(len(volumes)/ 2)] + volumes[int(len(volumes) / 2) - 1]) / 2\n",
+ "print(median)\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 117,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[479585.0,\n",
+ " 556925.0,\n",
+ " 574317.0,\n",
+ " 575476.0,\n",
+ " 601057.0,\n",
+ " 605987.0,\n",
+ " 608053.0,\n",
+ " 701112.0,\n",
+ " 711806.0,\n",
+ " 732911.0,\n",
+ " 741342.0,\n",
+ " 744523.0,\n",
+ " 751509.0,\n",
+ " 762435.0,\n",
+ " 765764.0,\n",
+ " 772531.0,\n",
+ " 773139.0,\n",
+ " 778364.0,\n",
+ " 786143.0,\n",
+ " 796432.0,\n",
+ " 798410.0,\n",
+ " 808758.0,\n",
+ " 813306.0,\n",
+ " 831703.0,\n",
+ " 843468.0,\n",
+ " 843906.0,\n",
+ " 848527.0,\n",
+ " 855293.0,\n",
+ " 864934.0,\n",
+ " 867630.0,\n",
+ " 873615.0,\n",
+ " 897147.0,\n",
+ " 899809.0,\n",
+ " 907138.0,\n",
+ " 909972.0,\n",
+ " 910894.0,\n",
+ " 912185.0,\n",
+ " 920478.0,\n",
+ " 929186.0,\n",
+ " 933429.0,\n",
+ " 933804.0,\n",
+ " 948061.0,\n",
+ " 948258.0,\n",
+ " 954629.0,\n",
+ " 959055.0,\n",
+ " 964494.0,\n",
+ " 971323.0,\n",
+ " 976008.0,\n",
+ " 978790.0,\n",
+ " 980317.0,\n",
+ " 981385.0,\n",
+ " 985055.0,\n",
+ " 990944.0,\n",
+ " 993748.0,\n",
+ " 994306.0,\n",
+ " 999933.0,\n",
+ " 1007257.0,\n",
+ " 1010748.0,\n",
+ " 1018883.0,\n",
+ " 1030081.0,\n",
+ " 1031791.0,\n",
+ " 1032164.0,\n",
+ " 1034376.0,\n",
+ " 1036110.0,\n",
+ " 1040767.0,\n",
+ " 1043727.0,\n",
+ " 1048069.0,\n",
+ " 1048127.0,\n",
+ " 1057105.0,\n",
+ " 1060107.0,\n",
+ " 1065404.0,\n",
+ " 1081145.0,\n",
+ " 1088678.0,\n",
+ " 1095660.0,\n",
+ " 1098924.0,\n",
+ " 1100747.0,\n",
+ " 1102387.0,\n",
+ " 1103999.0,\n",
+ " 1105674.0,\n",
+ " 1109333.0,\n",
+ " 1112515.0,\n",
+ " 1113906.0,\n",
+ " 1117782.0,\n",
+ " 1120392.0,\n",
+ " 1130793.0,\n",
+ " 1131777.0,\n",
+ " 1132496.0,\n",
+ " 1133172.0,\n",
+ " 1134887.0,\n",
+ " 1138883.0,\n",
+ " 1146901.0,\n",
+ " 1147296.0,\n",
+ " 1153084.0,\n",
+ " 1154450.0,\n",
+ " 1155041.0,\n",
+ " 1156950.0,\n",
+ " 1161907.0,\n",
+ " 1164391.0,\n",
+ " 1169809.0,\n",
+ " 1173019.0,\n",
+ " 1178023.0,\n",
+ " 1179431.0,\n",
+ " 1180003.0,\n",
+ " 1181293.0,\n",
+ " 1182044.0,\n",
+ " 1184571.0,\n",
+ " 1189265.0,\n",
+ " 1190945.0,\n",
+ " 1193468.0,\n",
+ " 1194228.0,\n",
+ " 1203034.0,\n",
+ " 1205912.0,\n",
+ " 1208729.0,\n",
+ " 1219659.0,\n",
+ " 1222210.0,\n",
+ " 1222826.0,\n",
+ " 1226265.0,\n",
+ " 1232461.0,\n",
+ " 1236453.0,\n",
+ " 1241573.0,\n",
+ " 1242571.0,\n",
+ " 1243035.0,\n",
+ " 1244383.0,\n",
+ " 1245354.0,\n",
+ " 1247907.0,\n",
+ " 1248177.0,\n",
+ " 1259359.0,\n",
+ " 1261362.0,\n",
+ " 1262464.0,\n",
+ " 1265640.0,\n",
+ " 1265947.0,\n",
+ " 1268298.0,\n",
+ " 1269233.0,\n",
+ " 1279422.0,\n",
+ " 1281333.0,\n",
+ " 1289642.0,\n",
+ " 1291761.0,\n",
+ " 1314959.0,\n",
+ " 1321182.0,\n",
+ " 1321345.0,\n",
+ " 1326481.0,\n",
+ " 1331064.0,\n",
+ " 1334812.0,\n",
+ " 1344172.0,\n",
+ " 1345183.0,\n",
+ " 1352427.0,\n",
+ " 1358644.0,\n",
+ " 1361939.0,\n",
+ " 1362135.0,\n",
+ " 1362626.0,\n",
+ " 1366373.0,\n",
+ " 1367474.0,\n",
+ " 1368754.0,\n",
+ " 1372593.0,\n",
+ " 1376033.0,\n",
+ " 1376672.0,\n",
+ " 1378274.0,\n",
+ " 1384516.0,\n",
+ " 1391082.0,\n",
+ " 1392995.0,\n",
+ " 1394942.0,\n",
+ " 1399576.0,\n",
+ " 1400053.0,\n",
+ " 1408279.0,\n",
+ " 1411562.0,\n",
+ " 1412273.0,\n",
+ " 1418600.0,\n",
+ " 1419844.0,\n",
+ " 1423857.0,\n",
+ " 1428589.0,\n",
+ " 1456744.0,\n",
+ " 1461266.0,\n",
+ " 1464324.0,\n",
+ " 1471607.0,\n",
+ " 1471864.0,\n",
+ " 1474349.0,\n",
+ " 1477381.0,\n",
+ " 1481919.0,\n",
+ " 1485150.0,\n",
+ " 1485165.0,\n",
+ " 1493605.0,\n",
+ " 1495815.0,\n",
+ " 1497935.0,\n",
+ " 1509212.0,\n",
+ " 1514442.0,\n",
+ " 1521825.0,\n",
+ " 1522772.0,\n",
+ " 1531366.0,\n",
+ " 1569880.0,\n",
+ " 1571973.0,\n",
+ " 1574374.0,\n",
+ " 1583434.0,\n",
+ " 1587643.0,\n",
+ " 1588415.0,\n",
+ " 1603664.0,\n",
+ " 1606543.0,\n",
+ " 1609227.0,\n",
+ " 1613584.0,\n",
+ " 1621456.0,\n",
+ " 1652789.0,\n",
+ " 1661288.0,\n",
+ " 1668864.0,\n",
+ " 1702233.0,\n",
+ " 1710780.0,\n",
+ " 1724119.0,\n",
+ " 1727697.0,\n",
+ " 1737477.0,\n",
+ " 1743689.0,\n",
+ " 1744271.0,\n",
+ " 1750992.0,\n",
+ " 1762497.0,\n",
+ " 1773417.0,\n",
+ " 1780099.0,\n",
+ " 1780610.0,\n",
+ " 1782575.0,\n",
+ " 1810355.0,\n",
+ " 1819807.0,\n",
+ " 1829267.0,\n",
+ " 1830004.0,\n",
+ " 1841312.0,\n",
+ " 1881781.0,\n",
+ " 1915980.0,\n",
+ " 1918842.0,\n",
+ " 1923439.0,\n",
+ " 1948545.0,\n",
+ " 1953175.0,\n",
+ " 1968354.0,\n",
+ " 1981963.0,\n",
+ " 1999129.0,\n",
+ " 2020909.0,\n",
+ " 2021500.0,\n",
+ " 2091661.0,\n",
+ " 2098187.0,\n",
+ " 2133301.0,\n",
+ " 2155789.0,\n",
+ " 2159905.0,\n",
+ " 2165586.0,\n",
+ " 2249405.0,\n",
+ " 2250037.0,\n",
+ " 2264252.0,\n",
+ " 2312232.0,\n",
+ " 2399764.0,\n",
+ " 2486474.0,\n",
+ " 2505690.0,\n",
+ " 2670943.0,\n",
+ " 2708923.0,\n",
+ " 2733044.0,\n",
+ " 2805533.0,\n",
+ " 2809351.0,\n",
+ " 3040962.0,\n",
+ " 3126178.0,\n",
+ " 3900972.0]"
+ ]
+ },
+ "execution_count": 117,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": []
},
{
"cell_type": "code",
"execution_count": null,
- "source": [],
+ "metadata": {},
"outputs": [],
- "metadata": {}
+ "source": []
}
],
"metadata": {
+ "interpreter": {
+ "hash": "4885f37acae9217c235118400878352aafa7b76e66df698a1f601374f86939a7"
+ },
"kernelspec": {
- "name": "python3",
- "display_name": "Python 3.7.9 64-bit ('springboard': conda)"
+ "display_name": "Python 3 (ipykernel)",
+ "language": "python",
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
@@ -186,12 +611,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.9"
- },
- "interpreter": {
- "hash": "4885f37acae9217c235118400878352aafa7b76e66df698a1f601374f86939a7"
+ "version": "3.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
-}
\ No newline at end of file
+}
diff --git a/mec-3.4.1-api-mini-project/python.gitignore b/mec-3.4.1-api-mini-project/python.gitignore
new file mode 100644
index 000000000..1c22fb783
--- /dev/null
+++ b/mec-3.4.1-api-mini-project/python.gitignore
@@ -0,0 +1,160 @@
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+*$py.class
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+build/
+develop-eggs/
+dist/
+downloads/
+eggs/
+.eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+wheels/
+share/python-wheels/
+*.egg-info/
+.installed.cfg
+*.egg
+MANIFEST
+
+# PyInstaller
+# Usually these files are written by a python script from a template
+# before PyInstaller builds the exe, so as to inject date/other infos into it.
+*.manifest
+*.spec
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.nox/
+.coverage
+.coverage.*
+.cache
+nosetests.xml
+coverage.xml
+*.cover
+*.py,cover
+.hypothesis/
+.pytest_cache/
+cover/
+
+# Translations
+*.mo
+*.pot
+
+# Django stuff:
+*.log
+local_settings.py
+db.sqlite3
+db.sqlite3-journal
+
+# Flask stuff:
+instance/
+.webassets-cache
+
+# Scrapy stuff:
+.scrapy
+
+# Sphinx documentation
+docs/_build/
+
+# PyBuilder
+.pybuilder/
+target/
+
+# Jupyter Notebook
+.ipynb_checkpoints
+
+# IPython
+profile_default/
+ipython_config.py
+
+# py
+# For a library or package, you might want to ignore these files since the code is
+# intended to run in multiple environments; otherwise, check them in:
+# .python-version
+
+# pipenv
+# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
+# However, in case of collaboration, if having platform-specific dependencies or dependencies
+# having no cross-platform support, pipenv may install dependencies that don't work, or not
+# install all needed dependencies.
+#Pipfile.lock
+
+# poetry
+# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
+# This is especially recommended for binary packages to ensure reproducibility, and is more
+# commonly ignored for libraries.
+# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
+#poetry.lock
+
+# pdm
+# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
+#pdm.lock
+# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
+# in version control.
+# https://pdm.fming.dev/#use-with-ide
+.pdm.toml
+
+# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
+__pypackages__/
+
+# Celery stuff
+celerybeat-schedule
+celerybeat.pid
+
+# SageMath parsed files
+*.sage.py
+
+# Environments
+.env
+.venv
+env/
+venv/
+ENV/
+env.bak/
+venv.bak/
+
+# Spyder project settings
+.spyderproject
+.spyproject
+
+# Rope project settings
+.ropeproject
+
+# mkdocs documentation
+/site
+
+# mypy
+.mypy_cache/
+.dmypy.json
+dmypy.json
+
+# Pyre type checker
+.pyre/
+
+# pytype static type analyzer
+.pytype/
+
+# Cython debug symbols
+cython_debug/
+
+# PyCharm
+# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
+# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
+# and can be added to the global gitignore or merged into this file. For a more nuclear
+# option (not recommended) you can uncomment the following to ignore the entire idea folder.
+#.idea/
\ No newline at end of file
diff --git a/mec-5.3.10-data-wranging-with-pandas-mini-project/Mini_Project_Data_Wrangling_Pandas.ipynb b/mec-5.3.10-data-wranging-with-pandas-mini-project/Mini_Project_Data_Wrangling_Pandas.ipynb
index ed51607a2..0b20583e6 100755
--- a/mec-5.3.10-data-wranging-with-pandas-mini-project/Mini_Project_Data_Wrangling_Pandas.ipynb
+++ b/mec-5.3.10-data-wranging-with-pandas-mini-project/Mini_Project_Data_Wrangling_Pandas.ipynb
@@ -36,14 +36,14 @@
"metadata": {},
"outputs": [
{
- "output_type": "execute_result",
"data": {
"text/plain": [
- "'0.25.3'"
+ "'1.4.4'"
]
},
+ "execution_count": 2,
"metadata": {},
- "execution_count": 2
+ "output_type": "execute_result"
}
],
"source": [
@@ -162,6 +162,13 @@
"movies.head()"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -176,14 +183,26 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 5,
"metadata": {},
"outputs": [
{
- "output_type": "stream",
"name": "stdout",
+ "output_type": "stream",
"text": [
- "\nRangeIndex: 3786176 entries, 0 to 3786175\nData columns (total 6 columns):\ntitle object\nyear int64\nname object\ntype object\ncharacter object\nn float64\ndtypes: float64(1), int64(1), object(4)\nmemory usage: 173.3+ MB\n"
+ "\n",
+ "RangeIndex: 3786176 entries, 0 to 3786175\n",
+ "Data columns (total 6 columns):\n",
+ " # Column Dtype \n",
+ "--- ------ ----- \n",
+ " 0 title object \n",
+ " 1 year int64 \n",
+ " 2 name object \n",
+ " 3 type object \n",
+ " 4 character object \n",
+ " 5 n float64\n",
+ "dtypes: float64(1), int64(1), object(4)\n",
+ "memory usage: 173.3+ MB\n"
]
}
],
@@ -511,9 +530,20 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 9,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "244914"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"len(movies)"
]
@@ -527,9 +557,67 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 10,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total Batman Movies: 2\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 52734 \n",
+ " Batman \n",
+ " 1943 \n",
+ " \n",
+ " \n",
+ " 150621 \n",
+ " Batman \n",
+ " 1989 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year\n",
+ "52734 Batman 1943\n",
+ "150621 Batman 1989"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"batman_df = movies[movies.title == 'Batman']\n",
"print('Total Batman Movies:', len(batman_df))\n",
@@ -545,9 +633,115 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 11,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Total Batman Movies: 35\n"
+ ]
+ },
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 16813 \n",
+ " Batman: Anarchy \n",
+ " 2016 \n",
+ " \n",
+ " \n",
+ " 30236 \n",
+ " Batman Forever \n",
+ " 1995 \n",
+ " \n",
+ " \n",
+ " 31674 \n",
+ " Batman Untold \n",
+ " 2010 \n",
+ " \n",
+ " \n",
+ " 31711 \n",
+ " Scooby-Doo & Batman: the Brave and the Bold \n",
+ " 2018 \n",
+ " \n",
+ " \n",
+ " 41881 \n",
+ " Batman the Rise of Red Hood \n",
+ " 2018 \n",
+ " \n",
+ " \n",
+ " 43484 \n",
+ " Batman: Return of the Caped Crusaders \n",
+ " 2016 \n",
+ " \n",
+ " \n",
+ " 46333 \n",
+ " Batman & Robin \n",
+ " 1997 \n",
+ " \n",
+ " \n",
+ " 51811 \n",
+ " Batman Revealed \n",
+ " 2012 \n",
+ " \n",
+ " \n",
+ " 52734 \n",
+ " Batman \n",
+ " 1943 \n",
+ " \n",
+ " \n",
+ " 56029 \n",
+ " Batman Beyond: Rising Knight \n",
+ " 2014 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year\n",
+ "16813 Batman: Anarchy 2016\n",
+ "30236 Batman Forever 1995\n",
+ "31674 Batman Untold 2010\n",
+ "31711 Scooby-Doo & Batman: the Brave and the Bold 2018\n",
+ "41881 Batman the Rise of Red Hood 2018\n",
+ "43484 Batman: Return of the Caped Crusaders 2016\n",
+ "46333 Batman & Robin 1997\n",
+ "51811 Batman Revealed 2012\n",
+ "52734 Batman 1943\n",
+ "56029 Batman Beyond: Rising Knight 2014"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"batman_df = movies[movies.title.str.contains('Batman', case=False)]\n",
"print('Total Batman Movies:', len(batman_df))\n",
@@ -563,9 +757,138 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 12,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 52734 \n",
+ " Batman \n",
+ " 1943 \n",
+ " \n",
+ " \n",
+ " 100056 \n",
+ " Batman and Robin \n",
+ " 1949 \n",
+ " \n",
+ " \n",
+ " 161439 \n",
+ " Batman Dracula \n",
+ " 1964 \n",
+ " \n",
+ " \n",
+ " 84327 \n",
+ " Alyas Batman at Robin \n",
+ " 1965 \n",
+ " \n",
+ " \n",
+ " 68364 \n",
+ " James Batman \n",
+ " 1966 \n",
+ " \n",
+ " \n",
+ " 161527 \n",
+ " Batman: The Movie \n",
+ " 1966 \n",
+ " \n",
+ " \n",
+ " 56159 \n",
+ " Batman Fights Dracula \n",
+ " 1967 \n",
+ " \n",
+ " \n",
+ " 168504 \n",
+ " Fight! Batman, Fight! \n",
+ " 1973 \n",
+ " \n",
+ " \n",
+ " 150621 \n",
+ " Batman \n",
+ " 1989 \n",
+ " \n",
+ " \n",
+ " 156239 \n",
+ " Alyas Batman en Robin \n",
+ " 1991 \n",
+ " \n",
+ " \n",
+ " 156755 \n",
+ " Batman Returns \n",
+ " 1992 \n",
+ " \n",
+ " \n",
+ " 63366 \n",
+ " Batman: Mask of the Phantasm \n",
+ " 1993 \n",
+ " \n",
+ " \n",
+ " 30236 \n",
+ " Batman Forever \n",
+ " 1995 \n",
+ " \n",
+ " \n",
+ " 46333 \n",
+ " Batman & Robin \n",
+ " 1997 \n",
+ " \n",
+ " \n",
+ " 208220 \n",
+ " Batman Begins \n",
+ " 2005 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year\n",
+ "52734 Batman 1943\n",
+ "100056 Batman and Robin 1949\n",
+ "161439 Batman Dracula 1964\n",
+ "84327 Alyas Batman at Robin 1965\n",
+ "68364 James Batman 1966\n",
+ "161527 Batman: The Movie 1966\n",
+ "56159 Batman Fights Dracula 1967\n",
+ "168504 Fight! Batman, Fight! 1973\n",
+ "150621 Batman 1989\n",
+ "156239 Alyas Batman en Robin 1991\n",
+ "156755 Batman Returns 1992\n",
+ "63366 Batman: Mask of the Phantasm 1993\n",
+ "30236 Batman Forever 1995\n",
+ "46333 Batman & Robin 1997\n",
+ "208220 Batman Begins 2005"
+ ]
+ },
+ "execution_count": 12,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"batman_df.sort_values(by=['year'], ascending=True).iloc[:15]"
]
@@ -579,55 +902,182 @@
},
{
"cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### How many movies were made in the year 2017?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "len(movies[movies.year == 2017])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Section I - Q2 : How many movies were made in the year 2015?"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "markdown",
+ "execution_count": 13,
"metadata": {},
- "source": [
- "### Section I - Q3 : How many movies were made from 2000 till 2018?\n",
- "- You can chain multiple conditions using OR (`|`) as well as AND (`&`) depending on the condition"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 143147 \n",
+ " Harry Potter and the Deathly Hallows: Part 2 \n",
+ " 2011 \n",
+ " \n",
+ " \n",
+ " 152831 \n",
+ " Harry Potter and the Deathly Hallows: Part 1 \n",
+ " 2010 \n",
+ " \n",
+ " \n",
+ " 109213 \n",
+ " Harry Potter and the Half-Blood Prince \n",
+ " 2009 \n",
+ " \n",
+ " \n",
+ " 50581 \n",
+ " Harry Potter and the Order of the Phoenix \n",
+ " 2007 \n",
+ " \n",
+ " \n",
+ " 187926 \n",
+ " Harry Potter and the Goblet of Fire \n",
+ " 2005 \n",
+ " \n",
+ " \n",
+ " 61957 \n",
+ " Harry Potter and the Prisoner of Azkaban \n",
+ " 2004 \n",
+ " \n",
+ " \n",
+ " 82791 \n",
+ " Harry Potter and the Chamber of Secrets \n",
+ " 2002 \n",
+ " \n",
+ " \n",
+ " 223087 \n",
+ " Harry Potter and the Sorcerer's Stone \n",
+ " 2001 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year\n",
+ "143147 Harry Potter and the Deathly Hallows: Part 2 2011\n",
+ "152831 Harry Potter and the Deathly Hallows: Part 1 2010\n",
+ "109213 Harry Potter and the Half-Blood Prince 2009\n",
+ "50581 Harry Potter and the Order of the Phoenix 2007\n",
+ "187926 Harry Potter and the Goblet of Fire 2005\n",
+ "61957 Harry Potter and the Prisoner of Azkaban 2004\n",
+ "82791 Harry Potter and the Chamber of Secrets 2002\n",
+ "223087 Harry Potter and the Sorcerer's Stone 2001"
+ ]
+ },
+ "execution_count": 13,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "harry_potter_df = movies[movies.title.str.contains('Harry Potter', case=False)].sort_values(by='year', ascending=False)\n",
+ "harry_potter_df"
+ ]
+ },
+ {
+ "cell_type": "markdown",
"metadata": {},
- "outputs": [],
- "source": []
+ "source": [
+ "### How many movies were made in the year 2017?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "11474"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(movies[movies.year == 2017])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Section I - Q2 : How many movies were made in the year 2015?"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 15,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "8702"
+ ]
+ },
+ "execution_count": 15,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(movies[movies['year'] == 2015])"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Section I - Q3 : How many movies were made from 2000 till 2018?\n",
+ "- You can chain multiple conditions using OR (`|`) as well as AND (`&`) depending on the condition"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 16,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "244914"
+ ]
+ },
+ "execution_count": 16,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(movies[(movies['year'] >= 2000) & movies['year'] <= 2018])"
+ ]
},
{
"cell_type": "markdown",
@@ -638,10 +1088,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 17,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "20"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(movies[movies['title'] == 'Hamlet'])"
+ ]
},
{
"cell_type": "markdown",
@@ -654,10 +1117,94 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 18,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 55639 \n",
+ " Hamlet \n",
+ " 2000 \n",
+ " \n",
+ " \n",
+ " 1931 \n",
+ " Hamlet \n",
+ " 2009 \n",
+ " \n",
+ " \n",
+ " 227953 \n",
+ " Hamlet \n",
+ " 2011 \n",
+ " \n",
+ " \n",
+ " 178290 \n",
+ " Hamlet \n",
+ " 2014 \n",
+ " \n",
+ " \n",
+ " 186137 \n",
+ " Hamlet \n",
+ " 2015 \n",
+ " \n",
+ " \n",
+ " 191940 \n",
+ " Hamlet \n",
+ " 2016 \n",
+ " \n",
+ " \n",
+ " 244747 \n",
+ " Hamlet \n",
+ " 2017 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year\n",
+ "55639 Hamlet 2000\n",
+ "1931 Hamlet 2009\n",
+ "227953 Hamlet 2011\n",
+ "178290 Hamlet 2014\n",
+ "186137 Hamlet 2015\n",
+ "191940 Hamlet 2016\n",
+ "244747 Hamlet 2017"
+ ]
+ },
+ "execution_count": 18,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "hamlet_df = movies[(movies['title'] == 'Hamlet') & (movies['year'] >= 2000)].sort_values(by='year')\n",
+ "hamlet_df"
+ ]
},
{
"cell_type": "markdown",
@@ -670,10 +1217,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 19,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "27"
+ ]
+ },
+ "execution_count": 19,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(cast[(cast['title'] == 'Inception') & (cast['n'].isna())])"
+ ]
},
{
"cell_type": "markdown",
@@ -685,10 +1245,23 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 20,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "51"
+ ]
+ },
+ "execution_count": 20,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(cast[(cast['title'] == 'Inception') & cast['n']])"
+ ]
},
{
"cell_type": "markdown",
@@ -701,37 +1274,422 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 21,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " name \n",
+ " type \n",
+ " character \n",
+ " n \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 590576 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Leonardo DiCaprio \n",
+ " actor \n",
+ " Cobb \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 859993 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Joseph Gordon-Levitt \n",
+ " actor \n",
+ " Arthur \n",
+ " 2.0 \n",
+ " \n",
+ " \n",
+ " 3387147 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Ellen Page \n",
+ " actress \n",
+ " Ariadne \n",
+ " 3.0 \n",
+ " \n",
+ " \n",
+ " 940923 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Tom Hardy \n",
+ " actor \n",
+ " Eames \n",
+ " 4.0 \n",
+ " \n",
+ " \n",
+ " 2406531 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Ken Watanabe \n",
+ " actor \n",
+ " Saito \n",
+ " 5.0 \n",
+ " \n",
+ " \n",
+ " 1876301 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Dileep Rao \n",
+ " actor \n",
+ " Yusuf \n",
+ " 6.0 \n",
+ " \n",
+ " \n",
+ " 1615709 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Cillian Murphy \n",
+ " actor \n",
+ " Robert Fischer \n",
+ " 7.0 \n",
+ " \n",
+ " \n",
+ " 183937 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Tom Berenger \n",
+ " actor \n",
+ " Browning \n",
+ " 8.0 \n",
+ " \n",
+ " \n",
+ " 2765969 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Marion Cotillard \n",
+ " actress \n",
+ " Mal \n",
+ " 9.0 \n",
+ " \n",
+ " \n",
+ " 1826027 \n",
+ " Inception \n",
+ " 2010 \n",
+ " Pete Postlethwaite \n",
+ " actor \n",
+ " Maurice Fischer \n",
+ " 10.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year name type character n\n",
+ "590576 Inception 2010 Leonardo DiCaprio actor Cobb 1.0\n",
+ "859993 Inception 2010 Joseph Gordon-Levitt actor Arthur 2.0\n",
+ "3387147 Inception 2010 Ellen Page actress Ariadne 3.0\n",
+ "940923 Inception 2010 Tom Hardy actor Eames 4.0\n",
+ "2406531 Inception 2010 Ken Watanabe actor Saito 5.0\n",
+ "1876301 Inception 2010 Dileep Rao actor Yusuf 6.0\n",
+ "1615709 Inception 2010 Cillian Murphy actor Robert Fischer 7.0\n",
+ "183937 Inception 2010 Tom Berenger actor Browning 8.0\n",
+ "2765969 Inception 2010 Marion Cotillard actress Mal 9.0\n",
+ "1826027 Inception 2010 Pete Postlethwaite actor Maurice Fischer 10.0"
+ ]
+ },
+ "execution_count": 21,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "topten_inception = cast[(cast['title'] == 'Inception')].sort_values(by='n').iloc[:10]\n",
+ "topten_inception"
+ ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Section I - Q9:\n",
- "\n",
- "(A) List all movies where there was a character 'Albus Dumbledore' \n",
- "\n",
- "(B) Now modify the above to show only the actors who played the character 'Albus Dumbledore'\n",
- "- For Part (B) remember the same actor might play the same role in multiple movies"
+ "### Section I - Q9:\n",
+ "\n",
+ "(A) List all movies where there was a character 'Albus Dumbledore' \n",
+ "\n",
+ "(B) Now modify the above to show only the actors who played the character 'Albus Dumbledore'\n",
+ "- For Part (B) remember the same actor might play the same role in multiple movies"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 22,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " name \n",
+ " type \n",
+ " character \n",
+ " n \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 704984 \n",
+ " Epic Movie \n",
+ " 2007 \n",
+ " Dane Farwell \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 17.0 \n",
+ " \n",
+ " \n",
+ " 792421 \n",
+ " Harry Potter and the Goblet of Fire \n",
+ " 2005 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 37.0 \n",
+ " \n",
+ " \n",
+ " 792423 \n",
+ " Harry Potter and the Order of the Phoenix \n",
+ " 2007 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 36.0 \n",
+ " \n",
+ " \n",
+ " 792424 \n",
+ " Harry Potter and the Prisoner of Azkaban \n",
+ " 2004 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 27.0 \n",
+ " \n",
+ " \n",
+ " 947789 \n",
+ " Harry Potter and the Chamber of Secrets \n",
+ " 2002 \n",
+ " Richard Harris \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 32.0 \n",
+ " \n",
+ " \n",
+ " 947790 \n",
+ " Harry Potter and the Sorcerer's Stone \n",
+ " 2001 \n",
+ " Richard Harris \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1685537 \n",
+ " Ultimate Hero Project \n",
+ " 2013 \n",
+ " George (X) O'Connor \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ " 2248085 \n",
+ " Potter \n",
+ " 2015 \n",
+ " Timothy Tedmanson \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " NaN \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year name \\\n",
+ "704984 Epic Movie 2007 Dane Farwell \n",
+ "792421 Harry Potter and the Goblet of Fire 2005 Michael Gambon \n",
+ "792423 Harry Potter and the Order of the Phoenix 2007 Michael Gambon \n",
+ "792424 Harry Potter and the Prisoner of Azkaban 2004 Michael Gambon \n",
+ "947789 Harry Potter and the Chamber of Secrets 2002 Richard Harris \n",
+ "947790 Harry Potter and the Sorcerer's Stone 2001 Richard Harris \n",
+ "1685537 Ultimate Hero Project 2013 George (X) O'Connor \n",
+ "2248085 Potter 2015 Timothy Tedmanson \n",
+ "\n",
+ " type character n \n",
+ "704984 actor Albus Dumbledore 17.0 \n",
+ "792421 actor Albus Dumbledore 37.0 \n",
+ "792423 actor Albus Dumbledore 36.0 \n",
+ "792424 actor Albus Dumbledore 27.0 \n",
+ "947789 actor Albus Dumbledore 32.0 \n",
+ "947790 actor Albus Dumbledore 1.0 \n",
+ "1685537 actor Albus Dumbledore NaN \n",
+ "2248085 actor Albus Dumbledore NaN "
+ ]
+ },
+ "execution_count": 22,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "dumbledore = cast[cast['character'] == 'Albus Dumbledore']\n",
+ "dumbledore"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 23,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " name \n",
+ " type \n",
+ " character \n",
+ " n \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 792421 \n",
+ " Harry Potter and the Goblet of Fire \n",
+ " 2005 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 37.0 \n",
+ " \n",
+ " \n",
+ " 792423 \n",
+ " Harry Potter and the Order of the Phoenix \n",
+ " 2007 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 36.0 \n",
+ " \n",
+ " \n",
+ " 792424 \n",
+ " Harry Potter and the Prisoner of Azkaban \n",
+ " 2004 \n",
+ " Michael Gambon \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 27.0 \n",
+ " \n",
+ " \n",
+ " 947789 \n",
+ " Harry Potter and the Chamber of Secrets \n",
+ " 2002 \n",
+ " Richard Harris \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 32.0 \n",
+ " \n",
+ " \n",
+ " 947790 \n",
+ " Harry Potter and the Sorcerer's Stone \n",
+ " 2001 \n",
+ " Richard Harris \n",
+ " actor \n",
+ " Albus Dumbledore \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year name \\\n",
+ "792421 Harry Potter and the Goblet of Fire 2005 Michael Gambon \n",
+ "792423 Harry Potter and the Order of the Phoenix 2007 Michael Gambon \n",
+ "792424 Harry Potter and the Prisoner of Azkaban 2004 Michael Gambon \n",
+ "947789 Harry Potter and the Chamber of Secrets 2002 Richard Harris \n",
+ "947790 Harry Potter and the Sorcerer's Stone 2001 Richard Harris \n",
+ "\n",
+ " type character n \n",
+ "792421 actor Albus Dumbledore 37.0 \n",
+ "792423 actor Albus Dumbledore 36.0 \n",
+ "792424 actor Albus Dumbledore 27.0 \n",
+ "947789 actor Albus Dumbledore 32.0 \n",
+ "947790 actor Albus Dumbledore 1.0 "
+ ]
+ },
+ "execution_count": 23,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "hp_dumbledore = dumbledore[dumbledore['title'].str.contains('Harry Potter', case=False)]\n",
+ "hp_dumbledore"
]
},
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -745,17 +1703,243 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 24,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "62"
+ ]
+ },
+ "execution_count": 24,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(cast[cast['name'] == 'Keanu Reeves'])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 25,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " name \n",
+ " type \n",
+ " character \n",
+ " n \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 1892390 \n",
+ " The Matrix \n",
+ " 1999 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Neo \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892397 \n",
+ " The Replacements \n",
+ " 2000 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Shane Falco \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892358 \n",
+ " Hard Ball \n",
+ " 2001 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Conor O'Neill \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892383 \n",
+ " Sweet November \n",
+ " 2001 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Nelson Moss \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892348 \n",
+ " Constantine \n",
+ " 2005 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " John Constantine \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892388 \n",
+ " The Lake House \n",
+ " 2006 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Alex Wyler \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892382 \n",
+ " Street Kings \n",
+ " 2008 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Detective Tom Ludlow \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892385 \n",
+ " The Day the Earth Stood Still \n",
+ " 2008 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Klaatu \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892359 \n",
+ " Henry's Crime \n",
+ " 2010 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Henry Torne \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892342 \n",
+ " 47 Ronin \n",
+ " 2013 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Kai \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892361 \n",
+ " John Wick \n",
+ " 2014 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " John Wick \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892366 \n",
+ " Knock Knock \n",
+ " 2015 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Evan \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892399 \n",
+ " The Whole Truth \n",
+ " 2016 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Ramsey \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892362 \n",
+ " John Wick: Chapter 2 \n",
+ " 2017 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " John Wick \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ " 1892378 \n",
+ " Siberia \n",
+ " 2018 \n",
+ " Keanu Reeves \n",
+ " actor \n",
+ " Lucas Hill \n",
+ " 1.0 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title year name type \\\n",
+ "1892390 The Matrix 1999 Keanu Reeves actor \n",
+ "1892397 The Replacements 2000 Keanu Reeves actor \n",
+ "1892358 Hard Ball 2001 Keanu Reeves actor \n",
+ "1892383 Sweet November 2001 Keanu Reeves actor \n",
+ "1892348 Constantine 2005 Keanu Reeves actor \n",
+ "1892388 The Lake House 2006 Keanu Reeves actor \n",
+ "1892382 Street Kings 2008 Keanu Reeves actor \n",
+ "1892385 The Day the Earth Stood Still 2008 Keanu Reeves actor \n",
+ "1892359 Henry's Crime 2010 Keanu Reeves actor \n",
+ "1892342 47 Ronin 2013 Keanu Reeves actor \n",
+ "1892361 John Wick 2014 Keanu Reeves actor \n",
+ "1892366 Knock Knock 2015 Keanu Reeves actor \n",
+ "1892399 The Whole Truth 2016 Keanu Reeves actor \n",
+ "1892362 John Wick: Chapter 2 2017 Keanu Reeves actor \n",
+ "1892378 Siberia 2018 Keanu Reeves actor \n",
+ "\n",
+ " character n \n",
+ "1892390 Neo 1.0 \n",
+ "1892397 Shane Falco 1.0 \n",
+ "1892358 Conor O'Neill 1.0 \n",
+ "1892383 Nelson Moss 1.0 \n",
+ "1892348 John Constantine 1.0 \n",
+ "1892388 Alex Wyler 1.0 \n",
+ "1892382 Detective Tom Ludlow 1.0 \n",
+ "1892385 Klaatu 1.0 \n",
+ "1892359 Henry Torne 1.0 \n",
+ "1892342 Kai 1.0 \n",
+ "1892361 John Wick 1.0 \n",
+ "1892366 Evan 1.0 \n",
+ "1892399 Ramsey 1.0 \n",
+ "1892362 John Wick 1.0 \n",
+ "1892378 Lucas Hill 1.0 "
+ ]
+ },
+ "execution_count": 25,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "keanu_reeves = cast[(cast['name'] == 'Keanu Reeves') & (cast['year'] >= 1999) & (cast['n']) & (cast['n'] == 1.0)].sort_values(by='year')\n",
+ "keanu_reeves"
+ ]
},
{
"cell_type": "markdown",
@@ -770,17 +1954,45 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 26,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "234635"
+ ]
+ },
+ "execution_count": 26,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "fifties = cast[(cast['year'] >= 1950) & (cast['year'] <= 1960)]\n",
+ "len(fifties[(fifties['type'] == 'actress') | (fifties['type'] == 'actor')])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 27,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1452413"
+ ]
+ },
+ "execution_count": 27,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "tenyears = cast[(cast['year'] >= 2007) & (cast['year'] <= 2017)]\n",
+ "len(tenyears[(tenyears['type'] == 'actress') | (tenyears['type'] == 'actor')])"
+ ]
},
{
"cell_type": "markdown",
@@ -797,24 +2009,64 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 28,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "153233"
+ ]
+ },
+ "execution_count": 28,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "millenium = cast[cast['year'] >= 200]\n",
+ "len(millenium[millenium['n'] == 1.0])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 29,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "2174370"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(millenium[(millenium['n'].notnull()) & (millenium['n'] != 1.0)])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 30,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "1458573"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(millenium[millenium['n'].isna()])"
+ ]
},
{
"cell_type": "markdown",
@@ -832,9 +2084,30 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 31,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "Hamlet 20\n",
+ "Carmen 17\n",
+ "Macbeth 16\n",
+ "Maya 12\n",
+ "Temptation 12\n",
+ "The Outsider 12\n",
+ "Freedom 11\n",
+ "The Three Musketeers 11\n",
+ "Honeymoon 11\n",
+ "Othello 11\n",
+ "Name: title, dtype: int64"
+ ]
+ },
+ "execution_count": 31,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
"top_ten = movies.title.value_counts()[:10]\n",
"top_ten"
@@ -849,9 +2122,30 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 32,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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09NTAQEBevfdd23bcmYzly9frnbt2snFxUWLFy+WJMXFxSk4OFguLi6qX7++5syZY1fDzz//rF69eqlChQqqVKmSIiIiCjXrOXDgQMXFxdmti4+P18CBA3Ot++tl+VWrVslisdje79q1S+3bt5enp6e8vLzUrFkz7dixI8/jnjt3Tvfcc48efvhhXblyRYZh6JVXXlHt2rXl6uqqxo0b6+OPP7b9XNq3by9JqlChgt0seEH75di3b5+6dOkiDw8PVatWTf3799fZs2dt29u1a6fhw4drzJgxqly5sjp06CBJio6OVkBAgKxWq/z8/DRy5Mib/jwBAEDpVyw3RD333HMaN26ckpOTFRQUpN69e+v69euSpN27dys8PFw9evTQjz/+qGXLlmnTpk0aPnz43z7uzJkz1bx5cyUlJWnYsGF6+umntX//frs248eP18iRI5WSkqLw8HDNnz9fzz33nF588UWlpKTopZde0qRJk5SQkCDpRuBt3769PDw8tHHjRm3atEkeHh7q1KnTTWcBH374YZ0/f16bNm2SJG3atEm//fabunXrdstj69u3r2rUqKHt27dr586dmjBhgsqVK5er3U8//aQ2bdqofv36WrlypVxcXPT8888rLi5Oc+fO1d69ezV69Gj169dPGzZskL+/v1asWCFJOnDggN0seEH7STdm09u2basmTZpox44dWrNmjX799Vf17NnTrqaEhASVLVtWmzdvVmxsrD7++GO9/vrrio2NVWpqqlatWqXQ0NB8x56ZmamMjAy7BQAAlE7F8hD+cePGqWvXGw9GjomJUcOGDXXo0CHVr19fr776qvr06aNRo0ZJku666y699dZbatu2rebOnSsXF5fbPm6XLl00bNgwSTdC6Ouvv67ExETVr1/f1mbUqFHq0aOH7f20adM0c+ZM27patWpp3759io2N1cCBA7V06VI5OTlpwYIFtpnMuLg4lS9fXomJierYsWO+9ZQrV079+vXTwoULdd9992nhwoXq169fnqHyZk6cOKH/9//+n20sd911V642Bw8eVIcOHRQREaE333xTFotFFy9e1KxZs/TNN9+oVatWkqTatWtr06ZNio2NVdu2bVWxYkVJUtWqVW0zuIXZb+7cuQoLC9NLL71kq2HhwoXy9/fXwYMHFRQUJEmqW7euXnnlFVubL774Qj4+PvrXv/6l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V872Omd7Xuuys7Nt/33qqaeUnJxsW3bt2qXU1FTVqVMnz35z+snpIy9Wq1VeXl52CwAAKJ24W99BVaxYUeHh4XrnnXc0cuTIXN87vXDhgnbs2KHr169r5syZtrvvly9fXmw1hYWFae/evapbt26xHQMAAJRuzJw6sDlz5igrK0v33HOPVqxYodTUVKWkpOitt95Sq1atVKdOHV2/fl1vv/22jhw5okWLFmnevHnFVs/48eO1detWRUVFKTk5Wampqfr00081YsSIYjsmAAAoXQinDqxWrVr64Ycf1L59e40dO1YhISHq0KGD1q1bp7lz56pJkyaaNWuWXn75ZYWEhGjJkiWaPn16sdXTqFEjbdiwQampqWrTpo2aNm2qSZMmydfXt9iOCQAAShfu1ofDybnbj7v1AQC3g7v1SwZ36wMAAMDhEE4BAABgGtytD4e1Jyacx0oBAFDKMHMKAAAA0yCcAgAAwDQIpwAAADANwikAAABMg3AKAAAA0yCcAgAAwDQIpwAAADANwikAAABMg3AKAAAA0yCcAgAAwDQIpwAAADANwikAAABMg3AKAAAA0yCcAgAAwDQIpwAAADANwikAAABMg3AKAAAA0yCcAgAAwDTKlnQBwO0KmbJWTla3ki4DAIBS49iMriVdAjOnAAAAMA/CKQAAAEyDcAoAAADTIJyiSCQmJspisejChQslXQoAAHBghNNSJDIyUt27d8+13qzBMTAwUG+88UZJlwEAAEyEcAoAAADTIJz+w5w7d069e/dWjRo15ObmptDQUH344Yd2bdq1a6cRI0Zo1KhRqlChgqpVq6Z3331XFy9e1BNPPCFPT0/VqVNH//d//1fgsbZs2aL7779frq6u8vf318iRI3Xx4kXbMY4fP67Ro0fLYrHIYrEU25gBAIDjIJz+w1y5ckXNmjXT559/rj179ug///mP+vfvr++++86uXUJCgipXrqzvv/9eI0aM0NNPP63HHntM9957r3744QeFh4erf//+unTpUp7H2b17t8LDw9WjRw/9+OOPWrZsmTZt2qThw4dLklauXKkaNWpo6tSpSktLU1paWr41Z2ZmKiMjw24BAAClk8UwDKOki0DRiIyM1OLFi+Xi4mK3PisrS1euXNH58+dVvnz5XPt17dpVwcHBeu211yTdmNXMysrSt99+a9vf29tbPXr00Pvvvy9JOnXqlHx9fbV161a1bNlSiYmJat++ve0YAwYMkKurq2JjY23H2bRpk9q2bauLFy/KxcVFgYGBGjVqlEaNGlXguKKjoxUTE5Nrvf+o5TyEHwCAIlScD+HPyMiQt7e30tPT5eXllW87/oWoUqZ9+/aaO3eu3brvvvtO/fr1k3QjaM6YMUPLli3Tzz//rMzMTGVmZsrd3d1un0aNGtlelylTRpUqVVJoaKhtXbVq1SRJp0+fzrOOnTt36tChQ1qyZIltnWEYys7O1tGjRxUcHFzoMU2cOFFjxoyxvc/IyJC/v3+h9wcAAI6DcFrKuLu7q27dunbrfvrpJ9vrmTNn6vXXX9cbb7yh0NBQubu7a9SoUbp69ardPuXKlbN7b7FY7NblfEc0Ozs7zzqys7P11FNPaeTIkbm2BQQE3NKYrFarrFbrLe0DAAAcE+H0H+bbb79VRESEbSY1OztbqamptzSTWRhhYWHau3dvrqD8Z87OzsrKyirS4wIAAMfGDVH/MHXr1tVXX32lLVu2KCUlRU899ZROnTpV5McZP368tm7dqqioKCUnJys1NVWffvqpRowYYWsTGBiojRs36ueff9bZs2eLvAYAAOB4CKf/MJMmTVJYWJjCw8PVrl07+fj45Png/r+rUaNG2rBhg1JTU9WmTRs1bdpUkyZNkq+vr63N1KlTdezYMdWpU0dVqlQp8hoAAIDj4W59OJycu/24Wx8AgKJlhrv1mTkFAACAaRBOAQAAYBrcrQ+HtScmvMDLAgAAwPEwcwoAAADTIJwCAADANAinAAAAMA3CKQAAAEyDcAoAAADTIJwCAADANAinAAAAMA2ecwqHk/Mv7mZkZJRwJQAAoLByfm/n/B7PD+EUDufcuXOSJH9//xKuBAAA3Krff/9d3t7e+W4nnMLhVKxYUZJ04sSJAv9wlwYZGRny9/fXyZMnS/2/hsVYSyfGWjox1tKpuMdqGIZ+//13+fn5FdiOcAqH4+R046vS3t7epf5/FDm8vLwYaynEWEsnxlo6MdaiUZhJJW6IAgAAgGkQTgEAAGAahFM4HKvVqilTpshqtZZ0KcWOsZZOjLV0YqylE2O98yzGze7nBwAAAO4QZk4BAABgGoRTAAAAmAbhFAAAAKZBOAUAAIBpEE5hOnPmzFGtWrXk4uKiZs2a6dtvvy2w/YYNG9SsWTO5uLiodu3amjdv3h2q9O+ZPn267r77bnl6eqpq1arq3r27Dhw4UOA+iYmJslgsuZb9+/ffoapvT3R0dK6afXx8CtzHUc9rYGBgnucoKioqz/aOdE43btyobt26yc/PTxaLRatWrbLbbhiGoqOj5efnJ1dXV7Vr10579+69ab8rVqxQgwYNZLVa1aBBA/3vf/8rphEUXkFjvXbtmsaPH6/Q0FC5u7vLz89PAwYM0C+//FJgn/Hx8Xme6ytXrhTzaAp2s/MaGRmZq+aWLVvetF9HO6+S8jw/FotFr776ar59mvG8Fub3i5k/r4RTmMqyZcs0atQoPffcc0pKSlKbNm3UuXNnnThxIs/2R48eVZcuXdSmTRslJSXpv//9r0aOHKkVK1bc4cpv3YYNGxQVFaVt27bpq6++0vXr19WxY0ddvHjxpvseOHBAaWlptuWuu+66AxX/PQ0bNrSreffu3fm2deTzun37drtxfvXVV5Kkxx57rMD9HOGcXrx4UY0bN9bs2bPz3P7KK69o1qxZmj17trZv3y4fHx916NBBv//+e759bt26Vb169VL//v21a9cu9e/fXz179tR3331XXMMolILGeunSJf3www+aNGmSfvjhB61cuVIHDx7Uww8/fNN+vby87M5zWlqaXFxcimMIhXaz8ypJnTp1sqv5iy++KLBPRzyvknKdm4ULF8pisejRRx8tsF+zndfC/H4x9efVAEzknnvuMYYOHWq3rn79+saECRPybP/ss88a9evXt1v31FNPGS1btiy2GovL6dOnDUnGhg0b8m2zfv16Q5Jx/vz5O1dYEZgyZYrRuHHjQrcvTef1mWeeMerUqWNkZ2fnud1Rz6kk43//+5/tfXZ2tuHj42PMmDHDtu7KlSuGt7e3MW/evHz76dmzp9GpUye7deHh4cbjjz9e5DXfrr+ONS/ff/+9Ick4fvx4vm3i4uIMb2/voi2uiOU11oEDBxoRERG31E9pOa8RERHGAw88UGAbRzivf/39YvbPKzOnMI2rV69q586d6tixo936jh07asuWLXnus3Xr1lztw8PDtWPHDl27dq3Yai0O6enpkqSKFSvetG3Tpk3l6+urBx98UOvXry/u0opEamqq/Pz8VKtWLT3++OM6cuRIvm1Ly3m9evWqFi9erEGDBslisRTY1hHP6Z8dPXpUp06dsjtvVqtVbdu2zffzK+V/rgvax4zS09NlsVhUvnz5Atv98ccfqlmzpmrUqKGHHnpISUlJd6bAvykxMVFVq1ZVUFCQhgwZotOnTxfYvjSc119//VWrV6/Wk08+edO2Zj+vf/39YvbPK+EUpnH27FllZWWpWrVqduurVaumU6dO5bnPqVOn8mx//fp1nT17tthqLWqGYWjMmDG67777FBISkm87X19fvfvuu1qxYoVWrlypevXq6cEHH9TGjRvvYLW3rkWLFnr//fe1du1azZ8/X6dOndK9996rc+fO5dm+tJzXVatW6cKFC4qMjMy3jaOe07/K+Yzeyuc3Z79b3cdsrly5ogkTJqhPnz7y8vLKt139+vUVHx+vTz/9VB9++KFcXFzUunVrpaam3sFqb13nzp21ZMkSffPNN5o5c6a2b9+uBx54QJmZmfnuUxrOa0JCgjw9PdWjR48C25n9vOb1+8Xsn9eyRdobUAT+OsNkGEaBs055tc9rvZkNHz5cP/74ozZt2lRgu3r16qlevXq2961atdLJkyf12muv6f777y/uMm9b586dba9DQ0PVqlUr1alTRwkJCRozZkye+5SG8/ree++pc+fO8vPzy7eNo57T/Nzq5/d29zGLa9eu6fHHH1d2drbmzJlTYNuWLVva3UjUunVrhYWF6e2339Zbb71V3KXetl69etleh4SEqHnz5qpZs6ZWr15dYHBz5PMqSQsXLlTfvn1v+t1Rs5/Xgn6/mPXzyswpTKNy5coqU6ZMrr+BnT59Otff1HL4+Pjk2b5s2bKqVKlSsdValEaMGKFPP/1U69evV40aNW55/5YtW5rmb+iF5e7urtDQ0HzrLg3n9fjx4/r66681ePDgW97XEc9pztMXbuXzm7Pfre5jFteuXVPPnj119OhRffXVVwXOmubFyclJd999t8Oda19fX9WsWbPAuh35vErSt99+qwMHDtzW59dM5zW/3y9m/7wSTmEazs7Oatasme3u5hxfffWV7r333jz3adWqVa72X375pZo3b65y5coVW61FwTAMDR8+XCtXrtQ333yjWrVq3VY/SUlJ8vX1LeLqildmZqZSUlLyrduRz2uOuLg4Va1aVV27dr3lfR3xnNaqVUs+Pj525+3q1avasGFDvp9fKf9zXdA+ZpATTFNTU/X111/f1l+aDMNQcnKyw53rc+fO6eTJkwXW7ajnNcd7772nZs2aqXHjxre8rxnO681+v5j+81qkt1cBf9PSpUuNcuXKGe+9956xb98+Y9SoUYa7u7tx7NgxwzAMY8KECUb//v1t7Y8cOWK4ubkZo0ePNvbt22e89957Rrly5YyPP/64pIZQaE8//bTh7e1tJCYmGmlpabbl0qVLtjZ/He/rr79u/O9//zMOHjxo7Nmzx5gwYYIhyVixYkVJDKHQxo4dayQmJhpHjhwxtm3bZjz00EOGp6dnqTyvhmEYWVlZRkBAgDF+/Phc2xz5nP7+++9GUlKSkZSUZEgyZs2aZSQlJdnuUJ8xY4bh7e1trFy50ti9e7fRu3dvw9fX18jIyLD10b9/f7unb2zevNkoU6aMMWPGDCMlJcWYMWOGUbZsWWPbtm13fHx/VtBYr127Zjz88MNGjRo1jOTkZLvPb2Zmpq2Pv441OjraWLNmjXH48GEjKSnJeOKJJ4yyZcsa3333XUkM0aagsf7+++/G2LFjjS1bthhHjx411q9fb7Rq1cqoXr16qTuvOdLT0w03Nzdj7ty5efbhCOe1ML9fzPx5JZzCdN555x2jZs2ahrOzsxEWFmb3aKWBAwcabdu2tWufmJhoNG3a1HB2djYCAwPz/R+K2UjKc4mLi7O1+et4X375ZaNOnTqGi4uLUaFCBeO+++4zVq9efeeLv0W9evUyfH19jXLlyhl+fn5Gjx49jL1799q2l6bzahiGsXbtWkOSceDAgVzbHPmc5jz26q/LwIEDDcO48XiaKVOmGD4+PobVajXuv/9+Y/fu3XZ9tG3b1tY+x0cffWTUq1fPKFeunFG/fn1TBPOCxnr06NF8P7/r16+39fHXsY4aNcoICAgwnJ2djSpVqhgdO3Y0tmzZcucH9xcFjfXSpUtGx44djSpVqhjlypUzAgICjIEDBxonTpyw66M0nNccsbGxhqurq3HhwoU8+3CE81qY3y9m/rxa/v9BAAAAACWO75wCAADANAinAAAAMA3CKQAAAEyDcAoAAADTIJwCAADANAinAAAAMA3CKQAAAEyDcAoAAADTIJwCAADANAinAAAAMA3CKQAAAEyDcAoAAADT+P8AzTGLui7yKKkAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"top_ten.plot(kind='barh')"
]
@@ -865,10 +2159,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 33,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "year\n",
+ "2009 6125\n",
+ "2008 5151\n",
+ "2007 4467\n",
+ "Name: year, dtype: int64"
+ ]
+ },
+ "execution_count": 33,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "top3 = movies[(movies['year'] >= 2000) & (movies['year'] <= 2009)].groupby('year')['year'].count().sort_values(ascending=False).iloc[:3]\n",
+ "top3"
+ ]
},
{
"cell_type": "markdown",
@@ -881,10 +2193,34 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 60,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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hBDV1dVCo9GI+Ph4uc9vv/0mJEkSq1atEkIIUVxcLMzMzMT69evlPr/88ovo0KGDSE1NFUIIcfLkSQFAZGRkyH3S09MFAJGdnd2guen1egFA6PX6+66TiIiIWkZDv79NjZrG7qLX6wEAdnZ2AIBz584hPz8f/v7+ch+1Wo1hw4YhLS0N06ZNw6FDh3D79m2DPlqtFh4eHkhLS0NAQADS09MhSRK8vLzkPt7e3pAkCWlpaXBzc6s1l/LycpSXl8vLJSUlAACP2K3ooLZq3sKJyGjOxwcZewpE1Aq0mouqhRCIjo7G0KFD4eHhAQDIz88HADg6Ohr0dXR0lNfl5+fD3NwcnTt3vmcfBweHWtt0cHCQ+9wtLi5Ovt5IkiQ4OzvfX4FERETUarWaI0QzZ87EsWPHsG/fvlrrVCqVwbIQolbb3e7uU1f/e40TExOD6OhoebmkpATOzs7IWhwAW1vbe26biIiI2pZWcYRo1qxZSElJwa5du9CtWze5XaPRAECtozhXr16VjxppNBpUVFSgqKjonn0KCgpqbbewsLDW0acaarUatra2Bi8iIiJqn4waiIQQmDlzJr7++mvs3LkTPXr0MFjfo0cPaDQabN++XW6rqKjAnj174OvrCwAYNGgQzMzMDPrk5eUhKytL7uPj4wO9Xo8DBw7Iffbv3w+9Xi/3ISIiIuUy6imzGTNm4KuvvsKWLVtgY2MjHwmSJAmWlpZQqVSYM2cOli5dit69e6N3795YunQprKysEBYWJvedNGkS5s2bhy5dusDOzg7z589H//794efnBwBwd3dHYGAgpkyZgoSEBADA1KlTERwcXOcF1URERKQsRg1EK1euBAAMHz7coH316tWIjIwEAPz973/HrVu38Le//Q1FRUXw8vLCtm3bYGNjI/d///33YWpqimeffRa3bt3CqFGjkJiYCBMTE7nP2rVrERUVJd+NFhISghUrVjzYAomIiKhNUAkhhLEn0RaUlJRAkiTo9XpeT0RERNRGNPT7u1VcVE1ERERkTAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHimxp5AW+MRuxUd1FbGnga1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2XBzc2vQ/EpKSiBJEvR6PWxtbe+/YCIiInrgGvr9bdqCc2qU8vJyAICFhYXcZmJiAnNzc+zbt6/eQFRTsKnpndLS09MhSZIchgDA29sbkiQhLS2t3kBUXl4uzwG4s0MBwCN2Kzqore6vuFbqfHyQsadARERkFK32ouo+ffrA1dUVMTExKCoqQkVFBeLj45Gfn4+8vLw633Pt2jUsWbIE06ZNk9vy8/Ph4OBQq6+DgwPy8/Pr3X5cXJx8zZEkSXB2dr7/ooiIiKhVarVHiMzMzLB582ZMmjQJdnZ2MDExgZ+fH8aMGVNn/5KSEgQFBaFv376IjY01WKdSqWr1F0LU2V4jJiYG0dHRBuM7Ozsja3EAT5kRERG1M602EAHAoEGDoNPpoNfrUVFRAXt7e3h5eWHw4MEG/W7cuIHAwEB07NgRSUlJMDMzk9dpNBoUFBTUGruwsBCOjo71blutVkOtVjdfMURERNRqtdpTZr8nSRLs7e2Rm5uLzMxMjBs3Tl5XUlICf39/mJubIyUlxeCaIwDw8fGBXq/HgQMH5Lb9+/dDr9fD19e3xWogIiKi1suoR4hKS0tx+vRpefncuXPQ6XSws7ODi4sLNm7cCHt7e7i4uOD48eOYPXs2QkND4e/vD+DOkSF/f3/cvHkTX375JUpKSuSLn+3t7WFiYgJ3d3cEBgZiypQpSEhIAABMnToVwcHBDb7DjIiIiNo3owaizMxMjBgxQl6uuWYnIiICiYmJyMvLQ3R0NAoKCuDk5IQJEyZg4cKFcv9Dhw5h//79AIBevXoZjH3u3Dl0794dALB27VpERUXJQSokJKTOZx8RERGRMrWa5xC1dnwOERERUdvT0O/vNnENEREREdGDxEBEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREisdARERERIrHQERERESKx0BEREREimdq7Am0NR6xW9FBbWXsadzT+fggY0+BiIioTeERIiIiIlI8HiFqpKzFAbC1tTX2NIiIiKgZ8QgRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxEREREpHgMRERERKR4DERERESkeAxER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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "import math\n",
+ "decade = []\n",
+ "for year in movies['year']:\n",
+ " decade.append(math.floor(year/10) * 10)\n",
+ "movies['decade'] = decade\n",
+ "decade_df = pd.DataFrame(movies.groupby('decade')['title'].count())\n",
+ "plt.barh(y=decade_df.index, width=decade_df['title'])\n",
+ "plt.xlabel('Number of Films')\n",
+ "plt.ylabel('Decade')\n",
+ "plt.ylim(1880, 2030)\n",
+ "plt.title('Number of films released per decade')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -901,24 +2237,96 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 35,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "character\n",
+ "Himself 20746\n",
+ "Dancer 12477\n",
+ "Extra 11948\n",
+ "Reporter 8434\n",
+ "Student 7773\n",
+ "Doctor 7669\n",
+ "Party Guest 7245\n",
+ "Policeman 7029\n",
+ "Nurse 6999\n",
+ "Bartender 6802\n",
+ "Name: character, dtype: int64"
+ ]
+ },
+ "execution_count": 35,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast.groupby('character')['character'].count().sort_values(ascending=False).iloc[:10]"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 36,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "character name name \n",
+ "Herself Queen Elizabeth II Queen Elizabeth II 12\n",
+ " Joyce Brothers Joyce Brothers 9\n",
+ " Luisa Horga Luisa Horga 9\n",
+ " Mar?a Luisa (V) Mart?n Mar?a Luisa (V) Mart?n 9\n",
+ " Hillary Clinton Hillary Clinton 8\n",
+ " Margaret Thatcher Margaret Thatcher 8\n",
+ " In?s J. Southern In?s J. Southern 6\n",
+ " Marta Berrocal Marta Berrocal 6\n",
+ " Oprah Winfrey Oprah Winfrey 6\n",
+ " Marilyn Monroe Marilyn Monroe 6\n",
+ "Name: name, dtype: int64"
+ ]
+ },
+ "execution_count": 36,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast[cast['character'] == 'Herself'].groupby(['character', 'name'])['name'].value_counts().sort_values(ascending=False).iloc[:10]"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 37,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "character name name \n",
+ "Himself Adolf Hitler Adolf Hitler 99\n",
+ " Richard Nixon Richard Nixon 44\n",
+ " Ronald Reagan Ronald Reagan 41\n",
+ " John F. Kennedy John F. Kennedy 37\n",
+ " George W. Bush George W. Bush 25\n",
+ " Winston Churchill Winston Churchill 24\n",
+ " Martin Luther King Martin Luther King 23\n",
+ " Bill Clinton Bill Clinton 22\n",
+ " Ron Jeremy Ron Jeremy 22\n",
+ " Franklin D. Roosevelt Franklin D. Roosevelt 21\n",
+ "Name: name, dtype: int64"
+ ]
+ },
+ "execution_count": 37,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast[cast['character'] == 'Himself'].groupby(['character', 'name'])['name'].value_counts().sort_values(ascending=False).iloc[:10]"
+ ]
},
{
"cell_type": "markdown",
@@ -935,17 +2343,65 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 38,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "character\n",
+ "Zombie 6264\n",
+ "Zombie Horde 206\n",
+ "Zombie - Protestor - Victim 78\n",
+ "Zombie Extra 70\n",
+ "Zombie Dancer 43\n",
+ "Zombie Girl 36\n",
+ "Zombie #1 36\n",
+ "Zombie #2 31\n",
+ "Zombie Vampire 25\n",
+ "Zombie Victim 22\n",
+ "Name: character, dtype: int64"
+ ]
+ },
+ "execution_count": 38,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast[cast['character'].str.startswith('Zombie')].groupby('character')['character'].count().sort_values(ascending=False).iloc[:10]"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 39,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "character\n",
+ "Policeman 7029\n",
+ "Police Officer 4808\n",
+ "Police Inspector 742\n",
+ "Police Sergeant 674\n",
+ "Police officer 539\n",
+ "Police 456\n",
+ "Policewoman 415\n",
+ "Police Chief 410\n",
+ "Police Captain 387\n",
+ "Police Commissioner 337\n",
+ "Name: character, dtype: int64"
+ ]
+ },
+ "execution_count": 39,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast[cast['character'].str.startswith('Police')].groupby('character')['character'].count().sort_values(ascending=False).iloc[:10]"
+ ]
},
{
"cell_type": "markdown",
@@ -956,10 +2412,53 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 40,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "year\n",
+ "1985 1\n",
+ "1986 3\n",
+ "1988 4\n",
+ "1989 2\n",
+ "1990 2\n",
+ "1991 3\n",
+ "1992 1\n",
+ "1993 4\n",
+ "1994 1\n",
+ "1995 2\n",
+ "1996 2\n",
+ "1997 2\n",
+ "1999 3\n",
+ "2000 3\n",
+ "2001 2\n",
+ "2003 3\n",
+ "2005 3\n",
+ "2006 2\n",
+ "2008 2\n",
+ "2009 1\n",
+ "2010 1\n",
+ "2012 1\n",
+ "2013 2\n",
+ "2014 1\n",
+ "2015 1\n",
+ "2016 5\n",
+ "2017 3\n",
+ "2018 1\n",
+ "2019 1\n",
+ "Name: year, dtype: int64"
+ ]
+ },
+ "execution_count": 40,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "cast[cast['name'] == 'Keanu Reeves'].groupby('year')['year'].count()"
+ ]
},
{
"cell_type": "markdown",
@@ -970,10 +2469,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 41,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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/5j0EJFdaNq0KRYsWIDJkycjIyMDIoIxY8agV69e6NKlC/r374969eohMDAQI0aMwJ9//qnMm5KSgvvuuw/169eHv78/BgwYgF9//VV5/8yZM9BoNFi7di2ioqLg4eGBFStW2GI1iciG+OwtIrIrDz30EK5cuYJHHnkEr732GtLT09G5c2c888wzGDlyJK5fv44pU6agqKgIaWlpAIDPP/8cGo0Gbdu2xdWrVzF9+nScOXMGhw8fhlarxZkzZxAWFobQ0FC89dZbuPvuu6HT6RAcHGzjtSUia2LSQ0R2JTs7G+Hh4bh06RI+++wzHDp0CN9//z22bt2qtPn999/RtGlTnDx5En/729/MPuPixYsICAjAkSNHEB4eriQ98+fPx8SJE625OkRkR3h6i4jsSkBAAJ599lm0bt0aDz/8MH744Qds374d9erVU16tWrUCAOUU1q+//ophw4ahefPm8PX1RVhYGACYXfzcuXNn664MEdkVV1sHQER0K1dXV7i63tw8lZSUIDY2Fm+88YZZu6CgIABAbGwsmjZtiiVLliA4OBglJSUIDw9HYWGhSXtvb++6D56I7BaTHiKyax07dsTnn3+O0NBQJREq69KlS/j555/x/vvvo3v37gCAb7/91tphEpED4OktIrJr48ePR05ODoYOHYr9+/fj9OnT2LZtG5566ikUFxejQYMG8Pf3xwcffIBTp04hLS0NkyZNsnXYRGSHmPQQkV0LDg7Gd999h+LiYvTp0wfh4eGYOHEi9Ho9tFottFotVq9ejR9++AHh4eH45z//iTfffNPWYRORHWL1FhEREakCj/QQERGRKjDpISIiIlVg0kNERESqwKSHiIiIVIFJDxEREakCkx4iIiJSBSY9REREpApMeoiIiEgVmPQQERGRKjDpISIiIlVg0kNERESqwKSHiIiIVOH/AbTg2DCqk9LQAAAAAElFTkSuQmCC\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "keanu_reeves = cast[cast['name'] == 'Keanu Reeves']\n",
+ "plt.scatter(x=keanu_reeves['year'], y=keanu_reeves['n'])\n",
+ "plt.xlabel('Year')\n",
+ "plt.ylabel('N')\n",
+ "plt.title('Keanu Reeves cast postions through his career over the years')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -984,10 +2501,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 69,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkQAAAHFCAYAAAAT5Oa6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABEA0lEQVR4nO3de1xVVf7/8feRqyAcRblICjpaeCMsLUEtvAuKl181VjqIpWbz1dRwmrTJUes3idV0mTRz+pbWjDmOee0ymOUtE7wNmJfEezolaIqgWCKyfn/080xHLgKCgPv1fDzO4+Fee+21P+vsczrv9tmbYzPGGAEAAFhYneouAAAAoLoRiAAAgOURiAAAgOURiAAAgOURiAAAgOURiAAAgOURiAAAgOURiAAAgOURiAAAgOURiFCrLViwQDabTdu3by92fVxcnJo1a3Zji/r/rtR29OjRcm+7efNmTZ8+XWfPni3zNm+88YZatmwpd3d32Ww2nT17ViNGjCgy/2bNmmnEiBHlrulmNH36dNlstkof74cffqi0MWuKo0ePymaz6eWXX67Uca/nfXIjrF+/XjabTevXr6/uUlDFCERADbR582bNmDGjzIEoPT1d48ePV/fu3bV27VqlpKTIx8dHU6dO1fLly6u2WAC4CbhWdwEArt+ePXskSaNHj9bdd9/taG/RokV1lQQAtQpniGA5c+bM0b333quAgAB5e3srPDxcL774oi5duuTUr1u3bmrXrp1SUlLUuXNn1a1bV82aNdP8+fMlSZ988onuvPNOeXl5KTw8XMnJyWXa/+eff66ePXvK19dXXl5e6tKli7744gvH+unTp+upp56SJDVv3lw2m63UU/bdunXTb37zG0lSp06dZLPZHF+JFfeV2dWufCXwwQcf6Omnn1bjxo1Vr149DRgwQFlZWTp37pwee+wxNWrUSI0aNdIjjzyi8+fPO42xZMkSderUSXa7XV5eXvrVr36lRx999JrPhc1m07hx4zR//nyFhYWpbt266tixo1JTU2WM0UsvvaTmzZurXr166tGjhw4ePOi0/Zo1azRo0CA1adJEnp6eatmypcaMGVPsV1affPKJ2rdvLw8PDzVv3rzEr36MMXrzzTfVvn171a1bVw0aNNADDzygw4cPX3M+Vxw/flz33XeffH19Zbfb9Zvf/EanTp1yrB85cqT8/Px0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ERERTtsPHTrUabmmv49RcVxUjZtC69at1bFjxyLtdrtdx48fdywfO3ZM99xzj8LCwvT666+rWbNm8vT01NatWzV27Fj9+OOPTtv7+fkVGdPd3b1Iu7u7uyTpp59+KrHGrKwsSdIDDzxQYp8zZ844hYMbqaQ5lTbXevXq6d5779WKFSv0l7/8RcOHD9fFixfVtm1b/eEPf9DDDz9cJfuVpMLCQvXp00fff/+9pk6dqvDwcHl7e6uwsFCRkZGOY5mdna3CwkIFBQUV2ffVbVlZWTLGOH1o/9KvfvWra86nuHFdXV3VsGFDnT592tE2aNAgNWvWTHPmzFGXLl20YMEC5eXlaezYsaWOXZ7XUWJioubMmaOnn35a0dHRatCggerUqaNRo0Y5vdZPnTqlkJCQMs2tYcOGTsseHh6SVOS9c7XTp0+X+RhI/w3aV6tTp46jZklq0qRJqfst63Nw+vRpNW/evMz11dT3MSqOQARLWbFihfLy8rRs2TLHmQTp59vWq1qjRo0k/fz3giIjI4vtU9IHcU03aNAgDRo0SBcvXlRqaqpmzpypoUOHqlmzZoqKiqqSfe7evVs7d+7UggULlJCQ4Gi/+sLrBg0ayGazKTMzs8gYV7c1atRINptNX375peOD/peKaytOZmambrnlFsdyQUGBTp8+7RQm6tSpo7Fjx+qZZ57Rn//8Z7355pvq2bOnwsLCSh27PK+jv//97xo+fLheeOEFp/U//PCD6tev71j29/fXf/7znzLNraIaNmxY5mMgSR9++KHTe/Rq/v7+knTNusv6HJS3vpvxfWx1BCJYypWvYH75wWaM0dtvv13l++7SpYvq16+vvXv3aty4caX2Lev/ddc0Hh4eio6OVv369bV69WqlpaVVWSAq7lhK0rx585yWvb29dffdd2vZsmV66aWXHF+vnDt3Th999JFT37i4OCUlJem7777TkCFDKlzbwoULnb5q/ec//6mCggJ169bNqd+oUaM0ffp0DRs2TBkZGZo1a9Y1xy7P68hmsxV5fj755BN99913atmypaMtNjZWf/zjH7V27Vr16NGjDDMsv+7du2vVqlXKyspyBIbLly9r8eLFTv369u0rV1dXHTp0SPfff3+J4912221q0aKF3n33XSUmJpYYVsv6HHTv3l0vvviidu7c6fS12QcffOC0bXmef9QuBCJYSu/eveXu7q6HH35Yv//97/XTTz9p7ty5ys7OrvJ916tXT2+88YYSEhJ05swZPfDAAwoICNCpU6e0c+dOnTp1SnPnzpUkhYeHS5Jef/11JSQkyM3NTWFhYfLx8anyOsvrj3/8o/7zn/+oZ8+eatKkic6ePavXX39dbm5uio6OrrL9tmrVSi1atNDkyZNljJGfn58++ugjrVmzpkjf559/XjExMerdu7cmTZqky5cva9asWfL29taZM2cc/bp06aLHHntMjzzyiLZv3657771X3t7eOnHihDZt2qTw8HD99re/vWZty5Ytk6urq3r37q09e/Zo6tSpioiIKBKy6tevr+HDh2vu3LkKDQ0tck1TccrzOoqLi9OCBQvUqlUr3X777dqxY4deeumlIl8zTZw4UYsXL9agQYM0efJk3X333frxxx+1YcMGxcXFqXv37tes61qeffZZrVq1Sj169NAf//hHeXl5ac6cOUWut2nWrJmee+45/eEPf9Dhw4cVExOjBg0aKCsrS1u3bpW3t7dmzJgh6ec/oTFgwABFRkbqySefVEhIiI4dO6bVq1dr4cKF5X4O3n33XfXv31//9//+XwUGBmrhwoVF/uxAeZ5/1DLVfFE3cF1Kurvqiv79+xe5y+qjjz4yERERxtPT09xyyy3mqaeeMv/617+K3FobHR1t2rZtW2TM0NBQ079//yLtkszYsWOL1Hb1nWIbNmww/fv3N35+fsbNzc3ccsstpn///mbJkiVO/aZMmWKCg4NNnTp1itRW1uehPHeZXb3/ksa8cifVqVOnjDHGfPzxxyY2Ntbccsstxt3d3QQEBJh+/fqZL7/8ssR6r7j6OTPmv3czvfTSS07txdW5d+9e07t3b+Pj42MaNGhgfv3rX5tjx44ZSWbatGlO269atcrcfvvtxt3d3YSEhJikpCTHXK727rvvmk6dOhlvb29Tt25d06JFCzN8+HCnOw6Lc2W8HTt2mAEDBph69eoZHx8f8/DDD5usrKxit1m/fr2RZJKSkkod+2pleR1lZ2ebkSNHmoCAAOPl5WW6du1qvvzySxMdHW2io6OdxsvOzjYTJkwwISEhxs3NzQQEBJj+/fs7bk0v6bgYY4p9vovz1VdfOf5ERVBQkHnqqafMX//612LfJytWrDDdu3c3vr6+xsPDw4SGhpoHHnigyG3tKSkpJjY21tjtduPh4WFatGjhdPdYeZ6DK68nT09P4+fnZ0aOHGlWrlxZ7PuvrO9j1B42Y4y5sREMAHDFpEmTNHfuXB0/frzIBcsAbhy+MgOAapCamqr9+/frzTff1JgxYwhDQDXjDBEAVAObzSYvLy/169dP8+fPL/VvDwGoepwhAoBqwP+LAjULf6kaAABYHoEIAABYHoEIAABYHtcQlVFhYaG+//57+fj4OP3gJAAAqLmMMTp37pyCg4Mdv4VXHAJRGX3//fdq2rRpdZcBAAAq4Pjx46X+GDCBqIyu/GTC8ePH5evrW83VAACAssjNzVXTpk2v+dNHBKIyuvI1ma+vL4EIAIBa5lqXu3BRNQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDwCEQAAsDzX6i6gtmk3bbXqeHhVdxkAANw0jib1r+4SOEMEAABAIAIAAJbHV2bltHtGX/n6+lZ3GQAAoBJxhggAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFgegQgAAFhetQaimTNn6q677pKPj48CAgI0ePBgZWRkOPUxxmj69OkKDg5W3bp11a1bN+3Zs8epz8WLF/XEE0+oUaNG8vb21sCBA/Wf//zHqU92drbi4+Nlt9tlt9sVHx+vs2fPVvUUAQBALVCtgWjDhg0aO3asUlNTtWbNGhUUFKhPnz7Ky8tz9HnxxRf1yiuvaPbs2dq2bZuCgoLUu3dvnTt3ztFn4sSJWr58uf7xj39o06ZNOn/+vOLi4nT58mVHn6FDhyo9PV3JyclKTk5Wenq64uPjb+h8AQBADWVqkJMnTxpJZsOGDcYYYwoLC01QUJBJSkpy9Pnpp5+M3W43b731ljHGmLNnzxo3Nzfzj3/8w9Hnu+++M3Xq1DHJycnGGGP27t1rJJnU1FRHn5SUFCPJ7Nu3r0y15eTkGEkmJyfnuucJAABujLJ+frtWaxq7Sk5OjiTJz89PknTkyBFlZmaqT58+jj4eHh6Kjo7W5s2bNWbMGO3YsUOXLl1y6hMcHKx27dpp8+bN6tu3r1JSUmS329WpUydHn8jISNntdm3evFlhYWFlrrHdtNWq4+F1vVMFgFrraFL/6i4BqHQ1JhAZY5SYmKiuXbuqXbt2kqTMzExJUmBgoFPfwMBAffvtt44+7u7uatCgQZE+V7bPzMxUQEBAkX0GBAQ4+lzt4sWLunjxomM5Nze3gjMDAAA1XY25y2zcuHH6+uuvtWjRoiLrbDab07Ixpkjb1a7uU1z/0saZOXOm4wJsu92upk2blmUaAACgFqoRZ4ieeOIJrVq1Shs3blSTJk0c7UFBQZJ+PsPTuHFjR/vJkycdZ42CgoKUn5+v7Oxsp7NEJ0+eVOfOnR19srKyiuz31KlTRc4+XTFlyhQlJiY6lnNzc9W0aVPtntFXvr6+1zFbAABQ01TrGSJjjMaNG6dly5Zp7dq1at68udP65s2bKygoSGvWrHG05efna8OGDY6w06FDB7m5uTn1OXHihHbv3u3oExUVpZycHG3dutXRZ8uWLcrJyXH0uZqHh4d8fX2dHgAA4OZUrWeIxo4dqw8++EArV66Uj4+P43oeu92uunXrymazaeLEiXrhhRd066236tZbb9ULL7wgLy8vDR061NF35MiRmjRpkho2bCg/Pz/97ne/U3h4uHr16iVJat26tWJiYjR69GjNmzdPkvTYY48pLi6uXBdUAwCAm1O1BqK5c+dKkrp16+bUPn/+fI0YMUKS9Pvf/14//vij/ud//kfZ2dnq1KmTPvvsM/n4+Dj6v/rqq3J1ddWQIUP0448/qmfPnlqwYIFcXFwcfRYuXKjx48c77kYbOHCgZs+eXbUTBAAAtYLNGGOqu4jaIDc3V3a7XTk5OXx9BgBALVHWz+8ac5cZAABAdSEQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAy3Ot7gJqm3bTVquOh1d1l4GbxNGk/tVdAgBAnCECAADgDFF57Z7RV76+vtVdBgAAqEScIQIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZHIAIAAJZXrYFo48aNGjBggIKDg2Wz2bRixQqn9VlZWRoxYoSCg4Pl5eWlmJgYHThwwKlPZmam4uPjFRQUJG9vb91555368MMPnfpkZ2crPj5edrtddrtd8fHxOnv2bBXPDgAA1BbVGojy8vIUERGh2bNnF1lnjNHgwYN1+PBhrVy5UmlpaQoNDVWvXr2Ul5fn6BcfH6+MjAytWrVKu3bt0n333acHH3xQaWlpjj5Dhw5Venq6kpOTlZycrPT0dMXHx9+QOQIAgFrA1BCSzPLlyx3LGRkZRpLZvXu3o62goMD4+fmZt99+29Hm7e1t3n//faex/Pz8zP/+7/8aY4zZu3evkWRSU1Md61NSUowks2/fvjLXl5OTYySZnJyc8k4NAABUk7J+frtWZxgrzcWLFyVJnp6ejjYXFxe5u7tr06ZNGjVqlCSpa9euWrx4sfr376/69evrn//8py5evKhu3bpJklJSUmS329WpUyfHOJGRkbLb7dq8ebPCwsJK3P+VGiQpNzdXktRu2mrV8fCq1LnebI4m9a/uEgAAKJcae1F1q1atFBoaqilTpig7O1v5+flKSkpSZmamTpw44ei3ePFiFRQUqGHDhvLw8NCYMWO0fPlytWjRQtLP1xgFBAQUGT8gIECZmZkl7n/mzJmOa47sdruaNm1a+ZMEAAA1Qo0NRG5ublq6dKn2798vPz8/eXl5af369YqNjZWLi4uj37PPPqvs7Gx9/vnn2r59uxITE/XrX/9au3btcvSx2WxFxjfGFNt+xZQpU5STk+N4HD9+vHInCAAAaowa+5WZJHXo0EHp6enKyclRfn6+/P391alTJ3Xs2FGSdOjQIc2ePVu7d+9W27ZtJUkRERH68ssvNWfOHL311lsKCgpSVlZWkbFPnTqlwMDAEvft4eEhDw+PIu27Z/SVr69vJc0QAADUBDX2DNEv2e12+fv768CBA9q+fbsGDRokSbpw4YIkqU4d52m4uLiosLBQkhQVFaWcnBxt3brVsX7Lli3KyclR586db9AMAABATVatZ4jOnz+vgwcPOpaPHDmi9PR0+fn5KSQkREuWLJG/v79CQkK0a9cuTZgwQYMHD1afPn0k/XydUcuWLTVmzBi9/PLLatiwoVasWKE1a9bo448/liS1bt1aMTExGj16tObNmydJeuyxxxQXF1fiBdUAAMBaqjUQbd++Xd27d3csJyYmSpISEhK0YMECnThxQomJicrKylLjxo01fPhwTZ061dHfzc1Nn376qSZPnqwBAwbo/Pnzatmypd577z3169fP0W/hwoUaP368I0gNHDiw2L99BAAArMlmjDHVXURtkJubK7vdrpycHK4hAgCglijr53etuIYIAACgKhGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5RGIAACA5blWdwG1Tbtpq1XHw6u6y7C8o0n9q7sEAMBNhDNEAADA8ghEAADA8vjKrJx2z+grX1/f6i4DAABUIs4QAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAyyMQAQAAy7uuQJSfn6+MjAwVFBRUVj0AAAA3XIUC0YULFzRy5Eh5eXmpbdu2OnbsmCRp/PjxSkpKqtQCAQAAqlqFAtGUKVO0c+dOrV+/Xp6eno72Xr16afHixZVWHAAAwI1Qod8yW7FihRYvXqzIyEjZbDZHe5s2bXTo0KFKKw4AAOBGqNAZolOnTikgIKBIe15enlNAAgAAqA0qFIjuuusuffLJJ47lKyHo7bffVlRUVOVUBgAAcINU6CuzmTNnKiYmRnv37lVBQYFef/117dmzRykpKdqwYUNl1wgAAFClKnSGqHPnzvrqq6904cIFtWjRQp999pkCAwOVkpKiDh06VHaNAAAAVcpmjDHVXURtkJubK7vdrpycHPn6+lZ3OQAAoAzK+vld5q/McnNzy7xzAgMAAKhNyhyI6tevX+Y7yC5fvlzhggAAAG60MgeidevWOf599OhRTZ48WSNGjHDcVZaSkqL33ntPM2fOrPwqAQAAqlCFriHq2bOnRo0apYcfftip/YMPPtBf//pXrV+/vrLqqzG4hggAgNqnrJ/fFbrLLCUlRR07dizS3rFjR23durUiQwIAAFSbCgWipk2b6q233irSPm/ePDVt2vS6iwIAALiRKvSHGV999VXdf//9Wr16tSIjIyVJqampOnTokJYuXVqpBQIAAFS1Cp0h6tevnw4cOKCBAwfqzJkzOn36tAYNGqT9+/erX79+lV0jAABAleIPM5YRF1UDAFD7VPofZizOhQsXdOzYMeXn5zu133777dczLAAAwA1Voa/MTp06pbi4OPn4+Kht27a64447nB5ltXHjRg0YMEDBwcGy2WxasWKF0/qsrCyNGDFCwcHB8vLyUkxMjA4cOFBknJSUFPXo0UPe3t6qX7++unXrph9//NGxPjs7W/Hx8bLb7bLb7YqPj9fZs2crMnUAAHATqlAgmjhxorKzs5Wamqq6desqOTlZ7733nm699VatWrWqzOPk5eUpIiJCs2fPLrLOGKPBgwfr8OHDWrlypdLS0hQaGqpevXopLy/P0S8lJUUxMTHq06ePtm7dqm3btmncuHGqU+e/Uxs6dKjS09OVnJys5ORkpaenKz4+viJTBwAANyNTAUFBQWbLli3GGGN8fHxMRkaGMcaYlStXmi5dulRkSCPJLF++3LGckZFhJJndu3c72goKCoyfn595++23HW2dOnUyzz77bInj7t2710gyqampjraUlBQjyezbt6/M9eXk5BhJJicnp8zbAACA6lXWz+8KXUOUl5engIAASZKfn59OnTql2267TeHh4fr3v/9dKUHt4sWLkiRPT09Hm4uLi9zd3bVp0yaNGjVKJ0+e1JYtWzRs2DB17txZhw4dUqtWrfSnP/1JXbt2lfTzGSS73a5OnTo5xomMjJTdbtfmzZsVFhZW4v6v1CD998dt201brToeXpUyx5vV0aT+1V0CAADlUqGvzMLCwpSRkSFJat++vebNm6fvvvtOb731lho3blwphbVq1UqhoaGaMmWKsrOzlZ+fr6SkJGVmZurEiROSpMOHD0uSpk+frtGjRys5OVl33nmnevbs6bjWKDMz0xHefikgIECZmZkl7n/mzJmOa47sdjt/cBIAgJtYhc4QTZw40RFKpk2bpr59+2rhwoVyd3fXggULKqUwNzc3LV26VCNHjpSfn59cXFzUq1cvxcbGOvoUFhZK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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "hamlet_df = pd.DataFrame(movies[movies['title'].str.contains('Hamlet', case=False)].groupby('decade')['title'].count())\n",
+ "plt.barh(y=hamlet_df.index, width=hamlet_df['title'])\n",
+ "plt.title('Hamlet films made by each decade')\n",
+ "plt.xlabel('Number of Films')\n",
+ "plt.ylabel('Decade')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -1004,17 +2539,43 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 71,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "11823"
+ ]
+ },
+ "execution_count": 71,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(cast[(cast['year'] >= 1960) & (cast['year'] <= 1969) & (cast['n'] == 1.0) & (cast['type'].isin(['actor', 'actress']))])"
+ ]
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 72,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "26344"
+ ]
+ },
+ "execution_count": 72,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "len(cast[(cast['year'] >= 2000) & (cast['year'] <= 2009) & (cast['n'] == 1.0) & (cast['type'].isin(['actor', 'actress']))])"
+ ]
},
{
"cell_type": "markdown",
@@ -1025,25 +2586,220 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 82,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " character \n",
+ " \n",
+ " \n",
+ " title \n",
+ " year \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " The Muppet Movie \n",
+ " 1979 \n",
+ " 8 \n",
+ " \n",
+ " \n",
+ " An American Werewolf in London \n",
+ " 1981 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " The Great Muppet Caper \n",
+ " 1981 \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " The Dark Crystal \n",
+ " 1982 \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " The Muppets Take Manhattan \n",
+ " 1984 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " Follow That Bird \n",
+ " 1985 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " The Muppet Christmas Carol \n",
+ " 1992 \n",
+ " 7 \n",
+ " \n",
+ " \n",
+ " Muppet Treasure Island \n",
+ " 1996 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " Muppets from Space \n",
+ " 1999 \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " The Adventures of Elmo in Grouchland \n",
+ " 1999 \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " character\n",
+ "title year \n",
+ "The Muppet Movie 1979 8\n",
+ "An American Werewolf in London 1981 2\n",
+ "The Great Muppet Caper 1981 6\n",
+ "The Dark Crystal 1982 2\n",
+ "The Muppets Take Manhattan 1984 7\n",
+ "Follow That Bird 1985 3\n",
+ "The Muppet Christmas Carol 1992 7\n",
+ "Muppet Treasure Island 1996 4\n",
+ "Muppets from Space 1999 4\n",
+ "The Adventures of Elmo in Grouchland 1999 3"
+ ]
+ },
+ "execution_count": 82,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "frank_oz = cast[cast['name'] == 'Frank Oz']\n",
+ "frank_oz_more_than_one = pd.DataFrame(frank_oz.groupby(['title', 'year'])['character'].count())\n",
+ "frank_oz_more_than_one[frank_oz_more_than_one['character'] > 1].sort_index(axis='index', level='year')"
+ ]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "### Section II - Q10: List each of the characters that Frank Oz has portrayed at least twice"
+ "### Section II - Q10: List each of the characters that Frank Oz has portrayed at least twice"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 85,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " \n",
+ " \n",
+ " character \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " Animal \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " Bert \n",
+ " 3 \n",
+ " \n",
+ " \n",
+ " Cookie Monster \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " Fozzie Bear \n",
+ " 4 \n",
+ " \n",
+ " \n",
+ " Grover \n",
+ " 2 \n",
+ " \n",
+ " \n",
+ " Miss Piggy \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ " Sam the Eagle \n",
+ " 5 \n",
+ " \n",
+ " \n",
+ " Yoda \n",
+ " 6 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title\n",
+ "character \n",
+ "Animal 6\n",
+ "Bert 3\n",
+ "Cookie Monster 5\n",
+ "Fozzie Bear 4\n",
+ "Grover 2\n",
+ "Miss Piggy 6\n",
+ "Sam the Eagle 5\n",
+ "Yoda 6"
+ ]
+ },
+ "execution_count": 85,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "frank_oz_twice = pd.DataFrame(frank_oz.groupby('character')['title'].count())\n",
+ "frank_oz_twice[frank_oz_twice['title'] >= 2]"
]
},
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- },
{
"cell_type": "markdown",
"metadata": {},
@@ -1063,9 +2819,30 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 43,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 43,
+ "metadata": {},
+ "output_type": "execute_result"
+ },
+ {
+ "data": {
+ "image/png": "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hsIaIobGOobCGiKsYzAUUjqR18QAAAwMbywHAGQlPgCArMQHAJCV+KDsPO0I4O1l0F7tAieqWCzG008/HZdeemm5R4Gy2bVrV9xzzz3xgx/8IHbt2hXDhw+PxsbGuO666+LGG2+M4cOHl3tEGDBe7RIRHR0dsXTp0viHf/iHco9yTAcOHIgtW7bEOeecE+9973v7nXvttdfiG9/4RsydO7dM0x3fm/+M/pvdfffd8elPfzrGjBkTERErV67MOdYp27NnT6xZsya2bdsWY8eOjXnz5kVDQ0O5xzquz33uc/GJT3wiPvjBD5Z7lFPy5S9/OTZv3hzXXHNNfOITn4ivfe1rsXz58jh06FDMnj077rjjjqiqOr1/ztq8eXN86EMfisbGxqiuro4f/vCH8alPfSp6e3vj8ccfj0svvTQef/zxqKmpKfeoMDAG4L3kKt5TTz2Vhg0bVu4xjumnP/1pGj9+fCoUCmnYsGFp2rRpaefOnX3nOzs7T/s1FAqFdNlll6Xm5uZ+W6FQSFdccUVqbm5OV111VbnHPK6xY8eml156KaWU0nPPPZfq6upSXV1damlpSePGjUujR49OP/nJT8o85fEd/lpqampKd955Z9q1a1e5RyrZHXfckWpqatJHP/rRVFdXl+688840ZsyYtGzZstTW1pbOO++89Jd/+ZflHvO4fuM3fiO1trb27X/ta19LkydPTiml9Morr6TLLrss/emf/mm5xivJq6++mu6999504403pt/5nd9JM2bMSDfeeGP6yle+kl599dVyjzcgOjs70+23317uMU5IR0dH6u7uPuJ4b29vWr9+fRkmesPbIj6+/e1vH3P767/+69P+G/d1112Xrr322vQ///M/adu2bWnmzJmpsbEx7dixI6VUGfHR1taWGhsb03e/+91+x6uqqtLWrVvLNFXpCoVCevHFF1NKKV1//fWpubk57du3L6WU0muvvZauvfba9LGPfaycI56QQqGQvvOd76Rbb701nXvuuemMM85IH/7wh9PDDz+cDh48WO7xTshFF12UvvnNb6aU3vghYvjw4em+++7rO/+tb30rXXzxxeUa74RVV1enX/ziF337Bw8eTGeccUbq7OxMKaW0bt26VF9fX67xTtjWrVtTfX19Ouuss9KsWbPSH//xH6fPfOYzadasWemss85Kv/Irv1JR/9bfSiX8wLpz5850xRVXpGHDhqXhw4enuXPn9ouQcn/PeFvEx+Gf8AqFwltup/sX0vnnn5+eeeaZfsfmz5+fLrjggvSLX/yi7F9IJ+o///M/0yWXXJL+7M/+LPX29qaUKjs+jhZTGzduTOPGjSvHaCV58zp6e3vTAw88kH77t387DR8+PNXX16cvfvGLadu2bWWe8tiqq6v7AjyllM4444z0X//1X337zz//fBoxYkQ5RivJ+PHj0w9+8IO+/Z07d6ZCoZD279+fUkpp+/bt6cwzzyzXeCesubk5XX/99amnp+eIcz09PemTn/xkam5uLsNkpXn66aePuT3wwAOn/X9v586dm6688sq0adOm1N7eni6//PI0adKk9Morr6SU3oiPQqFQtvneFvFRX1+fHnzwwbc8/6Mf/ei0/0KqqalJP/7xj484fsstt6Rx48alJ5544rRfw2Hd3d1p7ty5aeLEiemZZ55JZ5xxRsXFx+7du1NKb3xtvfmbXUpvfKMoFovlGK0kb46PN9uxY0daunRpGj9+/Gn/NdXY2JgeffTRlFJKP/vZz9KwYcPSN77xjb7zjzzySLrwwgvLNd4Ju/XWW9OECRPSo48+mr73ve+lq666qt836cceeyy9613vKuOEJ6a6uvqY/5afffbZVF1dnXGik3OsH1gPHz/d/23U19enH/7wh337r732Wpo1a1a67LLL0ssvv1z2H1hP72dhDZBJkybFk08+Gdddd91RzxcKhdP+5Z7vec97YvPmzUe8IuTLX/5ypJTiwx/+cJkmK93IkSNjzZo1cf/990dLS0scPHiw3COV7Oqrr46qqqro6uqKn/3sZ/G+972v79wLL7wQ5557bhmnOzUXXHBBtLa2xtKlS+M73/lOucc5pjlz5sTcuXNj1qxZ8d3vfjcWLVoUn//85+Pll1+OQqEQX/rSl+JjH/tYucc8rmXLlsWuXbti5syZcfDgwZgyZUrcd999fecLhUIsX768jBOemLPPPju2bdt2xBPiD/v5z38eZ599duapSjdmzJi466674uqrrz7q+a1bt8bMmTMzT1WavXv39vv/ulgsxr/8y7/Exz/+8bjqqqv6fX2Vw9siPv78z/889u3b95bnL7744vj3f//3jBOV7iMf+Uh8/etfjxtuuOGIc6tXr45Dhw7F3/3d35VhspN3/fXXxwc+8IHYsmVLRb3j8dKlS/vtjxgxot/+ww8/XBGvIBk/fvwxX75ZKBSipaUl40Slu/3226O6ujo2btwYN910UyxatCgmTpwYCxcujP3798fMmTPjr/7qr8o95nGNHDkyHnjggXjttdfi9ddfj5EjR/Y7P3369DJNVprPfOYzMW/evPiLv/iLaGlpidra2igUCtHZ2Rnt7e3R1tYWCxYsKPeYxzVp0qTYuXPnW/536X//939P+x9YL7roonjmmWeiqamp71hVVVX88z//c3z84x+Pa6+9tozTeaktAAPorrvuirvvvjs6OzujUChExBt/SLCuri4WLFgQCxcuLPOEx/fggw/Gvn374tOf/vRRz+/ZsyceeuihmDdvXubJTtyiRYviqaeeiscff/yIc6+//np89KMfjYcffjgOHTpUhunEBwCDYPv27dHZ2RkREXV1ddHY2Fjmid5eXn/99di/f3+MGjXqqOcPHjwYv/zlL8t219mfVwdgwDU2NsaUKVNiypQpfeHR0dERf/AHf1DmyU5dJayjqqrqLcMjImLnzp1x++23Z5yoP3c+AMji6aefjl//9V+vyCeZv9lQWEe51/C2eMIpAIPvoYceOub55557LtMkp2YorON0X4M7HwAMiGHDhh33TxcUCoXT/o7BUFjH6b4Gz/kAYECMHTs2vvnNb8ahQ4eOuj355JPlHvGEDIV1nO5rEB8ADIjDf9DxrVTCH3SMGBrrON3X4DkfAAyIofAHHSOGxjpO9zV4zgcAkJVfuwAAWYkPACAr8QEAZCU+AICsxAcAkJX4AACyEh8AQFbiAwDI6v8BM6oxaKrvWUwAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
"source": [
"christmas = release_dates[(release_dates.title.str.contains('Christmas')) & (release_dates.country == 'USA')]\n",
"christmas.date.dt.month.value_counts().sort_index().plot(kind='bar')"
@@ -1083,10 +2860,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 86,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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e3X//ffb/8d2Kxo3bix/f3/NmTNHjz76aLYbQt26ddW4cWNNmTJFP/74o5555hn5+PjkeF6ffPKJwymQTz/9VKmpqRnuonzqqac0fvx4Pf744zp8+LCmTJmS6+XKLR8fHzVo0EBRUVGaPn26/ZEWaWlpWrx4scqWLat7770319O9/n+At3utt6pVq1aaOnWqFi9erJdeesnevmLFCiUmJmZ4nNPAgQP1/PPPa8eOHVqzZo1GjBjhcPo0M506ddKkSZNUsmTJHO+0PDw81Lx5cxUvXlxfffWV9u7de9PgeaNb2fZy09dms8nd3d1hO4yPj8/0rvZ0WS1fTtdVRESEpk6dqk8++cThGcZLlizJ8TLmt1vdbipXrqxKlSpp//79mjRpUq77e3p6qkmTJlq9erWmTp3qcKQrKSlJq1evVtOmTR326zabLdPLgdIvkUg/G7FkyRL98ccfevPNN9W0adMM4z/yyCP6+OOPsw2e0p+n0MeMGSNfX1/76XQfHx81bNhQ7777rs6cOZOj0+wFsY+6mdysr/S78A8cOODwn4XVq1cXfKG5lJf90+3q+iOjeXnEU37kldx8N3NTb35+TpYEz7vuukvvvvuu+vfvrwsXLqhnz54KDAzUr7/+qv379+vXX3/V7NmzJUlvvvmm2rVrp9atW2vkyJG6du2apkyZIh8fH124cME+TZvNpieeeEIff/yx7r77btWsWVPfffddpjv+t99+W02bNtWDDz6o559/XuHh4bp8+bKOHTumNWvW2K+zy83yvPXWW3rqqaf00EMP6emnn1ZQUJCOHTum/fv3a9asWQ7jDxs2TL1795bNZrvpjvFGUVFRcnV1VevWrXXw4EGNHTtWNWvWVK9evRzGK168uPr166fZs2crLCwsz9fE5lZkZKRat26tiIgIjRo1Su7u7nr//ff1448/aunSpXn632mNGjW0bNkyLV++XBUrVpSnp6dq1KhxW9Z6q1q3bq22bdtq9OjRSkhIUJMmTXTgwAGNGzdOtWvXVt++fR3Gf+yxxzRixAg99thjSk5OztFflhg+fLhWrFihZs2a6aWXXtL999+vtLQ0nTx5UuvXr9fIkSPVoEED/f3vf9fPP/+sVq1aqWzZsrp48aLefvttubm55fkB+rey7eW0b6dOnRQVFaXBgwerZ8+eOnXqlN58802FhITo6NGj9unl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NWqUnnjiCaWkpPxZjKurnnzySU2bNs1ZZQEAAKCAOC14ent76/3339e0adP0008/yRije+65Rz4+Ps4qCQAAAAXIaafa08XFxSkuLk733nuvfHx8ZIxxdkkAAAAoAE4LnufPn1erVq107733qkOHDoqLi5MkPfXUUzxKCQAAoAhyWvB86aWX5ObmppMnT8rb29ve3rt3b61bt85ZZQEAAKCAOO0az/Xr1+urr75S2bJlHdorVaqkEydOOKkqAAAAFBSnHfFMTEx0ONKZ7ty5c/Lw8HBCRQAAAChITguezZo108KFC+3DNptNaWlpmjZtmiIiIpxVFgAAAAqI0061T5s2TS1atNDu3bt19epVvfLKKzp48KAuXLignTt3OqssAAAAFBCnHfGsWrWqDhw4oPr166t169ZKTExU9+7dtXfvXt19993OKgsAAAAFxClHPFNSUtSmTRt98MEHmjBhgjNKAAAAgMWccsTTzc1NP/74o2w2mzNmDwAAACdw2jWe/fr109y5czV58mRnlVCohb8a7ewScu345I7OLgEAADiR04Ln1atX9c9//lMbNmxQvXr1MvyN9hkzZjipMgAAABQEy4Pn//73P4WHh+vHH39UnTp1JElHjhxxGIdT8AAAAEWP5cGzUqVKiouL05YtWyT9+Scy33nnHQUFBVldCgAAACxk+c1FxhiH4S+//FKJiYlWlwEAAACLOe05nuluDKIAAAAomiwPnjabLcM1nAV9TWd4eLh9vte/hgwZkun4W7duzXT8//73vwVaJwAAQFFm+TWexhgNGDBAHh4ekqSkpCQ999xzGe5qj4qKyrd57tq1S9euXbMP//jjj2rdurUeeeSRbPsdPnxYfn5+9uHSpUvnW00AAAB3GsuDZ//+/R2Gn3jiiQKf542BcfLkybr77rvVvHnzbPsFBgaqePHiBVgZAADAncPy4Dlv3jyrZ+ng6tWrWrx4sUaMGHHTU/y1a9dWUlKSqlatqtdff10RERFZjpucnKzk5GT7cEJCQr7VDAAAUBQ4/eYiq61atUoXL17UgAEDshwnJCREH374oVasWKGoqChVrlxZrVq10vbt27PsExkZKX9/f/urXLlyBVA9AABA4eW0v1zkLHPnzlX79u0VGhqa5TiVK1dW5cqV7cONGjXSqVOnNH36dDVr1izTPmPGjNGIESPswwkJCYRP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u7u76tatqw0bNqhbt2729g0bNqhLly6Z9mnUqJHWrFnj0LZ+/XrVq1dPbm5umfbx8PCQh4eHQ1vx4sVvrfgiwM/Pjx1rPmA95g/WY/5gPeYP1mP+KIj1yJHOglPkby6SpBEjRuif//ynPv74Yx06dEgvvfSSTp48qeeee07Sn0cr+/XrZx//ueee04kTJzRixAgdOnRIH3/8sebOnatRo0Y5axEAAAAKvSJ/xFOSevfurfPnz+uNN95QXFycqlevrrVr1yosLEySFBcX5/BMzwoVKmjt2rV66aWX9N577yk0NFTvvPOOevTo4axFAAAAKPTuiOApSYMHD9bgwYMzfW/+/PkZ2po3b649e/YUcFVFl4eHh8aNG5fh8gPkDusxf7Ae8wfrMX+wHvMH67FwuiMeIA8AAADnuyOu8QQAAIDzETwBAABgCYInAAAALEHwBAAAgCUInsg3kZGReuCBB+Tr66vAwEB17dpVhw8fdnZZhV5kZKRsNpuGDx/u7FIKndOnT+uJJ55QyZIl5e3trVq1aun77793dlmFSmpqql5//XVVqFBBXl5eqlixot544w2lpaU5u7Tb2vbt29W5c2eFhobKZrNp1apVDu8bYzR+/HiFhobKy8tLLVq00MGDB51T7G0su/WYkpKi0aNHq0aNGvLx8VFoaKj69eunM2fOOK9g3BTBE/lm27ZtGjJkiL799ltt2LBBqampatOmjRITE51dWqG1a9cuffjhh7r//vudXUqh89tvv6lJkyZyc3PTl19+qf/85z966623+ItiuTRlyhTNmTNHs2bN0qFDhzR16lRNmzZN7777rrNLu60lJiaqZs2amjVrVqbvT506VTNmzNCsWbO0a9cuBQcHq3Xr1rp8+bLFld7esluPv//+u/bs2aOxY8dqz549ioqK0pEjR/Twww87oVLkFI9TQoH59ddfFRgYqG3btqlZs2bOLqfQuXLliurUqaP3339fEydOVK1atTRz5kxnl1VovPrqq9q5c6e+/vprZ5dSqHXq1ElBQUGaO3euva1Hjx7y9vbWokWLnFhZ4WGz2bRy5Up17dpV0p9HO0NDQzV8+HCNHj1akpScnKygoCBNmTJFzz77rBOrvX3duB4zs2vXLtWvX18nTpxQ+fLlrSsOOcYRTxSYS5cuSZICAgKcXEnhNGTIEHXs2FEPPfSQs0splFav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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "summer = release_dates[(release_dates['title'].str.contains('Summer', case=False)) & (release_dates['country'] == 'USA')]\n",
+ "plt.hist(x=summer['date'].dt.month)\n",
+ "plt.title('Frequency by month of movies released in the USA with \"Summer\" in the title')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.xlabel('Month Number')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -1100,10 +2895,28 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 87,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoEAAAHFCAYAAACNciNfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAAA9hAAAPYQGoP6dpAABIWElEQVR4nO3dd3RU1d7G8WdIGSAkoZlAKEmk9ypIE0LoRQQV5SJVvSggIHBVbICiAZFcFAQsGEClCioKUiIBqUoHuUpReu/BACFlv3+4Mi9DEhIgYcKc72etWStnzym/szNzzpPTYjPGGAEAAMBScrm6AAAAANx9hEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgEAACyIEAgAAGBBtxQCp02bJpvNluZr6NCh2VWjJY0YMUI2m01nzpxxdSl3Rc+ePZUvX75sX86cOXNUqVIl5cmTRzabTdu2bcv2ZWYVm82mESNGuLqMW7Jy5UrZbDatXLnS1aXckQMHDshms2natGk3HS871nfSpElpLjdlWV9//XWWLSstGS2nf//+stlsTm1xcXEaM2aMqlWrJj8/P/n6+qpUqVLq3LmzVq1aleZ8zpw5I7vdLpvNpk2bNmX5etyoSZMmatKkiWP48uXLGjFiRJq/uzvdHvfs2dOxrBEjRigkJCTN8RISElSkSJE7/r3OnDlT48ePT/O9u7Edyez63jhNZsbLrGPHjmnEiBFpbuPv1v5m8eLF6fZ1SEiIevbs6Ri+Wb0pn7/s4Hk7E0VFRal8+fJObUFBQVlSEJBdTp8+rW7duqlVq1aaNGmS7Ha7ypYt6+qyMm39+vUqXry4q8vATdSsWVPr169XxYoVs2yekyZNUuHChZ12GDlZUlKSWrRooZ07d+o///mP6tSpI0nau3evvv/+e61evVqNGzdONd0XX3yha9euSZKmTp2q2rVrZ2udkyZNchq+fPmyRo4cKUlO4fBu+uGHH3Ty5ElJ//TBY489dlvzmTlzpn777TcNGjQo1Xs5dTvyxhtvaODAgVk2v2PHjmnkyJEKCQlR9erVs2y+t2Lx4sX66KOP0gyC33zzjfz8/BzDrqr3tkJg5cqVM/0FTUhIkM1mk6fnbS0KyDJ79uxRQkKCnnrqqTR3Qjndgw8+6OoSlJSUpMTERNntdleXkiP5+fnliN+TK/38889at26dPv/8c/Xq1cvR3rJlS/Xv31/JyclpTvf5558rICBAwcHBmjVrliIjI5UnT55sqzMrg3pWmTp1qry9vdW4cWMtW7ZMR44cyfLAllM/n6VKlXJ1CXdVjRo1XF2CpCy+JjDltMEXX3yhIUOGqFixYrLb7dq3b58kKTo6WuHh4fLz81PevHnVoEED/fTTT6nms2jRIlWvXl12u12hoaF6//33Ux0OvdnpmbQOd+/du1f/+te/FBAQILvdrgoVKuijjz5Ks/5Zs2bptddeU1BQkPz8/NSsWTPt3r071XKWLFmi8PBw+fv7K2/evKpQoYIiIiIk/fNXrc1m0/r161NN99Zbb8nLy0vHjh3LsE8PHz6sTp06yc/PT/7+/nrqqad0+vRpx/tPP/20ChYsqMuXL6eatmnTpqpUqVK68/7oo4+UK1cunTp1ytE2btw42Ww29evXz9GWnJysAgUKaMiQIY62a9euadSoUSpfvrzsdrvuu+8+9erVy6m2FHPmzFG9evXk4+OjfPnyqWXLltq6dWuG67527VoVLlxY7dq1U1xc3E3HXbhwoerVq6e8efPK19dXzZs3d+r7nj17qmHDhpKkJ554Qjab7aZ/7adc+rBixQo9++yzKlSokPz8/NS9e3fFxcXpxIkT6ty5s/Lnz6+iRYtq6NChSkhIcJrHuXPn1LdvXxUrVkze3t66//779dprryk+Pt4xTo0aNdSoUaNUy09KSlKxYsXUqVMnR1tan+sTJ06oT58+Kl68uLy9vRUaGqqRI0cqMTHRabzJkyerWrVqypcvn3x9fVW+fHm9+uqrN+3TlO/Ye++9p1GjRik0NFR2u10xMTGSpE2bNunhhx9WwYIFlTt3btWoUUNz58696TxTZGba06dPq2/fvqpYsaLy5cungIAANW3aVKtXr041v8ysX2b76tixY+rcubN8fX3l7++vJ554QidOnMjUeqV1Ojjl1NO+ffvUpk0b5cuXTyVKlNCQIUOcPgtpCQkJ0a5du7Rq1SrHpTc3njJLSEjI1PYqs9vfO3X27FlJUtGiRdN8P1eu1LudX375Rb/99pu6deumZ599VhcvXtT8+fMzXNauXbtks9k0b948R9vmzZtls9lSbfsefvhh1apVyzF8/engAwcO6L777pMkjRw50tHXNx59PXnypLp06SJ/f38FBgaqd+/eunjx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WMak/lz36dPH5MuXz/F7SvH+++87dqjG/PM5z58/f4brfKOU71ipUqUcf3SkKF++vKlRo4ZTfcYY065dO1O0aFHH7yKtUJTZaW+UmJhoEhISTHh4uOnYsaOjPTPrl9m+mjx5spFkvvvuO6fxUkLK7YbAtD4Lbdq0MeXKlbvp/IwxplKlSo6wktayMtpe3cr292brlNkQaIwxU6dONfny5XPsH4oWLWq6d+9ufv7551TTx8XFGT8/P/Pggw862nr06GFsNpsjhN3MU089Ze6//37HcLNmzcyzzz5rChQoYKZPn26MMWbt2rVO3ztjnEOgMcacPn061XcsRcr2+L333nNq79u3r8mdO/dN9wOZkZycbEqXLm2KFSvmCFMpy/zpp58c4/3111/Gw8Mj1cGFG7Vt2zZVoEpx4zo++eSTxm63m0OHDjmN17p1a5M3b15z4cIFY0zmP2+3K70QGBgYaGJjYx1tJ06cMLly5TIRERE3nV/K/iit72xmv5OZ3delJ63vRorrQ2BG9d4YAm9l35qR2zodPGPGDG3cuNHpdf01f48++qjT+OvWrdO5c+fUo0cPJSYmOl7Jyclq1aqVNm7cqLi4OMXFxWnjxo3q1KmTcufO7Zje19dX7du3v51SdfXqVf3000/q2LGj8ubN67T8Nm3a6OrVq9qwYYPTNA8//LDTcNWqVSVJBw8edKxPbGys+vbte9M7dp5//nlJ0qeffupomzhxoqpUqaKHHnooU/V37drVabhz587y9PR0nJKTpIEDB2rbtm1au3atJCk2NlZffPGFevTokeEdUOHh4YqOjnas1+XLlzV48GAVLlxYy5cvl/TPaaSUQ87SPxcv58+fX+3bt3fqz+rVq6tIkSKOU2FLly5VYmKiunfv7jRe7ty51bhx41R34Rlj1KdPHw0fPlwzZ87USy+9lGH/7N69W8eOHVO3bt2cTjPly5dPjz76qDZs2JDmqfLMateundNwhQoVJElt27ZN1Z7y+ZCkFStWyMfHJ9WF3SmH/1NOwxUqVEjt27fX9OnTHddKnT9/Xt999526d+9+02tpf/jhB4WFhSkoKMipf1u3bi1Jjrsw69SpowsXLqhLly767rvvbvkOx4cfflheXl6O4X379umPP/5wfDZv/E4dP3483dNDtzrtlClTVLNmTeXOnVuenp7y8vLSTz/9pN9//90x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7gDTW7/M9lVYWJjmzp2rhQsXOp32mjlz5i2sZda606Memd3+pqdMmTIKDg7WvHnz9OKLLzpt706fPq2YmBinyx7Onj0rX1/fNLe1f/zxh6T/D90pR8A+/fRTlS5d2mncK1euqEOHDvr8889vGgKlf44Gzp07VyVKlHBcqlG2bFmVLFlSb775phISEpz+kE1Ldh/RSs/MmTN15coVvf3222mern788cf1+eefq2/fvmrRooU8PDw0efJk1atXL9153spnJjw8XN98842OHTvm9IfjjBkzlDdv3hz7SJmMZMXvM7P7uszUkNFR6Fup93b2rem5KyEwX758mjBhgnr06KFz587pscceU0BAgE6fPq3t27fr9OnTjr/23377bbVq1UrNmzfXkCFDlJSUpDFjxsjHx8fplIXNZtNTTz2lzz//XKVKlVK1atX066+/prmx/uCDD9SwYUM1atRIzz//vEJCQnTp0iXt27dP33//vVasWHHL6zNu3Dg988wzatasmZ599lkFBgZq37592r59uyZOnOg0/sCBAx2PJUk55ZVZCxYskKenp5o3b65du3bpjTfeULVq1dS5c2en8fLnz6/u3btr8uTJCg4OvqVrKMPDwzVhwgTlyZNHDRo0kPTP0dHQ0FAtW7ZMDz/8sNPpnieffFJfffWV2rRpo4EDB6pOnTry8vLSkSNHFBMTow4dOqhjx44KCQnRW2+9pddee01//fWXWrVqpQIFCujkyZP69ddf5ePjk+Zf5xUqVNDq1avVrFkzPfTQQ4qOjk739EeuXLn03nvvqWvXrmrXrp369Omj+Ph4jR07VhcuXNDo0aMz3Q9ZqXv37vroo4/Uo0cPHThwQFWqVNGaNWv07rvvqk2bNql2SL1799aYMWP0r3/9S3ny5NETTzyR4TLeeustLV++XPXr19eAAQNUrlw5Xb16VQcOHNDixYs1ZcoUFS9eXM8++6zjd1u0aFGdOHFCERER8vf3T/fIQ0Y+/vhjtW7dWi1btlTPnj1VrFgxnTt3Tr///ru2bNni9MiO2522Xbt2evvttzV8+HA1btxYu3fv1ltvvaXQ0FCnx7pkZv0y21fdu3fXf//7X3Xv3l3vvPOOypQpo8WLF2vp0qW31U9ZoUqVKpo9e7bmzJmj+++/X7lz51aVKlUyPf2tbH/T8/7776tz584KDw/Xs88+qyJF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aU6T1pHAEiVK6OLFi/Lz88vS+giBAABkj9jYWPn7+2fL/ttduPWRwMuXLytXLufLHj08PG76iBi73S673Z7dpQEAALiUW4fA9u3b65133lHJkiVVqVIlbd26VZGRkerdu7erSwMAAHAptw6BEyZM0BtvvKG+ffvq1KlTCgoKUp8+ffTmm2+6ujQAAACXcusQ6Ovrq/Hjx2v8+PGuLgUAACBHcevnBAIAACBthEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgEAACyIEAgAAGBBhEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgEAACyIEAgAAGBBhEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgEAACyIEAgAAGBBhEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgEAACyIEAgAAGBBbh0CQ0JCZLPZUr369evn6tIAAABcytPVBWSnjRs3KikpyTH822+/qXnz5nr88cddWBUAAIDruXUIvO+++5yGR48erVKlSqlx48YuqggAACBncOvTwde7du2avvzyS/Xu3Vs2m83V5QAAALiUWx8JvN63336rCxcuqGfPnjcdLz4+XvHx8Y7h2NjYbK4MAADg7rPMkcCpU6eqdevWCgoKuul4ERER8vf3d7xKlChxlyoEAAC4eywRAg8ePKjo6Gg988wzGY47bNgwXbx40fE6fPjwXagQAADg7rLE6eCoqCgFBASobdu2GY5rt9tlt9vvQlUAAACu4/ZHApOTkxUVFaUePXrI09MSmRcAACBDbh8Co6OjdejQIfXu3dvVpQAAAOQYbn9orEWLFjLGuLoMAACAHMXtjwQCAAAgNUIgAACABRECAQAALIgQCAAAYEGEQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAWRAgEAACwIEIgAACABRECAQAALIgQCAAAYEGEQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAWRAgEAACwIEIgAACABRECAQAALIgQCAAAYEGEQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAWRAgEAACwIEIgAACABRECAQAALIgQCAAAYEGEQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAWRAgEAACwILcPgUeP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gQO1bNky5c6dO93x6Nvb07p1a8fPVapUUb169VSqVClNnz5dDz74oCT61p1xOjgLFS5cWB4eHqmO+p06dSrVX1K4fSl3rtHPt++FF17QwoULFRMTo+LFizva6ds74+3trdKlS6t27dqKiIhQtWrV9MEHH9Cvd2Dz5s06deqUatWqJU9PT3l6emrVqlX68MMP5enp6eg/+jZr+Pj4qEqVKtq7dy+fWwsgBGYhb29v1apVS8uXL3dqX758uerXr++iqtxPaGioihQp4tTP165d06pVq+jnDBhj1L9/fy1YsEArVqxQaGio0/v0bdYyxig+Pp5+vQPh4eHauXOntm3b5njVrl1bXbt21bZt23T//ffTt1koPj5ev//+u4oWLcrn1gpcdkuKm5o9e7bx8vIyU6dONf/73//MoEGDjI+Pjzlw4ICrS7unXLp0yWzdutVs3brVSDKRkZFm69at5uDBg8YYY0aPHm38/f3NggULzM6dO02XLl1M0aJFTWxsrIsrz9mef/554+/vb1auXGmOHz/ueF2+fNkxDn17e4YNG2Z+/vlns3//frNjxw7z6quvmly5cplly5YZY+jXrHT93cHG0Ld3YsiQIWblypXmr7/+Mhs2bDDt2rUzvr6+jn0WfeveCIHZ4KOPPjLBwcHG29vb1KxZ0/H4DWReTEyMkZTq1aNHD2PMP48uGD58uClSpIix2+3moYceMjt37nRt0feAtPpUkomKinKMQ9/ent69ezu+9/fdd58JDw93BEBj6NesdGMIpG9v3xNPPGGKFi1qvLy8TFBQkOnUqZPZtWuX43361r3ZjDHGNccgAQAA4CpcEwgAAGBBhEAAAAALIgQCAABYECEQAADAggiBAAAAFkQIBAAAsCBCIAAAgAURAgHck0JCQjR+/HhXl3FLmjRpokGDBrm6DACQRAgEcAemTJkiX19fJSYmOtr+/vtveXl5qVGjRk7jrl69WjabTXv27LnbZUqSVq5cKZvNpsqVKyspKcnpvfz582vatGkuqQsAXIUQCOC2hYWF6e+//9amTZscbatXr1aRIkW0ceNGXb582dG+cuVKBQUFqWzZsq4o1eHPP//UjBkzXFpDVkpKSlJycrKrywBwDyIEArht5cqVU1BQkFauXOloW7lypTp06KBSpUpp3bp1Tu1hYWGSpGvXrumll15SsWLF5OPjo7p16zrNQ5LWrVunhx56SHny5FGJEiU0YMAAxcXFpVtLVFSU/P39tXz58pvW/MILL2j48OG6evVqmu8fOHBANptN27Ztc7RduHBBNpvNUWPKUcWlS5eqRo0aypMnj5o2bapTp07pxx9/VIUKFeTn56cuXbo4BWFJSkxMVP/+/ZU/f34VKlRIr7/+uq7/750Z9c20adOUP39+/fDDD6pYsaLsdrsOHjx403UGgLQQAgHckSZNmigmJsYxHBMToyZNmqhx48aO9mvXrmn9+vWOENirVy+tXbtWs2fP1o4dO/T444+rVatW2rt3ryRp586datmypTp16qQdO3Zozpw5WrNmjfr3759mDe+//76GDh2qpUuXqnnz5jetd9CgQUpMTNTEiRPveN1HjBihiRMnat26dTp8+LA6d+6s8ePHa+bMmVq0aJGWL1+uCRMmOE0zffp0eXp66pdfftGHH36o//73v/rss88c72fUN5J0+fJlRURE6LPPPtOuXbsUEBBwx+sCwIIMANyBTz75xPj4+JiEhAQTGxtrPD09zcmTJ83s2bNN/fr1jTHGrFq1ykgyf/75p9m3b5+x2Wzm6NGjTvMJDw83w4YNM8YY061bN/Pvf//b6f3Vq1ebXLlymStXrhhjjAkODjb//e9/zSuvvGKKFi1qduzYcdM6Y2JijCRz/vx5M2XKFFOwYEFz4cIFY4wx/v7+JioqyhhjzP79+40ks3XrVse058+fN5JMTEyM07yio6Md40RERDjWMUWfPn1My5YtHcONGzc2FSpUMMnJyY62l19+2VSoUMEYYzLVN1FRUUaS2bZt203XFwAy4unC/AnADYSFhSkuLk4bN27U+fPnVbZsWQUEBKhx48bq1q2b4uLitHLlSpUsWVL333+/5s2bJ2NMqmsD4+PjVahQIUnS5s2btW/fPn311VeO940xSk5O1v79+1WhQgVJ0rhx4xQXF6dNmzbp/vvvz3TNTz/9tCIjIzVmzBi9++67t73uVatWdfwcGBiovHnzOtURGBioX3/91WmaBx98UDabzTFcr149jRs3TklJSdqyZUuGfSNJ3t7eTssGgNtBCARwR0qXLq3ixYsrJiZG58+fV+PGjSVJRYoUUWhoqNauXauYmBg1bdpUkpScnCwPDw9t3rxZHh4eTvPKly+fY5w+ffpowIABqZZXsmRJx8+NGjXSokWLNHfuXL3yyiuZrtnT01OjRo1Sz549U51izpXrn6tkzHXX6SUkJKQ5Hy8vL8fPNpvNaTil7VZu2shM30hSnjx5nIIkANwOQiCAOxYWFqaVK1fq/Pnz+s9//uNob9y4sZYuXaoNGzaoV69ekqQaNWooKSlJp06dSvUYmRQ1a9bUrl27VLp06Zsut06dOnrhhRfUsmVLeXh4OC07I48//rjGjh2rkSNHOrXfd999kqTjx4+rRo0akuR0k8id2rBhQ6rhMmXKyMPDI1N9AwBZhRAI4I6FhYWpX79+SkhIcBwJlP4Jgc8//7yuXr3quCmkbNmy6tq1q7p3765x48apRo0aOnPmjFasWKEqVaqoTZs2evnll/Xggw+qX79+evbZZ+Xj46Pff/89zRst6tWrpx9//FGtWrWSp6enXnzxxUzXPXr0aLVs2dKpLU+ePHrwwQc1evRohYSE6MyZM3r99dfvoHecHT58WIMHD1afPn20ZcsWTZgwQePGjZOUub4BgKzC3cEA7lhYWJiuXLmi0qVLKzAw0NHeuHFjXbp0SaVKlVKJEiUc7VFRUerevbuGDBmicuXK6eGHH9Yvv/ziGKdq1apatWqV9u7dq0aNGqlGjRp64403VLRo0TSX36BBAy1atEhvvPGGPvzww0zX3bRpUzVt2tTpYdeS9PnnnyshIUG1a9fWwIEDNWrUqFvpjpvq3r27rly5ojp16qhfv3564YUX9O9//9vxfkZ9AwBZxWauv/AFAAAAlsCRQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAWRAgEAACwIEIgAACABRECAQAALIgQCAAAYEGEQAAAAAsiBAIAAFgQIRAAAMCCCIEAAAAW9H9iNJEoK22tsAAAAABJRU5ErkJggg==\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "action = release_dates[(release_dates['title'].str.contains('Action', case=False)) & (release_dates['country'] == 'USA')]\n",
+ "plt.hist(x=action['date'].dt.isocalendar().week)\n",
+ "plt.title('Frequency by week of movies released in the USA with \"Action\" in the title')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.xlabel('Week Number')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -1115,11 +2928,291 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 98,
"metadata": {},
- "outputs": [],
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " title \n",
+ " name \n",
+ " n \n",
+ " country \n",
+ " date \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 17 \n",
+ " Speed \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1922-10-22 \n",
+ " \n",
+ " \n",
+ " 18 \n",
+ " Speed \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1936-05-08 \n",
+ " \n",
+ " \n",
+ " 21 \n",
+ " Sweet November \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1968-02-08 \n",
+ " \n",
+ " \n",
+ " 27 \n",
+ " The Night Before \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1988-04-15 \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " Bill & Ted's Excellent Adventure \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1989-02-17 \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " Bill & Ted's Bogus Journey \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1991-07-19 \n",
+ " \n",
+ " \n",
+ " 14 \n",
+ " Little Buddha \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1994-05-25 \n",
+ " \n",
+ " \n",
+ " 19 \n",
+ " Speed \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1994-06-10 \n",
+ " \n",
+ " \n",
+ " 11 \n",
+ " Johnny Mnemonic \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1995-05-26 \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " A Walk in the Clouds \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1995-08-11 \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " Chain Reaction \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1996-08-02 \n",
+ " \n",
+ " \n",
+ " 6 \n",
+ " Feeling Minnesota \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1996-09-13 \n",
+ " \n",
+ " \n",
+ " 24 \n",
+ " The Devil's Advocate \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1997-10-17 \n",
+ " \n",
+ " \n",
+ " 26 \n",
+ " The Matrix \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 1999-03-31 \n",
+ " \n",
+ " \n",
+ " 28 \n",
+ " The Replacements \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2000-08-11 \n",
+ " \n",
+ " \n",
+ " 22 \n",
+ " Sweet November \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2001-02-16 \n",
+ " \n",
+ " \n",
+ " 7 \n",
+ " Hard Ball \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2001-09-14 \n",
+ " \n",
+ " \n",
+ " 5 \n",
+ " Constantine \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2005-02-18 \n",
+ " \n",
+ " \n",
+ " 25 \n",
+ " The Lake House \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2006-06-16 \n",
+ " \n",
+ " \n",
+ " 20 \n",
+ " Street Kings \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2008-04-11 \n",
+ " \n",
+ " \n",
+ " 23 \n",
+ " The Day the Earth Stood Still \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2008-12-12 \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 47 Ronin \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2013-12-25 \n",
+ " \n",
+ " \n",
+ " 9 \n",
+ " John Wick \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2014-10-24 \n",
+ " \n",
+ " \n",
+ " 12 \n",
+ " Knock Knock \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2015-10-09 \n",
+ " \n",
+ " \n",
+ " 10 \n",
+ " John Wick: Chapter 2 \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2017-02-10 \n",
+ " \n",
+ " \n",
+ " 13 \n",
+ " Knock Knock \n",
+ " Keanu Reeves \n",
+ " 1.0 \n",
+ " USA \n",
+ " 2017-10-06 \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
"
+ ],
+ "text/plain": [
+ " title name n country date\n",
+ "17 Speed Keanu Reeves 1.0 USA 1922-10-22\n",
+ "18 Speed Keanu Reeves 1.0 USA 1936-05-08\n",
+ "21 Sweet November Keanu Reeves 1.0 USA 1968-02-08\n",
+ "27 The Night Before Keanu Reeves 1.0 USA 1988-04-15\n",
+ "3 Bill & Ted's Excellent Adventure Keanu Reeves 1.0 USA 1989-02-17\n",
+ "2 Bill & Ted's Bogus Journey Keanu Reeves 1.0 USA 1991-07-19\n",
+ "14 Little Buddha Keanu Reeves 1.0 USA 1994-05-25\n",
+ "19 Speed Keanu Reeves 1.0 USA 1994-06-10\n",
+ "11 Johnny Mnemonic Keanu Reeves 1.0 USA 1995-05-26\n",
+ "1 A Walk in the Clouds Keanu Reeves 1.0 USA 1995-08-11\n",
+ "4 Chain Reaction Keanu Reeves 1.0 USA 1996-08-02\n",
+ "6 Feeling Minnesota Keanu Reeves 1.0 USA 1996-09-13\n",
+ "24 The Devil's Advocate Keanu Reeves 1.0 USA 1997-10-17\n",
+ "26 The Matrix Keanu Reeves 1.0 USA 1999-03-31\n",
+ "28 The Replacements Keanu Reeves 1.0 USA 2000-08-11\n",
+ "22 Sweet November Keanu Reeves 1.0 USA 2001-02-16\n",
+ "7 Hard Ball Keanu Reeves 1.0 USA 2001-09-14\n",
+ "5 Constantine Keanu Reeves 1.0 USA 2005-02-18\n",
+ "25 The Lake House Keanu Reeves 1.0 USA 2006-06-16\n",
+ "20 Street Kings Keanu Reeves 1.0 USA 2008-04-11\n",
+ "23 The Day the Earth Stood Still Keanu Reeves 1.0 USA 2008-12-12\n",
+ "0 47 Ronin Keanu Reeves 1.0 USA 2013-12-25\n",
+ "9 John Wick Keanu Reeves 1.0 USA 2014-10-24\n",
+ "12 Knock Knock Keanu Reeves 1.0 USA 2015-10-09\n",
+ "10 John Wick: Chapter 2 Keanu Reeves 1.0 USA 2017-02-10\n",
+ "13 Knock Knock Keanu Reeves 1.0 USA 2017-10-06"
+ ]
+ },
+ "execution_count": 98,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
"source": [
- " "
+ "keanu_lead = cast[(cast['name'] == 'Keanu Reeves') & (cast['n'] == 1.0)]\n",
+ "usa = release_dates[release_dates['country'] == 'USA']\n",
+ "keanu_merge = pd.merge(keanu_lead, usa, how='left', on='title')\n",
+ "keanu_merge_usa = keanu_merge[keanu_merge['country'] == 'USA']\n",
+ "keanu_merge_usa[['title', 'name', 'n', 'country', 'date']].sort_values(by='date')"
]
},
{
@@ -1131,10 +3224,44 @@
},
{
"cell_type": "code",
- "execution_count": null,
+ "execution_count": 110,
"metadata": {},
- "outputs": [],
- "source": []
+ "outputs": [
+ {
+ "name": "stderr",
+ "output_type": "stream",
+ "text": [
+ "/var/folders/b6/4qc_2zbx4bg37ybn_70yv7xc0000gn/T/ipykernel_27695/3150025360.py:4: 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",
+ " keanu_movies_usa['month'] = keanu_movies_usa['date'].dt.month\n"
+ ]
+ },
+ {
+ "data": {
+ "image/png": "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jvHXrFljJJmIiAjTqlUrs2zZMvPBBx+YMmXKmPz585uff/7ZMezXX39tfHx8zP33328WLVpkVq5cabp165au1rTlLVasmHnqqafMihUrzMcff2yuXLmSYf8kJiaaYsWKmUKFCpk333zTrFy50vTt29dIMr179zbGGJOUlGQ2bNhgwsLCTFRUlNmwYYPZsGGDuXTp0nX7PTIy0jRu3Ni0a9fO2Gw28+qrr2Y4XI8ePYy3t7d55plnzMqVK838+fNN+fLlTZEiRczJkycdw82cOdPExcWZpUuXmoSEBDNv3jxTtWpVU65cOXP58uUM35NRo0aZ+Ph4M3XqVGO3201MTIxjOHfe54ykjT958mSn9j179hhJpl+/fo62EydOmIiICBMZGWneeust89VXX5kXX3zR2O12061bN8dwV69eNU2bNjUBAQFmzJgxJj4+3rzzzjumWLFi5q677jIXL140xhjz2WefGUkmPj7ead779+83ksz06dPd6t/z58+b0NBQU6tWLfPf//7XJCQkmEWLFplevXqZffv23bAf6tWrZ0JDQ025cuXMu+++a1atWmWaN29uJJkxY8aYypUrmwULFpgvvvjC3HvvvcZut5vjx487xl+7dq3x9vY2NWvWNIsWLTJLliwxjRs3NjabzSxcuNAxXPXq1U1UVFS6+T/22GOmcOHCJiUlxRjzf+v/oUOHHMO8//77xmazmdatW5vFixebZcuWmebNmxsvLy/z1VdfOYZr0qSJKVSokJk1a5ZZu3atWbJkiRk1apRTHRlJW+ciIyPN0KFDTXx8vFmyZInL/W+MMV27djWRkZFO083qbcOV5XO1rzKS0Tbl6vaYkb1795qoqCgTFhbm+MzZsGGD07xKlixpmjZtapYsWWKWLFliKleubIKDg82ff/7pmI6rn503WqZrt/M0kydPdlrfzp8/bwoUKGDCwsLMW2+95bQeXs9LL71kJJnly5eb1NRUExkZaUqVKmVSU1NvOm7a+h4REWG6d+9uVqxYYWbNmmUKFy5sIiIizJkzZ4wxxvz222/GbrebkSNHOo3/xx9/GD8/PzN48OAbzqdr167Gx8fHVKhQwbz66qtO+7Thw4ebO++8M932v2XLFsf4P/zwgwkMDDSlS5c27733nlm+fLlp3769kWQmTpzoGC5tn1iyZEnTsWNHs3z5crNgwQJTokQJ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00Z//vmn/vzzTwUFBalu3br65JNP9Oeff7rUDzfbh0hS9erVdf/99+uNN96Q9Hd4Pnz4cLqwdT3X26ddb/v/577O3f1MVqwvWbXO5ei7otLYbDZNnDhRjRo10qxZs9K9nvbGXXux7a3s4G8mow/OkydPOt6YggULSpKGDx+uRx55JMNplCtXzum5q3cdhYaG6sSJE+naf/31V6d5Z1apUqW0du1aNWjQQE2aNNHKlStVp04dx7RtNpu+/fZbx0r3T2lte/bs0c6dOzV37lx17drV8frBgwczXVdWvc/Fixd3XDAcFRWlsLAwderUSaNHj9brr78u6e/lrFKlil566aUMp5G2cRcsWFChoaEZXmArSYGBgY6/046yzZkzRz179tScOXMUHh6uxo0bO4ZxtX8lqXLlylq4cKGMMdq1a5fmzp2rsWPHys/PT8OGDXOrT1wVHBysPHnyuLz+xcTE6KOPPlJ8fLxKlCihzZs3a+bMmTecR9r4r7322nXv2ClSpIhj2GnTpmnatGk6evSoli5dqmHDhikxMfG678k/XbvNudP/GdWd1dvGzZbPnb7KLTLz2Xnt+F5eXjp+/HiGrx8/flxeXl7pdqLXKlGihJ566ikNHDhQe/fuVcWKFZWUlKRPPvlEknT33XdnON78+fMdAexGrrcPKVOmjFNb//791bZtW23btk2vv/667rzzTjVq1Oim079V2b2fyU65IthI0kMPPaRGjRpp7Nix6Q6NFSlSRL6+vtq1a5dT+2effZZt9SxYsECxsbGOD8YjR45o/fr16tKli6S/N7yyZctq586dGj9+fJbOu2HDhoqLi9O2bduc7qZ57733ZLPZ1KBBg1ueR8mSJR3hpmnTplqxYoWioqLUvHlzTZgwQcePH9djjz123fHT+uXaD/i33nor0zVl1/vcsWNHvfPOO3r77bc1ePBgRUZGqnnz5vriiy9UunRpBQcHX3fc5s2ba+HChbp69aruueeem84rJiZGvXv31rp167Rs2TLFxsY6HXp1tX//yWazqWrVqnrllVc0d+5cbdu2zaXxMiMgIED33HOPFi9erClTpsjPz0/S30chPvjgAxUvXlx33nmnY/jGjRurWLFimjNnjkqUKCFfX1+1b9/+hvOIiopSgQIFtG/fPpf/M5X+3hH17dtXq1ev1nfffZep5ctM/7s7bma3jYyWL7N9lZ3sdvstHdW51c9OX19fRUVFaenSpZo0aZLTEYtLly5p6dKlqlu3rqP93LlzstlsTqdW06SdFkz7R2b+/Pn666+/9OKLL6pu3brphm/btq1mz57tUrD58MMPnU6Frl+/XkeOHNGTTz7pNFybNm1UokQJPfPMM0pISNArr7xyW756o2HDhvr000/166+/Op2efu+99+Tv75+prwm41XXDVbkm2EjSxIkTVbNmTSUmJjodyk47rz179myVLl1aVatW1aZNmzR//vxsqyUxMVFt2rRRjx49lJSUpNGjR8vX11fDhw93DPPWW2/p4YcfVpMmTdStWzcVK1ZMp0+f1v79+7Vt2zbHeVN3DRo0SO+9956io6M1duxYRUZGavny5ZoxY4Z69+7ttGO5FZGRkU7h5osvvtD999+vp556SjExMdqyZYseeOABBQQE6MSJE1q3bp0qV66s3r17q3z58ipdurSGDRsmY4xCQkK0bNkyxcfHZ7qe7HyfJ06cqHvuuUcvvvii3nnnHY0dO1bx8fGqU6eO+vfvr3LlyunSpUs6fPiwvvjiC7355psqXry42rVrpw8//FDNmjXTgAEDVLt2bXl7e+t///uf1qxZo1atWqlNmzaO+bRv316xsbFq3769kpOT1a1bN6c6oqKiXOrfzz//XDNmzFDr1q11xx13yBijxYsX688//8z2/+bi4uLUqFEjNWjQQM8++6x8fHw0Y8YM7dmzRwsWLHD60PXy8lKXLl00depU5c+fX4888oiCgoJuOP18+fLptddeU9euXXX69Gk9+uijKly4sE6dOqWdO3fq1KlTmjlzppKSktSgQQN16NBB5cuXV2BgoDZv3qyVK1de9z/9m3G1/29lXFe3DVeWz9W+up0qV66sxYsXa+bMmapZs6by5MnjOELqqlv97JwwYYIaNGig++67TwMHDlSJEiV09OhRTZs2Tb/99pvjdLAk/fjjj2rSpInatWunevXqqWjRojpz5oyWL1+uWbNmqX79+o4j1u+++66Cg4P17LPPZvhlpWnr+s6dO2/63WtbtmzRk08+qbZt2+rYsWMaOXKkihUrli4UeXl5qU+fPho6dKgCAgLSfWZkl9GjRzuuNRw1apRCQkL04Ycfavny5Zo0adJNt+OMZMW64RK3LjW+Tf55V9S1OnToYCQ53RVlzN+3Nz/55JOmSJEi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ni4A7is5bLlH5nt4QrRH5gsAgKs4YgMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACyDYAMAACzD7WCzbds27d692/H8s88+U+vWrTVixAhdvnw5S4sDAABwh9vBpmfPnjpw4IAk6ZdfflG7du3k7++vjz76SEOGDHG7gOPHj6tTp04KDQ2Vv7+/qlWrpq1bt7o9HQAAALeDzYEDB1StWjVJ0kcffaQHHnhA8+fP19y5c/XJJ5+4Na0zZ84oKipK3t7eWrFihfbt26eXX35ZBQoUcLcsAAAA5XV3BGOMUlNTJUlfffWVmjdvLkmKiIjQ77//7ta0Jk6cqIiICM2ZM8fRVrJkSXdLAgAAkJSJIza1atXSuHHj9P777yshIUHR0dGSpEOHDqlIkSJuTWvp0qWqVauW2rZtq8KFC6t69ep6++23rzt8cnKyzp496/QAAABI4/YRm2nTpqljx45asmSJRo4cqTJlykiSPv74Y9WpU8etaf3yyy+aOXOmYmNjNWLECG3atEn9+/eX3W5Xly5d0g0fFxenMWPGuFsy/uVKDlvusXkfnhDtsXkDOZmntku2SetzO9hUqVLF6a6oNJMnT5aXl5db00pNTVWtWrU0fvx4SVL16tW1d+9ezZw5M8NgM3z4cMXGxjqenz17VhEREW4uAQAAsCq3g80/nT9/3nG9TRpvb2+Xxy9atKjuuusup7YKFSpc9yJku90uu93ufqEAAOBfwe1rbA4dOqTo6GgFBAQoKChIwcHBCg4OVoECBRQcHOzWtKKiovTjjz86tR04cECRkZHulgUAAOD+EZuOHTtKkmbPnq0iRYrIZrNleuaDBg1SnTp1NH78eD322GPatGmTZs2apVmzZmV6mgAA4N/L7WCza9cubd26VeXKlbvlmd9999369NNPNXz4cI0dO1alSpVyXJwMAADgLreDzd13361jx45lSbCRpObNmzu+CwcAAOBWuB1s3nnn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Uclhyz0y38MToj0yXwCZ46nPConPi6zG537uxxEbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGQQbAABgGR4NNnFxcbr77rsVGBiowoULq3Xr1vrxxx89WRIAAMjFPBpsEhIS1KdPH23cuFHx8fG6cuWKGjdurAsXLniyLAAAkEvl9eTMV65c6fR8zpw5Kly4sLZu3aoHHnjAQ1UBAIDcKkddY5OUlCRJCgkJ8XAlAAAgN/LoEZt/MsYoNjZWdevWVaVKlTIcJjk5WcnJyY7nZ8+evV3lAQCAXCDHHLHp27evdu3apQULFlx3mLi4OAUFBTkeERERt7FCAACQ0+WIYNOvXz8tXbpUa9asUfHixa873PDhw5WUlOR4HDt27DZWCQAAcjqPnooyxqhfv3769NNPtXbtWpUqVeqGw9vtdtnt9ttUHQAAyG08Gmz69Omj+fPn67PPPlNgYKBOnjwpSQoKCpKfn58nSwMAALmQR09FzZw5U0lJSapfv76KFi3qeCxatMiTZQEAgFzK46eiAAAAskqOuHgYAAAgKxBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZRBsAACAZeT1dAGwjpLDlnts3ocnRHts3gCAnIMjNgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDIINgAAwDII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W7ZsUd68eR3Tevzxx/XMM8+oYsWKOnHihE6cOKHHH3/cMd6YMWP02GOPadeuXWrWrJk6duyYbtrXyp8/v0aMGKGxY8c6hYXMmDdvngoWLKhNmzapX79+6t27t9q2bas6depo27ZtatKkiTp37qyLFy86jTd48GBNmTJFmzdvVuHChdWyZUvHEaTdu3erSZMmeuSRR7Rr1y4tWrRI69atU9++fZ2mMXnyZFWqVElbt27V888/f0vLAcBFnv4VTgBZq2vXrqZVq1bm1KlTxm63m0OHDpnDhw8bX19fc+rUKdOqVSvHLySfP3/eeHt7mw8//NAx/uXLl014eLiZNGmSMeb/fjX4q6++cgyzfPlyI8n89ddfxhhjRo8ebapWrZquFknmueeeczw/f/68sdlsZsWKFdetP+2X1C9dumQiIyPN2LFjjTHGvPLKKyYyMjLdcv7TgAEDTL169ZymVbduXcfzK1eumICAANO5c2dH24kTJ4wks2HDBqflXbhwoWOYP/74w/j5+ZlFixYZY4zp3Lmzeeqpp5zm/e2335o8efI4+iQyMtK0bt36ussJIHvk9WiqApBtChYsqOjoaM2bN0/GGEVHR6tgwYJOw/z8889KSUlRVFSUo83b21u1a9fW/v37nYatUqWK4++iRYtKkhITE296zc4/xwsICFBgYKASExNvWr/dbtfYsWPVt29f9e7d+6bDuzJ/Ly8vhYaGqnLlyo62IkWKSFK6mu677z7H3yEhISpXrpyjT7Zu3aqDBw/qww8/dAxjjFFqaqoOHTqkChUqSJJq1aqV6boBZA7BBrCw7t27O06PvPHGG+leN8ZI+vu27Gvbr23z9vZ2/J32Wmpq6k1r+Od4aeO6Mp4kderUSVOmTNG4cePS3RGVJ08eR/1pMrrYOKP5Z3ZZ/jlsz5491b9//3TD/DPoBQQE3HSaALIW19gAFta0aVNdvnxZly9fVpMmTdK9XqZMGfn4+GjdunWOtpSUFG3ZssVx1MEVPj4+unr1apbU/E958uRRXFycZs6cqcOHDzu9VqhQIZ04ccKpbceOHVk2740bNzr+PnPmjA4cOKDy5ctL+vvi7L1796pMmTLpHj4+PllWAwD3EWwAC/Py8tL+/fu1f/9+eXl5pXs9ICBAvXv31uDBg7Vy5Urt27dPPXr00MWLF/XEE0+4PJ+SJUvq0KFD2rFjh37//XclJydn2TJER0frnnvu0VtvveXU/uCDD2rLli1677339NNPP2n06NHas2dPls137NixWr16tfbs2aNu3bqpYMGCjruwhg4dqg0bNqhPnz7asWOHfvrpJy1dulT9+vXLsvkDyByCDWBx+fPnV/78+a/7+oQJE/Sf//xHnTt3Vo0aNXTw4EGtWrVKwcHBLs/jP//5j5o2baoGDRqoUKFCWrBgQVaU7jBx4kRdunTJqa1JkyZ6/vnnNWTIEN199906d+6cunTpkmXznDBhggYMGKCaNWvqxIkTWrp0qeNoTJUqVZSQkKCffvpJ999/v6pXr67nn3/ece0RAM+xmWtPUgMAAORSHLEBAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACWQbABAACW8f8AH1loFfwamLgAAAAASUVORK5CYII=\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "keanu = cast[cast['name'] == 'Keanu Reeves']\n",
+ "keanu_movies = pd.merge(keanu, release_dates, how='left', on='title')\n",
+ "keanu_movies_usa = keanu_movies[keanu_movies['country'] == 'USA']\n",
+ "keanu_movies_usa['month'] = keanu_movies_usa['date'].dt.month\n",
+ "keanu_month_df = pd.DataFrame(keanu_movies_usa.groupby('month')['title'].count())\n",
+ "plt.bar(x=keanu_month_df.index, height=keanu_month_df['title'])\n",
+ "plt.title('Number of Keanu Reeves movies release in the USA by month')\n",
+ "plt.xlabel('Month Number')\n",
+ "plt.ylabel('Number of Films')\n",
+ "plt.show()"
+ ]
},
{
"cell_type": "markdown",
@@ -1143,6 +3270,35 @@
"### Section III - Q5: Make a bar plot showing the years in which movies with Ian McKellen tend to be released in the USA?"
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 122,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "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mqhRo0ZatGiRQkND3d7X3FGyZEm9+eabeuONN5SYmKgmTZqoQIECOnLkiNatW+f4n7C3+fj46O2331aHDh3UokULde/eXSkpKRo9erROnz6tUaNGObXPnz+/HnvsMU2ZMkWnT59Wv379bvgjk+6OxZYtW9S7d289+eSTuvvuu+Xv76/ly5dry5YtTkcWrpUvXz49+OCDGj16tO666y6VLFlSq1at0sSJE5U/f363xiGnXq9b6dfdZT3Z/po1a6pFixaqVKmSChQooO3bt+vLL790Cqruvg8GDRqkBQsWqEGDBho8eLCCgoL00Ucf6fz58x6PU3bImzevoqKiNH/+fDVs2FBhYWGO8XBXnTp19Pzzz6tLly7asGGDHnzwQQUHB+vQoUP68ccfVbFiRb3wwgtZLl+qVCn17t3b8f5p1qyZAgMDtX79eo0aNUrVq1d3ul7srbfe0k8//aS2bds6btveu3evxo0bpxMnTmj06NGSpG3btmndunV64YUX1KBBA5d1v/vuu5o4caJXAgx3If1/197uaowxv/zyi2nTpo0pXLiw8fPzMxEREaZBgwbm448/drRJSUkx/fr1M0WLFjUBAQGmWrVqZt68eaZTp04mKirK0e6vd7tc69133zW1a9c2d911l/H39zclSpQw3bp1M/v27XOr9qpVqxpJ5qeffnLMO3jwoJFkChYsmOkq8U6dOpng4OBM/bi6Ov/KlSvmnXfeMZUrVzYBAQEmJCTElC1b1nTv3t3s2rXL0S4qKso0b948U59169Z1uvo9K3JxF9KoUaNMyZIljd1uN+XKlTOffvqpyxpdLZtRU6dOna673uu9Ln/l6jZqY4z54osvzL333usYm6pVqzrd8ulqv9q2bZuJiIgw1apVc9w14M6+5u5t1MZcveunfv36Jl++fMZut5uoqCjzxBNPmGXLljnaeLIfuJLVa+7q9chqnOfNm2dq1qxpAgICTHBwsGnYsKHTfvxXS5YscdwtuHPnTrfrvtFYHDlyxHTu3NmULVvWBAcHm5CQEFOpUiXz3nvvmdTU1OuOwYEDB8zjjz9uChQoYPLmzWuaNGlitm3blmnfy7hbaP369S77cef1ciU7+r2Vfcjd7R8wYICpXr26KVCggLHb7eYf//iH6du3rzl+/LjTOt15HxhjzE8//WTuu+8+Y7fbTUREhHn11VfNJ598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OnRIoaGhqlSpkuLj4/Xwww/fct8AAODvy+0AM3ny5Gxf+cSJE7O9TwAA8Pfn9Yt4AQAAPEWAAQAAlkOAAQAAlkOAAQAAluNWgKlWrZpOnTolSXrzzTd14cKFHC0KAADgetwKMNu3b9f58+clScOGDdO5c+dytCgAAIDrces26ipVqqhLly66//77ZYzRO++8o5CQEJdtBw8enK0FAgAAXMutADNlyhQNGTJECxculM1m07fffitf38yL2mw2AgwAAMhxbgWYmJgYTZ8+XZLk4+Oj7777ToULF87RwgAAALLi9i/xZkhPT8+JOgAAANzmcYCRpD179mjs2LHavn27bDabypUrpz59+qhUqVLZXR8AAEAmHv8OzOLFi1W+fHmtW7dOlSpVUmxsrNauXasKFSpo6dKlOVEjAACAE4+PwAwYMEB9+/bVqFGjMs3v378/f0kaAADkOI+PwGzfvl3dunXLNL9r16767bffsqUoAACA6/E4wBQqVEgJCQmZ5ickJHBnEgAAyBUen0J67rnn9PzzzysxMVG1a9eWzWbTjz/+qH//+9965ZVXcqJGAAAAJx4HmH/+85/Kmzev3n33XQ0cOFCSFBkZqaFDh+qll17K9gIBAACu5XGAsdls6tu3r/r27auzZ89KkvLmzZvthQEAAGTlpn4HJgPBBQAAeIPHF/ECAAB4GwEGAABYDgEGAABYjkcB5sqVK6pfv7527tyZU/UAAADckEcBxs/PT9u2bZPNZsupegAAAG7I41NIzzzzjCZOnJgTtQAAALjF49uoL1++rM8++0xLly5V9erVFRwc7PT8mDFjsq04AAAAVzwOMNu2bVO1atUkKdO1MJxaAgAAucHjALNixYqcqAMAAMBtN30b9e7du7V48WJdvHhRkmSMybaiAAAArsfjAHPixAk1bNhQZcqUUbNmzXTo0CFJ0rPPPstfowYAALnC4wDTt29f+fn56Y8//lBQUJBjftu2bRUfH5+txQEAALji8TUwS5Ys0eLFi1WsWDGn+Xfffbf279+fbYUBAABkxeMjMOfPn3c68pLh+PHjstvt2VIUAADA9XgcYB588EF98cUXjmmbzab09HSNHj1a9evXz9biAAAAXPH4FNLo0aNVr149bdiwQZcvX9Zrr72mX3/9VSdPntRPP/2UEzUCAAA48fgITPny5bVlyxbVqFFDDz/8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\n",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "ian_df = cast[cast['name'] == 'Ian McKellen']\n",
+ "ian_merge = pd.merge(ian_df, release_dates, how='left', on='title')\n",
+ "ian_usa = ian_merge[ian_merge['country'] == 'USA']\n",
+ "ian_usa\n",
+ "ian_year_df = pd.DataFrame(ian_usa.groupby('year_y')['title'].count())\n",
+ "plt.bar(x=ian_year_df.index, height=ian_year_df['title'])\n",
+ "plt.title('Years when Ian Mckellen movies are released in the USA')\n",
+ "plt.xlabel('Years')\n",
+ "plt.ylabel('Number of Films')\n",
+ "plt.show()"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
@@ -1153,7 +3309,7 @@
],
"metadata": {
"kernelspec": {
- "display_name": "Python 3",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
@@ -1167,9 +3323,9 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.7.6-final"
+ "version": "3.10.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
-}
\ No newline at end of file
+}
diff --git a/mec-5.4.4-json-data-wrangling-mini-project/Mini_Project_Wrangling_Json_Exercise.ipynb b/mec-5.4.4-json-data-wrangling-mini-project/Mini_Project_Wrangling_Json_Exercise.ipynb
index a8bfea9e2..5ccdabb42 100755
--- a/mec-5.4.4-json-data-wrangling-mini-project/Mini_Project_Wrangling_Json_Exercise.ipynb
+++ b/mec-5.4.4-json-data-wrangling-mini-project/Mini_Project_Wrangling_Json_Exercise.ipynb
@@ -80,9 +80,7 @@
{
"cell_type": "code",
"execution_count": 7,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -148,9 +146,7 @@
{
"cell_type": "code",
"execution_count": 8,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -246,9 +242,7 @@
{
"cell_type": "code",
"execution_count": 9,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -433,9 +427,7 @@
{
"cell_type": "code",
"execution_count": 10,
- "metadata": {
- "collapsed": false
- },
+ "metadata": {},
"outputs": [
{
"data": {
@@ -586,35 +578,743 @@
"3. In 2. above you will notice that some entries have only the code and the name is missing. Create a dataframe with the missing names filled in."
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " sector \n",
+ " supplementprojectflg \n",
+ " projectfinancialtype \n",
+ " prodline \n",
+ " mjtheme \n",
+ " idacommamt \n",
+ " impagency \n",
+ " project_name \n",
+ " mjthemecode \n",
+ " closingdate \n",
+ " ... \n",
+ " majorsector_percent \n",
+ " board_approval_month \n",
+ " theme_namecode \n",
+ " countryname \n",
+ " url \n",
+ " source \n",
+ " projectstatusdisplay \n",
+ " ibrdcommamt \n",
+ " sector_namecode \n",
+ " _id \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " [{'Name': 'Primary education'}, {'Name': 'Seco... \n",
+ " N \n",
+ " IDA \n",
+ " PE \n",
+ " [Human development] \n",
+ " 130000000 \n",
+ " MINISTRY OF EDUCATION \n",
+ " Ethiopia General Education Quality Improvement... \n",
+ " 8,11 \n",
+ " 2018-07-07T00:00:00Z \n",
+ " ... \n",
+ " [{'Percent': 46, 'Name': 'Education'}, {'Perce... \n",
+ " November \n",
+ " [{'code': '65', 'name': 'Education for all'}] \n",
+ " Federal Democratic Republic of Ethiopia \n",
+ " http://www.worldbank.org/projects/P129828/ethi... \n",
+ " IBRD \n",
+ " Active \n",
+ " 0 \n",
+ " [{'code': 'EP', 'name': 'Primary education'}, ... \n",
+ " {'$oid': '52b213b38594d8a2be17c780'} \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " [{'Name': 'Public administration- Other social... \n",
+ " N \n",
+ " OTHER \n",
+ " RE \n",
+ " [Economic management, Social protection and ri... \n",
+ " 0 \n",
+ " MINISTRY OF FINANCE \n",
+ " TN: DTF Social Protection Reforms Support \n",
+ " 1,6 \n",
+ " NaN \n",
+ " ... \n",
+ " [{'Percent': 70, 'Name': 'Public Administratio... \n",
+ " November \n",
+ " [{'code': '24', 'name': 'Other economic manage... \n",
+ " Republic of Tunisia \n",
+ " http://www.worldbank.org/projects/P144674?lang=en \n",
+ " IBRD \n",
+ " Active \n",
+ " 0 \n",
+ " [{'code': 'BS', 'name': 'Public administration... \n",
+ " {'$oid': '52b213b38594d8a2be17c781'} \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " [{'Name': 'Rural and Inter-Urban Roads and Hig... \n",
+ " Y \n",
+ " IDA \n",
+ " PE \n",
+ " [Trade and integration, Public sector governan... \n",
+ " 6060000 \n",
+ " MINISTRY OF TRANSPORT AND COMMUNICATIONS \n",
+ " Tuvalu Aviation Investment Project - Additiona... \n",
+ " 5,2,11,6 \n",
+ " NaN \n",
+ " ... \n",
+ " [{'Percent': 100, 'Name': 'Transportation'}] \n",
+ " November \n",
+ " [{'code': '47', 'name': 'Regional integration'... \n",
+ " Tuvalu \n",
+ " http://www.worldbank.org/projects/P145310?lang=en \n",
+ " IBRD \n",
+ " Active \n",
+ " 0 \n",
+ " [{'code': 'TI', 'name': 'Rural and Inter-Urban... \n",
+ " {'$oid': '52b213b38594d8a2be17c782'} \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " [{'Name': 'Other social services'}] \n",
+ " N \n",
+ " OTHER \n",
+ " RE \n",
+ " [Social dev/gender/inclusion, Social dev/gende... \n",
+ " 0 \n",
+ " LABOR INTENSIVE PUBLIC WORKS PROJECT PMU \n",
+ " Gov't and Civil Society Organization Partnership \n",
+ " 7,7 \n",
+ " NaN \n",
+ " ... \n",
+ " [{'Percent': 100, 'Name': 'Health and other so... \n",
+ " October \n",
+ " [{'code': '57', 'name': 'Participation and civ... \n",
+ " Republic of Yemen \n",
+ " http://www.worldbank.org/projects/P144665?lang=en \n",
+ " IBRD \n",
+ " Active \n",
+ " 0 \n",
+ " [{'code': 'JB', 'name': 'Other social services'}] \n",
+ " {'$oid': '52b213b38594d8a2be17c783'} \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " [{'Name': 'General industry and trade sector'}... \n",
+ " N \n",
+ " IDA \n",
+ " PE \n",
+ " [Trade and integration, Financial and private ... \n",
+ " 13100000 \n",
+ " MINISTRY OF TRADE AND INDUSTRY \n",
+ " Second Private Sector Competitiveness and Econ... \n",
+ " 5,4 \n",
+ " 2019-04-30T00:00:00Z \n",
+ " ... \n",
+ " [{'Percent': 50, 'Name': 'Industry and trade'}... \n",
+ " October \n",
+ " [{'code': '45', 'name': 'Export development an... \n",
+ " Kingdom of Lesotho \n",
+ " http://www.worldbank.org/projects/P144933/seco... \n",
+ " IBRD \n",
+ " Active \n",
+ " 0 \n",
+ " [{'code': 'YZ', 'name': 'General industry and ... \n",
+ " {'$oid': '52b213b38594d8a2be17c784'} \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
5 rows × 50 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " sector supplementprojectflg \\\n",
+ "0 [{'Name': 'Primary education'}, {'Name': 'Seco... N \n",
+ "1 [{'Name': 'Public administration- Other social... N \n",
+ "2 [{'Name': 'Rural and Inter-Urban Roads and Hig... Y \n",
+ "3 [{'Name': 'Other social services'}] N \n",
+ "4 [{'Name': 'General industry and trade sector'}... N \n",
+ "\n",
+ " projectfinancialtype prodline \\\n",
+ "0 IDA PE \n",
+ "1 OTHER RE \n",
+ "2 IDA PE \n",
+ "3 OTHER RE \n",
+ "4 IDA PE \n",
+ "\n",
+ " mjtheme idacommamt \\\n",
+ "0 [Human development] 130000000 \n",
+ "1 [Economic management, Social protection and ri... 0 \n",
+ "2 [Trade and integration, Public sector governan... 6060000 \n",
+ "3 [Social dev/gender/inclusion, Social dev/gende... 0 \n",
+ "4 [Trade and integration, Financial and private ... 13100000 \n",
+ "\n",
+ " impagency \\\n",
+ "0 MINISTRY OF EDUCATION \n",
+ "1 MINISTRY OF FINANCE \n",
+ "2 MINISTRY OF TRANSPORT AND COMMUNICATIONS \n",
+ "3 LABOR INTENSIVE PUBLIC WORKS PROJECT PMU \n",
+ "4 MINISTRY OF TRADE AND INDUSTRY \n",
+ "\n",
+ " project_name mjthemecode \\\n",
+ "0 Ethiopia General Education Quality Improvement... 8,11 \n",
+ "1 TN: DTF Social Protection Reforms Support 1,6 \n",
+ "2 Tuvalu Aviation Investment Project - Additiona... 5,2,11,6 \n",
+ "3 Gov't and Civil Society Organization Partnership 7,7 \n",
+ "4 Second Private Sector Competitiveness and Econ... 5,4 \n",
+ "\n",
+ " closingdate ... \\\n",
+ "0 2018-07-07T00:00:00Z ... \n",
+ "1 NaN ... \n",
+ "2 NaN ... \n",
+ "3 NaN ... \n",
+ "4 2019-04-30T00:00:00Z ... \n",
+ "\n",
+ " majorsector_percent board_approval_month \\\n",
+ "0 [{'Percent': 46, 'Name': 'Education'}, {'Perce... November \n",
+ "1 [{'Percent': 70, 'Name': 'Public Administratio... November \n",
+ "2 [{'Percent': 100, 'Name': 'Transportation'}] November \n",
+ "3 [{'Percent': 100, 'Name': 'Health and other so... October \n",
+ "4 [{'Percent': 50, 'Name': 'Industry and trade'}... October \n",
+ "\n",
+ " theme_namecode \\\n",
+ "0 [{'code': '65', 'name': 'Education for all'}] \n",
+ "1 [{'code': '24', 'name': 'Other economic manage... \n",
+ "2 [{'code': '47', 'name': 'Regional integration'... \n",
+ "3 [{'code': '57', 'name': 'Participation and civ... \n",
+ "4 [{'code': '45', 'name': 'Export development an... \n",
+ "\n",
+ " countryname \\\n",
+ "0 Federal Democratic Republic of Ethiopia \n",
+ "1 Republic of Tunisia \n",
+ "2 Tuvalu \n",
+ "3 Republic of Yemen \n",
+ "4 Kingdom of Lesotho \n",
+ "\n",
+ " url source \\\n",
+ "0 http://www.worldbank.org/projects/P129828/ethi... IBRD \n",
+ "1 http://www.worldbank.org/projects/P144674?lang=en IBRD \n",
+ "2 http://www.worldbank.org/projects/P145310?lang=en IBRD \n",
+ "3 http://www.worldbank.org/projects/P144665?lang=en IBRD \n",
+ "4 http://www.worldbank.org/projects/P144933/seco... IBRD \n",
+ "\n",
+ " projectstatusdisplay ibrdcommamt \\\n",
+ "0 Active 0 \n",
+ "1 Active 0 \n",
+ "2 Active 0 \n",
+ "3 Active 0 \n",
+ "4 Active 0 \n",
+ "\n",
+ " sector_namecode \\\n",
+ "0 [{'code': 'EP', 'name': 'Primary education'}, ... \n",
+ "1 [{'code': 'BS', 'name': 'Public administration... \n",
+ "2 [{'code': 'TI', 'name': 'Rural and Inter-Urban... \n",
+ "3 [{'code': 'JB', 'name': 'Other social services'}] \n",
+ "4 [{'code': 'YZ', 'name': 'General industry and ... \n",
+ "\n",
+ " _id \n",
+ "0 {'$oid': '52b213b38594d8a2be17c780'} \n",
+ "1 {'$oid': '52b213b38594d8a2be17c781'} \n",
+ "2 {'$oid': '52b213b38594d8a2be17c782'} \n",
+ "3 {'$oid': '52b213b38594d8a2be17c783'} \n",
+ "4 {'$oid': '52b213b38594d8a2be17c784'} \n",
+ "\n",
+ "[5 rows x 50 columns]"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import pandas as pd\n",
+ "import json\n",
+ "from pandas.io.json import json_normalize\n",
+ "\n",
+ "data = pd.read_json('data/world_bank_projects.json')\n",
+ "data.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'sector': [{'Name': 'Primary education'},\n",
+ " {'Name': 'Secondary education'},\n",
+ " {'Name': 'Public administration- Other social services'},\n",
+ " {'Name': 'Tertiary education'}],\n",
+ " 'supplementprojectflg': 'N',\n",
+ " 'projectfinancialtype': 'IDA',\n",
+ " 'prodline': 'PE',\n",
+ " 'mjtheme': ['Human development'],\n",
+ " 'idacommamt': 130000000,\n",
+ " 'impagency': 'MINISTRY OF EDUCATION',\n",
+ " 'project_name': 'Ethiopia General Education Quality Improvement Project II',\n",
+ " 'mjthemecode': '8,11',\n",
+ " 'closingdate': '2018-07-07T00:00:00Z',\n",
+ " 'totalcommamt': 130000000,\n",
+ " 'id': 'P129828',\n",
+ " 'mjsector_namecode': [{'code': 'EX', 'name': 'Education'},\n",
+ " {'code': 'EX', 'name': 'Education'},\n",
+ " {'code': 'BX', 'name': 'Public Administration, Law, and Justice'},\n",
+ " {'code': 'EX', 'name': 'Education'}],\n",
+ " 'docty': 'Project Information Document,Indigenous Peoples Plan,Project Information Document',\n",
+ " 'sector1': {'Percent': 46, 'Name': 'Primary education'},\n",
+ " 'lendinginstr': 'Investment Project Financing',\n",
+ " 'countrycode': 'ET',\n",
+ " 'sector2': {'Percent': 26, 'Name': 'Secondary education'},\n",
+ " 'totalamt': 130000000,\n",
+ " 'mjtheme_namecode': [{'code': '8', 'name': 'Human development'},\n",
+ " {'code': '11', 'name': ''}],\n",
+ " 'boardapprovaldate': '2013-11-12T00:00:00Z',\n",
+ " 'countryshortname': 'Ethiopia',\n",
+ " 'sector4': {'Percent': 12, 'Name': 'Tertiary education'},\n",
+ " 'prodlinetext': 'IBRD/IDA',\n",
+ " 'productlinetype': 'L',\n",
+ " 'regionname': 'Africa',\n",
+ " 'status': 'Active',\n",
+ " 'country_namecode': 'Federal Democratic Republic of Ethiopia!$!ET',\n",
+ " 'envassesmentcategorycode': 'C',\n",
+ " 'project_abstract': {'cdata': 'The development objective of the Second Phase of General Education Quality Improvement Project for Ethiopia is to improve learning conditions in primary and secondary schools and strengthen institutions at different levels of educational administration. The project has six components. The first component is curriculum, textbooks, assessment, examinations, and inspection. This component will support improvement of learning conditions in grades KG-12 by providing increased access to teaching and learning materials and through improvements to the curriculum by assessing the strengths and weaknesses of the current curriculum. This component has following four sub-components: (i) curriculum reform and implementation; (ii) teaching and learning materials; (iii) assessment and examinations; and (iv) inspection. The second component is teacher development program (TDP). This component will support improvements in learning conditions in both primary and secondary schools by advancing the quality of teaching in general education through: (a) enhancing the training of pre-service teachers in teacher education institutions; and (b) improving the quality of in-service teacher training. This component has following three sub-components: (i) pre-service teacher training; (ii) in-service teacher training; and (iii) licensing and relicensing of teachers and school leaders. The third component is school improvement plan. This component will support the strengthening of school planning in order to improve learning outcomes, and to partly fund the school improvement plans through school grants. It has following two sub-components: (i) school improvement plan; and (ii) school grants. The fourth component is management and capacity building, including education management information systems (EMIS). This component will support management and capacity building aspect of the project. This component has following three sub-components: (i) capacity building for education planning and management; (ii) capacity building for school planning and management; and (iii) EMIS. The fifth component is improving the quality of learning and teaching in secondary schools and universities through the use of information and communications technology (ICT). It has following five sub-components: (i) national policy and institution for ICT in general education; (ii) national ICT infrastructure improvement plan for general education; (iii) develop an integrated monitoring, evaluation, and learning system specifically for the ICT component; (iv) teacher professional development in the use of ICT; and (v) provision of limited number of e-Braille display readers with the possibility to scale up to all secondary education schools based on the successful implementation and usage of the readers. The sixth component is program coordination, monitoring and evaluation, and communication. It will support institutional strengthening by developing capacities in all aspects of program coordination, monitoring and evaluation; a new sub-component on communications will support information sharing for better management and accountability. It has following three sub-components: (i) program coordination; (ii) monitoring and evaluation (M and E); and (iii) communication.'},\n",
+ " 'approvalfy': 1999,\n",
+ " 'projectdocs': [{'DocDate': '28-AUG-2013',\n",
+ " 'EntityID': '090224b081e545fb_1_0',\n",
+ " 'DocURL': 'http://www-wds.worldbank.org/servlet/WDSServlet?pcont=details&eid=090224b081e545fb_1_0',\n",
+ " 'DocType': 'PID',\n",
+ " 'DocTypeDesc': 'Project Information Document (PID), Vol.'},\n",
+ " {'DocDate': '01-JUL-2013',\n",
+ " 'EntityID': '000442464_20130920111729',\n",
+ " 'DocURL': 'http://www-wds.worldbank.org/servlet/WDSServlet?pcont=details&eid=000442464_20130920111729',\n",
+ " 'DocType': 'IP',\n",
+ " 'DocTypeDesc': 'Indigenous Peoples Plan (IP), Vol.1 of 1'},\n",
+ " {'DocDate': '22-NOV-2012',\n",
+ " 'EntityID': '090224b0817b19e2_1_0',\n",
+ " 'DocURL': 'http://www-wds.worldbank.org/servlet/WDSServlet?pcont=details&eid=090224b0817b19e2_1_0',\n",
+ " 'DocType': 'PID',\n",
+ " 'DocTypeDesc': 'Project Information Document (PID), Vol.'}],\n",
+ " 'lendprojectcost': 550000000,\n",
+ " 'lendinginstrtype': 'IN',\n",
+ " 'theme1': {'Percent': 100, 'Name': 'Education for all'},\n",
+ " 'grantamt': 0,\n",
+ " 'themecode': '65',\n",
+ " 'borrower': 'FEDERAL DEMOCRATIC REPUBLIC OF ETHIOPIA',\n",
+ " 'sectorcode': 'ET,BS,ES,EP',\n",
+ " 'sector3': {'Percent': 16,\n",
+ " 'Name': 'Public administration- Other social services'},\n",
+ " 'majorsector_percent': [{'Percent': 46, 'Name': 'Education'},\n",
+ " {'Percent': 26, 'Name': 'Education'},\n",
+ " {'Percent': 16, 'Name': 'Public Administration, Law, and Justice'},\n",
+ " {'Percent': 12, 'Name': 'Education'}],\n",
+ " 'board_approval_month': 'November',\n",
+ " 'theme_namecode': [{'code': '65', 'name': 'Education for all'}],\n",
+ " 'countryname': 'Federal Democratic Republic of Ethiopia',\n",
+ " 'url': 'http://www.worldbank.org/projects/P129828/ethiopia-general-education-quality-improvement-project-ii?lang=en',\n",
+ " 'source': 'IBRD',\n",
+ " 'projectstatusdisplay': 'Active',\n",
+ " 'ibrdcommamt': 0,\n",
+ " 'sector_namecode': [{'code': 'EP', 'name': 'Primary education'},\n",
+ " {'code': 'ES', 'name': 'Secondary education'},\n",
+ " {'code': 'BS', 'name': 'Public administration- Other social services'},\n",
+ " {'code': 'ET', 'name': 'Tertiary education'}],\n",
+ " '_id': {'$oid': '52b213b38594d8a2be17c780'}}"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "raw_data = json.load((open('data/world_bank_projects.json')))\n",
+ "raw_data[0]"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Task 1: Find Top 10 Countries with most projects"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 14,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "countryname\n",
+ "People's Republic of China 19\n",
+ "Republic of Indonesia 19\n",
+ "Socialist Republic of Vietnam 17\n",
+ "Republic of India 16\n",
+ "Republic of Yemen 13\n",
+ "People's Republic of Bangladesh 12\n",
+ "Nepal 12\n",
+ "Kingdom of Morocco 12\n",
+ "Republic of Mozambique 11\n",
+ "Africa 11\n",
+ "Name: project_name, dtype: int64"
+ ]
+ },
+ "execution_count": 14,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Top 10 countries with most projects\n",
+ "data.groupby('countryname')['project_name'].count().sort_values(ascending=False).head(10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Task2: Find the top 10 major project themes (using column 'mjtheme_namecode')"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 17,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "\n",
+ "\n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " code \n",
+ " name \n",
+ " \n",
+ " \n",
+ " \n",
+ " \n",
+ " 0 \n",
+ " 8 \n",
+ " Human development \n",
+ " \n",
+ " \n",
+ " 1 \n",
+ " 11 \n",
+ " \n",
+ " \n",
+ " \n",
+ " 2 \n",
+ " 1 \n",
+ " Economic management \n",
+ " \n",
+ " \n",
+ " 3 \n",
+ " 6 \n",
+ " Social protection and risk management \n",
+ " \n",
+ " \n",
+ " 4 \n",
+ " 5 \n",
+ " Trade and integration \n",
+ " \n",
+ " \n",
+ " ... \n",
+ " ... \n",
+ " ... \n",
+ " \n",
+ " \n",
+ " 1494 \n",
+ " 10 \n",
+ " Rural development \n",
+ " \n",
+ " \n",
+ " 1495 \n",
+ " 9 \n",
+ " Urban development \n",
+ " \n",
+ " \n",
+ " 1496 \n",
+ " 8 \n",
+ " Human development \n",
+ " \n",
+ " \n",
+ " 1497 \n",
+ " 5 \n",
+ " Trade and integration \n",
+ " \n",
+ " \n",
+ " 1498 \n",
+ " 4 \n",
+ " Financial and private sector development \n",
+ " \n",
+ " \n",
+ "
\n",
+ "
1499 rows × 2 columns
\n",
+ "
"
+ ],
+ "text/plain": [
+ " code name\n",
+ "0 8 Human development\n",
+ "1 11 \n",
+ "2 1 Economic management\n",
+ "3 6 Social protection and risk management\n",
+ "4 5 Trade and integration\n",
+ "... ... ...\n",
+ "1494 10 Rural development\n",
+ "1495 9 Urban development\n",
+ "1496 8 Human development\n",
+ "1497 5 Trade and integration\n",
+ "1498 4 Financial and private sector development\n",
+ "\n",
+ "[1499 rows x 2 columns]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mjtheme = pd.json_normalize(raw_data, 'mjtheme_namecode')\n",
+ "mjtheme"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 42,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'8': 'Human development',\n",
+ " '1': 'Economic management',\n",
+ " '6': 'Social protection and risk management',\n",
+ " '5': 'Trade and integration',\n",
+ " '2': 'Public sector governance',\n",
+ " '11': 'Environment and natural resources management',\n",
+ " '7': 'Social dev/gender/inclusion',\n",
+ " '4': 'Financial and private sector development',\n",
+ " '10': 'Rural development',\n",
+ " '9': 'Urban development',\n",
+ " '3': 'Rule of law'}"
+ ]
+ },
+ "execution_count": 42,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Creating dictionary to reference values\n",
+ "mjtheme_subset = mjtheme[mjtheme['name'] != '']\n",
+ "project_dict = {}\n",
+ "mjtheme['code'][0], mjtheme['name'][0]\n",
+ "for i in range(len(mjtheme['code'])):\n",
+ " if mjtheme['name'][i] != '':\n",
+ " project_dict[mjtheme['code'][i]] = mjtheme['name'][i]\n",
+ " i += 1\n",
+ "project_dict"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 46,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 Human development\n",
+ "1 \n",
+ "2 Economic management\n",
+ "3 Social protection and risk management\n",
+ "4 Trade and integration\n",
+ " ... \n",
+ "1494 Rural development\n",
+ "1495 Urban development\n",
+ "1496 Human development\n",
+ "1497 Trade and integration\n",
+ "1498 Financial and private sector development\n",
+ "Name: name, Length: 1499, dtype: object"
+ ]
+ },
+ "execution_count": 46,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mjtheme['name']"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 3. In 2. above you will notice that some entries have only the code and the name is missing. Create a dataframe with the missing names filled in."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 47,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "0 Human development\n",
+ "1 Environment and natural resources management\n",
+ "2 Economic management\n",
+ "3 Social protection and risk management\n",
+ "4 Trade and integration\n",
+ " ... \n",
+ "1494 Rural development\n",
+ "1495 Urban development\n",
+ "1496 Human development\n",
+ "1497 Trade and integration\n",
+ "1498 Financial and private sector development\n",
+ "Name: name, Length: 1499, dtype: object"
+ ]
+ },
+ "execution_count": 47,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#adding values back in with reference to dicitonary of values\n",
+ "for i in range(len(mjtheme['name'])):\n",
+ " if mjtheme['name'][i] == '':\n",
+ " mjtheme['name'][i] = project_dict[mjtheme['code'][i]]\n",
+ "mjtheme['name']"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 49,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "False"
+ ]
+ },
+ "execution_count": 49,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mjtheme['name'].isna().any()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 52,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "name\n",
+ "Environment and natural resources management 250\n",
+ "Rural development 216\n",
+ "Human development 210\n",
+ "Public sector governance 199\n",
+ "Social protection and risk management 168\n",
+ "Financial and private sector development 146\n",
+ "Social dev/gender/inclusion 130\n",
+ "Trade and integration 77\n",
+ "Urban development 50\n",
+ "Economic management 38\n",
+ "Name: code, dtype: int64"
+ ]
+ },
+ "execution_count": 52,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "#Top Projects below\n",
+ "top_projects = mjtheme.groupby('name')['code'].count().sort_values(ascending=False).head(10)\n",
+ "top_projects"
+ ]
+ },
{
"cell_type": "code",
"execution_count": null,
- "metadata": {
- "collapsed": true
- },
+ "metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "Python 2",
+ "display_name": "Python 3 (ipykernel)",
"language": "python",
- "name": "python2"
+ "name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
- "version": 2
+ "version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.9"
+ "pygments_lexer": "ipython3",
+ "version": "3.10.6"
}
},
"nbformat": 4,
- "nbformat_minor": 0
+ "nbformat_minor": 1
}