<jupyter_start><jupyter_text>Introdução à Ciência de Dados - UFPB  Professor: <NAME> Projeto Final   **<NAME> - 20200024082  <NAME> - 20200023960**  IntroduçãoNeste projeto analisaremos diversos dados sobre as corridas de Fórmula 1 desde seu início em 1950 até 2020, dados como: maiores vencedores, números de acidentes e a evolução das velocidades com o passar dos anos. Nossa **motivação** e **objetivo** é demonstrar a riqueza dos dados que são gerados a partir das corridas e a evolução deste esporte, que movimenta milhares espectadores pelo mundo, assim como suas mudanças.<jupyter_code>import numpy as np
import pandas as pd 
import seaborn as sns
import matplotlib.pyplot as plt
import datetime as dt
sns.set_palette('Set2')<jupyter_output><empty_output><jupyter_text>Dados Utilizados13 datasets foram utilizados tirados do site Kaggle, são dados de diferentes "setores" das corridas como: circuitos, pilotos, montadoras, resultados, classificações, pit-stop, etc. Além disso, realizamos uma busca pelas mudanças das regras na Fórmula 1 e utilizamos informações contidas no regulamento de 2011.  **Links:**   * Datasets: [Datasets](https://www.kaggle.com/rohanrao/formula-1-world-championship-1950-2020)   * Regulamento 2011: [Regulamento 2011](https://esporte.ig.com.br/automobilismo/f1/regulamento/)    Pré-processamentoOs datasets escolhidos possuem muitas colunas que não utilizamos em nossa análise, por isso foi necessário fazermos uma limpeza dos dados. **Maiores Vencedores:*** Nos dataframes referentes aos "Maiores Vencedores", tiramos as colunas que não eram necessárias, usamos uma máscara para deixar apenas os pilotos que haviam vencido as corridas e também o groupby para realizar a contagem das vitórias. Também calculamos as medidas de centralidade e dispersão e fizemos um gráfico de barra para facilitar a visualização dos dados.**Acidentes:*** Na análise dos acidentes foi necessário mesclar 2 datasets, além disso somamos 2 status _(um dataset possui um tipo de legenda para status de acontecimentos durante um GP. Ex. Vitória, acidente, colisão, etc)_ que foram os de colisões e acidentes, não sabemos ao certo o critério que o autor dos dados utilizou para classificar esses acontecimentos, por isso somamos os 2 para realizar a análise. Além disso utilizamos um gráfico de linha que permitiu vermos os anos em que tivemos altas e baixas na quantidade de acidentes.**Fórmula 1 - Velocidades*** No dataframe que utilizamos como base para calcular as mudanças das velocidades tivemos que mesclar 3 datasets para obtermos os dados necessários, juntamente com isso fizemos a limpeza de algumas colunas, dados nulos e dados repetidos. Utilizamos um gráfico de linha que nos permitiu observar a evolução das velocidades a cada ano em determinados GP's. **Cálculo Z-score*** No dataframe utilizado para calcular o z-score precisamos transformar o tipo dos elementos da coluna "time", que era _string_ para o tipo _time_ , pra isso tivemos que transformar usando o `to_datetime` e depois criamos uma coluna com os segundos de acordo com o tempo obtido da transformação, era preciso realizar esse processo para conseguirmos calcular a média e consequentemente o z-score, uma vez que não é possível calcular a média com dados do tipo _time_ .  Perguntas: Quais pilotos venceram mais corridas desde 1950 até 2020 ?<jupyter_code>results = pd.read_csv("../../caiov/ICD/projeto_csv/results.csv")
drivers = pd.read_csv("../../caiov/ICD/projeto_csv/drivers.csv")
results = results.drop(["statusId", "points", "positionText", "number", "position", "milliseconds"], axis=1)
results = results.rename(columns={"positionOrder":"Vitórias_P"})
results = results[results.Vitórias_P == 1]

drivers = drivers.loc["0":,"driverId":"nationality"]
drivers["Pilotos"] = drivers["forename"] + " " + drivers["surname"]
drivers = drivers.drop(["dob","number","forename","surname"], axis=1)
drivers = drivers.reindex(columns=['driverId','driverRef','code','Pilotos','nationality'])

drivers_results = pd.merge(drivers,results, on="driverId")

drivers_wins = drivers_results.groupby("Pilotos").count()
drivers_wins = drivers_wins.sort_values(by="Vitórias_P", ascending=False)[["Vitórias_P"]]
d_w_barplot = drivers_wins.iloc[:10]
drivers_wins.iloc[:15]<jupyter_output><empty_output><jupyter_text>Análise: Vemos que <NAME> após **15 temporadas** na Fórmula 1, e **267 GP's** disputados, alcançou o recorde do grande campeão <NAME> que era de **91 vitórias** em **308 GP's**, que disputou durante **19 temporadas**, estabelecendo o recorde que atualmente é de **96 vitórias**. Ambos possuem **7 títulos** da Fórmula 1.  Medidas de Centralidade e Dispersão<jupyter_code>Medidas_P = {"Média": drivers_wins["Vitórias_P"].mean(),
                  "Mediana": drivers_wins["Vitórias_P"].median(),
                  "Desvio Padrão": drivers_wins["Vitórias_P"].std()}
medidas_p = pd.Series(Medidas_P)

d_w_medidas = pd.DataFrame({"Vitórias_P": medidas_p})
d_w_medidas<jupyter_output><empty_output><jupyter_text>Análise: A **média** encontrada a partir desses valores não condiz muito com os dados que vemos em nosso **top 15**, pois há vários    pilotos que venceram um GP, mas não seguiram vencendo, fazendo com que a média baixe, é por isso que temos um **desvio padrão** tão elevado.  Boxplot<jupyter_code>drivers_wins.boxplot(column="Vitórias_P")<jupyter_output><empty_output><jupyter_text>Gráfico de Barra<jupyter_code>d_w_barplot = d_w_barplot.reset_index()
sns.barplot(data=d_w_barplot, x="Pilotos", y="Vitórias_P")
plt.xticks(rotation=60)
plt.title("Top 10 Pilotos Vencedores")<jupyter_output><empty_output><jupyter_text>Quais montadoras/equipes venceram mais corridas ?<jupyter_code>teams = pd.read_csv("../../caiov/ICD/projeto_csv/constructors.csv")
teams_results = pd.merge(teams,results, on="constructorId")
teams_results = teams_results.drop(["constructorRef","url"], axis=1)

teams_results = teams_results.rename(columns={"name":"Equipes"})
teams_results = teams_results.rename(columns={"constructorId":"Vitórias_E"})

teams_wins = teams_results.groupby("Equipes").count()
teams_wins = teams_wins.sort_values(by="Vitórias_E", ascending=False)[["Vitórias_E"]]
t_w_barplot = teams_wins.iloc[:10]
teams_wins.iloc[:15]<jupyter_output><empty_output><jupyter_text>Análise: Aqui vemos a hegemonia no quesito mais vitórias da Ferrari, fundada em 1939 por **Enzo Ferrari**, a equipe **Scuderia Ferrari**    é a equipe **mais antiga** em atividade na Fórmula 1, é a única a ter competido em todas as temporadas do mundial até hoje.    Curiosamente a Ferrari só veio a ganhar seu primeiro GP em **1951** na **Grã-Bretanha**, perdendo todos os 11 GP's disputados em    1950 para a equipe **<NAME>** que mais tarde, em 1951, se retirou da Fórmula 1.      Medidas de Centralidade e Dispersão<jupyter_code>Medidas_E = {"Média": teams_wins["Vitórias_E"].mean(),
                  "Mediana": teams_wins["Vitórias_E"].median(),
                  "Desvio Padrão": teams_wins["Vitórias_E"].std()}
