Revenir
Revenir

Analyser les données de vol d'un drone

Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant.

Sommaire

Avant de commencerPrésentationInformations de vol - Fichier csvVol du drone - VidéoComment calculer la distance entre deux points - RéférencePréparationTraitement des données avec PythonVers le notebook Capytale - Site

Avant de commencer

Prérequis : 
  • maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties) ;
  • thème "Les données structurées et leur traitement", fichiers CSV.
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant.
Ressources, matériel, documents nécessaires :
  • bibliothèques Python pandas et folium ;
  • un dossier contenant le fichier "drone.csv" et le programme à réaliser.

Présentation

Pour surveiller l'état des cultures, les agriculteurs recourent parfois à l'utilisation d'un drone. À partir des données enregistrées durant le vol, nous allons reconstituer le parcours du drone et l'afficher sur une carte de type "open street map". Nous en déduirons également la vitesse maximale atteinte par le drone lors de ce vol. 
La vidéo, prise par le drone, contient un fichier de sous-titres avec diverses informations actualisées pendant le vol : xxx, xxx. Nous avons converti ce fichier au format csv pour faciliter son exploitation. 

Informations de vol - Fichier csv

Vol du drone - Vidéo

Comment calculer la distance entre deux points - Référence

Préparation

Téléchargez le fichier CSV en le renommant "drone.csv".
Pour traiter des données, nous allons utiliser la bibliothèque Python Pandas qui permet la manipulation et l'analyse des données. On donne :
import pandas
vol = pandas.read_csv("drone.csv") #L’objet « vol » contient le fichier
Vous pouvez obtenir des informations sur le fichier csv avec :
print(vol.info())
Il est possible de récupérer certaines données du tableau, par exemple certaines lignes, certaines colonnes ou bien encore des valeurs uniques. Pour cela, on utilise la méthode « loc » avec les index des lignes et les index des colonnes. Le principe de fonctionnement de « loc » est relativement simple puisque l'on utilise une instruction de la forme « vol.loc[index_ligne, index_colonne] ».
On peut aussi récupérer toutes les lignes d’une colonne « vol.loc[:, index_colonne] » ou toutes les colonnes d’une ligne « vol.loc[index_ligne, :] ». Index_ligne ou index_colonne peut prendre la forme d’un numéro ou d’un test.
Exemple
Sur la première ligne du tableau (index 0) :
vol.loc[0, "LATITUDE"]renvoie 48.691319
vol.loc[0, ["DATE", "LATITUDE", "LONGITUDE"]]renvoie DATE 1683987460055    LATITUDE  48.691319    LONGITUDE 2.091055
DATE contient une chaîne de caractères au format Timestamp. Le Timestamp désigne le nombre de millisecondes écoulées depuis le 1erjanvier 1970 à minuit.
Pour convertir une chaîne de caractères en une liste en utilisant la virgule comme séparateur, on peut utiliser la méthode split :
chaine = "1,2,3"
chaine.split(",") renvoie ['1', '2', '3']
Pour connaître l'index d'un élément dans une liste, on utilise la méthode index.
ma_liste = ["1", "a", "toto"]
ma_liste.index("1") renvoie 0
ma_liste.index("a") renvoie 1
Pour connaître l'élément depuis l'index :
ma_liste[2] renvoie toto
Pour convertir un caractère d'une liste en nombre entier int ou réel float :
int(maliste[0]) renvoie 1

Traitement des données avec Python

Nous allons visualiser le parcours du drone à l'aide du fichier CSV contenant les informations de vol.
1. Complétez le programme suivant :
import pandas
import folium
llat = []
llong = []
vol = pandas.read_csv("drone_modif2.csv")
print(vol.info())
# On relève la latitude et la longitude toutes les 50 lignes
# à partir de la ligne 300 jusqu'à la dernière.
for i in range(...............................................):
    if i%50 == 0:
       llat.append(..............................................)
       llong.append(............................................)
nbval = len(llat)
c = folium.Map(location=[48.689966, 2.089861], zoom_start=17)
# On marque la valeur de départ
folium.Marker([llat[0], llong[0]], popup="Départ").add_to(c)
# On marque les positions sur la carte
for i in range(1, ......................):
    folium.Marker(................................................., popup=f"id{300+i*50}, lat {llat[i]}, long {llong[i]}").add_to(c)
c.save("carte.html")
Affichez la page carte.html dans votre navigateur pour visualiser le parcours. Le clic de la souris sur un marqueur affiche sa latitude et longitude ainsi que le numéro de la ligne du fichier CSV.
Vous allez maintenant réaliser le programme qui indique la vitesse maximale atteinte par le drone durant ce vol.
Vous choisissez deux points sur la carte entre lesquelles la vitesse vous paraît la plus élevée. Repérez les lignes du fichier CSV auxquels ils appartiennent. Il suffit d'appliquer la formule vue dans "Calcul distance" pour trouver la vitesse.
2. Complétez le code suivant :
from math import sin, acos, cos, sqrt, pi
# On choisit les ptA (1) et ptB (2) aux lignes 3400 et 3600
longa = vol.loc[3400, "LONGITUDE"]*pi/180
longb = .............................................................
lata =.............................................................
latb =.............................................................
t1 = vol.loc[3400, "DATE"]
t2 =.................................................
t = (int(t2)-int(t1))/1000
d = 6378137*acos(...................................................................................)
print("le drone a parcouru ", d, "m en ", t, "s")
v = .............................
print("sa vitesse est de ", v, "km/h")
Nous pouvions aussi calculer la vitesse entre ces deux points en utilisant la colonne "SPEED" du fichier CSV. Vous calculez la vitesse moyenne en prenant une série de valeurs de vitesse dans le fichier CSV et entre ces deux points.
3. Complétez le programme suivant :
v = []
for i in range(............................):
    v.append(........................................)
print("le drone vole à une vitesse de ", ..........................................., "km/h")

Vers le notebook Capytale - Site