Home

Rendu du travail Python effectué dans le cadre d’un stage de fin d’année en Master informatique. Data mining sur des données hydrogéologiques, plusieurs techniques sont mises en place dans ce projet principalement de classification non supervisée.

Auteur:LEVAVASSEUR Yann
Version:1.0 de 2018

Documentation:

NoteBooks

Description des fichiers principaux Notebook.ipynb

  • Cluster_engine: Permet d’entrer les hypers parametres necessaires au lancement d’un clustering (ici Kmean ou Kshape) et le stockage de celui-ci dans un fichier Pickle
  • Read_cluster: Premet d’ouvrir un fichier Pickle d’un Clustering sauvegarder avec de l’analyser avec plusieurs outils visuelles
  • Read_data: Permet d’afficher et de jouer avec les donnees passee en parametres

utils

utils package

Submodules

utils.cluster_ts module

class utils.cluster_ts.ClusterTs(ss)[source]

Bases : object

Classe disposant des methodes de transformations et de manipulations des donnees a des fins de partitionnements

classe mere de:
  • kmean
  • kshape
Parameters:
  • ss : SeriesSupp
    instance du manager de series temporelles
Variables:
  • ts: Array[[[float]]]
    les series temporelle au format desiree pour le clustering
  • ts_clust: Array[int]
    Chaque entier est selon son index le cluster auquel appartient l’index referant de ts
  • ts_name: Array[String]
    Nom de la serie temporelle, du capteur a sa granularite (annee, mois, semaine)
  • ss: SeriesSupp
    instance du manager de series temporelles
  • sampler: int
    Taille du sampling sampler()
  • ploter: :class:Plot
    Instance d’un objet d’affichage
  • n: int
    Nombre de cluster
  • capteurs_names: Array[String]
    Nom de la serie temporelle, du capteur a sa granularite (annee, mois, semaine) Bientot supprime
  • from_save: Bool
    True si les infos sont recuperees d’un cluster sauvegarde
  • proto: Array[[[float]]]
    Prototype de chaque cluster
  • last_readed: {Dict}
    Informations recuperer depuis le fichier “Pickle” sauvegarde du cluster etudier
  • store_path: String
    Chemin vers le dossier de stockage des sauvegardes. N’est plus utilise depuis l’implementation d’une boite de dialogue pour la recherche de fichier de sauvegarde
  • name_file: String
    Chemin absolue vers fichier “Pickle”
  • clust_name: String
    Nom de la technique de clustering de l’instance
  • metric: String
    Nom de la technique de clacul de distance de l’instance
  • geo: :class:Geo
    Instance Geo
  • cluster_by_name: {Dict}
    Clustering des series temporelles uniquement par le nom des capteurs sans redondance
  • cluster_by_fullname: {Dict}
    Clustering des series temporelles uniquement par le nom des capteurs et leurs granularite
  • size_min: int
    Taille minimale d’une serie pour etre garde lors du preprocessing
  • nb_capteur: {Dict}
    Clustering des series temporelles uniquement par le nom des capteurs redondance
  • nb_week: {Dict}
    Lors d’un decoupage en semaine, represente la redondance par capteur des semaines
Example:
See: Cluster_engine.ipynb
Notes:
Dependencies:
  • tslearn
  • pandas
  • Pickle
aff_color()[source]

Affiche les couleurs utilise dans le clustering

capteur_parser()[source]

Parser des noms de capteurs, pour pouvoir garder en memoire les nom des capteur et leur extension de date selon la TS

Parameters:
NA
Returns:
NA
check_equal(iterator)[source]

Verifie si la TS reste tout le temps sur la meme valeur

Parameters:
  • iterator: iterator
    la TS
Returns:
Bool
clust_hoverview(n)[source]

Affiche les TS d’un cluster n donnee

Parameters:
  • n: int
    cluster selectionne
Returns:
NA
clust_hoverview_rng(n)[source]

DEPRECATED: Tire une TS random d’un cluster n pour se donner une idee des membres de ce dernier

Parameters:
  • n: int
    Le cluster numero n
Returns:
NA
get_captor_distribution_in_cluster()[source]

Retourne le nombre d’occurance des cpateur dans chacun des clusters

Parameters:
NA
Returns:
unnamed: DataFrame
Tableau d’occurance
get_clust_part_for_captor(cpt)[source]

recupere les cluster pour capteur cpt donne et leur distribution au sein des cluster

Parameters:
  • cpt: String
    Capteur target
