Conseils sur CRBasic pour simplifier le post-traitement des données

par Barbra Utley | Mis à jour le : 08/12/2015 | Commentaires : 3

Les thèmes principaux du Blog


Recherche sur le Blog


Langages du blog

English
Français (French)


Abonnez-vous au Blog

Recevez un courriel lorsqu'un nouvel article est posté. Choisissez les sujets qui vous intéressent le plus.


Entrez votre adresse courriel :



Suggérer un article

Y a-t-il un sujet que vous souhaiteriez nous voir aborder ? Laissez-nous un message.

Leave this field empty

Feuille de calcul et graphique

Vous avez recueilli vos données de mesure, mais comment comprenez-vous facilement leurs sens ? Comment simplifier le post-traitement de vos données et commencer à l'analyser plus tôt ? Dans cet article, je vais vous expliquer comment ajouter du code à votre programme CRBasic afin de vous faire gagner du temps dans l'exploitation de vos données.

En tant qu'étudiante diplômée, je me souviens que mes collègues ont souvent parlé du mal de tête provoqué par le post-traitement des données avant même qu'ils puissent commencer à analyser leurs données.

  1. Pour le post-traitement, certains d'entre nous avaient appris comment écrire des macros dans Excel.
  2. D'autres collègues préféraient utiliser des logiciels telles que des scripts Python, MATLAB ou R pour formater leurs données pour les analyser ensuite.
  3. Un groupe d'entre nous vient de parcourir, de copier et de coller des données dans une nouvelle feuille de calcul dans Excel jusqu'à ce que toutes les informations soient disponibles dans une seule feuille de calcul, complétée par des colonnes supplémentaires d'étiquettes catégorielles.

Comme vous pouvez l'imaginer, mes collègues et moi avons trouvé que toutes ces méthodes de post-traitement étaient lourdes.

Pour nos expériences dans les études supérieures, nous avons été encouragés à conserver des notes détaillées sur les dates et les heures, ainsi que lorsqu'une expérience a passé d'un traitement à l'autre. J'ai compris l'importance de garder de bonnes notes, mais je me demandais s'il existait un moyen de sauvegarder l'information dans le tableau de données défini dans CRBasic.

La plupart des logiciels statistiques reposent sur des images de données ou des fichiers d'entrée ayant un nombre minimum de colonnes et de grandes quantités de lignes ou d'enregistrements. Trop souvent, nous créons nos tableaux de données brutes sans tenir compte de l'analyse que nous espérons compléter après la collecte des données.

Les tableaux de données incluent généralement un horodatage de l'heure par défaut plus le numéro d'enregistrement, puis nous commençons à ajouter des mesures de capteur et des mesures du système. Mais, normalement, une expérience comprend plus de traitements, plus de répétitions avec de multiples mesures du même capteur, plus d'informations utilisées pour regrouper les données pour l'analyse des données exploratoires, les tests T, les ANOVA (analyse de variance) ou les régressions .

Alors, comment pouvez-vous stocker des informations comme celle-ci dans votre tableau de données pour les traiter facilement ? Je vais vous expliquer comment créer et manipuler des variables catégorielles dans CRBasic. Les variables peuvent être modifiées pendant que les données sont collectées et stockées dans le tableau de données.

Exemple

Note : Même si vous ne connaissez pas la qualité de l'eau et les mesures de turbidité, je pense que vous verrez dans cet exemple combien il est facile d'améliorer l'utilité d'améliorer la présentation de votre table de données.

Contexte

Dans cet exemple, la question suivante a été posée: comment la mesure de turbidité optique varie-t-elle à six concentrations connues (0, 10, 50, 100, 250 et 1000 mg/L) ? Pour répondre à cette question, les données ont été recueillies à l'aide de trois turbidimètres OBS500. Les détails de l'expérience suivent :

  • Deux cents mesures ont été collectées à partir de chaque turbidimètre à chaque concentration.
  • Les mesures ont été regroupées en groupes de 100 pour les calculs moyens, médians et de déviation standard.
  • Différents minéraux ont été utilisés pour créer des suspensions de sédiments (quartz, kaolinite, bentonite, feldspath, mica et charbon). Le sédiment naturel des rivières a également été recueilli, séché, tamisé et pesé pour créer des suspensions de sédiments naturels.
  • Les variables catégoriques incluent la concentration (0, 10, 50, 100, 250 et 1000), le nom du capteur (A, B et C) et les minéraux (quartz, kaolinite, bentonite, feldspath, mica, charbon et sédiments naturels) .T

Tableau de données original

Le premier cycle de collecte de données a produit des tableaux de données semblables à ceux indiqués dans le tableau 1. Les valeurs déclarées comprenaient l'horodatage, le numéro d'enregistrement, la rétrodiffusion brute et l'affaiblissement latéral en millivolts et les lectures de rétrodiffusion et de diffusion latérale dans FBU (Formazin Backscatter Unit) et FTU (Unité de turbidité de la formazine).

