« WarBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Ligne 45 : Ligne 45 :


== Code ==
== Code ==
<nowiki>
#!/usr/bin/env python
# coding: utf-8
# In[1]:




Ligne 59 : Ligne 53 :
import matplotlib.pyplot as plt # visualization library
import matplotlib.pyplot as plt # visualization library
from plotly.offline import init_notebook_mode, iplot # plotly offline mode
from plotly.offline import init_notebook_mode, iplot # plotly offline mode
import plotly.graph_objs as go # plotly graphical object
import plotly.graph_objs as go # plotly graphical object


# # Data Import & Cleaning
# # Data Import & Cleaning
# In[2]:


#Import the data  
#Import the data  
aerial = pd.read_csv('operations.csv')
aerial = pd.read_csv('operations.csv')
# In[3]:




Ligne 81 : Ligne 67 :
# Drop if takeoff longitude is NaN
# Drop if takeoff longitude is NaN
aerial = aerial[pd.isna(aerial['Takeoff Longitude'])==False]
aerial = aerial[pd.isna(aerial['Takeoff Longitude'])==False]
# In[5]:




Ligne 96 : Ligne 79 :


# # Data Extraction
# # Data Extraction
# In[6]:





Version du 25 mai 2021 à 10:45

La deuxième Guerre Mondiale est un tournant historique et le but de Warbot est d'inclure les évènements les plus marquants de la WWII dans les wikipast des endroits. Pour ce faire, à partir d'un dataset de bombardements aériens, Warbot intégre dans le wikipast une liste des bombardments aériens effectué par chaque ville et une liste des attaques subis par chaque ville. De plus, le bot ajoute une représentation graphique des attaques.


Résumé des fonctionnalités

1- Le bot intègre une entrée de bombardement dans les pages wiki de lieux contenant la date, le lieu, les parties concernées, etc. (variant selon les données disponibles). Si la page n’existe pas, il crée une nouvelle page du lieu du bombardement.

2- Le bot intègre deux histogrammes. Le premier histogramme montre la liste des attaques effectuées par la ville. Le deuxième montre la liste des attaques subies par la ville.

Données traités

Les données traitées par ce bot sont constituées de rapports de mission papier numérisés de la Seconde Guerre mondiale. Elles ont été recensées par le département de la United States Air Force. Chaque enregistrement comprend la date, le conflit, l'emplacement géographique et d'autres éléments de données pour former une séquence en direct de la guerre aérienne de 1939 à 1945. Les enregistrements comprennent des données sur les forces aériennes américaines et royales, ainsi que des missions des forces aériennes australiennes, néo-zélandaises et sud-africaines.

Description technique

Gestion des données

  • Importation des librairies utilisée : Pandas, Numpy
  • Importation du dataset.
  • Elimination des données qui n'ont pas d'entrée de pays, de longitude de la cible ou longitude du départ de mission.
  • Elimination des données null pour l'implémentation du bot.

Extraction des données

  • Uniformisation des données de date.
  • Réorganisation du dataframe selon les dates des missions.
  • Groupement des missions selon les lieux de départ.

Visualisation des données

Nous avons créé deux histogrammes basés sur les données concernant un pays spécifique :

  • Le premier histogramme montre le nombre d'attaques que le pays en question a initiée, et contre quels pays.

Warbot exemple1.png

  • Le deuxième histogramme montre le nombre d'attaques subies par un pays et par quels ennemis.

Warbot exemple2.png

Création du Bot

  • Recherche des page de lieux et implémentation des informations
  • Si la page du lieu n'existe pas, on la crée.

Discussion des performances

Code

  1. Import the needed libraries

import numpy as np import pandas as pd import datetime import matplotlib.pyplot as plt # visualization library from plotly.offline import init_notebook_mode, iplot # plotly offline mode import plotly.graph_objs as go # plotly graphical object

  1. # Data Import & Cleaning
  1. Import the data

aerial = pd.read_csv('operations.csv')


  1. drop countries that are NaN

aerial = aerial[pd.isna(aerial.Country)==False]

  1. drop if target longitude is NaN

aerial = aerial[pd.isna(aerial['Target Longitude'])==False]

  1. Drop if takeoff longitude is NaN

aerial = aerial[pd.isna(aerial['Takeoff Longitude'])==False]


  1. used features

used_features= ['Mission ID', 'Mission Date','Country', 'Takeoff Location',

               'Takeoff Longitude','Takeoff Base','Takeoff Latitude','Target Country', 'Target City', 
               'Target Latitude', 'Target Longitude']
  1. drop all the features that we do not use

drop_features= [c for c in aerial.columns if not (c in used_features) ] aerial.drop(drop_features, axis=1,inplace = True)


  1. # Data Extraction


  1. Change the format of the dates

aerial['Mission Date']= pd.to_datetime(aerial['Mission Date'])

  1. Sort the dataframe by date

aerial= aerial.sort_values(by="Mission Date")

  1. Groupby Takeoff Location

aerial.groupby(['Takeoff Location'])


  1. In[7]:


list_location= aerial['Takeoff Location']


  1. # Data Vizualization
  1. In[8]:


  1. This functions creates a histgram of all the attacked countries by a country n_country
  2. First, keep only the rows that n_country as an attacking country
  3. Second, count the occurances of the attacked country and keep most 10 attacked countries by n_country
  4. Plot the histogram

def create_graph_hist_attack (n_country):

   df=aerial.loc[aerial.Country==n_country]
   data= df['Target Country'].value_counts()   
   data = [go.Bar(
           x=data[:10].index,
           y=data[:10].values,
           hoverinfo = 'text',
           marker = dict(color = 'rgba(177, 14, 22, 0.5)',
                            line=dict(color='rgb(0,0,0)',width=1.5)),
   )]
   layout = dict(
       title = 'Aircraft Series done by '+ n_country,
   )
   fig = go.Figure(data=data, layout=layout)
   iplot(fig)


  1. In[9]:


create_graph_hist_attack("USA")


  1. In[10]:


  1. This functions creates a histgram of all the countries that attackes n_country
  2. First, keep only the rows that n_country as an attacked country
  3. Second, count the occurances of the attacking country and keep most 10 attacking countries by n_country
  4. Plot the histogram

def create_graph_hist_attacked_by (n_country):

   df=aerial.loc[aerial['Target Country']==n_country]
   data= df['Country'].value_counts()   
   data = [go.Bar(
           x=data[:10].index,
           y=data[:10].values,
           hoverinfo = 'text',
           marker = dict(color = 'rgba(177, 14, 22, 0.5)',
                            line=dict(color='rgb(0,0,0)',width=1.5)),
   )]
   layout = dict(
       title =  n_country+" was mostly attacked by "
   )
   fig = go.Figure(data=data, layout=layout)
   iplot(fig)


  1. In[12]:


aerial['Target Country'].value_counts()


  1. In[15]:

create_graph_hist_attacked_by('LIBYA')

</nowiki>