{"id":1276,"date":"2022-01-27T11:26:28","date_gmt":"2022-01-27T18:26:28","guid":{"rendered":"https:\/\/jeremywhittaker.com\/?p=1276"},"modified":"2022-02-02T13:54:23","modified_gmt":"2022-02-02T20:54:23","slug":"retrieving-historical-data-from-fred-or-yahoo-finance-using-python","status":"publish","type":"post","link":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/","title":{"rendered":"Retrieving historical data from FRED or Yahoo Finance using Python"},"content":{"rendered":"\n<p>If you spend a lot of time analyzing big data then data retrieval is paramount. I&#8217;ve written some Python code that I use daily to retrieve data from <a href=\"https:\/\/fred.stlouisfed.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">Federal Reserve Bank of St. Louis <\/a>and <a href=\"https:\/\/pypi.org\/project\/yfinance\/\" target=\"_blank\" rel=\"noreferrer noopener\">finance<\/a>. <\/p>\n\n\n\n<p>The first part of this code simply mounts Google drive so you can interface files on your local computer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>working_folder = 'M2 Correlation'\n\n# &lt;----- Make sure to mount drive in Colab first \n\nimport os\nimport sys\nif 'google.colab' in str(get_ipython()):\n  print('Running on CoLab')\n  root_dir='\/content\/drive\/My Drive\/Colab Notebooks\/' + working_folder\n  if os.path.isdir(root_dir):\n    %cd $root_dir\n  else:\n    print('Check your working_folder or if Google drive is mounted')\n    sys.exit()\n  sys.path.append(root_dir)\n\n  %cd $root_dir\n\n  from IPython.display import clear_output \n  clear_output()\n  \n  print('Colab code has been executed')\nelse:\n  print('Not running on Colab')\n<\/code><\/pre>\n\n\n\n<p>Next, we&#8217;re going to install some dependencies. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>!pip install yfinance\n!pip install pandas-datareader<\/code><\/pre>\n\n\n\n<p>Next, we&#8217;ll import some functions<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import yfinance as yf\nimport pandas_datareader as pdr\nimport pandas as pd\nfrom datetime import datetime, timedelta\nfrom time import time\nfrom tqdm import tqdm\nfrom pathlib import Path\nimport plotly.graph_objects as go\nimport plotly.express as px\nimport logging\nimport sys\nimport matplotlib.pyplot as plt\nfrom datetime import datetime, timedelta\nimport os<\/code><\/pre>\n\n\n\n<p>In this next part of our code, we will specify which assets we want data on from FRED and the beginning and end date. Keep in mind some data will not go back as far as you specify. So you&#8217;ll have to deal with these blank rows at a later point in the data analysis. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>beginning_date = '1900-01-01'\r\ndate_today = datetime.now()\r\nend_date = date_today\r\n\r\nfred_assets = {\r\n    'cpi_urban_consumers':'CPIAUCSL',\r\n    'gold':'GOLDPMGBD228NLBM',\r\n    'median_house_price':'MSPUS',\r\n    'used_cars':'CUSR0000SETA02',\r\n    'global_all_commodities':'PALLFNFINDEXQ',\r\n    'global_copper':'PCOPPUSDM',\r\n    'spot_crude':'WTISPLC',\r\n    'global_brent_crude':'POILBREUSDM',\r\n    'ground_beef':'APU0000703112',\r\n    'rubber':'PRUBBUSDM',\r\n    'global_raw_materials':'PRAWMINDEXM',\r\n    'global_energy':'PNRGINDEXM',\r\n    'shrimp':'PSHRIUSDM',\r\n    'bacon':'PSHRIUSDM',\r\n    'soybeans':'PSOYBUSDQ',\r\n    'bread':'APU0000702111',\r\n    'propane_tx':'DPROPANEMBTX',\r\n    'global_iron_ore':'PIORECRUSDM',\r\n    'global_wheat':'PWHEAMTUSDM',\r\n    'eggs':'APU0000708111',\r\n    'corn':'PMAIZMTUSDM',\r\n    'global_aluminum':'PALUMUSDM',\r\n    'global_uranium':'PURANUSDM',\r\n    'global_cotton':'PCOTTINDUSDM',\r\n    'us_diesel':'GASDESW',\r\n    'milk':'APU0000709112',\r\n    'global_rice':'PRICENPQUSDM',\r\n    'global_beef':'PBEEFUSDQ',\r\n    'jet_fuel':'DJFUELUSGULF',\r\n    'global_sugar':'PSUGAISAUSDM',\r\n    'coffee':'PCOFFOTMUSDM',\r\n    'global_nickel':'PNICKUSDM',\r\n    'us_gasoline':'APU000074714',\r\n    'global_poultry':'PPOULTUSDM',\r\n    'global_industrial_metals':'PINDUINDEXM',\r\n    'us_flour':'APU0000701111',\r\n    'global_food':'PFOODINDEXM',\r\n    # 'global_fish':'PSALMUSDA', causing issues\r\n    'global_swine':'PPORKUSDM',\r\n    'us_tomatoes':'APU0000712311',\r\n    'lumber':'WPU081',\r\n    'real_median_personal_income':'MEPAINUSA672N',\r\n    'phoenix-mesa-chandler_house_value':'ATNHPIUS38060Q',\r\n    'california_house_value':'CASTHPI',\r\n    'san_francisco_home_price':'SFXRSA',\r\n    '30_year_fixed_mortgage_rates':'MORTGAGE30US',\r\n    'gdp':'GDP',\r\n    'fed_funds_rate':'FEDFUNDS',\r\n    'case-shiller_us_home_index':'CSUSHPINSA',\r\n    'median_household_income':'MEHOINUSA672N',\r\n    'us_house_sales_price':'ASPUS',\r\n    'corporate_bond_yield':'AAA',\r\n    'personal_consumption_expenditures':'PCE',\r\n    'us_industrial_production':'INDPRO',\r\n    'ppi_all_commodities':'PPIACO',\r\n    'us_average_hourly_earnings':'CES0500000003',\r\n    'commercial_industrial_loans':'BUSLOANS',\r\n    'real_disposable_income':'DSPIC96',\r\n    'deposits_all_commercial_banks':'DPSACBW027SBOG',\r\n    'us_home_ownership_rate':'RHORUSQ156N',\r\n    'housing_units_authorized':'PERMIT',\r\n    'coinbase_bitcoin':'CBBTCUSD',\r\n    'loans_leases_bank_credit':'TOTLLNSA',\r\n    'credit_card_delinquency_rate':'DRCCLACBS',\r\n    'disposable_income_per_capita':'A229RX0',\r\n    'personal_income':'PI',\r\n    'poplulation':'POPTHM',\r\n    'global_copper':'PCOPPUSDM',\r\n    'plywood':'WPU083',\r\n    'personal_consumption_expenditures_durable_goods':'PCEDG',\r\n    'gpn':'GNP',\r\n    'total_net_worth_top_1':'WFRBST01134',\r\n    'us_new_one_family_houses':'HSN1F',\r\n    'us_trade_balance':'BOPGSTB',\r\n    'vix':'VIXCLS',\r\n    'yld_10_yr_trsry':'DGS10',\r\n\r\n    \r\n#potential regressors of m2\r\n    'nonfarm_payroll':'PAYEMS',\r\n    'unemployment_rate':'UNRATE',\r\n\r\n#potential regressors\r\n    'm2':'M2SL',\r\n    'm3':'MABMM301USM189S',\r\n    'fed_debt':'GFDEBTN',\r\n    'monetary_base':'BOGMBASE',\r\n    'currency_in_circulation':'CURRCIR',\r\n    'm1':'M1SL',\r\n    'real_m2_money_stock':'M2REAL',\r\n    'fed_mbs':'WSHOMCB',\r\n    'fed_total_assets':'WALCL',\r\n\r\n          }\r\n\r\nyfinance_assets = {\r\n    \r\n#indices\r\n      'SP 500':'^GSPC',\r\n      'Dow 30':'^DJI',\r\n      'Nasdaq':'^IXIC',\r\n      'NYSE COMPOSITE (DJ)':'^NYA',\r\n      'NYSE AMEX COMPOSITE INDEX':'^XAX',\r\n      'Cboe UK 100':'^BUK100P',\r\n      'Russell 2000':'^RUT',\r\n      'CBOE Volatility Index':'^VIX',\r\n      'FTSE 100':'^FTSE',\r\n      'DAX PERFORMANCE-INDEX':'^GDAXI',\r\n      'CAC 40':'^FCHI',\r\n      'ESTX 50 PR.EUR':'^STOXX50E',\r\n      'Euronext 100 Index':'^N100',\r\n      'BEL 20':'^BFX',\r\n      'MOEX Russia Index':'IMOEX.ME',\r\n      'Nikkei 225':'^N225',\r\n      'HANG SENG INDEX':'^HSI',\r\n      'SSE Composite Index':'000001.SS',\r\n      'Shenzhen Component':'399001.SZ',\r\n      'STI Index':'^STI',\r\n      'SP ASX 200':'^AXJO',\r\n      'ALL ORDINARIES':'^AORD',\r\n      'SP BSE SENSEX':'^BSESN',\r\n      'Jakarta Composite Index':'^JKSE',\r\n      'FTSE Bursa Malaysia KLCI':'^KLSE',\r\n      'SP NZX 50 INDEX GROSS':'^NZ50',\r\n      'KOSPI Composite Index':'^KS11',\r\n      'TSEC weighted index':'^TWII',\r\n      'SP TSX Composite index':'^GSPTSE',\r\n      'IBOVESPA':'^BVSP',\r\n      'IPC MEXICO':'^MXX',\r\n      'SP CLX IPSA':'^IPSA',\r\n      'MERVAL':'^MERV',\r\n      'TA-125':'^TA125.TA',\r\n      'EGX 30 Price Return Index':'^CASE30',\r\n      'Top 40 USD Net TRI Index':'^JN0U.JO',\r\n\r\n#currency\r\n      'EURUSD':'EURUSD=X',\r\n      'USDJPY':'JPY=X',\r\n      'GBPUSD':'GBPUSD=X',\r\n      'AUDUSD':'AUDUSD=X',\r\n      'NZDUSD':'NZDUSD=X',\r\n      'EURJPY':'EURJPY=X',\r\n      'GBPJPY':'GBPJPY=X',\r\n      'EURGBP':'EURGBP=X',\r\n      'EURCAD':'EURCAD=X',\r\n      'EURSEK':'EURSEK=X',\r\n      'EURCHF':'EURCHF=X',\r\n      'EURHUF':'EURHUF=X',\r\n      'EURJPY':'EURJPY=X',\r\n      'USDCNY':'CNY=X',\r\n      'USDHKD':'HKD=X',\r\n      'USDSGD':'SGD=X',\r\n      'USDINR':'INR=X',\r\n      'USDMXN':'MXN=X',\r\n      'USDPHP':'PHP=X',\r\n      'USDIDR':'IDR=X',\r\n      'USDTHB':'THB=X',\r\n      'USDMYR':'MYR=X',\r\n      'USDZAR':'ZAR=X',\r\n      'USDRUB':'RUB=X',\r\n\r\n\r\n#futures\r\n      '10-Year T-Note Futures,Mar-2022':'ZN=F',\r\n      'E-Mini SP 500 Mar 22':'ES=F',\r\n      'Five-Year US Treasury Note Futu':'ZF=F',\r\n      'Nasdaq 100 Mar 22':'NQ=F',\r\n      'Crude Oil':'CL=F',\r\n      '2-Year T-Note Futures,Mar-2022':'ZT=F',\r\n      'U.S. Treasury Bond Futures,Mar-':'ZB=F',\r\n      'Natural Gas Mar 22':'NG=F',\r\n      'E-mini Russell 2000 Index Futur':'RTY=F',\r\n      'Mini Dow Jones Indus.-$5 Mar 22':'YM=F',\r\n      'Corn Futures,May-2022':'ZC=F',\r\n      'Gold':'GC=F',\r\n      'Sugar #11 May 22':'SB=F',\r\n      'Soybean Futures,May-2022':'ZS=F',\r\n      'Copper Mar 22':'HG=F',\r\n      'RBOB Gasoline Mar 22':'RB=F',\r\n      'Heating Oil Mar 22':'HO=F',\r\n      'Silver':'SI=F',\r\n      'Soybean Oil Futures,May-2022':'ZL=F',\r\n      'Brent Crude Oil Last Day Financ':'BZ=F',\r\n      'Soybean Meal Futures,May-2022':'ZM=F',\r\n      'Micro Gold Futures,Apr-2022':'MGC=F',\r\n      'Cocoa May 22':'CC=F',\r\n      'KC HRW Wheat Futures,Mar-2022':'KE=F',\r\n      'Coffee May 22':'KC=F',\r\n      'Lean Hogs Futures,Apr-2022':'HE=F',\r\n      'Cotton May 22':'CT=F',\r\n      'Platinum Apr 22':'PL=F',\r\n      'Live Cattle Futures,Apr-2022':'LE=F',\r\n      'Feeder Cattle Futures,Mar-2022':'GF=F',\r\n      'Micro Silver Futures,Mar-2022':'SIL=F',\r\n      'Palladium Mar 22':'PA=F',\r\n      'Orange Juice May 22':'OJ=F',\r\n      'Rough Rice Futures,May-2022':'ZR=F',\r\n      'Oat Futures,May-2022':'ZO=F',\r\n      'Random Length Lumber Futures':'LBS=F',\r\n      'Mont Belvieu LDH Propane (OPIS)':'B0=F',\r\n\r\n\r\n# #etf\r\n      'SPDR SP 500 ETF Trust':'SPY',\r\n      'iShares Core SP 500 ETF':'IVV',\r\n      'Vanguard Total Stock Market ETF':'VTI',\r\n      'Vanguard SP 500 ETF':'VOO',\r\n      'Invesco QQQ Trust':'QQQ',\r\n      'Vanguard FTSE Developed Markets ETF':'VEA',\r\n      'iShares Core MSCI EAFE ETF':'IEFA',\r\n      'Vanguard Value ETF':'VTV',\r\n      'iShares Core U.S. Aggregate Bond ETF':'AGG',\r\n      'Vanguard Total Bond Market ETF':'BND',\r\n      'Vanguard FTSE Emerging Markets ETF':'VWO',\r\n      'Vanguard Growth ETF':'VUG',\r\n      'iShares Core MSCI Emerging Markets ETF':'IEMG',\r\n      'iShares Core SP Small-Cap ETF':'IJR',\r\n      'iShares Russell 1000 Growth ETF':'IWF',\r\n      'Vanguard Dividend Appreciation ETF':'VIG',\r\n      'iShares Core SP Mid-Cap ETF':'IJH',\r\n      'iShares Russell 2000 ETF':'IWM',\r\n      'SPDR Gold Shares':'GLD',\r\n      'iShares Russell 1000 Value ETF':'IWD',\r\n      'iShares MSCI EAFE ETF':'EFA',\r\n      'Vanguard Total International Stock ETF':'VXUS',\r\n      'Vanguard Mid-Cap ETF':'VO',\r\n      'Vanguard Information Technology ETF':'VGT',\r\n      'Financial Select Sector SPDR Fund':'XLF',\r\n      'Vanguard Total International Bond ETF':'BNDX',\r\n      'Vanguard Intermediate-Term Corporate Bond ETF':'VCIT',\r\n      'Vanguard Real Estate ETF':'VNQ',\r\n      'Technology Select Sector SPDR Fund':'XLK',\r\n      'Vanguard Small Cap ETF':'VB',\r\n      'iShares Core SP Total U.S. Stock Market ETF':'ITOT',\r\n      'Vanguard High Dividend Yield Index ETF':'VYM',\r\n      'Vanguard Short-Term Bond ETF':'BSV',\r\n      'Vanguard Short-Term Corporate Bond ETF':'VCSH',\r\n      'iShares TIPS Bond ETF':'TIP',\r\n      'iShares iBoxx $ Investment Grade Corporate Bond ETF':'LQD',\r\n      'Vanguard FTSE All-World ex-US Index Fund':'VEU',\r\n      'iShares SP 500 Growth ETF':'IVW',\r\n      'Health Care Select Sector SPDR Fund':'XLV',\r\n      'Energy Select Sector SPDR Fund':'XLE',\r\n      'Schwab U.S. Large-Cap ETF':'SCHX',\r\n      'Schwab US Dividend Equity ETF':'SCHD',\r\n      'Invesco SP 500\u00ae Equal Weight ETF':'RSP',\r\n      'iShares Core MSCI Total International Stock ETF':'IXUS',\r\n      'SPDR Dow Jones Industrial Average ETF Trust':'DIA',\r\n      'iShares Russell 1000 ETF':'IWB',\r\n      'iShares Gold Trust':'IAU',\r\n      'iShares MSCI Emerging Markets ETF':'EEM',\r\n      'iShares Russell Midcap ETF':'IWR',\r\n      'Schwab International Equity ETF':'SCHF',\r\n      'iShares MSCI USA Min Vol Factor ETF':'USMV',\r\n      'Vanguard Large Cap ETF':'VV',\r\n      'Vanguard Small Cap Value ETF':'VBR',\r\n      'iShares National Muni Bond ETF':'MUB',\r\n      'iShares MBS ETF':'MBB',\r\n      'Vanguard Total World Stock ETF':'VT',\r\n      'iShares SP 500 Value ETF':'IVE',\r\n      'iShares ESG Aware MSCI USA ETF':'ESGU',\r\n      'iShares 1-5 Year Investment Grade Corporate Bond ETF':'IGSB',\r\n      'iShares Core Dividend Growth ETF':'DGRO',\r\n      'iShares MSCI USA Quality Factor ETF':'QUAL',\r\n      'Schwab U.S. Broad Market ETF':'SCHB',\r\n      'Vanguard FTSE Europe ETF':'VGK',\r\n      'iShares 1-3 Year Treasury Bond ETF':'SHY',\r\n      'Schwab U.S. TIPS ETF':'SCHP',\r\n      'SPDR SP Dividend ETF':'SDY',\r\n      'iShares Select Dividend ETF':'DVY',\r\n      'Consumer Discretionary Select Sector SPDR Fund':'XLY',\r\n      'Vanguard Short-Term Inflation-Protected Securities ETF':'VTIP',\r\n      'SPDR SP Midcap 400 ETF Trust':'MDY',\r\n      'iShares Preferred Income Securities ETF':'PFF',\r\n      'ProShares UltraPro QQQ':'TQQQ',\r\n      'iShares J.P. Morgan USD Emerging Markets Bond ETF':'EMB',\r\n      'JPMorgan Ultra-Short Income ETF':'JPST',\r\n      'iShares iBoxx $ High Yield Corporate Bond ETF':'HYG',\r\n      'iShares MSCI ACWI ETF':'ACWI',\r\n      'Industrial Select Sector SPDR Fund':'XLI',\r\n      'iShares 7-10 Year Treasury Bond ETF':'IEF',\r\n      'iShares Core Total USD Bond Market ETF':'IUSB',\r\n      'iShares MSCI EAFE Value ETF':'EFV',\r\n      'iShares U.S. Treasury Bond ETF':'GOVT',\r\n      'Vanguard Health Care ETF':'VHT',\r\n      'Vanguard Mid-Cap Value ETF':'VOE',\r\n      'iShares 20+ Year Treasury Bond ETF':'TLT',\r\n      'Schwab U.S. Small-Cap ETF':'SCHA',\r\n      'Schwab U.S. Large-Cap Growth ETF':'SCHG',\r\n      'iShares MSCI USA Value Factor ETF':'VLUE',\r\n      'Vanguard Mortgage-Backed Securities ETF':'VMBS',\r\n      'Vanguard Extended Market ETF':'VXF',\r\n      'iShares Russell 2000 Value ETF':'IWN',\r\n      'Consumer Staples Select Sector SPDR Fund':'XLP',\r\n      'Vanguard Tax-Exempt Bond ETF':'VTEB',\r\n      'iShares Russell Mid-Cap Value ETF':'IWS',\r\n      'SPDR Bloomberg 1-3 Month T-Bill ETF':'BIL',\r\n      'Dimensional U.S. Core Equity 2 ETF':'DFAC',\r\n      'iShares MSCI EAFE Small-Cap ETF':'SCZ',\r\n      'Vanguard Intermediate-Term Bond ETF':'BIV',\r\n      'Vanguard Short-Term Treasury ETF':'VGSH',\r\n      'Vanguard Small Cap Growth ETF':'VBK',\r\n      'iShares Short Treasury Bond ETF':'SHV',\r\n\r\n\r\n# stocks\r\n      'Berkshire Hathaway':'brk-a',\r\n      'Johnson and Johnson':'jnj',\r\n      'abnb':'abnb',\r\n      'adbe':'adbe',\r\n      'crwd':'crwd',\r\n      'dis':'dis',\r\n      'fvrr':'fvrr',\r\n      'gm':'gm',\r\n      'msft':'msft',\r\n      'shop':'shop',\r\n      'spot':'spot',\r\n          }\r\n<\/code><\/pre>\n\n\n\n<p>Retrieving code from yfinance is slightly different so we&#8217;ll specify those assets next. You can download almost any stock, index, or ETF you want from <a href=\"https:\/\/finance.yahoo.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Yahoo Finance<\/a>. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>yfinance_assets = {\n    \n#index\n    'spy500':'^gspc',\n    'nasdaq':'^IXIC',\n    'nasdaq_100':'^NDX',\n    'djia':'^DJI',\n    'wilshire5000':'^W5000',\n    'nasdaq':'^IXIC',\n    'russell_2000':'^RUT',\n\n\n\n# #etf\n      'etf_djia':'DIA', #mega\n      'etf_large_cap':'SPY', #large cap\n      'etf_mid_cap':'IJH', #mid cap\n      'etf_small_cap':'IWO', #small cap\n      'etf_mall_cap_value':'VBR', #small cap value\n      'etf_small_cap_growth':'VBK', #small cap growth\n      'etf_micro_cap':'IWM', #micro cap\n      'etf_emerging_markets':'VEIEX', #emerging markets\n      'etf_reit':'IYR', #reit \n      'etf_high_yield_bonds':'HYG', #high yield bonds\n      'etf_investment_grade_bonds':'LQD', #investment grade bonds\n      'etf_gld':'GLD', #gold etf\n      'etf_nasdaq':'QQQ', #nasdaq etf\n      'etf_total_market':'VTI', #etf total market\n\n          }<\/code><\/pre>\n\n\n\n<p>I don&#8217;t like downloading all my data every day. So this function I wrote backs up your dataframe.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def save_df(temp_df, filename):\n  pd.to_pickle(df,f'{filename}.pkl')\n  temp_df.to_csv(f'{filename}.csv')<\/code><\/pre>\n\n\n\n<p>This section of code will not only plot the asset so you can visually diagnose it but it will save it to your Google drive in a subfolder. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def plot_and_save(df_temp,folder_name):\n  for col in df_temp.columns:\n    df_temp2 = pd.DataFrame()\n    df_temp2 = df_temp&#91;f'{col}']\n    df_temp2.dropna(axis='rows', inplace=True)\n    fig = px.line(df_temp2, x=df_temp2.index, y=f'{col}', color_discrete_sequence=&#91;'red'])\n    try:\n      fig.write_html(f'{folder_name}\/{col}.html')\n    except:\n      os.makedirs(f'{folder_name}')\n      fig.write_html(f'{folder_name}\/{col}.html')\n    #comment out to save memory\n    fig.show()<\/code><\/pre>\n\n\n\n<p>Here&#8217;s the code to retrieve all your FRED data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def get_fred_prices(assets):\n  df_temp = pd.DataFrame(index=pd.date_range(start=beginning_date,end=end_date,freq='D'))\n  # df_yearly = pd.DataFrame(index=pd.date_range(start=beginning_date,end=end_date,freq='A'))\n  for key, value in assets.items():\n    print('Getting {} with symbol {}'.format(key, value))\n    try:\n      df_temp&#91;f'{key}'] = pdr.DataReader(f'{value}','fred',beginning_date,date_today)\n    except:\n      print('Error getting {}'.format(value))\n    df_temp.ffill(inplace=True)\n  return(df_temp)<\/code><\/pre>\n\n\n\n<p>Here is the code to retrieve all your yfinance data.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def get_yfinance_prices(assets):\n  df_temp = pd.DataFrame(index=pd.date_range(start=beginning_date,end=end_date,freq='D'))\n  for key, value in assets.items():\n    print('Getting {} with symbol {}'.format(key, value))\n    try:\n      df_temp&#91;f'{key}'] = yf.download(f'{value}',beginning_date,date_today,progress=True).drop(columns=&#91;'Open','High','Low','Close','Volume'])\n    except:\n      print('Error getting {}'.format(value))\n    df_temp.ffill(inplace=True)\n  return(df_temp)<\/code><\/pre>\n\n\n\n<p>And finally, a function to bring all your data together.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def get_asset_prices(filename):\n  df_fred = get_fred_prices(fred_assets)\n  df_yfinance = get_yfinance_prices(yfinance_assets)\n  df = pd.concat(&#91;df_fred, df_yfinance], axis=1)\n  return(df)<\/code><\/pre>\n\n\n\n<p>This is the code that will actually retrieve your data. It will also drop all the lines that are completely blank. Then it saves the dataframe and proceeds with plotting the data<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>df = get_asset_prices('asset_prices')\ndf.dropna(how='all', inplace=True)\nsave_df(df, 'asset_prices')\ndf = pd.read_pickle(\"asset_prices.pkl\")\nplot_and_save(df,'asset_prices')<\/code><\/pre>\n\n\n\n<p>Here is a sample of one of the downloads:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\"><img decoding=\"async\" width=\"876\" height=\"487\" data-src=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\" alt=\"\" class=\"wp-image-1280 lazyload\" data-srcset=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png 876w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10-300x167.png 300w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10-768x427.png 768w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10-500x278.png 500w\" data-sizes=\"(max-width: 876px) 100vw, 876px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 876px; --smush-placeholder-aspect-ratio: 876\/487;\" \/><\/a><\/figure>\n\n\n\n<p>Now that we&#8217;ve downloaded the data we want a visualization of the data so we can see chunks of missing data.  <a href=\"https:\/\/github.com\/ResidentMario\/missingno\" target=\"_blank\" rel=\"noreferrer noopener\">missingno <\/a>is a great tool for that.  Keep in mind I <a href=\"https:\/\/www.geeksforgeeks.org\/python-pandas-dataframe-ffill\/\" target=\"_blank\" rel=\"noreferrer noopener\">forward filled<\/a> the assets in a previous function. What this means is that if the stock market closes on Friday it will show the price of the asset to be the same on Saturday and Sunday. <\/p>\n\n\n\n<p>So think of this chart below as the left being today and the right being 1900. You can see some data from these sources is only available for short time frames, shorter the bar. In this example, you can see there is complete data for producer price index for commodities. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import missingno as msno\nmsno.bar(df)<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows.png\"><img decoding=\"async\" width=\"871\" height=\"1024\" data-src=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-871x1024.png\" alt=\"\" class=\"wp-image-1278 lazyload\" data-srcset=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-871x1024.png 871w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-255x300.png 255w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-768x903.png 768w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-1307x1536.png 1307w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows-1743x2048.png 1743w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/Missing-rows.png 1895w\" data-sizes=\"(max-width: 871px) 100vw, 871px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 871px; --smush-placeholder-aspect-ratio: 871\/1024;\" \/><\/a><\/figure>\n\n\n\n<p>Let&#8217;s take a quick look at the first few rows of the data below. You can see most of the data from 1913 is NaN. This means it doesn&#8217;t exist in your dataframe. I will talk about cutting out this data later so you don&#8217;t have a bunch of empty datasets. <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>df.head()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"1023\" height=\"359\" data-src=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-9.png\" alt=\"\" class=\"wp-image-1279 lazyload\" data-srcset=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-9.png 1023w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-9-300x105.png 300w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-9-768x270.png 768w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-9-500x175.png 500w\" data-sizes=\"(max-width: 1023px) 100vw, 1023px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 1023px; --smush-placeholder-aspect-ratio: 1023\/359;\" \/><\/figure>\n\n\n\n<p>And finally, we&#8217;ll look at the information of the dataframe<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>df.info()<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" width=\"496\" height=\"109\" data-src=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-11.png\" alt=\"\" class=\"wp-image-1281 lazyload\" data-srcset=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-11.png 496w, https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-11-300x66.png 300w\" data-sizes=\"(max-width: 496px) 100vw, 496px\" src=\"data:image\/svg+xml;base64,PHN2ZyB3aWR0aD0iMSIgaGVpZ2h0PSIxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==\" style=\"--smush-placeholder-width: 496px; --smush-placeholder-aspect-ratio: 496\/109;\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>That&#8217;s it you&#8217;ve downloaded your asset prices and they are all contained in one dataframe and ready for further modification and analysis. <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you spend a lot of time analyzing big data then data retrieval is paramount. I&#8217;ve written some Python code that I use daily to retrieve data from&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1276","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Retrieving historical data from FRED or Yahoo Finance using Python - Jeremy Whittaker<\/title>\n<meta name=\"robots\" content=\"noindex, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Retrieving historical data from FRED or Yahoo Finance using Python\" \/>\n<meta property=\"og:description\" content=\"If you spend a lot of time analyzing big data then data retrieval is paramount. I&#8217;ve written some Python code that I use daily to retrieve data from...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\" \/>\n<meta property=\"og:site_name\" content=\"Jeremy Whittaker\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/WhittakerJeremy\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/WhittakerJeremy\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-27T18:26:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-02-02T20:54:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\" \/>\n\t<meta property=\"og:image:width\" content=\"876\" \/>\n\t<meta property=\"og:image:height\" content=\"487\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"JeremyWhittaker\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Retrieving historical data from FRED or Yahoo Finance using Python\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"JeremyWhittaker\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\"},\"author\":{\"name\":\"JeremyWhittaker\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"headline\":\"Retrieving historical data from FRED or Yahoo Finance using Python\",\"datePublished\":\"2022-01-27T18:26:28+00:00\",\"dateModified\":\"2022-02-02T20:54:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\"},\"wordCount\":488,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"image\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\",\"url\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\",\"name\":\"Retrieving historical data from FRED or Yahoo Finance using Python - Jeremy Whittaker\",\"isPartOf\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\",\"datePublished\":\"2022-01-27T18:26:28+00:00\",\"dateModified\":\"2022-02-02T20:54:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage\",\"url\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\",\"contentUrl\":\"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png\",\"width\":876,\"height\":487},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/new.jeremywhittaker.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Retrieving historical data from FRED or Yahoo Finance using Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/new.jeremywhittaker.com\/#website\",\"url\":\"https:\/\/new.jeremywhittaker.com\/\",\"name\":\"Jeremy Whittaker\",\"description\":\"Research, software, markets, housing, and energy\",\"publisher\":{\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/new.jeremywhittaker.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c\",\"name\":\"JeremyWhittaker\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\",\"caption\":\"JeremyWhittaker\"},\"logo\":{\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g\"},\"sameAs\":[\"http:\/\/www.jeremywhittaker.com\",\"https:\/\/www.facebook.com\/WhittakerJeremy\",\"https:\/\/www.linkedin.com\/in\/jeremywhittaker\/\"],\"url\":\"https:\/\/new.jeremywhittaker.com\/index.php\/author\/jeremywhittaker\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Retrieving historical data from FRED or Yahoo Finance using Python - Jeremy Whittaker","robots":{"index":"noindex","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"Retrieving historical data from FRED or Yahoo Finance using Python","og_description":"If you spend a lot of time analyzing big data then data retrieval is paramount. I&#8217;ve written some Python code that I use daily to retrieve data from...","og_url":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/","og_site_name":"Jeremy Whittaker","article_publisher":"https:\/\/www.facebook.com\/WhittakerJeremy","article_author":"https:\/\/www.facebook.com\/WhittakerJeremy","article_published_time":"2022-01-27T18:26:28+00:00","article_modified_time":"2022-02-02T20:54:23+00:00","og_image":[{"width":876,"height":487,"url":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","type":"image\/png"}],"author":"JeremyWhittaker","twitter_card":"summary_large_image","twitter_title":"Retrieving historical data from FRED or Yahoo Finance using Python","twitter_image":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","twitter_misc":{"Written by":"JeremyWhittaker","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#article","isPartOf":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/"},"author":{"name":"JeremyWhittaker","@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"headline":"Retrieving historical data from FRED or Yahoo Finance using Python","datePublished":"2022-01-27T18:26:28+00:00","dateModified":"2022-02-02T20:54:23+00:00","mainEntityOfPage":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/"},"wordCount":488,"commentCount":0,"publisher":{"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"image":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage"},"thumbnailUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/","url":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/","name":"Retrieving historical data from FRED or Yahoo Finance using Python - Jeremy Whittaker","isPartOf":{"@id":"https:\/\/new.jeremywhittaker.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage"},"image":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage"},"thumbnailUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","datePublished":"2022-01-27T18:26:28+00:00","dateModified":"2022-02-02T20:54:23+00:00","breadcrumb":{"@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#primaryimage","url":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","contentUrl":"https:\/\/new.jeremywhittaker.com\/wp-content\/uploads\/2022\/01\/image-10.png","width":876,"height":487},{"@type":"BreadcrumbList","@id":"https:\/\/new.jeremywhittaker.com\/index.php\/2022\/01\/27\/retrieving-historical-data-from-fred-or-yahoo-finance-using-python\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/new.jeremywhittaker.com\/"},{"@type":"ListItem","position":2,"name":"Retrieving historical data from FRED or Yahoo Finance using Python"}]},{"@type":"WebSite","@id":"https:\/\/new.jeremywhittaker.com\/#website","url":"https:\/\/new.jeremywhittaker.com\/","name":"Jeremy Whittaker","description":"Research, software, markets, housing, and energy","publisher":{"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/new.jeremywhittaker.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/new.jeremywhittaker.com\/#\/schema\/person\/ed0edfdefb3e180693efef453372980c","name":"JeremyWhittaker","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g","caption":"JeremyWhittaker"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/c8ac20e6dfa86b5f27ce9bffee4851099770cbea5ae7338a274865bfbc8c0218?s=96&d=retro&r=g"},"sameAs":["http:\/\/www.jeremywhittaker.com","https:\/\/www.facebook.com\/WhittakerJeremy","https:\/\/www.linkedin.com\/in\/jeremywhittaker\/"],"url":"https:\/\/new.jeremywhittaker.com\/index.php\/author\/jeremywhittaker\/"}]}},"_links":{"self":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts\/1276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/comments?post=1276"}],"version-history":[{"count":0,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/posts\/1276\/revisions"}],"wp:attachment":[{"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/media?parent=1276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/categories?post=1276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/new.jeremywhittaker.com\/index.php\/wp-json\/wp\/v2\/tags?post=1276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}