{"id":2027,"date":"2020-04-22T08:30:33","date_gmt":"2020-04-22T13:30:33","guid":{"rendered":"https:\/\/naps.com.mx\/blog\/?p=2027"},"modified":"2020-04-22T10:04:34","modified_gmt":"2020-04-22T15:04:34","slug":"python-distribucion-de-variables","status":"publish","type":"post","link":"https:\/\/naps.com.mx\/blog\/python-distribucion-de-variables\/","title":{"rendered":"Fases del an\u00e1lisis de datos usando Python: Distribuci\u00f3n de Variables"},"content":{"rendered":"<p>Veremos la siguiente fase del an\u00e1lisis de datos usando Python: Distribuci\u00f3n de Variables. Usaremos histogramas, gr\u00e1fico de probabilidad y test de normalidad.<\/p>\n<p><!--more--><\/p>\n<p>Las primeras fases las puedes encontrar en el siguiente enlace:\u00a0<a href=\"https:\/\/naps.com.mx\/blog\/fases-del-analisis-de-datos-usando-python\/\">https:\/\/naps.com.mx\/blog\/fases-del-analisis-de-datos-usando-python\/<\/a><\/p>\n<h2>Fase 4. Distribuci\u00f3n de variables<\/h2>\n<p>Librer\u00edas a utilizar<\/p>\n<pre class=\"lang:python decode:true \">import pandas as pd\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\nimport seaborn as sns<\/pre>\n<p>Cargar el archivo generado en el <a href=\"https:\/\/naps.com.mx\/blog\/fases-del-analisis-de-datos-usando-python\/\">paso anterior<\/a>:<\/p>\n<pre class=\"lang:python decode:true \">vehiculos = pd.read_pickle(\"vehiculospaso3.pkl\")<\/pre>\n<p>Debemos ver c\u00f3mo interpreta Pandas los datos, es decir, qu\u00e9 tipo de dato le asigna a cada uno.<\/p>\n<pre class=\"lang:python decode:true \">print(vehiculos.dtypes)<\/pre>\n<p>Lo que nos arroja:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2031\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos.png\" alt=\"python distribuci\u00f3n de variables - tipos de datos\" width=\"436\" height=\"348\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos.png 1172w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos-300x240.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos-768x613.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-tipos-de-datos-1024x818.png 1024w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><\/a><\/p>\n<p>Observamos que hay variables num\u00e9ricas y variables categ\u00f3ricas (que creamos en el paso anterior).<\/p>\n<p>Lo que vamos a hacer es analizar la distribuci\u00f3n de las variables<\/p>\n<h2>Distribuci\u00f3n de variables num\u00e9ricas<\/h2>\n<h3>Histogramas<\/h3>\n<p>Podemos crear un histograma para ver la distribuci\u00f3n de una variable. Por ejemplo, tenemos una columna llamada co2, donde se registra el nivel de contaminaci\u00f3n que emite cada veh\u00edculo. \u00bfC\u00f3mo es la distribuci\u00f3n de \u00e9sta variable? Creamos un histograma para esa columna.<\/p>\n<pre class=\"lang:python decode:true \">vehiculos['co2'].plot.hist();<\/pre>\n<p>Recuerda a\u00f1adir plt.show() si ejecutas tus programas desde l\u00ednea de comandos.<\/p>\n<p>El histograma se muestra de \u00e9sta forma:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2033\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma.png\" alt=\"python distribuci\u00f3n de variables - histograma\" width=\"610\" height=\"444\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma.png 1160w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma-300x218.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma-768x559.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-histograma-1024x745.png 1024w\" sizes=\"auto, (max-width: 610px) 100vw, 610px\" \/><\/a><\/p>\n<p>Podemos hacer lo mismo con el resto de variables num\u00e9ricas. Observamos que al parecer siguen una distribuci\u00f3n normal. Recordar\u00e1s la t\u00edpica forma de \u00abcampana\u00bb que tiene una distribuci\u00f3n normal. Es importante saber si \u00a0nuestras variables siguen una distribuci\u00f3n normal dado que muchos algoritmos asumen \u00e9ste tipo de distribuci\u00f3n.<\/p>\n<h3>Gr\u00e1fico de probabilidad<\/h3>\n<p>Otra forma de comprobar esto es usando un gr\u00e1fico de probabilidad.<\/p>\n<p>Vamos a crear la siguiente funci\u00f3n que utiliza la librer\u00eda scipy:<\/p>\n<pre class=\"lang:python decode:true \">from scipy import stats\r\ndef normalidad_variable_numerica(col):\r\n    stats.probplot(vehiculos[col], plot=plt)\r\n    plt.xlabel('Diagrama de Probabilidad(normal) de la variable {}'.format(col))\r\n    plt.show()<\/pre>\n<p>Vamos a probar con la misma columna de hace un momento: co2. Cuanto m\u00e1s se parezca nuestra gr\u00e1fica a una l\u00ednea de 45 grados, m\u00e1s normal ser\u00e1.<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2034\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad.png\" alt=\"python distribuci\u00f3n de variables - grafico de probabilidad\" width=\"559\" height=\"439\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad.png 1160w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad-300x236.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad-768x604.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-grafico-de-probabilidad-1024x805.png 1024w\" sizes=\"auto, (max-width: 559px) 100vw, 559px\" \/><\/a><\/p>\n<p>En el caso de la variable co2, se ajusta bastante a una distribuci\u00f3n normal.<\/p>\n<h3>Test de normalidad<\/h3>\n<p>Otra forma de asegurarse de que se sigue una distribuci\u00f3n normal es realizando un test de normalidad.<\/p>\n<pre class=\"lang:python decode:true\">columnas_numericas = vehiculos.select_dtypes(['int', 'float']).columns\r\nfor num_col in columnas_numericas:\r\n    _, pval = stats.normaltest(vehiculos[num_col])\r\n    if(pval &lt; 0.05):\r\n        print(\"Columna {} no sigue una distribuci\u00f3n normal\".format(num_col))<\/pre>\n<p>En un test de normalidad, aceptamos o rechazamos que una variable sigue una distribuci\u00f3n normal, para, en el caso de un nivel de confianza de 95%, el pval sea menor o mayor a 0.05. El c\u00f3digo anterior est\u00e1 dise\u00f1ado para probar todas las columnas num\u00e9ricas que encuentre.<\/p>\n<p>Como podr\u00e1s observar, estrictamente hablando, ninguna de nuestras variables sigue una distribuci\u00f3n normal.<\/p>\n<h2>Distribuci\u00f3n de variables categ\u00f3ricas<\/h2>\n<p>Te dejo una funci\u00f3n que nos permite observar la distribuci\u00f3n de una variable categ\u00f3rica. Recuerda que en el paso anterior creamos variables categ\u00f3ricas para simplificar el an\u00e1lisis de datos. Probemos con clase_tipo, una variable donde clasificamos los tipos de veh\u00edculos disponibles.<\/p>\n<pre class=\"lang:python decode:true \">def distribucion_variable_categorica(col):\r\n    vehiculos[col].value_counts(ascending=True,normalize=True).tail(20).plot.barh()\r\n    plt.show()\r\ndistribucion_variable_categorica('clase_tipo')<\/pre>\n<p>El gr\u00e1fico que observamos es:<\/p>\n<p><a href=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2036\" src=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica.png\" alt=\"python distribuci\u00f3n de variables - variable categorica\" width=\"550\" height=\"402\" srcset=\"https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica.png 1152w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica-300x219.png 300w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica-768x561.png 768w, https:\/\/naps.com.mx\/blog\/wp-content\/uploads\/2020\/04\/python-distribuci\u00f3n-de-variables-variable-categorica-1024x748.png 1024w\" sizes=\"auto, (max-width: 550px) 100vw, 550px\" \/><\/a><\/p>\n<p>En \u00e9ste caso, observamos que la clase mayoritaria de veh\u00edculos es la de coches peque\u00f1os, con un 35% del total.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Veremos la siguiente fase del an\u00e1lisis de datos usando Python: Distribuci\u00f3n de Variables. Usaremos histogramas, gr\u00e1fico de probabilidad y test de normalidad.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"amp_status":"","footnotes":""},"categories":[52],"tags":[266,281,283,230,282],"class_list":["post-2027","post","type-post","status-publish","format-standard","hentry","category-estadistica","tag-analisis-de-datos","tag-distribucion-normal","tag-grafico-de-probabilidad","tag-python","tag-test-de-normalidad"],"_links":{"self":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2027","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=2027"}],"version-history":[{"count":6,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2027\/revisions"}],"predecessor-version":[{"id":2049,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/posts\/2027\/revisions\/2049"}],"wp:attachment":[{"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=2027"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=2027"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/naps.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=2027"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}