Created
March 29, 2021 18:16
-
-
Save PeterKjeldsen/55651fbde839d1c72b7e9da907b18a1a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"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