import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
exchange_rates = pd.read_csv('euro-daily-hist_1999_2020.csv')
exchange_rates.head()
exchange_rates.tail()
exchange_rates.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5699 entries, 0 to 5698 Data columns (total 41 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Period\Unit: 5699 non-null object 1 [Australian dollar ] 5699 non-null object 2 [Bulgarian lev ] 5297 non-null object 3 [Brazilian real ] 5431 non-null object 4 [Canadian dollar ] 5699 non-null object 5 [Swiss franc ] 5699 non-null object 6 [Chinese yuan renminbi ] 5431 non-null object 7 [Cypriot pound ] 2346 non-null object 8 [Czech koruna ] 5699 non-null object 9 [Danish krone ] 5699 non-null object 10 [Estonian kroon ] 3130 non-null object 11 [UK pound sterling ] 5699 non-null object 12 [Greek drachma ] 520 non-null object 13 [Hong Kong dollar ] 5699 non-null object 14 [Croatian kuna ] 5431 non-null object 15 [Hungarian forint ] 5699 non-null object 16 [Indonesian rupiah ] 5699 non-null object 17 [Israeli shekel ] 5431 non-null object 18 [Indian rupee ] 5431 non-null object 19 [Iceland krona ] 3292 non-null float64 20 [Japanese yen ] 5699 non-null object 21 [Korean won ] 5699 non-null object 22 [Lithuanian litas ] 4159 non-null object 23 [Latvian lats ] 3904 non-null object 24 [Maltese lira ] 2346 non-null object 25 [Mexican peso ] 5699 non-null object 26 [Malaysian ringgit ] 5699 non-null object 27 [Norwegian krone ] 5699 non-null object 28 [New Zealand dollar ] 5699 non-null object 29 [Philippine peso ] 5699 non-null object 30 [Polish zloty ] 5699 non-null object 31 [Romanian leu ] 5637 non-null float64 32 [Russian rouble ] 5699 non-null object 33 [Swedish krona ] 5699 non-null object 34 [Singapore dollar ] 5699 non-null object 35 [Slovenian tolar ] 2085 non-null object 36 [Slovak koruna ] 2608 non-null object 37 [Thai baht ] 5699 non-null object 38 [Turkish lira ] 5637 non-null float64 39 [US dollar ] 5699 non-null object 40 [South African rand ] 5699 non-null object dtypes: float64(3), object(38) memory usage: 1.8+ MB
exchange_rates.rename(columns={'[US dollar ]': 'US_dollar',
'Period\\Unit:': 'Time'},
inplace=True)
exchange_rates['Time'] = pd.to_datetime(exchange_rates['Time'])
exchange_rates.sort_values('Time', inplace=True)
exchange_rates.reset_index(drop=True, inplace=True)
euro_to_dollar = exchange_rates[['Time', 'US_dollar']]
euro_to_dollar['US_dollar'].value_counts()
- 62 1.2276 9 1.1215 8 1.1305 7 1.1268 6 .. 1.5651 1 1.1126 1 1.2651 1 1.2251 1 1.1216 1 Name: US_dollar, Length: 3528, dtype: int64
euro_to_dollar = euro_to_dollar[euro_to_dollar['US_dollar'] != '-']
euro_to_dollar['US_dollar'] =euro_to_dollar['US_dollar'].astype(float)
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(euro_to_dollar['Time'],
euro_to_dollar['US_dollar'])
plt.show()
euro_to_dollar['rolling_mean'] = euro_to_dollar['US_dollar'].rolling(30).mean()
plt.plot(euro_to_dollar['Time'],
euro_to_dollar['rolling_mean'])
plt.show()
# defining different time periods
ecycle_00_04 = euro_to_dollar.copy()[(euro_to_dollar['Time'].dt.year >= 2001
) & (euro_to_dollar['Time'].dt.year < 2005)]
ecycle_04_08 = euro_to_dollar.copy()[(euro_to_dollar['Time'].dt.year >= 2005
) & (euro_to_dollar['Time'].dt.year < 2009)]
ecycle_08_12 = euro_to_dollar.copy()[(euro_to_dollar['Time'].dt.year >= 2009
) & (euro_to_dollar['Time'].dt.year < 2013)]
ecycle_12_16 = euro_to_dollar.copy()[(euro_to_dollar['Time'].dt.year >= 2013
) & (euro_to_dollar['Time'].dt.year < 2017)]
ecycle_16_20 = euro_to_dollar.copy()[(euro_to_dollar['Time'].dt.year >= 2017
) & (euro_to_dollar['Time'].dt.year < 2021)]
import matplotlib.style as style
style.use('fivethirtyeight')
plt.figure(figsize=(14,11))
ax1 = plt.subplot(3,2,1)
ax2 = plt.subplot(3,2,2)
ax3 = plt.subplot(3,2,3)
ax4 = plt.subplot(3,2,4)
ax5 = plt.subplot(3,2,5)
ax6 = plt.subplot(3,2,6)
axes = [ax1, ax2, ax3, ax4, ax5]
ecycles = [ecycle_00_04, ecycle_04_08, ecycle_08_12, ecycle_12_16, ecycle_16_20]
# created a dictitionary of locations for the grey highlighted regions on each graph,
# why does it have to be in datetime? when i look at the solution notebook it doesn't appear that way
xvalues = {'04-05':[euro_to_dollar.copy().iloc[1277,0],
euro_to_dollar.copy().iloc[1538,0]],
'08-09':[euro_to_dollar.copy().iloc[2305,0],
euro_to_dollar.copy().iloc[2559,0]],
'12-13':[euro_to_dollar.copy().iloc[3333,0],
euro_to_dollar.copy().iloc[3590,0]],
'16-17':[euro_to_dollar.copy().iloc[4350,0],
euro_to_dollar.copy().iloc[4606,0]],
'20-21':[euro_to_dollar.copy().iloc[5375,0],
euro_to_dollar.copy().iloc[5628,0]]}
for ax, cycle, xvalue in zip(axes, ecycles, xvalues.values()):
ax.plot(cycle['Time'], cycle['rolling_mean'])
ax.set_ylim(0.8,1.7)
ax.set_yticks([1.0, 1.2, 1.4, 1.6])
ax.set_yticklabels(['1.0', '1.2','1.4', '1.6'],
alpha=0.3)
ax.grid(alpha=0.5)
ax.axvspan(xmin=xvalue[0],xmax=xvalue[1], alpha=0.3, color='k')
plt.plot(cycle['Time'], cycle['rolling_mean'])
ax1.set_xticklabels(['2001','','2002','','2003','','2004','','2005'], alpha=0.3)
ax1.text(euro_to_dollar.copy().iloc[1000,0], 2.35, 'EURO-USD rate averaged 1.22 under the last three US presidents',
fontsize=10, weight='bold')
# Why do my x coordinates have to be in date time?
ax2.set_xticklabels(['2005','','2006','','2007','','2008','','2009'], alpha=0.3)
ax3.set_xticklabels(['2009','','2010','','2011','','2012','','2013'], alpha=0.3)
ax4.set_xticklabels(['2013','','2014','','2015','','2016','','2017'], alpha=0.3)
ax5.set_xticklabels(['2017','','2018','','2019','','2020','','2021'], alpha=0.3)
ax6.grid(alpha=0.3)