import datetime as dt
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib.style as style
exchange_rates = pd.read_csv('euro-daily-hist_1999_2020.csv')
exchange_rates.info()
exchange_rates.head(5)
<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
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
#renaming US Dollar and Period\Unit: to US_dollar and Time
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']].copy()
euro_to_dollar['US_dollar'].value_counts()
- 62 1.2276 9 1.1215 8 1.1305 7 1.0888 6 .. 1.1691 1 1.4128 1 0.9762 1 0.9214 1 0.8679 1 Name: US_dollar, Length: 3528, dtype: int64
#drop rows containing '-'
euro_to_dollar = euro_to_dollar[euro_to_dollar['US_dollar'] != '-']
euro_to_dollar['US_dollar'] = euro_to_dollar['US_dollar'].astype(float)
euro_to_dollar.info()
<class 'pandas.core.frame.DataFrame'> Int64Index: 5637 entries, 0 to 5698 Data columns (total 2 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Time 5637 non-null datetime64[ns] 1 US_dollar 5637 non-null float64 dtypes: datetime64[ns](1), float64(1) memory usage: 132.1 KB
#visualizing US dollar change over time
plt.plot(euro_to_dollar['Time'],
euro_to_dollar['US_dollar'])
plt.show()
#smooth out graph with rolling.mean
plt.plot(euro_to_dollar['Time'],
euro_to_dollar['US_dollar'].rolling(30).mean())
[<matplotlib.lines.Line2D at 0x7f5e6cd603a0>]
In 1999, the countries Austria, Belgium, Finland, France, Germany, Ireland, Italy, Luxembourg, the Netherlands, Portugal and Spain fixed their currency rate and combined them to create the Euro. This dataset on Kaggle that was made available by Daria Chemkaeva tracks the foreign exchange rate from 04 Jan, 1999 to 15 Nov, 2022. This analysis will take a subset from 11 Sep, 2000 to Sep 11, 2002 - One year before and after 9/11.
#isolating pre911 and post911(inclusive)
pre_start_date = '2000-09-11'
pre_end_date = '2001-09-10'
pre_start_date = pd.to_datetime(pre_start_date)
pre_end_date = pd.to_datetime(pre_end_date)
pre_911 = euro_to_dollar[euro_to_dollar['Time'].between(pre_start_date, pre_end_date)]
print(pre_911.head(5))
print(pre_911.tail(5))
Time US_dollar 440 2000-09-11 0.8609 441 2000-09-12 0.8614 442 2000-09-13 0.8654 443 2000-09-14 0.8693 444 2000-09-15 0.8615 Time US_dollar 696 2001-09-04 0.8970 697 2001-09-05 0.8891 698 2001-09-06 0.8855 699 2001-09-07 0.8952 700 2001-09-10 0.9047
post_start_date = '2001-09-11'
post_end_date = '2002-09-11'
post_start_date = pd.to_datetime(post_start_date)
post_end_date = pd.to_datetime(post_end_date)
post_911 = euro_to_dollar[euro_to_dollar['Time'].between(post_start_date, post_end_date)]
print(post_911.head(5))
print(post_911.tail(5))
Time US_dollar 701 2001-09-11 0.8964 702 2001-09-12 0.9052 703 2001-09-13 0.9060 704 2001-09-14 0.9219 705 2001-09-17 0.9269 Time US_dollar 958 2002-09-05 0.9975 959 2002-09-06 0.9918 960 2002-09-09 0.9794 961 2002-09-10 0.9760 962 2002-09-11 0.9749
style.use('seaborn')
fig, ax = plt.subplots(figsize=(9, 5))
ax.plot(pre_911['Time'], pre_911['US_dollar'])
ax.plot(post_911['Time'], post_911['US_dollar'])
ax.set_xticklabels([])
ax.grid(visible=False)
#v and h lines
ax.axvline(dt.datetime(2001, 9, 11),
ymin=0.05, ymax=0.89,
color='#5A5A5A', alpha=.5,
linewidth=2, linestyle='dashed')
ax.axhline(0.82, xmin=0.05, xmax=0.45,
color='#5A5A5A', alpha=.5)
ax.axhline(0.82, xmin=0.55, xmax=0.95,
color='#5A5A5A', alpha=.5)
#x axis text
ax.text(730340, 0.809, '2000 Sep 11',
size=10, color='#5A5A5A')
ax.text(731050, 0.809, '2002 Sep 11',
size=10, color='#5A5A5A')
ax.text(730700,0.809, '2001 Sep 11',
size=10, color='#5A5A5A',
weight='bold')
#Title
ax.text(730343, 1.03, 'Euro to US Dollar Exchange Rate: 1 Year Before and After 9-11',
size=14, weight='bold',color = '#f0f0f0',
backgroundcolor = '#4d4d4d')
#ax.text(730340, 1, '1 Year Before and After 9-11',
# color = '#f0f0f0',
# backgroundcolor = '#4d4d4d')
Text(730343, 1.03, 'Euro to US Dollar Exchange Rate: 1 Year Before and After 9-11')