-
-
Save fsodogandji/6921e5c6e1be991ab7dde666b5f801fb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# coding: utf-8 | |
# In[ ]: | |
""" | |
Voici quelques infos sur le taf Gaz : | |
Toutes les informations ci-dessous sont confidentielles, je compte sur toi pour ne pas les diffuser. | |
Tu trouveras en pièce jointe un fichier de données. (Nous utilisons le logiciel Scout pour les lire). Le dataset comporte 22000 fichiers. (10 Go au total) | |
Le but de l’algorithme à faire est de donner la concentration d’éthanol quelque soit la température, l’humidité, la concentration de BTEX et la concentration de NO2. | |
Concernant la base de données Éthanol, il devrait y avoir 22000 fichiers, pour un total d’environ 10Go. | |
Chaque fichier contient les mesures issues de 3 composants et ce afin que l’algorithme fonctionne sur tous les capteurs issue de la production. | |
Chaque ligne représente une mesure tous les 100ms | |
Colonnes à prendre en input pour la création de l’algorithme : | |
Input Température : en degré | |
Input Humidité : en % | |
Input EtOH_A en ppm | |
Input EtOH_B en ppm | |
Input BTEX_A en ppm | |
Input BTEX_B en ppm | |
Input NO2_A en ppm | |
Input NO2_B en ppm | |
Input UUT1_U_H1 : voltage d’alimentation du chauffage 1 puce 1 | |
Input UUT1_U_H2 : voltage d’alimentation du chauffage 2 puce 1 | |
Input UUT2_U_H1 : voltage d’alimentation du chauffage 1 puce 2 | |
Input UUT2_U_H2 : voltage d’alimentation du chauffage 2 puce 2 | |
Input UUT3_U_H1 : voltage d’alimentation du chauffage 1 puce 3 | |
Input UUT3_U_H2 : voltage d’alimentation du chauffage 2 puce 3 | |
Output UUT1_I_S1 : courant mesuré capteur 1 puce 1 | |
Output UUT1_I_S2 : courant mesuré capteur 2 puce 1 | |
Output UUT1_I_S3 : courant mesuré capteur 3 puce 1 | |
Output UUT1_I_S4 : courant mesuré capteur 4 puce 1 | |
Output UUT2_I_S1 : courant mesuré capteur 1 puce 2 | |
Output UUT2_I_S2 : courant mesuré capteur 2 puce 2 | |
Output UUT2_I_S3 : courant mesuré capteur 3 puce 2 | |
Output UUT2_I_S4 : courant mesuré capteur 4 puce 2 | |
Output UUT3_I_S1 : courant mesuré capteur 1 puce 3 | |
Output UUT3_I_S2 : courant mesuré capteur 2 puce 3 | |
Output UUT3_I_S3 : courant mesuré capteur 3 puce 3 | |
Output UUT3_I_S4 : courant mesuré capteur 4 puce 3 | |
Une fois l’algorithme développé il recevra en input : | |
La valeur des courants des 4 capteurs d’une puce | |
Le voltage d’alimentation des 2 chauffages | |
Pour les gaz tu pourras constater 2 colonnes ceci est dû au fait que selon la gamme de gaz nous avons des lignes de dilution différentes, dans tous les cas il n’y a pas de concentration sur la ligne A et B en même temps. | |
De plus attention merci de considérer pour | |
EtOH toute valeur en dessous de 0.250 ou négative comme 0 | |
NO2 toute valeur en dessous de 0.025 ou négative comme 0 | |
BTEX toute valeur en dessous de 0.012 ou négative comme 0""" | |
# In[24]: | |
#get_ipython().system(' pip install npTDMS[hdf,pandas,thermocouple_scaling] seaborn matplotlib pyarrow') | |
# In[30]: | |
import time | |
from nptdms import TdmsFile | |
import seaborn as sns | |
import re | |
from sklearn.tree import DecisionTreeClassifier | |
from sklearn.model_selection import cross_val_score | |
import os | |
import pandas as pd | |
import glob | |
# In[2]: | |
def timeit(method): | |
def timed(*args, **kw): | |
ts = time.time() | |
result = method(*args, **kw) | |
te = time.time() | |
if 'log_time' in kw: | |
name = kw.get('log_name', method.__name__.upper()) | |
kw['log_time'][name] = int((te - ts) * 1000) | |
else: | |
print(f'{method.__name__} {(te - ts) } s') | |
return result | |
return timed | |
# In[3]: | |
@timeit | |
def f(a, b): | |
time.sleep(5) | |
return a +b | |
@timeit | |
def labview2dataframe(filename): | |
print(f'Load {filename}') | |
tdms_file = TdmsFile.read(filename) | |
df = tdms_file.as_dataframe() | |
rename_columns = {} | |
pattern = re.compile(r"\/'(.*)'\/'(.*)'") | |
columns = {values: f'{re.match(pattern,values).group(1)}_{re.match(pattern,values).group(2)}' for i,values in enumerate(df.columns.values) } | |
#print(columns) | |
df.rename(columns=columns,inplace=True) | |
return df | |
@timeit | |
def save_to_parquet(filename): | |
print(f'Save to parquet: {filename}') | |
df = labview2dataframe(filename) | |
parquet_filename = f'{os.path.splitext(filename)[0]}.parquet' | |
print(f'parquet filename: {parquet_filename}') | |
df.to_parquet(path=parquet_filename) | |
if __name__ == "__main__": | |
root_dir = "Data/" | |
for filename in glob.iglob(root_dir + '**/*.tdms', recursive=True): | |
print(filename) | |
save_to_parquet(filename) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment