MGT 4110 Python Final Project To demonstrate your ability to use Python and construct a program with more complexity than a typical homework assignment, you are being tasked with the following...

1 answer below »
I need this project done in python


MGT 4110 Python Final Project To demonstrate your ability to use Python and construct a program with more complexity than a typical homework assignment, you are being tasked with the following project. This project is typical of the type of assignment you might be given in a business analytics career. You will gather data, run an analysis and create a summary of the results. However, in this project, you will do all these steps using Python. Overview The objective of this project is to create a script that will take as input 5 stock ticker symbols, download the price data for these stocks and run an analysis on each of them. For each stock, you will calculate the percentage return you would have achieved had you invested money in the stock 1 year ago, 6 months, 3 months ago and 1 month. These are often referred to as the 1 year, 6 month, 3 month and 1 month returns. For each stock, also plot the price over the previous year. As a summary, print all the returns for each stock and time period. You will submit to me a Jupyter Notebook that accomplishes all these tasks by 11:59 PM Saturday, November 6th. More details on accomplishing these tasks follow. Data Gathering Your program will use API access to Alpha Vantage to automatically download stock data from the internet. In your project file, create a single cell that assigns one variable called stock_tickers. This variable may be a list or dictionary, e.g. or These tickers will be changed, your program must be able to run with up to five tickers from any publicly traded company. The free API limits you to 5 calls per minute, so we will never use more than five tickers in class. However, in the corporate world, you would pay for API access and you would want be able to analyze more than five stocks at a time. For this reason, you must use a loop to download data for each stock in this list. You may save your data to a file or analyze it directly in Python. Stock Analysis For each stock in the stock_tickers list (or dictionary), you will print the 1 year, 6 month, 3 month and 1 month returns (as a percentage) and display the 1 year price chart, e.g. Your results need not look exactly like this but should be neat and organized. Clean code and clean presentation will be considered in the grading process. Remember, good tables and figures have good labels. This analysis will be shown for each stock and like the data gathering process, must be completed in a loop so that the number of stocks analyzed could be increased and the code still function. Summary of Results At the end of your analysis, print a summary table of the returns for all stocks and time periods e.g. You could also present table information as a pandas DataFrame instead of using a formatted print statement. Bonus: Summarize Best Returns For bonus points, summarize which stocks returned the most over each time frame e.g.
Answered 3 days AfterNov 05, 2021

Answer To: MGT 4110 Python Final Project To demonstrate your ability to use Python and construct a program with...

