{"id":474,"date":"2021-08-30T17:30:00","date_gmt":"2021-08-30T15:30:00","guid":{"rendered":"https:\/\/www.educagis.com\/wpcarlos\/?p=474"},"modified":"2021-08-31T00:15:36","modified_gmt":"2021-08-30T22:15:36","slug":"introduccion-a-la-ciencia-de-datos-con-julia-parte-2","status":"publish","type":"post","link":"https:\/\/www.educagis.com\/wpcarlos\/2021\/08\/30\/introduccion-a-la-ciencia-de-datos-con-julia-parte-2\/","title":{"rendered":"Introducci\u00f3n a la ciencia de datos con Julia- Parte 2"},"content":{"rendered":"\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\"><h2 class=\"simpletoc-title\">Tabla de contenidos<\/h2>\n<ul class=\"simpletoc-list\">\n<li><a href=\"#introduccion\">Introducci\u00f3n<\/a>\n\n<\/li>\n<li><a href=\"#encadenamiento-de-codigo-en-julia\">Encadenamiento de c\u00f3digo en Julia<\/a>\n\n\n<ul><li>\n<a href=\"#uso-de-dataframesmetajl\">Uso de DataFramesMeta.jl<\/a>\n\n<\/li>\n<li><a href=\"#uso-del-queryversejl\">Uso del Queryverse.jl<\/a>\n\n<\/li>\n<\/ul>\n<li><a href=\"#reflexion-final\">Reflexi\u00f3n Final<\/a>\n<\/li><\/ul><\/div><\/div>\n<\/div>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"introduccion\">Introducci\u00f3n<\/h2>\n\n\n<p class=\"has-drop-cap\">En esta oportunidad vamos a continuar presentando las opciones que tenemos empleando paquetes de Julia orientados a la ciencia de datos. Se tiene como principal objetivo lograr obtener resultados similares a los vistos en el <a rel=\"noreferrer noopener\" href=\"https:\/\/www.educagis.com\/wpcarlos\/2021\/08\/\" target=\"_blank\">post anterior<\/a>, pero en esta oportunidad realizarlo en menos pasos aprovechando las ventajas de algunos paquetes que nos permiten desarrollar c\u00f3digo digamos \u00abencadenado\u00bb  para una ejecuci\u00f3n simult\u00e1nea de operaciones, con la finalidad de preparar tablas de resultados seg\u00fan algunos criterios establecidos. Por otro lado, nos plantemos el reto de incluir la siguiente etapa del llamado \u00ab<em>Proceso de an\u00e1lisis de datos<\/em>\u00ab, es decir, la visualizaci\u00f3n a trav\u00e9s de la generaci\u00f3n de gr\u00e1ficos, los mismos que vamos a incluir como parte del c\u00f3digo elaborado.<\/p>\n\n\n<h2 class=\"wp-block-heading\" id=\"encadenamiento-de-codigo-en-julia\">Encadenamiento de c\u00f3digo en Julia<\/h2>\n\n\n<p>En Julia como ya lo venimos adelantando existe la opci\u00f3n de \u00abencadenar\u00bb c\u00f3digo empleando los llamados operadores <em>Pipe<\/em> (<em>|><\/em>). Para lograr nuestro objetivo vamos a emplear otros paquetes de Julia, nos referimos a <a rel=\"noreferrer noopener\" href=\"https:\/\/www.queryverse.org\/\" target=\"_blank\">Queryverse<\/a>, siendo uno de los m\u00e1s completos para ciencia de datos. De la misma manera exploraremos al paquete <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/jkrumbiegel\/Chain.jl\" target=\"_blank\">Chain.jl<\/a> como otra alternativa en manipulaci\u00f3n de datos encadenando c\u00f3digo. En resumen vamos a demostrar las ventajas que tenemos al usar dos alternativas, primero la combinaci\u00f3n <code>DataFrames<\/code>+<code>DataFramesMeta<\/code> y luego el uso del paquete <code>Queryverse<\/code>, que incluye varios paquetes para el manejo de datos tabulares, incluyendo la posibilidad de generar gr\u00e1ficos.<\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"uso-de-dataframesmetajl\">Uso de DataFramesMeta.jl<\/h3>\n\n\n<p>Si revisamos la documentaci\u00f3n del paquete <a rel=\"noreferrer noopener\" href=\"https:\/\/juliadata.github.io\/DataFramesMeta.jl\/stable\/\" target=\"_blank\">DataFramesMeta<\/a>, apreciamos que <code>@chain<\/code> desde <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/jkrumbiegel\/Chain.jl\" target=\"_blank\">Chain.jl<\/a>, forma parte de la lista de macros disponibles, es decir que podemos emplearlo para unir m\u00e1s de un macro a la vez. A continuaci\u00f3n compartimos el c\u00f3digo elaborado en Julia, con la diferencia que emplearemos otra fuente de datos, el mismo presenta mayores detalles como por ejemplo la altitud de los centros poblados.<\/p>\n\n\n\n<script src=\"https:\/\/gist.github.com\/ccarbajal16\/84423aef1e4a68b1b92c3e54ab118e09.js\"><\/script>\n\n\n\n<p>Si revisamos el c\u00f3digo, vemos que iniciamos con el uso de los paquetes DataFrames y CSV para incorporar nuestros datos (<code>table_ccpp_inei.csv<\/code>), luego empleamos el macro <code>@chain<\/code> con la finalidad de ir encadenando macros como funciones. Un paso importante es el uso del macro <code>@combine<\/code>, que a diferencia de lo que vimos anteriormente, nos facilita crear y nombrar nuevas columnas definiendo simplemente funciones sobre nuestras columnas de origen.  Para el caso del ordenamiento, se menciona la existencia del macro <code>@orderby<\/code>, pero al no funcionar sobre datos agrupados, empleamos el ya conocido <code>sort<\/code>. De la misma manera apreciamos el uso del macro <code>@subset<\/code>, que nos permite realizar filtros, seleccionando un subconjunto de filas sobre las columnas con valores num\u00e9ricos. Tambi\u00e9n empleamos el macro <code>@transform<\/code> para incorporar nuevas columnas de datos realizando algunas operaciones, teniendo la ventaja de poder asignar directamente los nombres a las nuevas columnas.<\/p>\n\n\n\n<p>El resultado de este c\u00f3digo se aprecia en la siguiente figura:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/salida_tutorial2.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/salida_tutorial2.png\" alt=\"\" class=\"wp-image-509\" width=\"533\" height=\"431\" srcset=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/salida_tutorial2.png 711w, https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/salida_tutorial2-300x242.png 300w\" sizes=\"auto, (max-width: 533px) 85vw, 533px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n<h3 class=\"wp-block-heading\" id=\"uso-del-queryversejl\">Uso del Queryverse.jl<\/h3>\n\n\n<p>Como lo menciona su documentaci\u00f3n oficial, <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/queryverse\/Queryverse.jl\" target=\"_blank\">Queryverse.jl<\/a> es un metapaquete que re\u00fane varios paquetes para manejar datos en Julia, teniendo como su principal objetivo facilitar la instalaci\u00f3n de todo el Queryverse de una vez. En el presente post exploraremos algunos de las ventajas de \u00e9stos paquetes, en especial para la manipulaci\u00f3n de datos y la visualizaci\u00f3n. Para mostrar todo el ecosistema de Queryverse con los paquetes que lo integran se elabor\u00f3 el siguiente diagrama.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/queryverse.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/queryverse-1024x724.png\" alt=\"\" class=\"wp-image-498\" width=\"521\" height=\"418\"\/><\/a><figcaption><span class=\"has-inline-color has-medium-gray-color\"><em>Seg\u00fan informaci\u00f3n de: <a rel=\"noreferrer noopener\" href=\"https:\/\/www.queryverse.org\/packages\/\" target=\"_blank\">https:\/\/www.queryverse.org\/packages\/<\/a><\/em><\/span><\/figcaption><\/figure><\/div>\n\n\n\n<p>Vamos a compartir el c\u00f3digo en donde empleamos <code>Queryverse<\/code>, el mismo asume que fue instalado, siguiendo los pasos ya vistos anteriormente. <\/p>\n\n\n\n<script src=\"https:\/\/gist.github.com\/ccarbajal16\/cc4ff4b644ad5cfa3269f717c95c188c.js\"><\/script>\n\n\n\n<p>En este c\u00f3digo hay muchas cosas por analizar, empezaremos con el hecho que solo hemos activado un solo paquete, pero como ya vimos integra varios otros que nos permiten trabajar. Como se aprecia el c\u00f3digo se inicia con abrir nuestra tabla de datos, ahora simplemente usamos <code>load()<\/code>, esto gracias al paquete <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/queryverse\/CSVFiles.jl\" target=\"_blank\">CSVFiles.jl<\/a>, desde aqu\u00ed empezamos a encadenar procesos, siendo uno de los primeros la realizaci\u00f3n de un filtro doble con <code>@filter<\/code>, que forma parte del paquete <a rel=\"noreferrer noopener\" href=\"https:\/\/www.queryverse.org\/Query.jl\/stable\/\" target=\"_blank\">Query.jl<\/a>, como la mayor\u00eda que estaremos usando. Algo nuevo que vemos sucede luego de hacer el agrupamiento con <code>@groupby<\/code>, porque debemos generar una <code>named tuple<\/code>, para establecer nuestras columnas de datos agrupados, emplearemos para eso el macro <code>@map<\/code> y dentro de <code>{ }<\/code> definimos los valores.<\/p>\n\n\n\n<p>Para el caso del ordenamiento de datos, vamos a emplear <code>@orderby_descending<\/code> sobre el campo donde se almacena la suma de la poblaci\u00f3n por distrito, logrando tener los valores mayores en las primeras filas. Ahora viene algo interesante, el uso del macro <code>@tee<\/code>, que en realidad si apreciamos el c\u00f3digo fue empleado durante la generaci\u00f3n de salidas, pero que nos permite que el c\u00f3digo no se cierre y pueda realizar otras acciones, en nuestro caso, quer\u00edamos generar un gr\u00e1fico, pero antes, guardar en formatos tanto de CSV como XLSX nuestro resultado. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/tabla_excel1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/tabla_excel1.png\" alt=\"\" class=\"wp-image-514\" width=\"397\" height=\"482\" srcset=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/tabla_excel1.png 529w, https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/tabla_excel1-247x300.png 247w\" sizes=\"auto, (max-width: 397px) 85vw, 397px\" \/><\/a><\/figure>\n\n\n\n<p>En relaci\u00f3n a la generaci\u00f3n de gr\u00e1ficos, ahora simplemente generaremos un simple gr\u00e1fico de barras a trav\u00e9s de <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/queryverse\/VegaLite.jl\" target=\"_blank\">VegaLite.jl<\/a> usando <code>@vlplot<\/code>, pero que en una pr\u00f3xima entrega ser\u00e1 dedicado a mayor profundidad este como otros paquetes similares. Finalmente, tenemos la oportunidad tambi\u00e9n de salvar nuestro gr\u00e1fico en formato PNG.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/plot1.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"550\" height=\"348\" src=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/plot1.png\" alt=\"\" class=\"wp-image-517\" srcset=\"https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/plot1.png 550w, https:\/\/www.educagis.com\/wpcarlos\/wp-content\/uploads\/2021\/08\/plot1-300x190.png 300w\" sizes=\"auto, (max-width: 550px) 85vw, 550px\" \/><\/a><\/figure>\n\n\n<h2 class=\"wp-block-heading\" id=\"reflexion-final\">Reflexi\u00f3n Final<\/h2>\n\n\n<p>En esta oportunidad se pudo ver la gran flexibilidad que tenemos al emplear sobre todo Queryverse, aunque el uso de macros con DataFramesMeta nos permite realizar operaciones r\u00e1pidas aprovechando sobre todo si trabajamos con DataFrames. Algo que no debo dejar de pasar, es el hecho que es muy recomendable no mezclar ambos procedimientos o conjunto de paquetes, sobre todo porque existen algunos macros que pueden originar conflictos por tener la misma denominaci\u00f3n. En resumen, a pesar que solo es una introducci\u00f3n, hemos vistos varias cosas interesantes, aunque es verdad, podemos seguir explorando y profundizando mucho m\u00e1s, adem\u00e1s est\u00e1 todav\u00eda pendiente el dedicarle toda una entrada al proceso de visualizaci\u00f3n de datos, por ahora solo se incluyo un simple gr\u00e1fico de barras, pero Julia tiene todo un ecosistema muy variado para realizar todo lo que nos podemos imaginar.<\/p>\n\n\n\n<p>Para quienes deseen reproducir todos los c\u00f3digos, se actualiz\u00f3 el repositorio <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/ccarbajal16\/IntroDataScience\" target=\"_blank\">https:\/\/github.com\/ccarbajal16\/IntroDataScience<\/a>. Muy pronto tambi\u00e9n se elaborar\u00e1 un video al respecto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n En esta oportunidad vamos a continuar presentando las opciones que tenemos empleando paquetes de Julia orientados a la ciencia de datos. Se tiene como principal objetivo lograr obtener resultados similares a los vistos en el post anterior, pero en esta oportunidad realizarlo en menos pasos aprovechando las ventajas de algunos paquetes que nos permiten &hellip; <a href=\"https:\/\/www.educagis.com\/wpcarlos\/2021\/08\/30\/introduccion-a-la-ciencia-de-datos-con-julia-parte-2\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \u00abIntroducci\u00f3n a la ciencia de datos con Julia- Parte 2\u00bb<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[5],"tags":[19,18],"class_list":["post-474","post","type-post","status-publish","format-standard","hentry","category-development_gis","tag-data-science","tag-julia"],"_links":{"self":[{"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/posts\/474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/comments?post=474"}],"version-history":[{"count":20,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/posts\/474\/revisions"}],"predecessor-version":[{"id":520,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/posts\/474\/revisions\/520"}],"wp:attachment":[{"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/media?parent=474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/categories?post=474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.educagis.com\/wpcarlos\/wp-json\/wp\/v2\/tags?post=474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}