medidas_e = pd.Series(Medidas_E)

t_w_medidas = pd.DataFrame({"Vitórias_E": medidas_e})
t_w_medidas<jupyter_output><empty_output><jupyter_text>Análise: Pelo mesmo motivo citado acima, aqui vemos um **desvio padrão muito elevado** pela quantidade de equipes que já disputaram    algum GP na fórmula 1, que são 46 equipes listadas nos dados encontrados.  Boxplot<jupyter_code>teams_wins.boxplot(column="Vitórias_E")<jupyter_output><empty_output><jupyter_text>Gráfico de Barra<jupyter_code>t_w_barplot = t_w_barplot.reset_index()
sns.barplot(data=t_w_barplot, x="Equipes", y="Vitórias_E")
plt.xticks(rotation=45)
plt.title("Top 10 Equipes Vencedores")<jupyter_output><empty_output><jupyter_text>Acidentes + Colisões por TemporadaCom carros que chegam a mais de 300Km/h em uma corrida, a possibilidade de acontecer acidentes neste esporte é grande. É por isso que analisaremos as temporadas que mais ocorreram acidentes na Fórmula 1, e veremos mais tarde medidas que foram tomadaspara evitar que tais acontececem.<jupyter_code>races = pd.read_csv("../../caiov/ICD/projeto_csv/races.csv")
estatistica = pd.read_csv("../../caiov/ICD/projeto_csv/status.csv")
resultados = pd.read_csv("../../caiov/ICD/projeto_csv/results.csv")

