importar matplotlib.pyplot como plt importar numpy como np importar seaborn como snsdef fractile ( l , p , C ): "" "Encuentra el p'th fractile de l para varios esquemas de interpolación. Todos los esquemas son lineales pero varían en su definición del rango de la CDF. Args: l (numpy.array) : La matriz de números para encontrar fractiles para. P (numpy.array): Los fractiles de interés (como flotantes entre 0 y 1). C (flotante): Esquema de interpolación, dado como un flotante entre 0 y 1. 0 corresponde a lo que calcula PERCENTILE.EXC de Excel. 1/2 corresponde a lo que hace MATLAB. 1 corresponde a lo que calcula PERCENTILE.INC de NumPy / Excel. "" "def get_index ( N , p , C ): the_index = ( N + 1 - 2 * C ) * p + C - 1 devuelve the_index . clip ( 0 , N - 1 ) s = np . sort ( l ) x = get_index ( len ( s ), p , C ) s = np . append ( s , 0 ) # Para C <1, agregamos un valor ficticio as para resolver el caso x = N-1. return s [ np . int_ ( x )] * ( 1 - x % 1 ) + s [ np . int_ ( x ) + 1 ] * ( x % 1 )x = np . matriz ([ 15 , 20 , 35 , 40 , 50 ]) p = np . arango ( 0 , 100,1 , 0,1 )para v en ( 0 , 0.5 , 1 ): plt . parcela ( p , fractile ( x , p / 100 , v ))plt . title ( 'Tres esquemas de interpolación lineal diferentes' ) plt . xlabel ( 'Rango de porcentaje' ) plt . ylabel ( 'Valor percentil' ) plt . xlim ( 0 , 100 ) plt . ylim ( 14 , 51 ) plt . leyenda ([ '$ C = 0 $' , '$ C = 1/2 $' , '$ C = 1 $' ], loc = 'parte inferior derecha' ) plt .savefig ( 'percentile_interpolation.png' , dpi = 400 )