Last active
November 14, 2024 09:20
-
-
Save janlukasschroeder/3da274150fd00c1c1776c7e541a9b61b to your computer and use it in GitHub Desktop.
extracting-financial-statements-from-sec-filings.ipynb
This file contains 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
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "extracting-financial-statements-from-sec-filings.ipynb", | |
"provenance": [], | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/janlukasschroeder/3da274150fd00c1c1776c7e541a9b61b/extracting-financial-statements-from-sec-filings.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"source": [ | |
"# Extracting Financial Statements from SEC Filings - XBRL-To-JSON\n", | |
"\n", | |
"This is the entire Jupyter notebook to extract financial statements from annual and quarterly reports as reported in 10-K and 10-Q filings with the SEC.\n", | |
"\n", | |
"We use https://sec-api.io to get all 10-K and 10-Q filings and to convert their XBRL data into JSON so that we can create a single income statement, balance sheet and cash flow statement for Apple, covering quarterly financial data over multiple years.\n", | |
"\n", | |
"Medium article:\n", | |
"https://medium.com/@jan_5421/extracting-financial-statements-from-sec-filings-xbrl-to-json-f83542ade90" | |
], | |
"metadata": { | |
"id": "on7oHdViSW-Z" | |
} | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# install the SEC API Python package\n", | |
"!pip install sec-api" | |
], | |
"metadata": { | |
"id": "5EY1SvF8mgXU" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# get your free API key at https://sec-api.io\n", | |
"api_key = \"YOUR_API_KEY\"" | |
], | |
"metadata": { | |
"id": "WvdIIMeUR4yn" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "KLnnfR8Oi-FD", | |
"outputId": "2686717b-fe86-4ed8-e3be-60c8ac078ed1" | |
}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"[\n", | |
" {\n", | |
" \"decimals\": \"-6\",\n", | |
" \"unitRef\": \"usd\",\n", | |
" \"period\": {\n", | |
" \"startDate\": \"2020-12-27\",\n", | |
" \"endDate\": \"2021-03-27\"\n", | |
" },\n", | |
" \"segment\": {\n", | |
" \"dimension\": \"srt:ProductOrServiceAxis\",\n", | |
" \"value\": \"us-gaap:ProductMember\"\n", | |
" },\n", | |
" \"value\": \"72683000000\"\n", | |
" },\n", | |
" {\n", | |
" \"decimals\": \"-6\",\n", | |
" \"unitRef\": \"usd\",\n", | |
" \"period\": {\n", | |
" \"startDate\": \"2019-12-29\",\n", | |
" \"endDate\": \"2020-03-28\"\n", | |
" },\n", | |
" \"segment\": {\n", | |
" \"dimension\": \"srt:ProductOrServiceAxis\",\n", | |
" \"value\": \"us-gaap:ProductMember\"\n", | |
" },\n", | |
" \"value\": \"44965000000\"\n", | |
" }\n", | |
"]\n" | |
] | |
} | |
], | |
"source": [ | |
"import requests\n", | |
"import json\n", | |
"import pandas as pd\n", | |
"\n", | |
"# 10-Q filing URL of Apple\n", | |
"filing_url = \"https://www.sec.gov/Archives/edgar/data/320193/000032019321000056/aapl-20210327.htm\"\n", | |
"\n", | |
"# XBRL-to-JSON converter API endpoint\n", | |
"xbrl_converter_api_endpoint = \"https://api.sec-api.io/xbrl-to-json\"\n", | |
"\n", | |
"final_url = xbrl_converter_api_endpoint + \"?htm-url=\" + filing_url + \"&token=\" + api_key\n", | |
"\n", | |
"# make request to the API\n", | |
"response = requests.get(final_url)\n", | |
"\n", | |
"# load JSON into memory\n", | |
"xbrl_json = json.loads(response.text)\n", | |
"\n", | |
"# income statement example\n", | |
"print(json.dumps(xbrl_json['StatementsOfIncome']['RevenueFromContractWithCustomerExcludingAssessedTax'][0:2], indent=1))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# convert XBRL-JSON of income statement to pandas dataframe\n", | |
"def get_income_statement(xbrl_json):\n", | |
" income_statement_store = {}\n", | |
"\n", | |
" # iterate over each US GAAP item in the income statement\n", | |
" for usGaapItem in xbrl_json['StatementsOfIncome']:\n", | |
" values = []\n", | |
" indicies = []\n", | |
"\n", | |
" for fact in xbrl_json['StatementsOfIncome'][usGaapItem]:\n", | |
" # only consider items without segment. not required for our analysis.\n", | |
" if 'segment' not in fact:\n", | |
" index = fact['period']['startDate'] + '-' + fact['period']['endDate']\n", | |
" # ensure no index duplicates are created\n", | |
" if index not in indicies:\n", | |
" values.append(fact['value'])\n", | |
" indicies.append(index) \n", | |
"\n", | |
" income_statement_store[usGaapItem] = pd.Series(values, index=indicies) \n", | |
"\n", | |
" income_statement = pd.DataFrame(income_statement_store)\n", | |
" # switch columns and rows so that US GAAP items are rows and each column header represents a date range\n", | |
" return income_statement.T \n", | |
"\n", | |
"income_statement = get_income_statement(xbrl_json)" | |
], | |
"metadata": { | |
"id": "w3XdohlpjM7Q" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"income_statement" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 444 | |
}, | |
"id": "YooC5Kihjg4p", | |
"outputId": "a80b866a-9ec8-4030-acc0-e0b8f60d817c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-240878da-69fc-460c-9c08-47898a6fd5eb\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2020-12-27-2021-03-27</th>\n", | |
" <th>2019-12-29-2020-03-28</th>\n", | |
" <th>2020-09-27-2021-03-27</th>\n", | |
" <th>2019-09-29-2020-03-28</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>RevenueFromContractWithCustomerExcludingAssessedTax</th>\n", | |
" <td>89584000000</td>\n", | |
" <td>58313000000</td>\n", | |
" <td>201023000000</td>\n", | |
" <td>150132000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CostOfGoodsAndServicesSold</th>\n", | |
" <td>51505000000</td>\n", | |
" <td>35943000000</td>\n", | |
" <td>118616000000</td>\n", | |
" <td>92545000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GrossProfit</th>\n", | |
" <td>38079000000</td>\n", | |
" <td>22370000000</td>\n", | |
" <td>82407000000</td>\n", | |
" <td>57587000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ResearchAndDevelopmentExpense</th>\n", | |
" <td>5262000000</td>\n", | |
" <td>4565000000</td>\n", | |
" <td>10425000000</td>\n", | |
" <td>9016000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>SellingGeneralAndAdministrativeExpense</th>\n", | |
" <td>5314000000</td>\n", | |
" <td>4952000000</td>\n", | |
" <td>10945000000</td>\n", | |
" <td>10149000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingExpenses</th>\n", | |
" <td>10576000000</td>\n", | |
" <td>9517000000</td>\n", | |
" <td>21370000000</td>\n", | |
" <td>19165000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingIncomeLoss</th>\n", | |
" <td>27503000000</td>\n", | |
" <td>12853000000</td>\n", | |
" <td>61037000000</td>\n", | |
" <td>38422000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NonoperatingIncomeExpense</th>\n", | |
" <td>508000000</td>\n", | |
" <td>282000000</td>\n", | |
" <td>553000000</td>\n", | |
" <td>631000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest</th>\n", | |
" <td>28011000000</td>\n", | |
" <td>13135000000</td>\n", | |
" <td>61590000000</td>\n", | |
" <td>39053000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeTaxExpenseBenefit</th>\n", | |
" <td>4381000000</td>\n", | |
" <td>1886000000</td>\n", | |
" <td>9205000000</td>\n", | |
" <td>5568000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetIncomeLoss</th>\n", | |
" <td>23630000000</td>\n", | |
" <td>11249000000</td>\n", | |
" <td>52385000000</td>\n", | |
" <td>33485000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareBasic</th>\n", | |
" <td>1.41</td>\n", | |
" <td>0.64</td>\n", | |
" <td>3.11</td>\n", | |
" <td>1.91</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareDiluted</th>\n", | |
" <td>1.40</td>\n", | |
" <td>0.64</td>\n", | |
" <td>3.08</td>\n", | |
" <td>1.89</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfSharesOutstandingBasic</th>\n", | |
" <td>16753476000</td>\n", | |
" <td>17440402000</td>\n", | |
" <td>16844298000</td>\n", | |
" <td>17550281000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfDilutedSharesOutstanding</th>\n", | |
" <td>16929157000</td>\n", | |
" <td>17618765000</td>\n", | |
" <td>17021423000</td>\n", | |
" <td>17718591000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-240878da-69fc-460c-9c08-47898a6fd5eb')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-240878da-69fc-460c-9c08-47898a6fd5eb button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-240878da-69fc-460c-9c08-47898a6fd5eb');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2020-12-27-2021-03-27 ... 2019-09-29-2020-03-28\n", | |
"RevenueFromContractWithCustomerExcludingAssesse... 89584000000 ... 150132000000\n", | |
"CostOfGoodsAndServicesSold 51505000000 ... 92545000000\n", | |
"GrossProfit 38079000000 ... 57587000000\n", | |
"ResearchAndDevelopmentExpense 5262000000 ... 9016000000\n", | |
"SellingGeneralAndAdministrativeExpense 5314000000 ... 10149000000\n", | |
"OperatingExpenses 10576000000 ... 19165000000\n", | |
"OperatingIncomeLoss 27503000000 ... 38422000000\n", | |
"NonoperatingIncomeExpense 508000000 ... 631000000\n", | |
"IncomeLossFromContinuingOperationsBeforeIncomeT... 28011000000 ... 39053000000\n", | |
"IncomeTaxExpenseBenefit 4381000000 ... 5568000000\n", | |
"NetIncomeLoss 23630000000 ... 33485000000\n", | |
"EarningsPerShareBasic 1.41 ... 1.91\n", | |
"EarningsPerShareDiluted 1.40 ... 1.89\n", | |
"WeightedAverageNumberOfSharesOutstandingBasic 16753476000 ... 17550281000\n", | |
"WeightedAverageNumberOfDilutedSharesOutstanding 16929157000 ... 17718591000\n", | |
"\n", | |
"[15 rows x 4 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 5 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"\n", | |
"# convert XBRL-JSON of balance sheet to pandas dataframe\n", | |
"def get_balance_sheet(xbrl_json):\n", | |
" balance_sheet_store = {}\n", | |
"\n", | |
" for usGaapItem in xbrl_json['BalanceSheets']:\n", | |
" values = []\n", | |
" indicies = []\n", | |
"\n", | |
" for fact in xbrl_json['BalanceSheets'][usGaapItem]:\n", | |
" # only consider items without segment.\n", | |
" if 'segment' not in fact:\n", | |
" index = fact['period']['instant']\n", | |
"\n", | |
" # avoid duplicate indicies with same values\n", | |
" if index in indicies:\n", | |
" continue\n", | |
" \n", | |
" # add 0 if value is nil\n", | |
" if \"value\" not in fact:\n", | |
" values.append(0)\n", | |
" else:\n", | |
" values.append(fact['value'])\n", | |
"\n", | |
" indicies.append(index) \n", | |
"\n", | |
" balance_sheet_store[usGaapItem] = pd.Series(values, index=indicies) \n", | |
"\n", | |
" balance_sheet = pd.DataFrame(balance_sheet_store)\n", | |
" # switch columns and rows so that US GAAP items are rows and each column header represents a date instant\n", | |
" return balance_sheet.T\n", | |
"\n", | |
"balance_sheet = get_balance_sheet(xbrl_json)" | |
], | |
"metadata": { | |
"id": "d2-J98Oijicy" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"balance_sheet" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 709 | |
}, | |
"id": "xyA2Ush-jog4", | |
"outputId": "224b9ad6-3334-4e0d-9c92-6e363191be90" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-c4633127-00ef-4487-86e3-ed225a43e8a1\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2019-09-28</th>\n", | |
" <th>2019-12-28</th>\n", | |
" <th>2020-03-28</th>\n", | |
" <th>2020-09-26</th>\n", | |
" <th>2020-12-26</th>\n", | |
" <th>2021-03-27</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>CashAndCashEquivalentsAtCarryingValue</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>38016000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>38466000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>MarketableSecuritiesCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>52927000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>31368000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AccountsReceivableNetCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>16120000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>18503000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>InventoryNet</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>4061000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>5219000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NontradeReceivablesCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>21325000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>14533000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OtherAssetsCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>11264000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>13376000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AssetsCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>143713000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>121465000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>MarketableSecuritiesNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>100887000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>134539000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PropertyPlantAndEquipmentNet</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>36766000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>37815000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OtherAssetsNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>42522000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>43339000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AssetsNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>180175000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>215693000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Assets</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>323888000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>337158000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AccountsPayableCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>42296000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>40127000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OtherLiabilitiesCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>42684000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>45660000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ContractWithCustomerLiabilityCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>6643000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>7595000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CommercialPaper</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>4996000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>5000000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LongTermDebtCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>8773000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>8003000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LiabilitiesCurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>105392000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>106385000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LongTermDebtNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>98667000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>108642000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OtherLiabilitiesNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>54490000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>52953000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LiabilitiesNoncurrent</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>153157000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>161595000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>Liabilities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>258549000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>267980000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CommitmentsAndContingencies</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0.0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0.0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CommonStocksIncludingAdditionalPaidInCapital</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>50779000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>54203000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>RetainedEarningsAccumulatedDeficit</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>14966000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>15261000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>AccumulatedOtherComprehensiveIncomeLossNetOfTax</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-406000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-286000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>StockholdersEquity</th>\n", | |
" <td>90488000000</td>\n", | |
" <td>89531000000</td>\n", | |
" <td>78425000000</td>\n", | |
" <td>65339000000</td>\n", | |
" <td>66224000000</td>\n", | |
" <td>69178000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>LiabilitiesAndStockholdersEquity</th>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>323888000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>337158000000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-c4633127-00ef-4487-86e3-ed225a43e8a1')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-c4633127-00ef-4487-86e3-ed225a43e8a1 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-c4633127-00ef-4487-86e3-ed225a43e8a1');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2019-09-28 ... 2021-03-27\n", | |
"CashAndCashEquivalentsAtCarryingValue NaN ... 38466000000\n", | |
"MarketableSecuritiesCurrent NaN ... 31368000000\n", | |
"AccountsReceivableNetCurrent NaN ... 18503000000\n", | |
"InventoryNet NaN ... 5219000000\n", | |
"NontradeReceivablesCurrent NaN ... 14533000000\n", | |
"OtherAssetsCurrent NaN ... 13376000000\n", | |
"AssetsCurrent NaN ... 121465000000\n", | |
"MarketableSecuritiesNoncurrent NaN ... 134539000000\n", | |
"PropertyPlantAndEquipmentNet NaN ... 37815000000\n", | |
"OtherAssetsNoncurrent NaN ... 43339000000\n", | |
"AssetsNoncurrent NaN ... 215693000000\n", | |
"Assets NaN ... 337158000000\n", | |
"AccountsPayableCurrent NaN ... 40127000000\n", | |
"OtherLiabilitiesCurrent NaN ... 45660000000\n", | |
"ContractWithCustomerLiabilityCurrent NaN ... 7595000000\n", | |
"CommercialPaper NaN ... 5000000000\n", | |
"LongTermDebtCurrent NaN ... 8003000000\n", | |
"LiabilitiesCurrent NaN ... 106385000000\n", | |
"LongTermDebtNoncurrent NaN ... 108642000000\n", | |
"OtherLiabilitiesNoncurrent NaN ... 52953000000\n", | |
"LiabilitiesNoncurrent NaN ... 161595000000\n", | |
"Liabilities NaN ... 267980000000\n", | |
"CommitmentsAndContingencies NaN ... 0.0\n", | |
"CommonStocksIncludingAdditionalPaidInCapital NaN ... 54203000000\n", | |
"RetainedEarningsAccumulatedDeficit NaN ... 15261000000\n", | |
"AccumulatedOtherComprehensiveIncomeLossNetOfTax NaN ... -286000000\n", | |
"StockholdersEquity 90488000000 ... 69178000000\n", | |
"LiabilitiesAndStockholdersEquity NaN ... 337158000000\n", | |
"\n", | |
"[28 rows x 6 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 7 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"\n", | |
"def get_cash_flow_statement(xbrl_json):\n", | |
" cash_flows_store = {}\n", | |
"\n", | |
" for usGaapItem in xbrl_json['StatementsOfCashFlows']:\n", | |
" values = []\n", | |
" indicies = []\n", | |
"\n", | |
" for fact in xbrl_json['StatementsOfCashFlows'][usGaapItem]: \n", | |
" # only consider items without segment.\n", | |
" if 'segment' not in fact:\n", | |
" # check if date instant or date range is present\n", | |
" if \"instant\" in fact['period']:\n", | |
" index = fact['period']['instant']\n", | |
" else:\n", | |
" index = fact['period']['startDate'] + '-' + fact['period']['endDate']\n", | |
"\n", | |
" # avoid duplicate indicies with same values\n", | |
" if index in indicies:\n", | |
" continue\n", | |
"\n", | |
" if \"value\" not in fact:\n", | |
" values.append(0)\n", | |
" else:\n", | |
" values.append(fact['value'])\n", | |
"\n", | |
" indicies.append(index) \n", | |
"\n", | |
" cash_flows_store[usGaapItem] = pd.Series(values, index=indicies) \n", | |
"\n", | |
"\n", | |
" cash_flows = pd.DataFrame(cash_flows_store)\n", | |
" return cash_flows.T\n", | |
" \n", | |
"cash_flows = get_cash_flow_statement(xbrl_json)" | |
], | |
"metadata": { | |
"id": "iSO91uVgjptu" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"cash_flows" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 669 | |
}, | |
"id": "OZucISzYj2JG", | |
"outputId": "850744b0-baae-4d16-8d5d-be61b3108005" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-236c14e0-e2df-4832-b4f2-6b5480758109\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2019-09-28</th>\n", | |
" <th>2019-09-29-2020-03-28</th>\n", | |
" <th>2019-12-29-2020-03-28</th>\n", | |
" <th>2020-03-28</th>\n", | |
" <th>2020-09-26</th>\n", | |
" <th>2020-09-27-2021-03-27</th>\n", | |
" <th>2020-12-27-2021-03-27</th>\n", | |
" <th>2021-03-27</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalents</th>\n", | |
" <td>50224000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>43049000000</td>\n", | |
" <td>39789000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>40006000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetIncomeLoss</th>\n", | |
" <td>NaN</td>\n", | |
" <td>33485000000</td>\n", | |
" <td>11249000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>52385000000</td>\n", | |
" <td>23630000000</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>DepreciationDepletionAndAmortization</th>\n", | |
" <td>NaN</td>\n", | |
" <td>5602000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>5463000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ShareBasedCompensation</th>\n", | |
" <td>NaN</td>\n", | |
" <td>3407000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>4001000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>DeferredIncomeTaxExpenseBenefit</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-651000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-207000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OtherNoncashIncomeExpense</th>\n", | |
" <td>NaN</td>\n", | |
" <td>259000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>474000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInAccountsReceivable</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-7284000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>2347000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInInventories</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-699000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1226000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInOtherReceivables</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-7923000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-6792000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInOtherOperatingAssets</th>\n", | |
" <td>NaN</td>\n", | |
" <td>8866000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>4333000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInAccountsPayable</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-13520000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-1997000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInContractWithCustomerLiability</th>\n", | |
" <td>NaN</td>\n", | |
" <td>1223000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1642000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncreaseDecreaseInOtherOperatingLiabilities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>7500000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>3045000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetCashProvidedByUsedInOperatingActivities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>43827000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>62744000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsToAcquireAvailableForSaleSecuritiesDebt</th>\n", | |
" <td>NaN</td>\n", | |
" <td>66489000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>74424000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromMaturitiesPrepaymentsAndCallsOfAvailableForSaleSecurities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>39738000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>39605000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromSaleOfAvailableForSaleSecuritiesDebt</th>\n", | |
" <td>NaN</td>\n", | |
" <td>27762000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>21645000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsToAcquirePropertyPlantAndEquipment</th>\n", | |
" <td>NaN</td>\n", | |
" <td>3960000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>5769000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsToAcquireBusinessesNetOfCashAcquired</th>\n", | |
" <td>NaN</td>\n", | |
" <td>1134000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>9000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsForProceedsFromOtherInvestingActivities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>572000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetCashProvidedByUsedInInvestingActivities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-4655000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-18952000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromIssuanceOfCommonStock</th>\n", | |
" <td>NaN</td>\n", | |
" <td>430000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>561000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsRelatedToTaxWithholdingForShareBasedCompensation</th>\n", | |
" <td>NaN</td>\n", | |
" <td>1566000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>3160000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsOfDividends</th>\n", | |
" <td>NaN</td>\n", | |
" <td>6914000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>7060000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>PaymentsForRepurchaseOfCommonStock</th>\n", | |
" <td>NaN</td>\n", | |
" <td>39280000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>43323000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromIssuanceOfLongTermDebt</th>\n", | |
" <td>NaN</td>\n", | |
" <td>2210000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>13923000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>RepaymentsOfLongTermDebt</th>\n", | |
" <td>NaN</td>\n", | |
" <td>5250000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>4500000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromRepaymentsOfCommercialPaper</th>\n", | |
" <td>NaN</td>\n", | |
" <td>1518000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>22000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromOtherShortTermDebt</th>\n", | |
" <td>NaN</td>\n", | |
" <td>2556000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>0</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ProceedsFromPaymentsForOtherFinancingActivities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-51000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-38000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetCashProvidedByUsedInFinancingActivities</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-46347000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>-43575000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CashCashEquivalentsRestrictedCashAndRestrictedCashEquivalentsPeriodIncreaseDecreaseIncludingExchangeRateEffect</th>\n", | |
" <td>NaN</td>\n", | |
" <td>-7175000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>217000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeTaxesPaidNet</th>\n", | |
" <td>NaN</td>\n", | |
" <td>7505000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>10276000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>InterestPaidNet</th>\n", | |
" <td>NaN</td>\n", | |
" <td>1689000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" <td>1327000000</td>\n", | |
" <td>NaN</td>\n", | |
" <td>NaN</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-236c14e0-e2df-4832-b4f2-6b5480758109')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-236c14e0-e2df-4832-b4f2-6b5480758109 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-236c14e0-e2df-4832-b4f2-6b5480758109');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2019-09-28 ... 2021-03-27\n", | |
"CashCashEquivalentsRestrictedCashAndRestrictedC... 50224000000 ... 40006000000\n", | |
"NetIncomeLoss NaN ... NaN\n", | |
"DepreciationDepletionAndAmortization NaN ... NaN\n", | |
"ShareBasedCompensation NaN ... NaN\n", | |
"DeferredIncomeTaxExpenseBenefit NaN ... NaN\n", | |
"OtherNoncashIncomeExpense NaN ... NaN\n", | |
"IncreaseDecreaseInAccountsReceivable NaN ... NaN\n", | |
"IncreaseDecreaseInInventories NaN ... NaN\n", | |
"IncreaseDecreaseInOtherReceivables NaN ... NaN\n", | |
"IncreaseDecreaseInOtherOperatingAssets NaN ... NaN\n", | |
"IncreaseDecreaseInAccountsPayable NaN ... NaN\n", | |
"IncreaseDecreaseInContractWithCustomerLiability NaN ... NaN\n", | |
"IncreaseDecreaseInOtherOperatingLiabilities NaN ... NaN\n", | |
"NetCashProvidedByUsedInOperatingActivities NaN ... NaN\n", | |
"PaymentsToAcquireAvailableForSaleSecuritiesDebt NaN ... NaN\n", | |
"ProceedsFromMaturitiesPrepaymentsAndCallsOfAvai... NaN ... NaN\n", | |
"ProceedsFromSaleOfAvailableForSaleSecuritiesDebt NaN ... NaN\n", | |
"PaymentsToAcquirePropertyPlantAndEquipment NaN ... NaN\n", | |
"PaymentsToAcquireBusinessesNetOfCashAcquired NaN ... NaN\n", | |
"PaymentsForProceedsFromOtherInvestingActivities NaN ... NaN\n", | |
"NetCashProvidedByUsedInInvestingActivities NaN ... NaN\n", | |
"ProceedsFromIssuanceOfCommonStock NaN ... NaN\n", | |
"PaymentsRelatedToTaxWithholdingForShareBasedCom... NaN ... NaN\n", | |
"PaymentsOfDividends NaN ... NaN\n", | |
"PaymentsForRepurchaseOfCommonStock NaN ... NaN\n", | |
"ProceedsFromIssuanceOfLongTermDebt NaN ... NaN\n", | |
"RepaymentsOfLongTermDebt NaN ... NaN\n", | |
"ProceedsFromRepaymentsOfCommercialPaper NaN ... NaN\n", | |
"ProceedsFromOtherShortTermDebt NaN ... NaN\n", | |
"ProceedsFromPaymentsForOtherFinancingActivities NaN ... NaN\n", | |
"NetCashProvidedByUsedInFinancingActivities NaN ... NaN\n", | |
"CashCashEquivalentsRestrictedCashAndRestrictedC... NaN ... NaN\n", | |
"IncomeTaxesPaidNet NaN ... NaN\n", | |
"InterestPaidNet NaN ... NaN\n", | |
"\n", | |
"[34 rows x 8 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 10 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sec_api import QueryApi\n", | |
"\n", | |
"# get your API key at https://sec-api.io\n", | |
"query_api = QueryApi(api_key=api_key)\n", | |
"\n", | |
"# fetch all 10-Q and 10-K filings for Apple\n", | |
"query = {\n", | |
" \"query\": {\n", | |
" \"query_string\": {\n", | |
" \"query\": \"(formType:\\\"10-Q\\\" OR formType:\\\"10-K\\\") AND ticker:AAPL\"\n", | |
" }\n", | |
" },\n", | |
" \"from\": \"0\",\n", | |
" \"size\": \"20\",\n", | |
" \"sort\": [{ \"filedAt\": { \"order\": \"desc\" } }]\n", | |
"}\n", | |
"\n", | |
"query_result = query_api.get_filings(query)" | |
], | |
"metadata": { | |
"id": "ZYvKrEthkJSM" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"accession_numbers = []\n", | |
"\n", | |
"# extract accession numbers of each filing\n", | |
"for filing in query_result['filings']:\n", | |
" accession_numbers.append(filing['accessionNo']);\n", | |
"\n", | |
"accession_numbers" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "6V-9o7IQkVNR", | |
"outputId": "80c8144f-f98c-4378-9a2d-253416215ff7" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"['0000320193-22-000007',\n", | |
" '0000320193-21-000105',\n", | |
" '0000320193-21-000065',\n", | |
" '0000320193-21-000056',\n", | |
" '0000320193-21-000010',\n", | |
" '0000320193-20-000096',\n", | |
" '0000320193-20-000062',\n", | |
" '0000320193-20-000052',\n", | |
" '0000320193-20-000010',\n", | |
" '0000320193-19-000119',\n", | |
" '0000320193-19-000076',\n", | |
" '0000320193-19-000066',\n", | |
" '0000320193-19-000010',\n", | |
" '0000320193-18-000145',\n", | |
" '0000320193-18-000100',\n", | |
" '0000320193-18-000070',\n", | |
" '0000320193-18-000007',\n", | |
" '0000320193-17-000070',\n", | |
" '0000320193-17-000009',\n", | |
" '0001628280-17-004790']" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 75 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import time\n", | |
"\n", | |
"# get XBRL-JSON for a given accession number\n", | |
"def get_xbrl_json(accession_no, retry = 0):\n", | |
" request_url = xbrl_converter_api_endpoint + \"?accession-no=\" + accession_no + \"&token=\" + api_key\n", | |
"\n", | |
" # linear backoff in case API fails with \"too many requests\" error\n", | |
" try:\n", | |
" response_tmp = requests.get(request_url)\n", | |
" xbrl_json = json.loads(response_tmp.text)\n", | |
" except:\n", | |
" if retry > 5:\n", | |
" raise Exception('API error')\n", | |
" \n", | |
" # wait 500 milliseconds on error and retry\n", | |
" time.sleep(0.5) \n", | |
" return get_xbrl_json(accession_no, retry + 1)\n", | |
"\n", | |
" return xbrl_json" | |
], | |
"metadata": { | |
"id": "217wZdfnkdw1" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# clean income statement.\n", | |
"# drop duplicate columns (= column name ends with \"_left\"), drop key_0 column, drop columns with +5 NaNs\n", | |
"def clean_income_statement(statement):\n", | |
" for column in statement:\n", | |
"\n", | |
" # column has more than 5 NaN values\n", | |
" is_nan_column = statement[column].isna().sum() > 5\n", | |
"\n", | |
" if column.endswith('_left') or column == 'key_0' or is_nan_column:\n", | |
" statement = statement.drop(column, axis=1)\n", | |
" \n", | |
" # rearrange columns so that first column represents first quarter\n", | |
" # e.g. 2018, 2019, 2020 - and not 2020, 2019, 2018\n", | |
" sorted_columns = sorted(statement.columns.values)\n", | |
" \n", | |
" return statement[sorted_columns]" | |
], | |
"metadata": { | |
"id": "M_CrR8ISkiAo" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# merge two income statements into one statement.\n", | |
"# row indicies of both statements have to be the same\n", | |
"# statement_b represents the most recent statement.\n", | |
"def merge_income_statements(statement_a, statement_b):\n", | |
" return statement_a.merge(statement_b,\n", | |
" how=\"outer\", \n", | |
" # on=statement_b.index, \n", | |
" right_on=statement_b.index, \n", | |
" left_index=True,\n", | |
" # right_index=True,\n", | |
" suffixes=('_left', ''))" | |
], | |
"metadata": { | |
"id": "KQm_3f5lkfnv" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# helps printing dataframes while we generate new income statement\n", | |
"from IPython.display import display, HTML\n", | |
"\n", | |
"previous_income_statement_set = False\n", | |
"income_statement_final = None\n", | |
"\n", | |
"for accession_no in accession_numbers[0:12]:\n", | |
"# for accession_no in accession_numbers: # doesn't work with filings filed before 2017 - indicies not equal\n", | |
" print('Processing: ' + accession_no)\n", | |
" \n", | |
" # get XBRL-JSON of 10-Q or 10-K filing by accession number\n", | |
" xbrl_json_data = get_xbrl_json(accession_no)\n", | |
" \n", | |
" # convert XBRL-JSON to a pandas dataframe\n", | |
" income_statement_uncleaned = get_income_statement(xbrl_json_data)\n", | |
"\n", | |
" # clean the income statement\n", | |
" income_statement_cleaned = clean_income_statement(income_statement_uncleaned)\n", | |
" \n", | |
" # print income statement on each iteration to monitor progress\n", | |
" # display(HTML(income_statement_cleaned.to_html()))\n", | |
" \n", | |
" # merge new income statement with previously generated income statement\n", | |
" if previous_income_statement_set:\n", | |
" income_statement_final = clean_income_statement(merge_income_statements(income_statement_final, income_statement_cleaned))\n", | |
" else:\n", | |
" income_statement_final = income_statement_cleaned\n", | |
" previous_income_statement_set = True" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "F-5_i9kDkrwm", | |
"outputId": "72a94135-4f26-4922-9a67-5f4069dd936d" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Processing: 0000320193-22-000007\n", | |
"Processing: 0000320193-21-000105\n", | |
"Processing: 0000320193-21-000065\n", | |
"Processing: 0000320193-21-000056\n", | |
"Processing: 0000320193-21-000010\n", | |
"Processing: 0000320193-20-000096\n", | |
"Processing: 0000320193-20-000062\n", | |
"Processing: 0000320193-20-000052\n", | |
"Processing: 0000320193-20-000010\n", | |
"Processing: 0000320193-19-000119\n", | |
"Processing: 0000320193-19-000076\n", | |
"Processing: 0000320193-19-000066\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"income_statement_final" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 462 | |
}, | |
"id": "eQ03kAQnxfp_", | |
"outputId": "8abf5895-4215-4569-956f-594dd7cdd8a9" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-3f39b1c1-dcf6-4191-ae9c-8a741c979be7\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2016-09-25-2017-09-30</th>\n", | |
" <th>2017-10-01-2018-03-31</th>\n", | |
" <th>2017-10-01-2018-06-30</th>\n", | |
" <th>2017-10-01-2018-09-29</th>\n", | |
" <th>2017-12-31-2018-03-31</th>\n", | |
" <th>2018-04-01-2018-06-30</th>\n", | |
" <th>2018-09-30-2018-12-29</th>\n", | |
" <th>2018-09-30-2019-03-30</th>\n", | |
" <th>2018-09-30-2019-06-29</th>\n", | |
" <th>2018-09-30-2019-09-28</th>\n", | |
" <th>2018-12-30-2019-03-30</th>\n", | |
" <th>2019-03-31-2019-06-29</th>\n", | |
" <th>2019-09-29-2019-12-28</th>\n", | |
" <th>2019-09-29-2020-03-28</th>\n", | |
" <th>2019-09-29-2020-06-27</th>\n", | |
" <th>2019-09-29-2020-09-26</th>\n", | |
" <th>2019-12-29-2020-03-28</th>\n", | |
" <th>2020-03-29-2020-06-27</th>\n", | |
" <th>2020-09-27-2020-12-26</th>\n", | |
" <th>2020-09-27-2021-03-27</th>\n", | |
" <th>2020-09-27-2021-06-26</th>\n", | |
" <th>2020-09-27-2021-09-25</th>\n", | |
" <th>2020-12-27-2021-03-27</th>\n", | |
" <th>2021-03-28-2021-06-26</th>\n", | |
" <th>2021-09-26-2021-12-25</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>RevenueFromContractWithCustomerExcludingAssessedTax</th>\n", | |
" <td>229234000000</td>\n", | |
" <td>149430000000</td>\n", | |
" <td>202695000000</td>\n", | |
" <td>265595000000</td>\n", | |
" <td>61137000000</td>\n", | |
" <td>53265000000</td>\n", | |
" <td>84310000000</td>\n", | |
" <td>142325000000</td>\n", | |
" <td>196134000000</td>\n", | |
" <td>260174000000</td>\n", | |
" <td>58015000000</td>\n", | |
" <td>53809000000</td>\n", | |
" <td>91819000000</td>\n", | |
" <td>150132000000</td>\n", | |
" <td>209817000000</td>\n", | |
" <td>274515000000</td>\n", | |
" <td>58313000000</td>\n", | |
" <td>59685000000</td>\n", | |
" <td>111439000000</td>\n", | |
" <td>201023000000</td>\n", | |
" <td>282457000000</td>\n", | |
" <td>365817000000</td>\n", | |
" <td>89584000000</td>\n", | |
" <td>81434000000</td>\n", | |
" <td>123945000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CostOfGoodsAndServicesSold</th>\n", | |
" <td>141048000000</td>\n", | |
" <td>92096000000</td>\n", | |
" <td>124940000000</td>\n", | |
" <td>163756000000</td>\n", | |
" <td>37715000000</td>\n", | |
" <td>32844000000</td>\n", | |
" <td>52279000000</td>\n", | |
" <td>88473000000</td>\n", | |
" <td>122055000000</td>\n", | |
" <td>161782000000</td>\n", | |
" <td>36194000000</td>\n", | |
" <td>33582000000</td>\n", | |
" <td>56602000000</td>\n", | |
" <td>92545000000</td>\n", | |
" <td>129550000000</td>\n", | |
" <td>169559000000</td>\n", | |
" <td>35943000000</td>\n", | |
" <td>37005000000</td>\n", | |
" <td>67111000000</td>\n", | |
" <td>118616000000</td>\n", | |
" <td>164795000000</td>\n", | |
" <td>212981000000</td>\n", | |
" <td>51505000000</td>\n", | |
" <td>46179000000</td>\n", | |
" <td>69702000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GrossProfit</th>\n", | |
" <td>88186000000</td>\n", | |
" <td>57334000000</td>\n", | |
" <td>77755000000</td>\n", | |
" <td>101839000000</td>\n", | |
" <td>23422000000</td>\n", | |
" <td>20421000000</td>\n", | |
" <td>32031000000</td>\n", | |
" <td>53852000000</td>\n", | |
" <td>74079000000</td>\n", | |
" <td>98392000000</td>\n", | |
" <td>21821000000</td>\n", | |
" <td>20227000000</td>\n", | |
" <td>35217000000</td>\n", | |
" <td>57587000000</td>\n", | |
" <td>80267000000</td>\n", | |
" <td>104956000000</td>\n", | |
" <td>22370000000</td>\n", | |
" <td>22680000000</td>\n", | |
" <td>44328000000</td>\n", | |
" <td>82407000000</td>\n", | |
" <td>117662000000</td>\n", | |
" <td>152836000000</td>\n", | |
" <td>38079000000</td>\n", | |
" <td>35255000000</td>\n", | |
" <td>54243000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ResearchAndDevelopmentExpense</th>\n", | |
" <td>11581000000</td>\n", | |
" <td>6785000000</td>\n", | |
" <td>10486000000</td>\n", | |
" <td>14236000000</td>\n", | |
" <td>3378000000</td>\n", | |
" <td>3701000000</td>\n", | |
" <td>3902000000</td>\n", | |
" <td>7850000000</td>\n", | |
" <td>12107000000</td>\n", | |
" <td>16217000000</td>\n", | |
" <td>3948000000</td>\n", | |
" <td>4257000000</td>\n", | |
" <td>4451000000</td>\n", | |
" <td>9016000000</td>\n", | |
" <td>13774000000</td>\n", | |
" <td>18752000000</td>\n", | |
" <td>4565000000</td>\n", | |
" <td>4758000000</td>\n", | |
" <td>5163000000</td>\n", | |
" <td>10425000000</td>\n", | |
" <td>16142000000</td>\n", | |
" <td>21914000000</td>\n", | |
" <td>5262000000</td>\n", | |
" <td>5717000000</td>\n", | |
" <td>6306000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>SellingGeneralAndAdministrativeExpense</th>\n", | |
" <td>15261000000</td>\n", | |
" <td>8381000000</td>\n", | |
" <td>12489000000</td>\n", | |
" <td>16705000000</td>\n", | |
" <td>4150000000</td>\n", | |
" <td>4108000000</td>\n", | |
" <td>4783000000</td>\n", | |
" <td>9241000000</td>\n", | |
" <td>13667000000</td>\n", | |
" <td>18245000000</td>\n", | |
" <td>4458000000</td>\n", | |
" <td>4426000000</td>\n", | |
" <td>5197000000</td>\n", | |
" <td>10149000000</td>\n", | |
" <td>14980000000</td>\n", | |
" <td>19916000000</td>\n", | |
" <td>4952000000</td>\n", | |
" <td>4831000000</td>\n", | |
" <td>5631000000</td>\n", | |
" <td>10945000000</td>\n", | |
" <td>16357000000</td>\n", | |
" <td>21973000000</td>\n", | |
" <td>5314000000</td>\n", | |
" <td>5412000000</td>\n", | |
" <td>6449000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingExpenses</th>\n", | |
" <td>26842000000</td>\n", | |
" <td>15166000000</td>\n", | |
" <td>22975000000</td>\n", | |
" <td>30941000000</td>\n", | |
" <td>7528000000</td>\n", | |
" <td>7809000000</td>\n", | |
" <td>8685000000</td>\n", | |
" <td>17091000000</td>\n", | |
" <td>25774000000</td>\n", | |
" <td>34462000000</td>\n", | |
" <td>8406000000</td>\n", | |
" <td>8683000000</td>\n", | |
" <td>9648000000</td>\n", | |
" <td>19165000000</td>\n", | |
" <td>28754000000</td>\n", | |
" <td>38668000000</td>\n", | |
" <td>9517000000</td>\n", | |
" <td>9589000000</td>\n", | |
" <td>10794000000</td>\n", | |
" <td>21370000000</td>\n", | |
" <td>32499000000</td>\n", | |
" <td>43887000000</td>\n", | |
" <td>10576000000</td>\n", | |
" <td>11129000000</td>\n", | |
" <td>12755000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingIncomeLoss</th>\n", | |
" <td>61344000000</td>\n", | |
" <td>42168000000</td>\n", | |
" <td>54780000000</td>\n", | |
" <td>70898000000</td>\n", | |
" <td>15894000000</td>\n", | |
" <td>12612000000</td>\n", | |
" <td>23346000000</td>\n", | |
" <td>36761000000</td>\n", | |
" <td>48305000000</td>\n", | |
" <td>63930000000</td>\n", | |
" <td>13415000000</td>\n", | |
" <td>11544000000</td>\n", | |
" <td>25569000000</td>\n", | |
" <td>38422000000</td>\n", | |
" <td>51513000000</td>\n", | |
" <td>66288000000</td>\n", | |
" <td>12853000000</td>\n", | |
" <td>13091000000</td>\n", | |
" <td>33534000000</td>\n", | |
" <td>61037000000</td>\n", | |
" <td>85163000000</td>\n", | |
" <td>108949000000</td>\n", | |
" <td>27503000000</td>\n", | |
" <td>24126000000</td>\n", | |
" <td>41488000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NonoperatingIncomeExpense</th>\n", | |
" <td>2745000000</td>\n", | |
" <td>1030000000</td>\n", | |
" <td>1702000000</td>\n", | |
" <td>2005000000</td>\n", | |
" <td>274000000</td>\n", | |
" <td>672000000</td>\n", | |
" <td>560000000</td>\n", | |
" <td>938000000</td>\n", | |
" <td>1305000000</td>\n", | |
" <td>1807000000</td>\n", | |
" <td>378000000</td>\n", | |
" <td>367000000</td>\n", | |
" <td>349000000</td>\n", | |
" <td>631000000</td>\n", | |
" <td>677000000</td>\n", | |
" <td>803000000</td>\n", | |
" <td>282000000</td>\n", | |
" <td>46000000</td>\n", | |
" <td>45000000</td>\n", | |
" <td>553000000</td>\n", | |
" <td>796000000</td>\n", | |
" <td>258000000</td>\n", | |
" <td>508000000</td>\n", | |
" <td>243000000</td>\n", | |
" <td>-247000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest</th>\n", | |
" <td>64089000000</td>\n", | |
" <td>43198000000</td>\n", | |
" <td>56482000000</td>\n", | |
" <td>72903000000</td>\n", | |
" <td>16168000000</td>\n", | |
" <td>13284000000</td>\n", | |
" <td>23906000000</td>\n", | |
" <td>37699000000</td>\n", | |
" <td>49610000000</td>\n", | |
" <td>65737000000</td>\n", | |
" <td>13793000000</td>\n", | |
" <td>11911000000</td>\n", | |
" <td>25918000000</td>\n", | |
" <td>39053000000</td>\n", | |
" <td>52190000000</td>\n", | |
" <td>67091000000</td>\n", | |
" <td>13135000000</td>\n", | |
" <td>13137000000</td>\n", | |
" <td>33579000000</td>\n", | |
" <td>61590000000</td>\n", | |
" <td>85959000000</td>\n", | |
" <td>109207000000</td>\n", | |
" <td>28011000000</td>\n", | |
" <td>24369000000</td>\n", | |
" <td>41241000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeTaxExpenseBenefit</th>\n", | |
" <td>15738000000</td>\n", | |
" <td>9311000000</td>\n", | |
" <td>11076000000</td>\n", | |
" <td>13372000000</td>\n", | |
" <td>2346000000</td>\n", | |
" <td>1765000000</td>\n", | |
" <td>3941000000</td>\n", | |
" <td>6173000000</td>\n", | |
" <td>8040000000</td>\n", | |
" <td>10481000000</td>\n", | |
" <td>2232000000</td>\n", | |
" <td>1867000000</td>\n", | |
" <td>3682000000</td>\n", | |
" <td>5568000000</td>\n", | |
" <td>7452000000</td>\n", | |
" <td>9680000000</td>\n", | |
" <td>1886000000</td>\n", | |
" <td>1884000000</td>\n", | |
" <td>4824000000</td>\n", | |
" <td>9205000000</td>\n", | |
" <td>11830000000</td>\n", | |
" <td>14527000000</td>\n", | |
" <td>4381000000</td>\n", | |
" <td>2625000000</td>\n", | |
" <td>6611000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetIncomeLoss</th>\n", | |
" <td>48351000000</td>\n", | |
" <td>33887000000</td>\n", | |
" <td>45406000000</td>\n", | |
" <td>59531000000</td>\n", | |
" <td>13822000000</td>\n", | |
" <td>11519000000</td>\n", | |
" <td>19965000000</td>\n", | |
" <td>31526000000</td>\n", | |
" <td>41570000000</td>\n", | |
" <td>55256000000</td>\n", | |
" <td>11561000000</td>\n", | |
" <td>10044000000</td>\n", | |
" <td>22236000000</td>\n", | |
" <td>33485000000</td>\n", | |
" <td>44738000000</td>\n", | |
" <td>57411000000</td>\n", | |
" <td>11249000000</td>\n", | |
" <td>11253000000</td>\n", | |
" <td>28755000000</td>\n", | |
" <td>52385000000</td>\n", | |
" <td>74129000000</td>\n", | |
" <td>94680000000</td>\n", | |
" <td>23630000000</td>\n", | |
" <td>21744000000</td>\n", | |
" <td>34630000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareBasic</th>\n", | |
" <td>9.27</td>\n", | |
" <td>6.69</td>\n", | |
" <td>9.07</td>\n", | |
" <td>12.01</td>\n", | |
" <td>2.75</td>\n", | |
" <td>2.36</td>\n", | |
" <td>4.22</td>\n", | |
" <td>6.70</td>\n", | |
" <td>8.92</td>\n", | |
" <td>11.97</td>\n", | |
" <td>2.47</td>\n", | |
" <td>2.20</td>\n", | |
" <td>5.04</td>\n", | |
" <td>7.63</td>\n", | |
" <td>10.25</td>\n", | |
" <td>3.31</td>\n", | |
" <td>2.58</td>\n", | |
" <td>2.61</td>\n", | |
" <td>1.70</td>\n", | |
" <td>3.11</td>\n", | |
" <td>4.42</td>\n", | |
" <td>5.67</td>\n", | |
" <td>1.41</td>\n", | |
" <td>1.31</td>\n", | |
" <td>2.11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareDiluted</th>\n", | |
" <td>9.21</td>\n", | |
" <td>6.63</td>\n", | |
" <td>8.99</td>\n", | |
" <td>11.91</td>\n", | |
" <td>2.73</td>\n", | |
" <td>2.34</td>\n", | |
" <td>4.18</td>\n", | |
" <td>6.66</td>\n", | |
" <td>8.86</td>\n", | |
" <td>11.89</td>\n", | |
" <td>2.46</td>\n", | |
" <td>2.18</td>\n", | |
" <td>4.99</td>\n", | |
" <td>7.56</td>\n", | |
" <td>10.16</td>\n", | |
" <td>3.28</td>\n", | |
" <td>2.55</td>\n", | |
" <td>2.58</td>\n", | |
" <td>1.68</td>\n", | |
" <td>3.08</td>\n", | |
" <td>4.38</td>\n", | |
" <td>5.61</td>\n", | |
" <td>1.40</td>\n", | |
" <td>1.30</td>\n", | |
" <td>2.10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfSharesOutstandingBasic</th>\n", | |
" <td>5217242000</td>\n", | |
" <td>5068877000</td>\n", | |
" <td>5006640000</td>\n", | |
" <td>4955377000</td>\n", | |
" <td>5024877000</td>\n", | |
" <td>4882167000</td>\n", | |
" <td>4735820000</td>\n", | |
" <td>4704945000</td>\n", | |
" <td>4660175000</td>\n", | |
" <td>4617834000</td>\n", | |
" <td>4674071000</td>\n", | |
" <td>4570633000</td>\n", | |
" <td>4415040000</td>\n", | |
" <td>4387570000</td>\n", | |
" <td>4362571000</td>\n", | |
" <td>17352119000</td>\n", | |
" <td>4360101000</td>\n", | |
" <td>4312573000</td>\n", | |
" <td>16935119000</td>\n", | |
" <td>16844298000</td>\n", | |
" <td>16772656000</td>\n", | |
" <td>16701272000</td>\n", | |
" <td>16753476000</td>\n", | |
" <td>16629371000</td>\n", | |
" <td>16391724000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfDilutedSharesOutstanding</th>\n", | |
" <td>5251692000</td>\n", | |
" <td>5113140000</td>\n", | |
" <td>5050963000</td>\n", | |
" <td>5000109000</td>\n", | |
" <td>5068493000</td>\n", | |
" <td>4926609000</td>\n", | |
" <td>4773252000</td>\n", | |
" <td>4736949000</td>\n", | |
" <td>4691759000</td>\n", | |
" <td>4648913000</td>\n", | |
" <td>4700646000</td>\n", | |
" <td>4601380000</td>\n", | |
" <td>4454604000</td>\n", | |
" <td>4429648000</td>\n", | |
" <td>4404695000</td>\n", | |
" <td>17528214000</td>\n", | |
" <td>4404691000</td>\n", | |
" <td>4354788000</td>\n", | |
" <td>17113688000</td>\n", | |
" <td>17021423000</td>\n", | |
" <td>16941527000</td>\n", | |
" <td>16864919000</td>\n", | |
" <td>16929157000</td>\n", | |
" <td>16781735000</td>\n", | |
" <td>16519291000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3f39b1c1-dcf6-4191-ae9c-8a741c979be7')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-3f39b1c1-dcf6-4191-ae9c-8a741c979be7 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-3f39b1c1-dcf6-4191-ae9c-8a741c979be7');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2016-09-25-2017-09-30 ... 2021-09-26-2021-12-25\n", | |
"RevenueFromContractWithCustomerExcludingAssesse... 229234000000 ... 123945000000\n", | |
"CostOfGoodsAndServicesSold 141048000000 ... 69702000000\n", | |
"GrossProfit 88186000000 ... 54243000000\n", | |
"ResearchAndDevelopmentExpense 11581000000 ... 6306000000\n", | |
"SellingGeneralAndAdministrativeExpense 15261000000 ... 6449000000\n", | |
"OperatingExpenses 26842000000 ... 12755000000\n", | |
"OperatingIncomeLoss 61344000000 ... 41488000000\n", | |
"NonoperatingIncomeExpense 2745000000 ... -247000000\n", | |
"IncomeLossFromContinuingOperationsBeforeIncomeT... 64089000000 ... 41241000000\n", | |
"IncomeTaxExpenseBenefit 15738000000 ... 6611000000\n", | |
"NetIncomeLoss 48351000000 ... 34630000000\n", | |
"EarningsPerShareBasic 9.27 ... 2.11\n", | |
"EarningsPerShareDiluted 9.21 ... 2.10\n", | |
"WeightedAverageNumberOfSharesOutstandingBasic 5217242000 ... 16391724000\n", | |
"WeightedAverageNumberOfDilutedSharesOutstanding 5251692000 ... 16519291000\n", | |
"\n", | |
"[15 rows x 25 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 172 | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Warning: Total number of columns (25) exceeds max_columns (20) limiting to first (20) columns.\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from datetime import datetime\n", | |
"\n", | |
"# convert string to int or float\n", | |
"def num(string):\n", | |
" try:\n", | |
" return int(string)\n", | |
" except ValueError:\n", | |
" return float(string)\n", | |
" \n", | |
"# calculate 4th quarter results\n", | |
"# 4th quarter results are not reported seperately and have to be calculated using yearly and 9-month results\n", | |
"def add_fourth_quarter_results(statement):\n", | |
" for column in statement:\n", | |
"\n", | |
" # ['2018', '09', '30', '2019', '09', '28']\n", | |
" date_strings = [a for a in column.split('-')] \n", | |
"\n", | |
" d0 = datetime.strptime(date_strings[0] + date_strings[1] + date_strings[2], '%Y%m%d')\n", | |
" d1 = datetime.strptime(date_strings[3] + date_strings[4] + date_strings[5], '%Y%m%d')\n", | |
"\n", | |
" delta = d1 - d0\n", | |
"\n", | |
" # is annual results column\n", | |
" if delta.days > 350:\n", | |
" for column_1 in statement:\n", | |
" date_strings_1 = [a for a in column_1.split('-')]\n", | |
"\n", | |
" d1_0 = datetime.strptime(date_strings_1[0] + date_strings_1[1] + date_strings_1[2], '%Y%m%d')\n", | |
" d1_1 = datetime.strptime(date_strings_1[3] + date_strings_1[4] + date_strings_1[5], '%Y%m%d')\n", | |
"\n", | |
" delta_1 = d1_1 - d1_0\n", | |
"\n", | |
" # same starting month and 9-month results\n", | |
" # calculate 4th quarter\n", | |
" if d1_0 == d0 and delta_1.days > 200 and delta_1.days < 350:\n", | |
" fourth_quarter_column_name = column_1[11:] + column[10:]\n", | |
"\n", | |
" fourth_quarter_values = []\n", | |
"\n", | |
" for row_key, row_value in statement[column].iteritems():\n", | |
" value = num(statement[column][row_key]) - num(statement[column_1][row_key])\n", | |
" \n", | |
" if isinstance(value, float):\n", | |
" value = round(value, 2)\n", | |
" \n", | |
" fourth_quarter_values.append(str(value))\n", | |
"\n", | |
" statement[fourth_quarter_column_name] = fourth_quarter_values\n", | |
" \n", | |
" # Calculate correct values of\n", | |
" # WeightedAverageNumberOfSharesOutstandingBasic = use value of annual result\n", | |
" # WeightedAverageNumberOfDilutedSharesOutstanding = use value of annual result\n", | |
" # EarningsPerShareBasic = NetIncomeLoss / WeightedAverageNumberOfSharesOutstandingBasic\n", | |
" # EarningsPerShareDiluted = NetIncomeLoss / WeightedAverageNumberOfDilutedSharesOutstanding\n", | |
" statement[fourth_quarter_column_name][\"WeightedAverageNumberOfSharesOutstandingBasic\"] = statement[column][\"WeightedAverageNumberOfSharesOutstandingBasic\"]\n", | |
" statement[fourth_quarter_column_name][\"WeightedAverageNumberOfDilutedSharesOutstanding\"] = statement[column][\"WeightedAverageNumberOfDilutedSharesOutstanding\"]\n", | |
"\n", | |
" statement[fourth_quarter_column_name][\"EarningsPerShareBasic\"] = round(num(statement[fourth_quarter_column_name][\"NetIncomeLoss\"]) / \n", | |
" num(statement[fourth_quarter_column_name][\"WeightedAverageNumberOfSharesOutstandingBasic\"]), 2)\n", | |
" \n", | |
" statement[fourth_quarter_column_name][\"EarningsPerShareDiluted\"] = round(num(statement[fourth_quarter_column_name][\"NetIncomeLoss\"]) / \n", | |
" num(statement[fourth_quarter_column_name][\"WeightedAverageNumberOfDilutedSharesOutstanding\"]), 2)\n", | |
" \n", | |
" # sort columns\n", | |
" sorted_columns = sorted(statement.columns.values)\n", | |
" \n", | |
" return statement[sorted_columns]" | |
], | |
"metadata": { | |
"id": "V34P7ptkkuRR" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"statement = income_statement_final\n", | |
"statement_1 = add_fourth_quarter_results(statement)" | |
], | |
"metadata": { | |
"id": "eQrdYzjzu_0i" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"statement_1" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 462 | |
}, | |
"id": "olTvx_U_vIir", | |
"outputId": "9c691666-9d05-4340-c837-70623414fea9" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-691a5eb0-28d1-4c07-bd30-33dfdbff3f8e\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2017-10-01-2018-09-29</th>\n", | |
" <th>2018-09-30-2018-12-29</th>\n", | |
" <th>2018-09-30-2019-03-30</th>\n", | |
" <th>2018-09-30-2019-06-29</th>\n", | |
" <th>2018-09-30-2019-09-28</th>\n", | |
" <th>2018-12-30-2019-03-30</th>\n", | |
" <th>2019-03-31-2019-06-29</th>\n", | |
" <th>2019-06-29-2019-09-28</th>\n", | |
" <th>2019-09-29-2019-12-28</th>\n", | |
" <th>2019-09-29-2020-03-28</th>\n", | |
" <th>2019-09-29-2020-06-27</th>\n", | |
" <th>2019-09-29-2020-09-26</th>\n", | |
" <th>2019-12-29-2020-03-28</th>\n", | |
" <th>2020-03-29-2020-06-27</th>\n", | |
" <th>2020-06-27-2020-09-26</th>\n", | |
" <th>2020-09-27-2020-12-26</th>\n", | |
" <th>2020-09-27-2021-03-27</th>\n", | |
" <th>2020-09-27-2021-06-26</th>\n", | |
" <th>2020-09-27-2021-09-25</th>\n", | |
" <th>2020-12-27-2021-03-27</th>\n", | |
" <th>2021-03-28-2021-06-26</th>\n", | |
" <th>2021-06-26-2021-09-25</th>\n", | |
" <th>2021-09-26-2021-12-25</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>RevenueFromContractWithCustomerExcludingAssessedTax</th>\n", | |
" <td>265595000000</td>\n", | |
" <td>84310000000</td>\n", | |
" <td>142325000000</td>\n", | |
" <td>196134000000</td>\n", | |
" <td>260174000000</td>\n", | |
" <td>58015000000</td>\n", | |
" <td>53809000000</td>\n", | |
" <td>64040000000</td>\n", | |
" <td>91819000000</td>\n", | |
" <td>150132000000</td>\n", | |
" <td>209817000000</td>\n", | |
" <td>274515000000</td>\n", | |
" <td>58313000000</td>\n", | |
" <td>59685000000</td>\n", | |
" <td>64698000000</td>\n", | |
" <td>111439000000</td>\n", | |
" <td>201023000000</td>\n", | |
" <td>282457000000</td>\n", | |
" <td>365817000000</td>\n", | |
" <td>89584000000</td>\n", | |
" <td>81434000000</td>\n", | |
" <td>83360000000</td>\n", | |
" <td>123945000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CostOfGoodsAndServicesSold</th>\n", | |
" <td>163756000000</td>\n", | |
" <td>52279000000</td>\n", | |
" <td>88473000000</td>\n", | |
" <td>122055000000</td>\n", | |
" <td>161782000000</td>\n", | |
" <td>36194000000</td>\n", | |
" <td>33582000000</td>\n", | |
" <td>39727000000</td>\n", | |
" <td>56602000000</td>\n", | |
" <td>92545000000</td>\n", | |
" <td>129550000000</td>\n", | |
" <td>169559000000</td>\n", | |
" <td>35943000000</td>\n", | |
" <td>37005000000</td>\n", | |
" <td>40009000000</td>\n", | |
" <td>67111000000</td>\n", | |
" <td>118616000000</td>\n", | |
" <td>164795000000</td>\n", | |
" <td>212981000000</td>\n", | |
" <td>51505000000</td>\n", | |
" <td>46179000000</td>\n", | |
" <td>48186000000</td>\n", | |
" <td>69702000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GrossProfit</th>\n", | |
" <td>101839000000</td>\n", | |
" <td>32031000000</td>\n", | |
" <td>53852000000</td>\n", | |
" <td>74079000000</td>\n", | |
" <td>98392000000</td>\n", | |
" <td>21821000000</td>\n", | |
" <td>20227000000</td>\n", | |
" <td>24313000000</td>\n", | |
" <td>35217000000</td>\n", | |
" <td>57587000000</td>\n", | |
" <td>80267000000</td>\n", | |
" <td>104956000000</td>\n", | |
" <td>22370000000</td>\n", | |
" <td>22680000000</td>\n", | |
" <td>24689000000</td>\n", | |
" <td>44328000000</td>\n", | |
" <td>82407000000</td>\n", | |
" <td>117662000000</td>\n", | |
" <td>152836000000</td>\n", | |
" <td>38079000000</td>\n", | |
" <td>35255000000</td>\n", | |
" <td>35174000000</td>\n", | |
" <td>54243000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ResearchAndDevelopmentExpense</th>\n", | |
" <td>14236000000</td>\n", | |
" <td>3902000000</td>\n", | |
" <td>7850000000</td>\n", | |
" <td>12107000000</td>\n", | |
" <td>16217000000</td>\n", | |
" <td>3948000000</td>\n", | |
" <td>4257000000</td>\n", | |
" <td>4110000000</td>\n", | |
" <td>4451000000</td>\n", | |
" <td>9016000000</td>\n", | |
" <td>13774000000</td>\n", | |
" <td>18752000000</td>\n", | |
" <td>4565000000</td>\n", | |
" <td>4758000000</td>\n", | |
" <td>4978000000</td>\n", | |
" <td>5163000000</td>\n", | |
" <td>10425000000</td>\n", | |
" <td>16142000000</td>\n", | |
" <td>21914000000</td>\n", | |
" <td>5262000000</td>\n", | |
" <td>5717000000</td>\n", | |
" <td>5772000000</td>\n", | |
" <td>6306000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>SellingGeneralAndAdministrativeExpense</th>\n", | |
" <td>16705000000</td>\n", | |
" <td>4783000000</td>\n", | |
" <td>9241000000</td>\n", | |
" <td>13667000000</td>\n", | |
" <td>18245000000</td>\n", | |
" <td>4458000000</td>\n", | |
" <td>4426000000</td>\n", | |
" <td>4578000000</td>\n", | |
" <td>5197000000</td>\n", | |
" <td>10149000000</td>\n", | |
" <td>14980000000</td>\n", | |
" <td>19916000000</td>\n", | |
" <td>4952000000</td>\n", | |
" <td>4831000000</td>\n", | |
" <td>4936000000</td>\n", | |
" <td>5631000000</td>\n", | |
" <td>10945000000</td>\n", | |
" <td>16357000000</td>\n", | |
" <td>21973000000</td>\n", | |
" <td>5314000000</td>\n", | |
" <td>5412000000</td>\n", | |
" <td>5616000000</td>\n", | |
" <td>6449000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingExpenses</th>\n", | |
" <td>30941000000</td>\n", | |
" <td>8685000000</td>\n", | |
" <td>17091000000</td>\n", | |
" <td>25774000000</td>\n", | |
" <td>34462000000</td>\n", | |
" <td>8406000000</td>\n", | |
" <td>8683000000</td>\n", | |
" <td>8688000000</td>\n", | |
" <td>9648000000</td>\n", | |
" <td>19165000000</td>\n", | |
" <td>28754000000</td>\n", | |
" <td>38668000000</td>\n", | |
" <td>9517000000</td>\n", | |
" <td>9589000000</td>\n", | |
" <td>9914000000</td>\n", | |
" <td>10794000000</td>\n", | |
" <td>21370000000</td>\n", | |
" <td>32499000000</td>\n", | |
" <td>43887000000</td>\n", | |
" <td>10576000000</td>\n", | |
" <td>11129000000</td>\n", | |
" <td>11388000000</td>\n", | |
" <td>12755000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingIncomeLoss</th>\n", | |
" <td>70898000000</td>\n", | |
" <td>23346000000</td>\n", | |
" <td>36761000000</td>\n", | |
" <td>48305000000</td>\n", | |
" <td>63930000000</td>\n", | |
" <td>13415000000</td>\n", | |
" <td>11544000000</td>\n", | |
" <td>15625000000</td>\n", | |
" <td>25569000000</td>\n", | |
" <td>38422000000</td>\n", | |
" <td>51513000000</td>\n", | |
" <td>66288000000</td>\n", | |
" <td>12853000000</td>\n", | |
" <td>13091000000</td>\n", | |
" <td>14775000000</td>\n", | |
" <td>33534000000</td>\n", | |
" <td>61037000000</td>\n", | |
" <td>85163000000</td>\n", | |
" <td>108949000000</td>\n", | |
" <td>27503000000</td>\n", | |
" <td>24126000000</td>\n", | |
" <td>23786000000</td>\n", | |
" <td>41488000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NonoperatingIncomeExpense</th>\n", | |
" <td>2005000000</td>\n", | |
" <td>560000000</td>\n", | |
" <td>938000000</td>\n", | |
" <td>1305000000</td>\n", | |
" <td>1807000000</td>\n", | |
" <td>378000000</td>\n", | |
" <td>367000000</td>\n", | |
" <td>502000000</td>\n", | |
" <td>349000000</td>\n", | |
" <td>631000000</td>\n", | |
" <td>677000000</td>\n", | |
" <td>803000000</td>\n", | |
" <td>282000000</td>\n", | |
" <td>46000000</td>\n", | |
" <td>126000000</td>\n", | |
" <td>45000000</td>\n", | |
" <td>553000000</td>\n", | |
" <td>796000000</td>\n", | |
" <td>258000000</td>\n", | |
" <td>508000000</td>\n", | |
" <td>243000000</td>\n", | |
" <td>-538000000</td>\n", | |
" <td>-247000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest</th>\n", | |
" <td>72903000000</td>\n", | |
" <td>23906000000</td>\n", | |
" <td>37699000000</td>\n", | |
" <td>49610000000</td>\n", | |
" <td>65737000000</td>\n", | |
" <td>13793000000</td>\n", | |
" <td>11911000000</td>\n", | |
" <td>16127000000</td>\n", | |
" <td>25918000000</td>\n", | |
" <td>39053000000</td>\n", | |
" <td>52190000000</td>\n", | |
" <td>67091000000</td>\n", | |
" <td>13135000000</td>\n", | |
" <td>13137000000</td>\n", | |
" <td>14901000000</td>\n", | |
" <td>33579000000</td>\n", | |
" <td>61590000000</td>\n", | |
" <td>85959000000</td>\n", | |
" <td>109207000000</td>\n", | |
" <td>28011000000</td>\n", | |
" <td>24369000000</td>\n", | |
" <td>23248000000</td>\n", | |
" <td>41241000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeTaxExpenseBenefit</th>\n", | |
" <td>13372000000</td>\n", | |
" <td>3941000000</td>\n", | |
" <td>6173000000</td>\n", | |
" <td>8040000000</td>\n", | |
" <td>10481000000</td>\n", | |
" <td>2232000000</td>\n", | |
" <td>1867000000</td>\n", | |
" <td>2441000000</td>\n", | |
" <td>3682000000</td>\n", | |
" <td>5568000000</td>\n", | |
" <td>7452000000</td>\n", | |
" <td>9680000000</td>\n", | |
" <td>1886000000</td>\n", | |
" <td>1884000000</td>\n", | |
" <td>2228000000</td>\n", | |
" <td>4824000000</td>\n", | |
" <td>9205000000</td>\n", | |
" <td>11830000000</td>\n", | |
" <td>14527000000</td>\n", | |
" <td>4381000000</td>\n", | |
" <td>2625000000</td>\n", | |
" <td>2697000000</td>\n", | |
" <td>6611000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetIncomeLoss</th>\n", | |
" <td>59531000000</td>\n", | |
" <td>19965000000</td>\n", | |
" <td>31526000000</td>\n", | |
" <td>41570000000</td>\n", | |
" <td>55256000000</td>\n", | |
" <td>11561000000</td>\n", | |
" <td>10044000000</td>\n", | |
" <td>13686000000</td>\n", | |
" <td>22236000000</td>\n", | |
" <td>33485000000</td>\n", | |
" <td>44738000000</td>\n", | |
" <td>57411000000</td>\n", | |
" <td>11249000000</td>\n", | |
" <td>11253000000</td>\n", | |
" <td>12673000000</td>\n", | |
" <td>28755000000</td>\n", | |
" <td>52385000000</td>\n", | |
" <td>74129000000</td>\n", | |
" <td>94680000000</td>\n", | |
" <td>23630000000</td>\n", | |
" <td>21744000000</td>\n", | |
" <td>20551000000</td>\n", | |
" <td>34630000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareBasic</th>\n", | |
" <td>3.00</td>\n", | |
" <td>4.22</td>\n", | |
" <td>6.70</td>\n", | |
" <td>8.92</td>\n", | |
" <td>2.99</td>\n", | |
" <td>2.47</td>\n", | |
" <td>2.20</td>\n", | |
" <td>0.74</td>\n", | |
" <td>5.04</td>\n", | |
" <td>7.63</td>\n", | |
" <td>10.25</td>\n", | |
" <td>3.31</td>\n", | |
" <td>2.58</td>\n", | |
" <td>2.61</td>\n", | |
" <td>0.73</td>\n", | |
" <td>1.70</td>\n", | |
" <td>3.11</td>\n", | |
" <td>4.42</td>\n", | |
" <td>5.67</td>\n", | |
" <td>1.41</td>\n", | |
" <td>1.31</td>\n", | |
" <td>1.23</td>\n", | |
" <td>2.11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareDiluted</th>\n", | |
" <td>2.98</td>\n", | |
" <td>4.18</td>\n", | |
" <td>6.66</td>\n", | |
" <td>8.86</td>\n", | |
" <td>2.97</td>\n", | |
" <td>2.46</td>\n", | |
" <td>2.18</td>\n", | |
" <td>0.74</td>\n", | |
" <td>4.99</td>\n", | |
" <td>7.56</td>\n", | |
" <td>10.16</td>\n", | |
" <td>3.28</td>\n", | |
" <td>2.55</td>\n", | |
" <td>2.58</td>\n", | |
" <td>0.72</td>\n", | |
" <td>1.68</td>\n", | |
" <td>3.08</td>\n", | |
" <td>4.38</td>\n", | |
" <td>5.61</td>\n", | |
" <td>1.40</td>\n", | |
" <td>1.30</td>\n", | |
" <td>1.22</td>\n", | |
" <td>2.10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfSharesOutstandingBasic</th>\n", | |
" <td>19821510000</td>\n", | |
" <td>4735820000</td>\n", | |
" <td>4704945000</td>\n", | |
" <td>4660175000</td>\n", | |
" <td>18471336000</td>\n", | |
" <td>4674071000</td>\n", | |
" <td>4570633000</td>\n", | |
" <td>18471336000</td>\n", | |
" <td>4415040000</td>\n", | |
" <td>4387570000</td>\n", | |
" <td>4362571000</td>\n", | |
" <td>17352119000</td>\n", | |
" <td>4360101000</td>\n", | |
" <td>4312573000</td>\n", | |
" <td>17352119000</td>\n", | |
" <td>16935119000</td>\n", | |
" <td>16844298000</td>\n", | |
" <td>16772656000</td>\n", | |
" <td>16701272000</td>\n", | |
" <td>16753476000</td>\n", | |
" <td>16629371000</td>\n", | |
" <td>16701272000</td>\n", | |
" <td>16391724000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfDilutedSharesOutstanding</th>\n", | |
" <td>20000435000</td>\n", | |
" <td>4773252000</td>\n", | |
" <td>4736949000</td>\n", | |
" <td>4691759000</td>\n", | |
" <td>18595651000</td>\n", | |
" <td>4700646000</td>\n", | |
" <td>4601380000</td>\n", | |
" <td>18595651000</td>\n", | |
" <td>4454604000</td>\n", | |
" <td>4429648000</td>\n", | |
" <td>4404695000</td>\n", | |
" <td>17528214000</td>\n", | |
" <td>4404691000</td>\n", | |
" <td>4354788000</td>\n", | |
" <td>17528214000</td>\n", | |
" <td>17113688000</td>\n", | |
" <td>17021423000</td>\n", | |
" <td>16941527000</td>\n", | |
" <td>16864919000</td>\n", | |
" <td>16929157000</td>\n", | |
" <td>16781735000</td>\n", | |
" <td>16864919000</td>\n", | |
" <td>16519291000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-691a5eb0-28d1-4c07-bd30-33dfdbff3f8e')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-691a5eb0-28d1-4c07-bd30-33dfdbff3f8e button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-691a5eb0-28d1-4c07-bd30-33dfdbff3f8e');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2017-10-01-2018-09-29 ... 2021-09-26-2021-12-25\n", | |
"RevenueFromContractWithCustomerExcludingAssesse... 265595000000 ... 123945000000\n", | |
"CostOfGoodsAndServicesSold 163756000000 ... 69702000000\n", | |
"GrossProfit 101839000000 ... 54243000000\n", | |
"ResearchAndDevelopmentExpense 14236000000 ... 6306000000\n", | |
"SellingGeneralAndAdministrativeExpense 16705000000 ... 6449000000\n", | |
"OperatingExpenses 30941000000 ... 12755000000\n", | |
"OperatingIncomeLoss 70898000000 ... 41488000000\n", | |
"NonoperatingIncomeExpense 2005000000 ... -247000000\n", | |
"IncomeLossFromContinuingOperationsBeforeIncomeT... 72903000000 ... 41241000000\n", | |
"IncomeTaxExpenseBenefit 13372000000 ... 6611000000\n", | |
"NetIncomeLoss 59531000000 ... 34630000000\n", | |
"EarningsPerShareBasic 3.00 ... 2.11\n", | |
"EarningsPerShareDiluted 2.98 ... 2.10\n", | |
"WeightedAverageNumberOfSharesOutstandingBasic 19821510000 ... 16391724000\n", | |
"WeightedAverageNumberOfDilutedSharesOutstanding 20000435000 ... 16519291000\n", | |
"\n", | |
"[15 rows x 23 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 150 | |
}, | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"Warning: Total number of columns (23) exceeds max_columns (20) limiting to first (20) columns.\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# remove all non-quarterly columns\n", | |
"def only_quarterly_results(statement):\n", | |
" for column in statement:\n", | |
" # convert all strings to int\n", | |
" date_strings = [a for a in column.split('-')]\n", | |
"\n", | |
" d0 = datetime.strptime(date_strings[0] + date_strings[1] + date_strings[2], '%Y%m%d')\n", | |
" d1 = datetime.strptime(date_strings[3] + date_strings[4] + date_strings[5], '%Y%m%d')\n", | |
" delta = d1 - d0\n", | |
"\n", | |
" # column represents more timeframe longer than one quarter\n", | |
" if delta.days > 100:\n", | |
" statement = statement.drop(column, axis=1)\n", | |
" return statement" | |
], | |
"metadata": { | |
"id": "6WPsPmzkuSCW" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"qrt_income_statement = only_quarterly_results(statement_1)\n", | |
"qrt_income_statement" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 444 | |
}, | |
"id": "kc2T0ETSuTnl", | |
"outputId": "a7c7582f-57a1-4064-d131-d5ef0e44d280" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-54ad1f7d-06b9-4d8d-967c-1b97f1d29ef0\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <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>2017-12-31-2018-03-31</th>\n", | |
" <th>2018-04-01-2018-06-30</th>\n", | |
" <th>2018-06-30-2018-09-29</th>\n", | |
" <th>2018-09-30-2018-12-29</th>\n", | |
" <th>2018-12-30-2019-03-30</th>\n", | |
" <th>2019-03-31-2019-06-29</th>\n", | |
" <th>2019-06-29-2019-09-28</th>\n", | |
" <th>2019-09-29-2019-12-28</th>\n", | |
" <th>2019-12-29-2020-03-28</th>\n", | |
" <th>2020-03-29-2020-06-27</th>\n", | |
" <th>2020-06-27-2020-09-26</th>\n", | |
" <th>2020-09-27-2020-12-26</th>\n", | |
" <th>2020-12-27-2021-03-27</th>\n", | |
" <th>2021-03-28-2021-06-26</th>\n", | |
" <th>2021-06-26-2021-09-25</th>\n", | |
" <th>2021-09-26-2021-12-25</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>RevenueFromContractWithCustomerExcludingAssessedTax</th>\n", | |
" <td>61137000000</td>\n", | |
" <td>53265000000</td>\n", | |
" <td>62900000000</td>\n", | |
" <td>84310000000</td>\n", | |
" <td>58015000000</td>\n", | |
" <td>53809000000</td>\n", | |
" <td>64040000000</td>\n", | |
" <td>91819000000</td>\n", | |
" <td>58313000000</td>\n", | |
" <td>59685000000</td>\n", | |
" <td>64698000000</td>\n", | |
" <td>111439000000</td>\n", | |
" <td>89584000000</td>\n", | |
" <td>81434000000</td>\n", | |
" <td>83360000000</td>\n", | |
" <td>123945000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>CostOfGoodsAndServicesSold</th>\n", | |
" <td>37715000000</td>\n", | |
" <td>32844000000</td>\n", | |
" <td>38816000000</td>\n", | |
" <td>52279000000</td>\n", | |
" <td>36194000000</td>\n", | |
" <td>33582000000</td>\n", | |
" <td>39727000000</td>\n", | |
" <td>56602000000</td>\n", | |
" <td>35943000000</td>\n", | |
" <td>37005000000</td>\n", | |
" <td>40009000000</td>\n", | |
" <td>67111000000</td>\n", | |
" <td>51505000000</td>\n", | |
" <td>46179000000</td>\n", | |
" <td>48186000000</td>\n", | |
" <td>69702000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>GrossProfit</th>\n", | |
" <td>23422000000</td>\n", | |
" <td>20421000000</td>\n", | |
" <td>24084000000</td>\n", | |
" <td>32031000000</td>\n", | |
" <td>21821000000</td>\n", | |
" <td>20227000000</td>\n", | |
" <td>24313000000</td>\n", | |
" <td>35217000000</td>\n", | |
" <td>22370000000</td>\n", | |
" <td>22680000000</td>\n", | |
" <td>24689000000</td>\n", | |
" <td>44328000000</td>\n", | |
" <td>38079000000</td>\n", | |
" <td>35255000000</td>\n", | |
" <td>35174000000</td>\n", | |
" <td>54243000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>ResearchAndDevelopmentExpense</th>\n", | |
" <td>3378000000</td>\n", | |
" <td>3701000000</td>\n", | |
" <td>3750000000</td>\n", | |
" <td>3902000000</td>\n", | |
" <td>3948000000</td>\n", | |
" <td>4257000000</td>\n", | |
" <td>4110000000</td>\n", | |
" <td>4451000000</td>\n", | |
" <td>4565000000</td>\n", | |
" <td>4758000000</td>\n", | |
" <td>4978000000</td>\n", | |
" <td>5163000000</td>\n", | |
" <td>5262000000</td>\n", | |
" <td>5717000000</td>\n", | |
" <td>5772000000</td>\n", | |
" <td>6306000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>SellingGeneralAndAdministrativeExpense</th>\n", | |
" <td>4150000000</td>\n", | |
" <td>4108000000</td>\n", | |
" <td>4216000000</td>\n", | |
" <td>4783000000</td>\n", | |
" <td>4458000000</td>\n", | |
" <td>4426000000</td>\n", | |
" <td>4578000000</td>\n", | |
" <td>5197000000</td>\n", | |
" <td>4952000000</td>\n", | |
" <td>4831000000</td>\n", | |
" <td>4936000000</td>\n", | |
" <td>5631000000</td>\n", | |
" <td>5314000000</td>\n", | |
" <td>5412000000</td>\n", | |
" <td>5616000000</td>\n", | |
" <td>6449000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingExpenses</th>\n", | |
" <td>7528000000</td>\n", | |
" <td>7809000000</td>\n", | |
" <td>7966000000</td>\n", | |
" <td>8685000000</td>\n", | |
" <td>8406000000</td>\n", | |
" <td>8683000000</td>\n", | |
" <td>8688000000</td>\n", | |
" <td>9648000000</td>\n", | |
" <td>9517000000</td>\n", | |
" <td>9589000000</td>\n", | |
" <td>9914000000</td>\n", | |
" <td>10794000000</td>\n", | |
" <td>10576000000</td>\n", | |
" <td>11129000000</td>\n", | |
" <td>11388000000</td>\n", | |
" <td>12755000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>OperatingIncomeLoss</th>\n", | |
" <td>15894000000</td>\n", | |
" <td>12612000000</td>\n", | |
" <td>16118000000</td>\n", | |
" <td>23346000000</td>\n", | |
" <td>13415000000</td>\n", | |
" <td>11544000000</td>\n", | |
" <td>15625000000</td>\n", | |
" <td>25569000000</td>\n", | |
" <td>12853000000</td>\n", | |
" <td>13091000000</td>\n", | |
" <td>14775000000</td>\n", | |
" <td>33534000000</td>\n", | |
" <td>27503000000</td>\n", | |
" <td>24126000000</td>\n", | |
" <td>23786000000</td>\n", | |
" <td>41488000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NonoperatingIncomeExpense</th>\n", | |
" <td>274000000</td>\n", | |
" <td>672000000</td>\n", | |
" <td>303000000</td>\n", | |
" <td>560000000</td>\n", | |
" <td>378000000</td>\n", | |
" <td>367000000</td>\n", | |
" <td>502000000</td>\n", | |
" <td>349000000</td>\n", | |
" <td>282000000</td>\n", | |
" <td>46000000</td>\n", | |
" <td>126000000</td>\n", | |
" <td>45000000</td>\n", | |
" <td>508000000</td>\n", | |
" <td>243000000</td>\n", | |
" <td>-538000000</td>\n", | |
" <td>-247000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeLossFromContinuingOperationsBeforeIncomeTaxesExtraordinaryItemsNoncontrollingInterest</th>\n", | |
" <td>16168000000</td>\n", | |
" <td>13284000000</td>\n", | |
" <td>16421000000</td>\n", | |
" <td>23906000000</td>\n", | |
" <td>13793000000</td>\n", | |
" <td>11911000000</td>\n", | |
" <td>16127000000</td>\n", | |
" <td>25918000000</td>\n", | |
" <td>13135000000</td>\n", | |
" <td>13137000000</td>\n", | |
" <td>14901000000</td>\n", | |
" <td>33579000000</td>\n", | |
" <td>28011000000</td>\n", | |
" <td>24369000000</td>\n", | |
" <td>23248000000</td>\n", | |
" <td>41241000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>IncomeTaxExpenseBenefit</th>\n", | |
" <td>2346000000</td>\n", | |
" <td>1765000000</td>\n", | |
" <td>2296000000</td>\n", | |
" <td>3941000000</td>\n", | |
" <td>2232000000</td>\n", | |
" <td>1867000000</td>\n", | |
" <td>2441000000</td>\n", | |
" <td>3682000000</td>\n", | |
" <td>1886000000</td>\n", | |
" <td>1884000000</td>\n", | |
" <td>2228000000</td>\n", | |
" <td>4824000000</td>\n", | |
" <td>4381000000</td>\n", | |
" <td>2625000000</td>\n", | |
" <td>2697000000</td>\n", | |
" <td>6611000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>NetIncomeLoss</th>\n", | |
" <td>13822000000</td>\n", | |
" <td>11519000000</td>\n", | |
" <td>14125000000</td>\n", | |
" <td>19965000000</td>\n", | |
" <td>11561000000</td>\n", | |
" <td>10044000000</td>\n", | |
" <td>13686000000</td>\n", | |
" <td>22236000000</td>\n", | |
" <td>11249000000</td>\n", | |
" <td>11253000000</td>\n", | |
" <td>12673000000</td>\n", | |
" <td>28755000000</td>\n", | |
" <td>23630000000</td>\n", | |
" <td>21744000000</td>\n", | |
" <td>20551000000</td>\n", | |
" <td>34630000000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareBasic</th>\n", | |
" <td>2.75</td>\n", | |
" <td>2.36</td>\n", | |
" <td>2.85</td>\n", | |
" <td>4.22</td>\n", | |
" <td>2.47</td>\n", | |
" <td>2.20</td>\n", | |
" <td>2.96</td>\n", | |
" <td>5.04</td>\n", | |
" <td>2.58</td>\n", | |
" <td>2.61</td>\n", | |
" <td>0.73</td>\n", | |
" <td>1.70</td>\n", | |
" <td>1.41</td>\n", | |
" <td>1.31</td>\n", | |
" <td>1.23</td>\n", | |
" <td>2.11</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>EarningsPerShareDiluted</th>\n", | |
" <td>2.73</td>\n", | |
" <td>2.34</td>\n", | |
" <td>2.82</td>\n", | |
" <td>4.18</td>\n", | |
" <td>2.46</td>\n", | |
" <td>2.18</td>\n", | |
" <td>2.94</td>\n", | |
" <td>4.99</td>\n", | |
" <td>2.55</td>\n", | |
" <td>2.58</td>\n", | |
" <td>0.72</td>\n", | |
" <td>1.68</td>\n", | |
" <td>1.40</td>\n", | |
" <td>1.30</td>\n", | |
" <td>1.22</td>\n", | |
" <td>2.10</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfSharesOutstandingBasic</th>\n", | |
" <td>5024877000</td>\n", | |
" <td>4882167000</td>\n", | |
" <td>4955377000</td>\n", | |
" <td>4735820000</td>\n", | |
" <td>4674071000</td>\n", | |
" <td>4570633000</td>\n", | |
" <td>4617834000</td>\n", | |
" <td>4415040000</td>\n", | |
" <td>4360101000</td>\n", | |
" <td>4312573000</td>\n", | |
" <td>17352119000</td>\n", | |
" <td>16935119000</td>\n", | |
" <td>16753476000</td>\n", | |
" <td>16629371000</td>\n", | |
" <td>16701272000</td>\n", | |
" <td>16391724000</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>WeightedAverageNumberOfDilutedSharesOutstanding</th>\n", | |
" <td>5068493000</td>\n", | |
" <td>4926609000</td>\n", | |
" <td>5000109000</td>\n", | |
" <td>4773252000</td>\n", | |
" <td>4700646000</td>\n", | |
" <td>4601380000</td>\n", | |
" <td>4648913000</td>\n", | |
" <td>4454604000</td>\n", | |
" <td>4404691000</td>\n", | |
" <td>4354788000</td>\n", | |
" <td>17528214000</td>\n", | |
" <td>17113688000</td>\n", | |
" <td>16929157000</td>\n", | |
" <td>16781735000</td>\n", | |
" <td>16864919000</td>\n", | |
" <td>16519291000</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-54ad1f7d-06b9-4d8d-967c-1b97f1d29ef0')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-54ad1f7d-06b9-4d8d-967c-1b97f1d29ef0 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-54ad1f7d-06b9-4d8d-967c-1b97f1d29ef0');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" 2017-12-31-2018-03-31 ... 2021-09-26-2021-12-25\n", | |
"RevenueFromContractWithCustomerExcludingAssesse... 61137000000 ... 123945000000\n", | |
"CostOfGoodsAndServicesSold 37715000000 ... 69702000000\n", | |
"GrossProfit 23422000000 ... 54243000000\n", | |
"ResearchAndDevelopmentExpense 3378000000 ... 6306000000\n", | |
"SellingGeneralAndAdministrativeExpense 4150000000 ... 6449000000\n", | |
"OperatingExpenses 7528000000 ... 12755000000\n", | |
"OperatingIncomeLoss 15894000000 ... 41488000000\n", | |
"NonoperatingIncomeExpense 274000000 ... -247000000\n", | |
"IncomeLossFromContinuingOperationsBeforeIncomeT... 16168000000 ... 41241000000\n", | |
"IncomeTaxExpenseBenefit 2346000000 ... 6611000000\n", | |
"NetIncomeLoss 13822000000 ... 34630000000\n", | |
"EarningsPerShareBasic 2.75 ... 2.11\n", | |
"EarningsPerShareDiluted 2.73 ... 2.10\n", | |
"WeightedAverageNumberOfSharesOutstandingBasic 5024877000 ... 16391724000\n", | |
"WeightedAverageNumberOfDilutedSharesOutstanding 5068493000 ... 16519291000\n", | |
"\n", | |
"[15 rows x 16 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 164 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"%matplotlib inline\n", | |
"import matplotlib.pyplot as plt\n", | |
"import matplotlib.ticker as tick\n", | |
"import numpy as np\n", | |
"\n", | |
"# custom y axis formatter\n", | |
"def format_dollars(y, pos=None):\n", | |
" return int(y/1000000000)\n", | |
"\n", | |
"fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", | |
"\n", | |
"ax = qrt_income_statement.astype(float)\\\n", | |
" .loc[\"NetIncomeLoss\"]\\\n", | |
" .plot.line(legend=True)\n", | |
"ax = qrt_income_statement.astype(float)\\\n", | |
" .loc[\"RevenueFromContractWithCustomerExcludingAssessedTax\"]\\\n", | |
" .plot.line(legend=True)\n", | |
"\n", | |
"ax.set_title('Quarterly Revenues and Net Income')\n", | |
"\n", | |
"ax.yaxis.set_major_formatter(tick.FuncFormatter(format_dollars))\n", | |
"\n", | |
"plt.ylabel('$ Billions')\n", | |
"\n", | |
"# show all quarter date ranges\n", | |
"plt.xticks(ticks=np.arange(len(qrt_income_statement.columns)),\n", | |
" labels=qrt_income_statement.columns)\n", | |
"\n", | |
"# format x axis properly\n", | |
"fig.autofmt_xdate()\n", | |
"\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 416 | |
}, | |
"id": "UAeN4pEKy2ar", | |
"outputId": "fe9c8e5e-e959-4db0-b186-714de46c1354" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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qGbPnk1wcLDnfRIZGem5BoXRpEmTQq2Cnf2axsXF8eijjxb6nNllZGQQHBzMuHHjinQcX6hatSqbNm3yXO/atWt7/q/ecINviyVVIcQvgIYdoFLNi+/rbSKiP3n8AE2Azdnu3wRsAYJz7BcCbAACgabAbqDcxY7fvn17yWnLli0XbPO1KlWqeP49bNgweemllxyMJn/Dhw+Xjz/+OM/H09PTi3T8lJQUueqqq+R///ufZ9tPP/0kmzZtuqTjZb+22WVlZUlmZmahjjVr1ix56KGHPPd79+4t33zzjYiIfPLJJxIVFSX/+te/RERk27Zt0qpVq3zj2bNnj4SEhOR6runTp8uNN94oSUlJIiKSlJQks2fPLlS8Ivba9e7du9DPK4r09PQLrtWlaty4sSQmJhZ4//yu6aWYP3++dOnSRZo1ayZZWVleO25xyPlev9j/1YIqCX8jy6xTv4uMry7y88vFehogTnL5TNQWkjwYY+YCK4BWxpgDxph7gNeAasACY8x6Y8wMABH5FfgIm6x8BzwkIpkOhe5VnTt35uBB29iza9cubrrpJtq3b88111zDtm3bSEpKonHjxmRlZQFw5swZGjZsSHp6eq77g23VePTRR+nSpQvNmjXjk08+AWDx4sX06dPHc+6HH36Y2bNnA7B27Vq6detG+/bt6dWrF4cOHcoz5u7du/PYY48RHR3Nq6++yqJFi4iKiiIsLIxRo0aRlpYG2G+7zz77LJGRkURHR7Nu3Tp69epF8+bNPTPQzpkzh86dO9O3b9/zjh8aGkpqaiojR470zOj6008/Afbb+G233cZNN91EixYtPCsmjxs3jpSUFCIjI7n77rtJSEigVatWDBs2jNDQUPbv38+YMWOIjo4mJCSE8ePHe865Zs0aunTpQkREBB06dCApKYnnnnuOefPmERkZybx58+jSpQvLly8HYPny5Tz++OOsWLHCc79r166e+OPi4i6IByAzM5P77ruPkJAQbrzxRlJSUgDbkjJ9+nSqV68O2MUXhw8f7rmO7laDuLg4unfvDsDPP//s+XYcFRXF6dOnGTduHEuXLiUyMpJJkyblew379+9Pz549adKkCa+99hqvvPIKUVFRdOrUiePHj+f5nnS/xx544AE6dux4wYrV2X3++edcf/31iAiHDh2iZcuW/P777yQnJ3viCg8P59NPPz3veTlbkyZOnMjzzz8P2PdqREQEERERTJs2zbNP9vf3888/z6hRo+jevTvNmjU7r2XvxRdfpFWrVlx99dXceeedTJw40fPY3LlzGTt2LI0aNfL8bt3vrbZt2xIeHu5Zcfvjjz8mNDSUiIgIz2rXmZmZPP3008TExBAeHs7MmTMB26J27bXXelpGly5dSmZmJiNGjCA0NJSwsDAmTZqU7zXfs2ePZ4bkv/71r3lec4AXXniBmJgYQkNDGT16NCJCRkYGMTExLF68GIBnn32Wv/zlL/keR3nZLtcq7S18Xz8CaAuJkz8XbSGZ/4zIO7d492f+MxecMyf3N5uMjAy5/fbb5dtvvxURkeuuu0527NghIiIrV66UHj16iIhIv3795McffxQRkQ8//FDuueeefPcfPny43H777ZKZmSm//vqrNG/eXEQu/Pb80EMPyaxZs+TcuXPSuXNnOXLkiOccI0eO9ByrSZMmEhERIREREbJx40bp1q2bjBkzRkRsC0eDBg1k+/btIiIydOhQmTRpkojYb7uvv/66iIg89thjEhYWJqdOnZIjR47IZZddJiIijz/+uEyePDnX6zRx4kRPHFu3bpWGDRtKSkqKzJo1S5o2bSonT56UlJQUadSokezbt++8aytivz0bY2TFihWebceOHfNc+27dusmGDRskLS1NmjZtKqtXrxYR2zqR27f+xYsXe67x1VdfLadPnxb3e+zee++Vt956S0REunXrJmvWrMk1nnLlyskvv/wiIiIDBw6U9957T5KSkqRmzZq5XgP3dXS3GqxZs0a6desmIiJ9+vSRZcuWiYjI6dOnJT09/YLfcX7XsHnz5p7fR/Xq1WX69Ome35X7d5jfe6x3796SkZEhIrY1qW7dup73SUREhJw9e1ZERO6++26ZOnWq9O7dW+bMmSMiIn/+859l7NixnjiPHz9+3mvN2fLx8ssvy/jx40VEJCwsTH7++WcREXnqqac8+2V/7ePHj5fOnTtLamqqJCYmSu3ateXcuXOyevVqiYiIkJSUFDl16pRcddVV8vLL9ttqSkqK1K9fX86ePSszZ86Uhx9+WEREjh49Ki1btvS0mJw4cUJEREJDQ+XAgQPnbZs5c6a8+OKLIiKSmpoq7du3l927d8vEiRM9LaEZGRly6tQpiYuLkxtuuMHzGt3HyOua9+3bV959910REXnttdfybSFxv89FRIYMGeJpgdy8ebO0bt1aFixYIJGRkZKWliY5aQtJMfp4pMjLLUSKufWNPFpIdLVfdQH3t+aDBw/Spk0bevbsSXJyMsuXL2fgwIGe/dwtDYMHD2bevHn06NGDDz/8kAcffDDf/QH69+9PQEAAbdu2vWg9xvbt29m8eTM9e9qsPTMzk/r163sef/nll7n99tvPe87gwYM9z23atCktW7YEYPjw4UybNo3HHnsMgH79+gEQFhZGcnIy1apVo1q1agQGBl60dmbZsmU88sgjALRu3ZrGjRuzY8cOAK6//npq1KgBQNu2bdm7dy8NGza84BiNGzemU6dOnvsfffQRb7zxBhkZGRw6dIgtW7ZgjKF+/frExMQAeFopcoqJieGXX37hzJkzpKenU7VqVZo1a0Z8fDzLly/nySefzPf1AJ4+foD27duTkJBw0efkpWvXrjzxxBPcfffd3HbbbTRo0OCCffK7hj169PD8PmrUqOFppQoLC2Pjxo0XfY8NHDiQcuX+mA5o8ODBvPbaaxfEMHXqVEJDQ+nUqRN33nknAAsXLuTDDz/07FOrVq0CveaTJ09y8uRJT4vE0KFD+fbbb3Pdt3fv3gQGBhIYGMhll13G4cOHiY2N5dZbbyUoKIigoKDzWua+/vprevToQaVKlRgwYAAvvvgikydPpkaNGgQFBXHPPffQp08fTytM165dGTFiBIMGDeK2224D4IcffmDjxo2eVsmkpCR27txJTEwMo0aNIj09nf79+xMZGUmzZs3YvXs3jzzyCL179+bGG2/M95rHxsZ6WpKGDh3KM888k+d1+umnn/j3v//N2bNnOX78OCEhIfTt25eQkBCGDh1Knz59WLFiBRUrVizQdVdekJUJu36Eljf7fLivmyYkJdnN/3TktJUqVWL9+vWcPXuWXr16MW3aNEaMGEHNmjU9q/tm169fP/7v//6P48ePs3btWq677jrOnDmT5/4AgYGBnn/bhBnKly/v6foBSE1N9TweEhJyXhP1xVSpUqVA+7njCAgIOC+mgIAAMjIyCAkJ4eeffy7weXMeF2yRsHtF4/zi3LNnDxMnTmTNmjXUqlWLESNGeK5BQVSuXJkWLVrwzjvv0K5dOwA6derE/PnzOXLkCK1atSp03CkpKVSvXp2qVauye/dumjVrdsFzsv/essc7btw4evfuzfz58+natSvf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\n", | |
"text/plain": [ | |
"<Figure size 576x432 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from matplotlib.ticker import FormatStrFormatter\n", | |
"\n", | |
"fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", | |
"\n", | |
"ax = qrt_income_statement.astype(float).loc[\"EarningsPerShareBasic\"].plot.line()\n", | |
"\n", | |
"ax.set_title('Earnings Per Share Basic')\n", | |
"\n", | |
"# use higher precision for y axis labels\n", | |
"ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))\n", | |
"\n", | |
"plt.xticks(ticks=np.arange(len(qrt_income_statement.columns)),\n", | |
" labels=qrt_income_statement.columns)\n", | |
"\n", | |
"# format x axis properly\n", | |
"fig.autofmt_xdate()\n", | |
"\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 416 | |
}, | |
"id": "lqE2gGKRzP8v", | |
"outputId": "5e3e9007-379a-4029-c291-b31a16570d6c" | |
}, | |
"execution_count": null, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 576x432 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [], | |
"metadata": { | |
"id": "MdI0mDyEzeTi" | |
}, | |
"execution_count": null, | |
"outputs": [] | |
} | |
] | |
} |
@janlukasschroeder Getting errors trying to output of
statement_1 = add_fourth_quarter_results(statement)
While trying to extract data from ticker:MU (Micron Technology).
41 for row_key, row_value in statement[column].iteritems():
---> 42 value = num(statement[column][row_key]) - num(statement[column_1][row_key])
44 if isinstance(value, float):
45 value = round(value, 2)
TypeError: cannot convert the series to <class 'int'>
Any fix?
does this also work for the balance sheet and cash flow statement? bumping up against the call requests
Thank you for that. Will try these on my end.
On Wed, May 24, 2023 at 10:43 PM Srujan Taticherla ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
Balance sheet I have checked seems to work. (only until the before part
where we add the 4th quarter, did not try that yet). But cash flow looks
like has an issue because the indices returned by the data frame for each
ascension number is not the same. So the procedure
"merge_income_statements" will have an error - KeyError: Index. trying to
check work arounds for it.
trying this instead of existing procedure call for merge. Not sure if the
results are OK yet.
cash_flow_final_reset = cash_flow_final.reset_index()
cash_flow_cleaned_reset = cash_flow_cleaned.reset_index()
Perform the merge operation on the reset indices
merged_df = cash_flow_final_reset.merge(cash_flow_cleaned_reset,
how='outer', on='index', suffixes=('_left', ''))
Set the index back to the original column or choose a new index column
merged_df.set_index('index', inplace=True)
merged_df=clean_income_statement(merged_df)
display(HTML(merged_df.to_html()))
—
Reply to this email directly, view it on GitHub
<https://gist.github.com/janlukasschroeder/3da274150fd00c1c1776c7e541a9b61b#gistcomment-4578900>
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AKOV6OPSHWGF6L4GQTXBJNDXH3BOTBFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCNBVGYYDAMJRU52HE2LHM5SXFJTDOJSWC5DF>
.
You are receiving this email because you commented on the thread.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.
--
Sean Gearin
617-455-2891
***@***.***
Do you have any API's to extract the stock prices (current , history)..?
On Thu, May 25, 2023 at 7:44 PM Srujan Taticherla ***@***.***> wrote:
***@***.**** commented on this gist.
------------------------------
Do you have any API's to extract the stock prices (current , history)..?
—
Reply to this email directly, view it on GitHub
<https://gist.github.com/janlukasschroeder/3da274150fd00c1c1776c7e541a9b61b#gistcomment-4579944>
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AKOV6OLZTUKUBXMTY53PAETXH7VE5BFKMF2HI4TJMJ2XIZLTSKBKK5TBNR2WLJDHNFZXJJDOMFWWLK3UNBZGKYLEL52HS4DFQKSXMYLMOVS2I5DSOVS2I3TBNVS3W5DIOJSWCZC7OBQXE5DJMNUXAYLOORPWCY3UNF3GS5DZVRZXKYTKMVRXIX3UPFYGLK2HNFZXIQ3PNVWWK3TUUZ2G64DJMNZZDAVEOR4XAZNEM5UXG5FFOZQWY5LFVEYTCNBVGYYDAMJRU52HE2LHM5SXFJTDOJSWC5DF>
.
You are receiving this email because you commented on the thread.
Triage notifications on the go with GitHub Mobile for iOS
<https://apps.apple.com/app/apple-store/id1477376905?ct=notification-email&mt=8&pt=524675>
or Android
<https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dnotification-email%26utm_medium%3Demail%26utm_source%3Dgithub>
.
--
Sean Gearin
617-455-2891
***@***.***
How do you think about dealing with REVISIONS point-in-time, similar to the vintage problem that ALFRED tries to solve for economic data? We know the PIT when the data was released, given the accceptanceDateTime via the accession_number
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@EmilieTX try using
pip install sec-api
(dash instead of underscore)