1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| import os import pandas as pd import matplotlib.pyplot as plt
def symbol_to_path(symbol, base_dir="data"): """Return CSV file path given ticker symbol.""" return os.path.join(base_dir, "{}.csv".format(str(symbol)))
def get_data(symbols, dates): """Read stock data (adjusted close) for given symbols from CSV files.""" df = pd.DataFrame(index=dates) if 'SPY' not in symbols: # add SPY for reference, if absent symbols.insert(0, 'SPY')
for symbol in symbols: # Quiz: Read and join data for each symbol df_temp = pd.read_csv(symbol_to_path(symbol), index_col='Date', parse_dates=True, usecols=['Date', 'Adj Close'], na_values=['nan']) df_temp = df_temp.rename(columns={'Adj Close': symbol}) df = df.join(df_temp) if symbol == 'SPY': # drop dates SPY did not trade df = df.dropna(subset=["SPY"])
return df
def normalize_data(df): """Normalize stock prices using the first row of the dataframe.""" return df/ df.ix[0,:] def plot_selected(df, columns, start_index, end_index): """Plot the desired columns over index values in the given range.""" # Quiz: Your code here plot_data(df.ix[start_index:end_index,columns], title="Selected data") def plot_data(df, title="Stock prices"): """Plot stock prices with a custom title and meaningful axis labels.""" ax = df.plot(title=title, fontsize=12) ax.set_xlabel("Date") ax.set_ylabel("Price") plt.show()
def test_run(): # Define a date range dates = pd.date_range('2010-01-01', '2010-12-31')
# Choose stock symbols to read symbols = ['GOOG', 'IBM', 'GLD'] # SPY will be added in get_data() # Get stock data df = get_data(symbols, dates) print (df)
# Slice and plot plot_selected(df, ['SPY', 'IBM'], '2010-03-01', '2010-04-01')
if __name__ == "__main__": test_run()
|