sarapy 0.3.10__tar.gz → 0.4.1__tar.gz
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.
- sarapy-0.4.1/PKG-INFO +31 -0
- sarapy-0.4.1/README.md +15 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/pyproject.toml +3 -2
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy/dataProcessing/GeoProcessor.py +22 -16
- sarapy-0.4.1/sarapy/dataProcessing/OpsProcessor.py +288 -0
- sarapy-0.3.10/sarapy/dataProcessing/TLMSensorDataExtractor.py → sarapy-0.4.1/sarapy/dataProcessing/TLMSensorDataProcessor.py +2 -2
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy/dataProcessing/TimeSeriesProcessor.py +23 -18
- sarapy-0.4.1/sarapy/dataProcessing/__init__.py +4 -0
- sarapy-0.4.1/sarapy/mlProcessors/PlantinClassifier.py +58 -0
- {sarapy-0.3.10/sarapy/dataProcessing → sarapy-0.4.1/sarapy/mlProcessors}/PlantinFMCreator.py +30 -37
- sarapy-0.4.1/sarapy/mlProcessors/__init__.py +0 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy/preprocessing/DistancesImputer.py +5 -4
- sarapy-0.4.1/sarapy/preprocessing/FertilizerImputer.py +34 -0
- sarapy-0.4.1/sarapy/preprocessing/__init__.py +2 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy/version.py +1 -1
- sarapy-0.4.1/sarapy.egg-info/PKG-INFO +31 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy.egg-info/SOURCES.txt +6 -2
- {sarapy-0.3.10 → sarapy-0.4.1}/setup.py +1 -1
- sarapy-0.3.10/PKG-INFO +0 -124
- sarapy-0.3.10/README.md +0 -102
- sarapy-0.3.10/sarapy/dataProcessing/__init__.py +0 -4
- sarapy-0.3.10/sarapy/preprocessing/__init__.py +0 -1
- sarapy-0.3.10/sarapy.egg-info/PKG-INFO +0 -124
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy/__init__.py +0 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy.egg-info/dependency_links.txt +0 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy.egg-info/requires.txt +0 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/sarapy.egg-info/top_level.txt +0 -0
- {sarapy-0.3.10 → sarapy-0.4.1}/setup.cfg +0 -0
sarapy-0.4.1/PKG-INFO
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: sarapy
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Home-page: https://github.com/lucasbaldezzari/sarapy
|
|
5
|
+
Author: Lucas Baldezzari
|
|
6
|
+
Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
7
|
+
Maintainer-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
8
|
+
License: Your license text goes here
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: numpy
|
|
11
|
+
Requires-Dist: matplotlib
|
|
12
|
+
Requires-Dist: pandas
|
|
13
|
+
Requires-Dist: scipy
|
|
14
|
+
Requires-Dist: scikit-learn
|
|
15
|
+
Requires-Dist: geopy
|
|
16
|
+
|
|
17
|
+
# SARAPY
|
|
18
|
+
|
|
19
|
+
Library for processing SARAPICO project metadata of _AMG_.
|
|
20
|
+
|
|
21
|
+
#### Version 0.4.1 (working)
|
|
22
|
+
|
|
23
|
+
- Se corrigen problemas de importaciones circulares.
|
|
24
|
+
|
|
25
|
+
#### Version 0.4.0
|
|
26
|
+
|
|
27
|
+
- Se implementa _OpsProcessor_.
|
|
28
|
+
- Se implementa _PlanntinClassifier_.
|
|
29
|
+
- Se corrige salida de _transform()_ y _fit_transform()_ de GeoProcessor.
|
|
30
|
+
- Se mueve PlantinFMCreator a mlProcessors
|
|
31
|
+
- Se cambia nombre de TLMSensorDataCreator a TLMSensorDataProcessor
|
sarapy-0.4.1/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# SARAPY
|
|
2
|
+
|
|
3
|
+
Library for processing SARAPICO project metadata of _AMG_.
|
|
4
|
+
|
|
5
|
+
#### Version 0.4.1 (working)
|
|
6
|
+
|
|
7
|
+
- Se corrigen problemas de importaciones circulares.
|
|
8
|
+
|
|
9
|
+
#### Version 0.4.0
|
|
10
|
+
|
|
11
|
+
- Se implementa _OpsProcessor_.
|
|
12
|
+
- Se implementa _PlanntinClassifier_.
|
|
13
|
+
- Se corrige salida de _transform()_ y _fit_transform()_ de GeoProcessor.
|
|
14
|
+
- Se mueve PlantinFMCreator a mlProcessors
|
|
15
|
+
- Se cambia nombre de TLMSensorDataCreator a TLMSensorDataProcessor
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sarapy"
|
|
3
3
|
|
|
4
|
-
version = "0.
|
|
4
|
+
version = "0.4.1"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Lucas Baldezzari", email = "lmbaldezzari@gmail.com"},]
|
|
7
7
|
maintainers = [
|
|
@@ -17,4 +17,5 @@ dependencies = [
|
|
|
17
17
|
"geopy",
|
|
18
18
|
]
|
|
19
19
|
|
|
20
|
-
readme = "README.md"
|
|
20
|
+
readme = "README.md"
|
|
21
|
+
license = {text = "Your license text goes here"}
|
|
@@ -15,15 +15,16 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
|
|
|
15
15
|
self.is_fitted = False
|
|
16
16
|
|
|
17
17
|
@staticmethod
|
|
18
|
-
def getDistance(point1:
|
|
19
|
-
"""Calcula la distancia elipsoidal (en metros) entre los puntos p1 y p2 donde cada punto
|
|
18
|
+
def getDistance(point1: float, point2: float) ->float:
|
|
19
|
+
"""Calcula la distancia elipsoidal (en metros) entre los puntos p1 y p2 donde cada punto
|
|
20
|
+
está representado como un array con un valor de latitud y otro de longitud.
|
|
20
21
|
|
|
21
22
|
Parametros
|
|
22
|
-
point1 (
|
|
23
|
-
point2 (
|
|
23
|
+
point1 (float): array con los valores de latitud y longitud del punto 1
|
|
24
|
+
point2 (float): array con los valores de latitud y longitud del punto 2
|
|
24
25
|
|
|
25
26
|
Returns:
|
|
26
|
-
float
|
|
27
|
+
float con las distancias entre los dos puntos
|
|
27
28
|
"""
|
|
28
29
|
|
|
29
30
|
##aplicamos la función geodesic
|
|
@@ -38,11 +39,12 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
|
|
|
38
39
|
assert isinstance(X, np.ndarray), "X debe ser un np.array"
|
|
39
40
|
##asserteamos que X tenga dos columnas
|
|
40
41
|
assert X.ndim == 2, "X debe ser de la forma (n, 2)"
|
|
41
|
-
##asserteamos que X no tenga valores nulos
|
|
42
|
-
assert not np.isnan(X).any(), "X no debe tener valores nulos"
|
|
42
|
+
# ##asserteamos que X no tenga valores nulos
|
|
43
|
+
# assert not np.isnan(X).any(), "X no debe tener valores nulos"
|
|
43
44
|
##chequeamos que X tenga una sola fila, si es así, enviamos un warning
|
|
44
45
|
if X.shape[0] == 1:
|
|
45
|
-
warnings.warn("X tiene una sola fila, se
|
|
46
|
+
warnings.warn("En GeoProcesor.fit(): X tiene una sola fila, por lo tanto no se puede computar la distancia entre los puntos.\
|
|
47
|
+
\n Se devolverá un array con un solo valor de 0.0.")
|
|
46
48
|
|
|
47
49
|
self._points = X
|
|
48
50
|
self.is_fitted = True
|
|
@@ -60,9 +62,9 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
|
|
|
60
62
|
|
|
61
63
|
if self._points.shape[0] >= 2:
|
|
62
64
|
##calculamos la distancia entre los puntos de latitud y longitud dentro de X
|
|
63
|
-
self._distances = np.array([self.getDistance(point1, point2) for point1, point2 in zip(self.points,self.points
|
|
64
|
-
#agrego un cero al
|
|
65
|
-
self._distances = np.
|
|
65
|
+
self._distances = np.array([self.getDistance(point1, point2) for point1, point2 in zip(self.points[1:],self.points)]).round(2)
|
|
66
|
+
#agrego un cero al inicio de la lista de distancias ya que el primer punto no tiene una operación previo con la cual comparar
|
|
67
|
+
self._distances = np.insert(self._distances, 0, 0)
|
|
66
68
|
|
|
67
69
|
elif self._points.shape[0] == 1:
|
|
68
70
|
self._distances = np.array([0])
|
|
@@ -97,13 +99,17 @@ class GeoProcessor(BaseEstimator, TransformerMixin):
|
|
|
97
99
|
|
|
98
100
|
|
|
99
101
|
if __name__ == "__main__":
|
|
102
|
+
|
|
103
|
+
import pandas as pd
|
|
104
|
+
import numpy as np
|
|
105
|
+
import os
|
|
106
|
+
path = os.path.join(os.getcwd(), "examples\\volcado_17112023_NODE_processed.csv")
|
|
107
|
+
raw_data = pd.read_csv(path, sep=";", ).to_numpy()
|
|
108
|
+
|
|
100
109
|
ga = GeoProcessor()
|
|
101
110
|
|
|
102
|
-
puntos =
|
|
103
|
-
|
|
104
|
-
[-32.329880, -57.229069],
|
|
105
|
-
[-32.329865, -57.229069]])
|
|
106
|
-
|
|
111
|
+
puntos = raw_data[50:60, 4:6]
|
|
112
|
+
|
|
107
113
|
ga.fit(puntos)
|
|
108
114
|
print(ga.transform(puntos))
|
|
109
115
|
print(ga.fit_transform(puntos))
|
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
|
|
2
|
+
import warnings
|
|
3
|
+
import numpy as np
|
|
4
|
+
# from sarapy.mlProcessors import PlantinFMCreator
|
|
5
|
+
from sarapy.mlProcessors import PlantinClassifier
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OpsProcessor():
|
|
9
|
+
"""Clase para procesar las operaciones de los operarios. La información se toma de la base de datos
|
|
10
|
+
hostórica y se procesa para obtener un array con las operaciones clasificadas para cada operario.
|
|
11
|
+
|
|
12
|
+
La clase recibe una muestra desde la base de datos histórica y la procesa para obtener las
|
|
13
|
+
operaciones clasificadas para cada operario. Se clasifican las operaciones desde el punto de vista
|
|
14
|
+
del plantín y del fertilizante. La clasificación del tipo de operación respecto de plantín se hace
|
|
15
|
+
con el pipeline para plantín, idem para el fertilizante.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
def __init__(self, distanciaMedia = 1.8, umbral_precision = 0.3, dist_mismo_lugar = 0.0,
|
|
19
|
+
max_dist = 100, umbral_ratio_dCdP = 0.5, deltaO_medio = 4,
|
|
20
|
+
keepDimsPFMC = False, columnToImputePFMC = 0):
|
|
21
|
+
"""Constructor de la clase OpsProcessor.
|
|
22
|
+
|
|
23
|
+
Args:
|
|
24
|
+
- distanciaMedia: Distancia media entre operaciones.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
# self._plantinFMCreator = PlantinFMCreator(distanciaMedia = distanciaMedia, umbral_precision = umbral_precision,
|
|
28
|
+
# dist_mismo_lugar = dist_mismo_lugar, max_dist = max_dist,
|
|
29
|
+
# umbral_ratio_dCdP = umbral_ratio_dCdP, deltaO_medio = deltaO_medio)
|
|
30
|
+
|
|
31
|
+
self._plantin_classifier = PlantinClassifier.PlantinClassifier()
|
|
32
|
+
# self._fertilizerFMCreator = FertilizerFMCreator() ## PARA IMPLEMENTAR
|
|
33
|
+
|
|
34
|
+
self._operationsDict = {} ##diccionario de operarios con sus operaciones
|
|
35
|
+
self._classifiedOperations = np.array([]) ##array con las operaciones clasificadas
|
|
36
|
+
self._last_row_db = 0 ##indicador de la última fila de los datos extraidos de la base de datos histórica
|
|
37
|
+
|
|
38
|
+
def processOperations(self, newSample):
|
|
39
|
+
"""Método para procesar las operaciones de los operarios.
|
|
40
|
+
|
|
41
|
+
Se toma una nueva muestra y se procesa la información para clasificar las operaciones considerando el
|
|
42
|
+
plantín y por otro lado el fertilizante.
|
|
43
|
+
Se retorna un array con las clasificaciones concatenadas, manteniendo el orden de las operaciones por operario.
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
- newSample: lista con los datos (numpy.array de strings) de una muestra de operaciones.
|
|
47
|
+
La forma de cada dato dentro de la lista newSample es (n,6). Las columnas de newSample son,
|
|
48
|
+
|
|
49
|
+
- 0: op_number
|
|
50
|
+
- 1: id_oprr
|
|
51
|
+
- 2: tlm_spbb
|
|
52
|
+
- 3: date_oprc
|
|
53
|
+
- 4: lat
|
|
54
|
+
- 5: lon
|
|
55
|
+
- 6: precision
|
|
56
|
+
"""
|
|
57
|
+
|
|
58
|
+
##chqueo que newSample no esté vacío
|
|
59
|
+
if len(newSample) != 0:
|
|
60
|
+
#Si tenemos nuevas operaciones, actualizamos el diccionario de operaciones
|
|
61
|
+
self.updateOperationsDict(newSample) #actualizamos diccionario interno de la clase
|
|
62
|
+
plantinClassifications = self.classifyForPlantin() #clasificamos las operaciones para plantín
|
|
63
|
+
# ops_numbers = newSample[:,0]
|
|
64
|
+
ops_numbers = self.getActualOperationsNumbers() #obtenemos los números de operaciones desde el diccionario de operaciones
|
|
65
|
+
return plantinClassifications.round(2), ops_numbers
|
|
66
|
+
|
|
67
|
+
else:
|
|
68
|
+
self.resetAllNewSamplesValues()
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
def updateOperationsDict(self, newSample):
|
|
72
|
+
"""Actualiza el diccionario de operaciones.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
- newSample: lista con los datos (numpy.array de strings) de las operaciones.
|
|
76
|
+
La forma de cada dato dentro de la lista newSample es (n,6). Las columnas de newSample son,
|
|
77
|
+
|
|
78
|
+
- 0: op_number
|
|
79
|
+
- 1: id_oprr
|
|
80
|
+
- 2: tlm_spbb
|
|
81
|
+
- 3: date_oprc
|
|
82
|
+
- 4: lat
|
|
83
|
+
- 5: lon
|
|
84
|
+
- 6: precision
|
|
85
|
+
|
|
86
|
+
Returns:
|
|
87
|
+
- None
|
|
88
|
+
NOTA: PENSAR SI SE DEVUELVE ALGO COMO UN TRUE O FALSE PARA SABER SI SE ACTUALIZÓ O NO EL DICCIONARIO
|
|
89
|
+
DE MANERA CORRECTA O HUBO ALGÚN PROBLEMA Y ASÍ VER QUÉ HACER EN EL MAIN
|
|
90
|
+
"""
|
|
91
|
+
|
|
92
|
+
id_oprrs_w_newOperations = np.unique(newSample[:,1]) ##identificadores de operarios con nuevas operaciones en la muestra
|
|
93
|
+
|
|
94
|
+
##chqueo si estos id_oprrs ya están en el diccionario, sino los agrego
|
|
95
|
+
for id_oprr in id_oprrs_w_newOperations:
|
|
96
|
+
if id_oprr not in self._operationsDict:
|
|
97
|
+
#El diccionario contiene la siguiente información:
|
|
98
|
+
#sample_ops: np.array con las columnas de tlm_spbb, date_oprc, lat, lon, precision
|
|
99
|
+
#last_oprc: np.array de la última operación con las columnas de tlm_spbb, date_oprc, lat, lon, precision
|
|
100
|
+
#first_day_op_classified: booleano para saber si es la primera operación del día fue clasificada
|
|
101
|
+
self._operationsDict[id_oprr] = {"sample_ops": None,
|
|
102
|
+
"last_oprc": None,
|
|
103
|
+
"first_day_op_classified": False,
|
|
104
|
+
"new_sample": False,
|
|
105
|
+
"ops_numbers": None} #inicio del diccionario anidado para el nuevo operario
|
|
106
|
+
|
|
107
|
+
##actualizo el diccionario con las operaciones nuevas para aquellos operarios que correspondan
|
|
108
|
+
for id_oprr in id_oprrs_w_newOperations:
|
|
109
|
+
sample_ops = newSample[newSample[:,1] == id_oprr][:,2:] #me quedo con las columnas de tlm_spbb, date_oprc, lat, lon, precision
|
|
110
|
+
ops_numbers = newSample[newSample[:,1] == id_oprr][:,0]
|
|
111
|
+
##actualizo el diccionario
|
|
112
|
+
self._operationsDict[id_oprr]["sample_ops"] = sample_ops
|
|
113
|
+
self._operationsDict[id_oprr]["ops_numbers"] = ops_numbers
|
|
114
|
+
##chequeo si tenemos última operación, si es así, asignamos dicha operación en la primera fila de sample_ops
|
|
115
|
+
last_op = self._operationsDict[id_oprr]["last_oprc"]
|
|
116
|
+
###si last_op es not None y last_op no está vacía, entonces concatenamos last_op con sample_ops
|
|
117
|
+
if last_op is not None and last_op.size != 0:
|
|
118
|
+
self._operationsDict[id_oprr]["sample_ops"] = np.vstack((last_op, sample_ops))
|
|
119
|
+
|
|
120
|
+
self.updateNewSamplesValues(id_oprrs_w_newOperations) #actualizo el estado de 'new_sample' en el diccionario de operaciones
|
|
121
|
+
self.updateLastOperations(id_oprrs_w_newOperations) #actualizo la última operación de una muestra de operaciones en el diccionario de operaciones
|
|
122
|
+
|
|
123
|
+
def classifyForPlantin(self):
|
|
124
|
+
"""Método para clasificar las operaciones para plantín.
|
|
125
|
+
Se recorre el diccionario de operaciones y se clasifican las operaciones para plantín.
|
|
126
|
+
|
|
127
|
+
Returns:
|
|
128
|
+
- plantinClassifications: np.array con las clasificaciones de las operaciones para plantín.
|
|
129
|
+
"""
|
|
130
|
+
|
|
131
|
+
##creamos/reiniciamos el array con las clasificaciones de las operaciones para plantín
|
|
132
|
+
plantinClassifications = None
|
|
133
|
+
|
|
134
|
+
##me quedo con los id_oprrs que tengan _operationsDict[id_oprr]["new_sample"] iguales a True
|
|
135
|
+
ops_with_new_sample = [id_oprr for id_oprr in self.operationsDict.keys() if self.operationsDict[id_oprr]["new_sample"]]
|
|
136
|
+
|
|
137
|
+
for id_oprr in ops_with_new_sample:#self.operationsDict.keys():
|
|
138
|
+
##clasificamos las operaciones para plantín
|
|
139
|
+
operations = self.operationsDict[id_oprr]["sample_ops"]
|
|
140
|
+
classified_ops = self._plantin_classifier.classify(operations)
|
|
141
|
+
|
|
142
|
+
##chequeo si first_day_op_classified es True, si es así, no se considera la primera fila de las classified_ops
|
|
143
|
+
if self.operationsDict[id_oprr]["first_day_op_classified"]:
|
|
144
|
+
classified_ops = classified_ops[1:]
|
|
145
|
+
|
|
146
|
+
plantinClassifications = np.vstack((plantinClassifications, classified_ops)) if plantinClassifications is not None else classified_ops
|
|
147
|
+
|
|
148
|
+
self.operationsDict[id_oprr]["first_day_op_classified"] = True
|
|
149
|
+
|
|
150
|
+
return plantinClassifications
|
|
151
|
+
|
|
152
|
+
def updateLastOperations(self, id_oprrs_w_newOperations):
|
|
153
|
+
"""Método para actualizar la última operación de una muestra de operaciones en el diccionario de operaciones
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
- newSample: lista con los datos (numpy.array de strings) de las operaciones.
|
|
157
|
+
La forma de cada dato dentro de la lista newSample es (n,6). Las columnas de newSample son,
|
|
158
|
+
|
|
159
|
+
- 0: op_number
|
|
160
|
+
- 1: id_oprr
|
|
161
|
+
- 2: tlm_spbb
|
|
162
|
+
- 3: date_oprc
|
|
163
|
+
- 4: lat
|
|
164
|
+
- 5: lon
|
|
165
|
+
- 6: precision
|
|
166
|
+
"""
|
|
167
|
+
|
|
168
|
+
for id_oprr in id_oprrs_w_newOperations:
|
|
169
|
+
self._operationsDict[id_oprr]["last_oprc"] = self._operationsDict[id_oprr]["sample_ops"][-1]
|
|
170
|
+
|
|
171
|
+
def updateOperationsNumbers(self, new_ops_numbers):
|
|
172
|
+
"""Método para actualizar los números de operaciones en el diccionario de operaciones.
|
|
173
|
+
|
|
174
|
+
Args:
|
|
175
|
+
- new_ops_numbers: array de la forma (n,2) con los números de operaciones en la primer columna y los id_oprrs en la segunda.
|
|
176
|
+
"""
|
|
177
|
+
id_oprrs_w_newOperations = np.unique(new_ops_numbers[:,1]) ##identificadores de operarios con nuevas operaciones en la muestra
|
|
178
|
+
opsNumbersList = np.array([]) ##array con los números de operaciones
|
|
179
|
+
|
|
180
|
+
for id_oprr in id_oprrs_w_newOperations:
|
|
181
|
+
opsNumbersList = np.append(opsNumbersList, self.operationsDict[id_oprr]["ops_numbers"].flatten())
|
|
182
|
+
|
|
183
|
+
return opsNumbersList
|
|
184
|
+
|
|
185
|
+
def updateNewSamplesValues(self, id_oprrs_w_newOperations):
|
|
186
|
+
"""Método para actualizar el estado de 'new_sample' del diccionario de operaciones.
|
|
187
|
+
|
|
188
|
+
Args:
|
|
189
|
+
- id_oprrs_w_newOperations: lista con los id_oprrs que tienen nuevas operaciones.
|
|
190
|
+
"""
|
|
191
|
+
|
|
192
|
+
##recorro el diccionario de operaciones y actualizo el estado de 'new_sample' a
|
|
193
|
+
##True para los id_oprrs que tienen nuevas operaciones y a False para los que no tienen nuevas operaciones
|
|
194
|
+
for id_oprr in self.operationsDict.keys():
|
|
195
|
+
if id_oprr in id_oprrs_w_newOperations:
|
|
196
|
+
self._operationsDict[id_oprr]["new_sample"] = True
|
|
197
|
+
else:
|
|
198
|
+
self._operationsDict[id_oprr]["new_sample"] = False
|
|
199
|
+
|
|
200
|
+
def resetAllNewSamplesValues(self):
|
|
201
|
+
"""Método para resetar todos los valores de new_sample en el diccionario de operaciones.
|
|
202
|
+
"""
|
|
203
|
+
|
|
204
|
+
for id_oprr in self.operationsDict.keys():
|
|
205
|
+
self._operationsDict[id_oprr]["new_sample"] = False
|
|
206
|
+
|
|
207
|
+
def getActualOperationsNumbers(self):
|
|
208
|
+
"""Método para obtener los números de operaciones desde el diccionario de operaciones para aquellos operarios que
|
|
209
|
+
tienen nuevas operaciones en la muestra."""
|
|
210
|
+
|
|
211
|
+
opsNumbersList = np.array([])
|
|
212
|
+
for id_oprr in self.operationsDict.keys():
|
|
213
|
+
if self.operationsDict[id_oprr]["new_sample"]:
|
|
214
|
+
opsNumbersList = np.append(opsNumbersList, self.operationsDict[id_oprr]["ops_numbers"].flatten())
|
|
215
|
+
|
|
216
|
+
return opsNumbersList
|
|
217
|
+
|
|
218
|
+
def cleanSamplesOperations(self):
|
|
219
|
+
"""Método para limpiar las operaciones de un operario en el diccionario de operaciones.
|
|
220
|
+
|
|
221
|
+
Args:
|
|
222
|
+
- newSample: lista con los datos (numpy.array de strings) de las operaciones.
|
|
223
|
+
La forma de cada dato dentro de la lista newSample es (n,6). Las columnas de newSample son,
|
|
224
|
+
|
|
225
|
+
- 0: op_number
|
|
226
|
+
- 1: id_oprr
|
|
227
|
+
- 2: tlm_spbb
|
|
228
|
+
- 3: date_oprc
|
|
229
|
+
- 4: lat
|
|
230
|
+
- 5: lon
|
|
231
|
+
- 6: precision
|
|
232
|
+
"""
|
|
233
|
+
|
|
234
|
+
for id_oprr in self.operationsDict.keys():
|
|
235
|
+
self._operationsDict[id_oprr]["sample_ops"] = None
|
|
236
|
+
|
|
237
|
+
def updateFirstDayOp(self):
|
|
238
|
+
"""Método para actualizar el indicador de si es la primera operación del día para cada operario en el diccionario de operaciones.
|
|
239
|
+
"""
|
|
240
|
+
|
|
241
|
+
for id_oprr in self.operationsDict.keys():
|
|
242
|
+
self._operationsDict[id_oprr]["first_day_op_classified"] = False
|
|
243
|
+
|
|
244
|
+
@property
|
|
245
|
+
def operationsDict(self):
|
|
246
|
+
return self._operationsDict
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
if __name__ == "__main__":
|
|
250
|
+
#cargo archivo examples\volcado_17112023_NODE_processed.csv
|
|
251
|
+
import pandas as pd
|
|
252
|
+
import numpy as np
|
|
253
|
+
import os
|
|
254
|
+
path = os.path.join(os.getcwd(), "examples\\volcado_17112023_NODE_processed.csv")
|
|
255
|
+
data_df = pd.read_csv(path, sep=";", )
|
|
256
|
+
raw_data = data_df.to_numpy().astype(str)
|
|
257
|
+
|
|
258
|
+
##seed de numpy en 42
|
|
259
|
+
np.random.seed(42)
|
|
260
|
+
|
|
261
|
+
size = data_df[data_df["id_oprr"] == 1].shape[0]
|
|
262
|
+
data_df.loc[data_df["id_oprr"] == 1, "id_dataBase"] = range(1,size+1)
|
|
263
|
+
size = data_df[data_df["id_oprr"] == 2].shape[0]
|
|
264
|
+
data_df.loc[data_df["id_oprr"] == 2, "id_dataBase"] = range(1,size+1)
|
|
265
|
+
##tomo raw_data y obtengo muestras de entre 7 a 15 filas una detrás de la otra. El valor de entre 7 y 15 es aleatorio.
|
|
266
|
+
samples = []
|
|
267
|
+
index = 0
|
|
268
|
+
while True:
|
|
269
|
+
random_value = np.random.randint(8, 15)
|
|
270
|
+
if index + random_value < len(raw_data):
|
|
271
|
+
samples.append(raw_data[index:index+random_value])
|
|
272
|
+
else:
|
|
273
|
+
break
|
|
274
|
+
index += random_value
|
|
275
|
+
|
|
276
|
+
# from sarapy.dataProcessing import OpsProcessor
|
|
277
|
+
op = OpsProcessor()
|
|
278
|
+
|
|
279
|
+
op.operationsDict
|
|
280
|
+
|
|
281
|
+
##procesamos una muestra
|
|
282
|
+
print(op.processOperations(samples[0]))
|
|
283
|
+
print(op.processOperations(np.array([])))
|
|
284
|
+
print(op.processOperations(samples[1]))
|
|
285
|
+
# ##recorro los samsamples[0]ples y los proceso
|
|
286
|
+
# for sample in print(op.operationsDict[":
|
|
287
|
+
# op.processOperations(sample)
|
|
288
|
+
data_df.loc[data_df["id_oprr"] == 1].head(15)
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from sklearn.base import BaseEstimator, TransformerMixin
|
|
5
5
|
|
|
6
|
-
class
|
|
6
|
+
class TLMSensorDataProcessor(BaseEstimator, TransformerMixin):
|
|
7
7
|
"""- Autor: BALDEZZARI Lucas
|
|
8
8
|
|
|
9
9
|
Metadata utilizada: Versión 9
|
|
@@ -764,7 +764,7 @@ class TLMSensorDataExtractor(BaseEstimator, TransformerMixin):
|
|
|
764
764
|
return self._dataPositions
|
|
765
765
|
|
|
766
766
|
if __name__ == "__main__":
|
|
767
|
-
tlmsde =
|
|
767
|
+
tlmsde = TLMSensorDataProcessor()
|
|
768
768
|
|
|
769
769
|
sample = np.array(["1010001000010000110000001011000000000000000000001111011010001001",
|
|
770
770
|
"1010001000010000110000001011000000000000000000001111011010001001"])
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from sklearn.base import BaseEstimator, TransformerMixin
|
|
5
5
|
import warnings
|
|
6
|
-
from datetime import datetime
|
|
7
6
|
|
|
8
7
|
class TimeSeriesProcessor(BaseEstimator, TransformerMixin):
|
|
9
8
|
""""
|
|
@@ -22,7 +21,11 @@ class TimeSeriesProcessor(BaseEstimator, TransformerMixin):
|
|
|
22
21
|
"deltaP": 2, "ratio_dCdP": 3}
|
|
23
22
|
|
|
24
23
|
def fit(self, X: np.array, y=None)-> np.array:
|
|
25
|
-
"""Fittea el objeto
|
|
24
|
+
"""Fittea el objeto
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
- X es un array de strings de forma (n, 2) donde la primera columna es el tiempo y la segunda columna es el tiempo de pico abierto (en segundos).
|
|
28
|
+
"""
|
|
26
29
|
|
|
27
30
|
##asserteamos que X sea un np.array
|
|
28
31
|
assert isinstance(X, np.ndarray), "X debe ser un np.array"
|
|
@@ -54,7 +57,10 @@ class TimeSeriesProcessor(BaseEstimator, TransformerMixin):
|
|
|
54
57
|
self.is_fitted = True
|
|
55
58
|
|
|
56
59
|
def transform(self, X: np.array):
|
|
57
|
-
"""Genera un array con los tiempos de operación, caminata
|
|
60
|
+
"""Genera un array con los tiempos de operación, caminata, pico abierto y ratio_dCdP.
|
|
61
|
+
Args:
|
|
62
|
+
- X es un array de strings de forma (n, 2) donde la primera columna es el tiempo y la segunda columna es el tiempo de pico abierto (en segundos).
|
|
63
|
+
"""
|
|
58
64
|
|
|
59
65
|
if not self.is_fitted:
|
|
60
66
|
raise RuntimeError("El modelo no ha sido fitteado.")
|
|
@@ -100,27 +106,26 @@ class TimeSeriesProcessor(BaseEstimator, TransformerMixin):
|
|
|
100
106
|
return self._dataPositions
|
|
101
107
|
|
|
102
108
|
if __name__ == "__main__":
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
from sarapy.dataProcessing import TLMSensorDataExtractor
|
|
115
|
-
tlm_extractor = TLMSensorDataExtractor()
|
|
109
|
+
|
|
110
|
+
import pandas as pd
|
|
111
|
+
import numpy as np
|
|
112
|
+
import os
|
|
113
|
+
path = os.path.join(os.getcwd(), "examples\\volcado_17112023_NODE_processed.csv")
|
|
114
|
+
raw_data = pd.read_csv(path, sep=";", ).to_numpy()
|
|
115
|
+
timestamps = raw_data[50:60,3].astype(float)
|
|
116
|
+
tlm_data = raw_data[50:60,2]
|
|
117
|
+
|
|
118
|
+
from sarapy.dataProcessing import TLMSensorDataProcessor
|
|
119
|
+
tlm_extractor = TLMSensorDataProcessor.TLMSensorDataProcessor()
|
|
116
120
|
tlm_extractor.fit(tlm_data)
|
|
117
121
|
|
|
118
|
-
deltaPicos = tlm_extractor.TIMEAC
|
|
122
|
+
deltaPicos = tlm_extractor.TIMEAC.astype(float)
|
|
119
123
|
|
|
120
124
|
tmsp = TimeSeriesProcessor()
|
|
121
125
|
|
|
122
126
|
#creamos un array con los timestamps y los tiempos de pico abierto de la forma (n, 2)
|
|
123
127
|
X = np.hstack((timestamps.reshape(-1, 1), deltaPicos.reshape(-1, 1)))
|
|
128
|
+
|
|
124
129
|
tmsp.fit(X)
|
|
125
130
|
tmsp.transform(X)
|
|
126
131
|
tmsp.fit_transform(X)
|
|
@@ -131,7 +136,7 @@ if __name__ == "__main__":
|
|
|
131
136
|
timestamps2 = np.array([1697724423])
|
|
132
137
|
|
|
133
138
|
tmsp2 = TimeSeriesProcessor()
|
|
134
|
-
tlm_extractor2 =
|
|
139
|
+
tlm_extractor2 = TLMSensorDataProcessor.TLMSensorDataProcessor()
|
|
135
140
|
|
|
136
141
|
tlm_extractor2.fit(tlm_data2)
|
|
137
142
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
|
|
2
|
+
import numpy as np
|
|
3
|
+
from sklearn.base import BaseEstimator, TransformerMixin
|
|
4
|
+
from sklearn.pipeline import Pipeline
|
|
5
|
+
from sarapy.mlProcessors import PlantinFMCreator
|
|
6
|
+
|
|
7
|
+
class PlantinClassifier(BaseEstimator, TransformerMixin):
|
|
8
|
+
"""Clase para implementar el pipeline de procesamiento de datos para la clasificación del tipo de operación para plantines."""
|
|
9
|
+
|
|
10
|
+
def __init__(self):
|
|
11
|
+
"""Constructor de la clase PlantinClassifier."""
|
|
12
|
+
|
|
13
|
+
self._plantinFMCreator = PlantinFMCreator.PlantinFMCreator()
|
|
14
|
+
|
|
15
|
+
self._pipeline = Pipeline([
|
|
16
|
+
("FMCreator", self._plantinFMCreator),
|
|
17
|
+
])
|
|
18
|
+
|
|
19
|
+
def classify(self, newData):
|
|
20
|
+
"""Genera la clasificación de las operaciones para plantines.
|
|
21
|
+
|
|
22
|
+
newData: Es un array con los datos (strings) provenientes de la base de datos histórica. La forma de newData debe ser (n,4). Las columnas de newData deben ser,
|
|
23
|
+
- 0: tlm_spbb son los datos de telemetría.
|
|
24
|
+
- 1: date_oprc son los datos de fecha y hora de operación.
|
|
25
|
+
- 2: latitud de la operación
|
|
26
|
+
- 3: longitud de la operación
|
|
27
|
+
- 4: precision del GPS
|
|
28
|
+
"""
|
|
29
|
+
|
|
30
|
+
return self._pipeline.fit_transform(newData).round(2)
|
|
31
|
+
|
|
32
|
+
if __name__ == "__main__":
|
|
33
|
+
from sarapy.dataProcessing import OpsProcessor
|
|
34
|
+
|
|
35
|
+
#cargo archivo examples\volcado_17112023_NODE_processed.csv
|
|
36
|
+
import pandas as pd
|
|
37
|
+
import os
|
|
38
|
+
path = os.path.join(os.getcwd(), "examples\\volcado_17112023_NODE_processed.csv")
|
|
39
|
+
data_df = pd.read_csv(path, sep=";", )
|
|
40
|
+
raw_data = data_df.to_numpy().astype(str)
|
|
41
|
+
|
|
42
|
+
##tomo raw_data y obtengo muestras de entre 7 a 15 filas una detrás de la otra. El valor de entre 7 y 15 es aleatorio.
|
|
43
|
+
sample = []
|
|
44
|
+
index = 0
|
|
45
|
+
while True:
|
|
46
|
+
random_value = np.random.randint(8, 15)
|
|
47
|
+
if index + random_value < len(raw_data):
|
|
48
|
+
sample.append(raw_data[index:index+random_value])
|
|
49
|
+
else:
|
|
50
|
+
break
|
|
51
|
+
index += random_value
|
|
52
|
+
|
|
53
|
+
op = OpsProcessor.OpsProcessor()
|
|
54
|
+
##actualizo el diccionario de operaciones
|
|
55
|
+
op.updateOperationsDict(sample[12])
|
|
56
|
+
op.operationsDict
|
|
57
|
+
plantin_classifier = PlantinClassifier()
|
|
58
|
+
plantin_classifier.classify(op.operationsDict["1"]["sample_ops"])
|
{sarapy-0.3.10/sarapy/dataProcessing → sarapy-0.4.1/sarapy/mlProcessors}/PlantinFMCreator.py
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
|
|
2
2
|
|
|
3
|
+
import warnings
|
|
3
4
|
import numpy as np
|
|
4
5
|
from sklearn.base import BaseEstimator, TransformerMixin
|
|
5
|
-
import
|
|
6
|
-
from sarapy.dataProcessing import TLMSensorDataExtractor, TimeSeriesProcessor, GeoProcessor
|
|
6
|
+
from sarapy.dataProcessing import TLMSensorDataProcessor, TimeSeriesProcessor, GeoProcessor
|
|
7
7
|
from sarapy.preprocessing import DistancesImputer
|
|
8
8
|
|
|
9
9
|
class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
@@ -48,7 +48,7 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
48
48
|
"""Fittea el objeto
|
|
49
49
|
|
|
50
50
|
Params:
|
|
51
|
-
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,
|
|
51
|
+
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,5)Las columnas de X son,
|
|
52
52
|
- 0: tlm_spbb son los datos de telemetría.
|
|
53
53
|
- 1: date_oprc son los datos de fecha y hora de operación.
|
|
54
54
|
- 2: latitud de la operación
|
|
@@ -65,9 +65,9 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
65
65
|
precitions = X[:,4].astype(float) #precision del GPS
|
|
66
66
|
|
|
67
67
|
##instanciamos los objetos
|
|
68
|
-
tlmDataExtractor =
|
|
69
|
-
timeProcessor = TimeSeriesProcessor()
|
|
70
|
-
geoprocessor = GeoProcessor()
|
|
68
|
+
tlmDataExtractor = TLMSensorDataProcessor.TLMSensorDataProcessor()
|
|
69
|
+
timeProcessor = TimeSeriesProcessor.TimeSeriesProcessor()
|
|
70
|
+
geoprocessor = GeoProcessor.GeoProcessor()
|
|
71
71
|
|
|
72
72
|
##***** OBTENEMOS LOS DATOS PARA FITEAR LOS OBJETOS Y ASÍ PROCESAR LA FM *****
|
|
73
73
|
##obtengo las posiciones de los datos de tlmDataExtractor y timeProcessor
|
|
@@ -88,11 +88,12 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
88
88
|
|
|
89
89
|
####***** IMPUTAMOS DATOS SI ES LO REQUERIDO*****
|
|
90
90
|
if self.imputeDistances:
|
|
91
|
-
distanceimputer = DistancesImputer(distanciaMedia = self.distanciaMedia,
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
91
|
+
distanceimputer = DistancesImputer.DistancesImputer(distanciaMedia = self.distanciaMedia,
|
|
92
|
+
umbral_precision = self.umbral_precision,
|
|
93
|
+
dist_mismo_lugar = self.dist_mismo_lugar,
|
|
94
|
+
max_dist = self.max_dist,
|
|
95
|
+
umbral_ratio_dCdP = self.umbral_ratio_dCdP,
|
|
96
|
+
deltaO_medio = self.deltaO_medio, keepDims = False, columnToImpute = 0)
|
|
96
97
|
|
|
97
98
|
X_distance_imputation = np.hstack((self._distances.reshape(-1, 1),
|
|
98
99
|
precitions.reshape(-1, 1),
|
|
@@ -109,18 +110,19 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
109
110
|
"""Transforma los datos de X en la matriz de características.
|
|
110
111
|
|
|
111
112
|
Params:
|
|
112
|
-
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,
|
|
113
|
+
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,5)Las columnas de X son,
|
|
113
114
|
- 0: tlm_spbb son los datos de telemetría.
|
|
114
115
|
- 1: date_oprc son los datos de fecha y hora de operación.
|
|
115
116
|
- 2: latitud de la operación
|
|
116
117
|
- 3: longitud de la operación
|
|
118
|
+
- 4: precision del GPS
|
|
117
119
|
|
|
118
120
|
Returns:
|
|
119
121
|
- featureMatrix: Es un array con la matriz de características. La forma de featureMatrix es (n,5). Las columnas de featureMatrix son,
|
|
120
122
|
- 0: DST_PT: Distorsión de plantín
|
|
121
|
-
-
|
|
122
|
-
-
|
|
123
|
-
-
|
|
123
|
+
- 1: deltaO: delta operación
|
|
124
|
+
- 2: ratio_dCdP: Ratio entre el delta de caminata y delta de pico abierto
|
|
125
|
+
- 3: distances: Distancias entre operaciones
|
|
124
126
|
"""
|
|
125
127
|
|
|
126
128
|
if not self.is_fitted:
|
|
@@ -138,18 +140,19 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
138
140
|
"""Fittea y transforma los datos de X en la matriz de características.
|
|
139
141
|
|
|
140
142
|
Params:
|
|
141
|
-
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,
|
|
143
|
+
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,5)Las columnas de X son,
|
|
142
144
|
- 0: tlm_spbb son los datos de telemetría.
|
|
143
145
|
- 1: date_oprc son los datos de fecha y hora de operación.
|
|
144
146
|
- 2: latitud de la operación
|
|
145
147
|
- 3: longitud de la operación
|
|
146
|
-
|
|
148
|
+
- 4: precision del GPS
|
|
149
|
+
|
|
147
150
|
Returns:
|
|
148
151
|
- featureMatrix: Es un array con la matriz de características. La forma de featureMatrix es (n,5). Las columnas de featureMatrix son,
|
|
149
152
|
- 0: DST_PT: Distorsión de plantín
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
-
|
|
153
|
+
- 1: deltaO: delta operación
|
|
154
|
+
- 2: ratio_dCdP: Ratio entre el delta de caminata y delta de pico abierto
|
|
155
|
+
- 3: distances: Distancias entre operaciones
|
|
153
156
|
"""
|
|
154
157
|
self.fit(X)
|
|
155
158
|
return self.transform(X)
|
|
@@ -177,23 +180,13 @@ class PlantinFMCreator(BaseEstimator, TransformerMixin):
|
|
|
177
180
|
|
|
178
181
|
if __name__ == "__main__":
|
|
179
182
|
##genero objeto FMCreator
|
|
180
|
-
fmcreator = PlantinFMCreator(imputeDistances=
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
date_oprc = ["35235", "35240", "35244", "35248"]
|
|
189
|
-
lats = ["-32.331093", "-32.331116", "-32.331131", "-32.331146"]
|
|
190
|
-
lons = ["-57.229733", "-57.229733", "-57.229733", "-57.22974"]
|
|
191
|
-
precitions = ["1", "0.12", "0.1", "1"]
|
|
192
|
-
|
|
193
|
-
##generamos matriz de datos X
|
|
194
|
-
##generamos matriz de datos X de tal forma que cada columna tenga los datos de tlmsbp_sample, date_oprc, lats y lons
|
|
195
|
-
X = np.vstack((tlmsbp_sample, date_oprc, lats, lons,precitions)).T
|
|
196
|
-
X = X.astype(str)
|
|
183
|
+
fmcreator = PlantinFMCreator(imputeDistances=False)
|
|
184
|
+
import pandas as pd
|
|
185
|
+
import os
|
|
186
|
+
path = os.path.join(os.getcwd(), "examples\\volcado_17112023_NODE_processed.csv")
|
|
187
|
+
raw_data = pd.read_csv(path, sep=";", ).to_numpy()
|
|
188
|
+
|
|
189
|
+
X = raw_data[50:60,2:]
|
|
197
190
|
fmcreator.fit(X)
|
|
198
191
|
fm = fmcreator.fit_transform(X)
|
|
199
192
|
print(fm)
|
|
File without changes
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
4
|
from sklearn.base import BaseEstimator, TransformerMixin
|
|
5
|
-
from sarapy.dataProcessing import TLMSensorDataExtractor, TimeSeriesProcessor, GeoProcessor
|
|
6
5
|
|
|
7
6
|
class DistancesImputer(BaseEstimator, TransformerMixin):
|
|
8
7
|
"""La clase DistancesImputer se encarga de imputar/modificar los datos de telemetría entregados por el sistema. Se utilizan las clases TLMSensorDataExtractor, TimeSeriesProcessor y GeoProcessor para realizar las transformaciones necesarias y luego aplicar las modificaciones necesarias en base a las reglas definidas luego del análisis estadístico.
|
|
@@ -153,9 +152,11 @@ class DistancesImputer(BaseEstimator, TransformerMixin):
|
|
|
153
152
|
|
|
154
153
|
|
|
155
154
|
if __name__ == "__main__":
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
155
|
+
from sarapy.dataProcessing import TimeSeriesProcessor, GeoProcessor
|
|
156
|
+
from sarapy.dataProcessing import TLMSensorDataProcessor
|
|
157
|
+
tlmda = TLMSensorDataProcessor.TLMSensorDataProcessor()
|
|
158
|
+
tsa = TimeSeriesProcessor.TimeSeriesProcessor()
|
|
159
|
+
gpa = GeoProcessor.GeoProcessor()
|
|
159
160
|
|
|
160
161
|
##datos de ejemplo
|
|
161
162
|
tlmsbp_sample = np.array(['0010001000010010110000011000000111111101001000000000000000000000',
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
###Documentación en https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md
|
|
2
|
+
|
|
3
|
+
import numpy as np
|
|
4
|
+
from sklearn.base import BaseEstimator, TransformerMixin
|
|
5
|
+
|
|
6
|
+
class FertilizerImputer(BaseEstimator, TransformerMixin):
|
|
7
|
+
"""Clase para imputar los datos de fertilizante.
|
|
8
|
+
|
|
9
|
+
La idea principal es poder relevar la presencia o no de Fertilizante en la operación."""
|
|
10
|
+
|
|
11
|
+
def __init__(self, n_next_ops, min_dist_level = 3, keepDims = False, columnToImpute = 0):
|
|
12
|
+
"""Constructor de la clase FertilizerImputer.
|
|
13
|
+
|
|
14
|
+
Args:
|
|
15
|
+
- n_prev_ops: Número de operaciones siguientes a considerar.
|
|
16
|
+
- min_dist_level: Nivel mínimo de distorsión para considerar que hay fertilizante.
|
|
17
|
+
- columnToImpute: Columna a imputar.
|
|
18
|
+
- keepDims: Si es True, se mantienen las dimensiones del array de entrada. Si es False, se devuelve un array de una dimensión.
|
|
19
|
+
"""
|
|
20
|
+
self.n_next_ops = n_next_ops
|
|
21
|
+
self.min_dist_level = min_dist_level
|
|
22
|
+
self._keepDims = keepDims
|
|
23
|
+
self._columnToImpute = columnToImpute
|
|
24
|
+
self.is_fitted = False
|
|
25
|
+
self._dataPositions = {"fertilizante":0}
|
|
26
|
+
|
|
27
|
+
def fit(self, X:np.array, y = None):
|
|
28
|
+
"""Fittea el objeto
|
|
29
|
+
|
|
30
|
+
Params:
|
|
31
|
+
- X: Es un array con los datos provenientes (strings) de la base de datos histórica. La forma de X es (n,1)
|
|
32
|
+
- 0: Fertilizante
|
|
33
|
+
"""
|
|
34
|
+
self._fertilizante = X[:,0]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
## Version of the package
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.4.1"
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: sarapy
|
|
3
|
+
Version: 0.4.1
|
|
4
|
+
Home-page: https://github.com/lucasbaldezzari/sarapy
|
|
5
|
+
Author: Lucas Baldezzari
|
|
6
|
+
Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
7
|
+
Maintainer-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
8
|
+
License: Your license text goes here
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
Requires-Dist: numpy
|
|
11
|
+
Requires-Dist: matplotlib
|
|
12
|
+
Requires-Dist: pandas
|
|
13
|
+
Requires-Dist: scipy
|
|
14
|
+
Requires-Dist: scikit-learn
|
|
15
|
+
Requires-Dist: geopy
|
|
16
|
+
|
|
17
|
+
# SARAPY
|
|
18
|
+
|
|
19
|
+
Library for processing SARAPICO project metadata of _AMG_.
|
|
20
|
+
|
|
21
|
+
#### Version 0.4.1 (working)
|
|
22
|
+
|
|
23
|
+
- Se corrigen problemas de importaciones circulares.
|
|
24
|
+
|
|
25
|
+
#### Version 0.4.0
|
|
26
|
+
|
|
27
|
+
- Se implementa _OpsProcessor_.
|
|
28
|
+
- Se implementa _PlanntinClassifier_.
|
|
29
|
+
- Se corrige salida de _transform()_ y _fit_transform()_ de GeoProcessor.
|
|
30
|
+
- Se mueve PlantinFMCreator a mlProcessors
|
|
31
|
+
- Se cambia nombre de TLMSensorDataCreator a TLMSensorDataProcessor
|
|
@@ -9,9 +9,13 @@ sarapy.egg-info/dependency_links.txt
|
|
|
9
9
|
sarapy.egg-info/requires.txt
|
|
10
10
|
sarapy.egg-info/top_level.txt
|
|
11
11
|
sarapy/dataProcessing/GeoProcessor.py
|
|
12
|
-
sarapy/dataProcessing/
|
|
13
|
-
sarapy/dataProcessing/
|
|
12
|
+
sarapy/dataProcessing/OpsProcessor.py
|
|
13
|
+
sarapy/dataProcessing/TLMSensorDataProcessor.py
|
|
14
14
|
sarapy/dataProcessing/TimeSeriesProcessor.py
|
|
15
15
|
sarapy/dataProcessing/__init__.py
|
|
16
|
+
sarapy/mlProcessors/PlantinClassifier.py
|
|
17
|
+
sarapy/mlProcessors/PlantinFMCreator.py
|
|
18
|
+
sarapy/mlProcessors/__init__.py
|
|
16
19
|
sarapy/preprocessing/DistancesImputer.py
|
|
20
|
+
sarapy/preprocessing/FertilizerImputer.py
|
|
17
21
|
sarapy/preprocessing/__init__.py
|
sarapy-0.3.10/PKG-INFO
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: sarapy
|
|
3
|
-
Version: 0.3.10
|
|
4
|
-
Summary: Library for Sarapico Metadata processing
|
|
5
|
-
Home-page: https://github.com/lucasbaldezzari/sarapy
|
|
6
|
-
Author: Lucas Baldezzari
|
|
7
|
-
Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
8
|
-
Maintainer-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
9
|
-
License: MIT
|
|
10
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
13
|
-
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
|
14
|
-
Classifier: Operating System :: Unix
|
|
15
|
-
Description-Content-Type: text/markdown
|
|
16
|
-
Requires-Dist: numpy
|
|
17
|
-
Requires-Dist: matplotlib
|
|
18
|
-
Requires-Dist: pandas
|
|
19
|
-
Requires-Dist: scipy
|
|
20
|
-
Requires-Dist: scikit-learn
|
|
21
|
-
Requires-Dist: geopy
|
|
22
|
-
|
|
23
|
-
# SARAPY
|
|
24
|
-
|
|
25
|
-
Library for processing SARAPICO project metadata of _AMG_.
|
|
26
|
-
|
|
27
|
-
#### Version 0.3.10
|
|
28
|
-
|
|
29
|
-
- Se corrige línea en DistancesImputer.
|
|
30
|
-
|
|
31
|
-
#### Version 0.3.9
|
|
32
|
-
|
|
33
|
-
- Se corrige nombre de argumento en el constructor de PlantinFMCreator
|
|
34
|
-
|
|
35
|
-
#### Version 0.3.8
|
|
36
|
-
|
|
37
|
-
- Se agregan condiciones para mejorar la imputación de distancias en _DistancesImputer_.
|
|
38
|
-
|
|
39
|
-
#### Version 0.3.7
|
|
40
|
-
|
|
41
|
-
- Se implementa la imputación de distancias con _DistancesImputer_ dentro de PlantinFMCreator.
|
|
42
|
-
- Se agregan argumentos al constructor de _PlantinFMCreator_ necesarios para poder imputar con _DistancesImputer_.
|
|
43
|
-
- Se agrega argumento dist*mismo_lugar en \_DistancesImputer* para usar dicho valor en las imputaciones que correspondan a operaciones en el mismo lugar.
|
|
44
|
-
|
|
45
|
-
#### Version 0.3.6
|
|
46
|
-
|
|
47
|
-
- Se agregan argumentos al constructor de _DistancesImputer_ para que Transform y fit_transform puedan entregar un array de shape (n,1) o bien de (n,6) eligiendo la columna a imputar.
|
|
48
|
-
|
|
49
|
-
#### Version 0.3.5
|
|
50
|
-
|
|
51
|
-
- Se implementa clase _DistancesImputer_.
|
|
52
|
-
|
|
53
|
-
#### Version 0.3.4
|
|
54
|
-
|
|
55
|
-
- Se actializa _dataPositions_ de PlantinFMCreator.
|
|
56
|
-
|
|
57
|
-
#### Version 0.3.3
|
|
58
|
-
|
|
59
|
-
- Se cambia el nombre de la clase FMCreator a PlantinFMCreator. Se modifica la matriz transformada quitando el dato de distorsión de Fertilizante.
|
|
60
|
-
|
|
61
|
-
#### Version 0.3.2
|
|
62
|
-
|
|
63
|
-
- Se agrega property en FMCreator para acceder a \_dataPosition. Se cambia la forma de los diccionarios de _dataPosition_ de FMCreator, TimeSeriesProcesor y TLMSensorDataExtractor. Además, ahora este atributo se crea en init().
|
|
64
|
-
- Se corrige bug por división por cero en el cálculo de _ratio_dCdP_ de TimeSeriesProcessor.
|
|
65
|
-
|
|
66
|
-
#### Version 0.3.1
|
|
67
|
-
|
|
68
|
-
- Se corrige forma de acceder a los datos de X en FMCreator.fit().
|
|
69
|
-
|
|
70
|
-
#### Version 0.3.0
|
|
71
|
-
|
|
72
|
-
- Se implementa clase FMCreator.
|
|
73
|
-
- Se quita método TLMSensorDataExtractor.getMetadataRevisionNumber().
|
|
74
|
-
- Se agrega cálculo de ratio_dCdP en TimeSeriesProcessor
|
|
75
|
-
- Se cambia nombre de clase _GeoAnalyzer_ por _GeoProcessor_
|
|
76
|
-
- Se agrega atritubo dataPositions en _TLMSensorDataExtractor_ para poder saber qué representa cada columna dentro del array devuelto por tranform.
|
|
77
|
-
- Se agrega dataPositions a TimeSeriesProcessor
|
|
78
|
-
|
|
79
|
-
#### Version 0.2.6
|
|
80
|
-
|
|
81
|
-
- Se cambia la forma de computar los deltaO de TimeSeriesProcessor. Ahora se hace deltaO*i = T_i - T*(i-1)
|
|
82
|
-
|
|
83
|
-
#### Version 0.2.5
|
|
84
|
-
|
|
85
|
-
- Se corrige GeoAnalyzer.transform() para que entregue el array con un cero adicional al final ya que estaba entregando _(n-1,2)_ datos cuando X es de shape (n,2).
|
|
86
|
-
|
|
87
|
-
#### Version 0.2.4
|
|
88
|
-
|
|
89
|
-
- Se corrige nombre de atributos de TLMSensorDataExtractor
|
|
90
|
-
|
|
91
|
-
#### Version 0.2.3
|
|
92
|
-
|
|
93
|
-
- Se modifican métodos _TLMSensorDataExtractor.fit()_ y _TLMSensorDataExtractor.transofmr()_ ya que no se habían considerado los datos de FIX y SIV de la metadata.
|
|
94
|
-
|
|
95
|
-
#### Version 0.2.2
|
|
96
|
-
|
|
97
|
-
- Se quita el chequeo de valores nulos en TimeSeriesProcessor.fit()
|
|
98
|
-
- Si la cantidad de filas de X que se pasa a TimeSeriesProcessor.fit() es igual a uno, los tiempos de operación y de caminata se hacen cero. El método transform devolverá un array de (1,3) donde el único valor diferente de cero será el deltaC.
|
|
99
|
-
|
|
100
|
-
#### Version 0.2.1
|
|
101
|
-
|
|
102
|
-
- Se corrige _init.py_ de dataProcessing.
|
|
103
|
-
|
|
104
|
-
#### Version 0.2.0
|
|
105
|
-
|
|
106
|
-
- Transforming some attributs to private attributes. Adding @property for getters.
|
|
107
|
-
- Created GNSSDataProcessor class.
|
|
108
|
-
- Created TimeSeriesProcessor class.
|
|
109
|
-
|
|
110
|
-
#### Version 0.1.4
|
|
111
|
-
|
|
112
|
-
Setting an **init**.py file for TLMSensorDataExtractor module.
|
|
113
|
-
|
|
114
|
-
#### Version 0.1.3
|
|
115
|
-
|
|
116
|
-
Setting version.py file.
|
|
117
|
-
|
|
118
|
-
#### Version 0.1.1 and Version 0.1.0
|
|
119
|
-
|
|
120
|
-
Just for testing.
|
|
121
|
-
|
|
122
|
-
### Docs
|
|
123
|
-
|
|
124
|
-
Documentation [here](https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md).
|
sarapy-0.3.10/README.md
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# SARAPY
|
|
2
|
-
|
|
3
|
-
Library for processing SARAPICO project metadata of _AMG_.
|
|
4
|
-
|
|
5
|
-
#### Version 0.3.10
|
|
6
|
-
|
|
7
|
-
- Se corrige línea en DistancesImputer.
|
|
8
|
-
|
|
9
|
-
#### Version 0.3.9
|
|
10
|
-
|
|
11
|
-
- Se corrige nombre de argumento en el constructor de PlantinFMCreator
|
|
12
|
-
|
|
13
|
-
#### Version 0.3.8
|
|
14
|
-
|
|
15
|
-
- Se agregan condiciones para mejorar la imputación de distancias en _DistancesImputer_.
|
|
16
|
-
|
|
17
|
-
#### Version 0.3.7
|
|
18
|
-
|
|
19
|
-
- Se implementa la imputación de distancias con _DistancesImputer_ dentro de PlantinFMCreator.
|
|
20
|
-
- Se agregan argumentos al constructor de _PlantinFMCreator_ necesarios para poder imputar con _DistancesImputer_.
|
|
21
|
-
- Se agrega argumento dist*mismo_lugar en \_DistancesImputer* para usar dicho valor en las imputaciones que correspondan a operaciones en el mismo lugar.
|
|
22
|
-
|
|
23
|
-
#### Version 0.3.6
|
|
24
|
-
|
|
25
|
-
- Se agregan argumentos al constructor de _DistancesImputer_ para que Transform y fit_transform puedan entregar un array de shape (n,1) o bien de (n,6) eligiendo la columna a imputar.
|
|
26
|
-
|
|
27
|
-
#### Version 0.3.5
|
|
28
|
-
|
|
29
|
-
- Se implementa clase _DistancesImputer_.
|
|
30
|
-
|
|
31
|
-
#### Version 0.3.4
|
|
32
|
-
|
|
33
|
-
- Se actializa _dataPositions_ de PlantinFMCreator.
|
|
34
|
-
|
|
35
|
-
#### Version 0.3.3
|
|
36
|
-
|
|
37
|
-
- Se cambia el nombre de la clase FMCreator a PlantinFMCreator. Se modifica la matriz transformada quitando el dato de distorsión de Fertilizante.
|
|
38
|
-
|
|
39
|
-
#### Version 0.3.2
|
|
40
|
-
|
|
41
|
-
- Se agrega property en FMCreator para acceder a \_dataPosition. Se cambia la forma de los diccionarios de _dataPosition_ de FMCreator, TimeSeriesProcesor y TLMSensorDataExtractor. Además, ahora este atributo se crea en init().
|
|
42
|
-
- Se corrige bug por división por cero en el cálculo de _ratio_dCdP_ de TimeSeriesProcessor.
|
|
43
|
-
|
|
44
|
-
#### Version 0.3.1
|
|
45
|
-
|
|
46
|
-
- Se corrige forma de acceder a los datos de X en FMCreator.fit().
|
|
47
|
-
|
|
48
|
-
#### Version 0.3.0
|
|
49
|
-
|
|
50
|
-
- Se implementa clase FMCreator.
|
|
51
|
-
- Se quita método TLMSensorDataExtractor.getMetadataRevisionNumber().
|
|
52
|
-
- Se agrega cálculo de ratio_dCdP en TimeSeriesProcessor
|
|
53
|
-
- Se cambia nombre de clase _GeoAnalyzer_ por _GeoProcessor_
|
|
54
|
-
- Se agrega atritubo dataPositions en _TLMSensorDataExtractor_ para poder saber qué representa cada columna dentro del array devuelto por tranform.
|
|
55
|
-
- Se agrega dataPositions a TimeSeriesProcessor
|
|
56
|
-
|
|
57
|
-
#### Version 0.2.6
|
|
58
|
-
|
|
59
|
-
- Se cambia la forma de computar los deltaO de TimeSeriesProcessor. Ahora se hace deltaO*i = T_i - T*(i-1)
|
|
60
|
-
|
|
61
|
-
#### Version 0.2.5
|
|
62
|
-
|
|
63
|
-
- Se corrige GeoAnalyzer.transform() para que entregue el array con un cero adicional al final ya que estaba entregando _(n-1,2)_ datos cuando X es de shape (n,2).
|
|
64
|
-
|
|
65
|
-
#### Version 0.2.4
|
|
66
|
-
|
|
67
|
-
- Se corrige nombre de atributos de TLMSensorDataExtractor
|
|
68
|
-
|
|
69
|
-
#### Version 0.2.3
|
|
70
|
-
|
|
71
|
-
- Se modifican métodos _TLMSensorDataExtractor.fit()_ y _TLMSensorDataExtractor.transofmr()_ ya que no se habían considerado los datos de FIX y SIV de la metadata.
|
|
72
|
-
|
|
73
|
-
#### Version 0.2.2
|
|
74
|
-
|
|
75
|
-
- Se quita el chequeo de valores nulos en TimeSeriesProcessor.fit()
|
|
76
|
-
- Si la cantidad de filas de X que se pasa a TimeSeriesProcessor.fit() es igual a uno, los tiempos de operación y de caminata se hacen cero. El método transform devolverá un array de (1,3) donde el único valor diferente de cero será el deltaC.
|
|
77
|
-
|
|
78
|
-
#### Version 0.2.1
|
|
79
|
-
|
|
80
|
-
- Se corrige _init.py_ de dataProcessing.
|
|
81
|
-
|
|
82
|
-
#### Version 0.2.0
|
|
83
|
-
|
|
84
|
-
- Transforming some attributs to private attributes. Adding @property for getters.
|
|
85
|
-
- Created GNSSDataProcessor class.
|
|
86
|
-
- Created TimeSeriesProcessor class.
|
|
87
|
-
|
|
88
|
-
#### Version 0.1.4
|
|
89
|
-
|
|
90
|
-
Setting an **init**.py file for TLMSensorDataExtractor module.
|
|
91
|
-
|
|
92
|
-
#### Version 0.1.3
|
|
93
|
-
|
|
94
|
-
Setting version.py file.
|
|
95
|
-
|
|
96
|
-
#### Version 0.1.1 and Version 0.1.0
|
|
97
|
-
|
|
98
|
-
Just for testing.
|
|
99
|
-
|
|
100
|
-
### Docs
|
|
101
|
-
|
|
102
|
-
Documentation [here](https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md).
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
from .DistancesImputer import DistancesImputer
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: sarapy
|
|
3
|
-
Version: 0.3.10
|
|
4
|
-
Summary: Library for Sarapico Metadata processing
|
|
5
|
-
Home-page: https://github.com/lucasbaldezzari/sarapy
|
|
6
|
-
Author: Lucas Baldezzari
|
|
7
|
-
Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
8
|
-
Maintainer-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
9
|
-
License: MIT
|
|
10
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Operating System :: Microsoft :: Windows :: Windows 10
|
|
13
|
-
Classifier: Operating System :: Microsoft :: Windows :: Windows 11
|
|
14
|
-
Classifier: Operating System :: Unix
|
|
15
|
-
Description-Content-Type: text/markdown
|
|
16
|
-
Requires-Dist: numpy
|
|
17
|
-
Requires-Dist: matplotlib
|
|
18
|
-
Requires-Dist: pandas
|
|
19
|
-
Requires-Dist: scipy
|
|
20
|
-
Requires-Dist: scikit-learn
|
|
21
|
-
Requires-Dist: geopy
|
|
22
|
-
|
|
23
|
-
# SARAPY
|
|
24
|
-
|
|
25
|
-
Library for processing SARAPICO project metadata of _AMG_.
|
|
26
|
-
|
|
27
|
-
#### Version 0.3.10
|
|
28
|
-
|
|
29
|
-
- Se corrige línea en DistancesImputer.
|
|
30
|
-
|
|
31
|
-
#### Version 0.3.9
|
|
32
|
-
|
|
33
|
-
- Se corrige nombre de argumento en el constructor de PlantinFMCreator
|
|
34
|
-
|
|
35
|
-
#### Version 0.3.8
|
|
36
|
-
|
|
37
|
-
- Se agregan condiciones para mejorar la imputación de distancias en _DistancesImputer_.
|
|
38
|
-
|
|
39
|
-
#### Version 0.3.7
|
|
40
|
-
|
|
41
|
-
- Se implementa la imputación de distancias con _DistancesImputer_ dentro de PlantinFMCreator.
|
|
42
|
-
- Se agregan argumentos al constructor de _PlantinFMCreator_ necesarios para poder imputar con _DistancesImputer_.
|
|
43
|
-
- Se agrega argumento dist*mismo_lugar en \_DistancesImputer* para usar dicho valor en las imputaciones que correspondan a operaciones en el mismo lugar.
|
|
44
|
-
|
|
45
|
-
#### Version 0.3.6
|
|
46
|
-
|
|
47
|
-
- Se agregan argumentos al constructor de _DistancesImputer_ para que Transform y fit_transform puedan entregar un array de shape (n,1) o bien de (n,6) eligiendo la columna a imputar.
|
|
48
|
-
|
|
49
|
-
#### Version 0.3.5
|
|
50
|
-
|
|
51
|
-
- Se implementa clase _DistancesImputer_.
|
|
52
|
-
|
|
53
|
-
#### Version 0.3.4
|
|
54
|
-
|
|
55
|
-
- Se actializa _dataPositions_ de PlantinFMCreator.
|
|
56
|
-
|
|
57
|
-
#### Version 0.3.3
|
|
58
|
-
|
|
59
|
-
- Se cambia el nombre de la clase FMCreator a PlantinFMCreator. Se modifica la matriz transformada quitando el dato de distorsión de Fertilizante.
|
|
60
|
-
|
|
61
|
-
#### Version 0.3.2
|
|
62
|
-
|
|
63
|
-
- Se agrega property en FMCreator para acceder a \_dataPosition. Se cambia la forma de los diccionarios de _dataPosition_ de FMCreator, TimeSeriesProcesor y TLMSensorDataExtractor. Además, ahora este atributo se crea en init().
|
|
64
|
-
- Se corrige bug por división por cero en el cálculo de _ratio_dCdP_ de TimeSeriesProcessor.
|
|
65
|
-
|
|
66
|
-
#### Version 0.3.1
|
|
67
|
-
|
|
68
|
-
- Se corrige forma de acceder a los datos de X en FMCreator.fit().
|
|
69
|
-
|
|
70
|
-
#### Version 0.3.0
|
|
71
|
-
|
|
72
|
-
- Se implementa clase FMCreator.
|
|
73
|
-
- Se quita método TLMSensorDataExtractor.getMetadataRevisionNumber().
|
|
74
|
-
- Se agrega cálculo de ratio_dCdP en TimeSeriesProcessor
|
|
75
|
-
- Se cambia nombre de clase _GeoAnalyzer_ por _GeoProcessor_
|
|
76
|
-
- Se agrega atritubo dataPositions en _TLMSensorDataExtractor_ para poder saber qué representa cada columna dentro del array devuelto por tranform.
|
|
77
|
-
- Se agrega dataPositions a TimeSeriesProcessor
|
|
78
|
-
|
|
79
|
-
#### Version 0.2.6
|
|
80
|
-
|
|
81
|
-
- Se cambia la forma de computar los deltaO de TimeSeriesProcessor. Ahora se hace deltaO*i = T_i - T*(i-1)
|
|
82
|
-
|
|
83
|
-
#### Version 0.2.5
|
|
84
|
-
|
|
85
|
-
- Se corrige GeoAnalyzer.transform() para que entregue el array con un cero adicional al final ya que estaba entregando _(n-1,2)_ datos cuando X es de shape (n,2).
|
|
86
|
-
|
|
87
|
-
#### Version 0.2.4
|
|
88
|
-
|
|
89
|
-
- Se corrige nombre de atributos de TLMSensorDataExtractor
|
|
90
|
-
|
|
91
|
-
#### Version 0.2.3
|
|
92
|
-
|
|
93
|
-
- Se modifican métodos _TLMSensorDataExtractor.fit()_ y _TLMSensorDataExtractor.transofmr()_ ya que no se habían considerado los datos de FIX y SIV de la metadata.
|
|
94
|
-
|
|
95
|
-
#### Version 0.2.2
|
|
96
|
-
|
|
97
|
-
- Se quita el chequeo de valores nulos en TimeSeriesProcessor.fit()
|
|
98
|
-
- Si la cantidad de filas de X que se pasa a TimeSeriesProcessor.fit() es igual a uno, los tiempos de operación y de caminata se hacen cero. El método transform devolverá un array de (1,3) donde el único valor diferente de cero será el deltaC.
|
|
99
|
-
|
|
100
|
-
#### Version 0.2.1
|
|
101
|
-
|
|
102
|
-
- Se corrige _init.py_ de dataProcessing.
|
|
103
|
-
|
|
104
|
-
#### Version 0.2.0
|
|
105
|
-
|
|
106
|
-
- Transforming some attributs to private attributes. Adding @property for getters.
|
|
107
|
-
- Created GNSSDataProcessor class.
|
|
108
|
-
- Created TimeSeriesProcessor class.
|
|
109
|
-
|
|
110
|
-
#### Version 0.1.4
|
|
111
|
-
|
|
112
|
-
Setting an **init**.py file for TLMSensorDataExtractor module.
|
|
113
|
-
|
|
114
|
-
#### Version 0.1.3
|
|
115
|
-
|
|
116
|
-
Setting version.py file.
|
|
117
|
-
|
|
118
|
-
#### Version 0.1.1 and Version 0.1.0
|
|
119
|
-
|
|
120
|
-
Just for testing.
|
|
121
|
-
|
|
122
|
-
### Docs
|
|
123
|
-
|
|
124
|
-
Documentation [here](https://github.com/lucasbaldezzari/sarapy/blob/main/docs/Docs.md).
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|