Created
February 22, 2019 14:47
-
-
Save luisfbueno/b446c8d905fe780f4de3cb16dbc2bd74 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import requests | |
from bs4 import BeautifulSoup | |
import matplotlib.pyplot as plt | |
import seaborn as sns | |
# Método para extrair várias páginas de uma só vez | |
def scrape_stats(base_url, year_start, year_end): | |
years = range(year_start,year_end+1,1) | |
final_df = pd.DataFrame() | |
for year in years: | |
print('Extraindo ano {}'.format(year)) | |
req_url = base_url.format(year) | |
req = requests.get(req_url) | |
soup = BeautifulSoup(req.content, 'html.parser') | |
table = soup.find('table', {'id':'totals_stats'}) | |
df = pd.read_html(str(table))[0] | |
df['Year'] = year | |
final_df = final_df.append(df) | |
return final_df | |
# utilizando o método criado | |
url = 'https://www.basketball-reference.com/leagues/NBA_{}_totals.html' | |
df = scrape_stats(url, 2013, 2018) | |
drop_indexes = df[df['Rk'] == 'Rk'].index # Pega indexes onde a coluna 'Rk' possui valor 'Rk' | |
df.drop(drop_indexes, inplace=True) # elimina os valores dos index passados da tabela | |
# Convertendo tabelas para valores numéricos | |
numeric_cols = df.columns.drop(['Player','Pos','Tm']) | |
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric) | |
# Gráfico de média de bolas de 3 pontos arremessadas por ano | |
sns.barplot(x='Year', y='3PA') | |
# Ordena Data Frame por bola de 3 pontos convertidas em ordem decrescente | |
sorted_df = df.sort_values(by=['3P'], axis=0, ascending=False) | |
# Mostra 5 primeiras posições da tabela | |
sorted_df[['Player', '3P', 'Year']].head() | |
# Agrupando os dados por jogador e somando os valores | |
grouped_df = df.groupby('Player', as_index=False).sum() | |
# Ordena Data Frame por bolas de 3 pontos convertidas em ordem decrescente | |
sorted_df = df.sort_values(by=['3P'], axis=0, ascending=False) | |
# Mostra 5 primeiras posições da tabela | |
sorted_df[['Player', '3P', '3PA']].head() | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import requests | |
from bs4 import BeautifulSoup | |
# Método para extrair várias páginas de uma só vez | |
def scrape_stats(base_url, year_start, year_end): | |
years = range(year_start,year_end+1,1) | |
final_df = pd.DataFrame() | |
for year in years: | |
print('Extraindo ano {}'.format(year)) | |
req_url = base_url.format(year) | |
req = requests.get(req_url) | |
soup = BeautifulSoup(req.content, 'html.parser') | |
table = soup.find('table', {'id':'totals_stats'}) | |
df = pd.read_html(str(table))[0] | |
df['Year'] = year | |
final_df = final_df.append(df) | |
return final_df |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pandas as pd | |
import requests | |
from bs4 import BeautifulSoup | |
# Execução do Request GET para obter o conteúdo da página | |
req = requests.get('https://www.basketball-reference.com/leagues/NBA_2018_totals.html') | |
if req.status_code == 200: # Status 200 indica que a requisição foi completada | |
print('Requisição bem sucedida!') | |
content = req.content # obtém conteúdo da página | |
soup = BeautifulSoup(content, 'html.parser') | |
# Utilizando somente o nome da tag HTML | |
table = soup.find(name='table') | |
# Especificando atributos da tag | |
table = soup.find(name='table', attrs={'id':'totals_stats'}) | |
# Usando find_all | |
table = soup.find_all(name='table') | |
# Lendo como Data Frame | |
table_str = str(table) | |
df = pd.read_html(table_str))[0] | |
print(df.head()) | |
# Limpando dados desnecessários | |
drop_indexes = df[df['Rk'] == 'Rk'].index # Pega indexes onde a coluna 'Rk' possui valor 'Rk' | |
df.drop(drop_indexes, inplace=True) # elimina os valores dos index passados da tabela | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment