Financial Data Science Financial Performance Analysis
Jump to navigation
Jump to search
Internal
Overview
import math
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ptick
from fredapi import Fred
# load the DataFrame
df = pd.read_csv("./finances.csv", parse_dates=["Date"])
# make it a time series DataFrame
df = df.set_index('Date')
# declare the function that converts the dollar amount
def dollar_to_int(s):
if isinstance(s, str):
return int(s[1:].replace(',',''))
elif math.isnan(s):
return s # we will interpolate later
# extract a specific time series ('Fidelity Self', 'Fidelity Managed', etc.)
fid_slf = df['Fidelity Self'].apply(dollar_to_int)
# resample and interpolate
fid_slf = fid_slf.resample('D').interpolate()
# get the SP&500
fred = Fred(api_key='...')
sp500 = fred.get_series(series_id="SP500")
sp500 = sp500.resample('D').interpolate()
#
# apply a window, normalize and compute the percentage difference
#
start_date = '2023-07-10'
fid_slf = fid_slf.loc[start_date:]
sp500 = sp500.loc[start_date:]
sp500_perf = sp500.apply(lambda x: x * fid_slf.loc[start_date] / sp500.loc[start_date])
sp500_perc_diff = fid_slf.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(fid_slf, lw=0.5, color='red')
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()