Données brutes recueillies lors de l'étude des sédiments

Table 1. Données brutes recueillies lors de l'étude des sédiments.

Pour cette expérience, l'horodatage n'était pas important parce que les mesures ne changeaient pas par rapport au temps, mais aux traitements connus des sédiments (concentration et minéraux). En utilisant la configuration de la table de données actuelle dans le programme CRBasic exécuté sur ma centrale de mesure, je devais compter sur mes notes détaillées pour post-traiter les données et déterminer quel capteur a été utilisé, quelle concentration a été mesurée et quel minéral a été utilisé pour créer la suspension.

Tableau de données amélioré

Après avoir apporté quelques modifications au programme CRBasic, j'ai pu générer un tableau de données plus détaillé (Tableau 2) qui comprend des informations définies comme suit :

  • obs500_meas(1) est une rétrodiffusion (FBU).
  • obs500_meas(2) est une rétrodiffusion latérale (FTU).
  • obs500_meas(5) est une rétrodiffusion brute (mV).
  • obs500_meas(6) est une rétrodiffusion latérale brute (mV).

Data collected for the natural sediment from sensor A at a concentration of 0 mg/L

Table 2. Données collectées pour les sédiments naturels du capteur A à une concentration de 0 mg/L.

Comment faire ?

Pour transformer mon tableau de données du tableau 1 au tableau 2, j'ai seulement besoin d'ajouter quelques lignes de code au programme CRBasic. Voici comment vous pouvez aussi le faire :

  1. Définissez quelques nouvelles variables pour le capteur et la concentration. Les variables du capteur sont définies comme une chaîne de 16 caractères. Les capteurs ne sont pas des variables publiques car ils ne changent pas. La concentration, cependant, est une variable publique, de sorte que vous pouvez entrer la concentration connue dans la table publique.
    
    Dim SensorA As String * 16
    
    Dim SensorB As String * 16
    
    Dim SensorC As String * 16
    
    Public Concentration As Long
    
  2. Définissez les nouvelles tables de données comme ceci :
    
    DataTable (SamplesA,1,10000)
    
    	Sample (9,obs500_measA(),IEEE4)
    	Sample (1,SensorA,String)
    	Sample (1,Concentration,FP2)
    EndTable
    
    
    DataTable (SamplesB,1,10000)
    
    	Sample (9,obs500_measB(),IEEE4)
    	Sample (1,SensorB,String)
    	Sample (1,Concentration,FP2)
    EndTable
    
    
    DataTable (SamplesC,1,10000)
    
    	Sample (9,obs500_measC(),IEEE4)
    	Sample (1,SensorC,String)
    	Sample (1,Concentration,FP2)
    EndTable
    
  3. Définissez les noms des capteurs dans le programme. Parce que nous avons déclaré les capteurs comme "Dim" dans notre programme, ils ne s'affichent pas dans la table publique. Ainsi, après votre déclaration "BeginProg", vous devrez définir le Nom que vous voulez pour chacun des trois capteurs.
    Astuce : rappelez-vous que les capteurs ont été définis comme une chaîne de 16 caractères, de sorte que le nom pour chacun doit comporter moins de 16 caractères.

    Dans notre exemple, A, B et C ont été utilisés. Cependant, vous pouvez inclure des numéros de série ou des numéros de modèle de vos capteurs. Ce ne sont pas des variables publiques dans le sens où elles ne changent PAS avec le traitement. J'ai collecté 200 mesures par capteur dans chaque traitement.

    
    BeginProg
    
    	SensorA="A"
    	SensorB="B"
    	SensorC="C"
    

Maintenant, chaque fois qu'une table de données est appelée, le nom du capteur et la concentration sont ajoutés à l'enregistrement en tant que colonnes indépendantes dans le tableau de données. C'est si facile !

Conclusion

J'espère que cet exemple vous aidera à comprendre comment certains ajouts simples à votre code de programme CRBasic peuvent vous sauver d'un casse-tête de post-traitement plus tard. N'hésitez pas à publier vos questions ou commentaires ci-dessous.


Partagez cet article



A propos de l'auteur

barbra utley Le Dr Barbra Utley est chercheuse au sein du Groupe Environnement de Campbell Scientific, Inc. Elle travaille avec les services du marketing et de l'ingénierie sur les tests et le développement des produits en hydrologie. Les domaines d'intérêt comprennent la qualité de l'eau et les mesures des sédiments de substitution dans les systèmes d'eau douce, ainsi que l'analyse statistique. Barbra est titulaire d'un doctorat en ingénierie des systèmes biologiques en mettant l'accent sur les ressources en eau.

Voir tous les articles de cet auteur.


Commentaires

juanchit | 08/16/2017 at 12:48 PM

Hi Dr Barbra Utley.

