import pandas as pd
import numpy as np
import pandas_datareader.data as web
import datetime
import matplotlib.pyplot as plt
%matplotlib inline
df = pd.read_csv('https://stocks-snp-500.herokuapp.com/stocks/stocks_table.csv?_size=max')
df
rowid Date MSFT_stock ZOOM_stock SNOW_stock FXAIX_stock
0 1 2020-01-02 00:00:00.000000 158.779999 68.800003 NaN 112.980003
1 2 2020-01-03 00:00:00.000000 158.320007 67.620003 NaN 112.190002
2 3 2020-01-06 00:00:00.000000 157.080002 66.629997 NaN 112.589996
3 4 2020-01-07 00:00:00.000000 159.320007 70.290001 NaN 112.290001
4 5 2020-01-08 00:00:00.000000 158.929993 71.809998 NaN 112.839996
... ... ... ... ... ... ...
258 259 2021-01-11 00:00:00.000000 218.470001 344.980011 295.000000 131.750000
259 260 2021-01-12 00:00:00.000000 216.500000 333.200012 298.000000 131.800003
260 261 2021-01-13 00:00:00.000000 214.020004 360.000000 295.000000 132.100006
261 262 2021-01-14 00:00:00.000000 215.910004 371.000000 305.000000 131.619995
262 263 2021-01-15 00:00:00.000000 213.520004 397.709991 306.820007 130.679993

263 rows × 6 columns

start = pd.to_datetime('2020-01-01')
end = pd.to_datetime('today')


FXAIX_stock = web.DataReader('FXAIX', 'yahoo', start, end)
FXAIX_stock.head()

MSFT_stock = web.DataReader('MSFT', 'yahoo', start, end)
MSFT_stock.head()

ZOOM_stock = web.DataReader('ZM', 'yahoo', start, end)
ZOOM_stock.head()

SNOW_stock = web.DataReader('SNOW', 'yahoo', start, end)
SNOW_stock.head()


fig = plt.figure(figsize=(12, 6))
plt.title('Open')

MSFT_stock['Open'].plot(label='Microsoft')
ZOOM_stock['Open'].plot(label='Zoom')
SNOW_stock['Open'].plot(label='Snowflake')
FXAIX_stock['Open'].plot(label='SNP_500')
plt.legend()

fig = plt.figure(figsize=(12, 6))
plt.title('Volume')

MSFT_stock['Volume'].plot(label='Microsoft')
ZOOM_stock['Volume'].plot(label='Zoom')
SNOW_stock['Volume'].plot(label='Snowflake')
FXAIX_stock['Volume'].plot(label='SNP_500')

plt.legend()
<matplotlib.legend.Legend at 0x7f7f95b65f40>
FXAIX_stock = web.DataReader('FXAIX', 'yahoo', start, end)
FXAIX_stock.head()

MSFT_stock = web.DataReader('MSFT', 'yahoo', start, end)
MSFT_stock.head()

ZOOM_stock = web.DataReader('ZM', 'yahoo', start, end)
ZOOM_stock.head()

SNOW_stock = web.DataReader('SNOW', 'yahoo', start, end)
SNOW_stock.head()
High Low Open Close Volume Adj Close
Date
2020-09-16 319.0 231.110001 245.000000 253.929993 36099700 253.929993
2020-09-17 241.5 215.240005 230.759995 227.539993 11907500 227.539993
2020-09-18 249.0 218.589996 235.000000 240.000000 7475400 240.000000
2020-09-21 241.5 218.600006 230.000000 228.850006 5524900 228.850006
2020-09-22 239.0 225.149994 238.500000 235.160004 3889100 235.160004
stocks = pd.concat([MSFT_stock['Open'], ZOOM_stock['Open'], SNOW_stock['Open'], FXAIX_stock['Open']],
                   axis = 1)
