Está en la página 1de 10

GENERAL

lunes, 25 de julio de 2022 18:43

INTRODUCTION TO NUMPY
Chapter 1: Undertanding NumPy Arrays
np.array((x,y)) --> Crear un ndarray de x filas e y columnas indicado por el tuple (x,y)
np.zeros((x,y))
np.random.random((x,y))
np.arange(start, stop) --> Ojo que aquí no es un tuple sino parámetros el start y el stop
np.arange(start, stop, step) --> Ojo que aquí no es un tuple sino parámetros el start y el stop y el step

np.array(list_of_arrays) --> Crear un array mediante una lista de arrays

.shape --> Atributo para saber la dimensión del array

array.flatten() --> Disminuir a 1 dimensión un array


array.reshape((x,y)) --> Redimensionalizar un array indicando un tuple

.dtype() --> Atributo para saber el tipo de dato que tiene el array
np.array(list_of_float_values, dtype=np.float32) --> Puede forzarse el tipo de dato del array indicándolo como parámetro
array.astype(np.int32) --> Este método cambia el tipo de dato del array al indicado

INTRODUCTION TO NUMPY
Chapter 2: Selecting and Updating Data
arrary[index] --> Acceder a parte del array usando un índice (si hay varias dimensiones, separadas por "," pero no dentro de un
tuple). Dependiendo del índice se devolverá el subconjunto del array indicado.
np.sort(array) --> Ordena el array según el último eje si no le pasa indicación contraria. Si es un 2D array, se ordenará por columnas.
No se puede elegir ascendente o descente el orden.
np.sort(array, axis=0) --> En este caso se ordena por el primer eje, las filas.

Fancy indexing --> Filtrar y devolver los elementos del array usando una máscara (matriz que devuelve True/False según se cumpla la
condición)
np.where(condition) --> Devuelve un array con el listado de índices que cumplen la condición
np.where(condition, si_true, si_false) --> Devuelve un array con los valores si_true o si_false dependiendo de si se cumple o no la
condición

np.concatenate((array1, array2)) --> Concatenate por defecto en el primer eje. Ambos arrays deben tener la misma dimensión
np.delete(array, index_to_delete, axis=x)

