Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save PeterKjeldsen/55651fbde839d1c72b7e9da907b18a1a to your computer and use it in GitHub Desktop.
Save PeterKjeldsen/55651fbde839d1c72b7e9da907b18a1a to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "<center>\n <img src=\"https://gitlab.com/ibm/skills-network/courses/placeholder101/-/raw/master/labs/module%201/images/IDSNlogo.png\" width=\"300\" alt=\"cognitiveclass.ai logo\" />\n</center>\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# **Collecting Job Data Using APIs**\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Estimated time needed: **45 to 60** minutes\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Objectives\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "After completing this lab, you will be able to:\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "- Collect job data from GitHub Jobs API\n- Store the collected data into an excel spreadsheet. \n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Warm-Up Exercise\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Before you attempt the actual lab, here is a fully solved warmup exercise that will help you to learn how to access an API.\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Using an API, let us find out who currently are on the International Space Station (ISS).<br> The API at [http://api.open-notify.org/astros.json](http://api.open-notify.org/astros.json?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ) gives us the information of astronauts currently on ISS in json format.<br>\nYou can read more about this API at [http://open-notify.org/Open-Notify-API/People-In-Space/](http://open-notify.org/Open-Notify-API/People-In-Space?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ)\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "import requests # you need this module to make an API call",
"execution_count": 1,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "api_url = \"http://api.open-notify.org/astros.json\" # this url gives use the astronaut data",
"execution_count": 2,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "response = requests.get(api_url) # Call the API using the get method and store the\n # output of the API call in a variable called response.",
"execution_count": 3,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "if response.ok: # if all is well() no errors, no network timeouts)\n data = response.json() # store the result in json format in a variable called data\n # the variable data is of type dictionary.",
"execution_count": 4,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "print(data) # print the data just to check the output or for debugging",
"execution_count": 5,
"outputs": [
{
"output_type": "stream",
"text": "{'message': 'success', 'number': 7, 'people': [{'craft': 'ISS', 'name': 'Sergey Ryzhikov'}, {'craft': 'ISS', 'name': 'Kate Rubins'}, {'craft': 'ISS', 'name': 'Sergey Kud-Sverchkov'}, {'craft': 'ISS', 'name': 'Mike Hopkins'}, {'craft': 'ISS', 'name': 'Victor Glover'}, {'craft': 'ISS', 'name': 'Shannon Walker'}, {'craft': 'ISS', 'name': 'Soichi Noguchi'}]}\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Print the number of astronauts currently on ISS.\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "print(data.get('number'))",
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"text": "7\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Print the names of the astronauts currently on ISS.\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "astronauts = data.get('people')\nprint(\"There are {} astronauts on ISS\".format(len(astronauts)))\nprint(\"And their names are :\")\nfor astronaut in astronauts:\n print(astronaut.get('name'))",
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"text": "There are 7 astronauts on ISS\nAnd their names are :\nSergey Ryzhikov\nKate Rubins\nSergey Kud-Sverchkov\nMike Hopkins\nVictor Glover\nShannon Walker\nSoichi Noguchi\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Hope the warmup was helpful. Good luck with your next lab!\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Lab: Collect Jobs Data using GitHub Jobs API\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Before you start doing this lab, get familier with the GitHub Jobs API.<br>\nThe documentation for the GitHub Jobs API can be found at <https://jobs.github.com/api><br>\n\n<li>Understand what urls to use.<br>\n<li>Understand what parameters have to be passed.<br>\n<li>Understand the format of the output data.</li>\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Objective: Determine the number of jobs currently open for various technologies\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Collect the number of job postings for the following languages using the API:\n\n- C\n- C#\n- C++\n- Java\n- JavaScript\n- Python\n- Scala\n- Oracle\n- SQL Server\n- MySQL Server\n- PostgreSQL\n- MongoDB\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "#Import required libraries\nimport requests",
"execution_count": 8,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "baseurl = \"https://jobs.github.com/positions.json\"",
"execution_count": 9,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Write a function to get the number of jobs for the given technology.<br>\n_Note:_ The API gives a maximum of 50 jobs per page.<br>\nIf you get 50 jobs per page, it means there could be some more job listings available.<br>\nSo if you get 50 jobs per page you should make another API call for next page to check for more jobs.<br>\nIf you get less than 50 jobs per page, you can take it as the final count.<br>\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "response = requests.get(baseurl)\nif response.ok: # if all is well() no errors, no network timeouts)\n data = response.json()",
"execution_count": 10,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "#print(data) # print the data just to check the output or for debugging #Disabled before printout",
"execution_count": 11,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "#Function to get the number of jobs for the given technology\ndef get_number_of_jobs(technology):\n number_of_jobs = 0\n #your code goes here\n pa=0\n param = {'description' : technology,'page' : pa}\n r=requests.get(baseurl, param)\n number_of_jobs = len(r.json())\n while len(r.json()) == 50:\n pa += 1\n param = {'description' : technology,'page' : pa}\n r = requests.get(baseurl, param)\n number_of_jobs = number_of_jobs + len(r.json())\n return technology,number_of_jobs\n",
"execution_count": 12,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Call the function for Python and check if it is working.\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "print (get_number_of_jobs('Python'))",
"execution_count": 14,
"outputs": [
{
"output_type": "stream",
"text": "('Python', 118)\n",
"name": "stdout"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Store the results in an excel file\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Call the API for all the given technologies above and write the results in an excel spreadsheet.\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "If you do not know how create excel file using python, double click here for **hints**.\n\n<!--\n# import Workbook class from module openpyxl\nwb=Workbook() # create a workbook object\nws=wb.active # use the active worksheet\nws.append(['Country','Continent']) # add a row with two columns 'Country' and 'Continent'\nws.append(['Eygpt','Africa']) # add a row with two columns 'Egypt' and 'Africa'\nws.append(['India','Asia']) # add another row\nws.append(['France','Europe']) # add another row\nwb.save(\"countries.xlsx\") # save the workbook into a file called countries.xlsx\n\n\n-->\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Create a python list of all technologies for which you need to find the number of jobs postings.\n"
},
{
"metadata": {
"scrolled": true
},
"cell_type": "code",
"source": "#your code goes here\ntechno_list = ['C', 'C#', 'C++', 'Java', 'JavaScript', 'Python', 'Scala', 'Oracle', 'SQL Server', 'MySQL Server', 'PostgreSQL', 'MongoDB']\ntechno_list",
"execution_count": 15,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 15,
"data": {
"text/plain": "['C',\n 'C#',\n 'C++',\n 'Java',\n 'JavaScript',\n 'Python',\n 'Scala',\n 'Oracle',\n 'SQL Server',\n 'MySQL Server',\n 'PostgreSQL',\n 'MongoDB']"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Import libraries required to create excel spreadsheet\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "# your code goes here\n!pip install openpyxl\n",
"execution_count": null,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Create a workbook and select the active worksheet\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "# your code goes here\nimport openpyxl\nwb=0\nwb=openpyxl.Workbook() \nws=wb.active",
"execution_count": 39,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Find the number of jobs postings for each of the technology in the above list.\nWrite the technology name and the number of jobs postings into the excel spreadsheet.\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "#your code goes here\nfor i in techno_list:\n jobs=get_number_of_jobs(i)\n ws.append(jobs)",
"execution_count": 40,
"outputs": []
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Save into an excel spreadsheet named 'github-job-postings.xlsx'.\n"
},
{
"metadata": {},
"cell_type": "code",
"source": "#your code goes here\nwb.save(\"github-job-postings.xlsx\")",
"execution_count": 41,
"outputs": []
},
{
"metadata": {},
"cell_type": "code",
"source": "import os\nimport pandas as pd\nfilename=\"/home/wsuser/work/github-job-postings.xlsx\"\ndf=pd.read_excel(filename)\ndf.columns = [\"Technologies\", \"Postings\"]\ndf2=df.sort_values('Postings', ascending=False)\ndf2.head(10)",
"execution_count": 56,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 56,
"data": {
"text/plain": " Technologies Postings\n2 Java 187\n3 JavaScript 153\n4 Python 118\n5 Scala 106\n7 SQL Server 45\n0 C# 32\n8 MySQL Server 20\n1 C++ 19\n9 PostgreSQL 19\n6 Oracle 12",
"text/html": "<div>\n<style scoped>\n .dataframe tbody tr th:only-of-type {\n vertical-align: middle;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n\n .dataframe thead th {\n text-align: right;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Technologies</th>\n <th>Postings</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>2</th>\n <td>Java</td>\n <td>187</td>\n </tr>\n <tr>\n <th>3</th>\n <td>JavaScript</td>\n <td>153</td>\n </tr>\n <tr>\n <th>4</th>\n <td>Python</td>\n <td>118</td>\n </tr>\n <tr>\n <th>5</th>\n <td>Scala</td>\n <td>106</td>\n </tr>\n <tr>\n <th>7</th>\n <td>SQL Server</td>\n <td>45</td>\n </tr>\n <tr>\n <th>0</th>\n <td>C#</td>\n <td>32</td>\n </tr>\n <tr>\n <th>8</th>\n <td>MySQL Server</td>\n <td>20</td>\n </tr>\n <tr>\n <th>1</th>\n <td>C++</td>\n <td>19</td>\n </tr>\n <tr>\n <th>9</th>\n <td>PostgreSQL</td>\n <td>19</td>\n </tr>\n <tr>\n <th>6</th>\n <td>Oracle</td>\n <td>12</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"metadata": {}
}
]
},
{
"metadata": {},
"cell_type": "code",
"source": "ax=df2.plot(kind = 'barh', x = \"Technologies\", y = \"Postings\", figsize=(8, 4), color = 'g' )\nax.set_title('Number of Job Postings for the Various Technologies')\n",
"execution_count": 62,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 62,
"data": {
"text/plain": "Text(0.5, 1.0, 'Number of Job Postings for the Various Technologies')"
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 576x288 with 1 Axes>",
"image/png": "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bTse2K6RsBpenTtExMbAJsB5knoXaMfYiKiNiFpKv6bMzKzK9ezZkylTpvDkk0+y9NJLc+GFFzZr+xkzZnDllVd+9r62trZiEhPooMlJciswhtwtnaRQClufhi7MlS0m6ylprZR3U+DpL+044kXgTWBgK+3HzMzsM9tuuy0vvPAC77zzDsOGDWPQoEFsueWWTJ06FYD77ruPmpoaampq2HTTTZk3bx4nnngiDzzwADU1NZx11llMnDiRPfbYA4DRo0dzxBFHsP3227P22mt/IWk59dRT2XDDDdlll1046KCDGDNmDADnnnsuAwcOZNCgQRx44IEtblNHva0D2a2cuRExTdL2ufL7geHAqan87Yh4v5EBOQ8Cf5X0R7LjsTtwUUTMlfSupG0j4gHgUOC+hhunWzc/AlYD/l5g+crAWkDRzxAwMzNbEosWLeKuu+5i1113ZdSoUWy66abcfPPN3HvvvXz3u99lypQpjBkzhvPPP5+tt96a+fPn06NHD0477TTGjBnD7bdnD7pOnDjxC/U+88wzTJgwgXnz5rHBBhvw/e9/nyeeeIIbbriBxx9/nEWLFjFkyBCGDh0KwGmnncbLL79M9+7dee+991rcrg6bnETETOCcAotGA+MkTQU+BA5rop7HJN0KPEGWQNQBc9Piw4ALJfUCXgIOz216hqRfA72Ah8lu43ycWz5B0mKgG3BiRLzZzCaamZkV9NFHH1FTkw2n3HbbbTnyyCPZYostuOGGGwDYcccdmTNnDnPnzmXrrbfm+OOPZ/jw4ey7776sscYaTda/++670717d7p3787KK6/Mm2++yYMPPsjee+9Nz57Zw7J77rnnZ+sPGjSI4cOHM2zYMIYNG9bi9nW45CQiCo3dmAhMTK/fAb40r0hEjG7wfuPc2zERMTolIfcD/5vWmQJsWaCuEU3EOKDRRhQwtN9Q6kb5U4nNzKxp9WNO8grN+C6JE088kd13350777yTLbfckn/+859N1t+9e/fPXnfp0oVFixYVrL/eHXfcwf3338+tt97KqaeeyvTp0+nadclTjI485qQ1jZU0heyJmxsiYnK5AzIzM2uO7bbbjiuuuALIbtP07duXZZddlhdffJFNNtmEX/ziF9TW1vLMM8/Qp08f5s2b16z6t9lmG2677TYWLFjA/PnzueOOOwD49NNPee2119hhhx04/fTT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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Authors\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Ramesh Sannareddy\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### Other Contributors\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "Rav Ahuja\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## Change Log\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "| Date (YYYY-MM-DD) | Version | Changed By | Change Description |\n| ----------------- | ------- | ----------------- | ---------------------------------- |\n| 2020-10-17 | 0.1 | Ramesh Sannareddy | Created initial version of the lab |\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": " Copyright \u00a9 2020 IBM Corporation. This notebook and its source code are released under the terms of the [MIT License](https://cognitiveclass.ai/mit-license?cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ&cm_mmc=Email_Newsletter-_-Developer_Ed%2BTech-_-WW_WW-_-SkillsNetwork-Courses-IBM-DA0321EN-SkillsNetwork-21426264&cm_mmca1=000026UJ&cm_mmca2=10006555&cm_mmca3=M12345678&cvosrc=email.Newsletter.M12345678&cvo_campaign=000026UJ).\n"
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3.7",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.7.10",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment