Уточнение списка тегов для использования с утренней звездой на пандах

Итак, у меня есть список тегов, которые я удалил с nasdaq.com для nyse.

import urllib.request
from bs4 import BeautifulSoup
import re

target = "NYSE"

def nyseTags():
    ret = []
    for k in range(1,64):
        source = "https://www.nasdaq.com/screening/companies-by-industry.aspx?exchange=NYSE&page="+str(k)
        print("ReadingPage:"+source)
        filehandle = urllib.request.urlopen(source)
        soup = BeautifulSoup(filehandle.read(), "html.parser")
        lines = soup.findAll("tr",{})
        #print(len(lines))
        temp = []
        for n,k in enumerate(lines):
            if(n == 0):
                continue
            try:
                tds = k.findAll("td",{})                
                pattern = re.compile(r'\s+')
                temp.append(re.sub(pattern, '', tds[1].getText()))
                print(str(n)+" : "+temp[-1])
            except:
                pass
        ret += temp
    return(ret)

def arrToCsv(arr,fn):
    strRep = "\n".join(arr)
    fh = open(fn,"w")
    fh.write(strRep)
    fh.close()

arrToCsv(nyseTags(),"nyseTags.lst")

Который предоставляет мой начальный список:

DDD
MMM
WBAI
...
XOXO
XPO
XYL
AUY
YELP
YEXT
YRD
YPF
YUMC
YUM
ZAYO
ZEN
ZBH
ZB^A
ZB^G
ZB^H
ZBK
ZOES
ZTS
ZTO
ZUO
ZYME

Теперь я знаю, что это не все good теги для моих нужд, так как я ищу, у меня есть доступ к 2-летним дневным окнам для моих целей.

Поэтому я написал следующий скрипт, чтобы отфильтровать теги, для которых я не мог получить данные 2 года назад, но он зависает после того, что выглядит как многообещающее начало.

Я не уверен, почему этот сценарий не проходит через весь список, но любой вход был бы хорош!

import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
import pandas as pd
import pandas_datareader.data as web
import os
import operator
#C:\Users\Kevin\AppData\Local\Programs\Python\Python36-32\lib\site-packages\pandas_datareader\fred.py

style.use('ggplot')
__NOW__ = dt.datetime.now()
__2YearsAgo1__ = __NOW__ - dt.timedelta(days=725)
__2YearsAgo__ = __NOW__ - dt.timedelta(days=731)

def fetch(tag,start,end):# start and end should be dt.datetime(), tag can be a string or array of strings
    if(type(tag) == str):
        df = web.DataReader(tag, 'morningstar', start, end)
        return(df)
    else:
        df = web.DataReader(tag, 'morningstar', start, end)
        ret = {}
        for tag, data in df.groupby(level=0):
            if(type(data)==pd.core.frame.DataFrame):
                ret[tag]=data
        return(ret)

def scrubTags(tagList):
    ret = []
    fails = []
    for n in range(0,int(len(tagList)/25)+1):
        if(n==len(tagList)/25):
            propTags = tagList[n*25:len(tagList)]
        else:
            propTags = tagList[n*25:n*25+25]
        try:
            temp = fetch(propTags,__2YearsAgo__,__2YearsAgo1__)
            ret += propTags
            print(str(n))
        except:
            print("Error in:"+"\t".join(propTags))
            for k in propTags:
                try:
                    temp = fetch(k,__2YearsAgo__,__2YearsAgo1__)
                    print("Passed:"+k)
                    ret.append(k)
                except:
                    fails.append(k)
                    print("Failed:"+k)
            #fails += propTags
    return((ret,fails))

def arrToCsv(arr,fn):
    strRep = "\n".join(arr)
    fh = open(fn,"w")
    fh.write(strRep)
    fh.close()

def loadNYSEtagList():
    fh = open("NYSETags.lst","r")
    text = fh.read()
    fh.close()
    return(text.split("\n"))

tagList = loadNYSEtagList()
scrubTags = scrubTags(tagList)
arrToCsv(scrubTags[0],"Scrubed_505_nyseTags.lst")
arrToCsv(scrubTags[1],"Failed_505_nyseTags.lst")

Кроме того -> Я знаю, что странно иметь словарь, полный фреймов данных вместо использования мультииндексации, но я не думаю, что это является причиной моей проблемы.

0 ответов

Другие вопросы по тегам