« WarBot » : différence entre les versions
(→Code) |
(→Code) |
||
Ligne 45 : | Ligne 45 : | ||
== Code == | == Code == | ||
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 | ||
#Import the data | #Import the data | ||
aerial = pd.read_csv('operations.csv') | aerial = pd.read_csv('operations.csv') | ||
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] | ||
Ligne 96 : | Ligne 79 : | ||
# # Data Extraction | # # Data Extraction | ||
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.
- Le deuxième histogramme montre le nombre d'attaques subies par un pays et par quels ennemis.
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
- 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
- # Data Import & Cleaning
- Import the data
aerial = pd.read_csv('operations.csv')
- drop countries that are NaN
aerial = aerial[pd.isna(aerial.Country)==False]
- drop if target longitude is NaN
aerial = aerial[pd.isna(aerial['Target Longitude'])==False]
- Drop if takeoff longitude is NaN
aerial = aerial[pd.isna(aerial['Takeoff Longitude'])==False]
- 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']
- 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)
- # Data Extraction
- Change the format of the dates
aerial['Mission Date']= pd.to_datetime(aerial['Mission Date'])
- Sort the dataframe by date
aerial= aerial.sort_values(by="Mission Date")
- Groupby Takeoff Location
aerial.groupby(['Takeoff Location'])
- In[7]:
list_location= aerial['Takeoff Location']
- # Data Vizualization
- In[8]:
- This functions creates a histgram of all the attacked countries by a country n_country
- First, keep only the rows that n_country as an attacking country
- Second, count the occurances of the attacked country and keep most 10 attacked countries by n_country
- 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)
- In[9]:
create_graph_hist_attack("USA")
- In[10]:
- This functions creates a histgram of all the countries that attackes n_country
- First, keep only the rows that n_country as an attacked country
- Second, count the occurances of the attacking country and keep most 10 attacking countries by n_country
- 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)
- In[12]:
aerial['Target Country'].value_counts()
- In[15]:
create_graph_hist_attacked_by('LIBYA')
</nowiki>