stocks.reset_index(level=0, inplace=True)
stocks
Date Open Open Open Open
0 2020-01-02 158.779999 68.800003 NaN 112.980003
1 2020-01-03 158.320007 67.620003 NaN 112.190002
2 2020-01-06 157.080002 66.629997 NaN 112.589996
3 2020-01-07 159.320007 70.290001 NaN 112.290001
4 2020-01-08 158.929993 71.809998 NaN 112.839996
... ... ... ... ... ...
258 2021-01-11 218.470001 344.980011 295.000000 131.750000
259 2021-01-12 216.500000 333.200012 298.000000 131.800003
260 2021-01-13 214.020004 360.000000 295.000000 132.100006
261 2021-01-14 215.910004 371.000000 305.000000 131.619995
262 2021-01-15 213.520004 397.709991 306.820007 130.679993

263 rows × 5 columns

stocks.columns = ['Date','MSFT_stock','ZOOM_stock','SNOW_stock','FXAIX_stock']
stocks
Date MSFT_stock ZOOM_stock SNOW_stock FXAIX_stock
0 2020-01-02 158.779999 68.800003 NaN 112.980003
1 2020-01-03 158.320007 67.620003 NaN 112.190002
2 2020-01-06 157.080002 66.629997 NaN 112.589996
3 2020-01-07 159.320007 70.290001 NaN 112.290001
4 2020-01-08 158.929993 71.809998 NaN 112.839996
... ... ... ... ... ...
258 2021-01-11 218.470001 344.980011 295.000000 131.750000
259 2021-01-12 216.500000 333.200012 298.000000 131.800003
260 2021-01-13 214.020004 360.000000 295.000000 132.100006
261 2021-01-14 215.910004 371.000000 305.000000 131.619995
262 2021-01-15 213.520004 397.709991 306.820007 130.679993

263 rows × 5 columns

import sqlalchemy as db
from sqlalchemy import create_engine
import sqlite3
import pandas as pd
engine = db.create_engine('sqlite:///stocks.db')
connection = engine.connect()
metadata = db.MetaData()
stocks_table = db.Table('stocks_table', metadata, 
    db.Column('Date',db.Integer, nullable=True, index=False),
    db.Column('MSFT_stock',db.Integer, nullable=True),
    db.Column('ZOOM_stock',db.Integer, nullable=True),
    db.Column('SNOW_stock',db.Integer, nullable=True),
    db.Column('FXAIX_stock', db.Numeric, nullable=True)
)
metadata.create_all(engine) #Creates the table
stocks_table
Table('stocks_table', MetaData(bind=None), Column('Date', Integer(), table=<stocks_table>), Column('MSFT_stock', Integer(), table=<stocks_table>), Column('ZOOM_stock', Integer(), table=<stocks_table>), Column('SNOW_stock', Integer(), table=<stocks_table>), Column('FXAIX_stock', Numeric(), table=<stocks_table>), schema=None)
stocks.to_sql('stocks_table', con=engine, if_exists='append', index=False)
engine.execute("SELECT * FROM stocks_table LIMIT 10").fetchall()
[('2020-01-02 00:00:00.000000', 158.77999877929688, 68.80000305175781, None, 112.9800033569336),
 ('2020-01-03 00:00:00.000000', 158.32000732421875, 67.62000274658203, None, 112.19000244140625),
 ('2020-01-06 00:00:00.000000', 157.0800018310547, 66.62999725341797, None, 112.58999633789062),
 ('2020-01-07 00:00:00.000000', 159.32000732421875, 70.29000091552734, None, 112.29000091552734),
 ('2020-01-08 00:00:00.000000', 158.92999267578125, 71.80999755859375, None, 112.83999633789062),
 ('2020-01-09 00:00:00.000000', 161.83999633789062, 73.98999786376953, None, 113.62000274658203),
 ('2020-01-10 00:00:00.000000', 162.82000732421875, 73.08000183105469, None, 113.30000305175781),
 ('2020-01-13 00:00:00.000000', 161.75999450683594, 73.88999938964844, None, 114.08999633789062),
 ('2020-01-14 00:00:00.000000', 163.38999938964844, 74.31999969482422, None, 113.93000030517578),
 ('2020-01-15 00:00:00.000000', 162.6199951171875, 73.27999877929688, None, 114.13999938964844)]