INTRODUCTION TO NUMPY
Chapter 3: Array Mathematics!
.sum(axis=…, keepdims=True or False) --> Indicar el eje sobre el que se hace la operación (axis=0 --> devuelve la suma las filas para
cada "columna" // axis=1 --> devuelve la suma de las columnas para cada "fila"
.max() .min() .mean() .cusum()

np.vectorize(function) --> para vectorizar una función que no lo es

broadcasting --> Leer las dimensiones (shape) de derecha a izquierda y comparar entre arrays por parejas. Si la dimensión de la
pareja es igual o alguna es 1, es compatible. Si algún array tiene menos dimensiones, se compara igual con las existentes.

INTRODUCTION TO NUMPY
Chapter 4: Array Transformations
Abrir archivo y cargarlo en un array
with open('archivo_a_abrir.ext', 'rb' as file:
archivo_cargado=np.load(file)

Guardar un array en un archivo


with open('archivo_a_guardarr.ext', 'wb' as file:
np.save(file, array_a_guardar)

plt.imshow(pixel_array) --> Para plotear una imagen a partir de un arrary con los pixels RGB

np.flip(array, axis=int or tuple) --> Se puede indicar sólo un eje o una conjunto de ellos con la tupla
np.transpose(array, axes=tuple) --> Siempre todos los ejes especificados en la tupla

np.split(array, number_of_registers_in_new_dimension,axis=axis_to_split)
np.stack(list_of_arrays_to_stack, axis=new_dimension_position)

INTRODUCTION TO REGRESSION WITH STATSMODELS IN PYTHON


Chapter 1: Simple Linear Regression Modeling
statsmodels --> Más enfocado a insights
scikit-learn --> Más enfocado en predicciones

sns.scatterplot(x=series_name, y=series_name_2, data=dataframe)


sns.regplot(x=series_name, y=series_name_2, data=dataframe,ci=int or None)

statsmodels.formula.api.ols --> Ordinary Least Squared --> Para calcular las regresiones
modelo = ols("response_variable_name ~ explanatory_variable1_name + explanatory_variable2_name… ", data=dataframe) --> Hay que crear el
modelo primero. Si se pone "+0" se fuerza a que la constante sea 0. Útil si tenemos variable explanatory categórica en vez de numérica
modelo=modelo.fit() --> Lanzar el ajuste del modelo
modelo.params --> Una vez ajustado, para conocer los parámetros del ajuste realizado

INTRODUCTION TO REGRESSION WITH STATSMODELS IN PYTHON


Chapter 2: Predictions and model objects
model.predict(explanatory_data) --> devuelve las predicciones de "explanatory_data"

dataframe.assign(new_column_name=predicted_array) --> Crear columna en DataFrame

model.fittedvalues --> atributo del modelo que devuelve los valores predichos por el modelo para el conjunto de entreno
model.resid --> atributo del modelo que devuelve los residuales de valores reales - predichos por el modelo para el conjunto de entreno
model.summary() --> método del modelo que da un resumen de los parámetros estadísticos

plt.axis('equal') --> Sirve para que eje x y eje y tengan el mismo espaciado entre valores

GENERAL página 1
plt.axis('equal') --> Sirve para que eje x y eje y tengan el mismo espaciado entre valores
plt.axline(xy1 = (150,150), slope=1) --> Crea una línea que pasa por el 150 con una inclinación de 1

INTRODUCTION TO REGRESSION WITH STATSMODELS IN PYTHON


Chapter 3: Assesing model fit

model.rsquared --> Para calcular el coeficiente de determinación o R2 (en minúscula a veces si el modelo tiene sólo 1 variable indpendiente)
variable1.corr(variable2)**2 --> Coeficiente de determinación cuando es una regresión con 1 variable independiente,
RSE --> np.sqrt(model.mse_resid) --> Medida de los residuales. Para calcular los grados de libertad resta las variables utilizadas
RMSE --> Otra medida de los residuales. No resta las variables utilizadas

Residuos
Sns.residplot(x=x_series, y=y_series, data=dataframe, lowess=True) --> Dibuja los residuales y añade la tendencia lowess
La tendencía lowess debería ajustarse a línea horizontal en 0 si los residuales fueran una distribución normal
Q-Q plot
statsmodels.api.qqplot(data=model.resid, fit=True, line='45') --> El parámetro line dibuja una línea a 45º para ayudar a interpretar.
Scale-location ó raiz de los residuos estandarizados
np.sqrt(np.abs(model.get.influence().resid_studentized_internal)) --> Residual normalizado absoluto y se calcula su raíz

leverage --> Medida de lo lejos que se encuentra un punto/registro según el valor de sus variables independientes respecto al resto de p untos
model.get_influence().summary_frame()['hat_diag']
influence --> Medida de cuánto modifica al modelo quitar un punto/registro determinado del conjunto de datos.
model.get_influence().summary_frame()['cooks_d']

INTRODUCTION TO REGRESSION WITH STATSMODELS IN PYTHON


Chapter 4: Simple Logistic Regression Modeling
sns.displot(x=column_name1, data=dataframe, col=column_name2) --> Pinta histogramas de la variable column_name1 de los datos del
dataframe. Al indicar col, dividimos en tantos histogramas como valores distintos tiene column_name2

Modelo de regresión logística (funciona de manera equivalente a ols)


statsmodels.formula.api.logit('response_variable ~expanation_variable', data=dataframe) --> Modelo de regresión logística que permite calcular la
probabilidad
Se puede usar sns.regplot con logistic=True para dibujar gráfica de regresión logística
Para facilitar la representación, puede redondearse los valores predichos por el modelo: np.round(moodel.predict(data)) y rep resentarlo con un
sns.scatterplot--> Most likely outcome
Odds ratio --> Ratio de posibilidades
Es la probabilidad de que ocurra algo entre la probabilidad de que no lo ocurra: probabilidad_algo / (1 - probabilidad_algo)
Su representación es una línea curvada que no es fácil de comparar, sin embargo, si se representa el logarítmo decimal de est a probabilidad es
una recta que es fácil comparable

Recorte de pantalla realizado: 09/08/2022 19:59


* Referencia cursos interesantes en DATACAMP al final del capítulo

SAMPLING IN PYTHON
Chapter 1: Bias any stretch of the imagination
dataframe.sample(n=numer_of_samples) --> Devuelve un número de registros de manera aleatoria entre todos los registros

dataframe_or_dataframeSeries.hist(bins=np.arange(start, stop, step))


ó
plt.hist(x=series_to_plot, bins=int) --> También los bins puede ser el nº de agrupaciones del histograma

np.random.seed(int) --> Se define la semilla de aleatoriedad


Se pueden sacar números aleatorios de distintas distribuciones:

Recorte de pantalla realizado: 12/08/2022 10:06

SAMPLING IN PYTHON
Chapter 2: Don't get theory eyed
dataframe.sample(n=size, random_state=int) --> Se escoge una muestra random de n registros y se fija una semilla determinada para reproducibilidad

dataframe.iloc[::interval] --> Se extraen los registros del dataframe según interval del índice
dataframe.sample(frac=1) --> Mezcla aleatoriamente todos los registros. Ojo, reiniciar índice si se quiere utilizar una extracción sistemática que pueda considerarse aleatoria. Si
dejamos el índice previo, seguiremos el mismo orden previo.

dataframe['column_name`].value_counts(normalize=True) --> Contar los registros según una columna y normalizar sobre 1
dataframe.groupby('column_name').sample(frac=0.4, random_state=int) --> Sacamos una muestra del 40% de cada grupo existente en column_name para mantener su proporción en
población también en la muestra final.

GENERAL página 2
población también en la muestra final.
dataframe.groupby('column_name').sample(n=number, random_state=int) --> Sacamos una muestra de number registros de cada grupo existente en column_name para conseguir
que la proporción en la muestra sea igual para cada subgrupo de column_name. NO se mantiene la proporción de la población org inal.
dataframe.sample(n=size, weights=column_name) --> Extrae una muestra de n registros pero con un peso relativo indicado en column_name para cada registro

Cluster sampling
random.sample(list, k=4) --> Extraer 4 registro de list de manera pseudo-aleatoria
dataframeseries.isin(list) --> Devuelve una máscara con True/False según se cumple o no que coincide con algún valor de list
dataframeseries = dataframeseries.cat.remove_unused_categories() --> Al ser tipo de datos "category", se quitan las categorias no usadas en la nueva serie filtrada para evitar errores

Simple Random Sampling


Stratified Sampling
Cluster Sampling

SAMPLING IN PYTHON
Chapter 3: The n's justify the means
Función para sacar todas las combinaciones:
def expand_grid(data_dict):
rows = itertools.product(*data_dict.values())
return pd.DataFrame.from_records(rows,columns=data_dict.keys())

Desde <https://pandas.pydata.org/docs/user_guide/cookbook.html>
np.random.choice(list, size=n, replace=True) --> Se saca aleatoriamente una muestra de n registro de list, considerándose que se repone el valor sacado (se puede repetir)
np.std(ddof=0 or 1) --> Se usa 0 para el cálculo de población y se usa 1 si es una muestra de la población

SAMPLING IN PYTHON
Chapter 4: Pull Your Data Up By Its Bootstraps
Simple Random Sampling without replacement --> Sample
Simple Random Sampling without replacement --> Resample
Bootstrapping --> Opposite of sampling
Sampling: going from a population to a smaller sample
Bootstrapping: building up a theoretical population from the sample
Standard error
series.sample(frac=1, replace=True) --> Crear un bootstrap
Standard error --> El cálculo de la desviación estándar de un bootstrap (np.std(bootstrap, ddof=1)) no devuelve un valor equivalente a la desviación estándar de la población, por
eso se le llama error estándar. Si multiplicamos el error estándar por la raíz del número de muestras del bootstrap sí obtenemos un valor equivalente a la desviación estándar de
la población: Population std.dev ≈ std.error_bootstrap x sqrt(sample_size)
Confidence intervals (quantile method and standard error method)
Quantile method
lower= np.quantile(data, 0.025)
upper = np.quantile(data, 0.975)
Standard error method
point_estimate = np.mean(data)
std_error= np.std(data, ddof=0 or 1)
from scipy.stats import norm
lower = norm.ppf(0.025, loc=point_estimate, scale=std_error)
upper = norm.ppf(0.975, loc=point_estimate, scale=std_error)

Recorte de pantalla realizado: 13/08/2022 12:36

Recomendaciones de cursos interesantes

HYPOTHESIS TESTING IN PYTHON


Chapter 1: Yum, that dish tests good
standardized value = (value-mean)/(standard deviation) --> Una forma de estandarizar un valor y que no dependa de su magnitud y puede ser comparable
z-score = (sample stat - hypoth. param. value)/(standard error)

null hypothesis (H_0) --> La idea existente que en principio se asume como cierta
alternative hypothesis (H_A) --> La propuesta que se va comprobar
Si se tienen evidencias de que con la muestra la H_A es verdadera, se cancela la hipóstesis nula, si no, se asume la hipótesi s nula como verdadera

Recorte de pantalla realizado: 13/08/2022 14:51

GENERAL página 3
Recorte de pantalla realizado: 13/08/2022 14:51

p-values (0-1) --> Probabilidad de obtener un resultado asumiendo que la hipótesis nula es verdadera
Valores altos de p-value soportan que la hipótesis nula es cierta, valores bajo dan evidencia de que la hipótesis nula no sea verdadera
Se calcula el p-value con:
scipy.stats.norm.cdf(z_score, loc=0, scale=1)
left-tailed --> norm.cdf(…)
right-tailed --> 1 - norm.cdf(…)

significance level of hypothesis test (alpha) --> Es el umbral para decir que no hay duda. Debe establecerse previo a realizar el análisis.
Si p<=alpha, se descarta la hipótesis nula si no, se acepta la hipótesis nula.
Confidence intervals --> Normalmente se coge el complementario a 1 de alpha (1-alpha). Una muestra con alpha=0.05 --> ci = 0.95 --> se cogen los cuantiles alpha/2 y (1-alpha/2)
Types of error
Type I --> Falso positivo (aceptar hipótesis alternativa cuando realmente la nula es la correcta)
Type II --> Falso negativo (aceptar hipótesis nula como verdadera cuando la alternativa es la correcta)

HYPOTHESIS TESTING IN PYTHON


Chapter 2: Pass me ANOVA glass of iced t
Hypothesis testing workflow:

Cuando se usan en la hipótesis dos muestras distintas:

Degrees of freedom = total number of samples used - statistics used --> máximo número de variables independientes in la muestra de datos
Si utilizamos la aproximación para el error estándar en vez de calcularlo a través del uso de bootstraps, se utiliza la distr ibución t y no la distribución normal para el cálculo de p -value
scipy.stats.t.cdf(t_stat, df=degrees_of_freedom)

Paired data --> datos independientes de la muestra que provienen de otra muestra independiente del mismo grupo observado. Mismo individuo, misma localización, marido/mujer, hermanos…
Cálculo del p-value con paquete pingouin para simplificarlo
pingouin.ttest(x=variable_conjunta_muestra, y=0, alternartive= 'less' or 'equal' or 'greater')
Si queremos hacer el ttest para una variable de parejas (diferencia de medias) podemos incluir ambas variables (x,y) pero ind icando con el parámetro paired=True sino los valores de p-value obtenidos podrían
ser algo superiores y dar opción a falsos negativos (no rechazar hipótesis nula)
pingouin.ttest(x=variable1_muestra, y=variable2_muestra, paired=True, alternartive= 'less' or 'equal' or 'greater')

Análisis ANOVA
pingouin.anova(data=dataframe, dv="dependant_variable", between="independant_variable", padjust=…) --> Análisis de media de cada grupo para saber si son significamente distintas entre ellas. Hipótesis nula
es que son iguales entre ellas. padjust es un parámetro para ajustar el valor de p -value para ser más o menos restrictivo en el análisis

Se puede hacer también un análisis por par de grupo posible:


pingouin.pairwise_ttests(data=dataframe, dv="dependant_variable", between="independant_variable", padjust=…)

HYPOTHESIS TESTING IN PYTHON


Chapter 3: Letting the categoricals out of the bag
Standarized test statistic for proportions

GENERAL página 4
Comparing two proportions

Existe una función en statsmodels.stats.proportion (proportions_ztest) para hacer más rápido el cálculo de z -score y el p-value:

Chi-square test --> Test para ver si dos variables categóricas son independientes. Dentro del paquete de pingouin hay una función para realizar el cálculo
pingouin.chi2_independence(data=dataframe, x ='series1', y='series2')

Casi siempre los test chi2 son right-tailed

Comprobar si una teoría es válida, comprobamos con chi2.


1) Creamos la hipótesis. Por ejemplo establecemos una distribución de proporciones para una variable categórica y la hipótesis nula es que ésta distribución se cumple en los datos reales
2) Visualizamos tanto la distribución de la hipótesis como la distribución con los datos reales
3) Realizamos un test de chi2 de la bondad de ajuste pasando a la función frecuencias observadas y frecuencias de la hipótesis a comprobar

HYPOTHESIS TESTING IN PYTHON


Chapter 4: Time to define the relationship
(pending)

GENERAL página 5
Recorte de pantalla realizado: 15/08/2022 17:21

Recorte de pantalla realizado: 15/08/2022 17:21

Recorte de pantalla realizado: 15/08/2022 17:21

Recorte de pantalla realizado: 15/08/2022 17:21

Recorte de pantalla realizado: 15/08/2022 17:22

GENERAL página 6
Recorte de pantalla realizado: 15/08/2022 17:22

Recorte de pantalla realizado: 15/08/2022 17:22

Recorte de pantalla realizado: 15/08/2022 17:22

Recorte de pantalla realizado: 15/08/2022 17:23

GENERAL página 7
Recorte de pantalla realizado: 15/08/2022 17:23

Recorte de pantalla realizado: 15/08/2022 17:23

Recorte de pantalla realizado: 15/08/2022 17:24

Recorte de pantalla realizado: 15/08/2022 17:24

GENERAL página 8
Recorte de pantalla realizado: 15/08/2022 17:24

Recorte de pantalla realizado: 15/08/2022 17:24

Recorte de pantalla realizado: 15/08/2022 17:45

Recorte de pantalla realizado: 15/08/2022 17:46

GENERAL página 9
Recorte de pantalla realizado: 15/08/2022 17:46

GENERAL página 10

También podría gustarte