import pandas as pd
exchange_rates = pd.read_csv('euro-daily-hist_1999_2020.csv')
exchange_rates.head()
Period\Unit: | [Australian dollar ] | [Bulgarian lev ] | [Brazilian real ] | [Canadian dollar ] | [Swiss franc ] | [Chinese yuan renminbi ] | [Cypriot pound ] | [Czech koruna ] | [Danish krone ] | ... | [Romanian leu ] | [Russian rouble ] | [Swedish krona ] | [Singapore dollar ] | [Slovenian tolar ] | [Slovak koruna ] | [Thai baht ] | [Turkish lira ] | [US dollar ] | [South African rand ] | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2021-01-08 | 1.5758 | 1.9558 | 6.5748 | 1.5543 | 1.0827 | 7.9184 | NaN | 26.163 | 7.4369 | ... | 4.8708 | 90.8000 | 10.0510 | 1.6228 | NaN | NaN | 36.8480 | 9.0146 | 1.2250 | 18.7212 |
1 | 2021-01-07 | 1.5836 | 1.9558 | 6.5172 | 1.5601 | 1.0833 | 7.9392 | NaN | 26.147 | 7.4392 | ... | 4.8712 | 91.2000 | 10.0575 | 1.6253 | NaN | NaN | 36.8590 | 8.9987 | 1.2276 | 18.7919 |
2 | 2021-01-06 | 1.5824 | 1.9558 | 6.5119 | 1.5640 | 1.0821 | 7.9653 | NaN | 26.145 | 7.4393 | ... | 4.8720 | 90.8175 | 10.0653 | 1.6246 | NaN | NaN | 36.9210 | 9.0554 | 1.2338 | 18.5123 |
3 | 2021-01-05 | 1.5927 | 1.9558 | 6.5517 | 1.5651 | 1.0803 | 7.9315 | NaN | 26.227 | 7.4387 | ... | 4.8721 | 91.6715 | 10.0570 | 1.6180 | NaN | NaN | 36.7760 | 9.0694 | 1.2271 | 18.4194 |
4 | 2021-01-04 | 1.5928 | 1.9558 | 6.3241 | 1.5621 | 1.0811 | 7.9484 | NaN | 26.141 | 7.4379 | ... | 4.8713 | 90.3420 | 10.0895 | 1.6198 | NaN | NaN | 36.7280 | 9.0579 | 1.2296 | 17.9214 |
5 rows × 41 columns
exchange_rates.tail()
Period\Unit: | [Australian dollar ] | [Bulgarian lev ] | [Brazilian real ] | [Canadian dollar ] | [Swiss franc ] | [Chinese yuan renminbi ] | [Cypriot pound ] | [Czech koruna ] | [Danish krone ] | ... | [Romanian leu ] | [Russian rouble ] | [Swedish krona ] | [Singapore dollar ] | [Slovenian tolar ] | [Slovak koruna ] | [Thai baht ] | [Turkish lira ] | [US dollar ] | [South African rand ] | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
5694 | 1999-01-08 | 1.8406 | NaN | NaN | 1.7643 | 1.6138 | NaN | 0.58187 | 34.938 | 7.4433 | ... | 1.3143 | 27.2075 | 9.1650 | 1.9537 | 188.8400 | 42.560 | 42.5590 | 0.3718 | 1.1659 | 6.7855 |
5695 | 1999-01-07 | 1.8474 | NaN | NaN | 1.7602 | 1.6165 | NaN | 0.58187 | 34.886 | 7.4431 | ... | 1.3092 | 26.9876 | 9.1800 | 1.9436 | 188.8000 | 42.765 | 42.1678 | 0.3701 | 1.1632 | 6.8283 |
5696 | 1999-01-06 | 1.8820 | NaN | NaN | 1.7711 | 1.6116 | NaN | 0.58200 | 34.850 | 7.4452 | ... | 1.3168 | 27.4315 | 9.3050 | 1.9699 | 188.7000 | 42.778 | 42.6949 | 0.3722 | 1.1743 | 6.7307 |
5697 | 1999-01-05 | 1.8944 | NaN | NaN | 1.7965 | 1.6123 | NaN | 0.58230 | 34.917 | 7.4495 | ... | 1.3168 | 26.5876 | 9.4025 | 1.9655 | 188.7750 | 42.848 | 42.5048 | 0.3728 | 1.1790 | 6.7975 |
5698 | 1999-01-04 | 1.9100 | NaN | NaN | 1.8004 | 1.6168 | NaN | 0.58231 | 35.107 | 7.4501 | ... | 1.3111 | 25.2875 | 9.4696 | 1.9554 | 189.0450 | 42.991 | 42.6799 | 0.3723 | 1.1789 | 6.9358 |
5 rows × 41 columns
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)
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 Time 5699 non-null datetime64[ns] 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: datetime64[ns](1), float64(3), object(37) memory usage: 1.8+ MB
euro_to_dollar = exchange_rates[['Time', 'US_dollar']]
euro_to_dollar = euro_to_dollar.copy()[euro_to_dollar['US_dollar'] != '-']
euro_to_dollar['US_dollar'] = euro_to_dollar['US_dollar'].astype(float)
euro_to_dollar['rolling_mean'] = euro_to_dollar['US_dollar'].rolling(30).mean()
euro_to_dollar = euro_to_dollar.dropna()
euro_to_dollar.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 5608 entries, 29 to 5698 Data columns (total 3 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Time 5608 non-null datetime64[ns] 1 US_dollar 5608 non-null float64 2 rolling_mean 5608 non-null float64 dtypes: datetime64[ns](1), float64(2) memory usage: 175.2 KB
How has the euro-dollar rate changed during the last three U.S. presidents (George W. Bush (2001-2009), Barack Obama (2009-2017), and Donald Trump (2017-2021))?
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.style as style
plt.plot(euro_to_dollar['Time'], euro_to_dollar['rolling_mean'])
plt.show()
import datetime as dt
euro_to_dollar.loc[(euro_to_dollar['Time'] >= dt.datetime(2001,1,20)) & (euro_to_dollar['Time'] <= dt.datetime(2009,1,19)),'President'] = "BUSH"
euro_to_dollar.loc[(euro_to_dollar['Time'] >= dt.datetime(2009,1,20)) & (euro_to_dollar['Time'] <= dt.datetime(2017,1,19)),'President'] = 'OBAMA'
euro_to_dollar.loc[euro_to_dollar['Time'] >= dt.datetime(2017,1,20),'President'] = 'TRUMP'
euro_to_dollar['President'].value_counts()
OBAMA 2052 BUSH 2044 TRUMP 1013 Name: President, dtype: int64
euro_to_dollar = euro_to_dollar.dropna()
euro_to_dollar_bush = euro_to_dollar[euro_to_dollar['President'] == 'BUSH'].copy()
euro_to_dollar_obama = euro_to_dollar[euro_to_dollar['President'] == 'OBAMA'].copy()
euro_to_dollar_trump = euro_to_dollar[euro_to_dollar['President'] == 'TRUMP'].copy()
style.use('fivethirtyeight')
fig = plt.figure(figsize = (16,9))
spec = fig.add_gridspec(2, 3)
ax1 = fig.add_subplot(spec[1, :])
ax1.plot(euro_to_dollar_bush['Time'], euro_to_dollar_bush['rolling_mean'], color = '#9966cc')
ax1.plot(euro_to_dollar_obama['Time'], euro_to_dollar_obama['rolling_mean'], color = "#ffbf00")
ax1.plot(euro_to_dollar_trump['Time'], euro_to_dollar_trump['rolling_mean'], color = '#00b7e5')
plt.xticks([])
ax1.set_yticks([1.0, 1.2, 1.4, 1.6])
ax1.set_yticklabels(labels = [1.0, 1.2, 1.4, 1.6], color = 'grey')
ax00 = fig.add_subplot(spec[0, 0])
ax00.plot(euro_to_dollar_bush['Time'], euro_to_dollar_bush['rolling_mean'], color = '#9966cc')
ax00_ylim = ax00.get_ylim()
ax00.set_xticklabels(["", "2001", "", "2003", "", "2005", "", "2007", "", "2009"], color = 'grey')
ax00.set_yticks([1.0, 1.2, 1.4, 1.6])
ax00.set_yticklabels(labels = [1.0, 1.2, 1.4, 1.6], color = 'grey')
ax00.text(0.5, 1.15,"BUSH", color = '#9966cc', ha = 'center',
weight = 'bold',fontsize = 'x-large', transform=ax00.transAxes)
ax00.text(0.5, 1.05, "(2001-2009)", color = 'grey', ha = 'center',
weight = 'bold',fontsize = 'large',transform=ax00.transAxes)
ax01 = fig.add_subplot(spec[0, 1])
ax01.plot(euro_to_dollar_obama['Time'], euro_to_dollar_obama['rolling_mean'], color = "#ffbf00")
ax01.set_ylim(ax00_ylim)
ax01.set_xticklabels(["", "2009", "", "2011", "", "2013", "", "2015", "", "2017"],color = 'grey')
ax01.set_yticks([1.0, 1.2, 1.4, 1.6])
ax01.set_yticklabels(labels = [1.0, 1.2, 1.4, 1.6], color = 'grey')
ax01.text(0.5, 1.15,"OBAMA", color = '#ffbf00', ha = 'center',
weight = 'bold',fontsize = 'x-large', transform=ax01.transAxes)
ax01.text(0.5, 1.05, "(2009-2017)", color = 'grey', ha = 'center',
weight = 'bold',fontsize = 'large',transform=ax01.transAxes)
ax02 = fig.add_subplot(spec[0, 2])
ax02.plot(euro_to_dollar_trump['Time'], euro_to_dollar_trump['rolling_mean'], color = '#00b7e5')
ax02.set_ylim(ax00_ylim)
ax02.set_xticklabels(["2017", "", "2018", "", "2019", "", "2020", "", "2021"],color = 'grey')
ax02.set_yticks([1.0, 1.2, 1.4, 1.6])
ax02.set_yticklabels(labels = [1.0, 1.2, 1.4, 1.6], color = 'grey')
ax02.text(0.5, 1.15,"TRUMP", color = '#00b7e5', ha = 'center',
weight = 'bold',fontsize = 'x-large', transform=ax02.transAxes)
ax02.text(0.5, 1.05, "(2009-2017)", color = 'grey', ha = 'center',
weight = 'bold',fontsize = 'large',transform=ax02.transAxes)
plt.text(732300,2.1, "EURO-USD rate averaged 1.22 under the last three US Presidents",
horizontalalignment='left', size = 28,weight = 'bold')
plt.text(732300,2, "EURO-USD exchange rates under George W.Bush (2001-2009), Barack Obama (2019-2017),",
horizontalalignment='left', size = 22)
plt.text(732300,1.9, "and Donald Trump (2017-2021)",
horizontalalignment='left', size = 22)
plt.text(732300, -0.2, "©DATAQUEST" + " "*160 + "Source: European Central Bank",
color = 'white',
backgroundcolor = "#606060")
#ax00.get_xticks()
plt.show()