df_acidentes = resultados[(resultados.statusId == 3) | (resultados.statusId == 4)]
df_acidentes = df_acidentes.drop(["points", "position", "positionText", "number", "time", "milliseconds", 
                            "fastestLap", "fastestLapTime", "fastestLapSpeed","laps", "rank", "positionOrder"], axis=1)
newdata = pd.merge(races, df_acidentes, on="raceId")
newdata = newdata.drop(["url", "grid", "time", "round", "date", "resultId",
                        "driverId","raceId", "circuitId", "constructorId","name","statusId"], axis=1)
newdata = newdata.rename(columns={"year":"Temporada"})

q_acidentes = np.full((1834), 1)
newdata["Acidentes"]= q_acidentes

newdata = newdata.reset_index(drop=True)
newdata = newdata.groupby("Temporada").sum()
newdata = newdata.sort_values(by="Acidentes", ascending=False)
newdata.iloc[:10]<jupyter_output><empty_output><jupyter_text>Análise: Nestes dados vemos claramente um **alto índice** de acidentes em alguns anos da **década de 70**, em um gráfico que será mostrado abaixo será possível ver o que **possivelmente causou** tantos acidentes neste período.  Medidas de Centralidade e Dispersão<jupyter_code>Medidas_A = {"Média": newdata["Acidentes"].mean(),
                  "Mediana": newdata["Acidentes"].median(),
                  "Des<NAME>": newdata["Acidentes"].std()}
medidas_a = pd.Series(Medidas_A)

d_a_medidas = pd.DataFrame({"Acidentes": medidas_a})
d_a_medidas<jupyter_output><empty_output><jupyter_text>Boxplot<jupyter_code>newdata.boxplot(column="Acidentes")<jupyter_output><empty_output><jupyter_text>Histograma<jupyter_code>newdata.hist(column="Acidentes", bins=15)<jupyter_output><empty_output><jupyter_text>Gráfico de dispersão (Agrupamento)<jupyter_code>newdata = newdata.reset_index()
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3)
kmeans.fit(newdata)
sns.scatterplot(data=newdata, x="Temporada", y="Acidentes", hue=kmeans.labels_, palette="muted")<jupyter_output><empty_output><jupyter_text>Gráfico de Linha<jupyter_code>newdata = newdata.reset_index()
sns.lineplot(data=newdata, x="Temporada", y="Acidentes", marker="o")
plt.title("Acidentes por temporada")<jupyter_output><empty_output><jupyter_text>Análise: Como citamos acima podemos observar um **alto índice** de acidentes na decáda de 70 e também entre os **anos 2005-2012**,    seguido de uma queda destes números, quais foram os **fatores que culminaram** neste **declínio**?  DataFrame - Fórmula 1Aqui nós transformamos e limpamos alguns outros dados que estavam separados, para que pudéssemos fazer outras análises mais profundascomo:   * Analisar as velocidades dos carros no decorrer dos anos;  * Fazer uma comparação entre os pilotos da década de 50 e os atuais;  * Calcular e analisar porcentagens da relação Pole-Vitória.<jupyter_code>pd.options.display.float_format = '{:.2f}'.format

races = pd.read_csv("../../caiov/ICD/projeto_csv/races.csv")
races = races.drop(["time","url"], axis=1)

