<jupyter_start><jupyter_text>Lectura de los datos<jupyter_code>vehiculos = pd.read_pickle("./Data/vehiculos_variables_agrupadas.pkl")
vehiculos.head()
vehiculos.dtypes<jupyter_output><empty_output><jupyter_text>Distribución de variables numéricasPodemos usar histogramas/diagrama de barras para ver la distribución de una variable<jupyter_code>vehiculos["co2"].plot.hist()<jupyter_output><empty_output><jupyter_text>También podemos usar un diagrama KDE para ver la función estimada de la distribución de una variable<jupyter_code>vehiculos["co2"].plot.kde()<jupyter_output><empty_output><jupyter_text>Para poder analizar la distribución de las variables numéricas de una forma más sencilla pordemos usar la librería ipywidgets, para ello tenemos que definir una función que dibuje el kde/histograma de una forma genérica y pasarle las series de la columnas que queremos analizar.<jupyter_code>def distribucion_variable_numerica(df, col):
    df[col].plot.kde()
    plt.xlabel("Distribución de la variable {}".format(col))
    plt.show()
columnas_numericas = vehiculos.select_dtypes(["int", "float"]).columns
interact(distribucion_variable_numerica, col=columnas_numericas, df=fixed(vehiculos))<jupyter_output><empty_output><jupyter_text>A excepción de la variable cilindros, el resto parece seguir una distribucón normal. Para ver si sigue una distribución normal podemos realizar un gráfico de probabilidades.<jupyter_code>def normalidad_variable_numerica(col):
    stats.probplot(vehiculos[col], plot=plt)
    plt.xlabel('Diagrama de Probabilidad(normal) de la variable {}'.format(col))
    plt.show()
interact(normalidad_variable_numerica, col=columnas_numericas, df=fixed(vehiculos));<jupyter_output><empty_output><jupyter_text>Las variables desplazamiento y cilindros no siguen una distribución normal, ya que de lo contrario mostraría la línea de 45º como sucenden en las otras variables.Parece que siguen una distribución normal (co2, consumo_litros_milla), no obstante, conviene asegurarse haciendo un test de normalidad. En un test de normalidad, lo que queremos es rechazar la hipótesis nula de que la variable a analizar se ha obtenido de una población que sigue una distribución normal. Para un nivel de confianza de 95%, rechazamos la hipótesis nula si el p-value es inferior a 0.05. Esto es, si se obtiene un valor P (p-value) menor de 0.05, significa que las probabilidades de que la hipótesis nula sean ciertas es tan baja (menos de un 5%) que la rechazamos.<jupyter_code>for num_col in columnas_numericas:
    _, pval = stats.normaltest(vehiculos[num_col])
    if(pval < 0.05):
        print("Columna {} no sigue una distribución normal".format(num_col))<jupyter_output>Columna co2 no sigue una distribución normal
Columna consumo_litros_milla no sigue una distribución normal<jupyter_text>Como podemos observar ninguna de la variables númericas sigue una distribución normal de forma correcta.  Distribución variables categóricasLa mejor forma de analizar la distribución de una variable categórica es usando value_count.<jupyter_code>def distribucion_variable_categorica(col, df):
    df[col].value_counts(ascending=True, normalize=True).tail(20).plot.barh()
    plt.show()
columnas_categoricas = vehiculos.select_dtypes(["object", "category"]).columns
interact(distribucion_variable_categorica, col=columnas_categoricas, df=fixed(vehiculos))<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07696844588616927, 'fraction_numerical': 0.005897965202005308, 'mean_word_length': 6.943793911007026, 'pattern_counts': {'":': 0, '<': 29, '<?xml version=': 0, '>': 28, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '14077', 'license': 'MIT', 'n_tokens_mistral': 1152, 'n_tokens_neox': 1139, 'n_words': 323, 'path': 'Analisis_Y_Procesado_Datos/Analisis/5_DistribucionVariables.ipynb', 'repo_name': 'mariousm/Data-Science-Course', 'size': '3391'}