Financial Data Science Financial Performance Analysis: Difference between revisions
Jump to navigation
Jump to search
(Created page with "=Internal= * Financial Data Science =Overview= <syntaxhighlight lang='py'> </syntaxhighlight>") |
|||
(32 intermediate revisions by the same user not shown) | |||
Line 5: | Line 5: | ||
<syntaxhighlight lang='py'> | <syntaxhighlight lang='py'> | ||
fred_api_key = '...' | |||
start_date = '2023-07-14' | |||
data_file = './finance-data/Test.xlsx' | |||
column_name = 'Balance' | |||
import math | |||
import pandas as pd | |||
import matplotlib.pyplot as plt | |||
import matplotlib.ticker as ptick | |||
from fredapi import Fred | |||
# load the DataFrame from Excel | |||
df = pd.DataFrame(pd.read_excel(data_file, parse_dates=["Date"])) | |||
# make it a time series DataFrame | |||
df = df.set_index('Date') | |||
# extract a specific time series ('Fidelity Self', 'Fidelity Managed', etc.) | |||
ts = df[column_name] | |||
# resample and interpolate | |||
ts = ts.resample('D').interpolate() | |||
# get the SP&500 | |||
fred = Fred(api_key=fred_api_key) | |||
sp500 = fred.get_series(series_id="SP500") | |||
sp500 = sp500.resample('D').interpolate() | |||
# | |||
# apply a window, normalize and compute the percentage difference | |||
# | |||
ts = ts.loc[start_date:] | |||
sp500 = sp500.loc[start_date:] | |||
sp500_perf = sp500.apply(lambda x: x * ts.loc[start_date] / sp500.loc[start_date]) | |||
sp500_perc_diff = ts.sub(sp500_perf).div(sp500_perf).mul(100) | |||
# graph | |||
plt.style.use('seaborn-v0_8-whitegrid') | |||
fig, ax = plt.subplots() | |||
fig.autofmt_xdate() | |||
fig.set_figwidth(20) | |||
ax.set_ylabel("amount") | |||
ax.yaxis.set_major_formatter(ptick.FormatStrFormatter('% 1.0f')) | |||
ax.plot(sp500_perf, lw=0.5, color='black') | |||
ax.plot(ts, lw=0.5, color='blue') | |||
fig2, ax2 = plt.subplots() | |||
fig2.autofmt_xdate() | |||
fig2.set_figwidth(25) | |||
ax2.set_ylabel("percentage") | |||
ax2.yaxis.set_major_formatter(ptick.PercentFormatter()) | |||
ax2.plot(sp500_perc_diff, lw=0.5, color='indigo') | |||
plt.show() | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 03:56, 31 October 2023
Internal
Overview
fred_api_key = '...'
start_date = '2023-07-14'
data_file = './finance-data/Test.xlsx'
column_name = 'Balance'
import math
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ptick
from fredapi import Fred
# load the DataFrame from Excel
df = pd.DataFrame(pd.read_excel(data_file, parse_dates=["Date"]))
# make it a time series DataFrame
df = df.set_index('Date')
# extract a specific time series ('Fidelity Self', 'Fidelity Managed', etc.)
ts = df[column_name]
# resample and interpolate
ts = ts.resample('D').interpolate()
# get the SP&500
fred = Fred(api_key=fred_api_key)
sp500 = fred.get_series(series_id="SP500")
sp500 = sp500.resample('D').interpolate()
#
# apply a window, normalize and compute the percentage difference
#
ts = ts.loc[start_date:]
sp500 = sp500.loc[start_date:]
sp500_perf = sp500.apply(lambda x: x * ts.loc[start_date] / sp500.loc[start_date])
sp500_perc_diff = ts.sub(sp500_perf).div(sp500_perf).mul(100)
# graph
plt.style.use('seaborn-v0_8-whitegrid')
fig, ax = plt.subplots()
fig.autofmt_xdate()
fig.set_figwidth(20)
ax.set_ylabel("amount")
ax.yaxis.set_major_formatter(ptick.FormatStrFormatter('% 1.0f'))
ax.plot(sp500_perf, lw=0.5, color='black')
ax.plot(ts, lw=0.5, color='blue')
fig2, ax2 = plt.subplots()
fig2.autofmt_xdate()
fig2.set_figwidth(25)
ax2.set_ylabel("percentage")
ax2.yaxis.set_major_formatter(ptick.PercentFormatter())
ax2.plot(sp500_perc_diff, lw=0.5, color='indigo')
plt.show()