sarapy 1.3.0__py3-none-any.whl → 2.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,781 +1,90 @@
1
1
  ###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
2
-
3
2
  import numpy as np
4
- from sklearn.base import BaseEstimator, TransformerMixin
3
+ import pandas as pd
5
4
 
6
- class TLMSensorDataProcessor(BaseEstimator, TransformerMixin):
5
+ class TLMSensorDataProcessor():
7
6
  """- Autor: BALDEZZARI Lucas
7
+
8
+ Estar clase sirve para entegar los datos de telemetría como un array de numpy. La idea es
9
+ poder acceder a los datos a través de indexación, ejemplos:
10
+ tlm_data[["INST_PT","INST_FT"],:] en este caso se obtienen los datos de las columnas INST_PT e INST_FT
8
11
 
9
- Metadata utilizada: Versión 9
10
12
  """
11
13
 
12
- def __init__(self, *args, **kwargs):
13
- """Constructor de la clase MetadataManager"""
14
-
15
- ### Creamos constantes que sirven para buscar los datos en el string de telemetría
16
- ### Cada constante es una tupla con la posición del bit menos significativo y la posición del bit más significativo
17
- self.__RFflag_pos = (0,0) #RF(1bit)
18
- self.__GNSSflag_pos = (1,1) #GNSS(1bit)
19
- self.__RFIDflag_pos = (2,2) #RFID(1bit)
20
- self.__FLASHflag_pos = (3,3) #FLASH(1bit)
21
- self.__RTCSflag_pos = (4,4) #RTCS(1bit)
22
- self.__MODEflag_pos = (5,5) #MODE(1bit)
23
- self.__NBAT_pos = (6,7) #NBAT(2bits)
24
- self.__TIMEAC_pos = (8,14) #TIMEAC(8bits)
25
- self.__ESTACflag_pos = (15,15) #ESTAC(1bit)
26
- self.__DSTRPT_pos = (16,19) #DSTR PT(4bits)
27
- self.__INESTPTflag_pos = (20,20) #INEST PT(1bit) Inestabilidad de plantín
28
- self.__OFFSPT_pos = (21,22) #OFFS PT(2bits)
29
- self.__DSTRFT_pos = (24,27) #DSTR FT(4bits)
30
- self.__INESTFTflag_pos = (28,28) #INEST FT(1bit)
31
- self.__OFFSFT_pos = (29,30) #OFFS FT(2bits)
32
- self.__PMSTFlag = (31,31) #PMST(1bit)
33
- self.__GYROX_pos = (32,34) #GYRO_X(3bits)
34
- self.__GYROY_pos = (35,37) #GYRO_Y(3bits)
35
- self.__GYROZf_pos = (38,39) #GYRO_Z(2bits)
36
- self.__ACELX_pos = (40,41) #ACEL_X(2bits)
37
- self.__ACELY_pos = (42,43) #ACEL_Y(2bits)
38
- self.__ACELZ_pos = (44,45) #ACEL_Z(2bits)
39
- self.__ESTMOflag_pos = (46,46) #EST MO(1bit)
40
- self.__ESTORflag_pos = (47,47) #EST OR(1bit)
41
- self.__SBAT_pos = (48,49) #SBAT(2bits) salud de la batería
42
- self.__VBAT_pos = (50,52) #VBAT(3bits) voltaje de la batería
43
- self.__CBAT_pos = (53,54) #CBAT(2bits) consumo de la batería
44
- self.__ESTBMSflag_pos = (55,55) #EST BMS(1bit)
45
- self.__FIX_pos = (56,58) #FIX(3bits)
46
- self.__SIV_pos = (59,63) #SIV(5bits)
47
-
48
- ##creamos un diccionario para saber la posición de cada dato dentro del array devuelto por transform()
49
- self._dataPositions = {
50
- "RFFlag": 0, "GNSSFlag": 1, "RFIDFlag": 2, "FLASHFlag": 3, "RTCSFlag": 4,
51
- "MODEFlag": 5, "NBAT": 6, "TIMEAC": 7, "ESTAC": 8, "DSTRPT": 9,
52
- "INESTPT": 10, "OFFSPT": 11, "DSTRFT": 12, "INESTFT": 13, "OFFSFT": 14,
53
- "PMSTFlag": 15, "GYROX": 16, "GYROY": 17, "GYROZ": 18, "ACELX": 19, "ACELY": 20,
54
- "ACELZ": 21, "ESTMOFlag": 22, "ESTORFlag": 23, "SBAT": 24, "VBAT": 25, "CBAT": 26,
55
- "ESTBMSFlag": 27, "FIX": 28, "SIV": 29}
14
+ def __init__(self, data:list):
15
+ """Constructor de la clase MetadataManager
56
16
 
57
- # self.kilometers = kwargs.pop('kilometers', 0)
58
- self.is_fitted = False
59
-
60
- def fit(self, X, y=None):
61
- """Método para generar datos a partir de la metadata.
62
-
63
- Args:
64
- - X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,1) donde n es la cantidad de datos.
65
- """
66
-
67
- ##chequeamos si todos los strings de X tienen la misma longitud, sino arrojamos un assert
68
- assert all(len(x) == len(X[0]) for x in X), "Todos los strings de X deben tener la misma longitud"
69
-
70
- self._RFFlag = np.vectorize(self.getRFFlag)(X)
71
- self._GNSSFlag = np.vectorize(self.getGNSSFlag)(X)
72
- self._RFIDFlag = np.vectorize(self.getRFIDFlag)(X)
73
- self._FLASHFlag = np.vectorize(self.getFLASHFlag)(X)
74
- self._RTCSFlag = np.vectorize(self.getRTCSFlag)(X)
75
- self._MODEFlag = np.vectorize(self.getMODEFlag)(X)
76
- self._NBAT = np.vectorize(self.getNBAT)(X)
77
- self._TIMEAC = np.vectorize(self.getTIMEAC)(X)
78
- self._ESTAC = np.vectorize(self.getESTAC)(X)
79
- self._DSTRPT = np.vectorize(self.getDSTRPT)(X)
80
- self._INESTPT = np.vectorize(self.getINESTPTFlag)(X)
81
- self._OFFSPT = np.vectorize(self.getOFFSPT)(X)
82
- self._DSTRFT = np.vectorize(self.getDSTRFT)(X)
83
- self._INESTFT = np.vectorize(self.getINESTFTFlag)(X)
84
- self._OFFSFT = np.vectorize(self.getOFFSFT)(X)
85
- self._PMSTFlag = np.vectorize(self.getPMSTFlag)(X)
86
- self._GYROX = np.vectorize(self.getGYROX)(X)
87
- self._GYROY = np.vectorize(self.getGYROY)(X)
88
- self._GYROZ = np.vectorize(self.getGYROZ)(X)
89
- self._ACELX = np.vectorize(self.getACELX)(X)
90
- self._ACELY = np.vectorize(self.getACELY)(X)
91
- self._ACELZ = np.vectorize(self.getACELZ)(X)
92
- self._ESTMOFlag = np.vectorize(self.getESTMOFlag)(X)
93
- self._ESTORFlag = np.vectorize(self.getESTORFlag)(X)
94
- self._SBAT = np.vectorize(self.getSBAT)(X)
95
- self._VBAT = np.vectorize(self.getVBAT)(X)
96
- self._CBAT = np.vectorize(self.getCBAT)(X)
97
- self._ESTBMSFlag = np.vectorize(self.getESTBMSFlag)(X)
98
- self._FIX = np.vectorize(self.getFIX)(X)
99
- self._SIV = np.vectorize(self.getSIV)(X)
100
-
101
- self.is_fitted = True
102
-
103
-
104
- def transform(self, X, y=None):
105
- """Transforma los datos de entrada en un array de numpy.
106
-
107
17
  Args:
