Enriching stock market data using Open AI API
The Nasdaq-100 is a stock market index made up of 101 equity securities issued by 100 of the largest non-financial companies listed on the Nasdaq stock exchange. It helps investors compare stock prices with previous prices to determine market performance.
In this project you are provided with two CSV files containing Nasdaq-100 stock information:
- nasdaq100.csv: contains information about companies in the index such as symbol, name, etc.
- nasdaq100_price_change.csv: contains price changes per stock across periods including (but not limited to) one day, five days, one month, six months, one year, etc.
As an AI developer, you will leverage the OpenAI API to classify companies into sectors and produce a summary of sector and company performance for this year.
CSV with Nasdaq-100 stock data
In this project, you have available two CSV files nasdaq100.csv and nasdaq100_price_change.csv.
nasdaq100.csv
symbol,name,headQuarter,dateFirstAdded,cik,founded AAPL,Apple Inc.,"Cupertino, CA",,0000320193,1976-04-01 ABNB,Airbnb,"San Francisco, CA",,0001559720,2008-08-01 ADBE,Adobe Inc.,"San Jose, CA",,0000796343,1982-12-01 ADI,Analog Devices,"Wilmington, MA",,0000006281,1965-01-01 ...
nasdaq100_price_change.csv
symbol,1D,5D,1M,3M,6M,ytd,1Y,3Y,5Y,10Y,max AAPL,-1.7254,-8.30086,-6.20411,3.042,15.64824,42.99992,8.47941,60.96299,245.42031,976.99441,139245.53954 ABNB,2.1617,-2.21919,9.88336,19.43286,19.64241,68.66902,23.64013,-1.04347,-1.04347,-1.04347,-1.04347 ADBE,0.5409,-1.77817,9.16191,52.0465,38.01522,57.22723,21.96206,17.83037,109.05718,1024.69214,251030.66399 ADI,0.9291,-4.03352,2.58486,3.65887,5.01602,17.02062,8.09735,63.42847,92.81874,286.77518,26012.63736 ...
Before you start
In order to complete the project you will need to create a developer account with OpenAI and store your API key as an environment variable. Instructions for these steps are outlined below.
Create a developer account with OpenAI
-
Go to the API signup page.
-
Create your account (you'll need to provide your email address and your phone number).
-
Go to the API keys page.
-
Create a new secret key.
- Take a copy of it. (If you lose it, delete the key and create a new one.)
Add a payment method
OpenAI sometimes provides free credits for the API, but it's not clear if that is worldwide or what the conditions are. You may need to add debit/credit card details.
The API costs $0.002 / 1000 tokens for GPT-3.5-turbo. 1000 tokens is about 750 words. This project should cost less than 1 US cents (but if you rerun tasks, you will be charged every time).
-
Go to the Payment Methods page.
-
Click Add payment method.
- Fill in your card details.
Add an environmental variable with your OpenAI key
-
In Workspace, click on "Environment," in the left sidebar.
-
Click on the plus button next to "Environment variables" to add environment variables.
-
In the "Name" field, type "OPENAI_API_KEY". In the "Value" field, paste in your secret key.
- Click "Create", then you'll see the following pop-up window. Click "Connect," then wait 5-10 seconds for the kernel to restart, or restart it manually in the Run menu.
# Start your code here!
import os
import pandas as pd
from openai import OpenAI
# Instantiate an API client
client = OpenAI(api_key=os.environ['OPENAI_API_KEY'])
# Continue coding here
# Use as many cells as you like1 - Use pandas to read the stock market data
# Read in the two csv files and store as pandas DataFrames
nasdaq100 = pd.read_csv('nasdaq100.csv')
nasdaq100_price_change = pd.read_csv('nasdaq100_price_change.csv')nasdaq100.head()nasdaq100_price_change.head()print(nasdaq100.shape)
print(nasdaq100_price_change.shape)# Bring year-to-date into the nasdaq100 DataFrame
nasdaq100_price_change_sub = nasdaq100_price_change[['symbol', 'ytd']] # subset to 'symbol' and 'ytd'
nasdaq100 = nasdaq100.merge(nasdaq100_price_change_sub, on='symbol')
nasdaq100.head()nasdaq100.shape2 - Use OpenAI to classify
# Loop through the NASDAQ companies
for company in nasdaq100['name']:
# Create prompt to enrich nasdaq100 using OpenAI
prompt = f'''Classify company {company} into one of the following sectors. Answer only with the sector name: Technology, Consumer Cyclical, Industrial, Utilties, Healthcare, Communication, Energy, Consumer Defensive, Real Estate, or Financial.'''
# Create a request to the completions endpoint
response = client.chat.completions.create(
model='gpt-4o-mini',
messages=[{'role': 'user', 'content': prompt}],
temperature=0.0,
)
# Store the output as a variable called sector
sector = response.choices[0].message.content
# Add the sector for the corresponding company
nasdaq100.loc[nasdaq100['name'] == company, 'sector'] = sector