Sandeep Kumar answered on Nov 06 2021
135 Votes
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Requirement already satisfied: alpha_vantage in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (2.3.1)\n",
"Requirement already satisfied: requests in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from alpha_vantage) (2.21.0)\n",
"Requirement already satisfied: aiohttp in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from alpha_vantage) (3.8.0)\n",
"Requirement already satisfied: attrs>=17.3.0 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (20.3.0)\n",
"Requirement already satisfied: frozenlist>=1.1.1 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (1.2.0)\n",
"Requirement already satisfied: aiosignal>=1.1.2 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (1.2.0)\n",
"Requirement already satisfied: yarl<2.0,>=1.0 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (1.7.2)\n",
"Requirement already satisfied: charset-normalizer<3.0,>=2.0 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (2.0.7)\n",
"Requirement already satisfied: multidict<7.0,>=4.5 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (5.2.0)\n",
"Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from aiohttp->alpha_vantage) (4.0.0)\n",
"Requirement already satisfied: typing-extensions>=3.6.5 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from async-timeout<5.0,>=4.0.0a3->aiohttp->alpha_vantage) (3.7.4.3)\n",
"Requirement already satisfied: idna>=2.0 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from yarl<2.0,>=1.0->aiohttp->alpha_vantage) (2.8)\n",
"Requirement already satisfied: urllib3<1.25,>=1.21.1 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->alpha_vantage) (1.24.3)\n",
"Requirement already satisfied: certifi>=2017.4.17 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->alpha_vantage) (2020.12.5)\n",
"Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\lib\\site-packages (from requests->alpha_vantage) (3.0.4)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"WARNING: You are using pip version 21.0.1; however, version 21.3.1 is available.\n",
"You should consider upgrading via the 'c:\\users\\nax\\appdata\\local\\programs\\python\\python39\\python.exe -m pip install --upgrade pip' command.\n"
]
}
],
"source": [
"!pip install alpha_vantage\n",
"\n",
"import alpha_vantage\n",
"import requests\n",
"import numpy as np\n",
"import pandas as pd\n",
"import json as js\n",
"import matplotlib.pyplot as plt\n",
"from matplotlib.ticker import MaxNLocator"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def fetch_symbol(stock):\n",
" return requests.get(api_root + api_series + stock + api, stream=False).json()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"sou
rce": [
"def company_symbol():\n",
" try:\n",
" stc = ''\n",
" while not stc:\n",
" stc = input(\"What stock would you like to view? \")\n",
" stc = stc.upper()\n",
" stock = fetch_symbol(stc)\n",
" if len(stc) == 0:\n",
" print(\"Please enter a symbol.\")\n",
" except requests.exceptions.ConnectionError:\n",
" print(\"Couldn't connect to server! Please check the network?\")\n",
" return stock, stc"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def series():\n",
" \"\"\"This function promts the user for the desired\n",
" time series. Day, week, month, etc\"\"\"\n",
" while True:\n",
" t_type = input('Please enter time series you would like to see. ' \\\n",
" 'Daily[1], Weekly[2], Monthly[3]: ')\n",
" if t_type == '1':\n",
" t_type = 'Time Series (Daily)'\n",
" return t_type\n",
" elif t_type == '2':\n",
" t_type = 'Weekly Time Series'\n",
" return t_type\n",
" elif t_type == '3':\n",
" t_type = 'Monthly Time Series'\n",
" return t_type\n",
" else:\n",
" print('Error')\n",
" print(t_type)\n",
" continue\n",
" return t_type"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def time_series(t_series):\n",
" \"\"\"The time_series function takes the selected time series and return\n",
" the correct format for the url to retrive the symbol time series\"\"\"\n",
" #try except block here \n",
" if t_series == 'Time Series (Daily)':\n",
" api_series = '/query?function=TIME_SERIES_DAILY&symbol='\n",
" return api_series\n",
" elif t_series == 'Weekly Time Series':\n",
" api_series = '/query?function=TIME_SERIES_WEEKLY&symbol='\n",
" return api_series\n",
" elif t_series == 'Monthly Time Series':\n",
" api_series = '/query?function=TIME_SERIES_MONTHLY&symbol='\n",
" return api_series\n",
" else:\n",
" print('Error')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"t_series = series()\n",
"api_root = 'https://www.alphavantage.co'\n",
"api_series = time_series(t_series)\n",
"api = '&apikey=QZBPQQGVJDILUMS4'\n",
"\n",
"#api = '&apikey=EKFVA2O5LEO3WL88'\n",
"fhand, stc = company_symbol()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def createDframe(fhand):\n",
" \"\"\"This function finds the date and price for the selected stock\n",
" and creates and returns the dataframe\"\"\"\n",
" lst = []\n",
" for key, values in fhand.items():\n",
" if key == t_series:\n",
" for date, sinfo in values.items():\n",
" #Finds the date and values for stock\n",
" for cols, nums in sinfo.items():\n",
" #finds the closing price\n",
" if cols == '4. close':\n",
" #create list for date and price key values\n",
" lst.append([date,nums]) \n",
" df = pd.DataFrame(lst,columns=['Date','Price'])\n",
" df.sort_index(ascending=False, inplace=True)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
DatePrice
992018-12-101.2000
982018-12-111.1800
972018-12-121.1400
962018-12-131.1300
952018-12-141.1300
\n",
"
"
],
"text/plain": [
" Date Price\n",
"99 2018-12-10 1.2000\n",
"98 2018-12-11 1.1800\n",
"97 2018-12-12 1.1400\n",
"96 2018-12-13 1.1300\n",
"95 2018-12-14 1.1300"
]
},
"execution_count": 104,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"createDframe(fhand).head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def createDframe2(fhand):\n",
" \"\"\"This function finds the date and volume for the selected stock\n",
" and creates and returns the dataframe\"\"\"\n",
" lst = []\n",
" for key, values in fhand.items():\n",
" if key == t_series:\n",
" for date, sinfo in values.items():\n",
" #Finds the date and values for stock\n",
" for cols, vol in sinfo.items():\n",
" #finds the volume\n",
" if cols == '5. volume':\n",
" #create list for date and volume key values\n",
" lst.append([date,vol])\n",
" \n",
"\n",
" df = pd.DataFrame(lst,columns=['Date','Volume'])\n",
" df.sort_index(ascending=False, inplace=True)\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
DateVolume
992018-12-104341718
982018-12-112381355
972018-12-124513631
962018-12-131554453
952018-12-141693598
\n",
"
"
],
"text/plain": [
" Date Volume\n",
"99 2018-12-10 4341718\n",
"98 2018-12-11 2381355\n",
"97 2018-12-12 4513631\n",
"96 2018-12-13 1554453\n",
"95 2018-12-14 1693598"
]
},
"execution_count": 106,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"createDframe2(fhand).head()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"application/javascript": "/* Put everything inside the global mpl namespace */\nwindow.mpl = {};\n\n\nmpl.get_websocket_type = function() {\n if (typeof(WebSocket) !== 'undefined') {\n return WebSocket;\n } else if (typeof(MozWebSocket) !== 'undefined') {\n return MozWebSocket;\n } else {\n alert('Your browser does not have WebSocket support.' +\n 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n 'Firefox 4 and 5 are also supported but you ' +\n 'have to enable WebSockets in about:config.');\n };\n}\n\nmpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n this.id = figure_id;\n\n this.ws = websocket;\n\n this.supports_binary = (this.ws.binaryType != undefined);\n\n if (!this.supports_binary) {\n var warnings = document.getElementById(\"mpl-warnings\");\n if (warnings) {\n warnings.style.display = 'block';\n warnings.textContent = (\n \"This browser does not support binary websocket messages. \" +\n \"Performance may be slow.\");\n }\n }\n\n this.imageObj = new Image();\n\n this.context = undefined;\n this.message = undefined;\n this.canvas = undefined;\n this.rubberband_canvas = undefined;\n this.rubberband_context = undefined;\n this.format_dropdown = undefined;\n\n this.image_mode = 'full';\n\n this.root = $('
');\n this._root_extra_style(this.root)\n this.root.attr('style', 'display: inline-block');\n\n $(parent_element).append(this.root);\n\n this._init_header(this);\n this._init_canvas(this);\n this._init_toolbar(this);\n\n var fig = this;\n\n this.waiting = false;\n\n this.ws.onopen = function () {\n fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n fig.send_message(\"send_image_mode\", {});\n if (mpl.ratio != 1) {\n fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n }\n fig.send_message(\"refresh\", {});\n }\n\n this.imageObj.onload = function() {\n if (fig.image_mode == 'full') {\n // Full images could contain transparency (where diff images\n // almost always do), so we need to clear the canvas so that\n // there is no ghosting.\n fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n }\n fig.context.drawImage(fig.imageObj, 0, 0);\n };\n\n this.imageObj.onunload = function() {\n fig.ws.close();\n }\n\n this.ws.onmessage = this._make_on_message_function(this);\n\n this.ondownload = ondownload;\n}\n\nmpl.figure.prototype._init_header = function() {\n var titlebar = $(\n '
');\n var titletext = $(\n '
');\n titlebar.append(titletext)\n this.root.append(titlebar);\n this.header = titletext[0];\n}\n\n\n\nmpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n\n}\n\n\nmpl.figure.prototype._root_extra_style = function(canvas_div) {\n\n}\n\nmpl.figure.prototype._init_canvas = function() {\n var fig = this;\n\n var canvas_div = $('
');\n\n canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n\n function canvas_keyboard_event(event) {\n return fig.key_event(event, event['data']);\n }\n\n canvas_div.keydown('key_press', canvas_keyboard_event);\n canvas_div.keyup('key_release', canvas_keyboard_event);\n this.canvas_div = canvas_div\n this._canvas_extra_style(canvas_div)\n this.root.append(canvas_div);\n\n var canvas = $('');\n canvas.addClass('mpl-canvas');\n canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n\n this.canvas = canvas[0];\n this.context = canvas[0].getContext(\"2d\");\n\n var backingStore = this.context.backingStorePixelRatio ||\n\tthis.context.webkitBackingStorePixelRatio ||\n\tthis.context.mozBackingStorePixelRatio ||\n\tthis.context.msBackingStorePixelRatio ||\n\tthis.context.oBackingStorePixelRatio ||\n\tthis.context.backingStorePixelRatio || 1;\n\n mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n\n var rubberband = $('');\n rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n\n var pass_mouse_events = true;\n\n canvas_div.resizable({\n start: function(event, ui) {\n pass_mouse_events = false;\n },\n resize: function(event, ui) {\n fig.request_resize(ui.size.width, ui.size.height);\n },\n stop: function(event, ui) {\n pass_mouse_events = true;\n fig.request_resize(ui.size.width, ui.size.height);\n },\n });\n\n function mouse_event_fn(event) {\n if (pass_mouse_events)\n return fig.mouse_event(event, event['data']);\n }\n\n rubberband.mousedown('button_press', mouse_event_fn);\n rubberband.mouseup('button_release', mouse_event_fn);\n // Throttle sequential mouse events to 1 every 20ms.\n rubberband.mousemove('motion_notify', mouse_event_fn);\n\n rubberband.mouseenter('figure_enter', mouse_event_fn);\n rubberband.mouseleave('figure_leave', mouse_event_fn);\n\n canvas_div.on(\"wheel\", function (event) {\n event = event.originalEvent;\n event['data'] = 'scroll'\n if (event.deltaY < 0) {\n event.step = 1;\n } else {\n event.step = -1;\n }\n mouse_event_fn(event);\n });\n\n canvas_div.append(canvas);\n canvas_div.append(rubberband);\n\n this.rubberband = rubberband;\n this.rubberband_canvas = rubberband[0];\n this.rubberband_context = rubberband[0].getContext(\"2d\");\n this.rubberband_context.strokeStyle = \"#000000\";\n\n this._resize_canvas = function(width, height) {\n // Keep the size of the canvas, canvas container, and rubber band\n // canvas in synch.\n canvas_div.css('width', width)\n canvas_div.css('height', height)\n\n canvas.attr('width', width * mpl.ratio);\n canvas.attr('height', height * mpl.ratio);\n canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n\n rubberband.attr('width', width);\n rubberband.attr('height', height);\n }\n\n // Set the figure to an initial 600x600px, this will subsequently be updated\n // upon first draw.\n this._resize_canvas(600, 600);\n\n // Disable right mouse context menu.\n $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n return false;\n });\n\n function set_focus () {\n canvas.focus();\n canvas_div.focus();\n }\n\n window.setTimeout(set_focus, 100);\n}\n\nmpl.figure.prototype._init_toolbar = function() {\n var fig = this;\n\n var nav_element = $('
')\n nav_element.attr('style', 'width: 100%');\n this.root.append(nav_element);\n\n // Define a callback function for later on.\n function toolbar_event(event) {\n return fig.toolbar_button_onclick(event['data']);\n }\n function toolbar_mouse_event(event) {\n return fig.toolbar_button_onmouseover(event['data']);\n }\n\n for(var toolbar_ind in mpl.toolbar_items) {\n var name = mpl.toolbar_items[toolbar_ind][0];\n var tooltip = mpl.toolbar_items[toolbar_ind][1];\n var image = mpl.toolbar_items[toolbar_ind][2];\n var method_name = mpl.toolbar_items[toolbar_ind][3];\n\n if (!name) {\n // put a spacer in here.\n continue;\n }\n var button = $('
Copy and Paste Your Assignment Here