def view_calendar(year, month, day): print('') print('\033[1m------ CALENDAR ------\033[0m') cal = Calendar(year, month, day) line2 = cal.get_calendar_year(year) line3 = list(map(list, zip(*line2))) print('') config = ConfigUtil() column_num = int(config.get('calendar', 'column_num')) row_num = math.floor(12 / column_num) #print('column_num:', column_num, 'row_num:', row_num) for r in range(row_num): for x in line3: print(" ".join(x[column_num * r:column_num * (r + 1)]))
def time_series_range(self, institution, qtr_start, qtr_end): self.institution = institution dates = Calendar().quarter_end_list(qtr_start, qtr_end) frames = [] for date in dates: df = self.get(date = date, institution=institution) # FIXME; terrible way to call. get all data in one call. cmon... df = df.sort_values(by=['value'], ascending=False) frames.append(df) self.ts = pd.concat(frames).reset_index(drop=True) self.ts.value = self.ts.value.astype(float) / 1000000 self.ts['_ix'] = self.ts.ticker.astype(str) + '_' + self.ts.securitytype.astype(str) return self.ts
def main(month='1', year='2012'): # builds calendar using Python dates calendar = Calendar(month, year) cal_html = calendar.build() # provide values for use in building the Javascript calendar month = int(month) months = ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ) month_name = months[month - 1] prev_year = int(year) next_year = int(year) # used for switching between months (links) prev_month = month - 1 next_month = month + 1 if month == 1: prev_month = 12 prev_year -= 1 elif month == 12: next_month = 1 next_year += 1 prev_month_name = months[prev_month - 1] next_month_name = months[next_month - 1] # Javascript calculates dates differently, so subtract 1 month -= 1 return render_template('calendar', year=year, month=month, month_name=month_name, prev_month=prev_month, prev_month_name=prev_month_name, next_month=next_month, next_year=next_year, next_month_name=next_month_name, cal_html=cal_html)
def get(self, years: list = [Calendar().current_year()]): ''' parse US Treasury.gov website for yield curve rates returning concatenated xml content for a list of years https://home.treasury.gov/resource-center/data-chart-center/interest-rates/TextView?type=daily_treasury_yield_curve&field_tdr_date_value=2022 ''' columns = [ '1 Month', '2 Month', '3 Month', '6 Month', '1 Year', '2 Year', '3 Year', '5 Year', '7 Year', '10 Year', '20 Year', '30 Year' ] identifiers = [ 'd:NEW_DATE', 'd:BC_1MONTH', 'd:BC_2MONTH', 'd:BC_3MONTH', 'd:BC_6MONTH', 'd:BC_1YEAR', 'd:BC_2YEAR', 'd:BC_3YEAR', 'd:BC_5YEAR', 'd:BC_7YEAR', 'd:BC_10YEAR', 'd:BC_20YEAR', 'd:BC_30YEAR' ] frames = [] for year in years: url = f'https://home.treasury.gov/resource-center/data-chart-center/interest-rates/pages/xml?data=daily_treasury_yield_curve&field_tdr_date_value={year}' document = requests.get(url) soup = BeautifulSoup(document.content, "lxml-xml") frames_year = [] for content in soup.find_all('m:properties'): vlist = [] for text_value in identifiers: vlist.append(content.find(text_value).text) df = pd.DataFrame(columns=columns).transpose() df[vlist[0]] = vlist[1:] frames_year.append(df.transpose()) df = pd.concat(frames_year) frames.append(df) df = pd.concat(frames).reset_index(drop=False).rename( columns={'index': 'date'}) df.date = pd.to_datetime(df.date) for c in df.columns: if c != 'date': df[c] = pd.to_numeric(df[c]) self.df = df return self.df
def forecast(request): ticker = request.POST.get("tickers") if ticker in ['', None, 'None'] or len(str(ticker)) < 1: ticker = 'SPY' print(ticker) # TODO: call from retreiver import pandas_datareader as data import pandas as pd data_source = 'yahoo' start_date = '2000-01-01' end_date = Calendar().today() stockdata = data.DataReader(ticker, data_source, start_date, end_date)['Close'] stockdata = pd.DataFrame(stockdata).rename(columns={'Close':ticker}) train_start = request.POST.get("train_start") train_end = request.POST.get("train_end") test_start = request.POST.get("test_start") test_end = request.POST.get("test_end") if train_start in ['', None, 'None']: train_start = -0.6 train_end = -0.10 test_start = -0.4 test_end = -0.01 # FIXME ts = TimeSeries(data=stockdata, column=ticker) ts.decomposition(model='additive') ts.check_stationarity() ts.auto_correlation( lags=24 ) ts.prophet_forecast(int(train_start), int(train_end), int(test_start), int(test_end)) img_dirp = os.path.join(os.getcwd(), 'pynance/static/img') print(f'{ticker}_forecast.png') context = { 'seasonal_decompose.png':os.path.join(img_dirp, 'seasonal_decompose.png'), 'actual_v_predicted.png':os.path.join(img_dirp, 'actual_v_predicted.png'), 'prophet_forecast.png':os.path.join(img_dirp, 'prophet_forecast.png'), 'autocorrelation.png':os.path.join(img_dirp, 'autocorrelation.png'), 'components.png':os.path.join(img_dirp, 'components.png'), } return render(request, 'forecast.html', context)
import pandas as pd import numpy as np import nasdaqdatalink import sys, os cwd = os.getcwd() sys.path.append(os.path.dirname(cwd)) from lib.nasdaq import Fundamentals, Metrics, Tickers, Nasdaq from lib.calendar import Calendar cal = Calendar() from dateutil.relativedelta import relativedelta from postgres import Postgres import warnings warnings.simplefilter(action='ignore', category=pd.errors.PerformanceWarning) warnings.simplefilter(action='ignore', category=RuntimeWarning) import populate_fundamentals as popfun ''' calculate quartiles for every metric across each sector and industry for all historical time periods ''' def init(): calendardates = cal.quarter_end_list('2018-12-31', cal.previous_quarter_end()) tickers = Tickers().get()
def melt(self, years=[Calendar().current_year()]): self.melted = self.df.melt(id_vars='date') self.melted.value = pd.to_numeric(self.melted.value) return self.melted
def __init__(self): super().__init__() self.authenticate() self.prev_qtr_end = Calendar().previous_quarter_end()