Returns:
res: String
Seulement les noms des date pour chacun des clusters
get_cluster_n(n)[source]

Retourne les TS d’un cluster n

Parameters:
  • n: int
    Numero de cluster souhaite
Returns:
res: Array[float]
Ensemble des TS du cluster
get_part_of_ts(data, elmt)[source]

Selon les Parameters d’elmt retrouve une partie des donnes depuis data

Parameters:
  • data: {Dict}
    Donnee depuis les quelles on souhaite recuperer une partie precise
  • elmt: {Dict}
    Information liee a la demande (date)
Returns:
res_ts: Array[float]
TS souhaitee
get_ts_by_captor(cpt)[source]

recupere les TS pour capteur cpt donne et leur distribution au sein des cluster

Parameters:
  • cpt: String
    Capteur target
Returns:
res: tuple(String, {Dict})
String represente le capteur et le dictionnaires la distribution des sous TS dans chaque clusters (key = cluster)
highlight_max(s)[source]

Parametre d’affichage surligne les max par ligne de DataFrame

Parameters:
  • s: pandas
    Ligne du tableau
Returns:
unnamed: pands.style
Affichage des max
parse_capteur_split(elmt)[source]

Recupere les information d’une TS depuis son nom comme le nom de son capteur et la date

Parameters:
  • elmt: String
    Nom du capteur avec info
Returns:
res: {Dict}
Les infos decoupes et range dans un dico
read_cluster(path='')[source]

Ouvre et recupere toutes les informations d’un fichier pickle(sauvegarde d’un clustering) et update les variable de l’instance pour correspondre

Parameters:
  • path: String
    Chemin d’acces au fichier
Returns:
NA
set_size_min(size)[source]

Set taille minimale d’une TS pour etre gardee

Parameters:
  • size: int
    Taille minimale
Returns:
NA
show_info()[source]

Affiche les informations recuperees depuis le txt d’info de la sauvegarde cluster lie a l’instance

Parameters:
NA
Returns:
NA
store_cluster(name)[source]

Sauvegarde sur forme de fichier pickle associe a un txt d’information la partitionnement actuelle de l’instance

Parameters:
  • name: String
    Nom du fichier, represente les parametre principaux de la partitionnement
Returns:
NA
style_df(opt, t)[source]
tslearn_format_export(other_data=None)[source]

Export la variable data vers le format utilise par tslearn pour la partitionnements

Parameters:
NA
Returns::
NA

utils.data_factory module

class utils.data_factory.DataFactory(cwd)[source]

Bases : object

Factory fournis et importe les donnees en gerant le nombre d’intances

Parameters:
  • cwd: String
    chemin d’acces ou le main est excecute
Variables:
  • path_RG24: String
    Chemin pour recuperer les donnees RG24
  • path_RG1: String
    Chemin pour recuperer les donnees RG1
  • path_GW: String
    Chemin pour recuperer les donnees GW
  • RG24: {Dict}
    Les donnees RG24
  • RG1: {Dict}
    Les donnees RG1
  • GW: {Dict}
    Les donnees GW
Notes:
  • RG24: Rain gauge, precipitation de pluie journaliere
  • RG1: Rain gauge, precipitation de pluie horaire
  • GW: Grand Water, donnees piezometriques
get_GW()[source]

Retourne un [DICT] en guise de dataset instancie une seule fois le dataset

get_RG1()[source]

Retourne un [DICT] en guise de dataset instancie une seule fois le dataset

get_RG24()[source]

Retourne un [DICT] en guise de dataset instancie une seule fois le dataset

get_data(name)[source]

Dirige l’importation vers la bonne methode selon le parametre

Parameters:
  • name: String
    Nom du type de donnees a recuperer
Returns:
None
get_dataset(source)[source]

Recupere et retourne un Dictionnaire de Dataframe importe de multiple fichiers csv

Parameters:
  • source: String
    Chemin vers les fichiers csv
Returns:
dataset: {Dict}
Dictionnaire des donnees par capteurs
path_GW = 'csv_prepro\\GW'
path_RG1 = 'csv_prepro\\RG\\precipitation_1h_RG'
path_RG24 = 'csv_prepro\\RG\\precipiation_RG'

utils.file_dialog module

utils.geo module

class utils.geo.Geo(cwd)[source]

Bases : object

Classe entierement dedie a l’affichage des capteur dans l’espace les donnees sont normees suivant un type de geolocalisation geologique propre a la NC, la classe dispose de plusieurs type d’affichage

Parameters:
  • cwd: String
    Chemin vers le main
