#!/usr/bin/env python # coding: utf-8 # # Projeto Prison Break # # # O objetivo do projeto é responder às seguintes perguntas: # # ## 1-Em qual ano ocorreram mais tentativas de fuga de helicópteros? # ## 2-Em quais países ocorreram mais tentativas de fuga de helicópteros? # In[1]: # LIBS utilizadas durante o projeto import pandas as pd import requests from bs4 import BeautifulSoup import plotly.express as px import numpy as np # Import de Libs para trabalhar com Datas from dateutil.relativedelta import relativedelta from dateutil import parser from dateutil.parser import parse from datetime import date, time, datetime, timedelta # Import de Libs para correlação import seaborn as sn import scipy import statsmodels # In[2]: # get the response in the form of html wikiurl="https://en.wikipedia.org/wiki/List_of_helicopter_prison_escapes" table_class="wikitable sortable" response=requests.get(wikiurl) print(response.status_code) # In[3]: # parse data from the html into a beautifulsoup object soup = BeautifulSoup(response.text, 'html.parser') helicopter_escape=soup.find('table',{'class':"wikitable"}) # In[4]: # Retorna uma lista dados=pd.read_html(str(helicopter_escape)) # In[5]: dados_df=pd.DataFrame(dados[0]) dados_df.head(5) # In[6]: dados_df.info() # In[7]: # Filtro de colunas dados_df[['Date', 'Succeeded']].head(5) # In[8]: # Armazenado as colunas necessárias à resposta 1 em uma variável (select_1) select_1 = dados_df[['Date', 'Succeeded']] # Tipos de Dados select_1.dtypes # In[9]: select_1.info(5) # In[10]: # Select da coluna Date select_1['Date'].head(5) # In[11]: #Transforma a coluna Date em um DataFrame coluna_date_df = pd.DataFrame(select_1['Date']) coluna_date_df.head(5) # In[12]: coluna_date_df.dtypes # # Separação do ano da coluna Date # In[43]: # Utilizado a função do pandas "apply", que aplica funções para todas as linhas ou colunas usando axis. Escolhida por #substituir os dias faltantes pelo dia vigente. # https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.apply.html coluna_date_df['Date'].apply(parse).head(5) # In[15]: # Atribuindo resultado da View a uma nova coluna no DataFrame coluna_date_df['Data_tratada'] = coluna_date_df['Date'].apply(parse) coluna_date_df.head(5) # In[16]: # Função dt.year usada para extrair apenas o ano da coluna "Data_tratada" coluna_date_df['Ano'] = coluna_date_df['Data_tratada'].dt.year coluna_date_df.head(5) # In[17]: coluna_date_df.groupby('Ano').count().columns # # Resposta da questão 1: # ## 1-Em qual ano ocorreram mais tentativas de fuga de helicópteros? # In[44]: # Resposta da primeira pergunta, os anos que mais ocorreram tentativas de fuga de helic foram "2009, 2001, 1996, 2007" df_count = coluna_date_df.groupby('Ano').count().reset_index()[['Ano','Date']].sort_values('Date', ascending=False) df_count.columns = ['Ano', 'Contagem'] df_count = df_count.reset_index(drop=True) df_count # # Resposta da questão 2: # # ## Em quais países ocorreram mais tentativas de fuga mediante sequestro de helicópteros? # In[21]: dados=pd.read_html(str(helicopter_escape)) # In[22]: # Resposta da segunda pergunta: Em quais países ocorreram mais tentativas de fuga mediante sequestro de helicópteros? # Foi possível verificar que os países com mais tentativas de fuga de helicóptero foram a França(15 tentativas), # Estados Unidos(8 tentativas) seguidos de Belgica, Canada e Grécia todos com 4 tentativas. dados_2 = pd.DataFrame(dados[0]) dados_2 = dados_2[['Country', 'Succeeded']].groupby('Country').count()[['Succeeded']].sort_values('Succeeded', ascending=False).reset_index() dados_2 # # Gráficos # ## Questão 1 : Anos em que ocorreram mais tentativas de fuga de helicótero # In[45]: df_count['Ano']=df_count['Ano'].astype(str) fig = px.bar(df_count, x='Ano', y='Contagem', title='Tentativas de fuga por ano', labels={"Ano":"Ano", "Contagem":"Tentativas de fuga", "Contagem":"Tentativas de fuga"}) fig.show() # ## Questão 2: Países em que ocorreram mais tentativas de fuga de helicópteros? # In[46]: fig = px.bar(dados_2, x='Country', y='Succeeded', title='Países com mais tentativas de fuga', labels={"Country":"Países", "Succeeded":"Tentativas de fuga", "Country":"Países"}) fig.show() # # Questões extras sugeridas: # # ## 3 - Em quais países as fugas de helicópteto tem maior chance de sucesso? # # ## 4 - Como o número de fugitivos afeta o sucesso? # # ## 5 - Quais fugitivos fizeram isso mais de uma vez? # In[25]: dados=pd.read_html(str(helicopter_escape)) # In[26]: dados_c = pd.DataFrame(dados[0]) dados_c.head(5) # In[54]: select = dados_c[['Country','Succeeded']] # In[28]: fugas_sucesso = select[select['Succeeded'] == 'Yes'].groupby('Country').count().sort_values('Succeeded', ascending=False).reset_index() # In[29]: fugas_falha = select[select['Succeeded'] == 'No'].groupby('Country').count().sort_values('Succeeded', ascending=False).reset_index() # In[30]: ## Separação da coluna "Succeeded" = total de tentativas em duas colunas "Sucesso" e "Falha" # In[31]: fugas_merge = fugas_sucesso.merge(fugas_falha, left_on='Country', right_on='Country', how='outer') fugas_merge.columns=['Country', 'Sucesso', 'Falha'] fugas_merge # In[32]: fugas_merge['Sucesso'] = fugas_merge['Sucesso'].fillna(0) fugas_merge # In[33]: fugas_merge['Falha'] = fugas_merge['Falha'].fillna(0) fugas_merge # In[34]: fugas_merge['Total_tentativas'] = fugas_merge['Falha']+fugas_merge['Sucesso'] fugas_merge # In[35]: fugas_merge['Chance_sucesso'] = (fugas_merge['Sucesso']/fugas_merge['Total_tentativas'])*100 fugas_merge # ## Resposta da 3 questão: Em quais países as fugas de helicópteto tem maior chance de sucesso? # In[36]: ## Os países em que fugas prisionais de helicóptero tem mais chance de sucesso são: Brasil, ## Chile, Irlanda, Itália, México, Porto Rico e Rússia fugas_merge['Chance_insucesso'] = (fugas_merge['Falha']/fugas_merge['Total_tentativas'])*100 fugas_merge = fugas_merge.sort_values(['Chance_sucesso', 'Sucesso'], ascending=False) fugas_merge # # Gráfico questão 3: Países em que fugas de helicóptero tem mais chance de sucesso # In[47]: fig = px.histogram(fugas_merge, x='Country', y='Chance_sucesso', title = 'Chance de sucesso', labels={'Country':'Países', 'Chance_sucesso':'Chance de sucesso', 'Chance_sucesso':'Chance de sucesso'}) fig.show() # In[39]: # Percentual de falha com for adotado no projeto Negativo = [] for i in fugas_merge['Chance_insucesso']: if i > 0: Negativo.append(-i) else: Negativo.append(i) Negativo # In[40]: fugas_merge # In[41]: fugas_merge['Chance_insucesso'] # ## Gráfico questão 3: Chances de sucesso e falha de fugas de helicóptero por país # In[56]: import plotly.graph_objects as go years = fugas_merge['Country'] fig = go.Figure( layout=dict(title=dict(text=" Chances de sucesso/falha")) ) fig.add_trace(go.Bar(x=years, y=fugas_merge['Chance_insucesso'], base=Negativo, marker_color='crimson', name='Chance de Falha')) fig.add_trace(go.Bar(x=years, y=fugas_merge['Chance_sucesso'], base=0, marker_color='lightslategrey', name='Chance de Sucesso' )) fig.update_traces(texttemplate='%{y:.2s}', textposition='outside') fig.update_layout(uniformtext_minsize=8, uniformtext_mode='hide') fig.show()