teams_results2 = pd.merge(results,teams, on="constructorId")
teams_results2 = teams_results2.drop(["constructorRef","url", "Vitórias_P"], axis=1)
teams_results2 = teams_results2.drop(["nationality","raceId","resultId","grid","laps",
                                      "time","fastestLap","rank","fastestLapTime","fastestLapSpeed"], axis=1)
teams_results2 

drivers_results2 = pd.merge(results, drivers, on="driverId")
drivers_results2 = drivers_results2.rename(columns={"Vitórias_P":"Posição_Final"})
drivers_results2 

t_d_results = pd.merge(teams_results2,drivers_results2, on=["driverId","constructorId"])
t_d_results = t_d_results.drop(["rank","fastestLap","driverRef","laps","resultId"],axis=1)
t_d_results = t_d_results.reindex(columns=["raceId","driverId","Pilotos","code","nationality","constructorId","name",
                                           "grid","Posição_Final","time","fastestLapTime","fastestLapSpeed"])

t_d_results = t_d_results.rename(columns={"name":"Montadoras"})

formula_1 = pd.merge(t_d_results,races, on="raceId")
formula_1 = formula_1.reindex(columns=["raceId","round","circuitId","name","date","year","driverId","Pilotos","code","nationality",
                                       "Montadoras","constructorId","grid","Posição_Final","time","fastestLapTime","fastestLapSpeed"])
formula_1 = formula_1.drop_duplicates()
formula_1 = formula_1.sort_values(by="date")<jupyter_output><empty_output><jupyter_text>Análise Tempo As corridas de Fórmula 1 sempre envolveram muita **velocidade**, era certo que com o passar dos anos as equipes de **engenheiros** melhorariam cada vez mais os carros, que teriam **motores mais potentes** e uma **melhor aerodinâmica** tudo em troca de maisvelocidade. Entretando como vimos acima os acidentes também se acentuaram. Aqui veremos a **evolução das velocidades** dos carros, e as **medidas de segurança** que foram tomadas para garantir a preservação da vida dos pilotos.<jupyter_code>formula_1_speed = formula_1
formula_1_speed = formula_1_speed.drop(["round","driverId",
                          "code","constructorId","fastestLapTime","fastestLapSpeed"], axis=1)

formula_1_speed = formula_1_speed[(formula_1_speed.circuitId == 6) | (formula_1_speed.circuitId == 14) | 
                                  (formula_1_speed.circuitId == 18) | (formula_1_speed.circuitId == 9)]

formula_1_speed = formula_1_speed.drop(14186)
formula_1_speed = formula_1_speed.sort_values(by="circuitId")

formula_1_speed_t = formula_1_speed["time"]
formula_1_speed_dt = pd.to_datetime(formula_1_speed_t, format='%H:%M:%S.%f', errors='ignore')
formula_1_speed_seconds = (formula_1_speed_dt.dt.hour*60+formula_1_speed_dt.dt.minute)*60 + formula_1_speed_dt.dt.second
formula_1_speed["Seconds"] = formula_1_speed_seconds
sns.lineplot(data=formula_1_speed, x="year", y="Seconds", hue="name", marker="o")
plt.title("Análise Tempos")<jupyter_output><empty_output><jupyter_text>Análise: Podemos observar que aproximadamente no ano de 2010 houve uma mudança brusca na variação dos tempos que estavam em constante diminuição. Tal acontecimento foi ocasionado por uma série de mudanças em algumas regras da Fórmula 1, como: * **Volta da regra de 107%** (*Durante a qualificação, o piloto que não efetuar uma volta dentro de 107% do menor tempo na primeira sessão de qualificação não pode começar a corrida*);* **Proibição de ordens de equipe** (*Equipe não pode exigir ultrapassagens para favorecer um determinado piloto*);  * **Novas normas técnicas impostas pela pirelli;**  * **Mudanças na aerodinâmica dos carros;**  * **Leve aumento do peso mínimo dos veículos;**  * **Impedimento de acessar o circuito 9 horas antes da primeira sessão do dia.**Essas mudanças favoreceram a segurança dos pilotos e de todas as pessoas envolvidas na organização da corrida, como pode ser observado no gráfico abaixo:<jupyter_code>sns.lineplot(data=newdata, x="Temporada", y="Acidentes", marker="o")
plt.title("Acidentes por temporada")<jupyter_output><empty_output><jupyter_text>Análise: Houve uma **diminuição** na **quantidade de acidentes** por volta da temporada de **2013**, demostrando a eficácia das **novas normas** impostas pela FIA (Federação Internacional do Automóvel). Em suma, os carros se tornaram levemente mais lentos, mas as corridas se tornaram **mais seguras**, o que eticamente foi a decisão mais correta para evitar a **morte de profissionais** deste esporte, como a trágica morte de **<NAME>** em 1° de Maio de 1994, que perdeu o controle do carro e se chocou contra o muro, fazendo com que o braço direito da suspensão dianteira saísse em direção à sua cabeça acertando-o justo abaixo da viseira.    Porcentagem Pole-VitóriaNa Fórmula 1 os pilotos fazem um **treino qualificatória** na pista para decidir as posições de largada da corrida, o piloto que tem o **tempo mais rápido** neste treino larga em primeiro, ele possui o que é chamado de **Pole Position** ( _Primeira Posição_ ). O piloto que larga em primeiro tem a **vantagem**, mas nem sempre ele é o que vence a corrida, as vezes um pilotoretardatário rouba-lhe a vitória, é por isso que vamos analisar a **porcentagem de vitória** dos pilotos que largam em 1°, 2° e 3° lugar.<jupyter_code>soma_p = formula_1['Posição_Final'].sum()

