-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.py
142 lines (124 loc) · 4.51 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import time
import pandas as pd
import yfinance as yf # Experimental.
import os
import win32com.client
# Utils for stock financials analysis.
# Different stock have different labels on their balance sheets, so assessment can be done differently.
BALANCE_SHEET_LABELS =\
['intangibleAssets', # added
'totalLiab', # added
'totalStockholderEquity', # added
'otherCurrentLiab', # added
'totalAssets', # added
'commonStock', # added
'retainedEarnings', # added
'otherLiab', # added
'treasuryStock', # added
'otherAssets', # added
'cash', # added
'totalCurrentLiabilities', # added
'deferredLongTermAssetCharges', # added
'shortLongTermDebt', # added
'otherStockholderEquity', # added
'propertyPlantEquipment', # added
'totalCurrentAssets', # added
'netTangibleAssets', # added
'netReceivables', # added
'longTermDebt', # added
'accountsPayable', # added
'capitalSurplus', # added
'minorityInterest', # added
'deferredLongTermLiab', # added
'otherCurrentAssets', # added
'goodWill', # added
'longTermInvestments', # added
'inventory', # added
'shortTermInvestments' # added
]
INCOME_STAT_LABELS = \
['researchDevelopment', # added
'effectOfAccountingCharges', # added
'incomeBeforeTax', # added
'minorityInterest', # added
'netIncome', # added
'sellingGeneralAdministrative', # added
'grossProfit', # added
'ebit', # added
'operatingIncome', # added
'otherOperatingExpenses', # added
'interestExpense', # added
'extraordinaryItems', # added
'nonRecurring', # added
'otherItems', # added
'incomeTaxExpense', # added
'totalRevenue', # added
'totalOperatingExpenses', # added
'costOfRevenue', # added
'totalOtherIncomeExpenseNet', # added
'discontinuedOperations', # added
'netIncomeFromContinuingOps', # added
'netIncomeApplicableToCommonShares' # added
]
CASHFLOW_STAT_LABELS = \
['changeToLiabilities', # added
'totalCashflowsFromInvestingActivities', # added
'netBorrowings', # added
'totalCashFromFinancingActivities', # added
'changeToOperatingActivities', # added
'issuanceOfStock', # added
'netIncome', # added
'changeInCash', # added
'effectOfExchangeRate', # added
'totalCashFromOperatingActivities', # added
'depreciation', # added
'otherCashflowsFromInvestingActivities', # added
'otherCashflowsFromFinancingActivities', # added
'changeToNetincome', # added
'capitalExpenditures', # added
'investments', # added
'repurchaseOfStock', # added
'dividendsPaid', # added
'changeToInventory', # added
'changeToAccountReceivables' # added
]
def parse_dataframe(dataframe):
"""
Extract information such as x, y labels from dataframe.
"""
flabels = list(dataframe.index) # Financial Labels
dlabels = [date.date() for date in list(dataframe.columns)] # Date Labels
return flabels, dlabels
def no_dup_list_append(list1, list2):
for i in list2:
if i not in list1:
list1.append(i)
def get_company_name(ticker):
return get_company_data(ticker)["longName"]
def get_company_data(ticker):
comp_name = yf.Ticker(ticker)
return comp_name.info
def get_company_currency(ticker):
return get_company_data(ticker)["financialCurrency"]
def get_gross_margin_average(industry):
pass
# Restoring Corrupt Excel Files using Python
def fix_corrupt_excel_file(filename):
xl = win32com.client.Dispatch("Excel.Application")
xl.Visible = False # Hide Excel Window.
xl.DisplayAlerts = False # Allow Changes to Local Files without User Warning.
# print(os.path.join(os.getcwd(), filename))
wb = xl.Workbooks.Open(os.path.join(os.getcwd(), filename))
new_filename = "".join(filename.split(".")[0:-1]) + "fixed" + ".xlsx"
insider_dir = os.path.join(os.path.expanduser('~/Documents'), "InsiderData")
if not os.path.isdir(insider_dir):
os.makedirs(insider_dir)
new_file_path = os.path.join(insider_dir, new_filename)
wb.ActiveSheet.SaveAs(new_file_path, 51) # https://docs.microsoft.com/en-us/office/vba/api/excel.xlfileformat
xl.Application.Quit()
return new_file_path
def display_max_pandas():
pd.set_option('display.max_rows', None)
pd.set_option('display.max_columns', None)
pd.set_option('display.width', None)
pd.set_option('display.max_colwidth', None)