Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Мокеев В.В. - WEB-аналитика на Python - 2020

.pdf
Скачиваний:
6
Добавлен:
07.04.2024
Размер:
2.73 Mб
Скачать

col = 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