How to correctly call data from Alpha Vantage using Python pandas-datareader 0.8

Viewed 4558

noobs on python here.

I am currently using python pandas-datareader 0.7 for some stock analysis.

With the update of pandas-datareader 0.8. It should be able to grab historical data from Alpha Vantage.

But I don't really understand how to use the api key (currently using yahoo and no key is needed)

From the documentation of pandas-datareader, I tried the same code (with my api key say ABC123 registered in alpha vantage) by replacing the ALPHAVANTAGE_API_KEY with ABC123

    import os

    from datetime import datetime

    import pandas_datareader.data as web

    df = web.DataReader("AAPL", "av-daily", start=datetime(2017, 2, 9),end=datetime(2017, 5, 24),api_key=os.getenv('ABC123')) 

    print(df)

I expected it outputs the historical data.
But it said "DataReader() got an unexpected keyword argument 'api_key'"

How do I correctly use the api key so that I can grab the data?

2 Answers

Hey do you have to use pandas datareader? Below is a function I wrote to easily extract historical stock prices from Alpha Vantage. All you have to do is plug in your symbol and token. For more functions on extracting Alpha Vantage data, feel free to check out my link: https://github.com/hklchung/StockPricePredictor/blob/master/2020/alphavantage_funcs.py

def request_stock_price_hist(symbol, token, sample = False):
    if sample == False:
        q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&outputsize=full&apikey={}'
    else:
        q_string = 'https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol={}&apikey={}'

    print("Retrieving stock price data from Alpha Vantage (This may take a while)...")
    r = requests.get(q_string.format(symbol, token))
    print("Data has been successfully downloaded...")
    date = []
    colnames = list(range(0, 7))
    df = pd.DataFrame(columns = colnames)
    print("Sorting the retrieved data into a dataframe...")
    for i in tqdm(r.json()['Time Series (Daily)'].keys()):
        date.append(i)
        row = pd.DataFrame.from_dict(r.json()['Time Series (Daily)'][i], orient='index').reset_index().T[1:]
        df = pd.concat([df, row], ignore_index=True)
    df.columns = ["open", "high", "low", "close", "adjusted close", "volume", "dividend amount", "split cf"]
    df['date'] = date
    return df

The way you would use the above function is as follows:

df = request_stock_price_hist('IBM', 'REPLACE_YOUR_TOKEN')
df.to_csv('output.csv')

The codeos.getenv('ALPHAVANTAGE_API_KEY') tells the computer to grab the environment variable named 'ALPHA_VANTAGE_API_KEY'

The short term fix is to just replace the code:

From: api_key=os.getenv('ABC123')

To: api_key='ABC123'


The reason that they default to an environment variable, is that it's safer to not store your key directly in your code. Here is a link on more information, but the easiest way to set one up is to run:

cd 
echo "export ALPHAVANTAGE_API_KEY=\"ABC123\"" >> .bash_profile

Of course replace, ABC123 with your actual key. Then restart the shell/kernal.

Related