Мокеев В.В. - WEB-аналитика на Python - 2020
.pdfcol = row.findAll("td") if len(col) > 0:
sector = str(col[3].string.strip()).lower().replace(" ", "_") print("sector", sector)
ticker = str(col[0].get_text()) print('ticker',ticker)
if sector not in sector_tickers: sector_tickers[sector] = list()
sector_tickers[sector].append(ticker)
Результат:
sector industrials ticker MMM sector health_care ticker ABT sector health_care ticker ABBV sector health_care ticker ABMD
sector information_technology ticker ACN
sector communication_services ticker ATVI
................................................................................................................
Распечатайте полученный словарь:
for sector, ticker in sector_tickers.items(): print("Downloading sector: " + sector ) print(ticker)
Результат:
Downloading sector: industrials
['MMM\n', 'ALK\n', 'ALLE\n', 'AAL\n', 'AME\n', 'AOS\n', 'ARNC\n', 'BA\n', 'CHRW\n', 'CAT\n', 'CTAS\n', 'CPRT\n', 'CSX\n', 'CMI\n', 'DE\n', 'DAL\n', 'DOV\n', 'ETN\n', 'EMR\n', 'EFX\n', 'EXPD\n', 'FAST\n', 'FDX\n', 'FLS\n', 'FTV\n', 'FBHS\n', 'GD\n', 'GE\n', 'GWW\n', 'HON\n', 'HII\n', 'IEX\n', 'INFO\n', 'ITW\n', 'IR\n', 'JEC\n', 'JBHT\n', 'JCI\n', 'KSU\n', 'LHX\n', 'LMT\n', 'MAS\n', 'NLSN\n', 'NSC\n', 'NOC\n', 'PCAR\n', 'PH\n', 'PNR\n', 'PWR\n', 'RTN\n', 'RSG\n', 'RHI\n', 'ROK\n', 'ROL\n', 'ROP\n', 'SNA\n', 'LUV\n', 'SWK\n', 'TXT\n', 'TDG\n', 'UNP\n', 'UAL\n', 'UPS\n', 'URI\n', 'UTX\n', 'VRSK\n', 'WAB\n', 'WM\n', 'XYL\n']
Downloading sector: health_care
['MMM\n', 'ALK\n', 'ALLE\n', 'AAL\n', 'AME\n', 'AOS\n', 'ARNC\n', 'BA\n', 'CHRW\n', 'CAT\n', 'CTAS\n', 'CPRT\n', 'CSX\n', 'CMI\n', 'DE\n', 'DAL\n',
141
'DOV\n', 'ETN\n', 'EMR\n', 'EFX\n', 'EXPD\n', 'FAST\n', 'FDX\n', 'FLS\n', 'FTV\n', 'FBHS\n', 'GD\n', 'GE\n', 'GWW\n', 'HON\n', 'HII\n', 'IEX\n', 'INFO\n', 'ITW\n', 'IR\n', 'JEC\n', 'JBHT\n', 'JCI\n', 'KSU\n', 'LHX\n',
..................................................
tickers= sector_tickers['industrials'] print(tickers)
tic=[]
for t in tickers: tt=t.strip()
if tt.find('.') == -1: tic.append(t.strip())
print(tic)
Результат:
['MMM\n', 'ALK\n', 'ALLE\n', 'AAL\n', 'AME\n', 'AOS\n', 'ARNC\n', 'BA\n', 'CHRW\n', 'CAT\n', 'CTAS\n', 'CPRT\n', 'CSX\n', 'CMI\n', 'DE\n', 'DAL\n', 'DOV\n', 'ETN\n', 'EMR\n', 'EFX\n', 'EXPD\n', 'FAST\n', 'FDX\n', 'FLS\n', 'FTV\n', 'FBHS\n', 'GD\n', 'GE\n', 'GWW\n', 'HON\n', 'HII\n', 'IEX\n', 'INFO\n', 'ITW\n', 'IR\n', 'JEC\n', 'JBHT\n', 'JCI\n', 'KSU\n', 'LHX\n', 'LMT\n', 'MAS\n', 'NLSN\n', 'NSC\n', 'NOC\n', 'PCAR\n', 'PH\n', 'PNR\n', 'PWR\n', 'RTN\n', 'RSG\n', 'RHI\n', 'ROK\n', 'ROL\n', 'ROP\n', 'SNA\n', 'LUV\n', 'SWK\n', 'TXT\n', 'TDG\n', 'UNP\n', 'UAL\n', 'UPS\n', 'URI\n', 'UTX\n', 'VRSK\n', 'WAB\n', 'WM\n', 'XYL\n']
['MMM', 'ALK', 'ALLE', 'AAL', 'AME', 'AOS', 'ARNC', 'BA', 'CHRW', 'CAT', 'CTAS', 'CPRT', 'CSX', 'CMI', 'DE', 'DAL', 'DOV', 'ETN', 'EMR', 'EFX', 'EXPD', 'FAST', 'FDX', 'FLS', 'FTV', 'FBHS', 'GD', 'GE', 'GWW', 'HON', 'HII', 'IEX', 'INFO', 'ITW', 'IR', 'JEC', 'JBHT', 'JCI', 'KSU', 'LHX', 'LMT', 'MAS', 'NLSN', 'NSC', 'NOC', 'PCAR', 'PH', 'PNR', 'PWR', 'RTN', 'RSG', 'RHI', 'ROK', 'ROL', 'ROP', 'SNA', 'LUV', 'SWK', 'TXT', 'TDG', 'UNP', 'UAL', 'UPS', 'URI', 'UTX', 'VRSK', 'WAB', 'WM', 'XYL']
Используя DataReader скачиваем из баз данных Yahoo finance ежедневные данные о стоимости бумаг из списка tic. Например, MMM.
from datetime import datetime from pandas_datareader import data start = datetime(2019,5,1) start=start.strftime("%Y-%m-%d") end = datetime.utcnow() end=end.strftime("%Y-%m-%d") print(start, end)
tmp = data.DataReader('MMM', "yahoo", start, end) tmp.head()
Результат представлен на рис. 4.1.
142
Рис. 4.1. Ежедневные данные МММ
Переменные start и end определяют период сбора данных. Таблица содержит столбцы максимальных и минимальных значений стомости, цены открытия, закрытия, объемы продаж и цены скорректированного закрытия.
Для того чтобы собрать ежедневные данные по всем бумагам можно использовать следующий скрипт:
dataAll=pd.DataFrame() print(start, end)
for t in tic:
tmp = data.DataReader(t, "yahoo", start, end) tmp.columns=t+tmp.columns dataAll=pd.concat([dataAll, tmp], axis=1)
dataAll.head()
Результат представлен на рис. 4.2.
Рис. 4.2. Ежедневные данные по нескольким бумагам
143
Сохраните полученную таблицу в Excel файле. dataAll.to_csv("../BD/dataAll.csv", decimal=',', sep=';')
Путь до файла необходимо скорректировать в соответствии со своим рабочим местом.
144