только что быстро просмотрел сайт, и вам не нужен целый браузер / Selenium
, чтобы получить данные.пакет requests
намного проще / быстрее для такого рода данных:
import requests
url = 'https://www.baseball-reference.com/leagues/MLB/2019-standard-pitching.shtml'
res = requests.get(url)
# make sure we didn't get an error
res.raise_for_status()
затем мы можем использовать lxml
для анализа HTML:
from lxml import html
from lxml.cssselect import CSSSelector
from io import StringIO
doc = html.fromstring(res.content)
comment = doc.xpath(CSSSelector('div.placeholder').path)[0].getnext()
[table] = html.parse(StringIO(comment.text)).findall('//table')
это немного неудобно, потому что они встраивают данные / таблицу в комментарий
теперь мы сделали, что можем извлечь данные:
results = []
for i, row in enumerate(table.xpath('//tbody//tr')):
if 'thead' in row.get('class', ''):
continue
player = {}
for cell in row.xpath('th | td'):
key = cell.get('data-stat')
player[key] = cell.text_content()
columns.add(key)
results.append(player)
оставит ~ 1000 игроковв results
и в удобной форме для помещения в pandas
«фрейм данных» для легкой обработки:
import numpy as np
import pandas as pd
df = pd.DataFrame(results)
df.set_index('ranker', inplace=True)
# convert these columns from text to numbers
for name in ('W', 'L', 'SO'):
df[name] = df[name].astype('float')
после того, как вы это сделаете, возможно, стоит сохранить его в виде файла CSV (или аналогичный) вы можете перезагрузить позже в случае изменения веб-сайта, и вы не можете запустить вышеуказанный код.CSV хорош, потому что многие инструменты работают с форматом, который даст вам больше опций, например, R
Я считаю, что пакет statsmodels
имеет лучший интерфейсдля выполнения линейных регрессий в данный момент вы можете подстроить свой вопрос, выполнив:
import statsmodels.formula.api as smf
fit = smf.ols('W ~ SO', df).fit()
print(fit.summary())
, что даст вам хорошую сводку коэффициентов.Я бы не рекомендовал использовать такую модель, хотя считает, что обычно требуется "преобразовать журнал" , и вы захотите сделать множество графиков ваших данных, используя что-то вроде matplotlib
, возможно, через seaborn
надеюсь, это поможет!