Skip to content

Instantly share code, notes, and snippets.

@fsodogandji
Created February 9, 2021 01:53
Show Gist options
  • Save fsodogandji/6921e5c6e1be991ab7dde666b5f801fb to your computer and use it in GitHub Desktop.
Save fsodogandji/6921e5c6e1be991ab7dde666b5f801fb to your computer and use it in GitHub Desktop.
#!/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