108
- - X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,1) donde n es la cantidad de datos.
18
+ - data: Es una lista de diccionarios (como un JSON) con los datos de telemetría.
109
19
  """
110
-
111
- ##chequeamos si se ha llamado a fit(). Sino, se arroja un error
112
- if not self.is_fitted:
113
- raise ValueError("TLMSensorDataProcessor no ha sido fitteado. Llame a fit() previamente.")
114
-
115
- return np.array([ self._RFFlag,
116
- self._GNSSFlag,
117
- self._RFIDFlag,
118
- self._FLASHFlag,
119
- self._RTCSFlag,
120
- self._MODEFlag,
121
- self._NBAT,
122
- self._TIMEAC,
123
- self._ESTAC,
124
- self._DSTRPT,
125
- self._INESTPT,
126
- self._OFFSPT,
127
- self._DSTRFT,
128
- self._INESTFT,
129
- self._OFFSFT,
130
- self._PMSTFlag,
131
- self._GYROX,
132
- self._GYROY,
133
- self._GYROZ,
134
- self._ACELX,
135
- self._ACELY,
136
- self._ACELZ,
137
- self._ESTMOFlag,
138
- self._ESTORFlag,
139
- self._SBAT,
140
- self._VBAT,
141
- self._CBAT,
142
- self._ESTBMSFlag,
143
- self._FIX,
144
- self._SIV]).T
20
+ #convierto a un DataFrame de pandas
21
+ self.data = pd.DataFrame(data)
22
+ self.keys = self.data.columns.tolist()
145
23
 
146
- def fit_transform(self, X, y=None):
147
- """Combinamos fit() y transform() en un solo método.
24
+ def getData(self):
25
+ """Devuelve los datos de telemetría como un numpy array.
148
26
 
149
- Args:
150
- - X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,1) donde n es la cantidad de datos.
151
- """
152
- self.fit(X)
153
- return self.transform(X)
154
-
155
- def getRFFlag(self, metadata):
156
- """
157
- Devuelve el valor del flag RF.
158
-
159
- Parametros
160
- ----------
161
- metadata: str
162
- String con los metadatos obtenidos de la base de datos.
163
- Return
164
- ------
165
- int
166
- Valor del flag RF.
167
- """
168
-
169
- return np.uint8(int(metadata[self.__RFflag_pos[0]:self.__RFflag_pos[1]+1],2))
170
-
171
- def getGNSSFlag(self, metadata):
172
- """
173
- Devuelve el valor del flag RF.
174
-
175
- Parametros
176
- ----------
177
- metadata: str
178
- String con los metadatos obtenidos de la base de datos.
179
- Return
180
- ------
181
- int
182
- Valor del flag GNSS.
183
- """
184
-
185
- return np.uint8(int(metadata[self.__GNSSflag_pos[0]:self.__GNSSflag_pos[1]+1],2))
186
-
187
- def getRFIDFlag(self, metadata):
188
- """
189
- Devuelve el valor del flag RFID.
190
-
191
- Parametros
192
- ----------
193
- metadata: str
194
- String con los metadatos obtenidos de la base de datos.
195
- Return
196
- ------
197
- int
198
- Valor del flag RFID.
199
- """
200
-
201
- return np.uint8(int(metadata[self.__RFIDflag_pos[0]:self.__RFIDflag_pos[1]+1],2))
202
-
203
- def getFLASHFlag(self, metadata):
204
- """
205
- Devuelve el valor del flag FLASH.
206
-
207
- Parametros
208
- ----------
209
- metadata: str
210
- String con los metadatos obtenidos de la base de datos.
211
- Return
212
- ------
213
- int
214
- Valor del flag FLASH.
215
- """
216
-
217
- return np.uint8(int(metadata[self.__FLASHflag_pos[0]:self.__FLASHflag_pos[1]+1],2))
218
-
219
- def getRTCSFlag(self, metadata):
220
- """
221
- Devuelve el valor del flag RTCS.
222
-
223
- Parametros
224
- ----------
225
- metadata: str
226
- String con los metadatos obtenidos de la base de datos.
227
- Return
228
- ------
229
- int
230
- Valor del flag RTCS.
231
- """
232
-
233
- return np.uint8(int(metadata[self.__RTCSflag_pos[0]:self.__RTCSflag_pos[1]+1],2))
234
-
235
- def getMODEFlag(self, metadata):
236
- """
237
- Devuelve el valor del flag MODE.
238
-
239
- Parametros
240
- ----------
241
- metadata: str
242
- String con los metadatos obtenidos de la base de datos.
243
- Return
244
- ------
245
-
246
- int
247
- Valor del flag MODE.
248
- """
249
-
250
- return np.uint8(int(metadata[self.__MODEflag_pos[0]:self.__MODEflag_pos[1]+1],2))
251
-
252
- def getNBAT(self, metadata):
253
- """
254
- Devuelve el valor del flag NBAT.
255
-
256
- Parametros
257
- ----------
258
- metadata: str
259
- String con los metadatos obtenidos de la base de datos.
260
- Return
261
- ------
262
- int
263
- Valor del flag NBAT.
264
- """
265
-
266
- return np.uint8(int(metadata[self.__NBAT_pos[0]:self.__NBAT_pos[1]+1],2))
267
-
268
- def getTIMEAC(self, metadata):
269
- """
270
- Devuelve el tiempo de accionamiento en segundos
271
-
272
- Parametros
273
- ----------
274
- metadata: str
275
- String con los metadatos obtenidos de la base de datos.
276
- Return
277
- ------
278
- float
279
- Tiempo de accionamiento en segundos.
280
- """
281
-
282
- return np.float16(int(metadata[self.__TIMEAC_pos[0]:self.__TIMEAC_pos[1]+1],2)*0.1)
283
-
284
- def getESTAC(self, metadata):
285
- """
286
- Devuelve el valor del flag de ANOMALÍA OPERATIVA
287
-
288
- Parametros
289
- ----------
290
- metadata: str
291
- String con los metadatos obtenidos de la base de datos.
292
- Return
293
- ------
294
- int
295
- Valor del flag de ANOMALÍA OPERATIVA.
296
- """
297
-
298
- return np.uint8(int(metadata[self.__ESTACflag_pos[0]:self.__ESTACflag_pos[1]+1],2))
299
-
300
- def getDSTRPT(self, metadata):
301
- """
302
- Devuelve el nivel de distorsión para plantín
303
-
304
- Parametros
305
- ----------
306
- metadata: str
307
- String con los metadatos obtenidos de la base de datos.
308
- Return
309
- ------
310
- int:
311
- Valor de distorsión para plantín.
312
- """
313
-
314
- return np.uint8(int(metadata[self.__DSTRPT_pos[0]:self.__DSTRPT_pos[1]+1],2))
315
-
316
- def getINESTPTFlag(self,metadata):
317
- """
318
- Devuelve el valor del flag de INESTABILIDAD PARA PLANTÍN
319
-
320
- Parametros
321
- ----------
322
- metadata: str
323
- String con los metadatos obtenidos de la base de datos.
324
- Return
325
- ------
326
- int:
327
- Valor del flag de INESTABILIDAD PARA PLANTÍN.
328
- """
329
-
330
- return np.uint8(int(metadata[self.__INESTPTflag_pos[0]:self.__INESTPTflag_pos[1]+1],2))
331
-
332
- def getOFFSPT(self,metadata):
333
- """
334
- Devuelve el valor del flag de OFFSET PARA PLANTÍN
335
-
336
- Parametros
337
- ----------
338
- metadata: str
339
- String con los metadatos obtenidos de la base de datos.
340
- Return
341
- ------
342
- int:
343
- Valor del flag de OFFSET PARA PLANTÍN.
344
- """
345
-
346
- return np.uint8(int(metadata[self.__OFFSPT_pos[0]:self.__OFFSPT_pos[1]+1],2))
347
-
348
- def getDSTRFT(self,metadata):
349
- """
350
- Devuelve el nivel de distorsión para fertilizante
351
-
352
- Parametros
353
- ----------
354
- metadata: str
355
- String con los metadatos obtenidos de la base de datos.
356
- Return
357
- ------
358
- int:
359
- Valor de distorsión para fertilizante.
360
- """
361
-
362
- return np.uint8(int(metadata[self.__DSTRFT_pos[0]:self.__DSTRFT_pos[1]+1],2))
363
-
364
- def getINESTFTFlag(self,metadata):
365
- """
366
- Devuelve el valor del flag de INESTABILIDAD PARA FERTILIZANTE
367
-
368
- Parametros
369
- ----------
370
- metadata: str
371
- String con los metadatos obtenidos de la base de datos.
372
- Return
373
- ------
374
- int:
375
- Valor del flag de INESTABILIDAD PARA FERTILIZANTE.
376
- """
377
-
378
- return np.uint8(int(metadata[self.__INESTFTflag_pos[0]:self.__INESTFTflag_pos[1]+1],2))
379
-
380
- def getOFFSFT(self,metadata):
381
- """
382
- Devuelve el valor del flag de OFFSET PARA FERTILIZANTE
383
-
384
- Parametros
385
- ----------
386
- metadata: str
387
- String con los metadatos obtenidos de la base de datos.
388
- Return
389
- ------
390
- int:
391
- Valor del flag de OFFSET PARA FERTILIZANTE.
392
- """
393
-
394
- return np.uint8(int(metadata[self.__OFFSFT_pos[0]:self.__OFFSFT_pos[1]+1],2))
395
-
396
- def getPMSTFlag(self,metadata):
397
- """
398
- Devuelve el valor del flag perdida de muestreo.
399
-
400
- Parametros
401
- ----------
402
- metadata: str
403
- String con los metadatos obtenidos de la base de datos.
404
- Return
405
- ------
406
- int:
407
- Valor de flag perdida de muestreo.
408
- """
409
-
410
- return np.uint8(int(metadata[self.__PMSTFlag[0]:self.__PMSTFlag[1]+1],2))
411
-
412
- def getGYROX(self,metadata):
413
- """
414
- Devuelve el valor del giroscopio en X.
415
-
416
- Parametros
417
- ----------
418
- metadata: str
419
- String con los metadatos obtenidos de la base de datos.
420
- Return
421
- ------
422
- int:
423
- Valor del giroscopio en X.
424
- """
425
-
426
- return np.uint8(int(metadata[self.__GYROX_pos[0]:self.__GYROX_pos[1]+1],2))
427
-
428
- def getGYROY(self,metadata):
429
- """
430
- Devuelve el valor del giroscopio en Y.
431
-
432
- Parametros
433
- ----------
434
- metadata: str
435
- String con los metadatos obtenidos de la base de datos.
436
- Return
437
- ------
438
- int:
439
- Valor del giroscopio en Y.
440
- """
441
-
442
- return np.uint8(int(metadata[self.__GYROY_pos[0]:self.__GYROY_pos[1]+1],2))
443
-
444
- def getGYROZ(self,metadata):
445
- """
446
- Devuelve el valor del giroscopio en Z.
447
-
448
- Parametros
449
- ----------
450
- metadata: str
451
- String con los metadatos obtenidos de la base de datos.
452
- Return
453
- ------
454
- int:
455
- Valor del giroscopio en Z.
456
- """
457
-
458
- return np.uint8(int(metadata[self.__GYROZf_pos[0]:self.__GYROZf_pos[1]+1],2))
459
-
460
- def getACELX(self,metadata):
461
- """
462
- Devuelve el valor del acelerómetro en X.
463
-
464
- Parametros
465
- ----------
466
- metadata: str
467
- String con los metadatos obtenidos de la base de datos.
468
- Return
469
- ------
470
- int:
471
- Valor del acelerómetro en X.
472
- """
473
-
474
- return np.uint8(int(metadata[self.__ACELX_pos[0]:self.__ACELX_pos[1]+1],2))
475
-
476
- def getACELY(self,metadata):
477
- """
478
- Devuelve el valor del acelerómetro en Y.
479
-
480
- Parametros
481
- ----------
482
- metadata: str
483
- String con los metadatos obtenidos de la base de datos.
484
- Return
485
- ------
486
- int:
487
- Valor del acelerómetro en Y.
488
- """
489
-
490
- return np.uint8(int(metadata[self.__ACELY_pos[0]:self.__ACELY_pos[1]+1],2))
491
-
492
- def getACELZ(self,metadata):
493
- """
494
- Devuelve el valor del acelerómetro en Z.
495
-
496
- Parametros
497
- ----------
498
- metadata: str
499
- String con los metadatos obtenidos de la base de datos.
500
- Return
501
- ------
502
- int:
503
- Valor del acelerómetro en Z.
504
- """
505
-
506
- return np.uint8(int(metadata[self.__ACELZ_pos[0]:self.__ACELZ_pos[1]+1],2))
507
-
508
- def getESTMOFlag(self, metadata):
509
- """
510
- Devuelve el valor del flag de ESTMO
511
-
512
- Parametros
513
- ----------
514
- metadata: str
515
- String con los metadatos obtenidos de la base de datos.
516
- Return
517
- ------
518
- int:
519
- Valor del flag de ESTMO
520
- """
521
-
522
- return np.uint8(int(metadata[self.__ESTMOflag_pos[0]:self.__ESTMOflag_pos[1]+1],2))
523
-
524
- def getESTORFlag(self, metadata):
525
- """
526
- Devuelve el valor del flag de ESTOR
527
-
528
- Parametros
529
- ----------
530
- metadata: str
531
- String con los metadatos obtenidos de la base de datos.
532
- Return
533
- ------
534
- int:
535
- Valor del flag de ESTOR
536
- """
537
-
538
- return np.uint8(int(metadata[self.__ESTORflag_pos[0]:self.__ESTORflag_pos[1]+1],2))
539
-
540
- def getSBAT(self, metadata):
541
- """
542
- Devuelve el valor del estado de salud de la batería
543
-
544
- Parametros
545
- ----------
546
- metadata: str
547
- String con los metadatos obtenidos de la base de datos.
548
- Return
549
- ------
550
- int:
551
- Valor del flag de SBAT
552
- """
553
-
554
- return np.uint8(int(metadata[self.__SBAT_pos[0]:self.__SBAT_pos[1]+1],2))
555
-
556
- def getVBAT(self, metadata):
557
- """
558
- Devuelve el valor del voltaje de la batería
559
-
560
- Parametros
561
- ----------
562
- metadata: str
563
- String con los metadatos obtenidos de la base de datos.
564
- Return
565
- ------
566
-
567
- int:
568
- Valor del flag de VBAT
569
- """
570
-
571
- return np.uint8(int(metadata[self.__VBAT_pos[0]:self.__VBAT_pos[1]+1],2))
572
-
573
- def getCBAT(self, metadata):
574
- """
575
- Devuelve el valor del consumo de la batería
576
-
577
- Parametros
578
- ----------
579
- metadata: str
580
- String con los metadatos obtenidos de la base de datos.
581
- Return
582
- ------
583
-
584
- int:
585
- Valor del flag de CBAT
586
- """
587
-
588
- return np.uint8(int(metadata[self.__CBAT_pos[0]:self.__CBAT_pos[1]+1],2))
589
-
590
- def getESTBMSFlag(self, metadata):
591
- """
592
- Devuelve el valor del flag de ESTBMS
593
-
594
- Parametros
595
- ----------
596
- metadata: str
597
- String con los metadatos obtenidos de la base de datos.
598
- Return
599
- ------
600
-
601
- int:
602
- Valor del flag de ESTBMS
603
- """
604
-
605
- return np.uint8(int(metadata[self.__ESTBMSflag_pos[0]:self.__ESTBMSflag_pos[1]+1],2))
606
-
607
- def getFIX(self, metadata):
608
- """
609
- Devuelve el valor del flag de FIX
610
-
611
- Parametros
612
- ----------
613
- metadata: str
614
- String con los metadatos obtenidos de la base de datos.
615
- Return
616
- ------
617
-
618
- int:
619
- Valor del flag de FIX
620
- """
621
-
622
- return np.uint8(int(metadata[self.__FIX_pos[0]:self.__FIX_pos[1]+1],2))
623
-
624
- def getSIV(self, metadata):
625
- """
626
- Devuelve el valor del flag de SIV
627
-
628
- Parametros
629
- ----------
630
- metadata: str
631
- String con los metadatos obtenidos de la base de datos.
632
- Return
633
- ------
634
-
635
- int:
636
- Valor del flag de SIV
637
- """
638
-
639
- return np.uint8(int(metadata[self.__SIV_pos[0]:self.__SIV_pos[1]+1],2))
640
-
641
-
642
- @property
643
- def RFFlag(self):
644
- return self._RFFlag
645
-
646
- @property
647
- def GNSSFlag(self):
648
- return self._GNSSFlag
649
-
650
- @property
651
- def RFIDFlag(self):
652
- return self._RFIDFlag
653
-
654
- @property
655
- def FLASHFlag(self):
656
- return self._FLASHFlag
657
-
658
- @property
659
- def RTCSFlag(self):
660
- return self._RTCSFlag
661
-
662
- @property
663
- def MODEFlag(self):
664
- return self._MODEFlag
665
-
666
- @property
667
- def NBAT(self):
668
- return self._NBAT
669
-
670
- @property
671
- def TIMEAC(self):
672
- return self._TIMEAC
673
-
674
- @property
675
- def ESTAC(self):
676
- return self._ESTAC
677
-
678
- @property
679
- def DSTRPT(self):
680
- return self._DSTRPT
681
-
682
- @property
683
- def INESTPT(self):
684
- return self._INESTPT
685
-
686
- @property
687
- def OFFSPT(self):
688
- return self._OFFSPT
689
-
690
- @property
691
- def DSTRFT(self):
692
- return self._DSTRFT
693
-
694
- @property
695
- def INESTFT(self):
696
- return self._INESTFT
697
-
698
- @property
699
- def OFFSFT(self):
700
- return self._OFFSFT
701
-
702
- @property
703
- def PMSTFlag(self):
704
- return self._PMSTFlag
705
-
706
- @property
707
- def GYROX(self):
708
- return self._GYROX
709
-
710
- @property
711
- def GYROY(self):
712
- return self._GYROY
713
-
714
- @property
715
- def GYROZ(self):
716
- return self._GYROZ
717
-
718
- @property
719
- def ACELX(self):
720
- return self._ACELX
721
-
722
- @property
723
- def ACELY(self):
724
- return self._ACELY
725
-
726
- @property
727
- def ACELZ(self):
728
- return self._ACELZ
729
-
730
- @property
731
- def ESTMOFlag(self):
732
- return self._ESTMOFlag
733
-
734
- @property
735
- def ESTORFlag(self):
736
- return self._ESTORFlag
737
-
738
- @property
739
- def SBAT(self):
740
- return self._SBAT
741
-
742
- @property
743
- def VBAT(self):
744
- return self._VBAT
745
-
746
- @property
747
- def CBAT(self):
748
- return self._CBAT
749
-
750
- @property
751
- def ESTBMSFlag(self):
752
- return self._ESTBMSFlag
753
-
754
- @property
755
- def FIX(self):
756
- return self._FIX
757
-
758
- @property
759
- def SIV(self):
760
- return self._SIV
761
-
762
- @property
763
- def dataPositions(self):
764
- return self._dataPositions
27
+ Los datos se retornan como un array de numpy, donde cada fila es una operación y cada columna es un sensor.
28
+ Es decir, los datos son de la forma (n_operaciones, n_columnas).
29
+ """
30
+ return self.data.values
31
+
32
+ def __getitem__(self, key):
33
+ """
34
+ Permite indexar el objeto como un array o DataFrame.
35
+
36
+ Ejemplos:
37
+ obj[["col1", "col2"], :] -> columnas col1 y col2, todas las filas
38
+ obj[:, :100] -> todas las columnas, primeras 100 filas
39
+ obj[:] -> todo
40
+ obj[["col1"], :50] -> columna col1, primeras 50 filas
41
+ """
42
+ if isinstance(key, tuple): ##reviso si es una tupla
43
+ ##se supone que key es una tupla de la forma (cols, rows)
44
+ if len(key) != 2:
45
+ raise ValueError("La clave debe ser una tupla de la forma (cols, rows)")
46
+ cols, rows = key
47
+
48
+ # Columnas
49
+ if isinstance(cols, list) or isinstance(cols, str):
50
+ selected_cols = cols
51
+ elif cols == slice(None): # equivalente a ":"
52
+ selected_cols = self.data.columns
53
+ else:
54
+ raise TypeError(f"Tipo de indexado de columnas no soportado: {type(cols)}")
55
+
56
+ # Filas
57
+ if isinstance(rows, int) or isinstance(rows, slice):
58
+ #retornamos de la forma (n_operaciones, n_columnas)
59
+ return self.data.loc[rows, selected_cols].values
60
+ else:
61
+ raise TypeError(f"Tipo de indexado de filas no soportado: {type(rows)}")
62
+
63
+ elif isinstance(key, slice):
64
+ # Caso para todas las filas y columnas
65
+ # Retornamos de la forma (n_operaciones, n_columnas)
66
+ return self.data.iloc[key].values
67
+
68
+ else:
69
+ raise TypeError("La indexación debe ser una tupla (cols, rows) o un slice ':'")
765
70
 
766
71
  if __name__ == "__main__":
767
- tlmsde = TLMSensorDataProcessor()
768
-
769
- sample = np.array(["1010001000010000110000001011000000000000000000001111011010001001",
770
- "1010001000010000110000001011000000000000000000001111011010001001"])
72
+ import pandas as pd
73
+ import json
74
+ from sarapy.preprocessing import TransformInputData
771
75
 
772
- tlmsde.getTIMEAC(sample[0])
76
+ historical_data_path = "examples/2025-06-21/UPM000N/historical-data.json"
77
+ with open(historical_data_path, 'r') as file:
78
+ historical_data = json.load(file)
773
79
 
774
- # tlmsde.fit(sample)
775
- data_transformed = tlmsde.fit_transform(sample)
776
- print(tlmsde.dataPositions)
777
- print(tlmsde.dataPositions["TIMEAC"])
778
- print(data_transformed)
779
- print(data_transformed.shape)
80
+ inputData_transformer = TransformInputData.TransformInputData()
81
+ data = inputData_transformer.transform(historical_data)
780
82
 
781
- print(tlmsde.SIV)
83
+ tlm_processor = TLMSensorDataProcessor(data=data)
84
+ print(tlm_processor.data.head())
85
+ tlm_processor[:, :10].shape
86
+
87
+ tlm_processor[["id_db_dw", "id_db_h"], :5]#.shape
88
+ tlm_processor.keys
89
+ tlm_processor["longitud",:]
90
+