class: center, middle, inverse, title-slide # Introducción a la programación y al análisis de datos ## Programación para el análisis de datos ### Departamento de Ciencias Sociales, UCU - Martín Opertti --- class: inverse, center, middle # Presentaciones --- ## Presentaciones - ¿Cómo se llaman? - ¿Qué carrera están cursando? - Sensaciones y experiencia con programación, análisis de datos y ciencia de datos o "data science". - ¿En qué les gustaría trabajar? --- class: inverse, center, middle # Análisis de datos --- ## Análisis de datos .content-box-green[*"Data analysis is the process by which data becomes understanding, knowledge and insight".* Hadley Wickham ] -- .center[ <img src="ima/flow.svg" width="600px" /> ] .right[Fuente: R4DS] --- ## ¿Por qué analizar datos? .content-box-green[ *"In God we trust, others must bring data".* W. E. Deming] -- - **Investigación** -- - **Mercado laboral** -- - **Revolución de los datos y las computadoras** --- ## Ciencia de datos .center[ <img src="ima/diagrama.png" width="600px" /> ] --- class: inverse, center, middle # Softwares estadísticos y programación --- ## Softwares estadísticos Los softwares o paquetes estadísticos son programas informáticos diseñado para llevar a cabo análisis estadísticos. Algunos de los más utilizados son SPSS, Stata, SAS o R. .center[ <img src="ima/softwares.png" width="350px" /> ] .right[Fuente: R4DS] --- ## Modalidades de uso de softwares estadísticos - Point and click o GUI (Interfaz gráfica del usuario) - Programación .center[ <img src="ima/gui_cli.png" width="400px" /> ] --- class: inverse, center, middle # ¿Por qué programar? --- # ¿Por qué programar? .center[ <img src="ima/awful_gui.png" width="750px" /> ] .right[Fuente: https://www.brodrigues.co/] --- # ¿Por qué programar? - El error de Reinhart y Rogoff -- - El trabajo de Reinhart y Rogoff mostró que el crecimiento económico real promedio se desacelera (una disminución del 0,1 %) cuando la deuda de un país aumenta a más del 90 % del producto interno bruto (PIB), y esta cifra del 90 % se empleó repetidamente en argumentos políticos sobre austeridad -- - Olvidaron seleccionar una fila que contenía 5 de los 20 países analizados, y el declive de 0.1% se transformaba en un crecimiento de 2.2% -- - ¿Qué podría haber sido distinto si Reinhart y Rogoff hubieran utilizado un lenguaje de programación? --- ## ¿Por qué programar? - **Eficiencia:** Si bien programar llevará más tiempo al principio, rápidamente permite ahorrar mucho tiempo en comparación a tareas realizadas a través de una interfaz gráfica. -- - **Más posibilidades:** En los softwares estadísticos tradicionales muchas operaciones (las más complejas o especificas) suelen no estar disponibles en la interfaz gráfica por lo que solo se pueden realizar mediante el uso de código. -- - **Recolección de datos:** Saber programar abre la posibilidad para la recolección de datos que no es posible o es muy costosa manualmente. -- - **Reproducibildiad:** El análisis de datos mediante programación mejora la transparencia y reproducibilidad en el proceso de generación de conocimiento -- - **Colaboración:** La programación abre la puerta para una colaboración mucho más sencilla y eficiente. --- class: inverse, center, middle # Sobre del curso --- ## Objetivos generales - Aprender a estructurar, manipular, analizar y visualizar datos -- - Familiarizarse con técnicas de programación en general -- - Conocer los distintos usos y posibles aplicaciones de Stata, R y Python -- - .bold[Aprender a aprender: este curso no es solo aprender las operaciones que vamos a ver en clase, es para aprender a resolver problemas nuevos de forma autónoma.] --- ## Objetivos específicos - Adquirir nociones básicas de Stata para el análisis de datos -- - Adquirir herramientas para comprender y escribir código en R (reutilizable y interpretable) para el análisis de datos -- - Adquirir conocimientos para aprender de forma independiente funciones en R -- - Breve introducción a Python (usos y posibilidades) --- ## Estructura <table class="table table-striped table-hover table-condensed" style="font-size: 14px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Semana </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Tema </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Semana 1 </td> <td style="text-align:left;"> Introducción al curso y al análisis de datos </td> </tr> <tr> <td style="text-align:left;"> Semana 2 </td> <td style="text-align:left;"> Introducción a Stata </td> </tr> <tr> <td style="text-align:left;"> Semana 3 </td> <td style="text-align:left;"> Introducción a Stata II </td> </tr> <tr> <td style="text-align:left;"> Semana 4 </td> <td style="text-align:left;"> Primera evaluación parcial </td> </tr> <tr> <td style="text-align:left;"> Semana 5 </td> <td style="text-align:left;"> Introducción a R </td> </tr> <tr> <td style="text-align:left;"> Semana 6 </td> <td style="text-align:left;"> Introducción a R II </td> </tr> <tr> <td style="text-align:left;"> Semana 7 </td> <td style="text-align:left;"> Importar y limpiar datos en R </td> </tr> <tr> <td style="text-align:left;"> Semana 8 </td> <td style="text-align:left;"> Estadística descriptiva en R </td> </tr> <tr> <td style="text-align:left;"> Semana 9 </td> <td style="text-align:left;"> Manipulación de datos en R </td> </tr> <tr> <td style="text-align:left;"> Semana 10 </td> <td style="text-align:left;"> Manipulación de datos en R II </td> </tr> <tr> <td style="text-align:left;"> Semana 11 </td> <td style="text-align:left;"> Visualización de datos en R </td> </tr> <tr> <td style="text-align:left;"> Semana 12 </td> <td style="text-align:left;"> Estadística inferencial en R </td> </tr> <tr> <td style="text-align:left;"> Semana 13 </td> <td style="text-align:left;"> Reportes con R Markdown y técnicas de programación avanzadas </td> </tr> <tr> <td style="text-align:left;"> Semana 14 </td> <td style="text-align:left;"> Segunda evaluación parcial </td> </tr> <tr> <td style="text-align:left;"> Semana 15 </td> <td style="text-align:left;"> Introducción a Python </td> </tr> <tr> <td style="text-align:left;"> Semana 16 </td> <td style="text-align:left;"> Presentaciones y cierre del curso </td> </tr> </tbody> </table> --- ## Materiales Cada semana se colgarán en la webasignatura: - Una presentación - El código de la clase - Ejercicios - Solución de los ejercicios --- ## Importante: - **Calificación:** Una calificación mínima de B es requerida para exonerar el curso. - **Asistencia:** Los alumnos deberían asistir al 75% de las clases - **Horario:** El curso se dicta a los ́días martes y jueves de 8:00 a 9:20 en el laboratorio Auriga - **Evaluación:** - Primera evaluación parcial 20 % - Segunda evaluación parcial 40 % - Trabajo final 40 % --- ## Regla de los 5 minutos - Cuando estamos trabajando en ejercicios prácticos y nos enfrentamos a una situación que no podemos resolver en nuestro primer intento, debemos probar durante al menos 5 minutos resolverlo sin preguntar, aplicando los siguientes pasos. --- ## Pasos a seguir si no funciona una línea de código: Paso 1 - En caso de haber un mensaje de error, leerlo. Traducirlo si es necesario. La mayoría de las veces la solución se puede deducir del mensaje de error. .center[ <img src="ima/error.png" width="600px" /> ] --- ## Pasos a seguir si no funciona una línea de código: Paso 2 - Chequear que no haya errores de tipeo. Si hay una letra fuera de lugar, los programas no podrán correr el código. Tener especial cuidados a mayusculas/minúsculas, acentos y puntuación. .center[ <img src="ima/typo.jpeg" width="300px" /> ] --- ## Pasos a seguir si no funciona una línea de código: Paso 3 - Si los primeros 2 puntos no funcionan, no entrar en pánico. Probablemente sea tu culpa, la computadora no hace otra cosa que llevar a cabo las instrucciones que vos le das. No escudarse en "esto no anda". Es muy difícil y poco probable toparse con un error que no sea nuestro en las funciones que vamos a utilizar en este curso. .center[ <img src="ima/fault.jpg" width="300px" /> ] --- ## Pasos a seguir si no funciona una línea de código: Paso 4 - Redefinir el problema. Definir concretamente qué esperamos que ese código haga, a qué objetos y cuál es el resultado esperado. Chequear que le estemos dando las instrucciones correctas a la computadora. .center[ <img src="ima/debug_duck.png" width="350px" /> ] --- ## Pasos a seguir si no funciona una línea de código: Paso 5 - Googlear. En programación, una enorme cantidad del tiempo es destinada a entender por qué las cosas no funcionan de la forma en que esperabamos. Abrir el navegador, escribir R al comienzo (o el lenguaje/software que estemos utilizando) y luego describir el problema. En lo posible, recomiendo hacerlo en inglés, incluso si es nescesario utilizar el traductor. Ser claro y especifico en la búsqueda, y leer con atención las publicaciones que aparecen (tanto la pregunta como la respuesta). .center[ <img src="ima/r_meme.jpg" width="350px" /> ] --- ## Pasos a seguir si no funciona una línea de código: Paso 6 - Pedir ayuda. En caso de que los anteriores pasos no funcionen, pidan ayuda. A compañeros o al profesor. Pero es importante agotar los recursos antes, porque los códigos que no funcionan no desaparecen. .center[ <img src="ima/ayuda.jpg" width="350px" /> ] --- class: inverse, center, middle # Softwares estadísticos --- ## Softwares estadísticos y lenguajes de programación <table class="table table-striped table-hover table-condensed" style="font-size: 20px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Software </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Acceso </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Uso </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> SPSS </td> <td style="text-align:left;"> Pago </td> <td style="text-align:left;"> GUI y código </td> </tr> <tr> <td style="text-align:left;"> Stata </td> <td style="text-align:left;"> Pago </td> <td style="text-align:left;"> GUI y código </td> </tr> <tr> <td style="text-align:left;"> R </td> <td style="text-align:left;"> Libre </td> <td style="text-align:left;"> Código </td> </tr> <tr> <td style="text-align:left;"> Python </td> <td style="text-align:left;"> Libre </td> <td style="text-align:left;"> Código </td> </tr> </tbody> </table> --- ## SPSS - **Ventajas:** - Buen GUI - Funciona muy bien para datos de encuestas - **Desventajas:** - Pago - Pocas funcionalidades --- ## Stata - **Ventajas:** - Relativamente sencillo de usar - Bastantes funcionalidades - **Desventajas:** - Pago - Incompleto (machine learning, geolocalización, etc.) --- ## R - **Ventajas:** - Gratuito y libre - Muy completo y flexible - Comunidad de usuarios - Foco en estadística - **Desventajas:** - Puede ser lento - Curva de aprendizaje --- ## Python - **Ventajas:** - Muy potente - Muchas funcionalidades - Sintáxis clara - Buena comunidad - **Desventajas:** - No está particularmente pensado para estadística - Curva de aprendizaje --- class: inverse, center, middle # ¿Cómo pensar los datos? --- ## Ejercicio .content-box-green[ *En una planilla de excel creen una tabla con 5 países y datos sobre ellos. Debe tener al menos dos datos por país.* ] -- .content-box-green[ *Ahora, en esa misma planilla transformen esa tabla en una base de datos.* ] --- ## Estructura de datos - Un dataframe o marco de datos (es lo que nos solemos referir como "base de datos") - Es una forma de estructurar datos con filas y columnas. Las filas suelen ser las observaciones y las columnas las variables .center[ <img src="ima/tidy_data.png" width="700px" /> ] .right[[Wichkham & Grolemund (2018)](https://r4ds.had.co.nz/tidy-data.html)] --- ## Base de datos <table class="table table-striped table-hover table-condensed" style="font-size: 20px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> pais </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> capital </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> continente </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Uruguay </td> <td style="text-align:left;"> Montevideo </td> <td style="text-align:left;"> América </td> </tr> <tr> <td style="text-align:left;"> Suiza </td> <td style="text-align:left;"> Berna </td> <td style="text-align:left;"> Europa </td> </tr> <tr> <td style="text-align:left;"> Egipto </td> <td style="text-align:left;"> El Cairo </td> <td style="text-align:left;"> África </td> </tr> <tr> <td style="text-align:left;"> Irán </td> <td style="text-align:left;"> Teherán </td> <td style="text-align:left;"> Asia </td> </tr> <tr> <td style="text-align:left;"> Austrlia </td> <td style="text-align:left;"> Canberra </td> <td style="text-align:left;"> Oceanía </td> </tr> </tbody> </table> --- ## Ejercicio .content-box-green[ *Agregar información sobre el lenguaje de estos países* ] --- ## Base de datos <table class="table table-striped table-hover table-condensed" style="font-size: 20px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> pais </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> capital </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> continente </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idiomas </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Uruguay </td> <td style="text-align:left;"> Montevideo </td> <td style="text-align:left;"> América </td> <td style="text-align:left;"> Español </td> </tr> <tr> <td style="text-align:left;"> Suiza </td> <td style="text-align:left;"> Berna </td> <td style="text-align:left;"> Europa </td> <td style="text-align:left;"> Alemán, Italiano, Francés y Romance </td> </tr> <tr> <td style="text-align:left;"> Egipto </td> <td style="text-align:left;"> El Cairo </td> <td style="text-align:left;"> África </td> <td style="text-align:left;"> Árabe </td> </tr> <tr> <td style="text-align:left;"> Irán </td> <td style="text-align:left;"> Teherán </td> <td style="text-align:left;"> Asia </td> <td style="text-align:left;"> Persa </td> </tr> <tr> <td style="text-align:left;"> Austrlia </td> <td style="text-align:left;"> Canberra </td> <td style="text-align:left;"> Oceanía </td> <td style="text-align:left;"> Inglés </td> </tr> </tbody> </table> --- ## Base de datos <table class="table table-striped table-hover table-condensed" style="font-size: 20px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> pais </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> capital </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> continente </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idiomas </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Uruguay </td> <td style="text-align:left;"> Montevideo </td> <td style="text-align:left;"> América </td> <td style="text-align:left;"> Español </td> </tr> <tr> <td style="text-align:left;"> Suiza </td> <td style="text-align:left;"> Berna </td> <td style="text-align:left;"> Europa </td> <td style="text-align:left;"> Alemán </td> </tr> <tr> <td style="text-align:left;"> Egipto </td> <td style="text-align:left;"> El Cairo </td> <td style="text-align:left;"> África </td> <td style="text-align:left;"> Árabe </td> </tr> <tr> <td style="text-align:left;"> Irán </td> <td style="text-align:left;"> Teherán </td> <td style="text-align:left;"> Asia </td> <td style="text-align:left;"> Persa </td> </tr> <tr> <td style="text-align:left;"> Austrlia </td> <td style="text-align:left;"> Canberra </td> <td style="text-align:left;"> Oceanía </td> <td style="text-align:left;"> Inglés </td> </tr> </tbody> </table> --- ## Base de datos <table class="table table-striped table-hover table-condensed" style="font-size: 20px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> pais </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> capital </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> continente </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idioma_1 </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idioma_2 </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idioma_3 </th> <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> idioma_4 </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Uruguay </td> <td style="text-align:left;"> Montevideo </td> <td style="text-align:left;"> América </td> <td style="text-align:left;"> Español </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> Suiza </td> <td style="text-align:left;"> Berna </td> <td style="text-align:left;"> Europa </td> <td style="text-align:left;"> Alemán </td> <td style="text-align:left;"> Francés </td> <td style="text-align:left;"> Italiano </td> <td style="text-align:left;"> Romance </td> </tr> <tr> <td style="text-align:left;"> Egipto </td> <td style="text-align:left;"> El Cairo </td> <td style="text-align:left;"> África </td> <td style="text-align:left;"> Árabe </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> Irán </td> <td style="text-align:left;"> Teherán </td> <td style="text-align:left;"> Asia </td> <td style="text-align:left;"> Persa </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> </tr> <tr> <td style="text-align:left;"> Austrlia </td> <td style="text-align:left;"> Canberra </td> <td style="text-align:left;"> Oceanía </td> <td style="text-align:left;"> Inglés </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> <td style="text-align:left;"> </td> </tr> </tbody> </table> --- ## Base de datos - Las columnas son variables - Las filas son observaciones - Las celdas son valores - No unir celdas - No usar caracteres especiales, espacios o mayúsculas para los nombres de las variables - Si usamos una planilla excel para crearla, comenzar con la primer columna en la columna A y utilizar la primera fila para nombre de variables y la segunda para la primera observación - No incluir "subtitulos" en la segunda fila --- class: inverse, center, middle # Flujo de trabajo --- ## Flujo de trabajo .center[ <img src="ima/flow.svg" width="600px" /> ] .right[Fuente: R4DS] --- ## Ejercicio .content-box-green[ *¿Cuáles son los 5 países de América del Sur con mayor densidad de población?* *¿Cuál es la densidad poblacional de estos 5 países?* ] --- class: inverse, center, middle # Carpeta del curso --- ## Crear una carpeta - Crear una carpeta para guardar los archivos del curso, con el nombre que prefieran - Descargar de la webasignatura la carpeta "data" y pegarla (con ese nombre), dentro de la carpeta creada en el punto anterior - Crea una carpeta para guardar los do files y scripts (archivos de código) del curso. - Crea además dos carpetas más dentro de tu carpeta: "graficos" y "resultados"