diff --git a/index.ipynb b/index.ipynb
index 5344767..ba954f8 100644
--- a/index.ipynb
+++ b/index.ipynb
@@ -1 +1 @@
-{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Data Serialization Formats - Cumulative Lab\n", "\n", "## Introduction\n", "\n", "Now that you have learned about CSV and JSON file formats individually, it's time to bring them together with a cumulative lab! Even as a junior data scientist, you can often produce novel, interesting analyses by combining multiple datasets that haven't been combined before.\n", "\n", "## Objectives\n", "\n", "You will be able to:\n", "\n", "* Practice reading serialized JSON and CSV data from files into Python objects\n", "* Practice extracting information from nested data structures\n", "* Practice cleaning data (filtering, normalizing locations, converting types)\n", "* Combine data from multiple sources into a single data structure\n", "* Interpret descriptive statistics and data visualizations to present your findings\n", "\n", "## Your Task: Analyze the Relationship between Population and World Cup Performance\n", "\n", "\n", "\n", "Photo by Fauzan Saari on Unsplash "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Business Understanding\n", "\n", "#### What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n", "\n", "Intuitively, we might assume that countries with larger populations would have better performance in international sports competitions. While this has been demonstrated to be [true for the Olympics](https://www.researchgate.net/publication/308513557_Medals_at_the_Olympic_Games_The_Relationship_Between_Won_Medals_Gross_Domestic_Product_Population_Size_and_the_Weight_of_Sportive_Practice), the results for the FIFA World Cup are more mixed:\n", "\n", "
CC BY-SA 3.0 , Link
\n", "\n", "In this analysis, we are going to look specifically at the sample of World Cup games in 2018 and the corresponding 2018 populations of the participating nations, to determine the relationship between population and World Cup performance for this year."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Data Understanding\n", "\n", "The data sources for this analysis will be pulled from two separate files.\n", "\n", "#### `world_cup_2018.json`\n", "\n", "* **Source**: This dataset comes from [`football.db`](http://openfootball.github.io/), a \"free and open public domain football database & schema for use in any (programming) language\"\n", "* **Contents**: Data about all games in the 2018 World Cup, including date, location (city and stadium), teams, goals scored (and by whom), and tournament group\n", "* **Format**: Nested JSON data (dictionary containing a list of rounds, each of which contains a list of matches, each of which contains information about the teams involved and the points scored)\n", "\n", "#### `country_populations.csv`\n", "\n", "* **Source**: This dataset comes from a curated collection by [DataHub.io](https://datahub.io/core/population), originally sourced from the World Bank\n", "* **Contents**: Data about populations by country for all available years from 1960 to 2018\n", "* **Format**: CSV data, where each row contains a country name, a year, and a population"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Requirements\n", "\n", "#### 1. List of Teams in 2018 World Cup\n", "\n", "Create an alphabetically-sorted list of teams who competed in the 2018 FIFA World Cup.\n", "\n", "#### 2. Associating Countries with 2018 World Cup Performance\n", "\n", "Create a data structure that connects a team name (country name) to its performance in the 2018 FIFA World Cup. We'll use the count of games won in the entire tournament (group stage as well as knockout stage) to represent the performance.\n", "\n", "This will help create visualizations to help the reader understand the distribution of games won and the performance of each team.\n", "\n", "#### 3. Associating Countries with 2018 Population\n", "\n", "Add to the existing data structure so that it also connects each country name to its 2018 population, and create visualizations comparable to those from step 2.\n", "\n", "#### 4. Analysis of Population vs. Performance\n", "\n", "Choose an appropriate statistical measure to analyze the relationship between population and performance, and create a visualization representing this relationship."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Checking for Understanding\n", "\n", "Before moving on to the next step, pause and think about the strategy for this analysis.\n", "\n", "Remember, our business question is:\n", "\n", "> What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n", "\n", "#### Unit of Analysis\n", "\n", "First, what is our **unit of analysis**, and what is the **unique identifier**? In other words, what will one record in our final data structure represent, and what attribute uniquely describes it?\n", "\n", ".\n", "\n", ".\n", "\n", ".\n", "\n", "*Answer:* \n", "\n", "> What is the relationship between the population of a **country** and their performance in the 2018 FIFA World Cup?\n", "\n", "*Our unit of analysis is a* ***country*** *and the unique identifier we'll use is the* ***country name***\n", "\n", "#### Features\n", "\n", "Next, what **features** are we analyzing? In other words, what attributes of each country are we interested in?\n", "\n", ".\n", "\n", ".\n", "\n", ".\n", "\n", "*Answer:* \n", "\n", "> What is the relationship between the **population** of a country and their **performance in the 2018 FIFA World Cup**?\n", "\n", "*Our features are* ***2018 population*** *and* ***count of wins in the 2018 World Cup***\n", "\n", "#### Dataset to Start With\n", "\n", "Finally, which dataset should we **start** with? In this case, any record with missing data is not useful to us, so we want to start with the smaller dataset.\n", "\n", ".\n", "\n", ".\n", "\n", ".\n", "\n", "*Answer: There are only 32 countries that compete in the World Cup each year, compared to hundreds of countries in the world, so we should start with the* ***2018 World Cup*** *dataset. Then we can join it with the relevant records from the country population dataset.*"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Getting the Data\n", "\n", "Below we import the `json` and `csv` modules, which will be used for reading from `world_cup_2018.json` and `country_populations.csv`, respectively."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "import json\n", "import csv"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Next, we open the relevant files."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "world_cup_file = open(\"data/world_cup_2018.json\", encoding=\"utf8\")\n", "population_file = open(\"data/country_populations.csv\")"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Hint:** if your code below is not working, (e.g. `ValueError: I/O operation on closed file.`, or you get an empty list or dictionary) try re-running the cell above to reopen the files, then re-run your code.\n", "\n", "### 2018 World Cup Data\n", "\n", "In the cell below, use the `json` module to load the data from `world_cup_file` into a dictionary called `world_cup_data`"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "world_cup_data = None\n", "\n", "# Close the file now that we're done reading from it\n", "world_cup_file.close()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Make sure the `assert` passes, ensuring that `world_cup_data` has the correct type."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# Check that the overall data structure is a dictionary\n", "assert type(world_cup_data) == dict\n", "\n", "# Check that the dictionary has 2 keys, 'name' and 'rounds'\n", "assert list(world_cup_data.keys()) == [\"name\", \"rounds\"]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Population Data\n", "\n", "Now use the `csv` module to load the data from `population_file` into a list of dictionaries called `population_data`\n", "\n", "(Recall that you can convert a `csv.DictReader` object into a list of dictionaries using the built-in `list()` function.)"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "population_data = None\n", "\n", "# Close the file now that we're done reading from it\n", "population_file.close()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Make sure the `assert`s pass, ensuring that `population_data` has the correct type."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# Check that the overall data structure is a list\n", "assert type(population_data) == list\n", "\n", "# Check that the 0th element is a dictionary\n", "# (csv.DictReader interface differs slightly by Python version;\n", "# either a dict or an OrderedDict is fine here)\n", "from collections import OrderedDict\n", "\n", "assert type(population_data[0]) == dict or type(population_data[0]) == OrderedDict"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## 1. List of Teams in 2018 World Cup\n", "\n", "> Create an alphabetically-sorted list of teams who competed in the 2018 FIFA World Cup.\n", "\n", "This will take several steps, some of which have been completed for you.\n", "\n", "### Exploring the Structure of the World Cup Data JSON\n", "\n", "Let's start by exploring the structure of `world_cup_data`. Here is a pretty-printed preview of its contents:\n", "\n", "```\n", "{\n", " \"name\": \"World Cup 2018\",\n", " \"rounds\": [\n", " {\n", " \"name\": \"Matchday 1\",\n", " \"matches\": [\n", " {\n", " \"num\": 1,\n", " \"date\": \"2018-06-14\",\n", " \"time\": \"18:00\",\n", " \"team1\": { \"name\": \"Russia\", \"code\": \"RUS\" },\n", " \"team2\": { \"name\": \"Saudi Arabia\", \"code\": \"KSA\" },\n", " \"score1\": 5,\n", " \"score2\": 0,\n", " \"score1i\": 2,\n", " \"score2i\": 0,\n", " \"goals1\": [\n", " { \"name\": \"Gazinsky\", \"minute\": 12, \"score1\": 1, \"score2\": 0 },\n", " { \"name\": \"Cheryshev\", \"minute\": 43, \"score1\": 2, \"score2\": 0 },\n", " { \"name\": \"Dzyuba\", \"minute\": 71, \"score1\": 3, \"score2\": 0 },\n", " { \"name\": \"Cheryshev\", \"minute\": 90, \"offset\": 1, \"score1\": 4, \"score2\": 0 },\n", " { \"name\": \"Golovin\", \"minute\": 90, \"offset\": 4, \"score1\": 5, \"score2\": 0 }\n", " ],\n", " \"goals2\": [],\n", " \"group\": \"Group A\",\n", " \"stadium\": { \"key\": \"luzhniki\", \"name\": \"Luzhniki Stadium\" },\n", " \"city\": \"Moscow\",\n", " \"timezone\": \"UTC+3\"\n", " }\n", " ]\n", " },\n", " {\n", " \"name\": \"Matchday 2\",\n", " \"matches\": [\n", " {\n", " \"num\": 2,\n", " \"date\": \"2018-06-15\",\n", " \"time\": \"17:00\",\n", " \"team1\": { \"name\": \"Egypt\", \"code\": \"EGY\" },\n", " \"team2\": { \"name\": \"Uruguay\", \"code\": \"URU\" },\n", " \"score1\": 0,\n", " \"score2\": 1,\n", " \"score1i\": 0,\n", " \"score2i\": 0,\n", " \"goals1\": [],\n", " \"goals2\": [\n", " { \"name\": \"Gim\u00e9nez\", \"minute\": 89, \"score1\": 0, \"score2\": 1 }\n", " ],\n", " \"group\": \"Group A\",\n", " \"stadium\": { \"key\": \"ekaterinburg\", \"name\": \"Ekaterinburg Arena\" }, \n", " \"city\": \"Ekaterinburg\",\n", " \"timezone\": \"UTC+5\"\n", " },\n", " ...\n", " ],\n", " },\n", " ], \n", "}\n", "```\n", "\n", "As noted previously, `world_cup_data` is a dictionary with two keys, 'name' and 'rounds'."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "world_cup_data.keys()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The value associated with the 'name' key is simply identifying the dataset."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "world_cup_data[\"name\"]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Extracting Rounds\n", "\n", "The value associated with the 'rounds' key is a list containing all of the actual information about the rounds and the matches within those rounds."]}, {"cell_type": "code", "execution_count": null, "metadata": {"scrolled": false}, "outputs": [], "source": ["# Run this cell without changes\n", "rounds = world_cup_data[\"rounds\"]\n", "\n", "print(\"type(rounds):\", type(rounds))\n", "print(\"len(rounds):\", len(rounds))\n", "print(\"type(rounds[3])\", type(rounds[3]))\n", "print(\"rounds[3]:\")\n", "rounds[3]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Translating this output into English:\n", "\n", "Starting with the original `world_cup_data` dictionary, we used the key `\"rounds\"` to extract a list of rounds, which we assigned to the variable `rounds`.\n", "\n", "`rounds` is a list of dictionaries. Each dictionary inside of `rounds` contains a name (e.g. `\"Matchday 4\"`) as well as a list of matches."]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Extracting Matches\n", "\n", "Now we can go one level deeper and extract all of the matches in the tournament. Because the round is irrelevant for this analysis, we can loop over all rounds and combine all of their matches into a single list.\n", "\n", "**Hint:** This is a good use case for using the `.extend` list method rather than `.append`, since we want to combine several lists of dictionaries into a single list of dictionaries, not a list of lists of dictionaries. [Documentation here.](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "matches = []\n", "\n", "# \"round\" is a built-in function in Python so we use \"round_\" instead\n", "for round_ in rounds:\n", " # Extract the list of matches for this round\n", " round_matches = None\n", " # Add them to the overall list of matches\n", " None\n", "\n", "matches[0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Make sure the `assert`s pass before moving on to the next step."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# There should be 64 matches. If the length is 20, that means\n", "# you have a list of lists instead of a list of dictionaries\n", "assert len(matches) == 64\n", "\n", "# Each match in the list should be a dictionary\n", "assert type(matches[0]) == dict"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Extracting Teams\n", "\n", "Each match has a `team1` and a `team2`. "]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "print(matches[0][\"team1\"])\n", "print(matches[0][\"team2\"])"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Create a list of all unique team names by looping over every match in `matches` and adding the `\"name\"` values associated with both `team1` and `team2`. (Same as before when creating a list of matches, it doesn't matter right now whether a given team was \"team1\" or \"team2\", we just add everything to `teams`.)\n", "\n", "We'll use a `set` data type ([documentation here](https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset)) to ensure unique teams, then convert it to a sorted list at the end."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "teams_set = set()\n", "\n", "for match in matches:\n", " # Add team1 name value to teams_set\n", " None\n", " # Add team2 name value to teams_set\n", " None\n", "\n", "teams = sorted(list(teams_set))\n", "print(teams)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Make sure the `assert`s pass before moving on to the next step."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# teams should be a list, not a set\n", "assert type(teams) == list\n", "\n", "# 32 teams competed in the 2018 World Cup\n", "assert len(teams) == 32\n", "\n", "# Each element of teams should be a string\n", "# (the name), not a dictionary\n", "assert type(teams[0]) == str"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Step 1 complete. We have unique identifiers (names) for each of our records (countries) that we will be able to use to connect 2018 World Cup performance to 2018 population."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## 2. Associating Countries with 2018 World Cup Performance\n", "\n", "> Create a data structure that connects a team name (country name) to its performance in the 2018 FIFA World Cup. We'll use the count of games won in the entire tournament (group stage as well as knockout stage) to represent the performance.\n", "\n", "> Also, create visualizations to help the reader understand the distribution of games won and the performance of each team.\n", "\n", "So, we are building a **data structure** that connects a country name to the number of wins. There is no universal correct format for a data structure with this purpose, but we are going to use a format that resembles the \"dataframe\" format that will be introduced later in the course.\n", "\n", "Specifically, we'll build a **dictionary** where each key is the name of a country, and each value is a nested dictionary containing information about the number of wins and the 2018 population.\n", "\n", "The final result will look something like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 1, 'population': 44494502 },\n", " ...\n", " 'Uruguay': { 'wins': 4, 'population': 3449299 }\n", "}\n", "```\n", "\n", "For the current step (step 2), we'll build a data structure that looks something like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 1 },\n", " ...\n", " 'Uruguay': { 'wins': 4 }\n", "}\n", "```\n", "\n", "### Initializing with Wins Set to Zero\n", "\n", "Start by initializing a dictionary called `combined_data` containing:\n", "\n", "* Keys: the strings from `teams`\n", "* Values: each value the same, a dictionary containing the key `'wins'` with the associated value `0`. However, note that each value should be a distinct dictionary object in memory, not the same dictionary linked as a value in multiple places.\n", "\n", "Initially `combined_data` will look something like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 0 },\n", " ...\n", " 'Uruguay': { 'wins': 0 }\n", "}\n", "```"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\n", "# Create the variable combined_data as described above\n", "None"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Check that the `assert`s pass."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# combined_data should be a dictionary\n", "assert type(combined_data) == dict\n", "\n", "# the keys should be strings\n", "assert type(list(combined_data.keys())[0]) == str\n", "\n", "# the values should be dictionaries\n", "assert combined_data[\"Japan\"] == {\"wins\": 0}"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Adding Wins from Matches\n", "\n", "Now it's time to revisit the `matches` list from earlier, in order to associate a team with the number of times it has won a match.\n", "\n", "This time, let's write some functions to help organize our logic.\n", "\n", "Write a function `find_winner` that takes in a `match` dictionary, and returns the name of the team that won the match. Recall that a match is structured like this:\n", "\n", "```\n", "{\n", " 'num': 1,\n", " 'date': '2018-06-14',\n", " 'time': '18:00',\n", " 'team1': { 'name': 'Russia', 'code': 'RUS' },\n", " 'team2': { 'name': 'Saudi Arabia', 'code': 'KSA' },\n", " 'score1': 5,\n", " 'score2': 0,\n", " 'score1i': 2,\n", " 'score2i': 0,\n", " 'goals1': [\n", " { 'name': 'Gazinsky', 'minute': 12, 'score1': 1, 'score2': 0 },\n", " { 'name': 'Cheryshev', 'minute': 43, 'score1': 2, 'score2': 0 },\n", " { 'name': 'Dzyuba', 'minute': 71, 'score1': 3, 'score2': 0 },\n", " { 'name': 'Cheryshev', 'minute': 90, 'offset': 1, 'score1': 4, 'score2': 0 },\n", " { 'name': 'Golovin', 'minute': 90, 'offset': 4, 'score1': 5, 'score2': 0 }\n", " ],\n", " 'goals2': [],\n", " 'group': 'Group A',\n", " 'stadium': { 'key': 'luzhniki', 'name': 'Luzhniki Stadium' },\n", " 'city': 'Moscow',\n", " 'timezone': 'UTC+3'\n", "}\n", "```\n", "\n", "The winner is determined by comparing the values associated with the `'score1'` and `'score2'` keys. If score 1 is larger, then the name associated with the `'team1'` key is the winner. If score 2 is larger, then the name associated with the `'team2'` key is the winner. If the values are the same, there is no winner, so return `None`. (Unlike the group round of the World Cup, we are only counting *wins* as our \"performance\" construct, not 3 points for a win and 1 point for a tie.)"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\n", "\n", "def find_winner(match):\n", " \"\"\"\n", " Given a dictionary containing information about a match,\n", " return the name of the winner (or None in the case of a tie)\n", " \"\"\"\n", " None"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "assert find_winner(matches[0]) == \"Russia\"\n", "assert find_winner(matches[1]) == \"Uruguay\"\n", "assert find_winner(matches[2]) == None"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Now that we have this helper function, loop over every match in `matches`, find the winner, and add 1 to the associated count of wins in `combined_data`. If the winner is `None`, skip adding it to the dictionary."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\n", "for match in matches:\n", " # Get the name of the winner\n", " winner = None\n", " # Only proceed to the next step if there was\n", " # a winner\n", " if winner:\n", " # Add 1 to the associated count of wins\n", " None\n", "\n", "# Visually inspect the output to ensure the wins are\n", "# different for different countries\n", "combined_data"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Analysis of Wins\n", "\n", "While we could try to understand all 32 of those numbers just by scanning through them, let's use some descriptive statistics and data visualizations instead\n", "\n", "#### Statistical Summary of Wins\n", "\n", "The code below calculates the mean, median, and standard deviation of the number of wins. If it doesn't work, that is an indication that something went wrong with the creation of the `combined_data` variable, and you might want to look at the solution branch and fix your code before proceeding."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "import numpy as np\n", "\n", "wins = [val[\"wins\"] for val in combined_data.values()]\n", "\n", "print(\"Mean number of wins:\", np.mean(wins))\n", "print(\"Median number of wins:\", np.median(wins))\n", "print(\"Standard deviation of number of wins:\", np.std(wins))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Visualizations of Wins\n", "\n", "In addition to those numbers, let's make a histogram (showing the distributions of the number of wins) and a bar graph (showing the number of wins by country)."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "import matplotlib.pyplot as plt\n", "\n", "# Set up figure and axes\n", "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 7))\n", "fig.set_tight_layout(True)\n", "\n", "# Histogram of Wins and Frequencies\n", "ax1.hist(x=wins, bins=range(8), align=\"left\", color=\"green\")\n", "ax1.set_xticks(range(7))\n", "ax1.set_xlabel(\"Wins in 2018 World Cup\")\n", "ax1.set_ylabel(\"Frequency\")\n", "ax1.set_title(\"Distribution of Wins\")\n", "\n", "# Horizontal Bar Graph of Wins by Country\n", "ax2.barh(teams[::-1], wins[::-1], color=\"green\")\n", "ax2.set_xlabel(\"Wins in 2018 World Cup\")\n", "ax2.set_title(\"Wins by Country\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Interpretation of Win Analysis\n", "\n", "Before we move to looking at the relationship between wins and population, it's useful to understand the distribution of wins alone. A few notes of interpretation:\n", "\n", "* The number of wins is skewed and looks like a [negative binomial distribution](https://en.wikipedia.org/wiki/Negative_binomial_distribution), which makes sense conceptually\n", "* The \"typical\" value here is 1 (both the median and the highest point of the histogram), meaning a typical team that qualifies for the World Cup wins once\n", "* There are a few teams we might consider outliers: Belgium and France, with 6x the wins of the \"typical\" team and 1.5x the wins of the next \"runner-up\" (Uruguay, with 4 wins)\n", "* This is a fairly small dataset, something that becomes more noticeable with such a \"spiky\" (not smooth) histogram\n"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## 3. Associating Countries with 2018 Population\n", "\n", "> Add to the existing data structure so that it also connects each country name to its 2018 population, and create visualizations comparable to those from step 2.\n", "\n", "Now we're ready to add the 2018 population to `combined_data`, finally using the CSV file\n", "\n", "Recall that `combined_data` currently looks something like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 1 },\n", " ...\n", " 'Uruguay': { 'wins': 4 }\n", "}\n", "```\n", "\n", "And the goal is for it to look something like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 1, 'population': 44494502 },\n", " ...\n", " 'Uruguay': { 'wins': 4, 'population': 3449299 }\n", "}\n", "```\n", "\n", "To do that, we need to extract the 2018 population information from the CSV data.\n", "\n", "### Exploring the Structure of the Population Data CSV\n", "\n", "Recall that previously we loaded information from a CSV containing population data into a list of dictionaries called `population_data`."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "len(population_data)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["12,695 is a very large number of rows to print out, so let's look at some samples instead."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "np.random.seed(42)\n", "population_record_samples = np.random.choice(population_data, size=10)\n", "population_record_samples"]}, {"cell_type": "markdown", "metadata": {}, "source": ["There are **2 filtering tasks**, **1 data normalization task**, and **1 type conversion task** to be completed, based on what we can see in this sample. We'll walk through each of them below.\n", "\n", "(In a more realistic data cleaning environment, you most likely won't happen to get a sample that demonstrates all of the data cleaning steps needed, but this sample was chosen carefully for example purposes.)\n", "\n", "### Filtering Population Data\n", "\n", "We already should have suspected that this dataset would require some filtering, since there are 32 records in our current `combined_data` dataset and 12,695 records in `population_data`. Now that we have looked at this sample, we can identify 2 features we'll want to use in order to filter down the `population_data` records to just 32. Try to identify them before looking at the answer below.\n", "\n", ".\n", "\n", ".\n", "\n", ".\n", "\n", "*Answer: the two features to filter on are* ***`'Country Name'`*** *and* ***`'Year'`***. *We can see from the sample above that there are countries in `population_data` that are not present in `combined_data` (e.g. Malta) and there are years present that are not 2018.*\n", "\n", "In the cell below, create a new variable `population_data_filtered` that only includes relevant records from `population_data`. Relevant records are records where the country name is one of the countries in the `teams` list, and the year is \"2018\".\n", "\n", "(It's okay to leave 2018 as a string since we are not performing any math operations on it, just make sure you check for `\"2018\"` and not `2018`.)"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\n", "population_data_filtered = []\n", "\n", "for record in population_data:\n", " # Add record to population_data_filtered if relevant\n", " None\n", "\n", "len(population_data_filtered) # 27"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Hmm...what went wrong? Why do we only have 27 records, and not 32?\n", "\n", "Did we really get a dataset with 12k records that's missing 5 of the data points we need?\n", "\n", "Let's take a closer look at the population data samples again, specifically the third one:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "population_record_samples[2]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["And compare that with the value for Iran in `teams`:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "teams[13]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ohhhh...we have a data normalization issue. One dataset refers to this country as `'Iran, Islamic Rep.'`, while the other refers to it as `'Iran'`. This is a common issue we face when using data about countries and regions, where there is no universally-accepted naming convention.\n", "\n", "### Normalizing Locations in Population Data\n", "\n", "Sometimes data normalization can be a very, very time-consuming task where you need to find \"crosswalk\" data that can link the two formats together, or you need to write advanced regex formulas to line everything up.\n", "\n", "For this task, there are only 5 missing, so we'll just go ahead and give you a function that makes the appropriate substitutions."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "def normalize_location(country_name):\n", " \"\"\"\n", " Given a country name, return the name that the\n", " country uses when playing in the FIFA World Cup\n", " \"\"\"\n", " name_sub_dict = {\n", " \"Russian Federation\": \"Russia\",\n", " \"Egypt, Arab Rep.\": \"Egypt\",\n", " \"Iran, Islamic Rep.\": \"Iran\",\n", " \"Korea, Rep.\": \"South Korea\",\n", " \"United Kingdom\": \"England\",\n", " }\n", " # The .get method returns the corresponding value from\n", " # the dict if present, otherwise returns country_name\n", " return name_sub_dict.get(country_name, country_name)\n", "\n", "\n", "# Example where normalized location is different\n", "print(normalize_location(\"Russian Federation\"))\n", "# Example where normalized location is the same\n", "print(normalize_location(\"Argentina\"))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Now, write new code to create `population_data_filtered` with normalized country names."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\n", "population_data_filtered = []\n", "\n", "for record in population_data:\n", " # Get normalized country name\n", " None\n", " # Add record to population_data_filtered if relevant\n", " if None:\n", " # Replace the country name in the record\n", " None\n", " # Append to list\n", " None\n", "\n", "len(population_data_filtered) # 32"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Great, now we should have 32 records instead of 27.\n", "\n", "### Type Conversion of Population Data\n", "\n", "We need to do one more thing before we'll have population data that is usable for analysis. Take a look at this record from `population_data_filtered` to see if you can spot it:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "population_data_filtered[0]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Every key has the same data type (`str`), including the population value. In this example, it's `'44494502'`, when it needs to be `44494502` if we want to be able to compute statistics with it.\n", "\n", "In the cell below, loop over `population_data_filtered` and convert the data type of the value associated with the `\"Value\"` key from a string to an integer, using the built-in `int()` function."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "for record in population_data_filtered:\n", " # Convert the population value from str to int\n", " None\n", "\n", "# Look at the last record to make sure the population\n", "# value is an int\n", "population_data_filtered[-1]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Check that it worked with the assert statement below:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "assert type(population_data_filtered[-1][\"Value\"]) == int"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Adding Population Data\n", "\n", "Now it's time to add the population data to `combined_data`. Recall that the data structure currently looks like this:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "combined_data"]}, {"cell_type": "markdown", "metadata": {}, "source": ["The goal is for it to be structured like this:\n", "```\n", "{\n", " 'Argentina': { 'wins': 1, 'population': 44494502 },\n", " ...\n", " 'Uruguay': { 'wins': 4, 'population': 3449299 }\n", "}\n", "```"]}, {"cell_type": "markdown", "metadata": {}, "source": ["In the cell below, loop over `population_data_filtered` and add information about population to each country in `combined_data`:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "for record in population_data_filtered:\n", " # Extract the country name from the record\n", " country = None\n", " # Extract the population value from the record\n", " population = None\n", " # Add this information to combined_data\n", " None\n", "\n", "# Look combined_data\n", "combined_data"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Check that the types are correct with these assert statements:"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "assert type(combined_data[\"Uruguay\"]) == dict\n", "assert type(combined_data[\"Uruguay\"][\"population\"]) == int"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Analysis of Population\n", "\n", "Let's perform the same analysis for population that we performed for count of wins.\n", "\n", "#### Statistical Analysis of Population"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "populations = [val[\"population\"] for val in combined_data.values()]\n", "\n", "print(\"Mean population:\", np.mean(populations))\n", "print(\"Median population:\", np.median(populations))\n", "print(\"Standard deviation of population:\", np.std(populations))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Visualizations of Population"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# Set up figure and axes\n", "fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 7))\n", "fig.set_tight_layout(True)\n", "\n", "# Histogram of Populations and Frequencies\n", "ax1.hist(x=populations, color=\"blue\")\n", "ax1.set_xlabel(\"2018 Population\")\n", "ax1.set_ylabel(\"Frequency\")\n", "ax1.set_title(\"Distribution of Population\")\n", "\n", "# Horizontal Bar Graph of Population by Country\n", "ax2.barh(teams[::-1], populations[::-1], color=\"blue\")\n", "ax2.set_xlabel(\"2018 Population\")\n", "ax2.set_title(\"Population by Country\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["#### Interpretation of Population Analysis\n", "\n", "* Similar to the distribution of the number of wins, the distribution of population is skewed.\n", "* It's hard to choose a single \"typical\" value here because there is so much variation.\n", "* The countries with the largest populations (Brazil, Nigeria, and Russia) do not overlap with the countries with the most wins (Belgium, France, and Uruguay)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## 4. Analysis of Population vs. Performance\n", "\n", "> Choose an appropriate statistical measure to analyze the relationship between population and performance, and create a visualization representing this relationship.\n", "\n", "### Statistical Measure\n", "So far we have learned about only two statistics for understanding the *relationship* between variables: **covariance** and **correlation**. We will use correlation here, because that provides a more standardized, interpretable metric."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "np.corrcoef(wins, populations)[0][1]"]}, {"cell_type": "markdown", "metadata": {}, "source": ["In the cell below, interpret this number. What direction is this correlation? Is it strong or weak?"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate code\n", "\"\"\"\n", "None\n", "\"\"\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Data Visualization\n", "\n", "A **scatter plot** is he most sensible form of data visualization for showing this relationship, because we have two dimensions of data, but there is no \"increasing\" variable (e.g. time) that would indicate we should use a line graph."]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Run this cell without changes\n", "\n", "# Set up figure\n", "fig, ax = plt.subplots(figsize=(8, 5))\n", "\n", "# Basic scatter plot\n", "ax.scatter(x=populations, y=wins, color=\"gray\", alpha=0.5, s=100)\n", "ax.set_xlabel(\"2018 Population\")\n", "ax.set_ylabel(\"2018 World Cup Wins\")\n", "ax.set_title(\"Population vs. World Cup Wins\")\n", "\n", "# Add annotations for specific points of interest\n", "highlighted_points = {\n", " \"Belgium\": 2, # Numbers are the index of that\n", " \"Brazil\": 3, # country in populations & wins\n", " \"France\": 10,\n", " \"Nigeria\": 17,\n", "}\n", "for country, index in highlighted_points.items():\n", " # Get x and y position of data point\n", " x = populations[index]\n", " y = wins[index]\n", " # Move each point slightly down and to the left\n", " # (numbers were chosen by manually tweaking)\n", " xtext = x - (1.25e6 * len(country))\n", " ytext = y - 0.5\n", " # Annotate with relevant arguments\n", " ax.annotate(text=country, xy=(x, y), xytext=(xtext, ytext))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Data Visualization Interpretation\n", "\n", "Interpret this plot in the cell below. Does this align with the findings from the statistical measure (correlation), as well as the map shown at the beginning of this lab (showing the best results by country)?"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate text\n", "\"\"\"\n", "None\n", "\"\"\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Final Analysis\n", "\n", "> What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n", "\n", "Overall, we found a very weakly positive relationship between the population of a country and their performance in the 2018 FIFA World Cup, as demonstrated by both the correlation between populations and wins, and the scatter plot.\n", "\n", "In the cell below, write down your thoughts on these questions:\n", "\n", " - What are your thoughts on why you may see this result?\n", " - What would you research next?"]}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": ["# Replace None with appropriate text\n", "\"\"\"\n", "None\n", "\"\"\""]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Summary\n", "\n", "That was a long lab, pulling together a lot of material. You read data into Python, extracted the relevant information, cleaned the data, and combined the data into a new format to be used in analysis. While we will continue to introduce new tools and techniques, these essential steps will be present for the rest of your data science projects from here on out."]}], "metadata": {"kernelspec": {"display_name": "Python (learn-env)", "language": "python", "name": "learn-env"}, "language_info": {"codemirror_mode": {"name": "ipython", "version": 3}, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5"}}, "nbformat": 4, "nbformat_minor": 4}
\ No newline at end of file
+{"cells":[{"cell_type":"markdown","metadata":{},"source":["# Data Serialization Formats - Cumulative Lab\n","\n","## Introduction\n","\n","Now that you have learned about CSV and JSON file formats individually, it's time to bring them together with a cumulative lab! Even as a junior data scientist, you can often produce novel, interesting analyses by combining multiple datasets that haven't been combined before.\n","\n","## Objectives\n","\n","You will be able to:\n","\n","* Practice reading serialized JSON and CSV data from files into Python objects\n","* Practice extracting information from nested data structures\n","* Practice cleaning data (filtering, normalizing locations, converting types)\n","* Combine data from multiple sources into a single data structure\n","* Interpret descriptive statistics and data visualizations to present your findings\n","\n","## Your Task: Analyze the Relationship between Population and World Cup Performance\n","\n","\n","\n","Photo by Fauzan Saari on Unsplash "]},{"cell_type":"markdown","metadata":{},"source":["### Business Understanding\n","\n","#### What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n","\n","Intuitively, we might assume that countries with larger populations would have better performance in international sports competitions. While this has been demonstrated to be [true for the Olympics](https://www.researchgate.net/publication/308513557_Medals_at_the_Olympic_Games_The_Relationship_Between_Won_Medals_Gross_Domestic_Product_Population_Size_and_the_Weight_of_Sportive_Practice), the results for the FIFA World Cup are more mixed:\n","\n","CC BY-SA 3.0 , Link
\n","\n","In this analysis, we are going to look specifically at the sample of World Cup games in 2018 and the corresponding 2018 populations of the participating nations, to determine the relationship between population and World Cup performance for this year."]},{"cell_type":"markdown","metadata":{},"source":["### Data Understanding\n","\n","The data sources for this analysis will be pulled from two separate files.\n","\n","#### `world_cup_2018.json`\n","\n","* **Source**: This dataset comes from [`football.db`](http://openfootball.github.io/), a \"free and open public domain football database & schema for use in any (programming) language\"\n","* **Contents**: Data about all games in the 2018 World Cup, including date, location (city and stadium), teams, goals scored (and by whom), and tournament group\n","* **Format**: Nested JSON data (dictionary containing a list of rounds, each of which contains a list of matches, each of which contains information about the teams involved and the points scored)\n","\n","#### `country_populations.csv`\n","\n","* **Source**: This dataset comes from a curated collection by [DataHub.io](https://datahub.io/core/population), originally sourced from the World Bank\n","* **Contents**: Data about populations by country for all available years from 1960 to 2018\n","* **Format**: CSV data, where each row contains a country name, a year, and a population"]},{"cell_type":"markdown","metadata":{},"source":["### Requirements\n","\n","#### 1. List of Teams in 2018 World Cup\n","\n","Create an alphabetically-sorted list of teams who competed in the 2018 FIFA World Cup.\n","\n","#### 2. Associating Countries with 2018 World Cup Performance\n","\n","Create a data structure that connects a team name (country name) to its performance in the 2018 FIFA World Cup. We'll use the count of games won in the entire tournament (group stage as well as knockout stage) to represent the performance.\n","\n","This will help create visualizations to help the reader understand the distribution of games won and the performance of each team.\n","\n","#### 3. Associating Countries with 2018 Population\n","\n","Add to the existing data structure so that it also connects each country name to its 2018 population, and create visualizations comparable to those from step 2.\n","\n","#### 4. Analysis of Population vs. Performance\n","\n","Choose an appropriate statistical measure to analyze the relationship between population and performance, and create a visualization representing this relationship."]},{"cell_type":"markdown","metadata":{},"source":["### Checking for Understanding\n","\n","Before moving on to the next step, pause and think about the strategy for this analysis.\n","\n","Remember, our business question is:\n","\n","> What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n","\n","#### Unit of Analysis\n","\n","First, what is our **unit of analysis**, and what is the **unique identifier**? In other words, what will one record in our final data structure represent, and what attribute uniquely describes it?\n","\n",".\n","\n",".\n","\n",".\n","\n","*Answer:* \n","\n","> What is the relationship between the population of a **country** and their performance in the 2018 FIFA World Cup?\n","\n","*Our unit of analysis is a* ***country*** *and the unique identifier we'll use is the* ***country name***\n","\n","#### Features\n","\n","Next, what **features** are we analyzing? In other words, what attributes of each country are we interested in?\n","\n",".\n","\n",".\n","\n",".\n","\n","*Answer:* \n","\n","> What is the relationship between the **population** of a country and their **performance in the 2018 FIFA World Cup**?\n","\n","*Our features are* ***2018 population*** *and* ***count of wins in the 2018 World Cup***\n","\n","#### Dataset to Start With\n","\n","Finally, which dataset should we **start** with? In this case, any record with missing data is not useful to us, so we want to start with the smaller dataset.\n","\n",".\n","\n",".\n","\n",".\n","\n","*Answer: There are only 32 countries that compete in the World Cup each year, compared to hundreds of countries in the world, so we should start with the* ***2018 World Cup*** *dataset. Then we can join it with the relevant records from the country population dataset.*"]},{"cell_type":"markdown","metadata":{},"source":["## Getting the Data\n","\n","Below we import the `json` and `csv` modules, which will be used for reading from `world_cup_2018.json` and `country_populations.csv`, respectively."]},{"cell_type":"code","execution_count":205,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","import json\n","import csv"]},{"cell_type":"markdown","metadata":{},"source":["Next, we open the relevant files."]},{"cell_type":"code","execution_count":211,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","world_cup_file = open(\"data/world_cup_2018.json\", encoding=\"utf8\")\n","population_file = open(\"data/country_populations.csv\")"]},{"cell_type":"markdown","metadata":{},"source":["**Hint:** if your code below is not working, (e.g. `ValueError: I/O operation on closed file.`, or you get an empty list or dictionary) try re-running the cell above to reopen the files, then re-run your code.\n","\n","### 2018 World Cup Data\n","\n","In the cell below, use the `json` module to load the data from `world_cup_file` into a dictionary called `world_cup_data`"]},{"cell_type":"code","execution_count":208,"metadata":{},"outputs":[{"data":{"text/plain":["_io.TextIOWrapper"]},"execution_count":208,"metadata":{},"output_type":"execute_result"}],"source":["type(world_cup_file)"]},{"cell_type":"code","execution_count":212,"metadata":{},"outputs":[],"source":["# Replace None with appropriate code\n","world_cup_data = json.load(world_cup_file)\n","\n","# Close the file now that we're done reading from it\n","world_cup_file.close()"]},{"cell_type":"markdown","metadata":{},"source":["Make sure the `assert` passes, ensuring that `world_cup_data` has the correct type."]},{"cell_type":"code","execution_count":213,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","\n","# Check that the overall data structure is a dictionary\n","assert type(world_cup_data) == dict\n","\n","# Check that the dictionary has 2 keys, 'name' and 'rounds'\n","assert list(world_cup_data.keys()) == [\"name\", \"rounds\"]"]},{"cell_type":"markdown","metadata":{},"source":["### Population Data\n","\n","Now use the `csv` module to load the data from `population_file` into a list of dictionaries called `population_data`\n","\n","(Recall that you can convert a `csv.DictReader` object into a list of dictionaries using the built-in `list()` function.)"]},{"cell_type":"code","execution_count":214,"metadata":{},"outputs":[{"data":{"text/plain":["_io.TextIOWrapper"]},"execution_count":214,"metadata":{},"output_type":"execute_result"}],"source":["type(population_file)"]},{"cell_type":"code","execution_count":215,"metadata":{},"outputs":[],"source":["# Replace None with appropriate code\n","population_data = list(csv.DictReader(population_file))\n","\n","# Close the file now that we're done reading from it\n","population_file.close()"]},{"cell_type":"markdown","metadata":{},"source":["Make sure the `assert`s pass, ensuring that `population_data` has the correct type."]},{"cell_type":"code","execution_count":216,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","\n","# Check that the overall data structure is a list\n","assert type(population_data) == list\n","\n","# Check that the 0th element is a dictionary\n","# (csv.DictReader interface differs slightly by Python version;\n","# either a dict or an OrderedDict is fine here)\n","from collections import OrderedDict\n","\n","assert type(population_data[0]) == dict or type(population_data[0]) == OrderedDict"]},{"cell_type":"markdown","metadata":{},"source":["## 1. List of Teams in 2018 World Cup\n","\n","> Create an alphabetically-sorted list of teams who competed in the 2018 FIFA World Cup.\n","\n","This will take several steps, some of which have been completed for you.\n","\n","### Exploring the Structure of the World Cup Data JSON\n","\n","Let's start by exploring the structure of `world_cup_data`. Here is a pretty-printed preview of its contents:\n","\n","```\n","{\n"," \"name\": \"World Cup 2018\",\n"," \"rounds\": [\n"," {\n"," \"name\": \"Matchday 1\",\n"," \"matches\": [\n"," {\n"," \"num\": 1,\n"," \"date\": \"2018-06-14\",\n"," \"time\": \"18:00\",\n"," \"team1\": { \"name\": \"Russia\", \"code\": \"RUS\" },\n"," \"team2\": { \"name\": \"Saudi Arabia\", \"code\": \"KSA\" },\n"," \"score1\": 5,\n"," \"score2\": 0,\n"," \"score1i\": 2,\n"," \"score2i\": 0,\n"," \"goals1\": [\n"," { \"name\": \"Gazinsky\", \"minute\": 12, \"score1\": 1, \"score2\": 0 },\n"," { \"name\": \"Cheryshev\", \"minute\": 43, \"score1\": 2, \"score2\": 0 },\n"," { \"name\": \"Dzyuba\", \"minute\": 71, \"score1\": 3, \"score2\": 0 },\n"," { \"name\": \"Cheryshev\", \"minute\": 90, \"offset\": 1, \"score1\": 4, \"score2\": 0 },\n"," { \"name\": \"Golovin\", \"minute\": 90, \"offset\": 4, \"score1\": 5, \"score2\": 0 }\n"," ],\n"," \"goals2\": [],\n"," \"group\": \"Group A\",\n"," \"stadium\": { \"key\": \"luzhniki\", \"name\": \"Luzhniki Stadium\" },\n"," \"city\": \"Moscow\",\n"," \"timezone\": \"UTC+3\"\n"," }\n"," ]\n"," },\n"," {\n"," \"name\": \"Matchday 2\",\n"," \"matches\": [\n"," {\n"," \"num\": 2,\n"," \"date\": \"2018-06-15\",\n"," \"time\": \"17:00\",\n"," \"team1\": { \"name\": \"Egypt\", \"code\": \"EGY\" },\n"," \"team2\": { \"name\": \"Uruguay\", \"code\": \"URU\" },\n"," \"score1\": 0,\n"," \"score2\": 1,\n"," \"score1i\": 0,\n"," \"score2i\": 0,\n"," \"goals1\": [],\n"," \"goals2\": [\n"," { \"name\": \"Giménez\", \"minute\": 89, \"score1\": 0, \"score2\": 1 }\n"," ],\n"," \"group\": \"Group A\",\n"," \"stadium\": { \"key\": \"ekaterinburg\", \"name\": \"Ekaterinburg Arena\" }, \n"," \"city\": \"Ekaterinburg\",\n"," \"timezone\": \"UTC+5\"\n"," },\n"," ...\n"," ],\n"," },\n"," ], \n","}\n","```\n","\n","As noted previously, `world_cup_data` is a dictionary with two keys, 'name' and 'rounds'."]},{"cell_type":"code","execution_count":217,"metadata":{},"outputs":[{"data":{"text/plain":["dict_keys(['name', 'rounds'])"]},"execution_count":217,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","world_cup_data.keys()"]},{"cell_type":"markdown","metadata":{},"source":["The value associated with the 'name' key is simply identifying the dataset."]},{"cell_type":"code","execution_count":218,"metadata":{},"outputs":[{"data":{"text/plain":["'World Cup 2018'"]},"execution_count":218,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","world_cup_data[\"name\"]"]},{"cell_type":"markdown","metadata":{},"source":["### Extracting Rounds\n","\n","The value associated with the 'rounds' key is a list containing all of the actual information about the rounds and the matches within those rounds."]},{"cell_type":"code","execution_count":219,"metadata":{"scrolled":false},"outputs":[{"name":"stdout","output_type":"stream","text":["type(rounds): \n","len(rounds): 20\n","type(rounds[3]) \n","rounds[3]:\n"]},{"data":{"text/plain":["{'name': 'Matchday 4',\n"," 'matches': [{'num': 9,\n"," 'date': '2018-06-17',\n"," 'time': '21:00',\n"," 'team1': {'name': 'Brazil', 'code': 'BRA'},\n"," 'team2': {'name': 'Switzerland', 'code': 'SUI'},\n"," 'score1': 1,\n"," 'score2': 1,\n"," 'score1i': 1,\n"," 'score2i': 0,\n"," 'goals1': [{'name': 'Coutinho', 'minute': 20, 'score1': 1, 'score2': 0}],\n"," 'goals2': [{'name': 'Zuber', 'minute': 50, 'score1': 1, 'score2': 1}],\n"," 'group': 'Group E',\n"," 'stadium': {'key': 'rostov', 'name': 'Rostov Arena'},\n"," 'city': 'Rostov-on-Don',\n"," 'timezone': 'UTC+3'},\n"," {'num': 10,\n"," 'date': '2018-06-17',\n"," 'time': '16:00',\n"," 'team1': {'name': 'Costa Rica', 'code': 'CRC'},\n"," 'team2': {'name': 'Serbia', 'code': 'SRB'},\n"," 'score1': 0,\n"," 'score2': 1,\n"," 'score1i': 0,\n"," 'score2i': 0,\n"," 'goals1': [],\n"," 'goals2': [{'name': 'Kolarov', 'minute': 56, 'score1': 0, 'score2': 1}],\n"," 'group': 'Group E',\n"," 'stadium': {'key': 'samara', 'name': 'Samara Arena'},\n"," 'city': 'Samara',\n"," 'timezone': 'UTC+4'},\n"," {'num': 11,\n"," 'date': '2018-06-17',\n"," 'time': '18:00',\n"," 'team1': {'name': 'Germany', 'code': 'GER'},\n"," 'team2': {'name': 'Mexico', 'code': 'MEX'},\n"," 'score1': 0,\n"," 'score2': 1,\n"," 'score1i': 0,\n"," 'score2i': 1,\n"," 'goals1': [],\n"," 'goals2': [{'name': 'Lozano', 'minute': 35, 'score1': 0, 'score2': 1}],\n"," 'group': 'Group F',\n"," 'stadium': {'key': 'luzhniki', 'name': 'Luzhniki Stadium'},\n"," 'city': 'Moscow',\n"," 'timezone': 'UTC+3'}]}"]},"execution_count":219,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","rounds = world_cup_data[\"rounds\"]\n","\n","print(\"type(rounds):\", type(rounds))\n","print(\"len(rounds):\", len(rounds))\n","print(\"type(rounds[3])\", type(rounds[3]))\n","print(\"rounds[3]:\")\n","rounds[3]"]},{"cell_type":"markdown","metadata":{},"source":["Translating this output into English:\n","\n","Starting with the original `world_cup_data` dictionary, we used the key `\"rounds\"` to extract a list of rounds, which we assigned to the variable `rounds`.\n","\n","`rounds` is a list of dictionaries. Each dictionary inside of `rounds` contains a name (e.g. `\"Matchday 4\"`) as well as a list of matches."]},{"cell_type":"markdown","metadata":{},"source":["### Extracting Matches\n","\n","Now we can go one level deeper and extract all of the matches in the tournament. Because the round is irrelevant for this analysis, we can loop over all rounds and combine all of their matches into a single list.\n","\n","**Hint:** This is a good use case for using the `.extend` list method rather than `.append`, since we want to combine several lists of dictionaries into a single list of dictionaries, not a list of lists of dictionaries. [Documentation here.](https://docs.python.org/3/tutorial/datastructures.html#more-on-lists)"]},{"cell_type":"code","execution_count":220,"metadata":{},"outputs":[{"data":{"text/plain":["[{'num': 1,\n"," 'date': '2018-06-14',\n"," 'time': '18:00',\n"," 'team1': {'name': 'Russia', 'code': 'RUS'},\n"," 'team2': {'name': 'Saudi Arabia', 'code': 'KSA'},\n"," 'score1': 5,\n"," 'score2': 0,\n"," 'score1i': 2,\n"," 'score2i': 0,\n"," 'goals1': [{'name': 'Gazinsky', 'minute': 12, 'score1': 1, 'score2': 0},\n"," {'name': 'Cheryshev', 'minute': 43, 'score1': 2, 'score2': 0},\n"," {'name': 'Dzyuba', 'minute': 71, 'score1': 3, 'score2': 0},\n"," {'name': 'Cheryshev', 'minute': 90, 'offset': 1, 'score1': 4, 'score2': 0},\n"," {'name': 'Golovin', 'minute': 90, 'offset': 4, 'score1': 5, 'score2': 0}],\n"," 'goals2': [],\n"," 'group': 'Group A',\n"," 'stadium': {'key': 'luzhniki', 'name': 'Luzhniki Stadium'},\n"," 'city': 'Moscow',\n"," 'timezone': 'UTC+3'}]"]},"execution_count":220,"metadata":{},"output_type":"execute_result"}],"source":["rounds[0]['matches']"]},{"cell_type":"code","execution_count":221,"metadata":{},"outputs":[{"data":{"text/plain":["{'num': 1,\n"," 'date': '2018-06-14',\n"," 'time': '18:00',\n"," 'team1': {'name': 'Russia', 'code': 'RUS'},\n"," 'team2': {'name': 'Saudi Arabia', 'code': 'KSA'},\n"," 'score1': 5,\n"," 'score2': 0,\n"," 'score1i': 2,\n"," 'score2i': 0,\n"," 'goals1': [{'name': 'Gazinsky', 'minute': 12, 'score1': 1, 'score2': 0},\n"," {'name': 'Cheryshev', 'minute': 43, 'score1': 2, 'score2': 0},\n"," {'name': 'Dzyuba', 'minute': 71, 'score1': 3, 'score2': 0},\n"," {'name': 'Cheryshev', 'minute': 90, 'offset': 1, 'score1': 4, 'score2': 0},\n"," {'name': 'Golovin', 'minute': 90, 'offset': 4, 'score1': 5, 'score2': 0}],\n"," 'goals2': [],\n"," 'group': 'Group A',\n"," 'stadium': {'key': 'luzhniki', 'name': 'Luzhniki Stadium'},\n"," 'city': 'Moscow',\n"," 'timezone': 'UTC+3'}"]},"execution_count":221,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","matches = []\n","\n","# \"round\" is a built-in function in Python so we use \"round_\" instead\n","for round_ in rounds:\n"," # Extract the list of matches for this round\n"," round_matches = round_['matches']\n"," # Add them to the overall list of matches\n"," matches.extend(round_matches)\n"," \n","#round_\n","matches[0]"]},{"cell_type":"markdown","metadata":{},"source":["Make sure the `assert`s pass before moving on to the next step."]},{"cell_type":"code","execution_count":222,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","\n","# There should be 64 matches. If the length is 20, that means\n","# you have a list of lists instead of a list of dictionaries\n","assert len(matches) == 64\n","\n","# Each match in the list should be a dictionary\n","assert type(matches[0]) == dict"]},{"cell_type":"markdown","metadata":{},"source":["### Extracting Teams\n","\n","Each match has a `team1` and a `team2`. "]},{"cell_type":"code","execution_count":223,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["{'name': 'Russia', 'code': 'RUS'}\n","{'name': 'Saudi Arabia', 'code': 'KSA'}\n"]}],"source":["# Run this cell without changes\n","print(matches[0][\"team1\"])\n","print(matches[0][\"team2\"])"]},{"cell_type":"code","execution_count":224,"metadata":{},"outputs":[{"data":{"text/plain":["'Russia'"]},"execution_count":224,"metadata":{},"output_type":"execute_result"}],"source":["matches[0]['team1']['name']"]},{"cell_type":"markdown","metadata":{},"source":["Create a list of all unique team names by looping over every match in `matches` and adding the `\"name\"` values associated with both `team1` and `team2`. (Same as before when creating a list of matches, it doesn't matter right now whether a given team was \"team1\" or \"team2\", we just add everything to `teams`.)\n","\n","We'll use a `set` data type ([documentation here](https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset)) to ensure unique teams, then convert it to a sorted list at the end."]},{"cell_type":"code","execution_count":225,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["['Argentina', 'Australia', 'Belgium', 'Brazil', 'Colombia', 'Costa Rica', 'Croatia', 'Denmark', 'Egypt', 'England', 'France', 'Germany', 'Iceland', 'Iran', 'Japan', 'Mexico', 'Morocco', 'Nigeria', 'Panama', 'Peru', 'Poland', 'Portugal', 'Russia', 'Saudi Arabia', 'Senegal', 'Serbia', 'South Korea', 'Spain', 'Sweden', 'Switzerland', 'Tunisia', 'Uruguay']\n"]}],"source":["# Replace None with appropriate code\n","teams_set = set()\n","\n","for match in matches:\n"," # Add team1 name value to teams_set\n"," teams_set.add(match[\"team1\"]['name']) #None\n"," # Add team2 name value to teams_set\n"," teams_set.add(match[\"team2\"]['name']) #None\n","\n","teams = sorted(list(teams_set))\n","print(teams)"]},{"cell_type":"markdown","metadata":{},"source":["Make sure the `assert`s pass before moving on to the next step."]},{"cell_type":"code","execution_count":226,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","\n","# teams should be a list, not a set\n","assert type(teams) == list\n","\n","# 32 teams competed in the 2018 World Cup\n","assert len(teams) == 32\n","\n","# Each element of teams should be a string\n","# (the name), not a dictionary\n","assert type(teams[0]) == str"]},{"cell_type":"markdown","metadata":{},"source":["Step 1 complete. We have unique identifiers (names) for each of our records (countries) that we will be able to use to connect 2018 World Cup performance to 2018 population."]},{"cell_type":"markdown","metadata":{},"source":["## 2. Associating Countries with 2018 World Cup Performance\n","\n","> Create a data structure that connects a team name (country name) to its performance in the 2018 FIFA World Cup. We'll use the count of games won in the entire tournament (group stage as well as knockout stage) to represent the performance.\n","\n","> Also, create visualizations to help the reader understand the distribution of games won and the performance of each team.\n","\n","So, we are building a **data structure** that connects a country name to the number of wins. There is no universal correct format for a data structure with this purpose, but we are going to use a format that resembles the \"dataframe\" format that will be introduced later in the course.\n","\n","Specifically, we'll build a **dictionary** where each key is the name of a country, and each value is a nested dictionary containing information about the number of wins and the 2018 population.\n","\n","The final result will look something like this:\n","```\n","{\n"," 'Argentina': { 'wins': 1, 'population': 44494502 },\n"," ...\n"," 'Uruguay': { 'wins': 4, 'population': 3449299 }\n","}\n","```\n","\n","For the current step (step 2), we'll build a data structure that looks something like this:\n","```\n","{\n"," 'Argentina': { 'wins': 1 },\n"," ...\n"," 'Uruguay': { 'wins': 4 }\n","}\n","```\n","\n","### Initializing with Wins Set to Zero\n","\n","Start by initializing a dictionary called `combined_data` containing:\n","\n","* Keys: the strings from `teams`\n","* Values: each value the same, a dictionary containing the key `'wins'` with the associated value `0`. However, note that each value should be a distinct dictionary object in memory, not the same dictionary linked as a value in multiple places.\n","\n","Initially `combined_data` will look something like this:\n","```\n","{\n"," 'Argentina': { 'wins': 0 },\n"," ...\n"," 'Uruguay': { 'wins': 0 }\n","}\n","```"]},{"cell_type":"code","execution_count":227,"metadata":{},"outputs":[{"data":{"text/plain":["'Argentina'"]},"execution_count":227,"metadata":{},"output_type":"execute_result"}],"source":["teams.index('Japan')\n","teams[0]"]},{"cell_type":"code","execution_count":228,"metadata":{},"outputs":[],"source":["# Replace None with appropriate code\n","\n","# Create the variable combined_data as described above\n","combined_data ={}\n","for x in teams:\n"," combined_data.update({x:{'wins':0}})"]},{"cell_type":"markdown","metadata":{},"source":["Check that the `assert`s pass."]},{"cell_type":"code","execution_count":229,"metadata":{},"outputs":[{"data":{"text/plain":["dict_keys(['Argentina', 'Australia', 'Belgium', 'Brazil', 'Colombia', 'Costa Rica', 'Croatia', 'Denmark', 'Egypt', 'England', 'France', 'Germany', 'Iceland', 'Iran', 'Japan', 'Mexico', 'Morocco', 'Nigeria', 'Panama', 'Peru', 'Poland', 'Portugal', 'Russia', 'Saudi Arabia', 'Senegal', 'Serbia', 'South Korea', 'Spain', 'Sweden', 'Switzerland', 'Tunisia', 'Uruguay'])"]},"execution_count":229,"metadata":{},"output_type":"execute_result"}],"source":["combined_data.keys()"]},{"cell_type":"code","execution_count":230,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","\n","# combined_data should be a dictionary\n","assert type(combined_data) == dict\n","\n","# the keys should be strings\n","assert type(list(combined_data.keys())[0]) == str\n","\n","# the values should be dictionaries\n","assert combined_data[\"Japan\"] == {\"wins\": 0}"]},{"cell_type":"markdown","metadata":{},"source":["### Adding Wins from Matches\n","\n","Now it's time to revisit the `matches` list from earlier, in order to associate a team with the number of times it has won a match.\n","\n","This time, let's write some functions to help organize our logic.\n","\n","Write a function `find_winner` that takes in a `match` dictionary, and returns the name of the team that won the match. Recall that a match is structured like this:\n","\n","```\n","{\n"," 'num': 1,\n"," 'date': '2018-06-14',\n"," 'time': '18:00',\n"," 'team1': { 'name': 'Russia', 'code': 'RUS' },\n"," 'team2': { 'name': 'Saudi Arabia', 'code': 'KSA' },\n"," 'score1': 5,\n"," 'score2': 0,\n"," 'score1i': 2,\n"," 'score2i': 0,\n"," 'goals1': [\n"," { 'name': 'Gazinsky', 'minute': 12, 'score1': 1, 'score2': 0 },\n"," { 'name': 'Cheryshev', 'minute': 43, 'score1': 2, 'score2': 0 },\n"," { 'name': 'Dzyuba', 'minute': 71, 'score1': 3, 'score2': 0 },\n"," { 'name': 'Cheryshev', 'minute': 90, 'offset': 1, 'score1': 4, 'score2': 0 },\n"," { 'name': 'Golovin', 'minute': 90, 'offset': 4, 'score1': 5, 'score2': 0 }\n"," ],\n"," 'goals2': [],\n"," 'group': 'Group A',\n"," 'stadium': { 'key': 'luzhniki', 'name': 'Luzhniki Stadium' },\n"," 'city': 'Moscow',\n"," 'timezone': 'UTC+3'\n","}\n","```\n","\n","The winner is determined by comparing the values associated with the `'score1'` and `'score2'` keys. If score 1 is larger, then the name associated with the `'team1'` key is the winner. If score 2 is larger, then the name associated with the `'team2'` key is the winner. If the values are the same, there is no winner, so return `None`. (Unlike the group round of the World Cup, we are only counting *wins* as our \"performance\" construct, not 3 points for a win and 1 point for a tie.)"]},{"cell_type":"code","execution_count":231,"metadata":{},"outputs":[],"source":["# Replace None with appropriate code\n","\n","\n","def find_winner(match):\n"," \"\"\"\n"," Given a dictionary containing information about a match,\n"," return the name of the winner (or None in the case of a tie)\n"," \"\"\"\n"," #return match['score1']\n"," if match['score1'] > match['score2']:\n"," winner = match['team1']['name']\n"," else:\n"," winner = match['team2']['name']\n","\n"," return winner"]},{"cell_type":"code","execution_count":232,"metadata":{},"outputs":[{"data":{"text/plain":["'Spain'"]},"execution_count":232,"metadata":{},"output_type":"execute_result"}],"source":["find_winner(matches[2])"]},{"cell_type":"code","execution_count":233,"metadata":{},"outputs":[{"data":{"text/plain":["5"]},"execution_count":233,"metadata":{},"output_type":"execute_result"}],"source":["len(matches)\n","type(matches)\n","matches[0]['score1']"]},{"cell_type":"code","execution_count":234,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","assert find_winner(matches[0]) == \"Russia\"\n","assert find_winner(matches[1]) == \"Uruguay\"\n","assert find_winner(matches[2]) == \"Spain\""]},{"cell_type":"markdown","metadata":{},"source":["Now that we have this helper function, loop over every match in `matches`, find the winner, and add 1 to the associated count of wins in `combined_data`. If the winner is `None`, skip adding it to the dictionary."]},{"cell_type":"code","execution_count":235,"metadata":{},"outputs":[{"data":{"text/plain":["'Russia'"]},"execution_count":235,"metadata":{},"output_type":"execute_result"}],"source":["combined_data['Argentina']['wins']+1\n","find_winner(matches[0])"]},{"cell_type":"code","execution_count":236,"metadata":{},"outputs":[{"data":{"text/plain":["{'Argentina': {'wins': 1},\n"," 'Australia': {'wins': 1},\n"," 'Belgium': {'wins': 6},\n"," 'Brazil': {'wins': 3},\n"," 'Colombia': {'wins': 2},\n"," 'Costa Rica': {'wins': 1},\n"," 'Croatia': {'wins': 4},\n"," 'Denmark': {'wins': 2},\n"," 'Egypt': {'wins': 0},\n"," 'England': {'wins': 5},\n"," 'France': {'wins': 7},\n"," 'Germany': {'wins': 1},\n"," 'Iceland': {'wins': 1},\n"," 'Iran': {'wins': 1},\n"," 'Japan': {'wins': 1},\n"," 'Mexico': {'wins': 2},\n"," 'Morocco': {'wins': 1},\n"," 'Nigeria': {'wins': 1},\n"," 'Panama': {'wins': 0},\n"," 'Peru': {'wins': 1},\n"," 'Poland': {'wins': 1},\n"," 'Portugal': {'wins': 2},\n"," 'Russia': {'wins': 3},\n"," 'Saudi Arabia': {'wins': 1},\n"," 'Senegal': {'wins': 2},\n"," 'Serbia': {'wins': 1},\n"," 'South Korea': {'wins': 1},\n"," 'Spain': {'wins': 2},\n"," 'Sweden': {'wins': 3},\n"," 'Switzerland': {'wins': 2},\n"," 'Tunisia': {'wins': 1},\n"," 'Uruguay': {'wins': 4}}"]},"execution_count":236,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","\n","for match in matches:\n"," # Get the name of the winner\n"," winner = find_winner(match)\n"," # Only proceed to the next step if there was\n"," # a winner\n"," if winner:\n"," # Add 1 to the associated count of wins\n"," combined_data[winner]['wins'] +=1\n","\n","# Visually inspect the output to ensure the wins are\n","# different for different countries\n","combined_data"]},{"cell_type":"markdown","metadata":{},"source":["### Analysis of Wins\n","\n","While we could try to understand all 32 of those numbers just by scanning through them, let's use some descriptive statistics and data visualizations instead\n","\n","#### Statistical Summary of Wins\n","\n","The code below calculates the mean, median, and standard deviation of the number of wins. If it doesn't work, that is an indication that something went wrong with the creation of the `combined_data` variable, and you might want to look at the solution branch and fix your code before proceeding."]},{"cell_type":"code","execution_count":237,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Mean number of wins: 2.0\n","Median number of wins: 1.0\n","Standard deviation of number of wins: 1.620185174601965\n"]}],"source":["# Run this cell without changes\n","import numpy as np\n","\n","wins = [val[\"wins\"] for val in combined_data.values()]\n","\n","print(\"Mean number of wins:\", np.mean(wins))\n","print(\"Median number of wins:\", np.median(wins))\n","print(\"Standard deviation of number of wins:\", np.std(wins))"]},{"cell_type":"markdown","metadata":{},"source":["#### Visualizations of Wins\n","\n","In addition to those numbers, let's make a histogram (showing the distributions of the number of wins) and a bar graph (showing the number of wins by country)."]},{"cell_type":"code","execution_count":238,"metadata":{},"outputs":[{"data":{"image/png":"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","text/plain":[""]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["# Run this cell without changes\n","import matplotlib.pyplot as plt\n","\n","# Set up figure and axes\n","fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 7))\n","fig.set_tight_layout(True)\n","\n","# Histogram of Wins and Frequencies\n","ax1.hist(x=wins, bins=range(8), align=\"left\", color=\"green\")\n","ax1.set_xticks(range(7))\n","ax1.set_xlabel(\"Wins in 2018 World Cup\")\n","ax1.set_ylabel(\"Frequency\")\n","ax1.set_title(\"Distribution of Wins\")\n","\n","# Horizontal Bar Graph of Wins by Country\n","ax2.barh(teams[::-1], wins[::-1], color=\"green\")\n","ax2.set_xlabel(\"Wins in 2018 World Cup\")\n","ax2.set_title(\"Wins by Country\");"]},{"cell_type":"markdown","metadata":{},"source":["#### Interpretation of Win Analysis\n","\n","Before we move to looking at the relationship between wins and population, it's useful to understand the distribution of wins alone. A few notes of interpretation:\n","\n","* The number of wins is skewed and looks like a [negative binomial distribution](https://en.wikipedia.org/wiki/Negative_binomial_distribution), which makes sense conceptually\n","* The \"typical\" value here is 1 (both the median and the highest point of the histogram), meaning a typical team that qualifies for the World Cup wins once\n","* There are a few teams we might consider outliers: Belgium and France, with 6x the wins of the \"typical\" team and 1.5x the wins of the next \"runner-up\" (Uruguay, with 4 wins)\n","* This is a fairly small dataset, something that becomes more noticeable with such a \"spiky\" (not smooth) histogram\n"]},{"cell_type":"markdown","metadata":{},"source":["## 3. Associating Countries with 2018 Population\n","\n","> Add to the existing data structure so that it also connects each country name to its 2018 population, and create visualizations comparable to those from step 2.\n","\n","Now we're ready to add the 2018 population to `combined_data`, finally using the CSV file\n","\n","Recall that `combined_data` currently looks something like this:\n","```\n","{\n"," 'Argentina': { 'wins': 1 },\n"," ...\n"," 'Uruguay': { 'wins': 4 }\n","}\n","```\n","\n","And the goal is for it to look something like this:\n","```\n","{\n"," 'Argentina': { 'wins': 1, 'population': 44494502 },\n"," ...\n"," 'Uruguay': { 'wins': 4, 'population': 3449299 }\n","}\n","```\n","\n","To do that, we need to extract the 2018 population information from the CSV data.\n","\n","### Exploring the Structure of the Population Data CSV\n","\n","Recall that previously we loaded information from a CSV containing population data into a list of dictionaries called `population_data`."]},{"cell_type":"code","execution_count":239,"metadata":{},"outputs":[{"data":{"text/plain":["12695"]},"execution_count":239,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","len(population_data)"]},{"cell_type":"markdown","metadata":{},"source":["12,695 is a very large number of rows to print out, so let's look at some samples instead."]},{"cell_type":"code","execution_count":240,"metadata":{},"outputs":[{"data":{"text/plain":["array([{'': '9984', 'Country Name': 'Malta', 'Country Code': 'MLT', 'Year': '1983', 'Value': '330524'},\n"," {'': '3574', 'Country Name': 'Bahrain', 'Country Code': 'BHR', 'Year': '1994', 'Value': '549583'},\n"," {'': '8104', 'Country Name': 'Iran, Islamic Rep.', 'Country Code': 'IRN', 'Year': '1988', 'Value': '53077313'},\n"," {'': '7905', 'Country Name': 'Iceland', 'Country Code': 'ISL', 'Year': '1966', 'Value': '195570'},\n"," {'': '14678', 'Country Name': 'United Arab Emirates', 'Country Code': 'ARE', 'Year': '1966', 'Value': '159976'},\n"," {'': '13998', 'Country Name': 'Thailand', 'Country Code': 'THA', 'Year': '1994', 'Value': '58875269'},\n"," {'': '8448', 'Country Name': 'Jamaica', 'Country Code': 'JAM', 'Year': '1978', 'Value': '2105907'},\n"," {'': '8979', 'Country Name': 'Kuwait', 'Country Code': 'KWT', 'Year': '1978', 'Value': '1224067'},\n"," {'': '3180', 'Country Name': 'Argentina', 'Country Code': 'ARG', 'Year': '2013', 'Value': '42202935'},\n"," {'': '7140', 'Country Name': 'Gibraltar', 'Country Code': 'GIB', 'Year': '1968', 'Value': '27685'}],\n"," dtype=object)"]},"execution_count":240,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","np.random.seed(42)\n","population_record_samples = np.random.choice(population_data, size=10)\n","population_record_samples"]},{"cell_type":"markdown","metadata":{},"source":["There are **2 filtering tasks**, **1 data normalization task**, and **1 type conversion task** to be completed, based on what we can see in this sample. We'll walk through each of them below.\n","\n","(In a more realistic data cleaning environment, you most likely won't happen to get a sample that demonstrates all of the data cleaning steps needed, but this sample was chosen carefully for example purposes.)\n","\n","### Filtering Population Data\n","\n","We already should have suspected that this dataset would require some filtering, since there are 32 records in our current `combined_data` dataset and 12,695 records in `population_data`. Now that we have looked at this sample, we can identify 2 features we'll want to use in order to filter down the `population_data` records to just 32. Try to identify them before looking at the answer below.\n","\n",".\n","\n",".\n","\n",".\n","\n","*Answer: the two features to filter on are* ***`'Country Name'`*** *and* ***`'Year'`***. *We can see from the sample above that there are countries in `population_data` that are not present in `combined_data` (e.g. Malta) and there are years present that are not 2018.*\n","\n","In the cell below, create a new variable `population_data_filtered` that only includes relevant records from `population_data`. Relevant records are records where the country name is one of the countries in the `teams` list, and the year is \"2018\".\n","\n","(It's okay to leave 2018 as a string since we are not performing any math operations on it, just make sure you check for `\"2018\"` and not `2018`.)"]},{"cell_type":"code","execution_count":241,"metadata":{},"outputs":[{"data":{"text/plain":["'1960'"]},"execution_count":241,"metadata":{},"output_type":"execute_result"}],"source":["type(population_data)\n","#population_data[0]['Country Name']\n","population_data[0]['Year']"]},{"cell_type":"code","execution_count":242,"metadata":{},"outputs":[{"data":{"text/plain":["27"]},"execution_count":242,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","\n","population_data_filtered = []\n","\n","for record in population_data:\n"," # Add record to population_data_filtered if relevant\n"," if record['Country Name'] in teams and record['Year'] =='2018':\n"," population_data_filtered.append(record)\n","\n","len(population_data_filtered) # 27\n","#record['Year']"]},{"cell_type":"markdown","metadata":{},"source":["Hmm...what went wrong? Why do we only have 27 records, and not 32?\n","\n","Did we really get a dataset with 12k records that's missing 5 of the data points we need?\n","\n","Let's take a closer look at the population data samples again, specifically the third one:"]},{"cell_type":"code","execution_count":243,"metadata":{},"outputs":[{"data":{"text/plain":["{'': '8104',\n"," 'Country Name': 'Iran, Islamic Rep.',\n"," 'Country Code': 'IRN',\n"," 'Year': '1988',\n"," 'Value': '53077313'}"]},"execution_count":243,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","population_record_samples[2]"]},{"cell_type":"markdown","metadata":{},"source":["And compare that with the value for Iran in `teams`:"]},{"cell_type":"code","execution_count":244,"metadata":{},"outputs":[{"data":{"text/plain":["'Iran'"]},"execution_count":244,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","teams[13]"]},{"cell_type":"markdown","metadata":{},"source":["Ohhhh...we have a data normalization issue. One dataset refers to this country as `'Iran, Islamic Rep.'`, while the other refers to it as `'Iran'`. This is a common issue we face when using data about countries and regions, where there is no universally-accepted naming convention.\n","\n","### Normalizing Locations in Population Data\n","\n","Sometimes data normalization can be a very, very time-consuming task where you need to find \"crosswalk\" data that can link the two formats together, or you need to write advanced regex formulas to line everything up.\n","\n","For this task, there are only 5 missing, so we'll just go ahead and give you a function that makes the appropriate substitutions."]},{"cell_type":"code","execution_count":245,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Russia\n","Argentina\n"]}],"source":["# Run this cell without changes\n","def normalize_location(country_name):\n"," \"\"\"\n"," Given a country name, return the name that the\n"," country uses when playing in the FIFA World Cup\n"," \"\"\"\n"," name_sub_dict = {\n"," \"Russian Federation\": \"Russia\",\n"," \"Egypt, Arab Rep.\": \"Egypt\",\n"," \"Iran, Islamic Rep.\": \"Iran\",\n"," \"Korea, Rep.\": \"South Korea\",\n"," \"United Kingdom\": \"England\",\n"," }\n"," # The .get method returns the corresponding value from\n"," # the dict if present, otherwise returns country_name\n"," return name_sub_dict.get(country_name, country_name)\n","\n","\n","# Example where normalized location is different\n","print(normalize_location(\"Russian Federation\"))\n","# Example where normalized location is the same\n","print(normalize_location(\"Argentina\"))"]},{"cell_type":"markdown","metadata":{},"source":["Now, write new code to create `population_data_filtered` with normalized country names."]},{"cell_type":"code","execution_count":246,"metadata":{},"outputs":[{"data":{"text/plain":["32"]},"execution_count":246,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","\n","population_data_filtered = []\n","\n","for record in population_data:\n"," # Get normalized country name\n"," record['Country Name'] = normalize_location(record['Country Name'])\n"," # Add record to population_data_filtered if relevant\n"," if record['Country Name'] in teams and record['Year'] =='2018':\n"," \n"," # Replace the country name in the record\n"," None\n"," # Append to list\n"," population_data_filtered.append(record) #None\n","\n","len(population_data_filtered) # 32"]},{"cell_type":"markdown","metadata":{},"source":["Great, now we should have 32 records instead of 27.\n","\n","### Type Conversion of Population Data\n","\n","We need to do one more thing before we'll have population data that is usable for analysis. Take a look at this record from `population_data_filtered` to see if you can spot it:"]},{"cell_type":"code","execution_count":247,"metadata":{},"outputs":[{"data":{"text/plain":["{'': '3185',\n"," 'Country Name': 'Argentina',\n"," 'Country Code': 'ARG',\n"," 'Year': '2018',\n"," 'Value': '44494502'}"]},"execution_count":247,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","population_data_filtered[0]"]},{"cell_type":"code","execution_count":248,"metadata":{},"outputs":[{"data":{"text/plain":["[{'': '3185',\n"," 'Country Name': 'Argentina',\n"," 'Country Code': 'ARG',\n"," 'Year': '2018',\n"," 'Value': '44494502'},\n"," {'': '3362',\n"," 'Country Name': 'Australia',\n"," 'Country Code': 'AUS',\n"," 'Year': '2018',\n"," 'Value': '24982688'},\n"," {'': '3834',\n"," 'Country Name': 'Belgium',\n"," 'Country Code': 'BEL',\n"," 'Year': '2018',\n"," 'Value': '11433256'},\n"," {'': '4306',\n"," 'Country Name': 'Brazil',\n"," 'Country Code': 'BRA',\n"," 'Year': '2018',\n"," 'Value': '209469333'},\n"," {'': '5250',\n"," 'Country Name': 'Colombia',\n"," 'Country Code': 'COL',\n"," 'Year': '2018',\n"," 'Value': '49648685'},\n"," {'': '5486',\n"," 'Country Name': 'Costa Rica',\n"," 'Country Code': 'CRI',\n"," 'Year': '2018',\n"," 'Value': '4999441'},\n"," {'': '5604',\n"," 'Country Name': 'Croatia',\n"," 'Country Code': 'HRV',\n"," 'Year': '2018',\n"," 'Value': '4087843'},\n"," {'': '5899',\n"," 'Country Name': 'Denmark',\n"," 'Country Code': 'DNK',\n"," 'Year': '2018',\n"," 'Value': '5793636'},\n"," {'': '6194',\n"," 'Country Name': 'Egypt',\n"," 'Country Code': 'EGY',\n"," 'Year': '2018',\n"," 'Value': '98423595'},\n"," {'': '6777',\n"," 'Country Name': 'France',\n"," 'Country Code': 'FRA',\n"," 'Year': '2018',\n"," 'Value': '66977107'},\n"," {'': '7072',\n"," 'Country Name': 'Germany',\n"," 'Country Code': 'DEU',\n"," 'Year': '2018',\n"," 'Value': '82905782'},\n"," {'': '7957',\n"," 'Country Name': 'Iceland',\n"," 'Country Code': 'ISL',\n"," 'Year': '2018',\n"," 'Value': '352721'},\n"," {'': '8134',\n"," 'Country Name': 'Iran',\n"," 'Country Code': 'IRN',\n"," 'Year': '2018',\n"," 'Value': '81800269'},\n"," {'': '8547',\n"," 'Country Name': 'Japan',\n"," 'Country Code': 'JPN',\n"," 'Year': '2018',\n"," 'Value': '126529100'},\n"," {'': '8901',\n"," 'Country Name': 'South Korea',\n"," 'Country Code': 'KOR',\n"," 'Year': '2018',\n"," 'Value': '51606633'},\n"," {'': '10255',\n"," 'Country Name': 'Mexico',\n"," 'Country Code': 'MEX',\n"," 'Year': '2018',\n"," 'Value': '126190788'},\n"," {'': '10609',\n"," 'Country Name': 'Morocco',\n"," 'Country Code': 'MAR',\n"," 'Year': '2018',\n"," 'Value': '36029138'},\n"," {'': '11258',\n"," 'Country Name': 'Nigeria',\n"," 'Country Code': 'NGA',\n"," 'Year': '2018',\n"," 'Value': '195874740'},\n"," {'': '11671',\n"," 'Country Name': 'Panama',\n"," 'Country Code': 'PAN',\n"," 'Year': '2018',\n"," 'Value': '4176873'},\n"," {'': '11848',\n"," 'Country Name': 'Peru',\n"," 'Country Code': 'PER',\n"," 'Year': '2018',\n"," 'Value': '31989256'},\n"," {'': '11966',\n"," 'Country Name': 'Poland',\n"," 'Country Code': 'POL',\n"," 'Year': '2018',\n"," 'Value': '37974750'},\n"," {'': '12025',\n"," 'Country Name': 'Portugal',\n"," 'Country Code': 'PRT',\n"," 'Year': '2018',\n"," 'Value': '10283822'},\n"," {'': '12261',\n"," 'Country Name': 'Russia',\n"," 'Country Code': 'RUS',\n"," 'Year': '2018',\n"," 'Value': '144478050'},\n"," {'': '12556',\n"," 'Country Name': 'Saudi Arabia',\n"," 'Country Code': 'SAU',\n"," 'Year': '2018',\n"," 'Value': '33699947'},\n"," {'': '12615',\n"," 'Country Name': 'Senegal',\n"," 'Country Code': 'SEN',\n"," 'Year': '2018',\n"," 'Value': '15854360'},\n"," {'': '12644',\n"," 'Country Name': 'Serbia',\n"," 'Country Code': 'SRB',\n"," 'Year': '2018',\n"," 'Value': '6982604'},\n"," {'': '13255',\n"," 'Country Name': 'Spain',\n"," 'Country Code': 'ESP',\n"," 'Year': '2018',\n"," 'Value': '46796540'},\n"," {'': '13727',\n"," 'Country Name': 'Sweden',\n"," 'Country Code': 'SWE',\n"," 'Year': '2018',\n"," 'Value': '10175214'},\n"," {'': '13786',\n"," 'Country Name': 'Switzerland',\n"," 'Country Code': 'CHE',\n"," 'Year': '2018',\n"," 'Value': '8513227'},\n"," {'': '14317',\n"," 'Country Name': 'Tunisia',\n"," 'Country Code': 'TUN',\n"," 'Year': '2018',\n"," 'Value': '11565204'},\n"," {'': '14789',\n"," 'Country Name': 'England',\n"," 'Country Code': 'GBR',\n"," 'Year': '2018',\n"," 'Value': '66460344'},\n"," {'': '14907',\n"," 'Country Name': 'Uruguay',\n"," 'Country Code': 'URY',\n"," 'Year': '2018',\n"," 'Value': '3449299'}]"]},"execution_count":248,"metadata":{},"output_type":"execute_result"}],"source":["population_data_filtered"]},{"cell_type":"markdown","metadata":{},"source":["Every key has the same data type (`str`), including the population value. In this example, it's `'44494502'`, when it needs to be `44494502` if we want to be able to compute statistics with it.\n","\n","In the cell below, loop over `population_data_filtered` and convert the data type of the value associated with the `\"Value\"` key from a string to an integer, using the built-in `int()` function."]},{"cell_type":"code","execution_count":249,"metadata":{},"outputs":[{"data":{"text/plain":["{'': '14907',\n"," 'Country Name': 'Uruguay',\n"," 'Country Code': 'URY',\n"," 'Year': '2018',\n"," 'Value': 3449299}"]},"execution_count":249,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","for record in population_data_filtered:\n"," # Convert the population value from str to int\n"," record['Value'] = int(record['Value'])\n","\n","# Look at the last record to make sure the population\n","# value is an int\n","population_data_filtered[-1]"]},{"cell_type":"markdown","metadata":{},"source":["Check that it worked with the assert statement below:"]},{"cell_type":"code","execution_count":250,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","assert type(population_data_filtered[-1][\"Value\"]) == int"]},{"cell_type":"markdown","metadata":{},"source":["### Adding Population Data\n","\n","Now it's time to add the population data to `combined_data`. Recall that the data structure currently looks like this:"]},{"cell_type":"code","execution_count":251,"metadata":{},"outputs":[{"data":{"text/plain":["{'Argentina': {'wins': 1},\n"," 'Australia': {'wins': 1},\n"," 'Belgium': {'wins': 6},\n"," 'Brazil': {'wins': 3},\n"," 'Colombia': {'wins': 2},\n"," 'Costa Rica': {'wins': 1},\n"," 'Croatia': {'wins': 4},\n"," 'Denmark': {'wins': 2},\n"," 'Egypt': {'wins': 0},\n"," 'England': {'wins': 5},\n"," 'France': {'wins': 7},\n"," 'Germany': {'wins': 1},\n"," 'Iceland': {'wins': 1},\n"," 'Iran': {'wins': 1},\n"," 'Japan': {'wins': 1},\n"," 'Mexico': {'wins': 2},\n"," 'Morocco': {'wins': 1},\n"," 'Nigeria': {'wins': 1},\n"," 'Panama': {'wins': 0},\n"," 'Peru': {'wins': 1},\n"," 'Poland': {'wins': 1},\n"," 'Portugal': {'wins': 2},\n"," 'Russia': {'wins': 3},\n"," 'Saudi Arabia': {'wins': 1},\n"," 'Senegal': {'wins': 2},\n"," 'Serbia': {'wins': 1},\n"," 'South Korea': {'wins': 1},\n"," 'Spain': {'wins': 2},\n"," 'Sweden': {'wins': 3},\n"," 'Switzerland': {'wins': 2},\n"," 'Tunisia': {'wins': 1},\n"," 'Uruguay': {'wins': 4}}"]},"execution_count":251,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","combined_data"]},{"cell_type":"markdown","metadata":{},"source":["The goal is for it to be structured like this:\n","```\n","{\n"," 'Argentina': { 'wins': 1, 'population': 44494502 },\n"," ...\n"," 'Uruguay': { 'wins': 4, 'population': 3449299 }\n","}\n","```"]},{"cell_type":"markdown","metadata":{},"source":["In the cell below, loop over `population_data_filtered` and add information about population to each country in `combined_data`:"]},{"cell_type":"code","execution_count":274,"metadata":{},"outputs":[{"data":{"text/plain":["{'Argentina': {'wins': 1, 'population': 44494502},\n"," 'Australia': {'wins': 1, 'population': 24982688},\n"," 'Belgium': {'wins': 6, 'population': 11433256},\n"," 'Brazil': {'wins': 3, 'population': 209469333},\n"," 'Colombia': {'wins': 2, 'population': 49648685},\n"," 'Costa Rica': {'wins': 1, 'population': 4999441},\n"," 'Croatia': {'wins': 4, 'population': 4087843},\n"," 'Denmark': {'wins': 2, 'population': 5793636},\n"," 'Egypt': {'wins': 0, 'population': 98423595},\n"," 'England': {'wins': 5, 'population': 66460344},\n"," 'France': {'wins': 7, 'population': 66977107},\n"," 'Germany': {'wins': 1, 'population': 82905782},\n"," 'Iceland': {'wins': 1, 'population': 352721},\n"," 'Iran': {'wins': 1, 'population': 81800269},\n"," 'Japan': {'wins': 1, 'population': 126529100},\n"," 'Mexico': {'wins': 2, 'population': 126190788},\n"," 'Morocco': {'wins': 1, 'population': 36029138},\n"," 'Nigeria': {'wins': 1, 'population': 195874740},\n"," 'Panama': {'wins': 0, 'population': 4176873},\n"," 'Peru': {'wins': 1, 'population': 31989256},\n"," 'Poland': {'wins': 1, 'population': 37974750},\n"," 'Portugal': {'wins': 2, 'population': 10283822},\n"," 'Russia': {'wins': 3, 'population': 144478050},\n"," 'Saudi Arabia': {'wins': 1, 'population': 33699947},\n"," 'Senegal': {'wins': 2, 'population': 15854360},\n"," 'Serbia': {'wins': 1, 'population': 6982604},\n"," 'South Korea': {'wins': 1, 'population': 51606633},\n"," 'Spain': {'wins': 2, 'population': 46796540},\n"," 'Sweden': {'wins': 3, 'population': 10175214},\n"," 'Switzerland': {'wins': 2, 'population': 8513227},\n"," 'Tunisia': {'wins': 1, 'population': 11565204},\n"," 'Uruguay': {'wins': 4, 'population': 3449299},\n"," 'population': 3449299}"]},"execution_count":274,"metadata":{},"output_type":"execute_result"}],"source":["# Replace None with appropriate code\n","for record in population_data_filtered:\n"," # Extract the country name from the record\n"," country = record['Country Name'] #None\n"," # Extract the population value from the record\n"," population = record['Value'] #None\n"," # Add this information to combined_data\n"," combined_data[country].update({'population': population}) #None\n","\n","# Look combined_data\n","combined_data"]},{"cell_type":"markdown","metadata":{},"source":["Check that the types are correct with these assert statements:"]},{"cell_type":"code","execution_count":263,"metadata":{},"outputs":[],"source":["# Run this cell without changes\n","assert type(combined_data[\"Uruguay\"]) == dict\n","assert type(combined_data[\"Uruguay\"][\"population\"]) == int"]},{"cell_type":"code","execution_count":275,"metadata":{},"outputs":[{"data":{"text/plain":["dict_keys(['wins', 'population'])"]},"execution_count":275,"metadata":{},"output_type":"execute_result"}],"source":["combined_data['Argentina'].keys()"]},{"cell_type":"code","execution_count":273,"metadata":{},"outputs":[{"data":{"text/plain":["'population'"]},"execution_count":273,"metadata":{},"output_type":"execute_result"}],"source":["for val in combined_data:#.values():\n"," countryd =val\n","countryd"]},{"cell_type":"code","execution_count":278,"metadata":{},"outputs":[{"data":{"text/plain":["('population', 3449299)"]},"execution_count":278,"metadata":{},"output_type":"execute_result"}],"source":["#combined_data.popitem()"]},{"cell_type":"markdown","metadata":{},"source":["### Analysis of Population\n","\n","Let's perform the same analysis for population that we performed for count of wins.\n","\n","#### Statistical Analysis of Population"]},{"cell_type":"code","execution_count":279,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["Mean population: 51687460.84375\n","Median population: 34864542.5\n","Standard deviation of population: 55195121.60871871\n"]}],"source":["# Run this cell without changes\n","populations = [val[\"population\"] for val in combined_data.values()]\n","\n","print(\"Mean population:\", np.mean(populations))\n","print(\"Median population:\", np.median(populations))\n","print(\"Standard deviation of population:\", np.std(populations))"]},{"cell_type":"markdown","metadata":{},"source":["#### Visualizations of Population"]},{"cell_type":"code","execution_count":280,"metadata":{},"outputs":[{"data":{"image/png":"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","text/plain":[""]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["# Run this cell without changes\n","\n","# Set up figure and axes\n","fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 7))\n","fig.set_tight_layout(True)\n","\n","# Histogram of Populations and Frequencies\n","ax1.hist(x=populations, color=\"blue\")\n","ax1.set_xlabel(\"2018 Population\")\n","ax1.set_ylabel(\"Frequency\")\n","ax1.set_title(\"Distribution of Population\")\n","\n","# Horizontal Bar Graph of Population by Country\n","ax2.barh(teams[::-1], populations[::-1], color=\"blue\")\n","ax2.set_xlabel(\"2018 Population\")\n","ax2.set_title(\"Population by Country\");"]},{"cell_type":"markdown","metadata":{},"source":["#### Interpretation of Population Analysis\n","\n","* Similar to the distribution of the number of wins, the distribution of population is skewed.\n","* It's hard to choose a single \"typical\" value here because there is so much variation.\n","* The countries with the largest populations (Brazil, Nigeria, and Russia) do not overlap with the countries with the most wins (Belgium, France, and Uruguay)"]},{"cell_type":"markdown","metadata":{},"source":["## 4. Analysis of Population vs. Performance\n","\n","> Choose an appropriate statistical measure to analyze the relationship between population and performance, and create a visualization representing this relationship.\n","\n","### Statistical Measure\n","So far we have learned about only two statistics for understanding the *relationship* between variables: **covariance** and **correlation**. We will use correlation here, because that provides a more standardized, interpretable metric."]},{"cell_type":"code","execution_count":281,"metadata":{},"outputs":[{"data":{"text/plain":["-0.006217143149754775"]},"execution_count":281,"metadata":{},"output_type":"execute_result"}],"source":["# Run this cell without changes\n","np.corrcoef(wins, populations)[0][1]"]},{"cell_type":"markdown","metadata":{},"source":["In the cell below, interpret this number. What direction is this correlation? Is it strong or weak?"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# Replace None with appropriate code\n","\"\"\"\n","None: A country populaton and perfomance are negatively correlated\n","\"\"\""]},{"cell_type":"markdown","metadata":{},"source":["### Data Visualization\n","\n","A **scatter plot** is he most sensible form of data visualization for showing this relationship, because we have two dimensions of data, but there is no \"increasing\" variable (e.g. time) that would indicate we should use a line graph."]},{"cell_type":"code","execution_count":282,"metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAegAAAFNCAYAAADLgfxRAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAAsTAAALEwEAmpwYAAA3ZklEQVR4nO3dfXxcdZn//9eVmXSSKSRtQ6EihEbFFkpvKAEbWFiwKygi3qKCLgvIoqC76y6rK37dH+x3dZd1+bmC7ooVWHRFFAGVHyqw3LTlJtwERG4jRaaEm0LTu7RlJkNmcv3+mDPpdDqZTNPMTTLv5+ORR2bO+Zxzrs+5mWs+55z5HHN3REREpLY0VDsAERER2ZUStIiISA1SghYREalBStAiIiI1SAlaRESkBilBi4iI1CAlaJEcZnatmX19D6bfbmZvm8iYJiMzO8vM7isyfqWZnVvJmCaCmX3KzO6odhxSH5SgpWaZ2VozSwRJ73Uz+28z26vacWUVSjLuvpe7v1CtmEplZqeb2TN5w/53lGFfqWx0YGbvNLOfm9kGMxswsyfM7O/MLDTBy/m+mf1XzvtGM3tjlGHL3P06dz9xImMQGY0StNS6D7j7XsBS4Ejga1WOZ6pYBRxiZrMBzCwMLAaiecO6gNW7M+NgunEzs7cDDwEvAQvdvRU4DegE9t6TeRewGvjTnPedQB9wXN4wgEcneNkiRSlBy6Tg7q8AvwUOAzCzU83saTPbErRkD8mWDVreF5nZM2a2OWh5NwXjdjn1amZuZu/IX6aZzTSzW82sP5jPrWZ2QDDuG8CxwHeDFv538+dlZq1m9qNg+hfN7Gtm1pAbh5ldFsw7ZmbvK1R3M/uKmd2YN+xyM7siZ14vmNm2YD6fKmF9vgq8wI5EtBR4mkzizh3WAPSUUJf7zew/zGwTcEmBOrzHzHqD1vB3ASsS3j8BD7j737n7uiDeP7j7Ge6+xcyON7OX8+a/1sz+LHh9iZndaGY/C9bJY2a2eJRlZb+o7BO8Pxb4KTA9b1i3uw/l7z/B9v6cma0JtuN/mpkF495hZquCOm8ws58VqbPILpSgZVIwswOBk4Hfmdk7geuBLwKzgd8A/5+ZTcuZ5FPAScDbgXcyvpZ3A/DfwEFAO5AAvgvg7v8HuBf4QnBa+wsFpv8O0Aq8jUwr7Uzg7Jzx7wL+AOwDfBO4Ovvhnud64GQzawEITvN+HPiJmU0HrgDe5+57A0cDj5dYv9XsSMbHBfW5L2/Yg+7+Zol1eQHYF/hG7kKCRHcTmW2wD/BH4Jgicf0ZcGOR8aX4IPBzYBbwE+CXZtaYX8jdXwZeJJOEYcd6eCBvWLGzCKeQObuzmMx2OSkY/s/AHcBM4AAy61CkZErQUut+aWZbyCSOVcC/AJ8Afu3u/+vuQ8BlQDOZ5JT1XXd/yd03kUkYp+/ugt19o7vf5O5xd98WzOdPx5oORpLoJ4CL3H2bu68F/l/gz3OKvejuP3D3NPBD4C3AfgXieBF4DPhQMOjdQNzdHwzeDwOHmVmzu69z96dLrGJua/lYMonp3rxhq0qsy6vu/h13T7l7Im85JwPPuPuNwfb6NvBakbjagHUl1mE0j+Ys71tAE7BslLKrgOOCMwJHAQ8SrIdg2DFBmdFc6u5b3L0PuAdYEgwfIvPlbn93H3T3UW+aEylECVpq3YfcfYa7H+TuFwQf/vuTafUA4O7DZK5XvjVnupdyXr8YTLNbzCwa3ET0opltJdOKmmGl3ai0DzAtN87gdW6MI0nK3ePBy9FugvsJO75knBG8x93fIJM8PwesM7Nfm9n8EuKDTH0WmdlMMsmr2917gbcEw/4kKFNKXXLXd779c8d75gk9xcpvJPNlZU/kLm8YeJnR94HsmYSFwAvBtrgvZ1gzmWvio8n9shFnxzb8MplT+Q8Hl2POGUc9pI4pQctk9CqZlgkAwWnhA4FXcsocmPO6PZgG4A0gmjPtnCLLuRCYB7zL3VvY0bLMnoYu9ii4DexoQeXG8Urh4mP6OXB8cA38wwQJGsDdb3f395BJar3AD0qZYXC3+avAeUCfu28PRnUHw/Yi05ospS7F1sU6crZHzvYazZ3AR4uMz9+GITKXOnLlLq+BzCnmVylsNZnT0+8n03KGzPX4A4Nhj7j7YJF4CnL319z9L919f+CzwH8VutdBZDRK0DIZ3QC838yWB9cVLwSSZK4bZn3ezA4ws1nAV4HsDTq/BxaY2ZLgxrFLiixnbzLXnbcE87k4b/zrZK7J7iI4bX0D8A0z29vMDgL+DvjxbtQzd379wEoy18Rj7v4sgJntZ5kb5qaTWQfbgfRuzPreIK57c4bdFwzrcffEBNTl12TW+Ucsc4f3XwPFvhhdDBxtZv+e/QIV3HD1YzObATwHNJnZ+4Pt/zUgkjePI3KW90Uy6+ZBCnD358lsy7/Jroeglf9QMGy37mLPMrPTgi9UAJvJfInZnW0jdU4JWiYdd/8D8GkyN91sAD5A5udYb+YU+wmZG3ReCP6+Hkz7HPB/ybTS1pBJRqP5NpnTmxvIfLjfljf+cuBjwd27VxSY/q/ItPZeCJbzE+CaUutZwE/I3ED1k5xhDWS+oLwKbCJzjfwCADM71sy2588kzyoyN3blrod7g2G5iWncdXH3DWR+JnUpmdPXBwP3Fyn/RzI/75oLPG1mA2RuMusBtrn7QFDHq8i04t8gcwo716/InPrfTOZa+UeC69GjWU2mFZ4bV6H1sDuOBB4KtsEtwN+4e2yc85I6ZJkviiJTh5mtBc519zurHYtUnpldArzD3T9d7VhE9oRa0CIiIjVICVpERKQG6RS3iIhIDVILWkREpAYpQYuIiNSgPXrqzETbZ599fO7cudUOQ0REpCIeffTRDe6e39EOUGMJeu7cufT09FQ7DBERkYowsxdHG6dT3CIiIjVICVpERKQGKUGLiIjUICVoERGRGqQELSIiUoNq6i5ukYmQSCTo6+sjFouRTCaJRCJ0dHTQ3t5Oc3NztcMTESmJErRMKRs3bqS7u5t0Ok00GqWlpYVUKkVvby9r1qyhq6uLtra2aocpIjKmsp3iNrN5ZvZ4zt9WM/tiuZYnkkgk6O7uJhwO09raSmNjI2ZGY2Mjra2thMNhuru7SSQS1Q5VRGRMZUvQ7v4Hd1/i7kuAI4A48ItyLU+kr6+PdDpNU1NTwfFNTU2k02n6+voqHJmIyO6r1E1iy4E/uvuoPaaI7KlYLEY0Gi1aJhqNEovFKhSRiMj4VSpBfxK4vtAIMzvPzHrMrKe/v79C4chUlEwmCYeL31YRDodJJpMVikhEZPzKnqDNbBpwKvDzQuPdfYW7d7p75+zZBfsLFylJJBIhlUoVLZNKpYhEIhWKSERk/CrRgn4f8Ji7v16BZUkd6+joIB6PFy0Tj8fp6OioUEQiIuNXiQR9OqOc3haZSO3t7YRCIQYHBwuOHxwcJBQK0d7eXuHIRER2X1kTtJlFgfcAN5dzOSIAzc3NdHV1kUqlGBgYYGhoCHdnaGiIgYEBUqkUXV1d6qxERCaFsnZU4u5xQL1CSMW0tbWxfPnykZ7E4vE4kUiE+fPnqycxEZlU1JOYTDnNzc3MmzePefPmVTsUEZFx08MyREREapAStIiISA1SghYREalBugYtk0YoFGLhwoUj73/5y18yd+7c6gUkIlJGStAyaTQ3N/P4448XHOfuuDsNDTopJCJTgz7NZNJau3YthxxyCBdccAFLly7lpZde4vzzz6ezs5MFCxZw8cUXj5SdO3cuF198MUuXLmXhwoX09vYCsH37ds4++2wWLlzIokWLuOmmmwC444476OrqYunSpZx22mls3769KnUUkfqlBC2TRiKRYMmSJSxZsoQPf/jDAPzhD3/gzDPP5He/+x0HHXQQ3/jGN+jp6eGJJ55g1apVPPHEEyPT77PPPjz22GOcf/75XHbZZQD88z//M62trTz55JM88cQTvPvd72bDhg18/etf58477+Sxxx6js7OTb33rW1Wps4jUL53ilkkj/xT32rVrOeigg1i2bNnIsBtuuIEVK1aQSqVYt24dzzzzDIsWLQLgIx/5CABHHHEEN9+c6dzuzjvv5Kc//enI9DNnzuTWW2/lmWee4ZhjjgHgzTffpKurq9zVExHZiRK0TGrTp08feR2Lxbjssst45JFHmDlzJmedddZO/XJnn2IVCoVGnnrl7pjZTvN0d97znvdw/fXqQl5EqkenuGXK2Lp1K9OnT6e1tZXXX3+d3/72t2NOc+KJJ/Ld73535P3mzZtZtmwZ999/P88//zyQeQLWc889V7a4RUQKUYKWKWPx4sUcfvjhLFiwgHPOOWfkFHUxX/va19i8eTOHHXYYixcv5p577mH27Nlce+21nH766SxatIhly5aN3FQmIlIp5u7VjmFEZ2en9/T0VDsMERGRijCzR929s9A4taBFRERqkBK0iIhIDVKCFhERqUFK0CIiIjVICVpERKQGKUGLiIjUICVoERGRGqQELSIiUoOUoEVERGqQErSIiEgNUoIWERGpQUrQIiIiNUjPgy5BIpGgr6+PWCxGMpkkEonQ0dFBe3s7zc3N1Q5PRESmoLK2oM1shpndaGa9ZvasmXWVc3nlsHHjRu666y56e3sJhUK0tLQQCoXo7e3lrrvuYuPGjdUOUUREpqByn+K+HLjN3ecDi4Fny7y8CZVIJOju7iYcDtPa2kpjYyNmRmNjI62trYTDYbq7u0kkEtUOVUREppiyJWgzawGOA64GcPc33X1LuZZXDn19faTTaZqamgqOb2pqIp1O09fXV+HIRERkqitnC/ptQD/w32b2OzO7ysyml3F5Ey4WixGNRouWiUajxGKxCkUkIiL1opwJOgwsBb7n7ocDbwBfyS9kZueZWY+Z9fT395cxnN2XTCYJh4vfRxcOh0kmkxWKSERE6kU5E/TLwMvu/lDw/kYyCXsn7r7C3TvdvXP27NllDGf3RSIRUqlU0TKpVIpIJFKhiEREpF6ULUG7+2vAS2Y2Lxi0HHimXMsrh46ODuLxeNEy8Xicjo6OCkUkIiL1otx3cf8VcJ2ZPQEsAf6lzMubUO3t7YRCIQYHBwuOHxwcJBQK0d7eXuHIRERkqitrgnb3x4PT14vc/UPuvrmcy5tozc3NdHV1kUqlGBgYYGhoCHdnaGiIgYEBUqkUXV1d6qxEREQmnHoSG0NbWxvLly8f6UksHo8TiUSYP3++ehITEZGyUYIuQXNzM/PmzWPevHljFxYREZkAeliGiIhIDVKCFhERqUFK0CIiIjWo7hJ0KBRiyZIlLF68mKVLl/LAAw+MOc1ee+01Zplzzz2XZ56ZVD/zFhGRGlZ3N4k1Nzfz+OOPA3D77bdz0UUXsWrVqj2e71VXXbXH8xAREcmquxZ0rq1btzJz5syR9//+7//OkUceyaJFi7j44ot3KT88PMwFF1zAggULOOWUUzj55JO58cYbATj++OPp6ekBdm5x33jjjZx11lkAnHXWWZx//vmccMIJvO1tb2PVqlWcc845HHLIISNlREREoA5b0IlEgiVLljA4OMi6deu4++67AbjjjjtYs2YNDz/8MO7OqaeeyurVqznuuONGpr355ptZu3YtTz75JOvXr+eQQw7hnHPO2a3lb968mbvvvptbbrmFD3zgA9x///1cddVVHHnkkTz++OMsWbJkIqsrIiKTVN21oLOnuHt7e7nttts488wzcXfuuOMO7rjjDg4//HCWLl1Kb28va9as2Wna++67j9NOO42GhgbmzJnDCSecsNvL/8AHPoCZsXDhQvbbbz8WLlxIQ0MDCxYsYO3atRNUSxERmezqrgWdq6uriw0bNtDf34+7c9FFF/HZz3521PLuXtJ8zWzkdX4/3tknXzU0NOz0FKyGhoYxn5wlIiL1o+5a0Ll6e3tJp9O0tbVx0kkncc0117B9+3YAXnnlFdavX79T+T/5kz/hpptuYnh4mNdff52VK1cWnO9+++3Hs88+y/DwML/4xS/KXQ0REZmC6q4Fnb0GDZkW8Q9/+ENCoRAnnngizz77LF1dXUDmRq8f//jH7LvvviPTfvSjH+Wuu+7isMMO453vfCfvete7aG1t3WUZl156KaeccgoHHngghx122EjSFxERKZWVetq2Ejo7Oz17J3St2r59O3vttRcbN27kqKOO4v7772fOnDnVDktERCYhM3vU3TsLjau7FvSeOuWUU9iyZQtvvvkm//iP/6jkLCIiZaEEvZtGu+4sIiIyker6JjEREZFapQQtIiJSg5SgRUREapAStIiISA1SghYREalBStAiIiI1SAlaRESkBilBi4iI1CAlaBERkRqknsRkSkkkEvT19RGLxUgmk0QiETo6Omhvb6e5ubna4YmIlKysCdrM1gLbgDSQGq1DcJGJsHHjRrq7u0mn00SjUVpaWkilUvT29rJmzRq6urpoa2urdpgiIiWpxCnuE9x9iZKzlFMikaC7u5twOExrayuNjY2YGY2NjbS2thIOh+nu7iaRSFQ7VBGRkugatEwJfX19pNNpmpqaCo5vamoinU7T19dX4chERMan3AnagTvM7FEzO6/My5I6FovFiEajRctEo1FisViFIhIR2TPlvknsGHd/1cz2Bf7XzHrdfXVugSBxnwfQ3t5e5nBkqkomk7S0tBQtEw6HicfjFYpIRGTPjNmCNrNjzGx68PrTZvYtMzuolJm7+6vB//XAL4CjCpRZ4e6d7t45e/bs3YteJBCJREilUkXLpFIpIpFIhSISEdkzpZzi/h4QN7PFwJeBF4EfjTWRmU03s72zr4ETgaf2IFaRUXV0dIzZOo7H43R0dFQoIhGRPVNKgk65uwMfBC5398uBvUuYbj/gPjP7PfAw8Gt3v238oYqMrr29nVAoxODgYMHxg4ODhEIhXUYRkUmjlGvQ28zsIuDTwHFmFgIax5rI3V8AFu9hfCIlaW5upquri+7ubgYGBohGo4TDYVKpFPF4nFAoRFdXlzorEZFJo5QW9CeAJPAZd38NeCvw72WNSmQc2traWL58OfPnzyedTrN161bS6TTz589n+fLl6qRERCYVy5y9rg2dnZ3e09NT7TBEREQqwsweHa0jr1Lu4v6Ima0xswEz22pm28xs68SHKSIiIlmlXIP+JvABd3+23MGIiIhIRinXoF9XchYREamsUlrQPWb2M+CXZG4WA8Dd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CdrMrge6gXlm9rKZfaZcywJob28nFAqNer14cHCQlpYWWlpaRsq0trbudIo3e5qytbV11GkKzTcUCtHe3l72+POXkz9Nfn3C4TBmNtJCDoVCO70vVN+xljGeuEqZZrLK1rWpqWmXywWwYx1HIpEpU+dKqaf9SEpXT/tFOe/iPt3d3+Luje5+gLtfXa5lQaal29XVRSqVYmBggKGhIdydoaEhBgYGSKVSHHvssRx77LEjZQAOOOAAUqkU27ZtI5VK8da3vhVg1GkKzberq2uPb+cvJf785eRPk1+f4eFh3v72tzM8PMy2bdtwd97xjneMvC9U37GWMZ64yrXOakG2rpA5g5FKpUgkEgwNDY383CN7hmKq1LlS6mk/ktLV035Rtt9Bj8eedlQCe9aTWLanranSk1h+z2GjvVdPYnsuW9c1a9awadMmEokEzc3N6klsAtTTfiSlmyr7RVU6KhmPiUjQIiIik0VVOioRERGR8VOCFhERqUFK0CIiIjVICVpERKrKzLjwwgtH3l922WVccsklAFx55ZX86Ec/mrBlHX300RM2r3JTghYRkaqKRCLcfPPNbNiwYZdxn/vc5zjzzDP3eBnZLpsfeOCBPZ5XpShBi4hIVYXDYc477zz+4z/+Y5dxl1xyCZdddhkAjzzyCIsWLaKrq4svfelLHHZY5knG6XSaL33pSxx55JEsWrSI73//+wCsXLmSE044gTPOOIOFCxcCsNdeewGwfft2li9fztKlS1m4cCG/+tWvKlHV3VK8x3EREZEK+PznP8+iRYv48pe/PGqZs88+mxUrVnD00Ufzla98ZWT41VdfTWtrK4888gjJZJJjjjmGE088EYCHH36Yp556apeuP5uamvjFL35BS0sLGzZsYNmyZZx66qmYWXkqOA5K0CIiUnUtLS2ceeaZXHHFFQU7GtmyZQvbtm0buYZ8xhlncOuttwJwxx138MQTT3DjjTcCmZ4R16xZw7Rp0zjqqKMK9svt7nz1q19l9erVNDQ08Morr/D6668zZ86cMtZy9yhBi4hITfjiF7/I0qVLOfvss3cZV6xTLXfnO9/5DieddNJOw1euXMn06dMLTnPdddfR39/Po48+SmNjI3Pnzh21f+9q0TVoERGpCbNmzeLjH/84V1+966MbZs6cyd57782DDz4IwE9/+tORcSeddBLf+973Rp4o99xz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","text/plain":[""]},"metadata":{"needs_background":"light"},"output_type":"display_data"}],"source":["# Run this cell without changes\n","\n","# Set up figure\n","fig, ax = plt.subplots(figsize=(8, 5))\n","\n","# Basic scatter plot\n","ax.scatter(x=populations, y=wins, color=\"gray\", alpha=0.5, s=100)\n","ax.set_xlabel(\"2018 Population\")\n","ax.set_ylabel(\"2018 World Cup Wins\")\n","ax.set_title(\"Population vs. World Cup Wins\")\n","\n","# Add annotations for specific points of interest\n","highlighted_points = {\n"," \"Belgium\": 2, # Numbers are the index of that\n"," \"Brazil\": 3, # country in populations & wins\n"," \"France\": 10,\n"," \"Nigeria\": 17,\n","}\n","for country, index in highlighted_points.items():\n"," # Get x and y position of data point\n"," x = populations[index]\n"," y = wins[index]\n"," # Move each point slightly down and to the left\n"," # (numbers were chosen by manually tweaking)\n"," xtext = x - (1.25e6 * len(country))\n"," ytext = y - 0.5\n"," # Annotate with relevant arguments\n"," ax.annotate(text=country, xy=(x, y), xytext=(xtext, ytext))"]},{"cell_type":"markdown","metadata":{},"source":["### Data Visualization Interpretation\n","\n","Interpret this plot in the cell below. Does this align with the findings from the statistical measure (correlation), as well as the map shown at the beginning of this lab (showing the best results by country)?"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# Replace None with appropriate text\n","\"\"\"\n","yes #None\n","\"\"\""]},{"cell_type":"markdown","metadata":{},"source":["### Final Analysis\n","\n","> What is the relationship between the population of a country and their performance in the 2018 FIFA World Cup?\n","\n","Overall, we found a very weakly positive relationship between the population of a country and their performance in the 2018 FIFA World Cup, as demonstrated by both the correlation between populations and wins, and the scatter plot.\n","\n","In the cell below, write down your thoughts on these questions:\n","\n"," - What are your thoughts on why you may see this result?\n"," - What would you research next?"]},{"cell_type":"code","execution_count":null,"metadata":{},"outputs":[],"source":["# Replace None with appropriate text\n","\"\"\"\n","None\n","\"\"\""]},{"cell_type":"markdown","metadata":{},"source":["## Summary\n","\n","That was a long lab, pulling together a lot of material. You read data into Python, extracted the relevant information, cleaned the data, and combined the data into a new format to be used in analysis. While we will continue to introduce new tools and techniques, these essential steps will be present for the rest of your data science projects from here on out."]}],"metadata":{"kernelspec":{"display_name":"learn-env","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.5"}},"nbformat":4,"nbformat_minor":4}