Estoy trabajando con un conjunto de datos simple y por razones de reproducibilidad, lo comparto aquí .
Para aclarar lo que estoy haciendo, de la columna 2, estoy leyendo la fila actual y la comparo con el valor de la fila anterior. Si es mayor, sigo comparando. Si el valor actual es más pequeño que el valor de la fila anterior, quiero dividir el valor actual (más pequeño) por el valor anterior (más grande). En consecuencia, el siguiente código:
import numpy as np import scipy.stats import matplotlib.pyplot as plt import seaborn as sns protocols = {} types = {"data_v": "data_v.csv"} for protname, fname in types.items(): col_time,col_window = np.loadtxt(fname,delimiter=',').T trailing_window = col_window[:-1] # "past" values at a given index leading_window = col_window[1:] # "current values at a given index decreasing_inds = np.where(leading_window < trailing_window)[0] quotient = leading_window[decreasing_inds]/trailing_window[decreasing_inds] quotient_times = col_time[decreasing_inds] protocols[protname] = { "col_time": col_time, "col_window": col_window, "quotient_times": quotient_times, "quotient": quotient, } plt.figure(); plt.clf() plt.plot(quotient_times, quotient, ".", label=protname, color="blue") plt.ylim(0, 1.0001) plt.title(protname) plt.xlabel("quotient_times") plt.ylabel("quotient") plt.legend() plt.show() sns.distplot(quotient, hist=False, label=protname)
Esto da las siguientes plots.
Como podemos ver en las plots.
quotient_times
es menor que 3 y el cociente permanece 0.5 si el quotient_times
es mayor que 3. ¿Cómo podemos encajar esto en una función sigmoide para tener una gráfica como la siguiente? Quiero que el peso disminuya rápidamente a cero a medida que aumenta el valor de quotient_times
.