sarapy 2.0.0__py3-none-any.whl → 2.1.1__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.
- sarapy/dataProcessing/OpsProcessor.py +16 -9
- sarapy/preprocessing/TransformInputData.py +11 -2
- sarapy/preprocessing/TransformToOutputData.py +16 -20
- sarapy/version.py +1 -1
- {sarapy-2.0.0.dist-info → sarapy-2.1.1.dist-info}/METADATA +9 -1
- {sarapy-2.0.0.dist-info → sarapy-2.1.1.dist-info}/RECORD +9 -9
- {sarapy-2.0.0.dist-info → sarapy-2.1.1.dist-info}/LICENCE +0 -0
- {sarapy-2.0.0.dist-info → sarapy-2.1.1.dist-info}/WHEEL +0 -0
- {sarapy-2.0.0.dist-info → sarapy-2.1.1.dist-info}/top_level.txt +0 -0
|
@@ -72,18 +72,26 @@ class OpsProcessor():
|
|
|
72
72
|
Se toma una nueva muestra y se procesa la información para clasificar las operaciones considerando el
|
|
73
73
|
plantín y por otro lado el fertilizante.
|
|
74
74
|
Se retorna un array con las clasificaciones concatenadas, manteniendo el orden de las operaciones por operario.
|
|
75
|
-
|
|
75
|
+
|
|
76
76
|
Args:
|
|
77
|
-
|
|
77
|
+
- data: Lista de diccionario. Cada diccionario tiene la forma.
|
|
78
|
+
Ejemplo (NOTA: El salto de línea es agregado para mejorar la legibilidad):
|
|
79
|
+
[
|
|
80
|
+
{"id": 6, "receiver_timestamp": "2025-06-21T15:51:36.527825+00:00", "timestamp": "2025-06-21T15:51:01.000002+00:00", "datum": null,
|
|
81
|
+
"csv_datum": "2025-06-21T15:51:01.000002+00:00,2,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-58.0321,-33.2471,
|
|
82
|
+
1,0,0,0,0,0,0,0,0,0,1,1,1,0,1,1,0,0,0,0,1,0,0,1,1,0,3,0,0,0,0,3,0,0,0,0,0,1,0,0,0,0,0.0000,0.0000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0",
|
|
83
|
+
"longitude": null, "latitude": null, "accuracy": null, "tag_seedling": null, "tag_fertilizer": null}
|
|
84
|
+
]
|
|
78
85
|
|
|
79
86
|
Returns:
|
|
80
87
|
Lista de diccionarios con las clasificaciones. Cada diccionario tiene la forma
|
|
81
|
-
{"
|
|
88
|
+
[{"timestamp": "2025-05-27T21:42:38.000002+00:00", "tag_seedling": 1, "tag_fertilizer": gramos (float)},...]
|
|
82
89
|
"""
|
|
83
90
|
|
|
84
91
|
##chqueo que newSample no esté vacío
|
|
85
92
|
if len(data) != 0:
|
|
86
93
|
newSample = self.transformInputData.transform(data)
|
|
94
|
+
|
|
87
95
|
#Si tenemos nuevas operaciones, actualizamos el diccionario de operaciones
|
|
88
96
|
self.updateOperationsDict(newSample) #actualizamos diccionario interno de la clase
|
|
89
97
|
pl_clas = self.classifyForPlantin(**kwargs) #clasificamos las operaciones para plantín
|
|
@@ -94,9 +102,9 @@ class OpsProcessor():
|
|
|
94
102
|
id_db_h_nums, id_db_dw_nums = self.getActualOperationsNumbers() #obtenemos los números de operaciones desde el diccionario de operaciones
|
|
95
103
|
logging.debug(f"ID_DB_H shape: {id_db_h_nums.shape}, ID_DB_DW shape: {id_db_dw_nums.shape}")
|
|
96
104
|
date_oprc = pd.DataFrame(newSample)["date_oprc"].values.reshape(-1, 1) ##extraigo las fechas de operación de la muestra
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
timestamps = pd.DataFrame(newSample)["timestamp"].values.reshape(-1, 1) ##extraigo los timestamps de la muestra
|
|
106
|
+
|
|
107
|
+
return self.transformToOutputData.fit_transform(np.column_stack((timestamps,
|
|
100
108
|
pl_clas,
|
|
101
109
|
ft_grams)))
|
|
102
110
|
else:
|
|
@@ -301,11 +309,10 @@ if __name__ == "__main__":
|
|
|
301
309
|
with open(historical_data_path, 'r') as file:
|
|
302
310
|
samples = json.load(file)
|
|
303
311
|
|
|
304
|
-
samples1 = samples
|
|
305
|
-
samples2 = samples[100:200]
|
|
312
|
+
samples1 = samples
|
|
306
313
|
|
|
307
314
|
op = OpsProcessor(classifier_file='modelos\\pipeline_rf.pkl', imputeDistances = False,
|
|
308
315
|
regresor_file='modelos\\regresor.pkl', poly_features_file='modelos\\poly_features.pkl')
|
|
309
316
|
|
|
310
|
-
op.processOperations(samples[:
|
|
317
|
+
print(op.processOperations(samples[:20]))
|
|
311
318
|
# op.processOperations(samples2)
|
|
@@ -32,6 +32,7 @@ class TransformInputData(BaseEstimator, TransformerMixin):
|
|
|
32
32
|
"VUX1": 81, "VUX2": 82, "VUX3": 83, "VUX4": 84, "VUX5": 85, "VUX6": 86, "VUX7": 87, "VUX8": 88,
|
|
33
33
|
"VUX9": 89, "VUX10": 90}
|
|
34
34
|
self.dataFloat = ["latitud","longitud","Longitud_N","Latitud_N","Longitud_G","Latitud_G","date_oprc","Date_oprc"]
|
|
35
|
+
self.dataString = ["timestamp"]
|
|
35
36
|
|
|
36
37
|
def transform(self, X):
|
|
37
38
|
"""
|
|
@@ -65,11 +66,13 @@ class TransformInputData(BaseEstimator, TransformerMixin):
|
|
|
65
66
|
self.data_transformed = []
|
|
66
67
|
dict_structre = {"id_db_h":None, "id_db_dw":None, "ID_NPDP":None,
|
|
67
68
|
"date_oprc":None, "latitud":None, "longitud":None,
|
|
68
|
-
"precision":None, "FR":None}
|
|
69
|
+
"precision":None, "FR":None, "timestamp": None}
|
|
70
|
+
|
|
69
71
|
##agrego los keys que están en dataPositions con valores None
|
|
70
72
|
for key in self.data_positions.keys():
|
|
71
73
|
dict_structre[key] = None
|
|
72
74
|
|
|
75
|
+
|
|
73
76
|
for row in X:
|
|
74
77
|
# Crear un diccionario para almacenar los datos transformados
|
|
75
78
|
data_dict = dict_structre.copy()
|
|
@@ -103,6 +106,7 @@ class TransformInputData(BaseEstimator, TransformerMixin):
|
|
|
103
106
|
data_dict["Date_oprc"] = data_dict.get("date_oprc", None)
|
|
104
107
|
data_dict["latitud"] = data_dict.get("Latitud_N", None)
|
|
105
108
|
data_dict["longitud"] = data_dict.get("Longitud_N", None)
|
|
109
|
+
data_dict["timestamp"] = row.get("timestamp", None)
|
|
106
110
|
# data_dict["FR"] = row.get("tag_fertilizer", None)
|
|
107
111
|
|
|
108
112
|
# Agregar el diccionario transformado a la lista
|
|
@@ -116,6 +120,11 @@ class TransformInputData(BaseEstimator, TransformerMixin):
|
|
|
116
120
|
data[key] = float(value) if value else None
|
|
117
121
|
except ValueError:
|
|
118
122
|
data[key] = None
|
|
123
|
+
elif key in self.dataString:
|
|
124
|
+
try:
|
|
125
|
+
data[key] = str(value) if value else None
|
|
126
|
+
except ValueError:
|
|
127
|
+
data[key] = None
|
|
119
128
|
else:
|
|
120
129
|
try:
|
|
121
130
|
data[key] = int(value) if value else None
|
|
@@ -137,4 +146,4 @@ if __name__ == "__main__":
|
|
|
137
146
|
data_positions = json.load(open("sarapy/preprocessing/telemetriaDataPosition.json", 'r'))
|
|
138
147
|
transform_input_data = TransformInputData()
|
|
139
148
|
transformed_data = transform_input_data.transform(historical_data)
|
|
140
|
-
transformed_data[-1]
|
|
149
|
+
print(transformed_data[-1])
|
|
@@ -10,10 +10,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
|
|
|
10
10
|
- dataToTransform: array con los datos de las operaciones clasificadas.
|
|
11
11
|
Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
|
|
12
12
|
|
|
13
|
-
- 0:
|
|
14
|
-
- 1:
|
|
15
|
-
- 2:
|
|
16
|
-
- 3: tag_fertilizer
|
|
13
|
+
- 0: timestamp
|
|
14
|
+
- 1: tag_seedling
|
|
15
|
+
- 2: tag_fertilizer
|
|
17
16
|
Returns:
|
|
18
17
|
Retorna una lista de diccionarios con la siguiente estructura
|
|
19
18
|
"""
|
|
@@ -33,17 +32,16 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
|
|
|
33
32
|
- X: array con los datos de las operaciones clasificadas.
|
|
34
33
|
Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
|
|
35
34
|
|
|
36
|
-
- 0:
|
|
37
|
-
- 1:
|
|
38
|
-
- 2:
|
|
39
|
-
- 3: tag_fertilizer
|
|
35
|
+
- 0: timestamp
|
|
36
|
+
- 1: tag_seedling
|
|
37
|
+
- 2: tag_fertilizer
|
|
40
38
|
"""
|
|
41
39
|
self.is_fitted = True
|
|
42
|
-
keys = ["
|
|
40
|
+
keys = ["timestamp","tag_seedling", "tag_fertilizer"]
|
|
43
41
|
self.temp_df = pd.DataFrame(X, columns = keys)
|
|
44
|
-
|
|
45
|
-
##convierto las columnas "
|
|
46
|
-
for col in ["
|
|
42
|
+
|
|
43
|
+
##convierto las columnas "timestamp", "tag_seedling" a int
|
|
44
|
+
for col in ["tag_seedling"]:
|
|
47
45
|
self.temp_df[col] = self.temp_df[col].astype(float).astype(int)
|
|
48
46
|
##convierto la columna "tag_fertilizer" a float de y redondeo a 3 decimales
|
|
49
47
|
self.temp_df["tag_fertilizer"] = self.temp_df["tag_fertilizer"].astype(float).round(3)
|
|
@@ -56,10 +54,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
|
|
|
56
54
|
- X: array con los datos de las operaciones clasificadas.
|
|
57
55
|
Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
|
|
58
56
|
|
|
59
|
-
- 0:
|
|
60
|
-
- 1:
|
|
61
|
-
- 2:
|
|
62
|
-
- 3: tag_fertilizer
|
|
57
|
+
- 0: timestamp
|
|
58
|
+
- 1: tag_seedling
|
|
59
|
+
- 2: tag_fertilizer
|
|
63
60
|
Returns:
|
|
64
61
|
Retorna una lista de diccionarios donde cada diccionario contiene los datos de una operación para los campos mencionados anteriormente.
|
|
65
62
|
"""
|
|
@@ -72,10 +69,9 @@ class TransformToOutputData(BaseEstimator, TransformerMixin):
|
|
|
72
69
|
- X: array con los datos de las operaciones clasificadas.
|
|
73
70
|
Actualmente el array de dataToTransform es de (n,5) con las columnas siguientes
|
|
74
71
|
|
|
75
|
-
- 0:
|
|
76
|
-
- 1:
|
|
77
|
-
- 2:
|
|
78
|
-
- 3: tag_fertilizer
|
|
72
|
+
- 0: timestamp
|
|
73
|
+
- 1: tag_seedling
|
|
74
|
+
- 2: tag_fertilizer
|
|
79
75
|
Returns:
|
|
80
76
|
Retorna una lista de diccionarios donde cada diccionario contiene los datos de una operación para los campos mencionados anteriormente.
|
|
81
77
|
"""
|
sarapy/version.py
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
## Version of the package
|
|
2
|
-
__version__ = "2.
|
|
2
|
+
__version__ = "2.1.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: sarapy
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.1.1
|
|
4
4
|
Home-page: https://github.com/lucasbaldezzari/sarapy
|
|
5
5
|
Author: Lucas Baldezzari
|
|
6
6
|
Author-email: Lucas Baldezzari <lmbaldezzari@gmail.com>
|
|
@@ -19,6 +19,14 @@ Requires-Dist: geopy
|
|
|
19
19
|
|
|
20
20
|
Library for processing SARAPICO project metadata of _AMG SA_.
|
|
21
21
|
|
|
22
|
+
#### Version 2.1.1
|
|
23
|
+
|
|
24
|
+
- Se corrige error de tiepo en TransformToOutputData.
|
|
25
|
+
|
|
26
|
+
#### Version 2.1.0
|
|
27
|
+
|
|
28
|
+
- Se modifica TransformInputdata para poder obtener el timestamp en newSample de OpsProcessor. Se modifica transformOutputData para entregar los datos en base a la solicitud de #43. Se modifica OpsProcessor para poder obtener los datos de salida según solicitud en #43. Close #43.
|
|
29
|
+
|
|
22
30
|
#### Version 2.0.0
|
|
23
31
|
|
|
24
32
|
- Se realizan cambios en TransformInputData para que convierta los datos de telemetría a la forma de lista de diccionarios, como un JSON, para que sea más fácil de usar y entender. Además, a futuro, se espera que los datos de la electrónica se puedan enviar en este formato.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
sarapy/__init__.py,sha256=aVoywqGSscYYDycLaYJnz08dlQabl9gH0h4Q5KtHM9o,74
|
|
2
|
-
sarapy/version.py,sha256=
|
|
2
|
+
sarapy/version.py,sha256=0bCxTC9u3IxGA7LNSJTuzNcRWMsiPIZSJhwyTIMhyHo,51
|
|
3
3
|
sarapy/dataProcessing/GeoProcessor.py,sha256=ARjgKTXDVdf_cFCXyFmzlnmmmay3HG3q-yeJ9QrAcQU,5919
|
|
4
|
-
sarapy/dataProcessing/OpsProcessor.py,sha256=
|
|
4
|
+
sarapy/dataProcessing/OpsProcessor.py,sha256=zu6AJ2wQD84-u-fxxTIqGbdw4NrRRye9gHZO3A8Z724,17269
|
|
5
5
|
sarapy/dataProcessing/TLMSensorDataProcessor.py,sha256=RuITlryuSaIWvYyJwE5wxp85HVZ6mr5kUVALikfwS4g,3603
|
|
6
6
|
sarapy/dataProcessing/TimeSeriesProcessor.py,sha256=aig3A3_SCa9FVSWxGWiapBUX7Lj9Wi1BVyZi-XXZZYQ,6414
|
|
7
7
|
sarapy/dataProcessing/__init__.py,sha256=Kqs5sFtq6RMEa3KLJFbsGRoYsIxHL1UUGMuplyCyQFk,200
|
|
@@ -12,8 +12,8 @@ sarapy/mlProcessors/PlantinFMCreator.py,sha256=meK8SH1rUlBOAfC4BPGUgpEIfgr-yXp9S
|
|
|
12
12
|
sarapy/mlProcessors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
13
|
sarapy/preprocessing/DistancesImputer.py,sha256=NvbVAh5m0yFxVgDbEFnEX7RSG13qLjO7i2gqjDAWsf4,9106
|
|
14
14
|
sarapy/preprocessing/FertilizerImputer.py,sha256=zK6ONAilwPHvj-bC7yxnQYOkDBCCkWh6__57vYK9anM,1490
|
|
15
|
-
sarapy/preprocessing/TransformInputData.py,sha256=
|
|
16
|
-
sarapy/preprocessing/TransformToOutputData.py,sha256=
|
|
15
|
+
sarapy/preprocessing/TransformInputData.py,sha256=ZQ8k_4JFp78G5VqZEuzYmF8VCDcOxEnHKbd_4w7PPjY,8536
|
|
16
|
+
sarapy/preprocessing/TransformToOutputData.py,sha256=2hSeFkrSt1OO_jiX4SQJtL3Dhm_9xLy7zCgkj8jo9OE,3137
|
|
17
17
|
sarapy/preprocessing/__init__.py,sha256=Wg_Csy8Xiz8BN8A4-T7iPwcL_ol5ApEx6YtybItKB8M,100
|
|
18
18
|
sarapy/stats/__init__.py,sha256=ZrLMSistwynmmx4HUcI-ePRzqQ4bjp85JT4fTmbzC-c,27
|
|
19
19
|
sarapy/stats/stats.py,sha256=raQBnn2RRtwYOuKN4Mgk6Rhk4hajx1TVcGlYnT2TMmA,11412
|
|
@@ -22,8 +22,8 @@ sarapy/utils/amg_decoder.py,sha256=JZ7cbu7DlCuatuq2F7aBfUr7S7U-K5poBgxw5nY6rNI,4
|
|
|
22
22
|
sarapy/utils/amg_ppk.py,sha256=c0GusnxdntU-E0JOezzbIfC7SWoJmKAbad_zYDCJ3-c,1060
|
|
23
23
|
sarapy/utils/getRawOperations.py,sha256=8aA1fIkNCnUYgiWfnFggRT_U35z432gZBrZ7seGO5w4,817
|
|
24
24
|
sarapy/utils/plotting.py,sha256=kX-eYw618urMcUBkNPviQZdBziDc_TR3GInTsO90kU4,4065
|
|
25
|
-
sarapy-2.
|
|
26
|
-
sarapy-2.
|
|
27
|
-
sarapy-2.
|
|
28
|
-
sarapy-2.
|
|
29
|
-
sarapy-2.
|
|
25
|
+
sarapy-2.1.1.dist-info/LICENCE,sha256=N00sU3vSQ6F5c2vML9_qP4IFTkCPFFj0YGDB2CZP-uQ,840
|
|
26
|
+
sarapy-2.1.1.dist-info/METADATA,sha256=UcFPPUm74NIuKz8H9mgVCl1tP-H2uxto_84GQiPsfnk,5774
|
|
27
|
+
sarapy-2.1.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
|
|
28
|
+
sarapy-2.1.1.dist-info/top_level.txt,sha256=4mUGZXfX2Fw47fpY6MQkaJeuOs_8tbjLkkNp34DJWiA,7
|
|
29
|
+
sarapy-2.1.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|