diff --git a/data_generation.ipynb b/data_generation.ipynb new file mode 100644 index 0000000..2b7c53d --- /dev/null +++ b/data_generation.ipynb @@ -0,0 +1,399 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "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", + " \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", + " \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", + " \n", + " \n", + " \n", + " \n", + "
RankNameSymbolmarketcapprice (USD)country
01AppleAAPL2613550252032160.15United States
12MicrosoftMSFT2075883208704276.90United States
23Alphabet (Google)GOOG16082367938562432.90United States
34AmazonAMZN14637493125122878.34United States
45TeslaTSLA1029417271296996.04United States
.....................
730731Jump NetworksJUMPNET.NS116693240.12India
731732CemtrexCETX108463380.44United States
732733Pareteum CorporationTEUM14269690.01United States
733734JustworksJW00.00United States
734735Rhodium EnterprisesRHDM00.00United States
\n", + "

735 rows × 6 columns

\n", + "
" + ], + "text/plain": [ + " Rank Name Symbol marketcap price (USD) \\\n", + "0 1 Apple AAPL 2613550252032 160.15 \n", + "1 2 Microsoft MSFT 2075883208704 276.90 \n", + "2 3 Alphabet (Google) GOOG 1608236793856 2432.90 \n", + "3 4 Amazon AMZN 1463749312512 2878.34 \n", + "4 5 Tesla TSLA 1029417271296 996.04 \n", + ".. ... ... ... ... ... \n", + "730 731 Jump Networks JUMPNET.NS 11669324 0.12 \n", + "731 732 Cemtrex CETX 10846338 0.44 \n", + "732 733 Pareteum Corporation TEUM 1426969 0.01 \n", + "733 734 Justworks JW 0 0.00 \n", + "734 735 Rhodium Enterprises RHDM 0 0.00 \n", + "\n", + " country \n", + "0 United States \n", + "1 United States \n", + "2 United States \n", + "3 United States \n", + "4 United States \n", + ".. ... \n", + "730 India \n", + "731 United States \n", + "732 United States \n", + "733 United States \n", + "734 United States \n", + "\n", + "[735 rows x 6 columns]" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "import yfinance as yf\n", + "import os\n", + "from tqdm import tqdm\n", + "\n", + "tech_sector = pd.read_csv(\"Data/tech_sector.csv\")\n", + "tech_sector" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'c:\\\\Users\\\\brian\\\\projects\\\\factor_models\\\\Data/Raw'" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "parent_dir = os.path.join(os.getcwd() , \"Data/Raw\")\n", + "parent_dir" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 36%|███▌ | 263/735 [50:34<1:29:50, 11.42s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- TIXT: CircuitBreaker 'redis' is OPEN and does not permit further calls\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 65%|██████▌ | 479/735 [1:31:30<50:07, 11.75s/it] " + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- 112040.KQ: No data found for this date range, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 84%|████████▍ | 621/735 [1:58:49<22:47, 12.00s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- CSLT: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 86%|████████▌ | 631/735 [1:59:37<08:25, 4.86s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- CSPR: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 91%|█████████ | 668/735 [2:02:28<05:09, 4.62s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- TRIT: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 99%|█████████▉| 730/735 [2:07:05<00:21, 4.31s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- JUMPNET.NS: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████████▉| 733/735 [2:07:19<00:09, 4.56s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- JW: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████████▉| 734/735 [2:07:25<00:04, 4.87s/it]" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- RHDM: No data found, symbol may be delisted\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 735/735 [2:07:31<00:00, 10.41s/it]\n" + ] + } + ], + "source": [ + "#grab the stock off of yahoo\n", + "for index, row in tqdm(tech_sector.iterrows(), total=len(tech_sector)):\n", + " stock = yf.Ticker(row[\"Symbol\"])\n", + "\n", + " #get the stocks return history\n", + " path = os.path.join(parent_dir, row[\"Symbol\"])\n", + " if not(os.path.isdir(path)):\n", + " os.mkdir(path)\n", + "\n", + " #put the data regarding the stock into this folder\n", + " stock_prices = stock.history(period=\"max\")\n", + " stock_prices.to_csv(path + \"/stock_prices.csv\")\n", + "\n", + " #put the fundemental data into the folder\n", + " stock_balance_sheet = stock.quarterly_balance_sheet\n", + " stock_balance_sheet.to_csv(path + \"/stock_balance_sheet.csv\")\n", + "\n", + " stock_sustainability = stock.sustainability\n", + " \n", + " if stock_sustainability is not None:\n", + " stock_sustainability.to_csv(path + \"/sustainability.csv\")\n", + "\n", + " stock_finacials = stock.quarterly_financials\n", + " stock_finacials.to_csv(path + \"/financials.csv\")\n", + "\n", + " stock_cashflow = stock.quarterly_cashflow\n", + " stock_cashflow.to_csv(path + \"/cashflow.csv\")\n", + "\n", + " stock_earning = stock.quarterly_earnings\n", + " stock_earning.to_csv(path + \"/earnings.csv\")\n", + "\n", + " stock_basicinfo = stock.info.items()\n", + " stock_basicinfo = list(stock_basicinfo)\n", + " stock_basic_df = pd.DataFrame(stock_basicinfo)\n", + " stock_basic_df = stock_basic_df.rename(columns={0: \"info\", 1: \"value\"})\n", + " stock_basic_df.to_csv(path + \"/basic_info.csv\")" + ] + } + ], + "metadata": { + "interpreter": { + "hash": "d2feefea56b0213a6ec2bb54630eea72d1e2849cc5d96656889c1540b99c0617" + }, + "kernelspec": { + "display_name": "Python 3.9.8 ('venv_for_ml': venv)", + "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.9.8" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/data_processing.ipynb b/data_processing.ipynb index 2e59d87..18bbf35 100644 --- a/data_processing.ipynb +++ b/data_processing.ipynb @@ -1,249 +1,142 @@ { "cells": [ { - "cell_type": "code", - "execution_count": 10, + "cell_type": "markdown", "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", - " \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", - " \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", - " \n", - " \n", - " \n", - " \n", - "
RankNameSymbolmarketcapprice (USD)country
01AppleAAPL2613550252032160.15United States
12MicrosoftMSFT2075883208704276.90United States
23Alphabet (Google)GOOG16082367938562432.90United States
34AmazonAMZN14637493125122878.34United States
45TeslaTSLA1029417271296996.04United States
.....................
730731Jump NetworksJUMPNET.NS116693240.12India
731732CemtrexCETX108463380.44United States
732733Pareteum CorporationTEUM14269690.01United States
733734JustworksJW00.00United States
734735Rhodium EnterprisesRHDM00.00United States
\n", - "

735 rows × 6 columns

\n", - "
" - ], - "text/plain": [ - " Rank Name Symbol marketcap price (USD) \\\n", - "0 1 Apple AAPL 2613550252032 160.15 \n", - "1 2 Microsoft MSFT 2075883208704 276.90 \n", - "2 3 Alphabet (Google) GOOG 1608236793856 2432.90 \n", - "3 4 Amazon AMZN 1463749312512 2878.34 \n", - "4 5 Tesla TSLA 1029417271296 996.04 \n", - ".. ... ... ... ... ... \n", - "730 731 Jump Networks JUMPNET.NS 11669324 0.12 \n", - "731 732 Cemtrex CETX 10846338 0.44 \n", - "732 733 Pareteum Corporation TEUM 1426969 0.01 \n", - "733 734 Justworks JW 0 0.00 \n", - "734 735 Rhodium Enterprises RHDM 0 0.00 \n", - "\n", - " country \n", - "0 United States \n", - "1 United States \n", - "2 United States \n", - "3 United States \n", - "4 United States \n", - ".. ... \n", - "730 India \n", - "731 United States \n", - "732 United States \n", - "733 United States \n", - "734 United States \n", - "\n", - "[735 rows x 6 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "import pandas as pd\n", - "import numpy as np\n", - "import yfinance as yf\n", - "import os\n", - "\n", - "tech_sector = pd.read_csv(\"Data/tech_sector.csv\")\n", - "tech_sector" + "In Approach one, we will process the data using a ratio rather than the usual normalization. For example we will take all the cashflow values as a ratio to net income, and all the balance sheet values as a ratio to current assets. We can compare the performance between the two." ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 8, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "'c:\\\\Users\\\\brian\\\\projects\\\\factor_models\\\\Data'" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "Cash flow OOF 259960.KS\n", + "Cash flow OOF 259960.KS\n", + "Cash flow OOF 259960.KS\n", + "Cash flow OOF 259960.KS\n", + "Cash flow OOF 259960.KS\n", + "Cash flow OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "Balance SHEET OOF 259960.KS\n", + "RETURN OOF 259960.KS\n" + ] } ], "source": [ - "parent_dir = os.path.join(os.getcwd() , \"Data\")\n", - "parent_dir" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "#grab the stock off of yahoo\n", - "stock = yf.Ticker(tech_sector[\"Symbol\"].iloc[0])\n", + "import os\n", + "import pandas as pd\n", + "import dateutil.relativedelta\n", + "from datetime import datetime\n", + "\n", + "\n", + "parent_dir = os.path.join(os.getcwd() , \"Data/Raw\")\n", + "OLS_input = {}\n", + "#basic_info_check = [\"ebitdaMargins\" , \"profitMargins\" , \"grossMargins\", \"debtToEquity\", \"returnOnEquity\" ]\n", + "cashflow_info_check = [\"Change To Liabilities\", \"Total Cash From Operating Activities\", \"Net Borrowings\" , \"Total Cashflows From Investing Activities\" , \"Investments\", \"Net Income\"]\n", + "balance_sheet_info_check = [\"Total Liab\" , \"Total Assets\", \"Retained Earnings\", \"Cash\", \"Net Receivables\", \"Long Term Debt\", \"Short Long Term Debt\", \"Total Current Assets\"]\n", + "\n", + "for file in os.listdir(parent_dir):\n", + " path = os.path.join(parent_dir , file)\n", + " \n", + "\n", + " ### Get variables from Cash Flow Statement ###\n", + " cashflow_info = pd.read_csv(path + \"/cashflow.csv\")\n", + " balance_sheet = pd.read_csv(path + \"/stock_balance_sheet.csv\")\n", + " \n", + " if(cashflow_info.empty or balance_sheet.empty):\n", + " continue\n", + " \n", + "\n", + " if(len(cashflow_info.columns) != len(balance_sheet.columns)):\n", + " print(\"EEROROR\")\n", + " \n", + "\n", + " for info_item in cashflow_info_check:\n", + " \n", + " if(info_item in cashflow_info[\"Unnamed: 0\"].values):\n", + "\n", + " data = cashflow_info[cashflow_info[\"Unnamed: 0\"] == info_item].values[0][1::]\n", + " data = data.tolist()\n", + " if len(data) != 4:\n", + "\n", + " print(\"Cash flow OOF\" , file)\n", + " # data = transformer.transform(data.reshape(1, -1))\n", + " # data = data.tolist()\n", + "\n", + " else:\n", + " data = [None] * (len(balance_sheet.columns)-1)\n", + "\n", + " if info_item in OLS_input:\n", + "\n", + " OLS_input[info_item] += data\n", + " else:\n", + " OLS_input[info_item] = data\n", + "\n", + " ### Get variables from balance sheet ###\n", + "\n", "\n", - "#get the stocks return history\n", - "path = os.path.join(parent_dir, tech_sector[\"Symbol\"].iloc[0])\n", - "if not(os.path.isdir(path)):\n", - " os.mkdir(path)\n", "\n", - "#put the data regarding the stock into this folder\n", - "stock_prices = stock.history(period=\"max\")\n", - "stock_prices.to_csv(path + \"/stock_prices.csv\")\n", + " for info_item in balance_sheet_info_check:\n", + " if(info_item in balance_sheet[\"Unnamed: 0\"].values):\n", + " \n", + " data = balance_sheet[balance_sheet[\"Unnamed: 0\"] == info_item].values[0][1::]\n", + " data = data.tolist()\n", + " if len(data) != 4:\n", + " print(\"Balance SHEET OOF\", file)\n", + " # data = transformer.transform(data.reshape(1, -1))\n", + " # data = data.tolist() \n", + " else:\n", + " data = [None] * (len(balance_sheet.columns)-1)\n", "\n", - "#put the fundemental data into the folder\n", - "stock_balance_sheet = stock.quarterly_balance_sheet\n", - "stock_balance_sheet.to_csv(path + \"/stock_balance_sheet.csv\")\n", + " if info_item in OLS_input:\n", + " OLS_input[info_item] += data\n", + " else:\n", + " OLS_input[info_item] = data\n", + " \n", + " \n", + " ### Get the returns of the stock over the quater\n", + " \n", + " times = balance_sheet.columns.values[1::]\n", + " times = list(map(datetime.fromisoformat, times))\n", + " stock_price_history = pd.read_csv(path + \"/stock_prices.csv\")\n", + " stock_price_history[\"Date\"] = pd.to_datetime(stock_price_history[\"Date\"])\n", + " quarterly_returns = []\n", "\n", - "stock_sustainability = stock.sustainability\n", - "stock_sustainability.to_csv(path + \"/sustainability.csv\")\n", "\n", - "stock_finacials = stock.quarterly_financials\n", - "stock_finacials.to_csv(path + \"/sustainability.csv\")\n", + " for i in range(len(times)):\n", + " quarterly_data = pd.DataFrame()\n", + " quarterly_data = stock_price_history[(stock_price_history[\"Date\"] < times[i] ) & (stock_price_history[\"Date\"] > times[i] - dateutil.relativedelta.relativedelta(months=3))].reset_index(drop=True)\n", + " #calculate the net return in each quater\n", + " if not(quarterly_data.empty) :\n", + " total_ret = (quarterly_data.loc[len(quarterly_data)-1][\"Close\"] - quarterly_data.loc[0][\"Open\"])/quarterly_data.loc[0][\"Open\"]\n", + " quarterly_returns.append(total_ret)\n", + " else:\n", + " quarterly_returns.append(None)\n", + " \n", + " if len(quarterly_returns) != 4:\n", + " print(\"RETURN OOF\", file)\n", "\n", - "stock_cashflow = stock.cashflow\n", - "stock_cashflow.to_csv(path + \"/cashflow.csv\")\n", + " if \"Returns\" not in OLS_input:\n", + " OLS_input[\"Returns\"] = quarterly_returns\n", + " else:\n", + " OLS_input[\"Returns\"] += quarterly_returns\n", "\n", - "stock_earning = stock.earnings\n", - "stock_earning.to_csv(path + \"/earnings.csv\")\n", + " \n", + "for key , val in OLS_input.items():\n", + " print(key , len(val))\n", "\n", - "stock_basicinfo = stock.info.items()\n", - "stock_basicinfo = list(stock_basicinfo)\n", - "stock_basic_df = pd.DataFrame(stock_basicinfo)\n", - "stock_basic_df = stock_basic_df.rename(columns={0: \"info\", 1: \"value\"})\n", - "stock_basic_df.to_csv(path + \"/basic_info.csv\")" + "df = pd.DataFrame(OLS_input)\n", + "df.to_csv(os.path.join(os.getcwd() , \"Data\") + \"/Processed/linear_reg_data.csv\")" ] } ], diff --git a/factor_model.ipynb b/factor_model.ipynb new file mode 100644 index 0000000..34c8812 --- /dev/null +++ b/factor_model.ipynb @@ -0,0 +1,417 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 17, + "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", + " \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", + " \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", + " \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", + " \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", + " \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", + " \n", + "
Change To LiabilitiesTotal Cash From Operating ActivitiesNet BorrowingsTotal Cashflows From Investing ActivitiesInvestmentsNet IncomeTotal LiabTotal AssetsRetained EarningsCashNet ReceivablesLong Term DebtShort Long Term DebtTotal Current AssetsReturns
0-2.067230e+116.266689e+124.503500e+10-6.350965e+12-3.286883e+123.310823e+122.455460e+138.326905e+135.246040e+132.761977e+127.545234e+121.176780e+132.311561e+122.491050e+13-0.215686
1-1.101190e+114.549973e+121.655130e+11-3.484309e+12-2.414150e+111.984514e+122.283988e+137.771790e+134.915642e+132.666351e+126.522701e+121.153141e+132.167540e+122.009956e+13-0.070632
21.891400e+103.206762e+121.900472e+12-5.885210e+12-1.747571e+129.904470e+112.273942e+137.511801e+134.717885e+132.226144e+125.379719e+121.078574e+132.658938e+121.838488e+130.080321
33.116740e+113.261827e+12-5.049000e+10-2.979418e+12-4.332600e+101.766796e+121.926476e+137.117385e+134.699573e+132.975989e+125.241949e+128.199087e+122.934671e+121.657095e+130.427711
41.027017e+122.063545e+13-1.333413e+128.722370e+111.575785e+131.064379e+131.217212e+144.266212e+142.930648e+143.903142e+134.521067e+135.097320e+115.180650e+112.181632e+140.059540
................................................
467-1.901744e+092.682230e+104.167232e+09-1.333849e+101.799423e+091.594900e+101.832240e+114.644270e+111.082500e+111.326220e+113.519000e+103.983000e+103.733200e+102.332740e+110.029178
4683.073530e+082.212551e+106.475969e+09-2.322245e+10-6.018215e+091.746024e+101.711889e+114.287926e+111.002505e+111.131049e+113.437743e+105.108895e+102.212810e+102.116034e+110.246093
4693.097020e+082.312352e+106.037583e+09-1.848232e+10-1.060335e+101.194308e+101.814853e+114.216774e+118.236386e+101.240005e+113.162152e+105.096679e+101.426338e+102.078333e+110.065629
4701.284689e+091.828067e+102.195216e+09-7.119745e+09-1.668570e+081.042792e+101.445894e+113.942622e+119.034396e+101.072852e+113.101319e+102.770260e+103.212053e+101.790831e+110.081508
4820.000000e+006.830338e+09-1.701114e+09-6.440656e+09-8.117702e+098.268477e+091.603868e+112.964236e+116.696965e+103.188104e+104.557126e+101.326215e+106.051582e+092.003298e+110.092308
\n", + "

128 rows × 15 columns

\n", + "
" + ], + "text/plain": [ + " Change To Liabilities Total Cash From Operating Activities \\\n", + "0 -2.067230e+11 6.266689e+12 \n", + "1 -1.101190e+11 4.549973e+12 \n", + "2 1.891400e+10 3.206762e+12 \n", + "3 3.116740e+11 3.261827e+12 \n", + "4 1.027017e+12 2.063545e+13 \n", + ".. ... ... \n", + "467 -1.901744e+09 2.682230e+10 \n", + "468 3.073530e+08 2.212551e+10 \n", + "469 3.097020e+08 2.312352e+10 \n", + "470 1.284689e+09 1.828067e+10 \n", + "482 0.000000e+00 6.830338e+09 \n", + "\n", + " Net Borrowings Total Cashflows From Investing Activities Investments \\\n", + "0 4.503500e+10 -6.350965e+12 -3.286883e+12 \n", + "1 1.655130e+11 -3.484309e+12 -2.414150e+11 \n", + "2 1.900472e+12 -5.885210e+12 -1.747571e+12 \n", + "3 -5.049000e+10 -2.979418e+12 -4.332600e+10 \n", + "4 -1.333413e+12 8.722370e+11 1.575785e+13 \n", + ".. ... ... ... \n", + "467 4.167232e+09 -1.333849e+10 1.799423e+09 \n", + "468 6.475969e+09 -2.322245e+10 -6.018215e+09 \n", + "469 6.037583e+09 -1.848232e+10 -1.060335e+10 \n", + "470 2.195216e+09 -7.119745e+09 -1.668570e+08 \n", + "482 -1.701114e+09 -6.440656e+09 -8.117702e+09 \n", + "\n", + " Net Income Total Liab Total Assets Retained Earnings \\\n", + "0 3.310823e+12 2.455460e+13 8.326905e+13 5.246040e+13 \n", + "1 1.984514e+12 2.283988e+13 7.771790e+13 4.915642e+13 \n", + "2 9.904470e+11 2.273942e+13 7.511801e+13 4.717885e+13 \n", + "3 1.766796e+12 1.926476e+13 7.117385e+13 4.699573e+13 \n", + "4 1.064379e+13 1.217212e+14 4.266212e+14 2.930648e+14 \n", + ".. ... ... ... ... \n", + "467 1.594900e+10 1.832240e+11 4.644270e+11 1.082500e+11 \n", + "468 1.746024e+10 1.711889e+11 4.287926e+11 1.002505e+11 \n", + "469 1.194308e+10 1.814853e+11 4.216774e+11 8.236386e+10 \n", + "470 1.042792e+10 1.445894e+11 3.942622e+11 9.034396e+10 \n", + "482 8.268477e+09 1.603868e+11 2.964236e+11 6.696965e+10 \n", + "\n", + " Cash Net Receivables Long Term Debt Short Long Term Debt \\\n", + "0 2.761977e+12 7.545234e+12 1.176780e+13 2.311561e+12 \n", + "1 2.666351e+12 6.522701e+12 1.153141e+13 2.167540e+12 \n", + "2 2.226144e+12 5.379719e+12 1.078574e+13 2.658938e+12 \n", + "3 2.975989e+12 5.241949e+12 8.199087e+12 2.934671e+12 \n", + "4 3.903142e+13 4.521067e+13 5.097320e+11 5.180650e+11 \n", + ".. ... ... ... ... \n", + "467 1.326220e+11 3.519000e+10 3.983000e+10 3.733200e+10 \n", + "468 1.131049e+11 3.437743e+10 5.108895e+10 2.212810e+10 \n", + "469 1.240005e+11 3.162152e+10 5.096679e+10 1.426338e+10 \n", + "470 1.072852e+11 3.101319e+10 2.770260e+10 3.212053e+10 \n", + "482 3.188104e+10 4.557126e+10 1.326215e+10 6.051582e+09 \n", + "\n", + " Total Current Assets Returns \n", + "0 2.491050e+13 -0.215686 \n", + "1 2.009956e+13 -0.070632 \n", + "2 1.838488e+13 0.080321 \n", + "3 1.657095e+13 0.427711 \n", + "4 2.181632e+14 0.059540 \n", + ".. ... ... \n", + "467 2.332740e+11 0.029178 \n", + "468 2.116034e+11 0.246093 \n", + "469 2.078333e+11 0.065629 \n", + "470 1.790831e+11 0.081508 \n", + "482 2.003298e+11 0.092308 \n", + "\n", + "[128 rows x 15 columns]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import statsmodels.api as sm\n", + "\n", + "df = pd.read_csv(\"Data/Processed/linear_reg_data.csv\")\n", + "df = df.dropna().drop(columns=[\"Unnamed: 0\"]).reset_index(drop=True)\n", + "df = df[df[\"Net Income\"] > 1000000000]\n", + "df\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "const 9.140611e+11\n", + "Change To Liabilities -1.000000e+00\n", + "Total Cash From Operating Activities 1.351298e+00\n", + "Net Borrowings -1.991888e+00\n", + "Total Cashflows From Investing Activities -4.411001e+00\n", + "Investments 2.564988e+00\n", + "Net Income -3.986257e+00\n", + "Total Liab 3.498029e-01\n", + "Total Assets -2.967563e-01\n", + "Retained Earnings 2.671895e-01\n", + "Cash 3.151412e+00\n", + "Net Receivables 1.945539e+00\n", + "Long Term Debt -1.170602e+00\n", + "Short Long Term Debt 2.874320e-01\n", + "Total Current Assets -1.049530e+00\n", + "dtype: float64" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "columns = df.columns.values.tolist()\n", + "columns.remove(\"Returns\")\n", + "X = df[columns]\n", + "y = df[\"Returns\"]\n", + "\n", + "X = sm.add_constant(X)\n", + "results = sm.OLS(y, X).fit()\n", + "output = results.params/abs(results.params.iloc[1])\n", + "output" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Perhaps this tells us that for large cap tech companies fundemental factors are not such a good indicator of performance" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "interpreter": { + "hash": "d2feefea56b0213a6ec2bb54630eea72d1e2849cc5d96656889c1540b99c0617" + }, + "kernelspec": { + "display_name": "Python 3.9.8 ('venv_for_ml': venv)", + "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.9.8" + }, + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/yfiniance_data.ipynb b/yfiniance_data.ipynb index 47a07cb..9175cea 100644 --- a/yfiniance_data.ipynb +++ b/yfiniance_data.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -259,7 +259,7 @@ "Accounts Payable 4.474800e+07 " ] }, - "execution_count": 3, + "execution_count": 1, "metadata": {}, "output_type": "execute_result" } @@ -274,266 +274,19 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "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", - " \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", - " \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", - " \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", - " \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", - "
2021-12-252021-09-252021-06-262021-03-27
Total Liab3.092590e+112.879120e+112.655600e+112.679800e+11
Total Stockholder Equity7.193200e+106.309000e+106.428000e+106.917800e+10
Other Current Liab5.704300e+105.357700e+105.130600e+105.325500e+10
Total Assets3.811910e+113.510020e+113.298400e+113.371580e+11
Common Stock5.842400e+105.736500e+105.498900e+105.420300e+10
Other Current Assets1.811200e+101.411100e+101.364100e+101.337600e+10
Retained Earnings1.443500e+105.562000e+099.233000e+091.526100e+10
Other Liab5.505600e+104.305000e+103.835400e+103.985300e+10
Treasury Stock-9.270000e+081.630000e+085.800000e+07-2.860000e+08
Other Assets5.010900e+103.876200e+104.485400e+104.333900e+10
Cash3.711900e+103.494000e+103.405000e+103.846600e+10
Total Current Liabilities1.475740e+111.254810e+111.077540e+111.063850e+11
Short Long Term Debt1.116900e+109.613000e+098.039000e+098.003000e+09
Other Stockholder Equity-9.270000e+081.630000e+085.800000e+07-2.860000e+08
Property Plant Equipment3.924500e+104.952700e+103.861500e+103.781500e+10
Total Current Assets1.531540e+111.348360e+111.144230e+111.214650e+11
Long Term Investments1.386830e+111.278770e+111.319480e+111.345390e+11
Net Tangible Assets7.193200e+106.309000e+106.428000e+106.917800e+10
Short Term Investments2.679400e+102.769900e+102.764600e+103.136800e+10
Net Receivables6.525300e+105.150600e+103.390800e+103.303600e+10
Long Term Debt1.066290e+111.091060e+111.057520e+111.086420e+11
Inventory5.876000e+096.580000e+095.178000e+095.219000e+09
Accounts Payable7.436200e+105.476300e+104.040900e+104.012700e+10
\n", - "
" - ], - "text/plain": [ - " 2021-12-25 2021-09-25 2021-06-26 \\\n", - "Total Liab 3.092590e+11 2.879120e+11 2.655600e+11 \n", - "Total Stockholder Equity 7.193200e+10 6.309000e+10 6.428000e+10 \n", - "Other Current Liab 5.704300e+10 5.357700e+10 5.130600e+10 \n", - "Total Assets 3.811910e+11 3.510020e+11 3.298400e+11 \n", - "Common Stock 5.842400e+10 5.736500e+10 5.498900e+10 \n", - "Other Current Assets 1.811200e+10 1.411100e+10 1.364100e+10 \n", - "Retained Earnings 1.443500e+10 5.562000e+09 9.233000e+09 \n", - "Other Liab 5.505600e+10 4.305000e+10 3.835400e+10 \n", - "Treasury Stock -9.270000e+08 1.630000e+08 5.800000e+07 \n", - "Other Assets 5.010900e+10 3.876200e+10 4.485400e+10 \n", - "Cash 3.711900e+10 3.494000e+10 3.405000e+10 \n", - "Total Current Liabilities 1.475740e+11 1.254810e+11 1.077540e+11 \n", - "Short Long Term Debt 1.116900e+10 9.613000e+09 8.039000e+09 \n", - "Other Stockholder Equity -9.270000e+08 1.630000e+08 5.800000e+07 \n", - "Property Plant Equipment 3.924500e+10 4.952700e+10 3.861500e+10 \n", - "Total Current Assets 1.531540e+11 1.348360e+11 1.144230e+11 \n", - "Long Term Investments 1.386830e+11 1.278770e+11 1.319480e+11 \n", - "Net Tangible Assets 7.193200e+10 6.309000e+10 6.428000e+10 \n", - "Short Term Investments 2.679400e+10 2.769900e+10 2.764600e+10 \n", - "Net Receivables 6.525300e+10 5.150600e+10 3.390800e+10 \n", - "Long Term Debt 1.066290e+11 1.091060e+11 1.057520e+11 \n", - "Inventory 5.876000e+09 6.580000e+09 5.178000e+09 \n", - "Accounts Payable 7.436200e+10 5.476300e+10 4.040900e+10 \n", - "\n", - " 2021-03-27 \n", - "Total Liab 2.679800e+11 \n", - "Total Stockholder Equity 6.917800e+10 \n", - "Other Current Liab 5.325500e+10 \n", - "Total Assets 3.371580e+11 \n", - "Common Stock 5.420300e+10 \n", - "Other Current Assets 1.337600e+10 \n", - "Retained Earnings 1.526100e+10 \n", - "Other Liab 3.985300e+10 \n", - "Treasury Stock -2.860000e+08 \n", - "Other Assets 4.333900e+10 \n", - "Cash 3.846600e+10 \n", - "Total Current Liabilities 1.063850e+11 \n", - "Short Long Term Debt 8.003000e+09 \n", - "Other Stockholder Equity -2.860000e+08 \n", - "Property Plant Equipment 3.781500e+10 \n", - "Total Current Assets 1.214650e+11 \n", - "Long Term Investments 1.345390e+11 \n", - "Net Tangible Assets 6.917800e+10 \n", - "Short Term Investments 3.136800e+10 \n", - "Net Receivables 3.303600e+10 \n", - "Long Term Debt 1.086420e+11 \n", - "Inventory 5.219000e+09 \n", - "Accounts Payable 4.012700e+10 " - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ - "apple.quarterly_balance_sheet" + "apple.quarterly_balance_sheet\n", + "temp = apple.info.items()\n", + "temp = list(temp)\n", + "\n" ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -542,7 +295,7 @@ "datetime.datetime(2021, 9, 25, 0, 0)" ] }, - "execution_count": 5, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -559,7 +312,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -635,7 +388,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -668,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -679,7 +432,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -799,227 +552,25 @@ }, { "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", - " \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", - " \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", - " \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", - " \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", - "
2021-12-252021-09-252021-06-262021-03-27
Total Liab2.0192682.1352752.3208622.206232
Total Stockholder Equity0.4696710.4679020.5617750.569530
Other Current Liab0.3724550.3973490.4483890.438439
Total Assets2.4889392.6031772.8826372.775763
Common Stock0.3814720.4254430.4805760.446244
Other Current Assets0.1182600.1046530.1192160.110122
Retained Earnings0.0942520.0412500.0806920.125641
Other Liab0.3594810.3192770.3351950.328103
Treasury Stock-0.0060530.0012090.000507-0.002355
Other Assets0.3271800.2874750.3920020.356802
Cash0.2423640.2591300.2975800.316684
Total Current Liabilities0.9635660.9306190.9417160.875849
Short Long Term Debt0.0729270.0712940.0702570.065887
Other Stockholder Equity-0.0060530.0012090.000507-0.002355
Property Plant Equipment0.2562450.3673130.3374760.311324
Total Current Assets1.0000001.0000001.0000001.000000
Long Term Investments0.9055130.9483891.1531601.107636
Net Tangible Assets0.4696710.4679020.5617750.569530
Short Term Investments0.1749480.2054270.2416120.258247
Net Receivables0.4260610.3819900.2963390.271980
Long Term Debt0.6962210.8091760.9242200.894430
Inventory0.0383670.0488000.0452530.042967
Accounts Payable0.4855370.4061450.3531550.330359
\n", - "
" - ], "text/plain": [ - " 2021-12-25 2021-09-25 2021-06-26 2021-03-27\n", - "Total Liab 2.019268 2.135275 2.320862 2.206232\n", - "Total Stockholder Equity 0.469671 0.467902 0.561775 0.569530\n", - "Other Current Liab 0.372455 0.397349 0.448389 0.438439\n", - "Total Assets 2.488939 2.603177 2.882637 2.775763\n", - "Common Stock 0.381472 0.425443 0.480576 0.446244\n", - "Other Current Assets 0.118260 0.104653 0.119216 0.110122\n", - "Retained Earnings 0.094252 0.041250 0.080692 0.125641\n", - "Other Liab 0.359481 0.319277 0.335195 0.328103\n", - "Treasury Stock -0.006053 0.001209 0.000507 -0.002355\n", - "Other Assets 0.327180 0.287475 0.392002 0.356802\n", - "Cash 0.242364 0.259130 0.297580 0.316684\n", - "Total Current Liabilities 0.963566 0.930619 0.941716 0.875849\n", - "Short Long Term Debt 0.072927 0.071294 0.070257 0.065887\n", - "Other Stockholder Equity -0.006053 0.001209 0.000507 -0.002355\n", - "Property Plant Equipment 0.256245 0.367313 0.337476 0.311324\n", - "Total Current Assets 1.000000 1.000000 1.000000 1.000000\n", - "Long Term Investments 0.905513 0.948389 1.153160 1.107636\n", - "Net Tangible Assets 0.469671 0.467902 0.561775 0.569530\n", - "Short Term Investments 0.174948 0.205427 0.241612 0.258247\n", - "Net Receivables 0.426061 0.381990 0.296339 0.271980\n", - "Long Term Debt 0.696221 0.809176 0.924220 0.894430\n", - "Inventory 0.038367 0.048800 0.045253 0.042967\n", - "Accounts Payable 0.485537 0.406145 0.353155 0.330359" + "[]" ] }, - "execution_count": 33, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhU5fnG8e9DNvZ9lUV2AdmEYdVaNyxiLdYVRUGLLCoqrkVtfy5dtNXWWjdEpAIqIIoVFaVqrVpXAoSwQ2QNW8IWlpD9/f2R0cYYYJKZ5Mxyf65rrsyZc97MczjkvXPOPJkx5xwiIhK7qnldgIiIeEtBICIS4xQEIiIxTkEgIhLjFAQiIjEu3usCKqJx48aubdu2XpchIhJRlixZssc516T04xEZBG3btiU5OdnrMkREIoqZbSnrcV0aEhGJcQoCEZEYpyAQEYlxCgIRkRinIBARiXEKAhGRGKcgEBGJcQoCEZEIkJWdz4MLVnEwJz/k31tBICIS5r5I28PQJz/l5a+28M3GfSH//hH5l8UiIrEgJ7+Qxxat48X/bqJ9k1rMv2kwPVvVD/nzKAhERMLQmp0HmTQnhXW7D3HtwJO5b1hXaiTGVcpzKQhERMJIUZHjxf9u4rFF66hbI4F/XNePs7s0rdTnVBCIiISJHQeOcudry/ly417O79aMRy7pQaPaSZX+vAoCEZEw8FbKdn77z5UUFDn+dGkPrvC1xsyq5LlD0jVkZkPNbJ2ZpZnZ5DLWjzSzVP/tCzPrFehYEZFolnU0n1tnL+O2OSl0bFqb9277CVf2a1NlIQAhOCMwszjgGWAIkA4sNrMFzrnVJTbbBPzUObffzC4ApgIDAhwrIhKVvvh2D3e9tpzdh3K5Y0hnbjqrA/FxVd/VH4pLQ/2BNOfcRgAzmwMMB76fzJ1zX5TY/iugVaBjRUSiTW5BIX/513pe+GwjbRvV4o0bB9O7dejbQgMViiBoCWwrsZwODDjO9mOA98o71szGAeMA2rRpU9FaRUQ8tXZXcVvo2l2HGDmgDfdf2JWaid6+XBuKZy/rQpYrc0OzsykOgjPKO9Y5N5XiS0r4fL4ytxERCVdFRY7pn2/iz4vWUbd6PNOv83FOl2ZelwWEJgjSgdYlllsBO0pvZGY9gWnABc65veUZKyISyXZmHeWuecv5PG0v53VtxqOX9qBxFbSFBioUQbAY6GRm7YDtwAjg6pIbmFkbYD5wrXNufXnGiohEsreX7+D+N1eQX+h45JIejOhXdW2hgQo6CJxzBWY2EVgExAHTnXOrzGyCf/0U4P+ARsCz/n+AAuec71hjg61JRMRrB3PyeeCtVby5bDu9W9fniSt7065xLa/LKpM5F3mX230+n0tOTva6DBGRMn21cS93vracXQdzuOWcjkw8u6MnbaGlmdkS55yv9OP6y2IRkRDJLSjkrx+sZ+qnGzm5YU1enzCI09o08LqsE1IQiIiEwPrdh7htTgprdh7kqv5t+M2FXamVFBlTbGRUKSISpoqKHC99sZlH319LnaR4XhjlY0i38GgLDZSCQESkgnZl5XD368v5bMMezu3SlEcv7UmTOuHTFhooBYGISAUsXLGTe+evIK+giD/8sjtX96/aN4oLJQWBiEg5HMwp/hD5+Uu306tVPZ64sjftm9T2uqygKAhERAL0zaZ93D43hZ1ZR7n13E7cck5HEsKgLTRYCgIRkRPIKyjiiQ/XM+WTb2nTsCbzJgym78nh3xYaKAWBiMhxpGUUt4Wu2nGQEf1a89ufd4uYttBARdfeiIiEiHOOGV9s5pH31lIrKZ7nr+3Lz05t7nVZlUJBICJSyu6DOdz9eiqfrs/krFOa8OfLetK0TnWvy6o0CgIRkRLeX7mTyfNXkJNfyO8u7s41AyK3LTRQCgIREeBQTj4Pvb2a15ek06NlPf42ojcdIrwtNFAKAhGJeYs3F7eF7jhwlIlnd+S28zpFRVtooBQEIhKz8gqKePKj9Tz3n29p2aAGr40fhK9tQ6/LqnIKAhGJSWkZh7l9bgortmdxed9WPPCLU6kdZW2hgYrNvRaRmOWcY9ZXW/jjwjXUSIhjyjV9GNq9hddleUpBICIxI+NQDve8nsp/1mVyZucmPH5ZT5rWjd620EApCEQkJry/chf3zk8lO6+Qh35xKqMGnRz1baGBUhCISFQ7nFvA795ezdzkbXRvWZe/Xdmbjk3reF1WWFEQiEjUWrJlP7fPTWHb/mxuOqsDk87rTGJ87LSFBkpBICJRJ7+wiKc+2sDTH6fRol4N5o4bRP92sdcWGigFgYhElY2ZxW2hy9OzuLRPKx78RTfqVE/wuqywFpJzJDMbambrzCzNzCaXsb6LmX1pZrlmdlepdZvNbIWZpZhZcijqEZHY45zj5a+2MOzvn7FlXzbPjuzDX67opRAIQNBnBGYWBzwDDAHSgcVmtsA5t7rEZvuAW4GLj/FtznbO7Qm2FhGJTZmHcvn1G6n8e20GP+nUmMcv70UztYUGLBSXhvoDac65jQBmNgcYDnwfBM65DCDDzC4MwfOJiHzvg9W7mfxGKodyC3jgom6MHtSWatXUFloeoQiClsC2EsvpwIByjHfAv8zMAc8756aWtZGZjQPGAbRp06aCpYpItDiSW8Dv313N7G+20a1FXWaP6E3nZmoLrYhQBEFZ0evKMf5059wOM2sKfGBma51zn/7oGxYHxFQAn89Xnu8vIlFm6db93DE3hS37spnw0w7cMURtocEIRRCkA61LLLcCdgQ62Dm3w/81w8zepPhS04+CQEQkv7CIp/+dxtMfp9G8bnXmjB3IgPaNvC4r4oUiCBYDncysHbAdGAFcHchAM6sFVHPOHfLfPx94OAQ1iUiU2bTnCJPmprB82wEuOa0lDw4/lbrqCAqJoIPAOVdgZhOBRUAcMN05t8rMJvjXTzGz5kAyUBcoMrNJQDegMfCm//0+4oFXnXPvB1uTiEQP5xyzv9nG795ZTWJ8NZ6++jR+3vMkr8uKKiH5gzLn3EJgYanHppS4v4viS0alHQR6haIGEYk+ew7nMvmNVD5ck8EZHYvbQpvXU1toqOkvi0UkLH20Zje/fiOVgzkF/Pbn3bh+sNpCK4uCQETCSnZeAb9/dw2vfr2VLs3r8MoNAzmludpCK5OCQETCRsq2A9w+N4XNe48w/sz23HF+Z5Li47wuK+opCETEcwWFRTzz8bf8/d8baFYniVdvGMigDmoLrSoKAhHx1OY9R7j9tRSWbT3A8N4n8fDw7tSrobbQqqQgEBFPOOeYu3gbD7+zmrhqxpMjejO8d0uvy4pJCgIRqXJ7D+cyef4KPli9m0HtG/GXK3pxUv0aXpcVsxQEIlKlPl6bwd2vp3LwaD6/ubArvzq9ndpCPaYgEJEqcTSvkD8sXM3LXxW3hc4a05+uLep6XZagIBCRKpCafoBJc1LYuOcIN5zRjrt+dgrVE9QWGi4UBCJSaQoKi3juP9/y5EcbaFIniVdvGMDgjo29LktKURCISKXYsvcIt89NYenWA1zU6yR+P7w79WqqLTQcKQhEJKScc8xLTueht1dRTW2hEUFBICIhs+9IHvfOT2XRqt0MbN+Qv1zRm5ZqCw17CgIRCYmP12Vwz+upHMjO475hXbjhjPZqC40QCgIRCcrRvEIeeW8NM7/cQudmtZlxfX+6naS20EiiIBCRClu5PYvb5izj28wj/Or0dtwzVG2hkUhBICLlVljkmPLJtzzxwXoa107i5TEDOKOT2kIjlYJARMpl275sbp+bQvKW/VzYswV/uLg79Wsmel2WBEFBICIBcc7xxtLtPLhgFQY8cWUvLu7dEjO9IBzpFAQickL7j+Rx35sreG/lLvq3a8hfr+hFqwY1vS5LQkRBICLH9cn6TO6et5z92Xn8emgXxp3Znji1hUYVBYGIlCknv5BH31vLS19splPT2ky/rh/dW9bzuiypBCEJAjMbCjwJxAHTnHOPllrfBfgH0Ae43zn3eKBjRSS0nHPkFhRxNK+QI3kFHM0rJNt/O5pfQHZeIYdzCpj2302kZRzmusFtmXxBF7WFRrGgg8DM4oBngCFAOrDYzBY451aX2GwfcCtwcQXGisSc7ybr4gm67Mk6O7d4XXZ+4Q/X5xV8fz/bf/9o/nfrih8rcieuoWmdJGb+qj9ndm5S+TssngrFGUF/IM05txHAzOYAw4HvJ3PnXAaQYWYXlnesSLg60WR9JPd/E29Zk/WREhNzRSfr75hBjYQ4aibGUSMxjlqJ8dRILF5uWCuJmon/W1d8P77EY/HUTCi5vnhd07pJJMXrLCAWhCIIWgLbSiynAwNCPdbMxgHjANq0aVP+KiUmHWuyLnlJ5FiT9fcTdAgn65oJ/om31MTcqHaJyTohvtSkXWKyTvrfRP3dxF8zMZ7qCdXUxikVFoogKOt/X6A/HgGPdc5NBaYC+Hy+cvz4Sbgra7I+UmriLj1ZH8ktcYmkjMm6+LfxAo7mF1Zosq6Z9OPJtvRkXSvJP1knFK+vkfjj36prJMRRy/+9kuI1WUt4CkUQpAOtSyy3AnZUwViJAqt2ZDF6+jfsOZwX8Jhqxg8nXv9kXSspnsb+yfpHv3X7J+vi36j/91t36Ylbk7XEolAEwWKgk5m1A7YDI4Crq2CsRLiMQzmMnZFMQlw1fj20y48vh5SYrGsmxfsvq2iyFgm1oIPAOVdgZhOBRRS3gE53zq0yswn+9VPMrDmQDNQFisxsEtDNOXewrLHB1iThLye/kPGzlrA/O595EwapP13EQyH5OwLn3EJgYanHppS4v4viyz4BjZXo5pzjvvkrWLb1AFOu6aMQEPFYNa8LkNgz5ZONzF+2nTuHdGZo9xZelyMS8xQEUqU+WL2bPy9ay0W9TmLiOR29LkdEUBBIFVq76yCT5iyjR8t6PHZZT73gKxImFARSJfYezmXMS8nUrh7PC6N8et8akTCidx+VSpdbUMiEl5ew90gur40fRLO61b0uSURKUBBIpXLO8Zs3V7J4836evvo0eraq73VJIlKKLg1JpXrxv5uYtySdW8/txM97nuR1OSJSBgWBVJqP12bwx4VrGNajOZPO7eR1OSJyDAoCqRQbdh/iltnL6NqiLo9f3otq+mhDkbClIJCQ23ckjzEzkqmRGMe00T5qJuqlKJFwpp9QCam8giJufHkJuw7mMHfcQFrUq+F1SSJyAjojkJBxzvHAgpV8vWkfj13Wk9PaNPC6JBEJgIJAQualLzYz+5tt3Hx2B4b3bul1OSISIAWBhMSn6zP53TurOb9bM+4ccorX5YhIOSgIJGhpGYe5+dWlnNK8Lk9c2VsdQiIRRkEgQTmQnccNMxaTFF+NF0b1pVaS+g9EIo1+aqXC8guLuPnVpew4kMPscQNo1aCm1yWJSAUoCKTCHn57NZ+n7eXxy3vR9+SGXpcjIhWkS0NSIbO+3Mysr7Yw/sz2XNa3zE8hFZEIoSCQcvs8bQ8Pvr2ac7s05Z6hXbwuR0SCpCCQctm05wg3vbKUjk1q8+RVpxGnDiGRiKcgkIBlHc1nzIzFxFUzpo32UVsdQiJRQUEgASkoLGLiq0vZti+b50b2oXVDdQiJRIuQBIGZDTWzdWaWZmaTy1hvZvZ3//pUM+tTYt1mM1thZilmlhyKeiT0fv/uGj7bsIffX9ydAe0beV2OiIRQ0Of2ZhYHPAMMAdKBxWa2wDm3usRmFwCd/LcBwHP+r9852zm3J9hapHK8+vVWXvpiM2POaMeV/dp4XY6IhFgozgj6A2nOuY3OuTxgDjC81DbDgZmu2FdAfTNrEYLnlkr25bd7+b+3VvLTzk24b1hXr8sRkUoQiiBoCWwrsZzufyzQbRzwLzNbYmbjjvUkZjbOzJLNLDkzMzMEZcuJbN2bzY2vLKFt41o8dbU6hESiVSiCoKzZwZVjm9Odc30ovnx0s5mdWdaTOOemOud8zjlfkyZNKl6tBORQTnGHEMC0UT7qVk/wuCIRqSyhCIJ0oHWJ5VbAjkC3cc599zUDeJPiS03iocIix62zl7FpzxGeHdmHto1reV2SiFSiUATBYqCTmbUzs0RgBLCg1DYLgFH+7qGBQJZzbqeZ1TKzOgBmVgs4H1gZgpokCI++t4aP12Xy0PBTGdyhsdfliEglC7pryDlXYGYTgUVAHDDdObfKzCb4108BFgLDgDQgG7jeP7wZ8KaZfVfLq86594OtSSruteRtvPDZJq4b3JaRA072uhwRqQLmXOnL+eHP5/O55GT9yUGoLd68j6tf+IqB7Rvxj+v6ER+nvzcUiSZmtsQ55yv9uH7SBYBt+7IZP2sJrRvU5Omr+igERGKIftqFw7kF3DAjmYLCIqaN9lGvpjqERGKJ3jUsxhUWOSbNWUZa5mFmXN+f9k1qe12SiFQxnRHEuMcWrePDNRk8cFE3zuikDiGRWKQgiGHzl6Yz5ZNvGTmgDdcOVIeQSKxSEMSoJVv2M/mNFQzu0IgHf3Eq/hZeEYlBCoIYtP3AUcbPSqZF/eo8O7IPCeoQEolperE4xhzxdwjl5hcxZ5yP+jUTvS5JRDymIIghRUWOO15LYd2ug0y/rh8dm9bxuiQRCQO6JhBDnvhwPYtW7eb+C7tx1ilNvS5HRMKEgiBGvJWynaf+ncaIfq351eltvS5HRMKIgiAGpGw7wN2vp9K/XUMeHt5dHUIi8gMKgii3M+soY2cm06xuElOu6UtivA65iPyQZoUodjSvkHEzl5CdW8CLo/vRsJY6hETkx9Q1FKWcc9w1bzkrd2QxbZSPzs3UISQiZdMZQZR68qMNvLtiJ/de0IVzuzbzuhwRCWMKgij0bupO/vbhBi7r24qxP2nvdTkiEuYUBFFmRXoWd85LwXdyA/7wS3UIiciJKQiiSMbBHMbOTKZRrSSmXNuXpPg4r0sSkQigF4ujRE5+IWNnJnMwJ583bhxM49pJXpckIhFCQRAFnHPc83oqqduzeP6avnRtUdfrkkQkgujSUBR45uM0Fizfwd0/O4XzT23udTkiEmEUBBHu/ZW7ePxf6/nlaS258acdvC5HRCJQSILAzIaa2TozSzOzyWWsNzP7u399qpn1CXSsHNuqHVncPjeF3q3r88glPdQhJCIVEnQQmFkc8AxwAdANuMrMupXa7AKgk/82DniuHGOlDBmHchg7I5n6NROYOqov1RPUISQiFROKM4L+QJpzbqNzLg+YAwwvtc1wYKYr9hVQ38xaBDhWSsnJL2T8rCXsz87nhVE+mtap7nVJIhLBQhEELYFtJZbT/Y8Fsk0gYwEws3FmlmxmyZmZmUEXHamcc9w3fwXLth7gr1f0onvLel6XJCIRLhRBUNaFaRfgNoGMLX7QuanOOZ9zztekSZNylhg9nv90I/OXbeeOIZ25oEcLr8sRkSgQir8jSAdal1huBewIcJvEAMaK3werd/On99dyUa+TuOWcjl6XIyJRIhRnBIuBTmbWzswSgRHAglLbLABG+buHBgJZzrmdAY4VYO2ug0yas4weLevx2GU91SEkIiET9BmBc67AzCYCi4A4YLpzbpWZTfCvnwIsBIYBaUA2cP3xxgZbU7TZeziXMS8lU7t6PC+M8qlDSERCypwr85J8WPP5fC45OdnrMqpEbkEh10z7mtT0LOZNGETPVvW9LklEIpSZLXHO+Uo/rvcaCmPOOX7z5koWb97PU1edphAQkUqht5gIYy/+dxPzlqRz67mduKjXSV6XIyJRSkEQpj5em8EfF65hWI/mTDq3k9fliEgUUxCEoQ27D3HL7GV0bVGXxy/vRbVq6hASkcqjIAgz+47kMWZGMjUS45g22kfNRL2MIyKVS7NMGMkrKOLGl5ew62AOc8cNpEW9Gl6XJCIxQGcEYcI5xwMLVvH1pn08dllPTmvTwOuSRCRGKAjCxEtfbGb2N1u5+ewODO9d5vvuiYhUCgVBGPh0fSa/e2c153drxp1DTvG6HBGJMQoCj6VlHObmV5fSuVkdnriytzqERKTKKQg8dCA7jxtmLCYpvhrTRvuolaTX7kWk6mnm8Uh+YRE3v7qUHQdymD1uAK0a1PS6JBGJUQoCjzz89mo+T9vL45f3ou/JDb0uR0RimC4NeWDWl5uZ9dUWxp/Znsv6tvK6HBGJcQqCKvZ52h4efHs153Zpyj1Du3hdjoiIgqAqbdpzhJteWUqHJrX424jexKlDSETCgIKgimQdzWfMjMXEVTNeHN2POtUTvC5JRARQEFSJgsIiJr66lG37snluZB9aN1SHkIiED3UNVYE/LFzDZxv28KdLezCgfSOvyxER+QGdEVSy2d9s5R+fb2bMGe24sl8br8sREfkRBUEl+vLbvfz2nyv5aecm3HuBOoREJDwpCCrJ1r3Z3PjKEto2rsVTV59GfJz+qUUkPGl2qgSHcoo7hACmjfJRVx1CIhLGggoCM2toZh+Y2Qb/1zI/TcXMhprZOjNLM7PJJR5/0My2m1mK/zYsmHrCQWGR49bZy9i05wjPjuxD28a1vC5JROS4gj0jmAx85JzrBHzkX/4BM4sDngEuALoBV5lZtxKbPOGc6+2/LQyyHs89+t4aPl6XyUPDT2Vwh8ZelyMickLBBsFwYIb//gzg4jK26Q+kOec2OufygDn+cVHnteRtvPDZJq4b3JaRA072uhwRkYAEGwTNnHM7Afxfm5axTUtgW4nldP9j35loZqlmNv1Yl5YiweLN+7j/zRX8pFNjfnNhV6/LEREJ2AmDwMw+NLOVZdwC/a2+rDfUcf6vzwEdgN7ATuAvx6ljnJklm1lyZmZmgE9dNbbty2b8rCW0blCTp6/qow4hEYkoJ/zLYufcecdaZ2a7zayFc26nmbUAMsrYLB1oXWK5FbDD/713l/heLwDvHKeOqcBUAJ/P5461XVU7nFvA2JnJFBQWMW20j3o11SEkIpEl2F9dFwCj/fdHA2+Vsc1ioJOZtTOzRGCEfxz+8PjOL4GVQdZTpYqKHJPmpLAh4zDPjuxL+ya1vS5JRKTcgn2voUeB18xsDLAVuBzAzE4CpjnnhjnnCsxsIrAIiAOmO+dW+cf/2cx6U3ypaDMwPsh6qtSfF63jwzW7eXj4qZzRSR1CIhKZggoC59xe4NwyHt8BDCuxvBD4UWuoc+7aYJ7fS/OXpjPlk28ZOaAN1w5Uh5CIRC69qlkBS7bsZ/IbKxjUvhEP/uJUzPQBMyISuRQE5bT9wFHGz0qmRf3qPDuyDwnqEBKRCKfPIyiH7LwCxs5IJje/iDnjfDSoleh1SSIiQVMQBKioyHH73BTW7jrI9Ov60bFpHa9LEhEJCV3XCNATH65n0ard3H9hN846paw/oBYRiUwKggC8lbKdp/6dxoh+rfnV6W29LkdEJKQUBCeQsu0Ad7+eSv92DXl4eHd1CIlI1FEQHMeurBzGzUymWd0kplzTl8R4/XOJSPTRzHYMR/MKGTszmSO5Bbw4uh8N1SEkIlFKXUNlcM5x17zlrNyRxbRRPjo3U4eQiEQvnRGU4cmPNvDuip3ce0EXzu3azOtyREQqlYKglHdTd/K3DzdwaZ9WjP1Je6/LERGpdAqCElakZ3HnvBR8Jzfgj5eoQ0hEYoOCwC/jYA5jZybTqFYSU67tS1J8nNcliYhUCb1YDOTkF3cIHczJ540bB9O4dpLXJYmIVJmYDwLnHPe8nkrq9iyev6YvXVvU9bokEZEqFfOXhp75OI0Fy3dw1/mncP6pzb0uR0SkysV0ELy/cheP/2s9vzytJTed1cHrckREPBGzQbBqRxa3z02hd+v6PHJJD3UIiUjMiskgyDyUy9gZydSvmcDUUX2pnqAOIRGJXTH3YnFOfiHjZyWzPzufeRMG0bROda9LEhHxVEwFgXOO++avYOnWAzw3sg/dW9bzuiQREc/F1KWh5z/dyPxl27ljSGcu6NHC63JERMJCTAVBy/o1uLxvK245p6PXpYiIhI2ggsDMGprZB2a2wf+1wTG2m25mGWa2siLjQ+WiXifx2OW91CEkIlJCsGcEk4GPnHOdgI/8y2V5CRgaxHgREakkwQbBcGCG//4M4OKyNnLOfQrsq+h4ERGpPMEGQTPn3E4A/9emlTXezMaZWbKZJWdmZla4YBER+aETto+a2YdAWW/Cc3/oyzk259xUYCqAz+dzVfncIiLR7IRB4Jw771jrzGy3mbVwzu00sxZARjmfP9jxIiISpGAvDS0ARvvvjwbequLxIiISpGCD4FFgiJltAIb4lzGzk8xs4Xcbmdls4EvgFDNLN7MxxxsvIiJVJ6i3mHDO7QXOLePxHcCwEstXlWe8iIhUHXMu8l53NbNMYEsFhzcG9oSwHC9pX8JPtOwHaF/CVTD7crJzrknpByMyCIJhZsnOOZ/XdYSC9iX8RMt+gPYlXFXGvsTUew2JiMiPKQhERGJcLAbBVK8LCCHtS/iJlv0A7Uu4Cvm+xNxrBCIi8kOxeEYgIiIlKAhERGJc1AaBmQ01s3VmlmZmP/qcAyv2d//6VDPr40WdgQhgX84ysywzS/Hf/s+LOk/kWB9QVGJ9RByTAPYjIo4HgJm1NrOPzWyNma0ys9vK2CZSjksg+xL2x8bMqpvZN2a23L8fD5WxTWiPiXMu6m5AHPAt0B5IBJYD3UptMwx4DzBgIPC113UHsS9nAe94XWsA+3Im0AdYeYz1kXJMTrQfEXE8/LW2APr479cB1kfwz0og+xL2x8b/71zbfz8B+BoYWJnHJFrPCPoDac65jc65PGAOxR+CU9JwYKYr9hVQ3/8OqOEmkH2JCO7YH1D0nYg4JgHsR8Rwzu10zi313z8ErAFaltosUo5LIPsS9vz/zof9iwn+W+munpAek2gNgpbAthLL6fz4P0Qg24SDQOsc5D+VfM/MTq2a0kIuUo5JICLueJhZW+A0in8DLSnijstx9gUi4NiYWZyZpVD81vwfOOcq9ZgE9aZzYaysT6cvnaiBbBMOAqlzKcXvIXLYzIYB/wQ6VXploRcpx+REIu54mFlt4A1gknPuYOnVZQwJ2+Nygn2JiGPjnCsEeptZfeBNM+vunCv5mlRIj0m0nhGkA61LLLcCdlRgm3Bwwjqdcwe/O5V0zi0EEsyscdWVGDKRcogLnp8AAAE0SURBVEyOK9KOh5klUDxxvuKcm1/GJhFzXE60L5F2bJxzB4D/AENLrQrpMYnWIFgMdDKzdmaWCIyg+ENwSloAjPK/+j4QyHL+z08OMyfcFzNrbmbmv9+f4uO6t8orDV6kHJPjiqTj4a/zRWCNc+6vx9gsIo5LIPsSCcfGzJr4zwQwsxrAecDaUpuF9JhE5aUh51yBmU0EFlHcdTPdObfKzCb4108BFlL8ynsakA1c71W9xxPgvlwG3GhmBcBRYITztxaEEyv+gKKzgMZmlg48QPELYRF1TALYj4g4Hn6nA9cCK/zXpAHuA9pAZB0XAtuXSDg2LYAZZhZHcVC95px7pzLnL73FhIhIjIvWS0MiIhIgBYGISIxTEIiIxDgFgYhIjFMQiIjEOAWBiEiMUxCIiMS4/wd6siCH5bTfUgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" } ], "source": [ @@ -1037,8 +588,8 @@ " total_ret = (quaterly_data.loc[len(quaterly_data)-1][\"Close\"] - quaterly_data.loc[0][\"Open\"])/quaterly_data.loc[0][\"Open\"]\n", " quarterly_returns.append(total_ret)\n", "\n", - "apple_fundementals.append({\"Quarterly Returns\" : quarterly_returns} , ignore_index=True)\n", - "apple_fundementals\n" + "\n", + "\n" ] }, {