soma_grid = formula_1[formula_1.grid == 1]
soma_grid = soma_grid["grid"].count()
porc = (soma_grid * 100) / soma_p

soma_grid_2 = formula_1[formula_1.grid == 2]
soma_grid_2 = soma_grid_2["grid"].count()
porc_2 = (soma_grid_2 * 100) / soma_p

soma_grid_3 = formula_1[formula_1.grid == 3]
soma_grid_3 = soma_grid_3["grid"].count()
porc_3 = (soma_grid_3 * 100) / soma_p
valores_dict = {"Q1":porc, "Q2":porc_2, "Q3":porc_3}
valores_dict_2 = {"Q1":"1°", "Q2":"2°", "Q3":"3°"}

valores = pd.Series(valores_dict)
valores_2 = pd.Series(valores_dict_2)

porc_valores = pd.DataFrame({"Saída":valores_2 ,"Porcentagem":valores_dict})
porc_valores<jupyter_output><empty_output><jupyter_text>Análise: Podemos observar que a diferença entre essas 3 posições cai quase **pela metade** quando vamos aumentando uma posição, além disso podemos ver que apenas **41,87%** dos pilotos que largaram na primeira posição em toda a história ganharam a corrida, então **mais da metade** desses pilotos **não conseguiram** a **vitória** após terem obtido o melhor tempo no treino classificatório, tal fato demonstra o quão **imprevisíveis** são as corridas da Fórmula 1.  Dados Monaco (1950-1968) e (2005-2019)Aqui iremos calcular o Z-score de pilotos de diferentes épocas da Fórmula 1, e analisaremos qual piloto se sairia melhor se corresse em mesmas condições atualmente.   Monaco (1950-1968)<jupyter_code>Monaco_1 = formula_1[formula_1.circuitId == 6]
Monaco_1 = Monaco_1[Monaco_1.year <= 1968]
Monaco_1 = Monaco_1.sort_values(by="time")
Monaco_1 = Monaco_1.drop(["raceId","round","driverId","circuitId",
                          "code","constructorId","fastestLapTime","fastestLapSpeed"], axis=1)
Monaco_1 = Monaco_1.reset_index(drop=True)

#Transformando tempo em str para segundos.
Monaco_1_time = Monaco_1["time"]
Monaco_1_dt = pd.to_datetime(Monaco_1_time, format='%H:%M:%S.%f', errors='ignore')
Monaco_1_seconds = (Monaco_1_dt.dt.hour*60+Monaco_1_dt.dt.minute)*60 + Monaco_1_dt.dt.second
Monaco_1["Seconds"] = Monaco_1_seconds

