You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

447 KiB

None <html lang="en"> <head> </head>
In [22]:
from pathlib import Path
import sys
import  matplotlib.pyplot as plt
import  numpy as np

PROJECT_ROOT    =   Path.cwd().parent
sys.path.insert(0, str(PROJECT_ROOT))

print("Project Root:", PROJECT_ROOT)

from    src.visualizacion   import  (plot_xy, comparar_rondas, comparar_experimentos,
                                     plot_3D, plot_color_map, plot_dual_axis,
                                     plot_con_ajuste, marcar_zonas, sombrear_zonas)
from    src.analysis        import  (calcular_pendiente, calcular_r2, derivada_numerica,
                                     segunda_derivada, variación_resistencia,
                                     comparar_pendientes, zonas_manual, detectar_zonas_auto,)
from    src.data_loader     import  (apply_filter, load_all)

DATA_DIR    =   PROJECT_ROOT / "data"
data        =   load_all(DATA_DIR)
print("Uploaded Data:", len(data))
Project Root: /Users/mguillermo/Desktop/MGPH/Maestria/Hydrogen_Exp/Analysis/2nd_AMIDIQ_Analysis
Uploaded Data: 8

Prueba de Modulo "visualizacion.py"

In [6]:
ronda       =   1
experimento =   3
df          =   data[(ronda, experimento)]
df_f        =   apply_filter(df, row_start=35, row_end=66)
df_f1       =   apply_filter(df, row_start=11, row_end=66)


plot_con_ajuste(df, x_col="Voltaje Electrodos (V)", y_col="Corriente Electrodos (A)", 
                label_datos="Datos")
plot_con_ajuste(df_f, x_col="Voltaje Electrodos (V)", y_col="Resistencia")
comparar_rondas(data, experimento=2, x_col="Voltaje Electrodos (V)",
                y_col= "Corriente Electrodos (A)",  
                filter_fn=lambda df: apply_filter(df,row_start=11,row_end=66))
plot_color_map(df_f, x_col="Voltaje Electrodos (V)", y_col="Corriente Electrodos (A)",
               z_col="Temperatura")
plot_color_map(df_f1, x_col="Voltaje Electrodos (V)", y_col="Corriente Electrodos (A)",
               z_col="Temperatura")
plot_dual_axis(df_f, x_col="Voltaje Electrodos (V)", y1_col="Resistencia",
               y2_col="Temperatura")
plot_3D(df_f1, x_col="Voltaje Electrodos (V)", y_col="Corriente Electrodos (A)", z_col="Temperatura")
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[6]:
(<Figure size 800x600 with 1 Axes>,
 <Axes3D: title={'center': '3D: Voltaje Electrodos (V) vs Corriente Electrodos (A) vs Temperatura'}, xlabel='Voltaje Electrodos (V)', ylabel='Corriente Electrodos (A)', zlabel='Temperatura'>)

Prueba de Modulo "analysis.py"

In [27]:
df      =   data[(1, 1)]
x_col   =   "Voltaje Electrodos (V)"
y_col   =   "Corriente Electrodos (A)"

fig, ax =   plt.subplots(figsize=(7,5))

plot_xy(df, x_col=x_col, y_col=y_col,
        ax=ax)

zonas = detectar_zonas_auto(df, x_col=x_col, y_col=y_col)

print(len(zonas))
print(zonas)

marcar_zonas(
    ax=ax,
    limites=[
        zonas["Zona_no_conduccion"],
        zonas["Zona_conduccion"],
        zonas["Zona_Generacion"],
        zonas["Zona_Saturacion"]
    ],
    labels=[
        "No conduccion",
        "Conduccion",
        "Generacion H",
        "Saturacion"
    ]
)

sombrear_zonas(ax, 
               limites=[
                   zonas["Zona_no_conduccion"],
                   zonas["Zona_conduccion"],
                   zonas["Zona_Generacion"],
                   zonas["Zona_Saturacion"]
               ])

plt.show()

fig, ax1 = plt.subplots(figsize=(7,5))