Variables:
  • path_geo_RG: String
    Chemin pour recuperer les donnees RG
  • path_geo_GW: String
    Chemin pour recuperer les donnees GW
  • geo_RG: {Dict}
    Les donnees geo_RG
  • geo_GW: {Dict}
    Les donnees geo_GW
  • dist_mat: pandas.DataFrame
    Matrice des distances entre les pluviometre et des piezometres
Notes:
  • RG: Rain gauge, precipitation de pluie journaliere
  • GW: Grand Water, donnees piezometric
distance_dict()[source]
distance_matrix()[source]

Retourne une dataframe representant les distances entre piezo et pluvio ainsi que les distances les plus courte

Parameters:
NA
Returns:
gdist_style: pandas.style
Matrice stylise des distances
get_geo_data(source)[source]

Recupere les donnees geographique

Parameters:
  • source: String
    location ou recuperer ces donnees
Returns:
data: pandas.DataFrame
Donnees sous forme de tableau
get_minrange_rg(cpt)[source]
highlight_min(s)[source]

Parametre d’affichage surligne les min par ligne de DataFrame

Parameters:
  • s: pandas
    Ligne du tableau
Returns:
unnamed: pands.style
Affichage des min
plot_2D()[source]
plot_3D()[source]

Afficha 3D des geolocalisations des ouvrages

Parameters:
NA
Returns:
NA
plot_3D_for_all_cluster(names)[source]
plot_3D_for_one_cluster(names)[source]
plotly_3D(names)[source]

Afficha 3D des geolocalisations des ouvrages avec plotly cette fois Plus utilise que le premier

Parameters:
names: String
Nom des capteurs pour les afficher au survol
Returns:
NA

utils.k_mean module

class utils.k_mean.Kmean(ss)[source]

Bases : utils.cluster_ts.ClusterTs

Classe de partitionnement des donnees avec l’algorithm K-mean

Parameters:
  • ss : SeriesSupp
    instance du manager de series temporelles
Variables:
  • seed: int
    Valeur d’initialisation de l’algo, random.
  • counter: Counter
    repartition des objets au sein des clusters
  • km: TimeSeriesKMeans
    Instance de l’algo
  • clust_name: String
    Nom de l’algo(affichage des plots)
  • metric: String
    Choix du metrics utilise, principalement softdtw ici car tres efficace et rapide
cluster_counter()[source]

Compte les objets au sein des clusters

Parameters:
NA
Returns:
NA
k_fit()[source]

Effectue le partitionnement

Parameters:
NA
Returns:
NA
k_init(v=True)[source]

initialisation de l’instance de l’algorithm avec les parametres actuels

Parameters:
  • v: boolean
    Verbose, affiche les info lie au partitionnement
Returns:
NA

utils.k_shape module

class utils.k_shape.Kshape(ss)[source]

Bases : utils.cluster_ts.ClusterTs

Classe de partitionnement des donnees avec l’algorithm K-shape

Parameters:
  • ss : SeriesSupp
    instance du manager de series temporelles
Variables:
  • seed: int
    Valeur d’initialisation de l’algo, random.
  • counter: Counter
    repartition des objets au sein des clusters
  • km: TimeSeriesKMeans
    Instance de l’algo
  • clust_name: String
    Nom de l’algo(affichage des plots)
  • metric: String
    Choix du metrics utilise, principalement softdtw ici car tres efficace et rapide
cluster_counter()[source]

Compte les objets au sein des clusters

Parameters:
NA
Returns:
NA
k_fit()[source]

Effectue le partitionnement

Parameters:
NA
Returns:
NA
k_init(v=True)[source]

initialisation de l’instance de l’algorithm avec les parametres actuels

Parameters:
  • v: boolean
    Verbose, affiche les info lie au partitionnement
Returns:
NA

utils.parser module

class utils.parser.Parser[source]

Bases : object

Transforme les donnees d’un format a un autre a l’aide de methodes de transformations

sax_to_spmf(data, separator=False)[source]

Du format SAX au format SPMF(un soft de data mining avec son propre format)

Parameters:
  • data: SAX
Returns:
res_str: String

utils.plot module

class utils.plot.Plot(cluster)[source]

Bases : object

Classe permetant l’affichage sous forme de graph de donnees

Parameters:
  • cluster: ClusterTs
    instance de partitionnement
Variables:
  • mode: String
    Type d’affichage des graphes
  • colors: {Dict}
    Dictionnaire de couleur pour les plots