Monaco_1["Zscore"] = (Monaco_1.Seconds - Monaco_1.Seconds.mean())/Monaco_1.Seconds.std()
Monaco_1["Pilotos"] = Monaco_1["Pilotos"].drop_duplicates()
Monaco_1 = Monaco_1.dropna()
Monaco_1 = Monaco_1.reset_index(drop=True)
Monaco_1
Monaco_1["Z-score"] = Monaco_1["Zscore"] * -1
sns.barplot(data=Monaco_1, x="Z-score", y="Pilotos")
plt.title("Monaco (1950-1968)")<jupyter_output><empty_output><jupyter_text>Monaco (2005-2019)<jupyter_code>Monaco_2 = formula_1[formula_1.circuitId == 6]
Monaco_2 = Monaco_2[Monaco_2.year >= 2005]
Monaco_2 = Monaco_2.sort_values(by="time")
Monaco_2 = Monaco_2.drop(["raceId","round","driverId","circuitId","constructorId","fastestLapSpeed","fastestLapTime"], axis=1)
Monaco_2 = Monaco_2.reset_index(drop=True)

Monaco_2_time = Monaco_2["time"]
Monaco_2_dt = pd.to_datetime(Monaco_2_time, format='%H:%M:%S.%f', errors='ignore')
Monaco_2_seconds = (Monaco_2_dt.dt.hour*60+Monaco_2_dt.dt.minute)*60 + Monaco_2_dt.dt.second
Monaco_2["Seconds"] = Monaco_2_seconds

Monaco_2["Zscore"] = (Monaco_2.Seconds - Monaco_2.Seconds.mean())/Monaco_2.Seconds.std()
Monaco_2["Pilotos"] = Monaco_2["Pilotos"].drop_duplicates()
Monaco_2 = Monaco_2.dropna()
Monaco_2 = Monaco_2.reset_index(drop=True)
Monaco_2
Monaco_2["Z-score"] = Monaco_2["Zscore"] * -1
sns.barplot(data=Monaco_2, x="Z-score", y="Pilotos")
plt.title("Monaco (2005-2019)")<jupyter_output><empty_output><jupyter_text><NAME> x <NAME><jupyter_code>Monaco_a = {"Ano": "1950-1968",
                "Fastest Pilot T": Monaco_1["time"][0],
                    "Fastest Pilot S": Monaco_1["Seconds"][0],
                        "Média": Monaco_1["Seconds"].mean(),
                          "Desvio Padrão": Monaco_1["Seconds"].std(),
                               "Zscore": Monaco_1["Zscore"][0]}

Monaco_b = {"Ano": "2005-2019",
                "Fastest Pilot T": Monaco_2["time"][0],
                    "Fastest Pilot S": Monaco_2["Seconds"][0],
                        "Média": Monaco_2["Seconds"].mean(),
                          "Desvio Padrão": Monaco_2["Seconds"].std(),
                              "Zscore": Monaco_2["Zscore"][0]}

medidas_a = pd.Series(Monaco_a)
medidas_b = pd.Series(Monaco_b)

d_ab_medidas = pd.DataFrame({"Monaco_1": medidas_a, "Monaco_2": medidas_b})
d_ab_medidas<jupyter_output><empty_output><jupyter_text>Análise: Vemos que o piloto **<NAME>** está com um Z-score de **-2.64** desvios padrões abaixo da média, enquanto **<NAME>** está apenas **-0.94**, podemos observar no gráfico de barra como Graham se saiu melhor entre os seus oponentes, a partir deste fato supomos que ou Hill era forte de mais em comparação aos outros pilotos, ou eles que eram muito fracos, ou talvez um pouco dos dois. Já no caso de Alonso, a disputa é visivelmente mais equilibrada, mostrando como os pilotos estão em um patamar parecido. Em uma suposta **disputa** entre **Graham** e **Alonso**, baseado nestes dados, pode-se inferir que talvez Graham venceria o confronto. É claro que só estamos levando em conta 1 fator neste caso, se fizéssemos uma análise mais profunda dos dados, teríamos resultados mais precisos.  Dados Monza (1950-1964) e (2006-2020)  Monza (1950-1964)<jupyter_code>Monza_1 = formula_1[formula_1.circuitId == 14]
Monza_1 = Monza_1[Monza_1.year <= 1964]
Monza_1 = Monza_1.sort_values(by="time")
Monza_1 = Monza_1.drop(["raceId","round","driverId","circuitId",
                          "code","constructorId","fastestLapTime","fastestLapSpeed"], axis=1)
