Telechargé par Aziz Kaboré

Examen Programmation Informatique: Exploration Aurifère Burkina Faso

publicité
INSTITUT TENG TUUMA GEOSCIENCES
DE OUAGADOUGOU (I.T.T.G.O)
Annee academique 2025 - 2026
Programmation informatique
Dr Wend-Panga Cedric BERE
EXAMEN PROGRAMMATION INFORMATIQUE
Exploration Aurifere au Burkina Faso
Dans le cadre d'une campagne d'exploration aurifere au Burkina Faso, des equipes de terrain ont preleve
des echantillons de sols dans 7 localites minieres : Hounde, Essakane, Mana, Karma, Youga, Taparko et
Bouly. Ce rapport presente l'integralite du traitement Python des donnees : chargement, nettoyage,
classification, statistiques et visualisations.
A. Chargement et preparation des donnees
A.1 – Lecture du fichier CSV
import pandas as pd
df = pd.read_csv("gold_exploration_data.csv")
print(f"Lignes : {len(df)}, Colonnes : {len(df.columns)}")
Fichier charge : 100 lignes, 7 colonnes
Colonnes : ['DATE', 'LOCALITY', 'Au_ppm', 'Fe_pct', 'As_ppm', 'pH', 'Depth_m']
A.2 – Conversion de la colonne DATE en datetime
df['DATE'] = pd.to_datetime(df['DATE'])
print(df['DATE'].dtype)
Type de la colonne DATE : datetime64[us]
A.3 – Extraction des colonnes YEAR et MONTH
df['YEAR'] = df['DATE'].dt.year
df['MONTH'] = df['DATE'].dt.month
print(f'Annees : {sorted(df["YEAR"].unique())}')
Annees presentes : [2022, 2023, 2024]
B. Nettoyage et estimation des valeurs manquantes
Valeurs manquantes initiales :
Colonne
Valeurs manquantes
DATE
0
LOCALITY
0
Au_ppm
53
Fe_pct
45
As_ppm
48
pH
0
Depth_m
0
B.1 – Creation de Au_est
df['Au_est'] = df['Au_ppm'].copy()
print(f'Valeurs manquantes dans Au_est : {df["Au_est"].isnull().sum()}')
Valeurs manquantes dans Au_est : 53
B.2 – Estimation par la formule geologique
COEFF_GEO = 0.8
mask = df['Au_est'].isnull() & df['Fe_pct'].notna() & df['As_ppm'].notna()
df.loc[mask, 'Au_est'] = (df.loc[mask, 'Fe_pct'] / df.loc[mask, 'As_ppm']) * COEFF_GEO
print(f'Lignes estimees : {mask.sum()}')
print(f'Au_est manquant restant : {df["Au_est"].isnull().sum()}')
Lignes estimees : 8
Au_est manquant restant : 45
B.3 – Suppression des lignes non estimables
avant = len(df)
df = df.dropna(subset=['Au_est']).reset_index(drop=True)
print(f'Lignes supprimees : {avant - len(df)} | Restantes : {len(df)}')
Lignes supprimees : 45 | Restantes : 55
C. Classification geologique automatique
C.1 – Fonction classify_mineralization()
def classify_mineralization(au_value):
if au_value < 0.2: return 'Non mineralise'
elif au_value < 0.5: return 'Zone a surveiller'
elif au_value <= 1.5: return 'Anomalie aurifere'
else: return 'Zone fortement mineralisee'
C.2 – Application et distribution des categories
df['Category'] = df['Au_est'].apply(classify_mineralization)
print(df['Category'].value_counts())
Categorie
Nombre
Zone fortement minéralisée
22
Anomalie aurifère
16
Zone à surveiller
9
Non minéralisé
8
D. Analyses statistiques par localite
stats_sites = df.groupby('LOCALITY')['Au_est'].agg(
Teneur_moyenne='mean', Teneur_max='max',
Ecart_type='std', Nb_echantillons='count').round(4)
print(stats_sites)
LOCALITY
Teneur_moyenne
Teneur_max
Ecart_type
Nb_echantillons
Bouly
1.3924
2.87
1.0399
10
Essakane
1.1233
3.06
1.0584
6
Hounde
1.3864
3.15
1.2132
11
Karma
1.7906
3.48
1.4029
7
Mana
1.3658
3.07
0.9317
8
Taparko
1.4041
3.37
1.3904
9
Youga
1.5375
2.81
1.2097
4
E. Analyse temporelle
yearly_trend = df.groupby('YEAR')['Au_est'].agg(
Teneur_moyenne_annuelle='mean', Nb_echantillons='count').round(4)
print(yearly_trend)
YEAR
Teneur_moyenne_annuelle
Nb_echantillons
2022.0
1.3192
21.0
2023.0
1.4991
33.0
2024.0
0.9867
1.0
F. Detection automatique des sites prioritaires
seuil = 0.8
mean_by_site = df.groupby('LOCALITY')['Au_est'].mean()
priority_sites = list(mean_by_site[mean_by_site > seuil].index)
print(priority_sites)
Sites dont la teneur moyenne > 0.8 ppm :
- Bouly : 1.3924 ppm
- Essakane : 1.1233 ppm
- Hounde : 1.3864 ppm
- Karma : 1.7906 ppm
- Mana : 1.3658 ppm
- Taparko : 1.4041 ppm
- Youga : 1.5375 ppm
priority_sites = ['Bouly', 'Essakane', 'Hounde', 'Karma', 'Mana', 'Taparko', 'Youga']
G. Visualisations graphiques
Trois graphiques ont ete generes : evolution annuelle (G.1), bar chart par localite (G.2) et boxplot par site
(G.3). La ligne pointillee rouge indique le seuil de priorite (0.8 ppm).
Figure – Graphiques G.1 (evolution annuelle), G.2 (moyennes par localite), G.3 (distribution boxplot). Toutes les
localites depassent le seuil prioritaire de 0.8 ppm.
I.T.T.G.O – Master 1 Genie Minier – Programmation Informatique – Annee academique 2025-2026 | Dr Wend-Panga Cedric
BERE
Téléchargement