sql = """
SELECT
  DATE(date) AS DATE
, FXAIX_stock
, MSFT_stock
, SNOW_stock
, row_number() OVER (PARTITION BY Date, MSFT_stock ORDER BY Date) AS REC_NBR
, COUNT(*) OVER (PARTITION BY Date, MSFT_stock ORDER BY Date) AS REC_CNT
, CASE WHEN FXAIX_stock >= 120 THEN 'SNP_High' ELSE 'SNP_low' END AS SNP_HIGH_LOW
FROM stocks_table
--WHERE FXAIX_stock >= 120
"""

cnxn = connection
stocks = pd.read_sql(sql, cnxn)
stocks.tail(30)
DATE FXAIX_stock MSFT_stock SNOW_stock REC_NBR REC_CNT SNP_HIGH_LOW
233 2020-12-03 127.540001 214.610001 290.540009 1 1 SNP_High
234 2020-12-04 128.669998 214.220001 335.399994 1 1 SNP_High
235 2020-12-07 128.419998 214.369995 393.500000 1 1 SNP_High
236 2020-12-08 128.789993 213.970001 388.799988 1 1 SNP_High
237 2020-12-09 127.769997 215.160004 393.399994 1 1 SNP_High
238 2020-12-10 127.610001 211.770004 362.000000 1 1 SNP_High
239 2020-12-11 126.870003 210.050003 360.399994 1 1 SNP_High
240 2020-12-14 126.339996 213.100006 352.489990 1 1 SNP_High
241 2020-12-15 127.970001 215.169998 308.980011 1 1 SNP_High
242 2020-12-16 128.199997 214.750000 328.429993 1 1 SNP_High
243 2020-12-17 128.940002 219.869995 333.820007 1 1 SNP_High
244 2020-12-18 128.500000 218.589996 332.769989 1 1 SNP_High
245 2020-12-21 128.000000 217.550003 329.000000 1 1 SNP_High
246 2020-12-22 127.750000 222.690002 349.890015 1 1 SNP_High
247 2020-12-23 127.839996 223.110001 341.160004 1 1 SNP_High
248 2020-12-24 128.309998 221.419998 334.100006 1 1 SNP_High
249 2020-12-28 129.429993 224.449997 324.869995 1 1 SNP_High
250 2020-12-29 129.139999 226.309998 305.250000 1 1 SNP_High
251 2020-12-30 129.330002 225.229996 304.000000 1 1 SNP_High
252 2020-12-31 130.169998 221.699997 299.700012 1 1 SNP_High
253 2021-01-04 128.259995 222.529999 285.410004 1 1 SNP_High
254 2021-01-05 129.179993 217.259995 280.619995 1 1 SNP_High
255 2021-01-06 129.919998 212.169998 279.989990 1 1 SNP_High
256 2021-01-07 131.880005 214.039993 272.589996 1 1 SNP_High
257 2021-01-08 132.619995 218.679993 315.000000 1 1 SNP_High
258 2021-01-11 131.750000 218.470001 295.000000 1 1 SNP_High
259 2021-01-12 131.800003 216.500000 298.000000 1 1 SNP_High
260 2021-01-13 132.100006 214.020004 295.000000 1 1 SNP_High
261 2021-01-14 131.619995 215.910004 305.000000 1 1 SNP_High
262 2021-01-15 130.679993 213.520004 306.820007 1 1 SNP_High
stocks['FXAIX_stock'].plot(figsize = (12, 8))
plt.title('Total S&P 500 in 2020 Value')
Text(0.5, 1.0, 'Total S&P 500 in 2020 Value')