Monza_1 = Monza_1.reset_index(drop=True)

#Transformando tempo em str para segundos.
Monza_1_time = Monza_1["time"]
Monza_1_dt = pd.to_datetime(Monza_1_time, format='%H:%M:%S.%f', errors='ignore')
Monza_1_seconds = (Monza_1_dt.dt.hour*60+Monza_1_dt.dt.minute)*60 + Monza_1_dt.dt.second
Monza_1["Seconds"] = Monza_1_seconds

Monza_1["Zscore"] = (Monza_1.Seconds - Monza_1.Seconds.mean())/Monza_1.Seconds.std()
Monza_1["Pilotos"] = Monza_1["Pilotos"].drop_duplicates()
Monza_1 = Monza_1.dropna()
Monza_1 = Monza_1.reset_index(drop=True)
Monza_1
Monza_1["Z-score"] = Monza_1["Zscore"] * -1
sns.barplot(data=Monza_1, x="Z-score", y="Pilotos")
plt.title("Monza (1950-1964)")<jupyter_output><empty_output><jupyter_text>Monza (2006-2020)<jupyter_code>Monza_2 = formula_1[formula_1.circuitId == 14]
Monza_2 = Monza_2[Monza_2.year >= 2006]
Monza_2 = Monza_2.sort_values(by="time")
Monza_2 = Monza_2.drop(["raceId","round","driverId","circuitId","constructorId","fastestLapSpeed","fastestLapTime"], axis=1)
Monza_2 = Monza_2.reset_index(drop=True)

Monza_2_time = Monza_2["time"]
Monza_2_dt = pd.to_datetime(Monza_2_time, format='%H:%M:%S.%f', errors='ignore')
Monza_2_seconds = (Monza_2_dt.dt.hour*60+Monza_2_dt.dt.minute)*60 + Monza_2_dt.dt.second
Monza_2["Seconds"] = Monza_2_seconds

Monza_2["Zscore"] = (Monza_2.Seconds - Monza_2.Seconds.mean())/Monza_2.Seconds.std()
Monza_2["Pilotos"] = Monza_2["Pilotos"].drop_duplicates()
Monza_2 = Monza_2.dropna()
Monza_2 = Monza_2.drop(14)
Monza_2 = Monza_2.reset_index(drop=True)
Monza_2
Monza_2["Z-score"] = Monza_2["Zscore"] * -1
sns.barplot(data=Monza_2, x="Z-score", y="Pilotos")
plt.title("Monza (2006-2020)")<jupyter_output><empty_output><jupyter_text><NAME> x <NAME><jupyter_code>Monza_a = {"Ano": "1950-1964",
                "Fastest Pilot T": Monza_1["time"][0],
                    "Fastest Pilot S": Monza_1["Seconds"][0],
                        "Média": Monza_1["Seconds"].mean(),
                          "Desvio Padrão": Monza_1["Seconds"].std(),
                               "Zscore": Monza_1["Zscore"][0]}

Monza_b = {"Ano": "2006-2020",
                "Fastest Pilot T": Monza_2["time"][0],
                    "Fastest Pilot S": Monza_2["Seconds"][0],
                        "Média": Monza_2["Seconds"].mean(),
                          "Desvio Padrão": Monza_2["Seconds"].std(),
                              "Zscore": Monza_2["Zscore"][0]}

medidas_a = pd.Series(Monza_a)
medidas_b = pd.Series(Monza_b)

d_ab_medidas = pd.DataFrame({"Monza_1": medidas_a, "Monza_2": medidas_b})
d_ab_medidas<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12645747248701059, 'fraction_numerical': 0.02753344515812298, 'mean_word_length': 5.592233009708738, 'pattern_counts': {'":': 56, '<': 117, '<?xml version=': 0, '>': 117, 'https://': 2, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 5, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '25', 'dir': 'jupyter-structured-clean-dedup', 'id': '217200', 'license': 'MIT', 'n_tokens_mistral': 9392, 'n_tokens_neox': 8907, 'n_words': 2102, 'path': 'Projeto_final/Projeto_ICD.ipynb', 'repo_name': 'Caioviniciusb/Projeto_ICD_P2', 'size': '24541'}