df_res  =   apply_filter(df, row_start=33, row_end=66)
plot_xy(df_res, x_col="Voltaje Electrodos (V)", y_col="Resistencia", ax=ax1)
zonas   =   [2.864084, 4.924251]

marcar_zonas(ax=ax1, limites=zonas, 
             labels=[
                "Generacion H",
                "Saturacion"
             ])
plt.show()



r       =   "Resistencia"
m, b    =   calcular_pendiente(df_res, x_col=x_col, y_col="Resistencia")
print(f"Pendiente Velec vs Resis m = {m:.3f} b = {b:.3f}")

r2      =   calcular_r2(df_res, x_col=x_col, y_col=r)
print(f"Coeficiente de determinacion R^2 = {r2:.3f}")

x, y, dy_dx, d2y_dx2    =   segunda_derivada(df_res, x_col=x_col, y_col=r)
print(f"Segunda Derivada ")
print(x)
print(y)
print(dy_dx)
print(d2y_dx2)

delta_R =   variación_resistencia(df_res)
print(f"Variacion de la Resistencia en las zonas comprendidas entre 2.864084 y 4.924251 = ")
print(delta_R)
prom    =   np.mean(delta_R)
print(f"Promedio del Delta_R = {np.mean(abs(delta_R)):.3f}")
4
{'Zona_no_conduccion': 0.770308, 'Zona_conduccion': 0.969279, 'Zona_Generacion': 1.171019, 'Zona_Saturacion': 4.872419}
No description has been provided for this image
No description has been provided for this image
Pendiente Velec vs Resis m = -0.599 b = 3.434
Coeficiente de determinacion R^2 = 0.958
Segunda Derivada 
[3.004526 3.073275 3.141318 3.202161 3.274651 3.342777 3.409529 3.477907
 3.54585  3.606963 3.673144 3.738379 3.806149 3.87004  3.935331 3.998413
 4.061523 4.121292 4.180337 4.240425 4.294713 4.339654 4.395593 4.447851
 4.504392 4.559813 4.611005 4.660961 4.710974 4.765088 4.818415 4.872419
 4.924251]
[3.004526 3.073275 3.141318 3.202161 3.274651 3.342777 3.409529 3.477907
 3.54585  3.606963 3.673144 3.738379 3.806149 3.87004  3.935331 3.998413
 4.061523 4.121292 4.180337 4.240425 4.294713 4.339654 4.395593 4.447851
 4.504392 4.559813 4.611005 4.660961 4.710974 4.765088 4.818415 4.872419
 4.924251]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[-5.16765870e-14  2.66453526e-14  4.97379915e-14  8.88178420e-16
 -2.66453526e-14 -2.66453526e-14 -2.57571742e-14  0.00000000e+00
  5.50670620e-14  5.32907052e-15 -2.66453526e-14  0.00000000e+00
  0.00000000e+00 -8.88178420e-16  2.84217094e-14  5.59552404e-14
 -9.23705556e-14  1.77635684e-15  6.39488462e-14 -5.68434189e-14
  8.70414851e-14 -2.48689958e-14 -5.32907052e-14  1.31450406e-13
 -6.57252031e-14 -5.32907052e-14  1.42108547e-13  7.28306304e-14
 -6.21724894e-14 -6.39488462e-14  0.00000000e+00 -1.77635684e-15
  0.00000000e+00]
Variacion de la Resistencia en las zonas comprendidas entre 2.864084 y 4.924251 = 
[ 0.         -0.05818042 -0.10972228 -0.15409885 -0.20114358 -0.23719562
 -0.26909593 -0.29926658 -0.32607558 -0.34940905 -0.37298916 -0.3951796
 -0.41508667 -0.43507091 -0.45471462 -0.47181483 -0.48841853 -0.50492617
 -0.51866041 -0.53297319 -0.54786612 -0.56844832 -0.58041296 -0.59286817
 -0.60353057 -0.61556914 -0.62572155 -0.63584589 -0.64498316 -0.65369679
 -0.66297384 -0.6705617  -0.67951872]
Promedio del Delta_R = 0.445
</html>