change_mode(m)[source]
Change le type d’affichage:
  • 1: Markers
  • 2: Lines
  • 3: Lines+Markers
Parameters:
  • m: int [1:3]
    L’entier qui determiner le mode actuel, si en dehors de [1:3] reste au meme mode qu’avant l’appel
Returns:
NA
plot_captor_cluster_cover(data)[source]
plot_cluster()[source]

Methode d’affichage graphique des clusters formes par l’instance ClusterTs Affiche chaque groupe avec une difference de couleur pour le prototype

plot_cluster_light()[source]

Version legere d’affichage pour limiter la consommation de puissance d’un affichage dynamique

plot_histo(n)[source]

Affcihe par cluster le nombre d’occurence des Capteurs de et la granularite maximale

plot_histo_2(n)[source]
plot_prefixspan(l)[source]
plot_scatter(data)[source]

Affiche des donnees avant cluster, permet de visualiser les donnees decoupe par exemple data: [DICT] les donnees key: Capteur value: Dataframe

plot_scatter_by_capteur(data, capteur)[source]
plot_scatter_by_capteur_color_cluster(data, dict_clust, rg=None)[source]

Affiche un capteur et colorise selon l’appartenance au cluster

plot_scatter_light(data)[source]

Encore une version plus legere de la methode de base data: [DICT] les donnees key: Capteur value: Dataframe

plot_simple_TS(ts)[source]

Plot une liste de valeur

Parameters:
  • ts: Array[int]
    Liste de valeur a afficher
Returns:
NA
plot_simple_list(list)[source]

utils.prefix_span module

class utils.prefix_span.PrefixSpanManager(sax_engine, export=True)[source]

Bases : object

Classe d’outil a l’utilisation de prefixspan

Parameters:
  • sax_engine: SaxEngine
    Instance de preprocessing SAX
  • export: Boolean
    Si oui ou non les donnees sont deja exportees au bon format
Variables:
  • se_instance: SaxEngine
    L’instance de class SAX
  • data: Array[]
    Les donnees au format SAX
export_format()[source]

Modifie le format pour correspondre au besoin de l’instance de PrefixSpan

frequent(n)[source]

Retourne les frequent de support n

Parameters:
  • n: int
    Support minimal
Returns:
Liste des motifs de support minimal n
plot(l)[source]
run()[source]

Creer l’instance PrefixSpan avec les donnees pretraites

topk(n, c=True)[source]

Affiche les motifs les plus frequents(plus grand support) et par defaut les fermes

Parameters:
  • n: int
    Nombre de motifs a afficher
Returns:
Liste de motifs frequent

utils.pygapbide module

class utils.pygapbide.Gapbide(sdb, sup, m, n)[source]

Bases : object

backward_check(pattern, sup, pdb)[source]
forward_check(pattern, sup, pdb)[source]
gen_l1_patterns()[source]

generate length-1 patterns

output(pattern, sup, pdb)[source]

overide this function to output patterns to files.

run()[source]
span(pattern, sup, pdb)[source]
class utils.pygapbide.GapbideManager(gp=None)[source]

Bases : object

Manager d’une instance :class:Gabide

Variables d’Instance:
  • gp: Gapbide
    Instance de l’algo a manager
  • dataset: Array[int]
    Liste des donnees sax les entiers font office de symboles
  • res: Array[[int: X*], int: Y, Z(int: Z1, int: Z2, int: Z3)]
    • X* Pattern d’entiers ex: 244695
    • Y Support du pattern
    • Z( * Z1: Position du patterns, indice de la transaction
      • Z2: Indice au sein de la transaction du debut du patterns
      • Z3: Indice de fin…)
clean_import_db(db)[source]
reset_gp(sup, m, n)[source]
run()[source]

utils.sax_engine module

class utils.sax_engine.SaxEngine(nsy, nse)[source]

Bases : object

Manager SAX(SymbolicAggregateApproximation) pour formater les donnees temporelles vers unhe suites de segments a symboles representatifs

Parameters:
  • nsy : int
    Nombre de symbols
  • nsy : int
    Nombre de segments
Variables:
  • raw_data : ArrayList
    Donnees brutes
  • process_data : ArrayList
    Donnees retravaillees pour correspondre au format fit()
  • sax_data_inv : ArrayList
    Donnees au format SAX mais de meme taille len() que les donnees brutes
  • sax_data : ArrayList
    Donnees au format SAX
Example:
See: Sequential_pattern_mining.ipynb
export_format()[source]
fit(data, export=True)[source]
fit_run(data)[source]
reset()[source]