We have 2 OBS501 Turbidimeters in our lab, and are deployig them both at the same time. As we don't use them at fix stations (but rather 1 minute stations at different locations), we have defined 3 Public Variables to i) open, ii) measure and iii) close the wiper from the PC400 software (we take the laptop to measure at all stations, just to check the instruments are measuring correctly).

But now we would like to add an extra variable in our table where we can store the name of the different stations, and we want to be able to set these names from the PC400, just as we can set the "open", "measure" and "close" variables.

Is there a way we can do that?

I send you the .cr8 file we are using upto now, just in case this provides more clarity.

Thanks a lot!

Juancho

'CR800 Series
'Created by Short Cut (3.0)

'Declare Variables and Units
Public BattV
Public PTemp_C
Public OBS500(4) 'direccion del sensor es O
Public OBS500_2(4) 'direccion del sensor es B

Public StationNames As String
Public open As Boolean
Public measure As Boolean
Public close As Boolean

Alias OBS500(1)=BS_I2016
Alias OBS500(2)=SS_I2016
Alias OBS500(3)=Temp_I2016
Alias OBS500(4)=WD_I2016

Alias OBS500_2(1)=BS_I2017
Alias OBS500_2(2)=SS_I2017
Alias OBS500_2(3)=Temp_I2017
Alias OBS500_2(4)=WD_I2017

Units BattV=Volts
Units PTemp_C=Deg C
Units BS_I2016=FBU
Units SS_I2016=FNU
Units Temp_I2016=Deg C
Units WD_I2016=unitless
Units BS_I2017=FBU
Units SS_I2017=FNU
Units Temp_I2017=Deg C
Units WD_I2017=unitless

'Define Data Tables
DataTable(OBSs_501,measure,-1)
Sample(1,BattV,FP2)
Sample(1,PTemp_C,FP2)
Sample(1,BS_I2016,FP2)
Sample(1,SS_I2016,FP2)
Sample(1,Temp_I2016,FP2)
Sample(1,WD_I2016,FP2)
Sample(1,BS_I2017,FP2)
Sample(1,SS_I2017,FP2)
Sample(1,Temp_I2017,FP2)
Sample(1,WD_I2017,FP2)
EndTable

'Main Program
BeginProg
'Main Scan
Scan(5,Sec,1,0)
'Default Datalogger Battery Voltage measurement 'BattV'
Battery(BattV)
'Default Wiring Panel Temperature measurement 'PTemp_C'
PanelTemp(PTemp_C,_60Hz)

If open Then
SDI12Recorder(OBS500_2(),1,"B","M3!",1,0)
SDI12Recorder(OBS500(),3,"O","M3!",1,0)

open = false
measure = false
close = false
EndIf

If close Then
SDI12Recorder(OBS500_2(),1,"B","M7!",1,0)
SDI12Recorder(OBS500(),3,"O","M7!",1,0)

open = false
measure = false
close = false
EndIf


If measure Then
'OBS500 Smart Turbidity Meter (SDI-12) measurements 'BS_I2016', 'SS_I2016', 'Temp_I2016', and 'WD_I2016'
SDI12Recorder(OBS500(),3,"O","M4!",1,0)
'OBS500 Smart Turbidity Meter (SDI-12) measurements 'BS_I2017', 'SS_I2017', 'Temp_I2017', and 'WD_I2017'
SDI12Recorder(OBS500_2(),1,"B","M4!",1,0)
EndIf

'Call Data Tables and Store Data
CallTable(OBSs_501)
NextScan
EndProg

BarbU | 08/23/2017 at 11:22 AM

Juancho,

I am sorry for my slow response, but excited you are using this approach.  You are almost there in your code.  You need to add a line to the data table definition telling the data table to grab the StationNames variable.  See below.

'Define Data Tables
DataTable(OBSs_501,measure,-1)
Sample(1,BattV,FP2)
Sample(1,PTemp_C,FP2)
Sample (1,StationNames,String)
Sample(1,BS_I2016,FP2)
Sample(1,SS_I2016,FP2)
Sample(1,Temp_I2016,FP2)
Sample(1,WD_I2016,FP2)
Sample(1,BS_I2017,FP2)
Sample(1,SS_I2017,FP2)
Sample(1,Temp_I2017,FP2)
Sample(1,WD_I2017,FP2)
'EndTable

The default size for your string variable is 24 bytes.  You can make this smaller inside the variable definition to optimize storage space.  If your station names are long you can make this bigger but it will eat into the available data table storage memory.  

You will store the site name every time your OBS501 data is written to the table.

I hope this helps and good luck with the turbidity monitoring.

Barb

juanchit | 09/11/2017 at 06:09 AM

Hi!

Sorry for my late response as well! I don't know why my user account didn't announce me your reply.

It was so easy! I though I had to make something special that would allow me to change table values from the PC400 software, but was not the case.

Thanks Barb!

Juancho

Please log in or register to comment.