Reinitialise les variables d’instance

Parameters:
NA
Returns:
NA
run()[source]
set_nb_segment(nb)[source]
set_nb_symbol(nb)[source]
step_run(data)[source]

utils.series_supp module

class utils.series_supp.SeriesSupp(cwd, factory, dataset_name)[source]

Bases : object

Premet d’organiser et de manipuler les données.

Parameters:
  • cwd: String
    chemin d’acces ou le main est excecute
  • factory: Factory
    Instance de la factory
  • dataset_name: String
    Definie le type de donnees a recuperer
Variables:
  • dataset: {Dict}
    Le dataset original sans modification
  • tmp_dataset: {Dict}
    Le dataset actuel avec les modification
  • years: [ARRAY<STRING>]
    Setup de decoupage par annees
  • months: [ARRAY<STRING>]
    Setup de decoupage par mois
  • days: [ARRAY<STRING>]
    Setup de decoupage par annees | [BOOL] decoupage semaines
  • factory: DataFactory
    Instance de la Factory
  • dataset_name: String
    Permet de connaitre la source souhaite e.g import_dataset()
dict_norm()[source]

Normalise un dictionnaire de TS

dict_round()[source]

Normalise un dictionnaire de TS

dict_smooth(wind=24, col='Valeur')[source]

Dictionnaire full smooth

Parameters:
  • wind: int
    Taille de la fenetre 24 pour smooth journalier
  • col: str (DEFAUlT = « Valeur »)
    Colonne cible de l’action
Returns:
NA
dict_stand()[source]

Normalise un dictionnaire de TS

get_data()[source]

Getter du dataset modifie

get_data_from_captor(cpt)[source]

Retourne toutes les series temporelles liees a un nom de capteur

Parameters:
  • cpt: String
    Nom du capteur desire
Returns:
res: {Dict}
Sous dataset du capteur associe, les clefs sont les differente declinaisons en series temporelles du capteur, varie en longueur selon la granularite
import_dataset()[source]

Appel a la factory pour recuperer les donnees

info()[source]

Permet d’avoir une idees des donnees du dataset en prenant une TS au hasard

normalize(data)[source]

Normalisation des TS, moyenne: 0 et ecart type: 1 Data: dataframe

reset_dataset()[source]

Retourne aux donnees importes avant modifications

reset_days()[source]

Par defaut decoupe les TS dans la granularite maximale

reset_months()[source]

Par defaut decoupe les TS dans la granularite maximale

reset_setup()[source]

Full reset des variables de granularites

reset_years()[source]

Par defaut decoupe les TS dans la granularite maximale

smooth(data, wind, col)[source]

Smooth via rolling window

Parameters:
  • data: DataFrame
    La DF a smooth, attention a bien choisir la colonne voulu
  • wind: int
    Taille de fentre
  • col: String
    La colonne de la DF a smooth
Returns:
data: DataFrame
La DF remanie
split_all()[source]
split_data_months()[source]

Decoupage des TS selon la variable de mois

split_data_weeks()[source]

Decoupage des TS selon les semaines

split_data_years()[source]

Decoupage des TS selon la variable d’annees

split_each_steps()[source]
split_year_month_multi_day(dataset, month)[source]
split_year_multi_month()[source]
split_year_multi_month_multi_day()[source]
standardize(data)[source]

Standardize des TS, moyenne: 0 et ecart type: 1 Data: dataframe

utils.statics_func module

utils.statics_func.openfile_dialog()[source]

Boite de dialogue permetant de recuperer les fichers de sauvegarde de partitionnement Pickle

Parameters:
NA
Returns:
fname: String
Chemin vers le fichier selectionne
utils.statics_func.thresholding_algo(y, lag, threshold, influence)[source]

Algorithm de detection de pics dans une TS

Parameters:
  • lag
  • threshold
  • influence
Returns:
unnamed: {Dict}
Informations sortie de l’algo, signals est une liste de meme len que la TS, representant les ppics via une variation boolean

Module contents

Installation

Téléchargement via Git:

git clone https://github.com/LevavasseurYann/workspace_internship.git

Vous trouverez les données réelles utilisées >>> https://drive.google.com/open?id=1c0ZEve1EDBKIyPgjcAuIyUEVAXNNWo4t

Note

Ce projet est developpe dans un environement conda, un fichier spec-file est a telecharger ici >>> txt

Des questions ? Besoin d’aide ?

Rejoingnez le chat:

  • Gitter