-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.json
1 lines (1 loc) · 906 KB
/
index.json
1
[{"authors":["asalber"],"categories":null,"content":"Padre y activista ecologista, trabajo como profesor de Matemáticas y Estadística en el Departamento de Matemática Aplicada y Estadística de la Universidad CEU San Pablo. Investigo en Ciencia de los Datos, Bioestadística y Aprendizaje Automático. Domino los lenguajes de programación R, Python y LaTeX.\n","date":-62135596800,"expirydate":-62135596800,"kind":"term","lang":"es","lastmod":1600206500,"objectID":"4c1a52ed2fdb89e37dda671db5e7b383","permalink":"/author/alfredo-sanchez-alberca/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/author/alfredo-sanchez-alberca/","section":"authors","summary":"Padre y activista ecologista, trabajo como profesor de Matemáticas y Estadística en el Departamento de Matemática Aplicada y Estadística de la Universidad CEU San Pablo. Investigo en Ciencia de los Datos, Bioestadística y Aprendizaje Automático.","tags":null,"title":"Alfredo Sánchez Alberca","type":"authors"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable","Cálculo en Varias Variables"],"content":" Descargar\nEste Manual de Cálculo está pensado para facilitar el aprendizaje de Cálculo para alumnos de primeros cursos de grado. En el se explican de manera sencilla y con ejemplos los conceptos de cálculo más importantes con multitud de ejemplos que facilitan su comprensión.\nEl manual está orientado principalmente a las Ciencias Bionsanitarias y por ello la mayor parte de los ejemplos están aplicados a estas disciplinas. No obstante, los conceptos y los procedimientos de cálculo presentados son válidos para cualquier ámbito de aplicación.\nGeometría Analítica Funciones elementales Límites y continuidad Cálculo diferencial en una variable Cálculo integral Ecuaciones diferenciales ordinarias Cálculo diferencial en varias variables ","date":1461110400,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600725294,"objectID":"2e6ce419628a104ea1b5d9a9998b2762","permalink":"/docencia/calculo/manual/","publishdate":"2016-04-20T00:00:00Z","relpermalink":"/docencia/calculo/manual/","section":"docencia","summary":"Explicación de los conceptos más importantes del Cálculo en una y varias variables con ejemplos aplicados.","tags":null,"title":"Manual de Cálculo","type":"book"},{"authors":null,"categories":["Programación","Julia"],"content":" Demostraciones\nJulia es un moderno lenguaje de programación de propósito general pero con orientación al cálculo científico-técnico. Aquí se presentan algunas demostraciones con Julia que muestran la capacidad de este lenguaje para construir modelos matemáticos y resolver problemas de cálculo científico.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":-62135596800,"objectID":"4cd2b8f7b2b06d05730cec9d1621771d","permalink":"/docencia/julia/demos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/julia/demos/","section":"docencia","summary":"Introducción a la programación con Julia.","tags":["Demos"],"title":"Cálculo Científico con Julia","type":"book"},{"authors":null,"categories":["Análisis"],"content":" Manual\nEste manual proporciona una introducción al Análisis Matemático de variable real, tanto para una variable, como para varias variables. En el se explican de manera sencilla los conceptos de Análisis más importantes con multitud de ejemplos y aplicaciones que facilitan su comprensión.\nEl manual está orientado principalmente a primeros cursos de los grados de Matemática e Ingeniería Matemática.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1663107083,"objectID":"0486141cd38c61aa1c41ebd47a68c315","permalink":"/docencia/analisis/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/analisis/manual/","section":"docencia","summary":"Introducción al Análisis Matemático de variable real con ejemplos y aplicaciones","tags":["Manual"],"title":"Manual de Análisis Matemático de Variable Real","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":" Manual\nEste Manual de Estadística están pensado para facilitar el aprendizaje de Estadística. En el se explican de manera sencilla y con ejemplos los conceptos estadísticos más importantes, así como los procedimientos estadísticos más utilizados en el análisis de datos.\nEl manual está orientado principalmente a la Bioestadística y por ello la mayor parte de los ejemplos están aplicados a las Ciencias Biosanitarias. No obstante, los conceptos y los procedimientos estadísticos presentados son válidos para cualquier ámbito de aplicación.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1707851408,"objectID":"778dc8796ae2aead895ffe9b8dcb4abf","permalink":"/docencia/estadistica/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/manual/","section":"docencia","summary":"Explicación de los conceptos más importantes de Estadística y Probabilidad con ejemplos.","tags":["Manual"],"title":"Manual de Estadística","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Descargar Presentación\nGit es el sistema de control de versiones más usado en el mundo. Pero, ¿qué es un sistema de control de versiones? Pues es una aplicación que permite gestionar los cambios que se realizan sobre los elementos de un proyecto o repositorio, guardando así versiones del mismo en todas sus fases de desarrollo.\nTabla de contenidos Introducción a Git Creación y actualización de repositorios Historial de cambios Deshacer cambios Gestión de ramas Repositorios remotos Referencias ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1601240261,"objectID":"c87f7acca8dbbc9d1216df749fdd4a39","permalink":"/docencia/git/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/","section":"docencia","summary":"Aprende a manejar el gestor de versiones más usado.","tags":["Manual"],"title":"Manual de Git","type":"book"},{"authors":null,"categories":["Programación","Julia"],"content":" Manual\nJulia es un moderno lenguaje de programación de propósito general pero con orientación al cálculo científico-técnico y el análisis de datos.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1658155350,"objectID":"8bb17d02fb8d37c3fa3c777c96559bbb","permalink":"/docencia/julia/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/julia/manual/","section":"docencia","summary":"Introducción a la programación con Julia con ejemplos.","tags":["Manual"],"title":"Manual de Julia","type":"book"},{"authors":null,"categories":["Matemáticas","LaTeX"],"content":" Manual\n$\\LaTeX$ es un lenguaje de composición de textos orientado a la creación de documentos científicos y técnicos con contenido matemático. Este manual proporciona una introducción práctica a $\\LaTeX$ con ejemplos.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1662455566,"objectID":"560fb7ca4f763e2432ae662d2ede44f9","permalink":"/docencia/latex/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/latex/manual/","section":"docencia","summary":"Introducción a la composición de textos científicos con LaTeX.","tags":["Manual"],"title":"Manual de LaTeX","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":" Descargar Presentación\nPython es uno de los lenguajes de programación más extendidos que se caracteriza por ser fácil de aprender debido a que su sintaxis es fácil de entender para los humanos. En este manual se presentan los conceptos básicos para iniciarse en la programación con este lenguaje.\nTabla de contenidos Introducción a Python Tipos de Datos Primitivos Simples Entrada y Salida por Terminal Condicionales Bucles Listas Tuplas Diccionarios Funciones Programación funcional Comprensión de Colecciones Ficheros Excepciones Programación Orientada a Objetos Módulos La librería Datetime La librería Numpy La librería Pandas La librería Matplotlib Depuración de código Referencias Manual de Python ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600725294,"objectID":"1009f5c6065f9e36500f545d2a3e4fbc","permalink":"/docencia/python/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/","section":"docencia","summary":"Introducción a la programación con Python con ejemplos.","tags":["Manual"],"title":"Manual de Python","type":"book"},{"authors":null,"categories":["Programación","R"],"content":" Manual\nR es un moderno lenguaje de programación de propósito general pero con orientación al análisis de datos muy extendido en el ámbito de la Estadística.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1674909553,"objectID":"62c2e1d9104c3bca53f90923332d578d","permalink":"/docencia/r/manual/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/r/manual/","section":"docencia","summary":"Introducción a la programación con R con ejemplos.","tags":["Manual"],"title":"Manual de R","type":"book"},{"authors":null,"categories":["Análisis"],"content":" Problemas\nEsta sección contiene una colección de problemas resueltos de Análisis Matemático de variable real. Aunque bastantes problemas son abstractos, dada la temática, se han incluido también bastantes problemas aplicados a las Ciencias y la Ingeniería.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1668519687,"objectID":"b04baf892979c95c502b62cf6f3a6742","permalink":"/docencia/analisis/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/analisis/ejercicios/","section":"docencia","summary":"Problemas de Análisis Matemático de variable real son soluciones","tags":["Ejercicios"],"title":"Ejercicios de Análisis Matemático de Variable Real","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","R"],"content":" Descargar\nEsta sección contiene una colección de ejercicios resueltos de análisis de datos con R y el paquete rkTeaching.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1601241010,"objectID":"887142579b1725963b55e6dd7c26dedd","permalink":"/docencia/r/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/r/ejercicios/","section":"docencia","summary":"Ejercicios de análisis de datos con soluciones.","tags":["Ejercicios"],"title":"Ejercicios de Bioestadística con R y el paquete rkTeaching","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Esta sección contiene una colección de ejercicios resueltos de estadística. La mayor parte de ellos son ejercicios aplicados en el ámbito de las Ciencias de la Salud, pero también hay ejercicios genéricos para cualquier disciplina.\nEstadística Descriptiva Regresión Lineal Regresión No Lineal Probabilidad Tests Diagnósticos Variables Aleatorias Discretas Variables Aleatorias Continuas ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600725294,"objectID":"3bc6cb90ad535a1d9f20f1d72fa4a238","permalink":"/docencia/estadistica/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/","section":"docencia","summary":"Problemas de Estadística con soluciones.","tags":["Ejercicios"],"title":"Ejercicios de Estadística","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Esta sección contiene una colección de ejercicios resueltos de control de versiones con Git.\nLos ejercicios están clasificados por temas y siguen el orden más o menos habitual en el aprendizaje de este sistema de control de versiones.\nCreación y actualización de repositorios Historial de cambios Deshacer cambios Ramas Repositorios remotos ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1601240261,"objectID":"7554c993d393229c25f63741cdd12609","permalink":"/docencia/git/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/","section":"docencia","summary":"Ejercicios de control de versiones con Git con soluciones.","tags":["Ejercicios"],"title":"Ejercicios de Git","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Esta sección contiene una colección de ejercicios resueltos de programación con Python. La mayor parte de ellos son ejercicios aplicados a la economía, pero también hay ejercicios genéricos para cualquier disciplina.\nLos ejercicios están clasificados por temas y siguen el orden más o menos habitual en el aprendizaje de este lenguaje.\nTipos de Datos Simples Cadenas Condicionales Bucles Listas y Tuplas Diccionarios Funciones Programación Funcional Ficheros Depuración Librería Pandas Librería Matplotlib ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600725294,"objectID":"10fbad58cd241aeb0aa8d8c4e18bbaff","permalink":"/docencia/python/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/","section":"docencia","summary":"Ejercicios de programación con Python con soluciones.","tags":["Ejercicios"],"title":"Ejercicios de Programación con Python","type":"book"},{"authors":null,"categories":["Estadística"],"content":" Prácticas\nEste documento contiene prácticas de Estadística con el lenguaje R.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1690551088,"objectID":"fea6085e6c9158ac1a9d4e8bf6e73007","permalink":"/docencia/estadistica/practicas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/practicas/","section":"docencia","summary":"Prácticas de Estadística con ejercicios resueltos en R","tags":["Prácticas"],"title":"Prácticas de Estadística con R","type":"book"},{"authors":null,"categories":["Cálculo"],"content":"Exámenes de Cálculo de los últimos cursos con soluciones.\nExámenes de Cálculo de Farmacia Exámenes de Cálculo de Óptica ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1612192256,"objectID":"f5198fe02f3300fac9bebe94bef4aff5","permalink":"/docencia/calculo/examenes/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/examenes/","section":"docencia","summary":"Exámenes de Cálculo de los últimos cursos con soluciones.","tags":["Exámenes"],"title":"Exámenes de Cálculo","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Exámenes de Estadística de los últimos cursos con soluciones.\nExámenes de Estadística de Farmacia Exámenes de Estadística de Fisioterapia Exámenes de Estadística de Óptica ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600725294,"objectID":"4b4083352a620d5092dd9b1309357f3b","permalink":"/docencia/estadistica/examenes/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/","section":"docencia","summary":"Exámenes de Estadística de los últimos cursos con soluciones.","tags":["Exams"],"title":"Exámenes de Estadística","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Exámenes de Programación con Python de los últimos cursos con soluciones.\nExámenes de Programación con Python de Inteligencia de los Negocios ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"798548459cab159b9d02d19695515364","permalink":"/docencia/python/examenes/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/examenes/","section":"docencia","summary":"Exámenes de Programación con Python de los últimos cursos con soluciones.","tags":["Examen"],"title":"Exámenes de Programación con Python","type":"book"},{"authors":null,"categories":["Análisis"],"content":" Prácticas\nEste documento contiene prácticas de Análisis Matemático con el lenguaje Julia.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1674909553,"objectID":"864f47db883cf3e3c7b45f2eee231d3f","permalink":"/docencia/analisis/practicas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/analisis/practicas/","section":"docencia","summary":"Prácticas de Análisis Matemático de Variable Real con ejercicios resueltos en Julia","tags":["Prácticas"],"title":"Prácticas de Análisis Matemático con Julia","type":"book"},{"authors":null,"categories":["Análisis"],"content":" Exámenes\nEsta sección contiene una colección de exámenes de Análisis Matemático resueltos.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1668519687,"objectID":"a07e7090319ac8266af366b6c33823fe","permalink":"/docencia/analisis/examenes/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/analisis/examenes/","section":"docencia","summary":"Exámenes resueltos de Análisis Matemático de variable Real del grado de Ingeniería Matemática.","tags":["Examenes"],"title":"Exámenes de Análisis Matemático","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Trabajos de Programación con Python de los últimos cursos con soluciones.\nTrabajos de Programación con Python de Inteligencia de los Negocios ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"5216de11671a7cde8f769ca7ef78005a","permalink":"/docencia/python/trabajos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/trabajos/","section":"docencia","summary":"Trabajos de Programación con Python de los últimos cursos con soluciones.","tags":["Trabajo"],"title":"Trabajos de Programación con Python","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"En esta sección se presentan varios retos de programación para avanzar aún más en el dominio de Python. Los retos son problemas cortos pero que tienen un grado de complejidad mayor que los problemas presentados en la sección de ejercicios. Es recomendable haber intentado todos los problemas de la sección de ejercicios antes de intentar los retos.\nAjedrez Realizar movimientos en un tablero de ajedrez\nEstrellas regulares Dibujar estrellas regulares con el módulo Turtle\nLaberinto Buscar la salida de un laberinto.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1621595974,"objectID":"b8d0eb58102bd98dffb147ca62d7ee42","permalink":"/docencia/python/retos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/retos/","section":"docencia","summary":"Retos de programación con Python con soluciones","tags":["Trabajo"],"title":"Retos de Programación con Python","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Artículos didácticos sobre temáticas relacionadas con la Estadística y sus aplicaciones.\nEpidemiología ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1636320284,"objectID":"71260515aced0394906b03c4232147ed","permalink":"/docencia/estadistica/tutoriales/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/tutoriales/","section":"docencia","summary":"Artículos didácticos sobre temáticas relacionadas con la Estadística y sus aplicaciones.","tags":["Apuntes"],"title":"Tutoriales de Estadística","type":"book"},{"authors":null,"categories":["Quarto"],"content":" Tutorial\nQuarto es un sistema moderno de creación de documentos dinámicos, informes, presentaciones, libros, sitios web y más, a partir de archivos de texto plano. Está especialmente diseñado para la elaboración de documentos científicos y técnicos. En este tutorial se explica cómo utilizar Quarto para la elaboración de documentos científicos.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1710109154,"objectID":"1bdf9fb9f54d6fd34f0d378498dbc78a","permalink":"/docencia/quarto/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/quarto/","section":"docencia","summary":"Pequeño manual para la elaboración de documentos científicos con Quarto","tags":["Manual"],"title":"Elaboración de documentos científicos con Quarto","type":"book"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Lista de exámenes Examen de Farmacia 2021-01-18 Examen de Farmacia 2019-12-16 Examen de Farmacia 2018-12-17 Examen de Farmacia 2018-01-19 Examen de Farmacia 2017-11-06 Examen de Farmacia 2017-01-10 Examen de Farmacia 2016-11-07 ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1612192256,"objectID":"79b090a3c956c3c53d96a868c48c33a7","permalink":"/docencia/calculo/examenes/farmacia/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/","section":"docencia","summary":" ","tags":["Examen"],"title":"Exámenes de Cálculo de Farmacia","type":"book"},{"authors":null,"categories":["Cálculo","Óptica"],"content":"Lista de exámenes ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1612192256,"objectID":"7d5e1e74b0cb00ccf4d1618e9def3343","permalink":"/docencia/calculo/examenes/optica/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/examenes/optica/","section":"docencia","summary":" ","tags":["Examen"],"title":"Exámenes de Cálculo de Óptica","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"List of exams Examen de Farmacia 2021-01-18 Examen de Farmacia 2020-10-26 Examen de Farmacia 2019-12-16 Examen de Farmacia 2018-12-17 Examen de Farmacia 2018-01-19 Examen de Farmacia 2017-11-27 Examen de Farmacia 2017-01-10 Examen de Farmacia 2016-11-28 Examen de Farmacia 2015-01-13 Examen de Farmacia 2014-11-24 Examen de Farmacia 2014-01-27 Examen de Farmacia 2013-01-24 ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"d4540b5dd7cc1719d9f754bf10e55c5f","permalink":"/docencia/estadistica/examenes/farmacia/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/","section":"docencia","summary":" ","tags":["Examen"],"title":"Exámenes de Estadística de Farmacia","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Fisioterapia"],"content":"List of exams Examen de Fisioterapia 2018-06-18 Examen de Fisioterapia 2018-05-31 Examen de Fisioterapia 2018-04-09 ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"7cfb08adc27fb1a807655454fa3ce937","permalink":"/docencia/estadistica/examenes/fisioterapia/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/fisioterapia/","section":"docencia","summary":" ","tags":["Examen"],"title":"Exámenes de Estadística de Fisioterapia","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Óptica"],"content":"List of exams Examen de Óptica 2020-11-13 Examen de Óptica 2018-10-24 Examen de Óptica 2017-12-18 ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"753fee0bf2da0c872cb822ce13203b2d","permalink":"/docencia/estadistica/examenes/optica/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/optica/","section":"docencia","summary":" ","tags":["Examen"],"title":"Exámenes de Estadística de Óptica","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Lista de exámenes Examen de Inteligencia de los Negocios 2022-06-24 Examen de Inteligencia de los Negocios 2022-06-04 Examen de Inteligencia de los Negocios 2022-03-24 Examen de Inteligencia de los Negocios 2021-06-05 Examen de Inteligencia de los Negocios 2021-05-26 Examen de Inteligencia de los Negocios 2021-03-25 Examen de Inteligencia de los Negocios 2020-06-19 Examen de Inteligencia de los Negocios 2020-05-27 Examen de Inteligencia de los Negocios 2019-06-18 Examen de Inteligencia de los Negocios 2019-05-27 Examen de Inteligencia de los Negocios 2019-03-27 ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"9e6524f1d0c1e57fdc7572e8ae52d9e2","permalink":"/docencia/python/examenes/inteligencia-negocios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/","section":"docencia","summary":" ","tags":["Exámenes"],"title":"Exámenes de Programación con Python de Inteligencia de los Negocios","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Manejo de la terminal Terminal de sistemas Windows Terminal en sistemas MacOS ","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1644918677,"objectID":"2002ffd8c08075aec70081d96ed721be","permalink":"/docencia/python/herramientas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/herramientas/","section":"docencia","summary":"Algunas herramientas que te harán las vida más fácil.","tags":["Herramientas"],"title":"Herramientas de programación","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Esta sección contiene una colección de trabajos de programación resueltos con Python en el ámbito de los negocios.\nLista de trabajos Airbnb Madrid Análisis de la ocupación de alojamientos con la plataforma Airbnb en Madrid.\nDeuda Pública Análisis de la deuda pública por Países y tipologías.\nContratos menores de Madrid Análisis del gasto en contratos menores del Ayuntamiento de Madrid.\nEmisiones de Madrid Análisis de las emisiones contaminantes de Madrid.\n","date":-62135596800,"expirydate":-62135596800,"kind":"section","lang":"es","lastmod":1600206500,"objectID":"4bac5354820a9ca518ee9c9f7868707c","permalink":"/docencia/python/trabajos/inteligencia-negocios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/trabajos/inteligencia-negocios/","section":"docencia","summary":" ","tags":["Trabajo"],"title":"Trabajos de Programación con Python de Inteligencia de los Negocios","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Ejercicio 1 Configurar Git definiendo el nombre del usuario, el correo electrónico y activar el coloreado de la salida. Mostrar la configuración final.\nSolución \u0026gt; git config --global user.name \u0026quot;Your-Full-Name\u0026quot; \u0026gt; git config --global user.email \u0026quot;your-email-address\u0026quot; \u0026gt; git config --global color.ui auto \u0026gt; git config --list Resolución Ejercicio 2 Crear un repositorio nuevo con el nombre libro y mostrar su contenido.\nSolución \u0026gt; mkdir libro \u0026gt; cd libro \u0026gt; git init \u0026gt; ls -la Resolución Ejercicio 3 Comprobar el estado del repositorio.\nCrear un fichero indice.txt con el siguiente contenido:\nCapítulo 1: Introducción a Git\nCapítulo 2: Flujo de trabajo básico\nCapítulo 3: Repositorios remotos\nComprobar de nuevo el estado del repositorio.\nAñadir el fichero a la zona de intercambio temporal.\nVolver a comprobar una vez más el estado del repositorio.\nSolución \u0026gt; git status \u0026gt; cat \u0026gt; indice.txt Capítulo 1: Introducción a Git Capítulo 2: Flujo de trabajo básico Capítulo 3: Repositorios remotos Ctrl+D \u0026gt; git status \u0026gt; git add indice.txt \u0026gt; git status Resolución Ejercicio 4 Realizar un commit de los últimos cambios con el mensaje \u0026ldquo;Añadido índice del libro.\u0026rdquo; y ver el estado del repositorio.\nSolución \u0026gt; git commit -m \u0026quot;Añadido índice del libro.\u0026quot; \u0026gt; git status Resolución Ejercicio 5 Cambiar el fichero indice.txt para que contenga lo siguiente:\nCapítulo 1: Introducción a Git\nCapítulo 2: Flujo de trabajo básico\nCapítulo 3: Gestión de ramas\nCapítulo 4: Repositorios remotos\nMostrar los cambios con respecto a la última versión guardada en el repositorio.\nHacer un commit de los cambios con el mensaje \u0026ldquo;Añadido capítulo 3 sobre gestión de ramas\u0026rdquo;.\nSolución \u0026gt; cat \u0026gt; indice.txt Capítulo 1: Introducción a Git Capítulo 2: Flujo de trabajo básico Capítulo 3: Gestión de ramas Capítulo 4: Repositorios remotos Ctrl+D \u0026gt; git diff \u0026gt; git add indice.txt \u0026gt; git commit -m \u0026quot;Añadido capítulo 3 sobre gestión de ramas\u0026quot; Resolución Ejercicio 6 Mostrar los cambios de la última versión del repositorio con respecto a la anterior. Cambiar el mensaje del último commit por \u0026ldquo;Añadido capítulo 3 sobre gestión de ramas al índice.\u0026rdquo; Volver a mostrar los últimos cambios del repositorio. Solución \u0026gt; git show \u0026gt; git commit --amend -m \u0026quot;Añadido capítulo 3 sobre gestión de ramas al índice.\u0026quot; git show Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"f8b1e96101571dc9a29b0de4abdcea7e","permalink":"/docencia/git/ejercicios/creacion-actualizacion-repositorios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/creacion-actualizacion-repositorios/","section":"docencia","summary":"Ejercicio 1 Configurar Git definiendo el nombre del usuario, el correo electrónico y activar el coloreado de la salida. Mostrar la configuración final.\nSolución \u0026gt; git config --global user.name \u0026quot;Your-Full-Name\u0026quot; \u0026gt; git config --global user.","tags":["Ejercicios"],"title":"Ejercicios de creación y actualización de repositorios","type":"book"},{"authors":null,"categories":["LaTeX"],"content":" Ejercicios\nEsta sección contiene una colección de ejercicios resueltos para practicar la composición textos científico-técnicos con el sistema de composición de textos $\\LaTeX$.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1694100935,"objectID":"a30560bb7e896a350da273a223838b8d","permalink":"/docencia/latex/ejercicios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/latex/ejercicios/","section":"docencia","summary":"Ejercicios resueltos","tags":["Ejercicios"],"title":"Ejercicios de LaTeX","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Medicina, Farmacia\nEn un grupo de personas sometidas a una anestesia general se ha medido la dosis de sustancia anestésica recibida (X) en mg y el tiempo que estuvieron dormidas (Y) en horas. Las frecuencias observadas aparecen en la siguiente tabla:\n$$ \\begin{array}{|c|ccc|c|} \\hline X\\backslash Y \u0026amp; [1,2) \u0026amp; [2,3) \u0026amp; [3,4) \u0026amp; n_x \\newline \\hline (20,30] \u0026amp; 14 \u0026amp; 10 \u0026amp; 0 \u0026amp; 24 \\newline (30,40] \u0026amp; 12 \u0026amp; 26 \u0026amp; 7 \u0026amp; 45 \\newline (40,50] \u0026amp; 2 \u0026amp; 12 \u0026amp; 17 \u0026amp; 31 \\newline \\hline n_y \u0026amp; 28 \u0026amp; 48 \u0026amp; 24 \u0026amp; 100 \\newline \\hline \\end{array} $$\nSe pide:\n¿En qué variable es más representativa la media? Justificar la respuesta ¿Por encima de cuánto tiempo estarán dormidas el 10% de las personas que reciben una dosis entre 30 y 40 mg? ¿En qué variable hay más asimetría? Justificar la respuesta. Según el modelo de regresión lineal, ¿cuánta sustancia anestésica será necesaria para domir a alguien durante al menos dos horas? ¿Es fiable la predicción? Justificar la respuesta. Solución Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"efa216f75f943dcaa0feeae4f225d275","permalink":"/docencia/estadistica/ejercicios/descriptiva/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/descriptiva/","section":"docencia","summary":"Ejercicio 1 Titulación: Medicina, Farmacia\nEn un grupo de personas sometidas a una anestesia general se ha medido la dosis de sustancia anestésica recibida (X) en mg y el tiempo que estuvieron dormidas (Y) en horas.","tags":["Frecuencias","Estadística Descriptiva"],"title":"Ejercicios de Estadística Descriptiva","type":"book"},{"authors":null,"categories":["Cálculo","Geometría"],"content":"Escalares y vectores Escalares Algunos fenómenos de la naturaleza pueden describirse mediante un número referido a una unidad de medida.\nDefinición - Escalar. Un escalar es un número que sirve para expresar una magnitud sin dirección. Ejemplo. La estatura o el peso de una persona, la temperatura de un gas o el tiempo que tarda un móvil en recorrer una distancia.\nSin embargo, existen otros fenómenos que no pueden describirse adecuadamente mediante un escalar. Si, por ejemplo, un navegante quiere poner rumbo a puerto y sólo conoce de la intensidad del viento, no sabrá qué dirección tomar. La descripción del viento requiere dos elementos, su intensidad y su dirección.\nVectores Definición - Vector. Un vector es un número que sirve para expresar una magnitud y tiene asociada una dirección y un sentido. Ejemplo La velocidad de un móvil o la fuerza que se aplica sobre un objeto.\nGeométricamente, un vector se representa mediante un segmento orientado, es decir, una flecha.\nRepresentación de un vector Un segmento orientado puede ubicarse en diferentes lugares dentro de un espacio cartesiano. Sin embargo, con independencia de donde esté situado, si la longitud y la dirección no varían, dicho segmento representará siempre el mismo vector.\nEsto permite representar todos los vectores con un mismo origen, el origen en sistema de coordenadas cartesianas. Así, un vector queda determinado por las coordenadas de su extremo final en cualquier espacio euclideo.\nVector a partir de dos puntos Dados dos puntos $P$ y $Q$ de un espacio cartesiano, el vector con origen en $P$ y destino en $Q$ tiene coordenadas $\\vec{PQ}=Q-P$.\nSean los puntos $P=(2,1)$ y $Q=(3,4)$ del plano real $\\mathbb{R}^2$, entonces\n$$\\vec{PQ} = Q-P = (3,4)-(2,1) = (3-2,4-1) = (1,3).$$\nMódulo de un vector Definición - Módulo de un vector. Dado un vector $\\mathbf{v}=(v_1,\\cdots,v_n)$ de $\\mathbb{R}^n$, se define el módulo de $\\mathbf{v}$ como\n$$\\lvert \\mathbf{v} \\rvert = \\sqrt{v_1^2+ \\cdots + v_n^2}.$$\nEl módulo de un vector coincide con la longitud del segmento que representa al vector.\nEjemplo. Sea $\\mathbf{u}=(3,4)$ un vector en $\\mathbb{R}^2$, entonces\n$$\\lvert \\mathbf{u} \\rvert = \\sqrt{3^2+4^2} = \\sqrt{25} = 5.$$\nSea $\\lvert \\mathbf{v}\\rvert =(4,7,4)$ un vector en $\\mathbb{R}^3$, entonces\n$$\\lvert \\mathbf{v} \\vert = \\sqrt{4^2+7^2+4^2} = \\sqrt{81} = 9.$$\nVectores unitarios Definición - Vector unitario. Se dice que un vector $\\mathbf{v}$ de $\\mathbb{R}^n$ es unitario si su módulo es 1, es decir $\\lvert \\mathbf{v}\\rvert=1$. Especial atención merecen los vectores unitarios que siguen la dirección de los ejes de coordenadas, estos vectores se llaman vectores coordenados.\nEn $\\mathbb{R}^2$ los vectores coordenados son\n$$\\mathbf{i}=(1,0)\\mbox{ y }\\mathbf{j}=(0,1)$$\nEn $\\mathbb{R}^3$ los vectores coordenados son\n$$\\mathbf{i}=(1,0,0)\\mbox{, }\\mathbf{j}=(0,1,0) \\mbox{ y } \\mathbf{k}=(0,0,1)$$\nSuma de vectores Definición - Suma de vectores. Dados dos vectores $\\mathbf{u}=(u_1,\\cdots,u_n)$ y $\\mathbf{v}=(v_1,\\cdots,v_n)$ de $\\mathbb{R}^n$, se define la suma de $\\mathbf{u}$ y $\\mathbf{v}$ como\n$$\\mathbf{u}+\\mathbf{v} = (u_1+v_1,\\ldots, u_n+v_n).$$\nEjemplo. Sean $\\mathbf{u}=(3,1)$ y $\\mathbf{v}=(2,3)$ dos vectores en $\\mathbb{R}^2$, entonces\n$$\\mathbf{u}+\\mathbf{v} = (3+2,1+3) = (5,4).$$\nProducto de un vector por un escalar Definición - Producto de un vector por un escalar. Dado un vector $\\mathbf{v}=(v_1,\\cdots,v_n)$ de $\\mathbb{R}^n$, y un escalar $a\\in \\mathbb{R}$, se define el producto de $a$ por $\\mathbf{v}$ como\n$$a\\mathbf{v} = (av_1,\\ldots, av_n).$$\nEjemplo. Sean el vector $\\mathbf{v}=(2,1)$ en $\\mathbb{R}^2$ y el escalar $a=2$, entonces\n$$a\\mathbf{v} = 2(2,1) = (4,2).$$\nExpresión de un vector como combinación lineal de los vectores coordenados La suma de vectores y el producto de un vector por un escalar permite expresar cualquier vector como una combinación lineal de los vectores coordenados.\nEn el caso del espacio real $\\mathbb{R}^3$, cualquier vector $\\mathbf{v}=(v_1,v_2,v_3)$ puede expresarse como\n$$\\mathbf{v}=(v_1,v_2,v_3) = v_1\\mathbf{i}+v_2\\mathbf{j}+v_3\\mathbf{k}.$$\nProducto escalar Definición - Producto escalar. Dados dos vectores $\\mathbf{u}=(u_1,\\cdots,u_n)$ y $\\mathbf{v}=(v_1,\\cdots,v_n)$ de $\\mathbb{R}^n$, se define el producto escalar de $\\mathbf{u}$ y $\\mathbf{v}$ como\n$$\\mathbf{u}\\cdot \\mathbf{v} = u_1v_1 + \\cdots + u_nv_n.$$\nEjemplo. Sean $\\mathbf{u}=(3,1)$ y $\\mathbf{v}=(2,3)$ dos vectores en $\\mathbb{R}^2$, entonces\n$$\\mathbf{u}\\cdot\\mathbf{v} = 3\\cdot 2 +1\\cdot 3 = 9.$$\nTeorema - Producto escalar. Dados dos vectores $\\mathbf{u}$ y $\\mathbf{v}$ de $\\mathbb{R}^n$, se cumple que\n$$\\mathbf{u}\\cdot\\mathbf{v} = \\lvert \\mathbf{u}\\rvert \\lvert\\mathbf{v}\\rvert \\cos\\alpha$$\ndonde $\\alpha$ es el ángulo que forman los vectores.\nVectores paralelos Definición - Vectores paralelos. Dos vectores $\\mathbf{u}$ y $\\mathbf{v}$ son paralelos si existe un valor $a\\in\\mathbb{R}$ tal que\n$$\\mathbf{u} = a\\mathbf{v}.$$\nEjemplo. Los vectores $\\mathbf{u}=(-4,2)$ y $\\mathbf{v}=(2,-1)$ en $\\mathbb{R}^2$ son paralelos, ya que\n$$\\mathbf{v}= (-4,2) = -2(2,-1) = -2\\mathbf{v}.$$\nVectores ortogonales y ortonormales Definición - Vectores ortogonales y ortonormales. Dos vectores $\\mathbf{u}$ y $\\mathbf{v}$ son ortogonales si su producto escalar es nulo\n$$\\mathbf{u}\\cdot \\mathbf{v} = 0.$$\nSi además el módulo de ambos vectores es la unidad $\\lvert\\mathbf{u}\\rvert=\\lvert\\mathbf{v}\\rvert=1$, entonces se dice que son ortonormales.\nLos vectores ortogonales son perpendiculares entre sí, es decir, forman un ángulo de $90^\\circ$. Ejemplo. Los vectores $\\mathbf{u}=(2,1)$ y $\\mathbf{v}=(-2,4)$ en $\\mathbb{R}^2$ son ortogonales, ya que\n$$\\mathbf{u}\\mathbf{v} = 2\\cdot -2 +1\\cdot 4 = 0,$$\npero no son ortonormales ya que $\\lvert\\mathbf{u}\\rvert = \\sqrt{2^2+1^2} \\neq 1$ y $\\lvert \\mathbf{v}\\rvert = \\sqrt{-2^2+4^2} \\neq 1$.\nLos vectores $\\mathbf{i}=(1,0)$ y $\\mathbf{j}=(0,1)$ en $\\mathbb{R}^2$ son ortonormales, ya que\n$$\\mathbf{i}\\mathbf{j} = 1\\cdot 0 +0\\cdot 1 = 0, \\quad \\lvert\\mathbf{i}\\rvert = \\sqrt{1^2+0^2} = 1, \\quad \\lvert \\mathbf j\\rvert = \\sqrt{0^2+1^2} = 1.$$\nRectas Ecuación vectorial de la recta Definición - Ecuación vectorial de la recta. Sea $l$ una recta del espacio $\\mathbb{R}^n$ y sean $P=(p_1,\\ldots,p_n)$ un punto cualquiera de la recta y $\\mathbf{v}=(v_1,\\ldots,v_n)$ un vector cualquiera con la misma dirección que la recta. La ecuación\n$$l: X= P + t\\mathbf{v} = (p_1,\\ldots,p_n)+t(v_1,\\ldots,v_n) = (p_1+tv_1,\\ldots,p_n+tv_n).$$\nparametriza a $l$ en función de $t\\in \\mathbb{R}$, y se conoce como ecuación vectorial de la recta.\nEjemplo. Considérese la recta del espacio real $\\mathbb{R}^3$ que aparece en la gráfica. Un punto de la recta es $P=(1,1,2)$ y un vector director es $\\mathbf{v}=(-1,2,2)$, luego su ecuación vectorial es\n$$l: X= P + t\\mathbf{v} = (1,1,2)+t(-1,2,1)=(1-t,1+2t,2+t)\\quad t\\in\\mathbb{R}.$$\nEcuaciones paramétricas y cartesianas de la recta De la ecuación vectorial de una recta $l: X=P + t\\mathbf{v}=(p_1+tv_1,\\ldots,p_n+tv_n)$ se obtienen fácilmente las coordenadas de los puntos que forman parte de la recta mediante $n$ ecuaciones paramétricas:\n$$x_1(t)=p_1+tv_1, \\ldots, x_n(t)=p_n+tv_n$$\ndonde, si $\\mathbf{v}$ es un vector cuyas coordenadas son no nulas ($v_i\\neq 0$ $\\forall i$), se puede despejar el parámetro $t$ en cada una de ellas e igualarlas,\n$$\\frac{x_1-p_1}{v_1}=\\cdots = \\frac{x_n-p_n}{v_n}$$\nEjemplo. Dada la ecuación vectorial de la recta $l: X=(1,1,2)+t(-1,2,1) =(1-t,1+2t,2+t)$ en el espacio real $\\mathbb{R^3}$, sus ecuaciones paramétricas son\n$$x(t) = 1-t, \\quad y(t)=1+2t, \\quad z(t)=2+t,$$\ny sus ecuaciones cartesianas son\n$$\\frac{x-1}{-1}=\\frac{y-1}{2}=\\frac{z-2}{1}$$\nEcuación punto-pendiente de una recta en el plano En el caso particular del plano cartesiano $\\mathbb{R^2}$, si se tiene una recta con ecuación vectorial\n$$l: X=P+t\\mathbf{v}=(x_0,y_0)+t(a,b) = (x_0+ta,y_0+tb),$$\nsus ecuaciones paramétricas son\n$$x(t)=x_0+ta,\\quad y(t)=y_0+tb$$\ny sus ecuación cartesiana es\n$$\\frac{x-x_0}{a} = \\frac{y-y_0}{b}.$$\nA partir de aquí, pasando $b$ multiplicando al otro lado de la ecuación, se obtiene\n$$y-y_0 = \\frac{b}{a}(x-x_0) \\mbox{ o bien } y-y_0+m(x-x_0),$$\nllamando $m=b/a$. Esta ecuación se conoce como ecuación en la forma punto-pendiente.\nEjemplo interactivo\nPendiente de una recta en el plano Definición - Pendiente de una recta. Dada una recta $l: X=P+t\\mathbf{v}$ en el plano real $\\mathbb{R}^2$, con vector director $\\mathbf{v}=(a,b)$, se define la pendiente de $l$ como $b/a$. Ejemplo interactivo\nRecordar que dados dos puntos $Q=(x_1,y_1)$ y $Q=(x_2,y_2)$ de la recta $l$, se puede tomar como vector director el vector que los une, que tiene coordenadas $\\vec{PQ}=Q-P=(x_2-x_1,y_2-y_1)$, de manera que la pendiente de $l$ será $\\dfrac{y_2-y_1}{x_2-x_1}$, es decir, el cociente entre lo que cambia la coordenada $y$ y lo que cambia la coordenada $x$.\nPlanos Ecuación vectorial del plano en el espacio real Para llegar a la ecuación de un plano en el espacio real $\\mathbb{R}^3$ se puede partir de un punto del plano $P=(x_0,y_0,z_0)$ y de un vector perpendicular al plano $\\mathbf{v}=(a,b,c)$. Entonces, para cualquier punto del plano $Q=(x,y,z)$ se cumple que el vector $\\vec{PQ} = (x-x_0,y-y_0,z-z_0)$ es ortogonal a $\\mathbf{v}$, por lo que su producto escalar se anulará.\nDefinición - Ecuación vectorial de un plano en el espacio. Dado un punto $P=(v_0,y_0,z_0)$ y un vector $\\mathbf{v}=(a,b,c)$ en el espacio real $\\mathbb{R}^3$, la ecuación vectorial del plano que pasa por $P$ perpendicular a $\\mathbf{v}=(a,b,c)$ es\n$$\\vec{PQ}\\cdot\\mathbf{v} = (x-x_0,y-y_0,z-z_0)(a,b,c) = a(x-x_0)+b(y-y_0)+c(z-z_0) = 0.$$\nEcuación escalar de un plano en el espacio De la ecuación vectorial del plano se obtiene\n$$a(x-x_0)+b(y-y_0)+c(z-z_0) = 0 \\Leftrightarrow ax+by+cz=ax_0+by_0+cz_0,$$\nque, renombrando $d=ax_0+by_0+cz_0$, puede reescribirse como\n$$ax+by+cz=d,$$\ny se conoce como ecuación escalar del plano.\nExample. Dado el punto $P=(2,1,1)$ y el vector $\\mathbf{v}=(2,1,2)$, la ecuación vectorial del plano qu pasa por $P$ y es ortogonal a $\\mathbf{v}$ es\n$$(x-2,y-1,z-1)(2,1,2)=2(x-2)+(y-1)+2(z-1)=0,$$\ny su ecuación escalar es\n$$2x+y+2z=7.$$\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631523540,"objectID":"c880ce3a6a24a39e60796a455439f179","permalink":"/docencia/calculo/manual/geometria-analitica/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/geometria-analitica/","section":"docencia","summary":"Escalares y vectores Escalares Algunos fenómenos de la naturaleza pueden describirse mediante un número referido a una unidad de medida.\nDefinición - Escalar. Un escalar es un número que sirve para expresar una magnitud sin dirección.","tags":["Vector","Recta","Plano"],"title":"Geometría Analítica","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"¿Qué es un sistema de control de versiones? Un Sistema de Control de Versiones (SCV) es una aplicación que permite gestionar los cambios que se realizan sobre los elementos de un proyecto o repositorio, guardando así versiones del mismo en todas sus fases de desarrollo. Registra cada cambio en el proyecto o repositorio, quién y cuándo lo hace, en una base de datos. Permite volver a estados previos del desarrollo. Permite gestionar diferentes versiones del proyecto (ramas) para trabajar en paralelo y luego fundirlas. Permite colaborar entre diferentes usuarios en un mismo repositorio, facilitando la resolución de conflictos. Se utiliza principalmente en proyectos de desarrollo de software, pero sirve para cualquier otro tipo de proyecto. ¿Qué es Git? Git es un sistema de control de versiones de código abierto ideado por Linus Torvalds (el padre del sistema operativo Linux) y actualmente es el sistema de control de versiones más extendido.\nA diferencia de otros SCV Git tiene una arquitectura distribuida, lo que significa que en lugar de guardar todos los cambios de un proyecto en un único sitio, cada usuario contiene una copia del repositorio con el historial de cambios completo del proyecto. Esto aumenta significativamente su rendimiento.\nConfiguración de Git Antes de empezar a usar git es necesario configurarlo con el nombre de usuario y su correo electrónico.\ngit config Establecer el nombre de usuario git config --global user.name \u0026quot;Your-Full-Name\u0026quot; Establecer el correo del usuario git config --global user.email \u0026quot;your-email-address\u0026quot; Activar el coloreado de la salida git config --global color.ui auto Mostrar el estado original en los conflictos git config --global merge.conflictstyle diff3 Mostrar la configuración git config --list ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"de4cb393ac389f2e06313b39b4d76b55","permalink":"/docencia/git/manual/introduccion/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/introduccion/","section":"docencia","summary":"¿Qué es un sistema de control de versiones? Un Sistema de Control de Versiones (SCV) es una aplicación que permite gestionar los cambios que se realizan sobre los elementos de un proyecto o repositorio, guardando así versiones del mismo en todas sus fases de desarrollo.","tags":null,"title":"Introducción a Git","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"¿Qué es Python? Python es un lenguaje de programación de alto nivel multiparadigma que permite:\nProgramación imperativa Programación funcional Programación orientada a objetos Fue creado por Guido van Rossum en 1990 aunque actualmente es desarrollado y mantenido por la Python Software Foundation\nPrincipales ventajas de Python Es de código abierto (certificado por la OSI). Es interpretable y compilable. Es fácil de aprender gracias a que su sintaxis es bastante legible para los humanos. Es un lenguaje maduro (29 años). Es fácilmente extensible e integrable en otros lenguajes (C, java). Esta mantenido por una gran comunidad de desarrolladores y hay multitud de recursos para su aprendizaje. Tipos de ejecución Interpretado en la consola de Python Se ejecuta cada instrucción que introduce el usuario de manera interactiva.\n\u0026gt; python \u0026gt;\u0026gt;\u0026gt; name = \u0026quot;Alf\u0026quot; \u0026gt;\u0026gt;\u0026gt; print(\u0026quot;Hola \u0026quot;, name) Hola Alf Interpretado en fichero Se leen y se ejecutan una a una todas las instrucciones del fichero.\n# Fichero hola.py name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola \u0026quot;, name) \u0026gt; python hola.py Hola Alf También se puede hacer el fichero ejecutable indicando en la primera línea la ruta hasta el intérprete de Python.\n#!/usr/bin/python3 name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola\u0026quot;, name) \u0026gt; chmod +x hola.py \u0026gt; ./hola.py Hola Alf Compilado a bytecode # Fichero hola.py name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola \u0026quot; + name) \u0026gt; python -O -m py_compile hola.py \u0026gt; python __pycache__/hola.cpython-37.pyc Hola Alf Compilado a ejecutable del sistema Hay distintos paquetes que permiten compilar a un ejecutable del sistema operativo usado, por ejemplo pyinstaller.\n\u0026gt; conda install pyinstaller \u0026gt; pyinstaller hola.py \u0026gt; ./dist/hola/hola Hola Alf ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600725294,"objectID":"a0aca9235517dc6f4546ccc60b528925","permalink":"/docencia/python/manual/introduccion-python/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/introduccion-python/","section":"docencia","summary":"¿Qué es Python? Python es un lenguaje de programación de alto nivel multiparadigma que permite:\nProgramación imperativa Programación funcional Programación orientada a objetos Fue creado por Guido van Rossum en 1990 aunque actualmente es desarrollado y mantenido por la Python Software Foundation","tags":[],"title":"Introducción a Python","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":" Ejercicio 1 Escribir un programa que muestre por pantalla la cadena ¡Hola Mundo!.\nSolución\nEjercicio 2 Escribir un programa que almacene la cadena ¡Hola Mundo! en una variable y luego muestre por pantalla el contenido de la variable.\nSolución\nEjercicio 3 Escribir un programa que pregunte el nombre del usuario en la consola y después de que el usuario lo introduzca muestre por pantalla la cadena ¡Hola \u0026lt;nombre\u0026gt;!, donde \u0026lt;nombre\u0026gt; es el nombre que el usuario haya introducido.\nSolución\nEjercicio 4 Escribir un programa que muestre por pantalla el resultado de la siguiente operación aritmética $\\left(\\frac{3+2}{2\\cdot 5}\\right)^2$.\nSolución\nEjercicio 5 Escribir un programa que pregunte al usuario por el número de horas trabajadas y el coste por hora. Después debe mostrar por pantalla la paga que le corresponde.\nSolución\nEjercicio 6 Escribir un programa que lea un entero positivo, $n$, introducido por el usuario y después muestre en pantalla la suma de todos los enteros desde 1 hasta $n$. La suma de los $n$ primeros enteros positivos puede ser calculada de la siguiente forma:\n$$ \\mbox{suma} = \\frac{n(n+1)}{2} $$\nSolución\nEjercicio 7 Escribir un programa que pida al usuario su peso (en kg) y estatura (en metros), calcule el índice de masa corporal y lo almacene en una variable, y muestre por pantalla la frase Tu índice de masa corporal es \u0026lt;imc\u0026gt; donde \u0026lt;imc\u0026gt; es el índice de masa corporal calculado redondeado con dos decimales.\nSolución\nEjercicio 8 Escribir un programa que pida al usuario dos números enteros y muestre por pantalla la \u0026lt;n\u0026gt; entre \u0026lt;m\u0026gt; da un cociente \u0026lt;c\u0026gt; y un resto \u0026lt;r\u0026gt; donde \u0026lt;n\u0026gt; y \u0026lt;m\u0026gt; son los números introducidos por el usuario, y \u0026lt;c\u0026gt; y \u0026lt;r\u0026gt; son el cociente y el resto de la división entera respectivamente.\nSolución\nEjercicio 9 Escribir un programa que pregunte al usuario una cantidad a invertir, el interés anual y el número de años, y muestre por pantalla el capital obtenido en la inversión.\nSolución\nEjercicio 10 Una juguetería tiene mucho éxito en dos de sus productos: payasos y muñecas. Suele hacer venta por correo y la empresa de logística les cobra por peso de cada paquete así que deben calcular el peso de los payasos y muñecas que saldrán en cada paquete a demanda. Cada payaso pesa 112 g y cada muñeca 75 g. Escribir un programa que lea el número de payasos y muñecas vendidos en el último pedido y calcule el peso total del paquete que será enviado.\nSolución\nEjercicio 11 Imagina que acabas de abrir una nueva cuenta de ahorros que te ofrece el 4% de interés al año. Estos ahorros debido a intereses, que no se cobran hasta finales de año, se te añaden al balance final de tu cuenta de ahorros. Escribir un programa que comience leyendo la cantidad de dinero depositada en la cuenta de ahorros, introducida por el usuario. Después el programa debe calcular y mostrar por pantalla la cantidad de ahorros tras el primer, segundo y tercer años. Redondear cada cantidad a dos decimales.\nSolución\nEjercicio 12 Una panadería vende barras de pan a 3.49€ cada una. El pan que no es el día tiene un descuento del 60%. Escribir un programa que comience leyendo el número de barras vendidas que no son del día. Después el programa debe mostrar el precio habitual de una barra de pan, el descuento que se le hace por no ser fresca y el coste final total.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1615158565,"objectID":"198a2d2a48c9e0def8d08f1bcb579711","permalink":"/docencia/python/ejercicios/tipos-datos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/tipos-datos/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que muestre por pantalla la cadena ¡Hola Mundo!.\nSolución\nEjercicio 2 Escribir un programa que almacene la cadena ¡Hola Mundo! en una variable y luego muestre por pantalla el contenido de la variable.","tags":["Ejercicios","Tipos de Datos"],"title":"Ejercicios de Tipos de Datos Simples","type":"book"},{"authors":null,"categories":["Programación","R"],"content":" Ejercicio 1 Escribir un programa que muestre por pantalla la cadena ¡Hola Mundo!.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1640718276,"objectID":"0f08344e30382742fcf704a61492e1bb","permalink":"/docencia/r/ejercicios/tipos-datos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/r/ejercicios/tipos-datos/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que muestre por pantalla la cadena ¡Hola Mundo!.\nSolución","tags":["Ejercicios","Tipos de Datos"],"title":"Ejercicios de Tipos de Datos Simples","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que pregunte el nombre del usuario en la consola y un número entero e imprima por pantalla en líneas distintas el nombre del usuario tantas veces como el número introducido.\nSolución\nEjercicio 2 Escribir un programa que pregunte el nombre completo del usuario en la consola y después muestre por pantalla el nombre completo del usuario tres veces, una con todas las letras minúsculas, otra con todas las letras mayúsculas y otra solo con la primera letra del nombre y de los apellidos en mayúscula. El usuario puede introducir su nombre combinando mayúsculas y minúsculas como quiera.\nSolución\nEjercicio 3 Escribir un programa que pregunte el nombre del usuario en la consola y después de que el usuario lo introduzca muestre por pantalla \u0026lt;NOMBRE\u0026gt; tiene \u0026lt;n\u0026gt; letras, donde \u0026lt;NOMBRE\u0026gt; es el nombre de usuario en mayúsculas y \u0026lt;n\u0026gt; es el número de letras que tienen el nombre.\nSolución\nEjercicio 4 Los teléfonos de una empresa tienen el siguiente formato prefijo-número-extension donde el prefijo es el código del país +34, y la extensión tiene dos dígitos (por ejemplo +34-913724710-56). Escribir un programa que pregunte por un número de teléfono con este formato y muestre por pantalla el número de teléfono sin el prefijo y la extensión.\nSolución\nEjercicio 5 Escribir un programa que pida al usuario que introduzca una frase en la consola y muestre por pantalla la frase invertida.\nSolución\nEjercicio 6 Escribir un programa que pida al usuario que introduzca una frase en la consola y una vocal, y después muestre por pantalla la misma frase pero con la vocal introducida en mayúscula.\nSolución\nEjercicio 7 Escribir un programa que pregunte el correo electrónico del usuario en la consola y muestre por pantalla otro correo electrónico con el mismo nombre (la parte delante de la arroba @) pero con dominio ceu.es.\nSolución\nEjercicio 8 Escribir un programa que pregunte por consola el precio de un producto en euros con dos decimales y muestre por pantalla el número de euros y el número de céntimos del precio introducido.\nSolución\nEjercicio 9 Escribir un programa que pregunte al usuario la fecha de su nacimiento en formato dd/mm/aaaa y muestra por pantalla, el día, el mes y el año. Adaptar el programa anterior para que también funcione cuando el día o el mes se introduzcan con un solo carácter.\nSolución\nEjercicio 10 Escribir un programa que pregunte por consola por los productos de una cesta de la compra, separados por comas, y muestre por pantalla cada uno de los productos en una línea distinta.\nSolución\nEjercicio 11 Escribir un programa que pregunte el nombre el un producto, su precio y un número de unidades y muestre por pantalla una cadena con el nombre del producto seguido de su precio unitario con 6 dígitos enteros y 2 decimales, el número de unidades con tres dígitos y el coste total con 8 dígitos enteros y 2 decimales.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1613056101,"objectID":"bb4089e848c1e32c9dec4d4dd242d0f8","permalink":"/docencia/python/ejercicios/cadenas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/cadenas/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que pregunte el nombre del usuario en la consola y un número entero e imprima por pantalla en líneas distintas el nombre del usuario tantas veces como el número introducido.","tags":["Ejercicios","Tipos de Datos","Cadenas"],"title":"Ejercicios de Cadenas","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que pregunte al usuario su edad y muestre por pantalla si es mayor de edad o no.\nSolución\nEjercicio 2 Escribir un programa que almacene la cadena de caracteres contraseña en una variable, pregunte al usuario por la contraseña e imprima por pantalla si la contraseña introducida por el usuario coincide con la guardada en la variable sin tener en cuenta mayúsculas y minúsculas.\nSolución\nEjercicio 3 Escribir un programa que pida al usuario dos números y muestre por pantalla su división. Si el divisor es cero el programa debe mostrar un error.\nSolución\nEjercicio 4 Escribir un programa que pida al usuario un número entero y muestre por pantalla si es par o impar.\nSolución\nEjercicio 5 Para tributar un determinado impuesto se debe ser mayor de 16 años y tener unos ingresos iguales o superiores a 1000 € mensuales. Escribir un programa que pregunte al usuario su edad y sus ingresos mensuales y muestre por pantalla si el usuario tiene que tributar o no.\nSolución\nEjercicio 6 Los alumnos de un curso se han dividido en dos grupos A y B de acuerdo al sexo y el nombre. El grupo A esta formado por las mujeres con un nombre anterior a la M y los hombres con un nombre posterior a la N y el grupo B por el resto. Escribir un programa que pregunte al usuario su nombre y sexo, y muestre por pantalla el grupo que le corresponde.\nSolución\nEjercicio 7 Los tramos impositivos para la declaración de la renta en un determinado país son los siguientes:\nRenta Tipo impositivo Menos de 10000€ 5% Entre 10000€ y 20000€ 15% Entre 20000€ y 35000€ 20% Entre 35000€ y 60000€ 30% Más de 60000€ 45% Escribir un programa que pregunte al usuario su renta anual y muestre por pantalla el tipo impositivo que le corresponde.\nSolución\nEjercicio 8 En una determinada empresa, sus empleados son evaluados al final de cada año. Los puntos que pueden obtener en la evaluación comienzan en 0.0 y pueden ir aumentando, traduciéndose en mejores beneficios. Los puntos que pueden conseguir los empleados pueden ser 0.0, 0.4, 0.6 o más, pero no valores intermedios entre las cifras mencionadas. A continuación se muestra una tabla con los niveles correspondientes a cada puntuación. La cantidad de dinero conseguida en cada nivel es de 2.400€ multiplicada por la puntuación del nivel.\nNivel Puntuación Inaceptable 0.0 Aceptable 0.4 Meritorio 0.6 o más Escribir un programa que lea la puntuación del usuario e indique su nivel de rendimiento, así como la cantidad de dinero que recibirá el usuario.\nSolución\nEjercicio 9 Escribir un programa para una empresa que tiene salas de juegos para todas las edades y quiere calcular de forma automática el precio que debe cobrar a sus clientes por entrar. El programa debe preguntar al usuario la edad del cliente y mostrar el precio de la entrada. Si el cliente es menor de 4 años puede entrar gratis, si tiene entre 4 y 18 años debe pagar 5€ y si es mayor de 18 años, 10€.\nSolución\nEjercicio 10 La pizzería Bella Napoli ofrece pizzas vegetarianas y no vegetarianas a sus clientes. Los ingredientes para cada tipo de pizza aparecen a continuación.\nIngredientes vegetarianos: Pimiento y tofu. Ingredientes no vegetarianos: Peperoni, Jamón y Salmón. Escribir un programa que pregunte al usuario si quiere una pizza vegetariana o no, y en función de su respuesta le muestre un menú con los ingredientes disponibles para que elija. Solo se puede eligir un ingrediente además de la mozzarella y el tomate que están en todas la pizzas. Al final se debe mostrar por pantalla si la pizza elegida es vegetariana o no y todos los ingredientes que lleva.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1615158565,"objectID":"7c496fd41ef37db818ec5474b93dc287","permalink":"/docencia/python/ejercicios/condicionales/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/condicionales/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que pregunte al usuario su edad y muestre por pantalla si es mayor de edad o no.\nSolución\nEjercicio 2 Escribir un programa que almacene la cadena de caracteres contraseña en una variable, pregunte al usuario por la contraseña e imprima por pantalla si la contraseña introducida por el usuario coincide con la guardada en la variable sin tener en cuenta mayúsculas y minúsculas.","tags":["Ejercicios","Condicionales"],"title":"Ejercicios de Condicionales","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Creación de repositorios Creación de un repositorio nuevo git init git init \u0026lt;nombre-repositorio\u0026gt; crea un repositorio nuevo con el nombre \u0026lt;nombre-repositorio\u0026gt;. Este comando crea crea una nueva carpeta con el nombre del repositorio, que a su vez contiene otra carpeta oculta llamada .git que contiene la base de datos donde se registran los cambios en el repositorio.\nCopia de repositorios git clone git clone \u0026lt;url-repositorio\u0026gt; crea una copia local del repositorio ubicado en la dirección \u0026lt;url-repositorio\u0026gt;. A partir de que se hace la copia, los dos repositorios, el original y la copia, son independientes, es decir, cualquier cambio en uno de ellos no se verá reflejado en el otro.\nAñadir cambios a un repositorio Con Git, cualquier cambio que hagamos en un proyecto tiene que pasar por tres estados hasta que guarde definitivamente en el repositorio.\nDirectorio de trabajo Es el directorio que contiene una copia de una versión concreta del proyecto en la que se está trabajando. Puede contener ficheros que no pertenecen al repositorio. Zona temporal de intercambio (staging area) es una zona donde se guardan los cambios temporalmente desde el directorio de trabajo antes de hacerlos definitivos y registrarlos en el repositorio. Repositorio Es donde finalmente se guardan los cambios confirmados desde la zona temporal de intercambio. Añadir cambios a la zona de intercambio temporal git add git add \u0026lt;fichero\u0026gt; añade los cambios en el fichero \u0026lt;fichero\u0026gt; del directorio de trabajo a la zona de intercambio temporal.\ngit add \u0026lt;carpeta\u0026gt; añade los cambios en todos los ficheros de la carpeta \u0026lt;carpeta\u0026gt; del directorio de trabajo a la zona de intercambio temporal.\ngit add . añade todos los cambios de todos los ficheros no guardados aún en la zona de intercambio temporal.\nAñadir cambios al repositorio git commit git commit -m \u0026quot;mensaje\u0026quot; confirma todos los cambios de la zona de intercambio temporal añadiéndolos al repositorio y creando una nueva versión del proyecto. \u0026quot;mensaje\u0026quot; es un breve mensaje describiendo los cambios realizados que se asociará a la nueva versión del proyecto.\ngit commit --amend -m \u0026quot;mensaje\u0026quot; cambia el mensaje del último commit por el nuevo mensaje \u0026quot;mensaje\u0026quot;.\nRegistro de cambios Para guardar los cambios en un repositorio Git utiliza una estructura de tres niveles:\nCommit Contiene información sobre el autor, el momento y el mensaje de los cambios. Árbol (tree) Cada commit contiene además un árbol donde se registran los nombres y rutas de los ficheros en el repositorio cuando se hizo el commit. Blob (binary file object) Para cada uno de los ficheros listados en el árbol hay un blob, que contiene una instantánea comprimida del contenido del fichero cuando se hizo el commit.\nSi un fichero del repositorio no ha cambiado en el commit, el árbol apunta al blob del fichero del último commit donde el fichero cambió. Referenciar un commit Cada commit tiene asociado un código hash de 40 caracteres hexadecimales que lo identifica de manera única. Hay dos formas de referirse a un commit:\nNombre absoluto: Se utiliza su código hash (basta indicar los 4 o 5 primeros dígitos). Nombre relativo: Se utiliza la palabra HEAD para referirse siempre al último commit. Para referirse al penúltimo commit se utiliza HEAD~1, al antepenúltimo HEAD~2, etc. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"7d35f7fa8f58a64418af084db0bf4fde","permalink":"/docencia/git/manual/creacion-actualizacion-repositorios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/creacion-actualizacion-repositorios/","section":"docencia","summary":"Creación de repositorios Creación de un repositorio nuevo git init git init \u0026lt;nombre-repositorio\u0026gt; crea un repositorio nuevo con el nombre \u0026lt;nombre-repositorio\u0026gt;. Este comando crea crea una nueva carpeta con el nombre del repositorio, que a su vez contiene otra carpeta oculta llamada .","tags":null,"title":"Creación y actualización de repositorios","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Epidemiología"],"content":"¿Qué es la Epidemiología? Epidemiología viene Griego: Epi (sobre), demos (gente) y logos (estudio), es decir, el estudio de lo que le ocurre a las poblaciones.\nEn el ámbito de la salud pública, la Epidemilogía es una rama de la Medicina que se encarga del estudio de la distribución y las causas de eventos relacionados con la salud (normalmente enfermedades) en las poblaciones, y la aplicación de este estudio para controlar problemas públicos de salud.\nDebido a la epidemia provocada por el coronavirus, la Epidemiología se ha convertido en una de las ramas de la medicina que más interés despiertan.\nSin embargo, antes de la COVID, la Epidemiología ya había servido en otros momentos históricos para solucionar o controlar algunos de los problemas de salud públicos más serios que ha enfrentado la humanidad.\nAlgunos descubrimientos históricos 1854: John Snow determina que la causa de la epidemia de cólera que asolaba Lóndres era que el agua estaba contaminada con heces. 1898: Ronald Ross averigua que el transmisor de la malaria es el el mosquito Anopheles. 1950: Se descubre que fumar es el principal factor de riesgo de cáncer de pulmón. 1954: Se valida la primera vacuna contra la poliomielitis (Jonas Salk’s). 1970: Se observó que el ejercicio físico y una dieta sana reducían el riesgo de sufrir un infarto. 1983: Robert Gallo, Luc Montagnier y Françoise Barré-Sinoussi identifican el virus que causa el SIDA. Poco después se se observó que el riesgo de contraer el HIV aumentaba con ciertas prácticas sexuales y con el consumo de algunos tipos de drogas. 2020: Y llegó la COVID\u0026hellip; En estos tiempos de pandemia un montón de términos técnicos de la Epidemiología se han convertido en lugares comunes gracias a los medios de comunicación.\nSin embargo, muchos de estos términos se utilizan de manera errónea, incluso por los propios medios de comunicación, y generan confusión para la población no experta. En este tutorial pretendo explicar los principales conceptos epidemiológicos usados en el control de enfermedades como la COVID e ilustrar su uso con ejemplos de aplicación.\nÍndices epidemiológicos Riesgos\nPrevalencia Incidencia Riesgo y Odds Riesgo/Odd relativo Test diagnósticos\nSensibilidad Especificidad Valores predictivos Todos estos índices estan basados en el cálculo de probabilidades, por lo que comenzaremos introduciendo el concepto de probabilidad y sus principales propiedades.\nEl concepto de probabilidad A lo largo de la historia ha habido diferentes intentos de definir matemáticamente el concepto de probabilidad. Quizá la más conocida y la primera que se enseña en las escuelas es la definición clásica de Laplace.\nDefinición clásica (Laplace) $$P(E)=\\frac{|E|}{|\\Omega|}=\\frac{\\mbox{Casos favorables a $E$}}{\\mbox{Casos posibles}}$$ Ejemplo Al tirar un dado equilibrado, la probabilidad de sacar un número par $E=\\{2, 4, 6\\}$ es $$ P(E) = \\frac{3}{6} = 0.5$$\nSin embargo, esta definición tiene serios inconvenientes ya que, para poder usarla, todos los casos posibles de un experimento deben tener la misma probabilidad de ocurrir (equiprobabilidad) y esto no suele ocurrir en la vida real (por ejemplo no todos los grupos sanguíneos tienen la misma probabilidad de ocurrir).\nPor este motivo, en el ámbito de las Ciencias es mucho más común utilizar la definición de probabilidad basada en el cálculo de frecuencias.\nDefinición frecuentista $$P(E)\\approx f_E = \\frac{n_E}{n}=\\frac{\\mbox{Frecuencia absoluta del evento}}{\\mbox{Tamaño muestral}}$$ Ejemplo Se ha aplicado un tratamiento a 100 personas y se han curado 75, entonces la probabilidad de curación del tratamiento es $$P(E) = \\frac{75}{100} = 0.75 \\Rightarrow 75\\%$$\nOjo, esta definición no permite calcular el valor exacto de la probabilidad de un suceso, tan solo una aproximación que será mejor cuanto mayor sea el tamaño de la muestra.\nAlgunas propiedades de la probabilidad Una probabilidad es un número real entre 0 y 1: $$0\\leq P(E)\\leq 1$$\nLa suma de las probabilidades de todos los casos posibles es 1: $$P(\\Omega) = P(e_1) + P(e_2) + \\cdots + P(e_n) = 1$$\nLa probabilidad de que ocurra lo contrario de un suceso es 1 menos la probabilidad del suceso: $$P(\\overline E) = 1 - P(E)$$\nDe este modo, cuanto más probable es que ocurra un suceso, menos probable es que ocurra su contrario, y viceversa.\nInterpretación de una probabilidad La probabilidad mide la verosimilitud de un suceso.\nDe manera informal, se puede decir que la probabilidad mide la creencia o la confianza que tenemos en la ocurrencia de un suceso.\n$P(E) = 0 \\Rightarrow$ Mínima verosimilitud $P(E) = 0.5 \\Rightarrow$ Verosimilitud media (máxima incertidumbre) $P(E) = 1 \\Rightarrow$ Máxima verosimilitud Aunque el concepto de probabilidad es el más extendido en aplicaciones que requieren cuantificar la incertidumbre sobre la ocurrencia de un suceso, existen otras formas de cuantificar esa incertidumbre como por ejemplo el odds.\nEl concepto de Odds Definición: Odds $$O(E)=\\frac{\\mbox{Nº casos con $E$}}{\\mbox{Nº casos sin $E$}}=\\frac{P(E)}{P(\\overline E)}$$ Ejemplo Se ha aplicado un tratamiento a 100 personas y se han curado 75, entonces el odds de curación del tratamiento es $$O(E) = \\frac{75}{25} = 3$$\nUn odds puede ser mayor que 1.\nInterpretación de un Odds Los odds también permiten cuantificar la verosimilitud de un suceso\u0026hellip;, pero en una escala diferente, ya que es una razón de probabilidades.\n$O(E) = 0 \\Rightarrow$ Mínima verosimilitud $O(E) = 1 \\Rightarrow$ Verosimilitud media (máxima incertidumbre) $O(E) = \\infty \\Rightarrow$ Máxima verosimilitud Conversión de Odds en probabilidades Es posible convertir un odds en una probabilidad aplicando la siguiente fórmula:\n$$ \\frac{O(E)}{1 + O(E)} = \\frac{\\frac{P(E)}{P(\\overline E)}}{1 + \\frac{P(E)}{P(\\overline E)}} = \\frac{\\frac{P(E)}{P(\\overline E)}}{\\frac{P(\\overline E) + P(E)}{P(\\overline E)}} = P(E)$$\nEjemplo Se ha aplicado un tratamiento a 100 personas y se han curado 75. $$O(E) = \\frac{75}{25} = 3 \\Rightarrow P(E) = \\frac{3}{1+3}=0.75$$\nPrevalencia Definición: Prevalencia\nLa prevalencia de una enfermedad $E$ es la proporción de personas que tienen la enfermedad en un momento concreto. $$\\mbox{Prevalencia}(E) = \\frac{\\mbox{Nº individuos afectados por $E$}}{\\mbox{Tamaño poblacional}}$$ Ejemplo. En una muestra de 1000 personas 150 tenían gripe. La prevalencia de la gripe es aproximadamente $$\\frac{150}{1000}=0.15$$\nIncidencia o riesgo absoluto Definición: Incidencia\nLa incidencia o riesgo absoluto de una enfermedad $E$ es la proporción de nuevos casos durante un periodo determinado (por día, por semana, por mes, etc.) $$R(E)=\\frac{\\mbox{Nº nuevos casos con $E$ en el periodo}}{\\mbox{Tamaño población en riesgo al comienzo del periodo}}$$ Ejemplo. Al comienzo del año se tomó una muestra de 1000 personas sin gripe y al finalizar el año 80 tuvieron gripe. La incidencia de la gripe ese año fue $$ R(E) = \\frac{80}{1000} = 0.08$$\nPrevalencia vs Incidencia Tiempo Casos Tipo estudio Prevalencia Puntual Nuevos y existentes Transversal Incidencia Periodo Solo nuevos Longitudinal La prevalencia muestra el número de personas afectadas (carga de la enfermedad). La incidencia muestra la evolución de la enfermedad y es más útil para detectar brotes y estudiar su causa. La incidencia depende sobre todo de la contagiosidad de la enfermedad, mientras que la prevalencia depende también de la duración de la enfermedad y de lo agresiva que sea. Ejemplo Una enfermedad crónica como la diabetes o la artrosis tiene una incidencia prácticamente constante al depender fundamentalmente de la edad y no ser contagiosas y una prevalencia alta ya que no existe cura para ellas y las personas tampoco mueren a causa de ellas sino que viven con ellas el resto de su vida.\nPor otro lado, una enfermedad como el ébola tiene una incidencia pequeña al no ser muy contagiosa y también una prevalencia pequeña al ser una enfermedad mortal ya que casi todas las personas que se contagian acaban muriendo.\nFinalmente, una enfermedad como la COVID tiene una incidencia muy alta al ser muy contagiosa y una prevalencia parecida a la incidencia ya que la enfermedad suele acabar en un periodo de dos semanas desde el contagio (salvo los casos que necesitan hospitalización).\nAlgunas consideraciones en el caso de la COVID Datos del ministerio de sanidad\nLa incidencia de la COVID se suele dar sobre un periodo de dos semanas (14 días) aunque no siempre.\nLos datos son poco precisos y subestiman el riesgo de la COVID:\nMuchos asintomáticos no son detectados. La detección de casos es mediante test diagnósticos que tienen un margen de error (falsos positivos y falsos negativos). Se calcula dividiendo por el tamaño de la población (nuevos casos por cada 100000 habitantes) pero habría que dividir por el tamaño de la población en riesgo (sin contar ya infectados o inmunizados). Comparación de riesgos Tanto la prevalencia como la incidencia permiten estudiar la magnitud y la evolución de una enfermedad pero no permiten analizar las posibles causas. Cuando se quiere investigar si la exposición a un determinado factor puede influir en el desarrollo de una enfermedad hay que comparar los riesgos en dos grupos:\nGrupo tratamiento $T$: Individuos expuestos a un factor. Grupo control $C$: Individuos no expuestos al factor. $$ \\begin{array}{|l|cc|} \\hline \u0026amp; E \u0026amp; \\overline E\\newline \\hline T \u0026amp; a \u0026amp; b\\newline C \u0026amp; c \u0026amp; d\\newline \\hline \\end{array} $$\nRiesgo relativo Definición: Riesgo relativo $$RR(E)=\\frac{\\mbox{Riesgo grupo tratamiento}}{\\mbox{Riesgo grupo control}}=\\frac{R_T(E)}{R_C(E)}=\\frac{a/(a+b)}{c/(c+d)}$$ Ejemplo.\n$$ \\begin{array}{|l|cc|} \\hline \u0026amp; \\mbox{Gripe } G \u0026amp; \\mbox{No gripe }\\overline E\\newline \\hline \\mbox{Vacunados } T \u0026amp; 20 \u0026amp; 480 \\newline \\mbox{No vacunados } C \u0026amp; 80 \u0026amp; 420 \\newline \\hline \\end{array} $$\n$$RR(G) = \\frac{20/(20+480)}{80/(80+420)} = 0.25$$\nInterpretación del riesgo relativo $RR=1$ $\\Rightarrow$ No hay asociación entre el suceso y la exposición al factor. $RR\u0026lt;1$ $\\Rightarrow$ La exposición al factor disminuye el riesgo del suceso. $RR\u0026gt;1$ $\\Rightarrow$ La exposición al factor aumenta el riesgo del suceso. Odds ratio Del mismo modo que se pueden comparar los riesgos en los grupos tratamiento y control, se pueden comparar también los odds.\nDefinición: Odds ratio $$OR(E)=\\frac{\\mbox{Odds grupo tratamiento}}{\\mbox{Odds grupo control}}=\\frac{O_T(E)}{O_C(E)}=\\frac{a/b}{c/d}=\\frac{ad}{bc}$$ Ejemplo.\n$$ \\begin{array}{|l|cc|} \\hline \u0026amp; \\mbox{Gripe } G \u0026amp; \\mbox{No gripe }\\overline E\\newline \\hline \\mbox{Vacunados } T \u0026amp; 20 \u0026amp; 480 \\newline \\mbox{No vacunados } C \u0026amp; 80 \u0026amp; 420 \\newline \\hline \\end{array} $$\n$$OR(G) = \\frac{20/480}{80/420} = 0.22$$\nInterpretación del odds ratio $OR=1$ $\\Rightarrow$ No existe asociación entre el suceso y la exposición al factor. $OR\u0026lt;1$ $\\Rightarrow$ La exposición al factor disminuye el riesgo del suceso. $OR\u0026gt;1$ $\\Rightarrow$ La exposición al factor aumenta el riesgo del suceso. Riesgo relativo vs odds ratio El riesgo relativo es una comparación de probabilidades pero depende de la incidencia de la enfermedad.\nLa interpretación del odds ratio es más enrevesada porque es contrafactual, ya que da cuántas veces es más frecuente el suceso en el grupo tratamiento en comparación con el control, asumiendo que en el grupo control es tan frecuente que ocurra el suceso como que no. Su ventaja es que no depende de la incidencia de la enfermedad.\nEjemplo. Para estudiar la asociación entre fumar y el cáncer de pulmón se han tomado dos muestras, la segunda con el doble de pacientes sanos que la primera.\n$$ \\begin{array}{|l|cc|} \\hline \\textbf{Muestra 1} \u0026amp; \\mbox{Cáncer } E \u0026amp; \\mbox{No cáncer }\\overline E\\newline \\hline \\mbox{Fumadores } \u0026amp; 60 \u0026amp; 80 \\newline \\mbox{No fumadores } C \u0026amp; 40 \u0026amp; 320 \\newline \\hline \\end{array} $$\n$$ \\begin{aligned} RR(E) \u0026amp;= \\frac{60/(60+80)}{40/(40+320)} = 3.86 \\newline OR(E) \u0026amp;= \\frac{60/80}{40/320} = 6 \\end{aligned} $$\n$$ \\begin{array}{|l|cc|} \\hline \\textbf{Muestra 2} \u0026amp; \\mbox{Cáncer } E \u0026amp; \\mbox{No cáncer }\\overline E\\newline \\hline \\mbox{Fumadores } \u0026amp; 60 \u0026amp; 160 \\newline \\mbox{No fumadores } C \u0026amp; 40 \u0026amp; 640 \\newline \\hline \\end{array} $$\n$$ \\begin{aligned} RR(E) \u0026amp;= \\frac{60/(60+160)}{40/(40+640)} = 4.64 \\newline OR(E) \u0026amp;= \\frac{60/160}{40/640} = 6 \\end{aligned} $$\nAplicación a la COVID La edad aumenta la gravedad El riesgo de infección depende del grupo sanguíneo El déficit de vitamina D aumenta el riesgo de infección Las personas con demencia tienen mayor riesgo de infectase El Remdesivir acelera la recuperación Tests diagnósticos Otra aplicación de la Epidemiología basado en el cálculo de probabilidades son los test diagnósticos.\nUn test diagnóstico es un test usado para diagnosticar una enfermedad o descartarla.\nNormalmente producen dos resultados: positivo (+) a favor de la enfermedad y negativo (-) en contra de ella.\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; \\color{green}{\\mbox{Verdadero positivo }VP} \u0026amp; \\color{red}{\\mbox{Falso positivo }FP} \\newline \\mbox{Negativo }- \u0026amp; \\color{red}{\\mbox{Falso negativo }FN} \u0026amp; \\color{green}{\\mbox{Verdadero negativo }VN}\\newline \\hline \\end{array} $$\nSensibilidad y especificidad de un test La fiabilidad de un test diagnóstico depende de las siguientes probabilidades.\nDefinición: Sensibilidad\nLa sensibilidad de un test diagnóstico es la proporción de resultados positivos del test en personas con la enfermedad, $$P(+|E)=\\frac{VP}{VP+FN}$$ Definición: Especificidad\nLa especificidad de un test diagnóstico es la proporción de resultados negativos del test en personas sin la enfermedad, $$P(-|\\overline{E})=\\frac{VN}{VN+FP}$$ Ejemplo. Un test de antígenos para detectar el SARS-COV-2 tiene una sensibilidad del 70% y una especificidad del 95%.\nSi aplicamos el test a 100 enfermos dará 70 positivos y 30 negativos. Si aplicamos el test a 100 sanos dará 95 negativos y 5 positivos. La fiabilidad del test depende también de la prevalencia de la enfermedad.\nEjemplo. Utilizando el test del ejemplo anterior en una población de 1000 personas y suponiendo una prevalencia del 1% se tiene\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; 7 \u0026amp; 50 \\newline \\mbox{Negativo }- \u0026amp; 3 \u0026amp; 940\\newline \\hline \\end{array} $$\nMientras que si la prevalencia es del 10% se tiene\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; 70 \u0026amp; 45 \\newline \\mbox{Negativo }- \u0026amp; 30 \u0026amp; 855\\newline \\hline \\end{array} $$\nPara ver los resultados de un test diagnóstico en función de la prevalencia, la sensibilidad y la especificidad se puede utilizar esta aplicación para test diagnósticos\nCuándo usar un test más sensible o más específico Una mayor sensibilidad aumenta el número de verdaderos positivos y disminuye el número de falsos negativos, mientras que una mayor especificidad aumenta el número de verdaderos negativos y disminuye el número de falsos positivos. Por tanto, utilizaremos un test más sensible cuando:\nLa enfermedad es grave o muy contagiosa y es importante detectarla.\nLa enfermedad es curable.\nLos falsos positivos no provocan traumas serios.\nY utilizaremos un test más específico cuando:\nLa enfermedad es importante pero difícil o imposible de curar.\nLos falsos positivos pueden provocar traumas serios.\nEl tratamiento de los falsos positivos puede tener graves consecuencias.\nTanto la sensibilidad como la especificidad son indicadores de la fiabilidad de un test a priori, es decir, antes de aplicar el test. Una vez que el test se ha aplicado y se conoce su resultado, a la hora de diagnosticar la enfermedad o rechazarla, es mejor utilizar los valores predictivos.\nValores predictivos de un test Definición: Valor predictivo positivo\nEl valor predictivo positivo de un test diagnóstico es la proporción de personas con la enfermedad entre las personas con resultado positivo en el test, $$P(E|+) = \\frac{VP}{VP+FP}$$ Definición: Valor predictivo negativo\nEl valor predictivo negativo de un test diagnóstico es la proporción de personas sin la enfermedad entre las personas con resultado negativo en el test, $$P(\\overline{E}|-) = \\frac{VN}{VN+FN}$$ Ejemplo. Siguiendo con el ejemplo anterior y suponiendo una prevalencia del 1%, se tiene\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; 7 \u0026amp; 50 \\newline \\mbox{Negativo }- \u0026amp; 3 \u0026amp; 940\\newline \\hline \\end{array} $$\nMientras que si la prevalencia es del 10% se tiene\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; 70 \u0026amp; 45 \\newline \\mbox{Negativo }- \u0026amp; 30 \u0026amp; 855\\newline \\hline \\end{array} $$\n$$VPP = \\frac{7}{7+50} = 0.123$$ $$VPN = \\frac{940}{3+940} = 0.997$$\nMientras que si la prevalencia es del 10% se tiene\n$$ \\begin{array}{|l|cc|} \\hline \\mbox{Test} \u0026amp; E \u0026amp; \\overline E\\newline \\hline \\mbox{Positivo }+ \u0026amp; 70 \u0026amp; 45 \\newline \\mbox{Negativo }- \u0026amp; 30 \u0026amp; 855\\newline \\hline \\end{array} $$\n$$VPP = \\frac{70}{70+45} = 0.609$$ $$VPN = \\frac{855}{30+855} = 0.966$$\nInterpretación de los valores predictivos $$ \\begin{array}{rcl} VPP\u0026gt;0.5 \u0026amp; \\Rightarrow \u0026amp; \\mbox{Diagnosticar la enfermedad}\\newline VPN\u0026gt;0.5 \u0026amp; \\Rightarrow \u0026amp; \\mbox{Descartar la enfermedad} \\end{array} $$\nCurva ROC En los test diagnósticos basado en la medición de una variable cuantitativa (como por ejemplo los test de antígenos para la COVID) la sensibilidad y la especificidad dependen el umbral fijado para dar un positivo.\nPara evaluar la fiabilidad de estos tests se suele utilizar la curva ROC.\nDefinición: Curva ROC\nLa curva ROC (Receiver Operating Characteristic) de un test diagnóstico es la curva que resulta de representar la razón de verdaderos positivos (sensibilidad) frente a la razón de falsos positivos (1-especificidad) para los diferentes umbrales de positivo del test. Interpretación de la curva ROC Cada punto de la curva corresponde a un umbral para el positivo. El mejor test es el que que se sitúa en la esquina superior izquierda de el espacio (sensibilidad 1 y especificidad 1). La diagonal representa un test con un diagnóstico aleatorio. Area debajo de la curva ROC (AUC) Para evaluar la fiabilidad de un test diagnóstico independientemente del umbral de positivos se suele medir el area bajo la curva ROC, también conocida como AUC (area under the curve). Según del valor de la AUC, se tiene\n0.5: Diagnóstico aleatorio. [0.5, 0.6): Test malo. [0.6, 0.75): Test regular. [0.75, 0.9): Test bueno. [0.9, 0.97): Test muy bueno. [0.97, 1): Test excelente. Aplicaciones a la COVID Fiabilidad del diagnóstico por PCR Fiabilidad del diagnóstico por el test de antígenos Comparativa de test Test comerciales Los test de antígenos son más rápidos que las PCR pero son menos fiables.\nPor un lado son menos sensibles que una prueba de PCR debido a que se se requiere una mayor cantidad de virus en las mucosas nasales o bucales para que se muestre un resultado positivo. Eso limita su efectividad cuando las personas llevan poco tiempo infectadas y el virus está empezando a reproducirse.\nPor otro lado también son menos específicos que la PCR, y por tanto, producen más falsos positivos.\nReferencias Acción matemática contra el coronavirus R Epidemic Consortium (RECON) Analysis of epidemiological data using R and Epicalc R resources about COVID-19 Aplicación para el análisis de la fiabilidad de test diagnósticos ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1636443071,"objectID":"59d6fbf6f9fe0cfe6c731ff3c149f526","permalink":"/docencia/estadistica/tutoriales/epidemiologia/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/tutoriales/epidemiologia/","section":"docencia","summary":" ","tags":["Riesgos","Test Diagnósticos"],"title":"Epidemiología","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable"],"content":"El concepto de función ¿Qué es una función? Definición - Función de una variable. Una función $f$ de un conjunto $A$ en otro $B$ es una relación que asocia cada elemento $a\\in A$, con un único elemento de $B$ que se denota $f(a)$, y se llama imagen de $a$ mediante $f$.\n$$\\begin{aligned} f:\\,\u0026amp;A\\longrightarrow B\\newline \u0026amp;a\\longrightarrow f(a)\\end{aligned}$$\nCuando el conjunto inicial y final es el de los números reales $\\mathbb{R}$, entonces se dice que $f:\\mathbb{R}\\rightarrow \\mathbb{R}$ es una función real de variable real.\nFormas de representar una función Por extensión Representación en forma de tabla\n$$\\begin{array}{|c|r|r|r|r|r|r|} \\hline x \u0026amp; -2 \u0026amp; -1 \u0026amp; 0 \u0026amp; 1 \u0026amp; 2 \u0026amp; \\cdots \\newline \\hline y \u0026amp; 4 \u0026amp; 1 \u0026amp; 0 \u0026amp; 1 \u0026amp; 4 \u0026amp; \\cdots \\newline \\hline \\end{array}$$\nRepresentación gráfica\nPor Intensión Representación algebraica explícita\n$$y=x^2$$\nRepresentación algebraica implícita\n$$y-x^2=0$$\nRepresentación algebraica paramétrica\n$$\\begin{cases} y=t^2\\newline x=t \\end{cases}$$\nLa función Identidad Definición - Función Identidad. Se llama función identidad, a toda función $Id: A\\rightarrow A$ que asocia cada elemento de $A$ con sigo mismo, es decir,\n$$Id(x)=x.$$\nDominio e imagen de una función Dominio de una función Definición - Dominio de una función. El dominio de una función $f$ es el conjunto de valores para los que la función está definida\n$$Dom(f)={x\\in \\mathbb{R}: f(x)\\in \\mathbb{R}}$$\nEjemplo. Dada la función $$f(x)=\\frac{1}{\\sqrt{x^2-1}}$$\nPara determinar su dominio hay que eliminar los valores en los que no está definida la función. En este caso hay que eliminar los valores que hacen negativo el radicando de la raíz del denominador, es decir, los valores de $x$ tales que $x^2-1\u0026lt;0$, que son los valores que cumplen $-1\u0026lt;x\u0026lt;1$, pero también hay que eliminar del dominio los valores que anulan el denominador, es decir, los valores de $x$ tales que $\\sqrt{x^2-1}=0$, que son $x=-1$ y $x=1$. Por tanto, su dominio es\n$$\\mbox{Dom}(f)=(-\\infty,-1)\\cup(1,\\infty)$$\nImagen de una función Definición - Imagen de una función. La imagen de una función $f$ es el conjunto de valores que la función puede tomar\n$$Img(f)={y\\in \\mathbb{R}: y=f(x) \\mbox{ para algún } x\\in\\mathbb{R}}$$\nEjemplo. Dada la función $f(x)=x^2-2$\nSu imagen es\n$$\\mbox{Img}(f)=[-2,\\infty)$$\nya que la función cuadrática $x^2$ puede tomar cualquier valor de $0$ a $\\infty$ (no toma nunca valores negativos), y al restarle 2, el mínimo valor que puede tomar la función $f$ es $-2$.\nComposición e inversa de una función Composición de funciones Definición - Composición de funciones. Dadas dos funciones $g:A\\rightarrow B$ y $f:B\\rightarrow C$, se define la función compuesta $f\\circ g$, (leído $g$ compuesto con $f$) como la función\n$$\\begin{aligned} f\\circ g:\\,\u0026amp; A\\longrightarrow C\\newline \u0026amp; x\\longrightarrow f(g(x))\\end{aligned}$$\nPara calcular la función compuesta $f\\circ g(x)$, primero se aplica $g$ sobre $x$ y luego, se aplica $f$ sobre $g(x)$:\n$$x\\stackrel{g}{\\longrightarrow}g(x)\\stackrel{f}{\\longrightarrow}f(g(x))$$\nEjemplo. Si $g(x)=\\sqrt x$ y $f(x)=\\operatorname{sen} x$, entonces\n$$f\\circ g(x)=f(g(x))=f(\\sqrt x)=\\operatorname{sen} \\sqrt x.$$\nInversa de una función Definición - Función inversa. Se llama función inversa de $f:A\\rightarrow B$ a la función $f^{-1}:B\\rightarrow A$ (cuando exista) que cumple\n$$f\\circ f^{-1}=f^{-1}\\circ f=Id(x)$$\nLa función inversa de $f$ deshace o revierte el efecto de $f$. Es decir, si $f:A\\rightarrow B$ asocia un elemento $x\\in A$ con otro $y\\in B$, entonces $f^{-1}$ asocia el elemento $y$ con el $x$.\nEjemplo. La inversa de $f(x)=x^3$ es la función $f^{-1}(x)=\\sqrt[3]{x}.$ Sin embargo, la inversa de la función $x^2$ no es $\\sqrt{x}$ ya que la raíz tiene dos imágenes, una positiva y otra negativa, y por tanto no sería una función. 1\nCrecimiento de una función Definición - Función creciente y decreciente. Se dice que una función $f$ es creciente en un intervalo $I$, si para todo $x_1,x_2\\in I$, con $x_1\u0026lt;x_2$, se cumple $f(x_1)\\leq f(x_2)$.\nSe dice que una función $f$ es decreciente en un intervalo $I$, si para todo $x_1,x_2\\in I$, con $x_1\u0026lt;x_2$, se cumple $f(x_1)\\geq f(x_2)$.\nExtremos de una función Definición - Máximo y mínimo relativo. Se dice que una función $f$ tiene un máximo relativo en $x_0$, si existe un $\\delta\u0026gt;0$ tal que para todo $x\\in (x_0-\\delta,x_0+\\delta)$ se cumple $f(x_0)\\geq f(x)$.\nSe dice que una función $f$ tiene un mínimo relativo en $x_0$, si existe un $\\delta\u0026gt;0$ tal que para todo $x\\in (x_0-\\delta,x_0+\\delta)$ se cumple $f(x_0)\\leq f(x)$.\nConcavidad de una función Definición - Función cóncava y convexa. Se dice que una función $f$ es cóncava en un intervalo $I$, si para todo $x_1,x_2\\in I$, con $x_1\u0026lt;x_2$, se cumple que el segmento que une los puntos $(x_1,f(x_1))$ y $(x_2,f(x_2))$ queda por encima de la gráfica de $f$.\nSe dice que una función $f$ es convexa en un intervalo $I$, si para todo $x_1,x_2\\in I$, con $x_1\u0026lt;x_2$, se cumple que el segmento que une los puntos $(x_1,f(x_1))$ y $(x_2,f(x_2))$ queda por debajo de la gráfica de $f$.\nAl punto donde cambia la concavidad de una función se le llama punto de inflexión.\nFunciones periódicas Definición - Función periódica y periodo. Se dice que una función $f$ es periódica si existe un valor $h\u0026gt;0$ tal que\n$$f(x+h)=f(x)$$\npara todo $x\\in \\textrm{Dom}(f)$.\nAl menor valor de $h$ que verifica la igualdad anterior se le llama periodo de $f$, y a la diferencia entre el máximo y el mínimo de la función se le llama amplitud de $f$.\nFunciones polinómicas Definición - Función polinómica. Una función polinómica es una función de la forma\n$$f(x)=a_0+a_1x+a_2x^2+\\cdots+a_nx^n,$$\ndonde $n$ es un entero no negativo que se llama grado del polinomio, y $a_0,\\ldots,a_n$ son constantes reales ($a_n\\neq 0$) que se llaman coeficientes del polinomio.\nEjemplo.\nPropiedades de las funciones polinómicas Su dominio es $\\mathbb{R}$. Si el grado es impar, su imagen es $\\mathbb{R}$. La función identidad $Id(x)=x$ es un polinomio de grado 1. Las funciones constantes $f(x)=c$ son polinomios de grado 0. Un polinomio de grado $n$ tiene a lo sumo $n$ raíces (puntos donde $f(x)=0$). Funciones racionales Definición - Función racional. Una función racional es una función de la forma\n$$f(x)=\\frac{p(x)}{q(x)}$$\ndonde $p(x)$ y $q(x)$ son funcione polinómicas con $q(x)\\neq 0$.\nEjemplo.\nPropiedades de las funciones racionales Su dominio es $\\mathbb{R}$ menos las raíces del polinomio del denominador. En estos puntos suele haber asíntotas verticales. La tendencia en $\\infty$ y $-\\infty$ depende del grado del numerador y del denominador. Si $f(x)=\\dfrac{a_0+\\cdots +a_nx^n}{b_0+\\cdots+b_mx^m}$, entonces Si $n\u0026gt;m$ $\\rightarrow$ $f(\\pm\\infty)=\\pm\\infty$. Si $n\u0026lt;m$ $\\rightarrow$ $f(\\pm\\infty)=0$. Si $n=m$ $\\rightarrow$ $f(\\pm\\infty)=\\dfrac{a_n}{b_m}$. Los polinomios son casos particulares de funciones racionales. Pueden descomponerse en suma de fracciones simples. Funciones potenciales Definición - Función potencial. Una función potencial es una función de la forma $$f(x)=x^r,$$ donde $r$ es un número real. Ejemplo.\nPropiedades de las funciones potenciales Si el exponente es un número racional $n/m$, entonces $$x^{n/m}=\\sqrt[m]{x^n}.$$ Estas funciones se llaman irracionales. En este caso, si $m$ es impar el dominio es $\\mathbb{R}$, si $m$ es par el dominio es $\\mathbb{R}^+$. Todas pasan por el punto $(1,1)$. El crecimiento depende del exponente. Si $x\u0026gt;0$ entonces: Exponente positivo $\\Rightarrow$ función creciente. Exponente negativo $\\Rightarrow$ función decreciente.\nAdemás, si $f(x)=x^r$ y $g(x)=x^s$, entonces: Si $r\u0026lt;s$ $\\Rightarrow$ $f(x)\u0026gt;g(x)$ si $0\u0026lt;x\u0026lt;1$ y $f(x)\u0026lt;g(x)$ si $x\u0026gt;1$. Si $r\u0026gt;s$ $\\Rightarrow$ $f(x)\u0026lt;g(x)$ si $0\u0026lt;x\u0026lt;1$ y $f(x)\u0026gt;g(x)$ si $x\u0026gt;1$. Los polinomios de la forma $f(x)=x^n$ son un caso particular de funciones potenciales. Funciones exponenciales Definición - Función exponencial. Una función exponencial de base $a$ es una función de la forma $$f(x)=a^x,$$ donde $a$ es un valor real positivo distinto de 1. Ejemplo.\nPropiedades de las funciones exponenciales Su dominio es $\\mathbb{R}$. Su imagen es $\\mathbb{R}^+$. Todas pasan por el punto $(0,1)$. El crecimiento depende de la base. Si $f(x)=a^x$ entonces Si $0\u0026lt;a\u0026lt;1$ $\\Rightarrow$ función decreciente. Si $a\u0026gt;1$ $\\Rightarrow$ función creciente. Además, si $f(x)=a^x$ y $g(x)=b^x$ con $a\u0026lt;b$, entonces Si $x\u0026lt;0$ $\\Rightarrow$ $f(x)\u0026gt;g(x)$. Si $x\u0026gt;0$ $\\Rightarrow$ $f(x)\u0026lt;g(x)$. Un caso particular sería $a=1$ que es una función constante. Funciones logarítmicas Definición - Función logarítmica. Dada una función exponencial $f(x)=a^x$, se define la función logarítmica de base $a$ como la función inversa de $f$, y se denota\n$$f^{-1}(x)=\\log_a x,$$\ndonde $a$ es un valor real positivo distinto de 1.\nEjemplo.\nPropiedades de las funciones logarítmicas Por ser la inversa de la función exponencial, sus gráficas son simétricas respecto a la bisectriz del primer y tercer cuadrantes. Por tanto: Su dominio es la imagen de la función exponencial, es decir $\\mathbb{R}^+$. Su imagen es el dominio de la función exponencial, es decir $\\mathbb{R}$. Todas pasan por el punto $(1,0)$. El crecimiento depende de la base. Si $f(x)=\\log_a x$ entonces Si $0\u0026lt;a\u0026lt;1$ $\\Rightarrow$ función decreciente. Si $a\u0026gt;1$ $\\Rightarrow$ función creciente. Además, si $f(x)=\\log_a x$ y $g(x)=\\log_b x$ con $a\u0026lt;b$, entonces Si $0\u0026lt;x\u0026lt;1$ $\\Rightarrow$ $f(x)\u0026lt;g(x)$. Si $x\u0026gt;1$ $\\Rightarrow$ $f(x)\u0026gt;g(x)$ No tiene sentido para $a=1$ por que sería una función constante. Funciones trigonométricas Surgen en geometría al medir las relaciones entre los catetos de un triángulo rectángulo, que dependen del ángulo del cateto contiguo y la hipotenusa de dicho triángulo. No obstante, esta no es la única definición posible, sino que también pueden definirse a partir de la función exponencial compleja.\nSeno Coseno Tangente Arcoseno Arcocoseno Arcotangente Seno de un ángulo Definición - Seno de un ángulo. Sea $\\alpha$ cualquiera de los ángulos agudos de un triángulo rectángulo, se define el seno de $\\alpha$, y se nota $\\operatorname{sen} \\alpha$, como el cociente entre el cateto opuesto y la hipotenusa. La definición se extiende fácilmente a ángulos de circunferencia con vértice en el origen y uno de sus lados el eje $OX$, como el cociente entre la ordenada de cualquier punto del otro lado y su distancia al vértice.\nFunción seno Definición - Función seno. Se define la función seno,\n$$f(x)=\\operatorname{sen} x$$\ncomo la función que asocia a cada ángulo $x$ (habitualmente medido en radianes) su seno.\nPropiedades de la función seno Su dominio es $\\mathbb{R}$. Su imagen es el intervalo $[-1,1]$. Es periódica, con periodo $2\\pi$ y amplitud $2$ $$\\operatorname{sen} (x+2k\\pi)= \\operatorname{sen} x\\quad \\forall k\\in \\mathbb{Z}$$\nAlgunos valores para recordar: $\\operatorname{sen} 0=0$, $\\operatorname{sen} \\pi/6= 1/2$, $\\operatorname{sen} \\pi/4=\\sqrt{2}/2$, $\\operatorname{sen} \\pi/3= \\sqrt{3}/2$, $\\operatorname{sen} \\pi/2 =1$, $\\operatorname{sen} \\pi = 0$, $\\operatorname{sen} 3\\pi/2=-1$, $\\operatorname{sen} 2\\pi=0$. Es una función impar: $\\operatorname{sen}(-x)=-\\operatorname{sen} x$. Coseno de un ángulo Definición - Coseno de un ángulo. Sea $\\alpha$ cualquiera de los ángulos agudos de un triángulo rectángulo, se define el coseno de $\\alpha$, y se nota $\\cos \\alpha$, como el cociente entre el cateto contiguo y la hipotenusa. La definición se extiende fácilmente a ángulos de circunferencia con vértice en el origen y uno de sus lados el eje $OX$, como el cociente entre la abscisa de cualquier punto del otro lado y su distancia al vértice.\nFunción coseno Definición - Función coseno. Se define la función coseno,\n$$f(x)=\\cos x$$\ncomo la función que asocia a cada ángulo $x$ (habitualmente medido en radianes) su coseno.\nPropiedades de la función coseno Su dominio es $\\mathbb{R}$.\nSu imagen es el intervalo $[-1,1]$.\nEs periódica, con periodo $2\\pi$ y amplitud $2$\n$$\\cos (x+2k\\pi)= \\cos x\\quad \\forall k\\in \\mathbb{Z}$$\nAlgunos valores para recordar: $\\cos 0=1$, $\\cos \\pi/6= \\sqrt{3}/2$, $\\cos \\pi/4=\\sqrt{2}/2$, $\\cos \\pi/3= \\sqrt{2}/2$, $\\cos \\pi/2 =0$, $\\cos \\pi = -1$, $\\cos 3\\pi/2=0$, $\\cos 2\\pi=1$.\nEs una función par: $\\cos(-x)=\\cos x$.\nTangente de un ángulo Definición - Tangente de un ángulo. Sea $\\alpha$ cualquiera de los ángulos agudos de un triángulo rectángulo, se define la tangente de $\\alpha$, y se nota $\\operatorname{tg} \\alpha$, como el cociente entre el cateto opuesto y el cateto contiguo. La definición se extiende fácilmente a ángulos de circunferencia con vértice en el origen y uno de sus lados el eje $OX$, como el cociente entre la ordenada y la abscisa de cualquier punto del otro lado.\nFunción tangente Definición - Función tangente. Se define la función tangente,\n$$f(x)=\\operatorname{tg} x=\\frac{\\operatorname{sen} x}{\\cos x}$$\ncomo la función que asocia a cada ángulo $x$ (habitualmente medido en radianes) su tangente.\nPropiedades de la función tangente Su dominio es $\\mathbb{R}$ menos las raíces del coseno, es decir $\\mathbb{R}-{2k\\pi/2: k\\in \\mathbb{Z}}$.\nSu imagen es $\\mathbb{R}$.\nEs periódica, con periodo $2\\pi$\n$$\\operatorname{tg} (x+2k\\pi)= \\operatorname{tg} x\\quad \\forall k\\in \\mathbb{Z}$$\nAlgunos valores para recordar: $\\operatorname{tg} 0=0$, $\\operatorname{tg} \\pi/6= 1/\\sqrt{3}$, $\\operatorname{tg} \\pi/4=1$, $\\operatorname{tg} \\pi/3= \\sqrt{3}$, $\\operatorname{tg} \\pi =0$, $\\operatorname{tg} 2\\pi=0$.\nFunción arcoseno Definición - Función arcoseno. Se define la función arcoseno,\n$$f(x)=\\operatorname{arcsen} x$$\ncomo la función inversa de la función seno.\nPropiedades de la función arcoseno Por ser la inversa de la función seno, sus gráficas son simétricas respecto a la bisectriz del primer y tercer cuadrantes. Por tanto: Su dominio es la imagen de la función seno, es decir $[-1,1]$. Su imagen es el dominio restringido de la función seno, es decir $[-\\pi/2,\\pi/2]$.2 Es creciente en todo el dominio. Función arcocoseno Definición - Función arcocoseno. Se define la función arcocoseno,\n$$f(x)=\\operatorname{arccos} x$$\ncomo la función inversa de la función coseno.\nPropiedades de la función arcoseno Por ser la inversa de la función coseno, sus gráficas son simétricas respecto a la bisectriz del primer y tercer cuadrantes. Por tanto: Su dominio es la imagen de la función coseno, es decir $[-1,1]$. Su imagen es el dominio restringido de la función coseno, es decir $[0,\\pi]$. 3 Es decreciente en todo el dominio. Función arcotangente Definición - Función arcotangente. Se define la función arcotangente,\n$$f(x)=\\operatorname{arctg} x$$\ncomo la función inversa de la función tangente.\nPropiedades de la función arcotangente Por ser la inversa de la función tangente, sus gráficas son simétricas respecto a la bisectriz del primer y tercer cuadrantes. Por tanto: Su dominio es la imagen de la función tangente, es decir $\\mathbb{R}$. Su imagen es el dominio restringido de la función tangente, es decir $(-\\pi/2,\\pi/2)$. 4 Es creciente en todo el dominio. Algunas relaciones trigonométricas $\\operatorname{sen}^2 x+\\cos^2 x=1$ $\\operatorname{sen}(x+y)=\\operatorname{sen} x \\cos y+\\cos x \\operatorname{sen} y$ $\\cos(x+y)=\\cos x \\cos y-\\operatorname{sen} x \\operatorname{sen} y$ $\\operatorname{tg} (x+y)= \\dfrac{\\operatorname{tg} x+\\operatorname{tg} y}{1-\\operatorname{tg} x \\operatorname{tg} y}$ $\\operatorname{sen} x + \\operatorname{sen} y = 2 \\operatorname{sen} \\dfrac{x+y}{2}\\cos\\dfrac{x-y}{2}$ $\\cos x + \\cos y = 2 \\cos \\dfrac{x+y}{2}\\cos\\dfrac{x-y}{2}$ $\\cos x - \\cos y = -2 \\operatorname{sen} \\dfrac{x+y}{2}\\operatorname{sen}\\dfrac{x-y}{2}$ Notas\nPara que exista la inversa de la función cuadrática es necesario restringir el dominio a los reales positivos para que sea inyectiva. En tal caso, la inversa es $+\\sqrt{x}$.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPara que exista la inversa de la función seno, es necesario restringir su dominio a $[-\\pi/2,\\pi/2]$ para que sea inyectiva.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPara que exista la inversa de la función coseno, es necesario restringir su dominio a $[0,\\pi]$ para que sea inyectiva.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\nPara que exista la inversa de la función tangente, es necesario restringir su dominio a $(\\pi/2,\\pi/2)$ para que sea inyectiva.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600986575,"objectID":"651da744ad3b03bf96fe4d80a6e06877","permalink":"/docencia/calculo/manual/funciones-elementales/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/funciones-elementales/","section":"docencia","summary":"El concepto de función ¿Qué es una función? Definición - Función de una variable. Una función $f$ de un conjunto $A$ en otro $B$ es una relación que asocia cada elemento $a\\in A$, con un único elemento de $B$ que se denota $f(a)$, y se llama imagen de $a$ mediante $f$.","tags":["Función"],"title":"Funciones elementales","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Para hacer estos ejercicios es necesario haber hecho antes los ejercicios de creación y actualización de repositorios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:\n\u0026gt; git clone https://github.com/asalber/libro-git.git \u0026gt; cd libro-git \u0026gt; git reset --hard 8c808 \u0026gt; git remote remove origin Ejercicio 1 Mostrar el historial de cambios del repositorio. Crear la carpeta capitulos y crear dentro de ella el fichero capitulo1.txt con el siguiente texto. Git es un sistema de control de versiones ideado por Linus Torvalds.\nAñadir los cambios a la zona de intercambio temporal. Hacer un commit de los cambios con el mensaje \u0026ldquo;Añadido capítulo 1.\u0026rdquo; Volver a mostrar el historial de cambios del repositorio. Solución \u0026gt; git log \u0026gt; mkdir capitulos \u0026gt; cat \u0026gt; capitulos/capitulo1.txt Git es un sistema de control de versiones ideado por Linus Torvalds. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido capítulo 1.\u0026quot; \u0026gt; git log Resolución Ejercicio 2 Crear el fichero capitulo2.txt en la carpeta capitulos con el siguiente texto. El flujo de trabajo básico con Git consiste en: 1- Hacer cambios en el repositorio. 2- Añadir los cambios a la zona de intercambio temporal. 3- Hacer un commit de los cambios.\nAñadir los cambios a la zona de intercambio temporal. Hacer un commit de los cambios con el mensaje \u0026ldquo;Añadido capítulo 2.\u0026rdquo; Mostrar las diferencias entre la última versión y dos versiones anteriores. Solución \u0026gt; cat \u0026gt; capitulos/capitulo2.txt El flujo de trabajo básico con Git consiste en: 1- Hacer cambios en el repositorio. 2- Añadir los cambios a la zona de intercambio temporal. 3- Hacer un commit de los cambios. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido capítulo 2.\u0026quot; \u0026gt; git diff HEAD~2..HEAD Resolución Ejercicio 3 Crear el fichero capitulo3.txt en la carpeta capitulos con el siguiente texto. Git permite la creación de ramas lo que permite tener distintas versiones del mismo proyecto y trabajar de manera simultanea en ellas.\nAñadir los cambios a la zona de intercambio temporal. Hacer un commit de los cambios con el mensaje \u0026ldquo;Añadido capítulo 3.\u0026rdquo; Mostrar las diferencias entre la primera y la última versión del repositorio. Solución \u0026gt; cat \u0026gt; capitulos/capitulo3.txt Git permite la creación de ramas lo que permite tener distintas versiones del mismo proyecto y trabajar de manera simultanea en ellas. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido capítulo 3.\u0026quot; \u0026gt; git log \u0026gt; git diff \u0026amp;lt;codigo hash de la primera version\u0026gt;..HEAD Resolución Ejercicio 4 Añadir al final del fichero indice.txt la siguiente línea:\nCapítulo 5: Conceptos avanzados\nAñadir los cambios a la zona de intercambio temporal.\nHacer un commit de los cambios con el mensaje \u0026ldquo;Añadido capítulo 5 al índice.\u0026rdquo;.\nMostrar quién ha hecho cambios sobre el fichero indice.txt.\nSolución \u0026gt; echo \u0026quot;Capítulo 5: Conceptos avanzados\u0026quot; \u0026gt;\u0026gt; indice.txt \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido capítulo 5 al índice.\u0026quot; \u0026gt; git annotate indice.txt Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"f97ff89746a541ceec562106ead29315","permalink":"/docencia/git/ejercicios/historial-cambios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/historial-cambios/","section":"docencia","summary":"Para hacer estos ejercicios es necesario haber hecho antes los ejercicios de creación y actualización de repositorios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:","tags":["Ejercicios"],"title":"Ejercicios de manejo del historial de cambios","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Todas\nAl realizar un estudio de regresión lineal de dos variables X e Y, se sabe que las rectas de regresión se cortan en el punto (5,15), que el coeficiente de correlación lineal es -0.85 y que la pendiente de la recta de regresión de X sobre Y es el doble que la de la recta de Y sobre X. Se pide:\nCalcular las ecuaciones de las rectas de regresión de Y sobre X y de X sobre Y. ¿Qué porcentaje de la variabilidad de Y queda explicado por el modelo lineal? SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"85700894f08ddfa4f7c6489e625f534c","permalink":"/docencia/estadistica/ejercicios/regresion-lineal/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/regresion-lineal/","section":"docencia","summary":"Ejercicio 1 Titulación: Todas\nAl realizar un estudio de regresión lineal de dos variables X e Y, se sabe que las rectas de regresión se cortan en el punto (5,15), que el coeficiente de correlación lineal es -0.","tags":["Regresión","Correlación","Regresión Lineal"],"title":"Ejercicios de Regresión Lineal","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Tipos de datos primitivos simples Números (numbers): Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números.\nEjemplo. 0, -1, 3.1415. Cadenas (strings): Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas simples o dobles.\nEjemplo. \u0026lsquo;Hola\u0026rsquo;, \u0026ldquo;Adiós\u0026rdquo;. Booleanos (boolean): Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso respectivamente. Estos datos son inmutables, es decir, su valor es constante y no puede cambiar.\nTipos de datos primitivos compuestos (contenedores) Listas (lists): Colecciones de objetos que representan secuencias ordenadas de objetos de distintos tipos. Se representan con corchetes y los elementos se separan por comas.\nEjemplo. [1, \u0026ldquo;dos\u0026rdquo;, [3, 4], True]. Tuplas (tuples). Colecciones de objetos que representan secuencias ordenadas de objetos de distintos tipos. A diferencia de las listas son inmutables, es decir, que no cambian durante la ejecución. Se representan mediante paréntesis y los elementos se separan por comas.\nEjemplo. (1, \u0026lsquo;dos\u0026rsquo;, 3) Diccionarios (dictionaries): Colecciones de objetos con una clave asociada. Se representan con llaves, los pares separados por comas y cada par contiene una clave y un objeto asociado separados por dos puntos.\nEjemplo. {\u0026lsquo;pi\u0026rsquo;:3.1416, \u0026rsquo;e\u0026rsquo;:2.718}. Clase de un dato (type()) La clase a la que pertenece un dato se obtiene con el comando type()\n\u0026gt;\u0026gt;\u0026gt; type(1) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(\u0026quot;Hola\u0026quot;) \u0026lt;class 'str'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type([1, \u0026quot;dos\u0026quot;, [3, 4], True]) \u0026lt;class 'list'\u0026gt; \u0026gt;\u0026gt;\u0026gt;type({'pi':3.1416, 'e':2.718}) \u0026lt;class 'dict'\u0026gt; \u0026gt;\u0026gt;\u0026gt;type((1, 'dos', 3)) \u0026lt;class 'tuple'\u0026gt; Números (clases int y float) Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números. Pueden ser enteros (int) o reales (float).\n\u0026gt;\u0026gt;\u0026gt; type(1) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(-2) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(2.3) \u0026lt;class 'float'\u0026gt; Operadores aritméticos Operadores aritméticos: + (suma), - (resta), * (producto), / (cociente), // (cociente división entera), % (resto división entera), ** (potencia). Orden de prioridad de evaluación:\n1 Funciones predefinidas 2 Potencias 3 Productos y cocientes 4 Sumas y restas Se puede saltar el orden de evaluación utilizando paréntesis ( ).\n\u0026gt;\u0026gt;\u0026gt; 2+3 5 \u0026gt;\u0026gt;\u0026gt; 5*-2 -10 \u0026gt;\u0026gt;\u0026gt; 5/2 2.5 \u0026gt;\u0026gt;\u0026gt; 5//2 2 \u0026gt;\u0026gt;\u0026gt; (2+3)**2 25 Operadores lógicos con números Devuelven un valor lógico o booleano.\nOperadores lógicos: == (igual que), \u0026gt; (mayor que), \u0026lt; (menor que), \u0026gt;= (mayor o igual que), \u0026lt;= (menor o igual que), != (distinto de). \u0026gt;\u0026gt;\u0026gt; 3==3 True \u0026gt;\u0026gt;\u0026gt; 3.1\u0026lt;=3 False \u0026gt;\u0026gt;\u0026gt; -1!=1 True Cadenas (clase str) Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas sencillas \u0026rsquo; o dobles \u0026ldquo;.\n'Python' \u0026quot;123\u0026quot; 'True' # Cadena vacía '' # Cadena con un espacio en blanco ' ' # Cambio de línea '\\n' # Tabulador '\\t' Acceso a los elementos de una cadena Cada carácter tiene asociado un índice que permite acceder a él.\nCadena P y t h o n Índice positivo 0 1 2 3 4 5 Índice negativo -6 -5 -4 -3 -2 -1 c[i] devuelve el carácter de la cadena c con el índice i. El índice del primer carácter de la cadena es 0.\nTambién se pueden utilizar índices negativos para recorrer la cadena del final al principio.\nEl índice del último carácter de la cadena es -1.\n\u0026gt;\u0026gt;\u0026gt; 'Python'[0] 'P' \u0026gt;\u0026gt;\u0026gt; 'Python'[1] 'y' \u0026gt;\u0026gt;\u0026gt; 'Python'[-1] 'n' \u0026gt;\u0026gt;\u0026gt; 'Python'[6] Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; IndexError: string index out of range Subcadenas c[i:j:k] : Devuelve la subcadena de c desde el carácter con el índice i hasta el carácter anterior al índice j, tomando caracteres cada k. \u0026gt;\u0026gt;\u0026gt; 'Python'[1:4] 'yth' \u0026gt;\u0026gt;\u0026gt; 'Python'[1:1] '' \u0026gt;\u0026gt;\u0026gt; 'Python'[2:] 'thon' \u0026gt;\u0026gt;\u0026gt; 'Python'[:-2] 'Pyth' \u0026gt;\u0026gt;\u0026gt; 'Python'[:] 'Python' \u0026gt;\u0026gt;\u0026gt; 'Python'[0:6:2] 'Pto' Operaciones con cadenas c1 + c2 : Devuelve la cadena resultado de concatenar las cadenas c1 y c2. c * n : Devuelve la cadena resultado de concatenar n copias de la cadena c. c1 in c2 : Devuelve True si c1 es una cadena concenida en c2 y False en caso contrario. c1 not in c2 : Devuelve True si c1 es una cadena no concenida en c2 y False en caso contrario. \u0026gt;\u0026gt;\u0026gt; 'Me gusta ' + 'Python' 'Me gusta Python' \u0026gt;\u0026gt;\u0026gt; 'Python' * 3 'PythonPythonPython' \u0026gt;\u0026gt;\u0026gt; 'y' in 'Python' True \u0026gt;\u0026gt;\u0026gt; 'tho' in 'Python' True \u0026gt;\u0026gt;\u0026gt; 'to' not in 'Python' True Operaciones de comparación de cadenas c1 == c2 : Devuelve True si la cadena c1 es igual que la cadena c2 y False en caso contrario. c1 \u0026gt; c2 : Devuelve True si la cadena c1 sucede a la cadena c2 y False en caso contrario. c1 \u0026lt; c2 : Devuelve True si la cadena c1 antecede a la cadena c2 y False en caso contrario. c1 \u0026gt;= c2 : Devuelve True si la cadena c1 sucede o es igual a la cadena c2 y False en caso contrario. c1 \u0026lt;= c2 : Devuelve True si la cadena c1 antecede o es igual a la cadena c2 y False en caso contrario. c1 != c2 : Devuelve True si la cadena c1 es distinta de la cadena c2 y False en caso contrario. Utilizan el orden establecido en el código ASCII.\n\u0026gt;\u0026gt;\u0026gt; 'Python' == 'python' False \u0026gt;\u0026gt;\u0026gt; 'Python' \u0026lt; 'python' True \u0026gt;\u0026gt;\u0026gt; 'a' \u0026gt; 'Z' True \u0026gt;\u0026gt;\u0026gt; 'A' \u0026gt;= 'Z' False \u0026gt;\u0026gt;\u0026gt; '' \u0026lt; 'Python' True Funciones de cadenas len(c) : Devuelve el número de caracteres de la cadena c. min(c) : Devuelve el carácter menor de la cadena c. max(c) : Devuelve el carácter mayor de la cadena c. c.upper() : Devuelve la cadena con los mismos caracteres que la cadena c pero en mayúsculas. c.lower() : Devuelve la cadena con los mismos caracteres que la cadena c pero en minúsculas. c.title() : Devuelve la cadena con los mismos caracteres que la cadena c con el primer carácter en mayúsculas y el resto en minúsculas. c.split(delimitador) : Devuelve la lista formada por las subcadenas que resultan de partir la cadena c usando como delimitador la cadena delimitador. Si no se especifica el delimitador utiliza por defecto el espacio en blanco. \u0026gt;\u0026gt;\u0026gt; len('Python') 6 \u0026gt;\u0026gt;\u0026gt; min('Python') 'P' \u0026gt;\u0026gt;\u0026gt; max('Python') 'y' \u0026gt;\u0026gt;\u0026gt; 'Python'.upper() 'PYTHON' \u0026gt;\u0026gt;\u0026gt; 'A,B,C'.split(',') ['A', 'B', 'C'] \u0026gt;\u0026gt;\u0026gt; 'I love Python'.split() ['I', 'love', 'Python'] Cadenas formateadas (format()) c.format(valores): Devuelve la cadena c tras sustituir los valores de la secuencia valores en los marcadores de posición de c. Los marcadores de posición se indican mediante llaves {} en la cadena c, y el reemplazo de los valores se puede realizar por posición, indicando en número de orden del valor dentro de las llaves, o por nombre, indicando el nombre del valor, siempre y cuando los valores se pasen con el formato nombre = valor. \u0026gt;\u0026gt;\u0026gt; 'Un {} vale {} {}'.format('€', 1.12, '$') 'Un € vale 1.12 $' \u0026gt;\u0026gt;\u0026gt; 'Un {2} vale {1} {0}'.format('€', 1.12, '$') 'Un $ vale 1.12 €' \u0026gt;\u0026gt;\u0026gt; 'Un {moneda1} vale {cambio} {moneda2}'.format(moneda1 = '€', cambio = 1.12, moneda2 = '$') 'Un € vale 1.12 $' Los marcadores de posición, a parte de indicar la posición de los valores de reemplazo, pueden indicar también el formato de estos. Para ello se utiliza la siguiente sintaxis:\n{:n} : Alinea el valor a la izquierda rellenando con espacios por la derecha hasta los n caracteres. {:\u0026gt;n} : Alinea el valor a la derecha rellenando con espacios por la izquierda hasta los n caracteres. {:^n} : Alinea el valor en el centro rellenando con espacios por la izquierda y por la derecha hasta los n caracteres. {:nd} : Formatea el valor como un número entero con n caracteres rellenando con espacios blancos por la izquierda. {:n.mf} : Formatea el valor como un número real con un tamaño de n caracteres (incluído el separador de decimales) y m cifras decimales, rellenando con espacios blancos por la izquierda. \u0026gt;\u0026gt;\u0026gt; 'Hoy es {:^10}, mañana {:10} y pasado {:\u0026gt;10}'.format('lunes', 'martes', 'miércoles') 'Hoy es lunes , mañana martes y pasado miércoles' \u0026gt;\u0026gt;\u0026gt; 'Cantidad {:5d}'.format(12)' 'Cantidad 12' \u0026gt;\u0026gt;\u0026gt; 'Pi vale {:8.4f}'.format(3.141592) 'Pi vale 3.1416' Datos lógicos o booleanos (clase bool) Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso respectivamente.\nFalse tiene asociado el valor 0 y True tiene asociado el valor 1.\nOperaciones con valores lógicos Operadores lógicos: == (igual que), \u0026gt; (mayor), \u0026lt; (menor), \u0026gt;= (mayor o igual que), \u0026lt;= (menor o igual que), != (distinto de). not b (negación) : Devuelve True si el dato booleano b es False , y False en caso contrario. b1 and b2 : Devuelve True si los datos booleanos b1 y b2 son True, y False en caso contrario. b1 or b2 : Devuelve True si alguno de los datos booleanos b1 o b2 son True, y False en caso contrario. Tabla de verdad x y not x x and y x or y False False True False False False True True False True True False False False True True True False True True \u0026gt;\u0026gt;\u0026gt; not True False \u0026gt;\u0026gt;\u0026gt; False or True True \u0026gt;\u0026gt;\u0026gt; True and False False \u0026gt;\u0026gt;\u0026gt; True and True True Conversión de datos primitivos simples Las siguientes funciones convierten un dato de un tipo en otro, siempre y cuando la conversión sea posible.\nint() convierte a entero.\nEjemplo. int('12') 12\nint(True) 1\nint('c') Error float() convierte a real.\nEjemplo. float('3.14') 3.14\nfloat(True) 1.0\nfloat('III') Error str() convierte a cadena.\nEjemplo. str(3.14) '3.14'\nstr(True) 'True' bool() convierte a lógico.\nEjemplo. bool('0') False\nbool('3.14') True\nbool('') False\nbool('Hola') True Variables Una variable es un identificador ligado a algún valor.\nReglas para nombrarlas:\nComienzan siempre por una letra, seguida de otras letras o números. No se pueden utilizarse palabras reservadas del lenguaje. A diferencia de otros lenguajes no tienen asociado un tipo y no es necesario declararlas antes de usarlas (tipado dinámico).\nPara asignar un valor a una variable se utiliza el operador = y para borrar una variable se utiliza la instrucción del.\nlenguaje = 'Python' x = 3.14 y = 3 + 2 # Asignación múltiple a1, a2 = 1, 2 # Intercambio de valores a, b = b, a # Incremento (equivale a x = x + 2) x += 2 # Decremento (equivale a x = x - 1) x -= 1 # Valor no definido x = None del x ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"5a8102858b534817caaca08642a00343","permalink":"/docencia/python/manual/tipos-datos-simples/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/tipos-datos-simples/","section":"docencia","summary":"Tipos de datos primitivos simples Números (numbers): Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números.\nEjemplo. 0, -1, 3.1415. Cadenas (strings): Secuencia de caracteres alfanuméricos que representan texto.","tags":["Tipos de datos"],"title":"Tipos de Datos Primitivos Simples","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que pida al usuario una palabra y la muestre por pantalla 10 veces.\nSolución\nEjercicio 2 Escribir un programa que pregunte al usuario su edad y muestre por pantalla todos los años que ha cumplido (desde 1 hasta su edad).\nSolución\nEjercicio 3 Escribir un programa que pida al usuario un número entero positivo y muestre por pantalla todos los números impares desde 1 hasta ese número separados por comas.\nSolución\nEjercicio 4 Escribir un programa que pida al usuario un número entero positivo y muestre por pantalla la cuenta atrás desde ese número hasta cero separados por comas.\nSolución\nEjercicio 5 Escribir un programa que pregunte al usuario una cantidad a invertir, el interés anual y el número de años, y muestre por pantalla el capital obtenido en la inversión cada año que dura la inversión.\nSolución\nEjercicio 6 Escribir un programa que pida al usuario un número entero y muestre por pantalla un triángulo rectángulo como el de más abajo, de altura el número introducido.\n* ** *** **** ***** Solución\nEjercicio 7 Escribir un programa que muestre por pantalla la tabla de multiplicar del 1 al 10.\nSolución\nEjercicio 8 Escribir un programa que pida al usuario un número entero y muestre por pantalla un triángulo rectángulo como el de más abajo.\n1 3 1 5 3 1 7 5 3 1 9 7 5 3 1 Solución\nEjercicio 9 Escribir un programa que almacene la cadena de caracteres contraseña en una variable, pregunte al usuario por la contraseña hasta que introduzca la contraseña correcta.\nSolución\nEjercicio 10 Escribir un programa que pida al usuario un número entero y muestre por pantalla si es un número primo o no.\nSolución\nEjercicio 11 Escribir un programa que pida al usuario una palabra y luego muestre por pantalla una a una las letras de la palabra introducida empezando por la última.\nSolución\nEjercicio 12 Escribir un programa en el que se pregunte al usuario por una frase y una letra, y muestre por pantalla el número de veces que aparece la letra en la frase.\nSolución\nEjercicio 13 Escribir un programa que muestre el eco de todo lo que el usuario introduzca hasta que el usuario escriba “salir” que terminará.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1615158565,"objectID":"e81398991039436adce1925816c75652","permalink":"/docencia/python/ejercicios/bucles/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/bucles/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que pida al usuario una palabra y la muestre por pantalla 10 veces.\nSolución\nEjercicio 2 Escribir un programa que pregunte al usuario su edad y muestre por pantalla todos los años que ha cumplido (desde 1 hasta su edad).","tags":["Ejercicios","Bucles"],"title":"Ejercicios de Bucles","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre historial de cambios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:\n\u0026gt; git clone https://github.com/asalber/libro-git.git \u0026gt; cd libro-git \u0026gt; git reset --hard 48ed8 \u0026gt; git remote remove origin Ejercicio 1 Eliminar la última línea del fichero indice.txt y guardarlo. Comprobar el estado del repositorio. Deshacer los cambios realizados en el fichero indice.txt para volver a la versión anterior del fichero. Volver a comprobar el estado del repositorio. Solución \u0026gt; nano indice.txt # Eliminar la última línea y guardar el fichero. \u0026gt; git status \u0026gt; git checkout -- indice.txt \u0026gt; git status Resolución Ejercicio 2 Eliminar la última línea del fichero indice.txt y guardarlo. Añadir los cambios a la zona de intercambio temporal. Comprobar de nuevo el estado del repositorio. Quitar los cambios de la zona de intercambio temporal, pero mantenerlos en el directorio de trabajo. Comprobar de nuevo el estado del repositorio. Deshacer los cambios realizados en el fichero indice.txt para volver a la versión anterior del fichero. Volver a comprobar el estado del repositorio. Solución \u0026gt; nano indice.txt # Eliminar la última línea y guardar el fichero. \u0026gt; git add . \u0026gt; git status \u0026gt; git reset indice.txt \u0026gt; git status \u0026gt; git checkout -- indice.txt \u0026gt; git status Resolución Ejercicio 3 Eliminar la última línea del fichero indice.txt y guardarlo. Eliminar el fichero capitulos/capitulo3.txt. Añadir un fichero nuevo captitulos/capitulo4.txt vacío. Añadir los cambios a la zona de intercambio temporal. Comprobar de nuevo el estado del repositorio. Quitar los cambios de la zona de intercambio temporal, pero mantenerlos en el directorio de trabajo. Comprobar de nuevo el estado del repositorio. Deshacer los cambios realizados para volver a la versión del repositorio. Volver a comprobar el estado del repositorio. Solución \u0026gt; nano indice.txt # Eliminar la última línea y guardar el fichero. \u0026gt; rm capitulos/capitulo3.txt \u0026gt; touch capitulos/capitulo4.txt \u0026gt; git add . \u0026gt; git status \u0026gt; git reset \u0026gt; git status \u0026gt; git checkout -- . \u0026gt; git status \u0026gt; git clean -f \u0026gt; git status Resolución Ejercicio 4 Eliminar la última línea del fichero indice.txt y guardarlo. Eliminar el fichero capitulos/capitulo3.txt. Añadir los cambios a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Borrado accidental.\u0026rdquo; Comprobar el historial del repositorio. Deshacer el último commit pero mantener los cambios anteriores en el directorio de trabajo y la zona de intercambio temporal. Comprobar el historial y el estado del repositorio. Volver a hacer el commit con el mismo mensaje de antes. Deshacer el último commit y los cambios anteriores del directorio de trabajo volviendo a la versión anterior del repositorio. Comprobar de nuevo el historial y el estado del repositorio. Solución \u0026gt; nano indice.txt # Eliminar la última línea y guardar el fichero. \u0026gt; rm capitulos/capitulo3.txt \u0026gt; git commit -a \u0026quot;Borrado accidental.\u0026quot; \u0026gt; git status \u0026gt; git log \u0026gt; git reset --soft HEAD~1 \u0026gt; git status \u0026gt; git commit -m \u0026quot;Borrado accidental.\u0026quot; \u0026gt; git status \u0026gt; git log \u0026gt; git reset --hard HEAD~1 \u0026gt; git log \u0026gt; git status Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"7ab763203dab27b01a3c1c01dfc49d37","permalink":"/docencia/git/ejercicios/deshacer-cambios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/deshacer-cambios/","section":"docencia","summary":"Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre historial de cambios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:","tags":["Ejercicios"],"title":"Ejercicios de deshacer cambios","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Entrada por terminal (input()) Para asignar a una variable un valor introducido por el usuario en la consola se utiliza la instrucción\ninput(mensaje) : Muestra la cadena mensaje por la terminal y devuelve una cadena con la entrada del usuario.\nEl valor devuelto siempre es una cadena, incluso si el usuario introduce un dato numérico.\n\u0026gt;\u0026gt;\u0026gt; language = input('¿Cuál es tu lenguaje favorito? ') ¿Cuál es tu lenguaje favorito? Python \u0026gt;\u0026gt;\u0026gt; language 'Python' \u0026gt;\u0026gt;\u0026gt; age = input('¿Cuál es tu edad? ') ¿Cuál es tu edad? 20 \u0026gt;\u0026gt;\u0026gt; age '20' Salida por terminal (print()) Para mostrar un dato por la terminal se utiliza la instrucción\nprint(dato1, ..., sep=' ', end='\\n', file=sys.stdout)\ndonde\ndato1, ... son los datos a imprimir y pueden indicarse tantos como se quieran separados por comas. sep establece el separador entre los datos, que por defecto es un espacio en blanco ' '. end indica la cadena final de la impresión, que por defecto es un cambio de línea \\n. file indica la dirección del flujo de salida, que por defecto es la salida estándar sys.stdout. \u0026gt;\u0026gt;\u0026gt; print('Hola') Hola \u0026gt;\u0026gt;\u0026gt; name = 'Alf' \u0026gt;\u0026gt;\u0026gt; print('Hola', name) Hola Alf \u0026gt;\u0026gt;\u0026gt; print('El valor de pi es', 3.1415) El valor de pi es 3.1415 \u0026gt;\u0026gt;\u0026gt; print('Hola', name, sep='') HolaAlf \u0026gt;\u0026gt;\u0026gt; print('Hola', name, end='!\\n') Hola Alf! ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"86a2f2799205bfb84db801809de30335","permalink":"/docencia/python/manual/entrada-salida/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/entrada-salida/","section":"docencia","summary":"Entrada por terminal (input()) Para asignar a una variable un valor introducido por el usuario en la consola se utiliza la instrucción\ninput(mensaje) : Muestra la cadena mensaje por la terminal y devuelve una cadena con la entrada del usuario.","tags":[],"title":"Entrada y Salida por Terminal","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Estado e historia de un repositorio Mostrar el estado de un repositorio git status git status muestra el estado de los cambios en el repositorio desde la última versión guardada. En particular, muestra los ficheros con cambios en el directorio de trabajo que no se han añadido a la zona de intercambio temporal y los ficheros en la zona de intercambio temporal que no se han añadido al repositorio. Mostrar el historial de versiones de un repositorio git log git log muestra el historial de commits de un repositorio ordenado cronológicamente. Para cada commit muestra su código hash, el autor, la fecha, la hora y el mensaje asociado.\nEste comando es muy versátil y muestra la historia del repositorio en distintos formatos dependiendo de los parámetros que se le den. Los más comunes son: --oneline muestra cada commit en una línea produciendo una salida más compacta. --graph muestra la historia en forma de grafo. Mostrar los datos de un commit git show git show muestra el usuario, el día, la hora y el mensaje del último commit, así como las diferencias con el anterior.\ngit show \u0026lt;commit\u0026gt; muestra el usuario, el día, la hora y el mensaje del commit indicado, así como las diferencias con el anterior.\nMostrar el historial de cambios de un fichero git annotate git annotate muestra el contenido de un fichero anotando cada línea con información del commit en el que se introdujo.\nCada línea de la salida contiene los 8 primeros dígitos del código hash del commit correspondiente al cambio, el autor de los cambio, la fecha, el número de línea del fichero y el contenido de la línea. Mostrar las diferencias entre versiones git diff git diff muestra las diferencias entre el directorio de trabajo y la zona de intercambio temporal.\ngit diff --cached muestra las diferencias entre la zona de intercambio temporal y el último commit.\ngit diff HEAD muestra la diferencia entre el directorio de trabajo y el último commit.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"d859c0d56d1b3c6825da81372ba9f1ef","permalink":"/docencia/git/manual/historial-cambios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/historial-cambios/","section":"docencia","summary":"Estado e historia de un repositorio Mostrar el estado de un repositorio git status git status muestra el estado de los cambios en el repositorio desde la última versión guardada. En particular, muestra los ficheros con cambios en el directorio de trabajo que no se han añadido a la zona de intercambio temporal y los ficheros en la zona de intercambio temporal que no se han añadido al repositorio.","tags":null,"title":"Historial de cambios","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable"],"content":"El concepto de límite Aproximación al concepto de límite El concepto de límite está ligado al de tendencia.\nDecimos que $x$ tiende a un valor $a$, y lo escribimos $x\\rightarrow a$, si se pueden tomar valores de $x$ tan próximos a $a$ como se quiera, pero sin llegar a valer $a$.\nSi la aproximación es por defecto (con valores menores que $a$) se dice que $x$ tiende a $a$ por la izquierda, y se escribe $x\\rightarrow a^-$, y si es por exceso (con valores mayores que $a$) se dice que $x$ tiende a $a$ por la derecha, y se escribe $x\\rightarrow a^+$.\nCuando la variable $x$ de una función $f$ tiende a un valor $a$, cabe preguntarse si sus imágenes mediante $f$ tienden a otro valor concreto:\nSi $f(x)$ tiende a un valor $l$ cuando $x$ tiende a $a$, se dice que $l$ es el límite de $f(x)$ cuando $x\\rightarrow a$, y se escribe\n$$\\lim_{x\\rightarrow a}f(x)=l.$$\nLímites laterales Si $f(x)$ tiende a $l$ cuando $x$ tiende a $a$ por la izquierda, entonces se dice que $l$ es el límite por la izquierda de $f(x)$ cuando $x\\rightarrow a^-$, y se escribe\n$$\\lim_{x\\rightarrow a^-}f(x)=l.$$\nSi $f(x)$ tiende a $l$ cuando $x$ se aproxima a $a$ por exceso, entonces se dice que $l$ es el límite por la derecha de $f(x)$ cuando $x\\rightarrow a^-$, y se escribe\n$$\\lim_{x\\rightarrow a^+}f(x)=l.$$\nEjemplo. Consideremos la función $f(x)=x^2$ y veamos que pasa cuando $x\\rightarrow 2$:\n$$ \\begin{array}{c} \\underbrace{\\begin{array}{ccc} \\textrm{Aproximación por defecto} \u0026amp; \\qquad \u0026amp; \\textrm{Aproximación por exceso}\\newline \\begin{array}{|l|l|} \\hline x \u0026amp; f(x)=x^2 \\newline \\hline\\hline 1.9 \u0026amp; 3.61 \\newline \\hline 1.99 \u0026amp; 3.9601 \\newline \\hline 1.999 \u0026amp; 3.996001 \\newline \\hline 1.9999 \u0026amp; 3.99960001 \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|l|l|} \\hline x \u0026amp; f(x)=x^2 \\newline \\hline\\hline 2.1 \u0026amp; 4.41 \\newline \\hline 2.01 \u0026amp; 4.0401 \\newline \\hline 2.001 \u0026amp; 4.004001 \\newline \\hline 2.0001 \u0026amp; 4.00040001 \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\lim_{x\\rightarrow 2^-}x^2=4 \u0026amp; \u0026amp; \\lim_{x\\rightarrow 2^+}x^2=4 \\end{array}}\\newline \\Downarrow\\newline \\lim_{x\\rightarrow 2}x^2=4 \\end{array} $$\nLímites que no existen (I) Si la función no está definida entorno a un punto, entonces no existe el límite en dicho punto\nEjemplo. Consideremos la función $f(x)=\\dfrac{1}{\\sqrt{x^2-1}}$ y veamos que pasa cuando $x\\rightarrow 0$:\n$$ \\begin{array}{c} \\underbrace{\\begin{array}{ccc} \\textrm{Por la izquierda} \u0026amp; \\qquad \u0026amp; \\textrm{Por la derecha }\\newline \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline -0.1 \u0026amp; \\textrm{No exite} \\newline \\hline -0.01 \u0026amp; \\textrm{No existe} \\newline \\hline -0.001 \u0026amp; \\textrm{No existe} \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline 0.1 \u0026amp; \\textrm{No existe} \\newline \\hline 0.01 \u0026amp; \\textrm{No existe} \\newline \\hline 0.001 \u0026amp; \\textrm{No existe} \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\displaystyle \\textrm{No existe } \\lim_{x\\rightarrow 0^-}\\frac{1}{\\sqrt{x^2-1}} \u0026amp; \u0026amp; \\displaystyle \\textrm{No existe } \\lim_{x\\rightarrow 0^+}\\frac{1}{\\sqrt{x^2-1}} \\end{array}}\\newline \\Downarrow\\newline \\displaystyle \\textrm{No existe }\\lim_{x\\rightarrow 0}\\frac{1}{\\sqrt{x^2-1}} \\end{array}$$\nLímites que no existen (II) Cuando los límites laterales no coinciden entonces no existe el límite\nEjemplo. Consideremos la función $f(x)=\\dfrac{\\lvert x\\rvert}{x}$ y veamos que pasa cuando $x\\rightarrow 0$:\n$$\\begin{array}{c} \\underbrace{\\begin{array}{ccc} \\textrm{Por la izquierda} \u0026amp; \\qquad \u0026amp; \\textrm{Por la derecha }\\newline \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline -0.1 \u0026amp; -1 \\newline \\hline -0.01 \u0026amp; -1 \\newline \\hline -0.001 \u0026amp; -1 \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline 0.1 \u0026amp; 1 \\newline \\hline 0.01 \u0026amp; 1 \\newline \\hline 0.001 \u0026amp; 1 \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\displaystyle \\lim_{x\\rightarrow 0^-}\\frac{|x|}{x}=-1 \u0026amp;\\neq \u0026amp; \\displaystyle \\lim_{x\\rightarrow 0^+}\\frac{|x|}{x}=1 \\end{array}}\\newline \\Downarrow\\newline \\displaystyle \\textrm{No existe }\\lim_{x\\rightarrow 0}\\frac{|x|}{x} \\end{array} $$\nLímites que no existen (III) A veces, cuando $x\\rightarrow a$ los valores de $f(x)$ crecen o decrecen infinitamente y entonces no existe el límite. En este caso se dice que la función diverge y se escribe\n$$\\lim_{x\\rightarrow a}f(x)=\\pm \\infty$$\nEjemplo. Veamos la tendencia de la función $f(x)=\\dfrac{1}{x^2}$ cuando $x\\rightarrow 0$:\n$$ \\begin{array}{c} \\underbrace{\\begin{array}{ccc} \\textrm{Por la izquierda} \u0026amp; \\qquad \u0026amp; \\textrm{Por la derecha }\\newline \\begin{array}{|l|r|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline -0.1 \u0026amp; 100 \\newline \\hline -0.01 \u0026amp; 10000 \\newline \\hline -0.001 \u0026amp; 1000000 \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|l|r|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline 0.1 \u0026amp; 100 \\newline \\hline 0.01 \u0026amp; 10000 \\newline \\hline 0.001 \u0026amp; 1000000 \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\displaystyle \\lim_{x\\rightarrow 0^-}\\frac{1}{x^2}=+\\infty \u0026amp; \u0026amp; \\displaystyle \\lim_{x\\rightarrow 0^+}\\frac{1}{x^2}=+\\infty \\end{array}}\\newline \\Downarrow\\newline \\displaystyle \\textrm{No existe }\\lim_{x\\rightarrow 0}\\frac{1}{x^2}=\\infty \\end{array} $$\nLímites que no existen (IV) A veces, el límite de un función en un punto puede no existir porque la función oscila rápidamente al acercarnos a dicho punto.\nEjemplo. Consideremos la función $f(x)=\\operatorname{sen} \\dfrac{1}{x}$ y veamos que pasa cuando $x\\rightarrow 0$:\n$$\\begin{array}{ccc} \\textrm{Por la izquierda} \u0026amp; \\qquad \u0026amp; \\textrm{Por la derecha }\\newline \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline -0.1 \u0026amp; -0.1736 \\newline \\hline -0.01 \u0026amp; -0.9848 \\newline \\hline -0.005 \u0026amp; 0.3420 \\newline \\hline -0.001 \u0026amp; 0.9848 \\newline \\hline -0.0005 \u0026amp; 0.3420\\newline \\hline -0.0001 \u0026amp; 0.9848 \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|l|l|} \\hline x \u0026amp; f(x) \\newline \\hline\\hline 0.1 \u0026amp; 0.1736 \\newline \\hline 0.01 \u0026amp; 0.9848 \\newline \\hline 0.005 \u0026amp; -0.3420 \\newline \\hline 0.001 \u0026amp; -0.9848 \\newline \\hline 0.0005 \u0026amp; -0.3420\\newline \\hline 0.0001 \u0026amp; -0.9848 \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\displaystyle \\textrm{No existe }\\lim_{x\\rightarrow 0^-}\\operatorname{sen} \\frac{1}{x} \u0026amp; \u0026amp; \\displaystyle \\textrm{No existe }\\lim_{x\\rightarrow 0^+}\\operatorname{sen} \\frac{1}{x} \\end{array} $$\nLímites en el infinito Si $f(x)$ tiende a $l$ cuando $x$ crece infinitamente, entonces se dice que $l$ es el límite en el infinito de $f(x)$ cuando $x\\rightarrow +\\infty$, y se escribe\n$$\\lim_{x\\rightarrow +\\infty}f(x)=l.$$\nSi $f(x)$ tiende a $l$ cuando $x$ decrece infinitamente, entonces se dice que $l$ es el límite en el infinito de $f(x)$ cuando $x\\rightarrow -\\infty$, y se escribe\n$$\\lim_{x\\rightarrow -\\infty}f(x)=l.$$\nEjemplo. Estudiemos la tendencia de $f(x)=\\dfrac{1}{x}$ cuando $x\\rightarrow \\pm\\infty$:\n$$ \\begin{array}{ccc} x\\rightarrow +\\infty \u0026amp; \\qquad \u0026amp; x\\rightarrow -\\infty\\newline \\begin{array}{|r|l|} \\hline x \u0026amp; f(x)=1/x \\newline \\hline\\hline 1000 \u0026amp; 0.001 \\newline \\hline 10000 \u0026amp; 0.0001 \\newline \\hline 100000 \u0026amp; 0.00001 \\newline \\hline \\end{array} \u0026amp; \u0026amp; \\begin{array}{|r|l|} \\hline x \u0026amp; f(x)=1/x \\newline \\hline\\hline -1000 \u0026amp; -0.001 \\newline \\hline -10000 \u0026amp; -0.0001 \\newline \\hline -100000 \u0026amp; -0.00001 \\newline \\hline \\end{array}\\newline \\Downarrow \u0026amp; \u0026amp; \\Downarrow\\newline \\lim_{x\\rightarrow +\\infty}\\frac{1}{x}=0 \u0026amp; \u0026amp; \\lim_{x\\rightarrow -\\infty}\\frac{1}{x}=0 \\end{array} $$\nDefinición de límite Definición - Límite de una función en un punto Se dice que el límite de la función $f$ cuando $x\\rightarrow a$ es $l$, y se escribe\n$$\\lim_{x\\rightarrow a} f(x) = l$$\nsi para cualquier valor $\\varepsilon\u0026gt;0$ existe un número $\\delta\u0026gt;0$ tal que, $|f(x)-l|\u0026lt;\\varepsilon$ siempre que $0\u0026lt;|x-a|\u0026lt;\\delta$.\nDefinición de límite en el infinito Definición - Límite de una función en el infinito Se dice que el límite de la función $f$ cuando $x\\rightarrow +\\infty$ es $l$, y se escribe\n$$\\lim_{x\\rightarrow +\\infty} f(x) =l$$\nsi para cualquier valor $\\varepsilon\u0026gt;0$ existe un número $\\delta\u0026gt;0$ tal que, $\\lvert f(x)-l\\rvert \u0026lt;\\varepsilon$ siempre que $x\u0026gt;\\delta$.\nSe dice que el límite de la función $f$ cuando $x\\rightarrow -\\infty$ es $l$, y se escribe\n$$\\lim_{x\\rightarrow -\\infty} f(x) =l$$\nsi para cualquier valor $\\varepsilon\u0026gt;0$ existe un número $\\delta\u0026lt;0$ tal que, $\\lvert f(x)-l\\rvert \u0026lt;\\varepsilon$ siempre que $x\u0026lt;\\delta$.\nÁlgebra de límites Dadas dos funciones $f(x)$ y $g(x)$, tales que existe $$\\lim_{x\\rightarrow a}f(x)$$ y $$\\lim_{x\\rightarrow a}g(x)$$, entonces se cumple que\n$$ \\lim_{x\\rightarrow a}c f(x)=c\\lim_{x\\rightarrow a}f(x)$$, siendo $c$ constante. $$ \\lim_{x\\rightarrow a}(f(x)\\pm g(x))=\\lim_{x\\rightarrow a}f(x)\\pm \\lim_{x\\rightarrow a}g(x).$$ $$ \\lim_{x\\rightarrow a}(f(x)\\cdot g(x))=\\lim_{x\\rightarrow a}f(x)\\cdot \\lim_{x\\rightarrow a}g(x).$$ $$ \\lim_{x\\rightarrow a}\\frac{f(x)}{g(x)}=\\frac{\\displaystyle \\lim_{x\\rightarrow a}f(x)}{\\displaystyle \\lim_{x\\rightarrow a}g(x)}$$ si $$\\lim_{x\\rightarrow a}g(x)\\neq 0.$$ Límites de las funciones elementales Funciones polinómicas. Si $f$ es un polinomio, entonces existe el límite de $f$ en cualquier punto $a\\in \\mathbb{R}$ y $\\lim_{x\\rightarrow a}f(x)=f(a)$.\nFunciones racionales. Si $f(x)=\\dfrac{p(x)}{q(x)}$ con $p(x)$ y $q(x)$ dos polinomios, entonces existe el límite de $f$ en cualquier punto $a\\in \\mathbb{R}$ que no sea una raíz de $q(x)$, y $\\lim_{x\\rightarrow a}f(x)=f(a)$. Si $a$ es una raíz de $q(x)$ entonces el límite puede existir o no.\nFunciones potenciales. Si $f(x)=x^r$ con $r\\in \\mathbb{R}$, entonces existe el límite de $f$ en cualquier punto $a$ tal que exista un intervalo $(a-\\delta,a+\\delta)\\subset \\textrm{Dom}(f)$ para algún $\\delta \u0026gt;0$, y en ese caso, $\\lim_{x\\rightarrow a}f(x)=f(a)$.\nFunciones exponenciales. Si $f(x)=c^x$ con $c\\in \\mathbb{R}$ entonces existe el límite de $f$ en cualquier punto $a\\in \\mathbb{R}$ y$\\lim_{x\\rightarrow a}f(x)=f(a)$.\nFunciones logarítmicas. Si $f(x)=\\log_cx$ con $c\\in \\mathbb{R}$, entonces existe el límite de $f$ en cualquier punto $a\\in \\mathbb{R}^+$ y $\\lim_{x\\rightarrow a}f(x)=f(a)$.\nFunciones trigonométricas. Si $f(x)$ es una función trigonométrica, entonces existe el límite de $f$ en cualquier punto $a\\in \\textrm{Dom}(f)$ y $\\lim_{x\\rightarrow a}f(x)=f(a)$.\nIndeterminaciones y su resolución Tipos de indeterminaciones Al calcular límites pueden aparecer las siguientes indeterminaciones:\nTipo cociente. Si $\\lim_{x\\rightarrow a} f(x)=0$ y $\\lim_{x\\rightarrow a} g(x)=0$, entonces $\\dfrac{f(x)}{g(x)}$ presenta una indeterminación del tipo $\\dfrac{0}{0}$ cuando $x\\rightarrow a$.\nSi $\\lim_{x\\rightarrow a} f(x)=\\pm\\infty$ y $\\lim_{x\\rightarrow a} g(x)=\\pm\\infty$, entonces $\\dfrac{f(x)}{g(x)}$ presenta una indeterminación del tipo $\\pm\\dfrac{\\infty}{\\infty}$ cuando $x\\rightarrow a$.\nTipo producto. Si $\\lim_{x\\rightarrow a} f(x)=0$ y $\\lim_{x\\rightarrow a} g(x)=\\pm\\infty$, entonces $f(x)\\cdot g(x)$ presenta una indeterminación del tipo $0\\cdot \\pm\\infty$ cuando $x\\rightarrow a$.\nTipo potencia. Si $\\lim_{x\\rightarrow a} f(x)=1$ y $\\lim_{x\\rightarrow a} g(x)=\\infty$, entonces $f(x)^{g(x)}$ presenta una indeterminación del tipo $1^\\infty$ cuando $x\\rightarrow a$.\nSi $\\lim_{x\\rightarrow a} f(x)=0$ y $\\lim_{x\\rightarrow a} g(x)=0$, entonces $f(x)^{g(x)}$ presenta una indeterminación del tipo $0^0$ cuando $x\\rightarrow a$.\nSi $\\lim_{x\\rightarrow a} f(x)=\\infty$ y $\\lim_{x\\rightarrow a} g(x)=0$, entonces $f(x)^{g(x)}$ presenta una indeterminación del tipo $\\infty^0$ cuando $x\\rightarrow a$.\nTipo diferencia. Si $\\lim_{x\\rightarrow a} f(x)=\\infty$ y $\\lim_{x\\rightarrow a} g(x)=\\infty$, entonces $f(x)-g(x)$ presenta una indeterminación del tipo $\\infty-\\infty$ cuando $x\\rightarrow a$.\nResolución de una indeterminación de tipo cociente Existen diferentes técnicas para resolver una indeterminación del tipo $\\dfrac{0}{0}$ o $\\dfrac{\\infty}{\\infty}$:\nFactorización de polinomios en funciones racionales. División por el términos de mayor orden en funciones racionales. Infinitésimos equivalentes. Regla de L’Hôpital. Factorización de polinomios en funciones racionales Si $f(x)=\\dfrac{p(x)}{q(x)}$ es una función racional que presenta una indeterminación de tipo cociente cuando $x\\rightarrow a$, y $a$ es una raíz de $p(x)$ y $q(x)$, se puede resolver la indeterminación factorizando los polinomios y simplificando.\nEjemplo. La función $f(x)=\\dfrac{x^3-3x+2}{x^4-4x+3}\\rightarrow \\dfrac{0}{0}$ cuando $x\\rightarrow 1$.\nPara resolver la indeterminación factorizamos los polinomios\n$$ \\begin{aligned} x^3-3x+2 \u0026amp;= (x+2)(x-1)^2,\\newline x^4-4x+3 \u0026amp;= (x^2+2x+3)(x-1)^2. \\end{aligned} $$\nComo el factor $(x-1)^2$ es común, podemos simplificar la función en el cálculo del límite:\n$$ \\lim_{x\\rightarrow 1}\\frac{x^3-3x+2}{x^4-4x+3} = \\lim_{x\\rightarrow 1}\\frac{(x+2)(x-1)^2}{(x^2+2x+3)(x-1)^2} = \\lim_{x\\rightarrow 1}\\frac{(x+2)}{(x^2+2x+3)} =\\frac{3}{6}=0.5. $$ 1\nDivisión por el término de mayor orden en funciones racionales Si $f(x)=\\dfrac{p(x)}{q(x)}$ es una función racional que presenta una indeterminación de tipo cociente cuando $x\\rightarrow \\pm\\infty$, entonces se puede resolver dividendo $p(x)$ y $q(x)$ por el término de mayor grado de ambos polinomios.\nEjemplo. La función $f(x)=\\dfrac{x^3-3x+2}{x^4-4x+3}\\rightarrow \\dfrac{\\infty}{\\infty}$ cuando $x\\rightarrow \\infty$.\nPara resolver la indeterminación dividimos numerador y denominador por $x^4$ que es el término de mayor grado:\n$$ \\lim_{x\\rightarrow \\infty}\\frac{x^3-3x+2}{x^4-4x+3} = \\lim_{x\\rightarrow \\infty}\\frac{\\frac{x^3-3x+2}{x^4}}{\\frac{x^4-4x+3}{x^4}} = \\lim_{x\\rightarrow \\infty}\\frac{\\frac{1}{x}-\\frac{3}{x^3}+\\frac{2}{x^4}}{1-\\frac{4}{x^3}+\\frac{3}{x^4}} =\\frac{0}{1}=0 $$\nEn general, si $f(x)=\\dfrac{a_0+a_1x+\\cdots a_nx^n}{b_0+b_1x+\\cdots b_mx^m}$, entonces:\nSi $n\u0026gt;m$ entonces $\\lim_{x\\rightarrow \\pm \\infty}f(x)=\\pm\\infty$. Si $n\u0026lt;m$ entonces $\\lim_{x\\rightarrow \\pm \\infty}f(x)=0$. Si $n=m$ entonces $\\lim_{x\\rightarrow \\pm \\infty}f(x)=\\dfrac{a_n}{b_m}$. Infinitésimos equivalentes Definición - Infinitésimos equivalentes. Si $f(x)\\rightarrow 0$ y $g(x)\\rightarrow 0$ cuando $x\\rightarrow a$, entonces se dice que $f$ y $g$ son infinitésimos equivalentes cuando $x\\rightarrow a$ si se cumple\n$$\\lim_{x\\rightarrow a}\\frac{f(x)}{g(x)}=1.$$\nEn tal caso se escribe $f(x)\\approx g(x)$ cuando $x\\rightarrow a$.\nSi $f(x)\\approx g(x)$ cuando $x\\rightarrow a$ entonces $f(x)$ y $g(x)$ son magnitudes equivalentes cuando $x\\rightarrow a$.\nInfinitésimos equivalentes cuando $x\\rightarrow 0$:\n$$ \\begin{array}{c} \\operatorname{sen} x \\approx x \\approx \\operatorname{tg} x\\newline 1-\\cos x \\approx \\dfrac{x^2}{2}\\newline \\operatorname{arctg} x \\approx x\\newline e^x-1 \\approx x\\newline \\log(1+x) \\approx x\\newline \\end{array} $$\nA veces se puede resolver una indeterminación cuando $x\\rightarrow a$ sustituyendo cualquier subexpresión de la función por un infinitésimo equivalente cuando $x\\rightarrow a$.\nEjemplo. La función $f(x)=\\dfrac{\\operatorname{sen} x(1- \\cos x)}{x^3}\\rightarrow \\dfrac{0}{0}$ cuando $x\\rightarrow 0$.\nComo $\\operatorname{sen} x \\approx x$ y $1-\\cos x\\approx \\dfrac{x^2}{2}$ cuando $x\\rightarrow 0$, para resolver la indeterminación sustituimos $\\operatorname{sen} x$ por $x$ y $1-\\cos x$ por $\\dfrac{x^2}{2}$:\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0}\\frac{\\operatorname{sen} x(1- \\cos x)}{x^3}\u0026amp;= \\lim_{x\\rightarrow 0}\\dfrac{x\\frac{x^2}{2}}{x^3} = \\lim_{x\\rightarrow 0}\\dfrac{\\frac{x^3}{2}}{x^3} = \\lim_{x\\rightarrow 0}\\dfrac{1}{2} =0.5. \\end{aligned} $$\nRegla de L\u0026rsquo;Hôpital Teorema - Regla de L’Hôpital. Si $\\dfrac{f(x)}{g(x)}\\rightarrow \\dfrac{0}{0}$ o $\\dfrac{\\infty}{\\infty}$ cuando $x\\rightarrow a$, entonces si existe el límite de $\\dfrac{f\u0026rsquo;(x)}{g\u0026rsquo;(x)}$ cuando $x\\rightarrow a$ se cumple\n$$\\lim_{x\\rightarrow a}\\frac{f(x)}{g(x)}=\\lim_{x\\rightarrow a}\\frac{f\u0026rsquo;(x)}{g\u0026rsquo;(x)}.$$\nPara que exista $\\lim_{x\\rightarrow a}\\dfrac{f\u0026rsquo;(x)}{g\u0026rsquo;(x)}$ es necesario que que $f$ y $g$ sean derivables en un entorno de $a$. Ejemplo. Sea $f(x)=\\dfrac{\\log(x^2-1)}{x+2}\\rightarrow \\dfrac{\\infty}{\\infty}$ cuando $x\\rightarrow \\infty$.\nPara resolver la indeterminación aplicamos la regla de L’Hôpital:\n$$ \\begin{aligned} \\lim_{x\\rightarrow \\infty}\\frac{\\log(x^2-1)}{x+2} \u0026amp;= \\lim_{x\\rightarrow \\infty}\\frac{\\left(\\log(x^2-1)\\right)\u0026rsquo;}{\\left(x+2\\right)\u0026rsquo;}= \\lim_{x\\rightarrow \\infty}\\frac{\\frac{2x}{x^2-1}}{1}=\\newline \u0026amp;=\\lim_{x\\rightarrow \\infty}\\frac{2x}{x^2-1}= \\lim_{x\\rightarrow \\infty}\\frac{\\left(2x\\right)\u0026rsquo;}{\\left(x^2-1\\right)\u0026rsquo;}= \\lim_{x\\rightarrow \\infty}\\frac{2}{2x}=0. \\end{aligned} $$\nResolución de una indeterminación de tipo producto Si $f(x)\\rightarrow 0$ y $g(x)\\rightarrow \\pm\\infty$ cuando $x\\rightarrow a$, entonces la indeterminación $f(x)\\cdot g(x)\\rightarrow 0\\cdot \\pm\\infty$ puede convertirse en una de tipo cociente mediante la transformación:\n$$f(x)\\cdot g(x) = \\frac{f(x)}{1/g(x)}\\rightarrow \\frac{0}{0}.$$\nEjemplo. Sea $f(x)=x^2e^{1/x^2}\\rightarrow 0\\cdot\\infty$ cuando $x\\rightarrow 0$.\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0}x^2e^{1/x^2} \u0026amp;= \\lim_{x\\rightarrow 0}\\frac{e^{1/x^2}}{1/x^2}\\rightarrow \\frac{\\infty}{\\infty} \\end{aligned} $$\nAplicando ahora la regla de L´Hôpital tenemos:\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0}\\frac{e^{1/x^2}}{1/x^2} \u0026amp;= \\lim_{x\\rightarrow 0}\\frac{\\left(e^{1/x^2}\\right)\u0026rsquo;}{\\left(1/x^2\\right)\u0026rsquo;} = \\lim_{x\\rightarrow 0}\\frac{e^{1/x^2}\\frac{-2}{x^3}}{\\frac{-2}{x^3}} = \\lim_{x\\rightarrow 0}e^{1/x^2}=\\infty. \\end{aligned} $$\nResolución de una indeterminación de tipo potencia Si $f(x)^{g(x)}$ presenta una indeterminación de tipo potencia cuando $x\\rightarrow a$, entonces la indeterminación puede convertirse en una de tipo producto mediante la transformación:\n$$\\exp\\left(\\log f(x)^{g(x)}\\right) = \\exp\\left(g(x)\\cdot \\log f(x)\\right).$$\nEjemplo. Sea $f(x)=\\left(1+\\dfrac{1}{x}\\right)^{x} \\rightarrow 1^\\infty$ cuando $x\\rightarrow 0$.\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0}\\left(1+\\dfrac{1}{x}\\right)^{x} \u0026amp;= \\lim_{x\\rightarrow 0}\\exp\\left(\\log\\left(1+\\frac{1}{x}\\right)^{x}\\right) = \\exp\\left(\\lim_{x\\rightarrow 0}x\\log\\left(1+\\frac{1}{x}\\right)\\right) =\\newline \u0026amp;= \\exp\\left(\\lim_{x\\rightarrow 0}\\frac{\\log\\left(1+\\frac{1}{x}\\right)}{1/x}\\right) \\end{aligned} $$\nAplicando ahora la regla de L´Hôpital tenemos:\n$$ \\begin{aligned} \\exp\\left(\\lim_{x\\rightarrow 0}\\frac{\\left(\\log\\left(1+\\frac{1}{x}\\right)\\right)\u0026rsquo;}{\\left(1/x\\right)\u0026rsquo;}\\right) \u0026amp;= \\exp\\left(\\lim_{x\\rightarrow 0}\\frac{\\frac{1}{1+1/x}\\frac{-1}{x^2}}{\\frac{-1}{x^2}}\\right) = \\exp\\left(\\lim_{x\\rightarrow 0}\\frac{1}{1+\\frac{1}{x}}\\right)=\\exp(1)=e. \\end{aligned} $$\nResolución de una indeterminación de tipo diferencia Si $f(x)\\rightarrow \\infty$ y $g(x)\\rightarrow \\infty$ cuando $x\\rightarrow a$, entonces la indeterminación $f(x)-g(x)$ puede convertirse en una de tipo cociente mediante la transformación:\n$$f(x)-g(x)=\\frac{\\frac{1}{g(x)}-\\frac{1}{f(x)}}{\\frac{1}{f(x)g(x)}}\\rightarrow \\frac{0}{0}.$$\nEjemplo. Sea $f(x)=\\dfrac{1}{\\operatorname{sen} x}-\\dfrac{1}{x} \\rightarrow \\infty-\\infty$ cuando $x\\rightarrow 0$.\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0} \\frac{1}{\\operatorname{sen} x}-\\frac{1}{x} \u0026amp;= \\lim_{x\\rightarrow 0} \\frac{x-\\operatorname{sen} x}{x\\operatorname{sen} x} \\rightarrow \\frac{0}{0}. \\end{aligned} $$\nAplicando ahora la regla de L´Hôpital tenemos:\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0} \\frac{x-\\operatorname{sen} x}{x\\operatorname{sen} x} \u0026amp; = \\lim_{x\\rightarrow 0} \\frac{\\left(x-\\operatorname{sen} x\\right)\u0026rsquo;}{\\left(x\\operatorname{sen} x\\right)\u0026rsquo;}= \\lim_{x\\rightarrow 0} \\frac{1-\\cos x}{\\operatorname{sen} x +x\\cos x} = \\newline \u0026amp;= \\lim_{x\\rightarrow 0} \\frac{\\left(1-\\cos x\\right)\u0026rsquo;}{\\left(\\operatorname{sen} x +x\\cos x\\right)\u0026rsquo;} = \\lim_{x\\rightarrow 0} \\frac{\\operatorname{sen} x}{\\cos x +\\cos x-x\\operatorname{sen} x}=\\newline \u0026amp;= \\frac{0}{2}=0. \\end{aligned} $$\nAsíntotas de una función Una asíntota de una función es una recta a la que tiende la función en el infinito, es decir, que la distancia entre la recta y la función es cada vez menor.\nExisten tres tipos de asíntotas:\nAsíntota vertial: $x=a$, Asíntota horizontal: $y=a$, Asíntota oblicua: $y=a+bx$. Asíntotas verticales Definición - Asíntota vertical. Se dice que una recta $x=a$ es una asíntota vertical de una función $f$ si se cumple\n$$\\lim_{x\\rightarrow a^-}f(x)=\\pm \\infty \\quad \\textrm{o} \\quad \\lim_{x\\rightarrow a^-}f(x)=\\pm \\infty$$\nLas asíntotas verticales deben buscarse en los puntos donde no está definida la función, pero si lo está en las proximidades.\nEjemplo. La recta $x=2$ es una asíntota vertical de $f(x)=\\dfrac{x+1}{x-2}$ ya que\n$$\\lim_{x\\rightarrow 2^-}\\frac{x+1}{x-2} =-\\infty, \\mbox{ y } \\lim_{x\\rightarrow 2^+}\\frac{x+1}{x-2} =\\infty.$$\nAsíntotas horizontales Definición - Asíntota horizontal. Se dice que una recta $y=a$ es una asíntota horizontal de una función $f$ si se cumple\n$$\\lim_{x\\rightarrow +\\infty}f(x)=a \\quad \\textrm{o} \\quad \\lim_{x\\rightarrow \\infty}f(x)=a$$\nEjemplo. La recta $y=1$ es una asíntota horizontal de $f(x)=\\dfrac{x+1}{x-2}$ ya que\n$$ \\begin{aligned} \\lim_{x\\rightarrow -\\infty}\\frac{x+1}{x-2}\u0026amp;= \\lim_{x\\rightarrow -\\infty}1+\\frac{3}{x-2} = 1, \\textrm{ y}\\newline \\lim_{x\\rightarrow +\\infty}\\frac{x+1}{x-2}\u0026amp;= \\lim_{x\\rightarrow +\\infty}1+\\frac{3}{x-2} = 1. \\end{aligned} $$\nAsíntotas oblicuas Definición - Asíntota oblicua. Se dice que una recta $y=a+bx$ es una asíntota oblicua de una función $f$ si se cumple\n$$\\lim_{x\\rightarrow \\pm\\infty}\\frac{f(x)}{x}=b \\quad \\textrm{y} \\quad \\lim_{x\\rightarrow \\pm\\infty}f(x)-bx=a.$$\nEjemplo. La recta $y=x+1$ es una asíntota oblicua de $f(x)=\\dfrac{x^2}{x-1}$ ya que\n$$ \\begin{aligned} \\lim_{x\\rightarrow \\pm\\infty}\\frac{\\frac{x^2}{x-1}}{x}\u0026amp;= \\lim_{x\\rightarrow \\pm\\infty}\\frac{x^2}{x^2-x} = 1, \\textrm{ y}\\newline \\lim_{x\\rightarrow \\pm\\infty}\\frac{x^2}{x-1}-x \u0026amp;= \\lim_{x\\rightarrow \\pm\\infty}1+\\frac{x}{x-1} = 1 \\end{aligned} $$\nContinuidad Definición - Función continua en un punto. Se dice que una función $f$ es continua en el punto $a$ si\n$$\\lim_{x\\rightarrow a}f(x)=f(a).$$\nDe esta definición se deducen tres condiciones necesarias para la continuidad:\n$f(a)\\in \\operatorname{Dom}(f)$. Existe $ \\lim_{x\\rightarrow a}f(x)$. $ \\lim_{x\\rightarrow a}f(x)=f(a)$. Si se rompe alguna de estas condiciones, se dice que la función presenta una discontinuidad en $a$.\nDefinición - Función continua en un intervalo. Se dice que una función $f$ es continua en un intervalo si lo es en cada uno de los puntos del intervalo. La gráfica de una función continua en un intervalo puede dibujarse sin levantar el lápiz.\nTipos de discontinuidades Dependiendo de la condición de continuidad que se rompa, existen distintos tipos de discontinuidades:\nDiscontinuidad evitable. Discontinuidad de 1ª especie de salto finito. Discontinuidad de 1ª especie de salto infinito. Discontinuidad de 2ª especie. Discontinuidad evitable Definición - Discontinuidad evitable. Se dice que una función $f$ tiene una discontinuidad evitable en el punto $a$ si existe el límite de $f(x)$ cuando $x\\rightarrow a$ pero $\\displaystyle \\lim_{x\\rightarrow a}f(x)\\neq f(a)$. Ejemplo. La función $f(x)=\\dfrac{x^2-1}{x-1}$ tiene una discontinuidad evitable en $x=1$ ya que la función no está definida en $x=1$ pero\n$$\\lim_{x\\rightarrow 2}\\frac{x^2-1}{x-1} = \\lim_{x\\rightarrow 2}x+1=2.$$\nDiscontinuidad de 1ª especie de salto finito Definición - Discontinuidad de 1ª especie de salto finito. Se dice que una función $f$ tiene una discontinuidad de 1ª especie de salto finito en el punto $a$ si existen los límites laterales de $f(x)$ cuando $x\\rightarrow a$ pero\n$$\\lim_{x\\rightarrow a^-}f(x)\\neq \\lim_{x\\rightarrow a^+}f(x).$$\nA la diferencia entre ambos límite se le lama salto de la discontinuidad.\nEjemplo. La función $f(x)=\\dfrac{\\lvert x\\rvert}{x}$ tiene una discontinuidad de 1ª especie de salto finito en $x=0$ ya que\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0^-}\\frac{|x|}{x}\u0026amp;= -1\\newline \\lim_{x\\rightarrow 0^+}\\frac{|x|}{x}\u0026amp;= 1 \\end{aligned} $$\nSalto $= 1-(-1)=2$.\nDiscontinuidad de 1ª especie de salto infinito Definición - Discontinuidad de 1ª especie de salto infinito. Se dice que una función $f$ tiene una discontinuidad de 1ª especie de salto infinito en el punto $a$ si\n$$\\lim_{x\\rightarrow a^-}f(x)=\\pm\\infty \\quad \\textrm{o} \\quad \\lim_{x\\rightarrow a^+}f(x)=\\pm\\infty.$$\nSi $f$ tienen una discontinuidad de 1ª especie de salto infinito en un punto $a$, entonces $f$ tienen una asíntota vertical $x=a$.\nEjemplo. La función $f(x)=e^{1/x}$ tiene una discontinuidad de 1ª especie de salto infinito en $x=0$ ya que\n$$ \\begin{aligned} \\lim_{x\\rightarrow 0^-}e^{1/x}\u0026amp;= 0\\newline \\lim_{x\\rightarrow 0^+}e^{1/x}\u0026amp;= \\infty \\end{aligned} $$\nDiscontinuidad de 2ª especie Definición - Discontinuidad de 2ª especie. Se dice que una función $f$ tiene una discontinuidad de 2ª especie en el punto $a$ si no existe alguno de los límites laterales y tampoco se trata de una discontinuidad de 1ª especie de salto infinito. Normalmente la discontinuidades de 2ª especie se dan en puntos donde la función no definida en sus proximidades.\nEjemplo. La función $f(x)=\\dfrac{1}{\\sqrt{x^2-1}}$ tiene una discontinuidad de 2ª especie en $x=1$ ya que\n$$ \\begin{aligned} \u0026amp; \\lim_{x\\rightarrow 1^-}\\frac{1}{\\sqrt{x^2-1}} \\textrm{ no existe} \\newline \u0026amp; \\lim_{x\\rightarrow 1^+}\\frac{1}{\\sqrt{x^2-1}}=\\infty \\end{aligned} $$\nNotas\nSe pude simplificar porque aunque $x\\rightarrow 1$, $x\\neq 1$ y por tanto el denominador no se anula.\u0026#160;\u0026#x21a9;\u0026#xfe0e;\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"7824125819bd75b8592b2eeb0bccc880","permalink":"/docencia/calculo/manual/limites-continuidad/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/limites-continuidad/","section":"docencia","summary":"El concepto de límite Aproximación al concepto de límite El concepto de límite está ligado al de tendencia.\nDecimos que $x$ tiende a un valor $a$, y lo escribimos $x\\rightarrow a$, si se pueden tomar valores de $x$ tan próximos a $a$ como se quiera, pero sin llegar a valer $a$.","tags":["Límite","Asíntota","Continuidad"],"title":"Límites y continuidad","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Química, Biotecnología\nSe sometió a una persona a unas sesiones de entrenamiento para el manejo de una máquina de análisis químicos y se valoró la destreza en el manejo en diversas ocasiones, valorandola en una escala de 0 a 100. Los resultados obtenidos aparecen en la siguiente tabla\nSesiones | 2 | 5 | 7 | 10 | 12 | 16 Destreza | 15 | 40 | 62 | 86 | 92 | 95\nSe pide:\nCalcular la destreza alcanzada al cabo de 8 sesiones empleando el modelo logarítmico. Calcular el número de sesiones necesarias para alcanzar una destreza de 80 empleando el modelo exponencial. Justificar razonadamente cuál de las predicciones anteriores es más fiable. SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"da078584d8eb347e30f15eaff9ec296e","permalink":"/docencia/estadistica/ejercicios/regresion-no-lineal/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/regresion-no-lineal/","section":"docencia","summary":"Ejercicio 1 Titulación: Química, Biotecnología\nSe sometió a una persona a unas sesiones de entrenamiento para el manejo de una máquina de análisis químicos y se valoró la destreza en el manejo en diversas ocasiones, valorandola en una escala de 0 a 100.","tags":["Regresión","Correlación","Regresión No Lineal"],"title":"Ejercicios de Regresión No Lineal","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable"],"content":"El concepto de derivada Tasa de variación media Definición - Incremento. Dada una función $y=f(x)$, se llama incremento de $f$ en un intervalo $[a,b]$ a la diferencia entre el valor de $f$ en cada uno de los extremos del intervalo, y se nota\n$$\\Delta y= f(b)-f(a).$$\nCuando $f$ es la función identidad $y=x$, se cumple que\n$$\\Delta x=\\Delta y= f(b)-f(a)=b-a,$$\ny por tanto, el incremento de $x$ en un intervalo es la amplitud del intervalo. Esto nos permite escribir el intervalo $[a,b]$ como $[a,a+\\Delta x]$.\nDefinición - Tasa de variación media. Se llama tasa de variación media de $f$ en el intervalo $[a,a+\\Delta x]$, al cociente entre el incremento de $y$ y el incremento de $x$ en dicho intervalo, y se escribe\n$$\\textrm{TVM}\\;f[a,a+\\Delta x]=\\frac{\\Delta y}{\\Delta x}=\\frac{f(a+\\Delta x)-f(a)}{\\Delta x}.$$\nEjemplo. Consideremos la función $y=x^2$ que mide el área de un cuadrado de chapa metálica de lado $x$.\nSi en un determinado instante el lado del cuadrado es $a$, y sometemos la chapa a un proceso de calentamiento que aumenta el lado del cuadrado una cantidad $\\Delta x$, ¿en cuánto se incrementará el área del cuadrado?\n$$ \\begin{aligned} \\Delta y \u0026amp;= f(a+\\Delta x)-f(a)=(a+\\Delta x)^2-a^2=\\newline \u0026amp;= a^2+2a\\Delta x+\\Delta x^2-a^2=2a\\Delta x+\\Delta x^2. \\end{aligned} $$\n¿Cuál será la tasa de variación media del área en el intervalo $[a,a+\\Delta x]$?\n$$\\operatorname{TVM}f[a,a+\\Delta x]=\\frac{\\Delta y}{\\Delta x}=\\frac{2a\\Delta x+\\Delta x^2}{\\Delta x}=2a+\\Delta x.$$\nInterpretación geométrica de la tasa de variación media La tasa de variación media de $f$ en el intervalo $[a,a+\\Delta x]$ es la pendiente de la recta secante a $f$ en los puntos $(a,f(a))$ y $(a+\\Delta x,f(a+\\Delta x))$. Tasa de variación instantánea En muchas ocasiones, es interesante estudiar la tasa de variación que experimenta una función, no en intervalo, sino en un punto.\nConocer la tendencia de variación de una función en un instante puede ayudarnos a predecir valores en instantes próximos.\nDefinición - Tasa de variación instantánea y derivada. Dada una función $y=f(x)$, se llama tasa de variación instantánea de $f$ en un punto $a$, al límite de la tasa de variación media de $f$ en el intervalo $[a,a+\\Delta x]$, cuando $\\Delta x$ tiende a 0, y lo notaremos\n$$ \\begin{aligned} \\operatorname{TVI} f(a) \u0026amp;= \\lim_{\\Delta x\\rightarrow 0} \\operatorname{TVM}f[a,a+\\Delta x]=\\lim_{\\Delta x\\rightarrow 0}\\frac{\\Delta y}{\\Delta x} = \\newline \u0026amp;= \\lim_{\\Delta x\\rightarrow 0}\\frac{f(a+\\Delta x)-f(a)}{\\Delta x} \\end{aligned} $$\nCuando este límite existe, se dice que la función $f$ es derivable en el punto $a$, y al valor del mismo se le llama derivada de $f$ en $a$, y se nota como\n$$f\u0026rsquo;(a) \\mbox{ o bien } \\frac{df}{dx}(a)$$\nEjemplo. Consideremos de nuevo la función $y=x^2$ que mide el área de un cuadrado de chapa metálica de lado $x$.\nSi en un determinado instante el lado del cuadrado es $a$, y sometemos la chapa a un proceso de calentamiento que aumenta el lado del cuadrado, ¿cuál es la tasa de variación instantánea del área del cuadrado en dicho instante?\n$$ \\begin{aligned} \\operatorname{TVI} f(a)\u0026amp;=\\lim_{\\Delta x\\rightarrow 0}\\frac{\\Delta y}{\\Delta x}=\\lim_{\\Delta x\\rightarrow 0}\\frac{f(a+\\Delta x)-f(a)}{\\Delta x} =\\newline \u0026amp;=\\lim_{\\Delta x\\rightarrow 0}\\frac{2a\\Delta x+\\Delta x^2}{\\Delta x}=\\lim_{\\Delta x\\rightarrow 0} 2a+\\Delta x= 2a. \\end{aligned} $$\nAsí pues, $$f\u0026rsquo;(a)=2a,$$ lo que indica que la tendencia de crecimiento el área es del doble del valor del lado.\nEl signo de $f\u0026rsquo;(a)$ indica la tendencia de crecimiento de $f$ en el punto $a$:\n$f\u0026rsquo;(a)\u0026gt;0$ indica que la tendencia es creciente. $f\u0026rsquo;(a)\u0026lt;0$ indica que la tendencia es decreciente. Interpretación geométrica de la tasa de variación instantánea La tasa de variación instantánea de $f$ en el punto $a$ es la pendiente de la recta tangente a $f$ en el punto $(a,f(a))$. Interpretación cinemática de la derivada Movimiento rectilineo Supongase que la función $f(t)$ describe la posición de un objeto móvil sobre la recta real en el instante $t$. Tomando como referencia el origen de coordenadas $O$ y el vector unitario $\\mathbf{i}=(1)$, se puede representar la posición $P$ del móvil en cada instante $t$ mediante un vector $\\vec{OP}=x\\mathbf{i}$ donde $x=f(t)$.\nTambién tiene sentido pensar en $f$ como una función que mide otras magnitudes como por ejemplo la temperatura de un cuerpo, la concentración de un gas o la cantidad de un compuesto en una reacción química en un instante $t$.\nEn este contexto, si se toman los instantes $t=t_0$ y $t=t_0+\\Delta t$, ambos del dominio $I$ de $f$, el vector\n$$\\mathbf{v}_m=\\frac{f(t_0+\\Delta t)-f(t_0)}{\\Delta t}$$\nque se conoce como velocidad media de la trayectoria $f$ entre los instantes $t_0$ y $t_0+\\Delta t$.\nEjemplo. Un vehículo realiza un viaje de Madrid a Barcelona. Sea $f$ la función que da la posición el vehículo en cada instante. Si el vehículo parte de Madrid (km 0) a las 8 y llega a Barcelona (km 600) a las 14 horas, entonces la velocidad media del vehículo en el trayecto es\n$$\\mathbf{v}_m=\\frac{f(14)-f(8)}{14-8}=\\frac{600-0}{6} = 100 km/h.$$\nSiguiendo en este mismo contexto del movimiento rectilineo, la derivada de $f$ en el instante $t=t_0$ es el vector\n$$\\mathbf{v}=f\u0026rsquo;(t_0)=\\lim_{\\Delta x\\rightarrow 0}\\frac{f(t_0+\\Delta t)-f(t_0)}{\\Delta t},$$\nque se conoce, siempre que exista el límite, como velocidad instantánea o simplemente la velocidad de la trayectoria $f$ en el instante $t_0$.\nEs decir, la derivada de la posición respecto del tiempo, es un campo de vectores que recibe el nombre de velocidad a lo largo de la trayectoria $f$.\nSiguiendo con el ejemplo anterior, lo que marca el velocímetro en un determinado instante sería el módulo del vector velocidad en ese instante.\nGeneralización al movimiento curvilineo La derivada como velocidad a lo largo de una trayectoria en la recta real puede generalizarse a trayectorias en cualquier espacio euclídeo $\\mathbb{R}^n$.\nPara el caso del plano real $\\mathbb{R}^2$, si $f(t)$ describe la posición de un objeto móvil en el plano en el instante $t$, tomando como referencia el origen de coordenadas $O$ y los vectores coordenados ${\\mathbf{i}=(1,0),\\mathbf{j}=(0,1)}$, se puede representar la posición $P$ del móvil en cada instante $t$ mediante un vector $\\vec{OP}=x(t)\\mathbf{i}+y(t)\\mathbf{j}$ cuyas coordenadas\n$$ \\begin{cases} x=x(t)\\newline y=y(t) \\end{cases} \\quad t\\in I\\subseteq \\mathbb{R} $$\nse conocen como funciones coordenadas de $f$ y se escribe $f(t)=(x(t),y(t))$.\nVelocidad en una trayectoria curvilinea en el plano En este contexto de una trayectoria $f(t)=(x(t),y(t))$ en el plano real $\\mathbb{R}^2$, para un instante $t=t_0$, si existe el vector\n$$\\mathbf{v} = \\lim_{\\Delta t\\rightarrow 0} \\frac{f(t_0+\\Delta t)-f(t_0)}{\\Delta t},$$\nentonces $f$ es derivable en el instante $t=t_0$ y el vector $\\mathbf{v}=f\u0026rsquo;(t_0)$ se conoce como velocidad de $f$ en ese instante.\nComo $f(t_0)=(x(t),y(t))$,\n$$ \\begin{aligned} f\u0026rsquo;(t)\u0026amp;=\\lim_{\\Delta t\\rightarrow 0} \\frac{f(t_0+\\Delta t)-f(t_0)}{\\Delta t} = \\lim_{\\Delta t\\rightarrow 0} \\frac{(x(t_0+\\Delta t),y(t_0+\\Delta t))-(x(t_0),y(t_0))}{\\Delta t} =\\newline \u0026amp;= \\lim_{\\Delta t\\rightarrow 0} \\left(\\frac{x(t_0+\\Delta t)-x(t_0)}{\\Delta t},\\frac{y(t_0+\\Delta t)-y(t_0)}{\\Delta t}\\right) =\\newline \u0026amp;= \\left(\\lim_{\\Delta t\\rightarrow 0}\\frac{x(t_0+\\Delta t)-x(t_0)}{\\Delta t},\\lim_{\\Delta t\\rightarrow 0}\\frac{y(t_0+\\Delta t)-y(t_0)}{\\Delta t}\\right) = (x\u0026rsquo;(t_0),y\u0026rsquo;(t_0)). \\end{aligned} $$\nluego\n$$\\mathbf{v} = x\u0026rsquo;(t_0)\\mathbf{i}+y\u0026rsquo;(t_0)\\mathbf{j}.$$\nEjemplo. Dada la trayectoria $f(t) = (\\cos t,\\operatorname{sen} t)$, $t\\in \\mathbb{R}$, cuya imagen es la circunferencia de centro el origen de coordenas y radio 1, sus funciones coordenadas son $x(t) = \\cos t$, $y(t) = \\operatorname{sen} t$, $t\\in \\mathbb{R}$, y su velocidad es\n$$\\mathbf{v}=f\u0026rsquo;(t)=(x\u0026rsquo;(t),y\u0026rsquo;(t))=(-\\operatorname{sen} t, \\cos t).$$\nEn el instante $t=\\pi/4$, el móvil estará en la posición $f(\\pi/4) = (\\cos(\\pi/4),\\operatorname{sen}(\\pi/4)) =(\\sqrt{2}/2,\\sqrt{2}/2)$ y se moverá con una velocidad $\\mathbf{v}=f\u0026rsquo;(\\pi/4)=(-\\operatorname{sen}(\\pi/4),\\cos(\\pi/4))=(-\\sqrt{2}/2,\\sqrt{2}/2)$.\nObsérvese que el módulo del vector velocidad siempre será 1 ya que $\\lvert \\mathbf{v}\\rvert = \\sqrt{(-\\operatorname{sen} t)^2+(\\cos t)^2}=1$.\nRecta tangente a una trayectoria Recta tangente a una trayectoria en el plano Los vectores paralelos a la velocidad $\\mathbf{v}$ se denominan vectores tangentes a la trayectoria $f$ en el instante $t=t_0$, y la recta que pasa por $P=f(t_0)$ dirigida por $\\mathbf{v}$ es la recta tangente a $f$ cuando $t=t_0$.\nDefinición - Recta tangente a una trayectoria. Dada una trayectoria $f$ sobre el plano real $\\mathbb{R}^2$, se llama recta tangente a $f$ para $t=t_0$ a la recta de ecuación\n$$ \\begin{align*} l: (x,y)\u0026amp;= f(t_0)+tf\u0026rsquo;(t_0) = (x(t_0),y(t_0))+t(x\u0026rsquo;(t_0),y\u0026rsquo;(t_0))\\newline \u0026amp;= (x(t_0)+tx\u0026rsquo;(t_0),y(t_0)+ty\u0026rsquo;(t_0)). \\end{align*} $$\nEjemplo. Se ha visto que para la trayectoria $f(t) = (\\cos t,\\operatorname{sen} t)$, $t\\in \\mathbb{R}$, cuya imagen es la circunferencia de centro el origen de coordenas y radio 1, en el instante $t=\\pi/4$ la posición del móvil era $f(\\pi/4)=(\\sqrt{2}/2,\\sqrt{2}/2)$ y su velocidad $\\mathbf{v}=(-\\sqrt{2}/2,\\sqrt{2}/2)$, de modo que la recta tangente a $f$ en ese instante es\n$$l: X=f(\\pi/2)+t\\mathbf{v} = \\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right)+t\\left(\\frac{-\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right) = \\left(\\frac{\\sqrt{2}}{2}-t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right).$$\nDe la ecuación vectorial de la recta tangente a $f$ para $t=t_0$, se obtiene que sus funciones cartesianas son\n$$\\begin{cases} x=x(t_0)+tx\u0026rsquo;(t_0)\\newline y=y(t_0)+ty\u0026rsquo;(t_0) \\end{cases} \\quad t\\in \\mathbb{R},$$\ny despejando $t$ en ambas ecuaciones e igualando se llega a la ecuación cartesiana de la recta tangente\n$$\\frac{x-x(t_0)}{x\u0026rsquo;(t_0)}=\\frac{y-y(t_0)}{y\u0026rsquo;(t_0)},$$\nsi $x\u0026rsquo;(t_0)\\neq 0$ e $y\u0026rsquo;(t_0)\\neq 0$, y de ahí a la ecuación en la forma punto-pendiente\n$$y-y(t_0)=\\frac{y\u0026rsquo;(t_0)}{x\u0026rsquo;(t_0)}(x-x(t_0)).$$\nPartiendo de la ecuación vectorial de la tangente del ejemplo anterior $l=\\left(\\frac{\\sqrt{2}}{2}-t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right)$, su ecuación cartesiana es\n$$ \\begin{gathered} \\frac{x-\\sqrt{2}/2}{-\\sqrt{2}/2} = \\frac{y-\\sqrt{2}/2}{\\sqrt{2}/2}\\Rightarrow\\newline y-\\sqrt{2}/2 = \\frac{-\\sqrt{2}/2}{\\sqrt{2}/2}(x-\\sqrt{2}/2) \\Rightarrow \\newline y=-x+\\sqrt{2}. \\end{gathered} $$\nRecta normal a una trayectoria en el plano Se ha visto que la recta tangente a una trayectoria $f$ cuando $t=t_0$ es la recta que pasa por el punto el punto $P=f(t_0)$ dirigida por el vector velocidad $\\mathbf{v}=f\u0026rsquo;(t_0)=(x\u0026rsquo;(t_0),y\u0026rsquo;(t_0))$. Si en lugar de tomar ese vector se toma como vector director el vector $\\mathbf{w}=(y\u0026rsquo;(t_0),-x\u0026rsquo;(t_0))$, que es ortogonal a $\\mathbf{v}$, se obtiene otra recta que se conoce como recta normal a la trayectoria $f$ cuanto $t=t_0$.\nDefinición - Recta normal a una trayectoria. Dada una trayectoria $f$ sobre el plano real $\\mathbb{R}^2$, se llama recta normal a $f$ para $t=t_0$ a la recta de ecuación\n$$ \\begin{aligned} l: (x,y) \u0026amp;= (x(t_0),y(t_0))+t(y\u0026rsquo;(t_0),-x\u0026rsquo;(t_0)) =\\newline \u0026amp;= (x(t_0)+ty\u0026rsquo;(t_0),y(t_0)-tx\u0026rsquo;(t_0)). \\end{aligned} $$\nSu ecuación cartesiana es\n$$\\frac{x-x(t_0)}{y\u0026rsquo;(t_0)} = \\frac{y-y(t_0)}{-x\u0026rsquo;(t_0)},$$\ny su ecuación en la forma punto pendiente\n$$y-y(t_0) = \\frac{-x\u0026rsquo;(t_0)}{y\u0026rsquo;(t_0)}(x-x(t_0)).$$\nLa recta normal es perpendicular a la recta tangente ya que sus vectores directores son ortogonales. Ejemplo. Siguiendo con el ejemplo de la trayectoria $f(t) = (\\cos t,\\operatorname{sen} t)$, $t\\in \\mathbb{R}$, la recta normal en el instante $t=\\pi/4$ es\n$$ \\begin{aligned} l\u0026amp;: (x,y)=(\\cos(\\pi/2),\\operatorname{sen}(\\pi/2))+t(\\cos(\\pi/2),\\operatorname{sen}(\\pi/2)) =\\newline \u0026amp; \\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right)+t\\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right) =\\left(\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right), \\end{aligned} $$\ny su ecuación cartesiana es\n$$\\frac{x-\\sqrt{2}/2}{\\sqrt{2}/2} = \\frac{y-\\sqrt{2}/2}{\\sqrt{2}/2}\\Rightarrow y-\\sqrt{2}/2 = \\frac{\\sqrt{2}/2}{\\sqrt{2}/2}(x-\\sqrt{2}/2) \\Rightarrow y=x.$$\nRectas tangente y normal a una función Un caso particular de las recta tangente y normal a una trayectoria es son la recta tangente y normal a una función de una variable real. Si se tiene la función $y=f(x)$, $x\\in I\\subseteq \\mathbb{R}$, una trayectoria que traza la gráfica de $f$ es $$g(t) = (t,f(t)) \\quad t\\in I,$$ y su velocidad es $$g\u0026rsquo;(t) = (1,f\u0026rsquo;(t)),$$ de modo que la recta tangente para $t=x_0$ es\n$$\\frac{x-x_0}{1} = \\frac{y-f(x_0)}{f\u0026rsquo;(x_0)} \\Rightarrow y-f(x_0) = f\u0026rsquo;(x_0)(x-x_0),$$\ny la recta normal es\n$$\\frac{x-x_0}{f\u0026rsquo;(x_0)} = \\frac{y-f(x_0)}{-1} \\Rightarrow y-f(x_0) = \\frac{-1}{f\u0026rsquo;(x_0)}(x-x_0),$$\nEjemplo. Dada la función $y=f(x)=x^2$, la trayectoria que dibuja la gráfica de esta función es $g(t)=(t,t^2)$ y su velocidad es $g\u0026rsquo;(t)=(1,2t)$, de modo que en el punto $(1,1)$, que se alcanza en el instante $t=1$, la recta tangente es\n$$\\frac{x-1}{1} = \\frac{y-1}{2} \\Rightarrow y-1 = 2(x-1) \\Rightarrow y = 2x-1,$$\ny la recta normal es\n$$\\frac{x-1}{2} = \\frac{y-1}{-1} \\Rightarrow y-1 = \\frac{-1}{2}(x-1) \\Rightarrow y = \\frac{-x}{2}+\\frac{3}{2}.$$\nRecta tangente a una trayectoria en el espacio El concepto de recta tangente a una trayectoria en el plano real puede extenderse fácilmente a trayectorias en el espacio real $\\mathbb{R}^3$.\nSi $f(t)=(x(t),y(t),z(t))$, $t\\in I\\subseteq \\mathbb{R}$, es una trayectoria en el espacio real $\\mathbb{R}^3$, entonces el móvil que recorre esta trayectoria en el instante $t=t_0$, ocupará la posición $P=(x(t_0),y(t_0),z(t_0))$ y tendrá una velocidad $\\mathbf{v}=f\u0026rsquo;(t)=(x\u0026rsquo;(t),y\u0026rsquo;(t),z\u0026rsquo;(t))$, de manera que la recta tangente a $f$ en ese instante será\n$$ \\begin{aligned} l\u0026amp;: (x,y,z)=(x(t_0),y(t_0),z(t_0))+t(x\u0026rsquo;(t_0),y\u0026rsquo;(t_0),z\u0026rsquo;(t_0)) =\\newline \u0026amp;= (x(t_0)+tx\u0026rsquo;(t_0),y(t_0)+ty\u0026rsquo;(t_0),z(t_0)+tz\u0026rsquo;(t_0)), \\end{aligned} $$\ncuyas ecuaciones cartesianas son\n$$\\frac{x-x(t_0)}{x\u0026rsquo;(t_0)}=\\frac{y-y(t_0)}{y\u0026rsquo;(t_0)}=\\frac{z-z(t_0)}{z\u0026rsquo;(t_0)},$$\nsiempre que $x\u0026rsquo;(t_0)\\neq 0$, $y\u0026rsquo;(t_0)\\neq 0$ y $z\u0026rsquo;(t_0)\\neq 0$.\nEjemplo. Dada la trayectoria del espacio $f(t)=(\\cos t, \\operatorname{sen} t, t)$, $t\\in \\mathbb{R}$, en el instante $t=\\pi/2$, la trayectoria pasará por el punto\n$$f(\\pi/2)=(\\cos(\\pi/2),\\operatorname{sen}(\\pi/2),\\pi/2)=(0,1,\\pi/2),$$\ncon una velocidad\n$$\\mathbf{v}=f\u0026rsquo;(\\pi/2)=(-\\operatorname{sen}(\\pi/2),\\cos(\\pi/2), 1)=(-1,0,1),$$\ny la tangente en ese punto es\n$$l:(x,y,z)=(0,1,\\pi/2)+t(-1,0,1) = (-t,1,t+\\pi/2).$$\nEjemplo interactivo\nÁlgebra de derivadas Propiedades de la derivada Si $y=c$, es una función constante, entonces $y\u0026rsquo;=0$.\nSi $y=x$, es la función identidad, entonces $y\u0026rsquo;=1$.\nSi $u=f(x)$ y $v=g(x)$ son dos funciones diferenciables, entonces\n$(u+v)\u0026rsquo;=u\u0026rsquo;+v'$ $(u-v)\u0026rsquo;=u\u0026rsquo;-v'$ $(u\\cdot v)\u0026rsquo;=u\u0026rsquo;\\cdot v+ u\\cdot v'$ $\\left(\\dfrac{u}{v}\\right)\u0026rsquo;=\\dfrac{u\u0026rsquo;\\cdot v-u\\cdot v\u0026rsquo;}{v^2}$ Derivada de una función compuesta: La regla de la cadena Teorema - Regla de la cadena. Si $y=f\\circ g$ es la composición de dos funciones $y=f(z)$ y $z=g(x)$, entonces\n$$(f\\circ g)\u0026rsquo;(x)=f\u0026rsquo;(g(x))g\u0026rsquo;(x),$$\nDemostración Resulta sencillo demostrarlo con la notación diferencial\n$$\\frac{dy}{dx}=\\frac{dy}{dz}\\frac{dz}{dx}=f\u0026rsquo;(z)g\u0026rsquo;(x)=f\u0026rsquo;(g(x))g\u0026rsquo;(x).$$\nEjemplo. Si $f(z)=\\operatorname{sen} z$ y $g(x)=x^2$, entonces $f\\circ g(x)=\\operatorname{sen}(x^2)$ y, aplicando la regla de la cadena, su derivada vale\n$$ (f\\circ g)\u0026rsquo;(x)=f\u0026rsquo;(g(x))g\u0026rsquo;(x) = \\cos g(x) 2x = \\cos(x^2)2x. $$\nPor otro lado, $g\\circ f(z)= (\\sin z)^2$ y, de nuevo aplicando la regla de la cadena, su derivada vale\n$$ (g\\circ f)\u0026rsquo;(z)=g\u0026rsquo;(f(z))f\u0026rsquo;(z) = 2f(z)\\cos z = 2\\operatorname{sen} z\\cos z. $$\nDerivada de la inversa de una función Teorema - Derivada de la función inversa. Si $y=f(x)$ es una función y $x=f^{-1}(y)$ es su inversa, entonces\n$$\\left(f^{-1}\\right)\u0026rsquo;(y)=\\frac{1}{f\u0026rsquo;(x)}=\\frac{1}{f\u0026rsquo;(f^{-1}(y))}$$\nDemostración También resulta sencillo de demostrar con la notación diferencial\n$$\\frac{dx}{dy}=\\frac{1}{dy/dx}=\\frac{1}{f\u0026rsquo;(x)}=\\frac{1}{f\u0026rsquo;(f^{-1}(y))}$$\nEjemplo. La inversa de la función exponencial $y=f(x)=e^x$ es el logaritmo neperiano $x=f^{-1}(y)=\\ln y$, de modo que para calcular la derivada del logaritmo podemos utilizar el teorema de la derivada de la inversa y se tiene\n$$ \\left(f^{-1}\\right)\u0026rsquo;(y)=\\frac{1}{f\u0026rsquo;(x)}=\\frac{1}{e^x}=\\frac{1}{e^{\\ln y}}=\\frac{1}{y}. $$\nEstudio del crecimiento de una función La principal aplicación de la derivada es el estudio del crecimiento de una función mediante el signo de la derivada.\nTeorema. Si $f$ es una función cuya derivada existe en un intervalo $I$, entonces:\nSi $\\forall x\\in I\\ f\u0026rsquo;(x)\\geq 0$ entonces $f$ es creciente en el intervalo $I$. Si $\\forall x\\in I\\ f\u0026rsquo;(x)\\leq 0$ entonces $f$ es decreciente en el intervalo $I$. Ejemplo. La función $f(x)=x^3$ es creciente en todo $\\mathbb{R}$ ya que $\\forall x\\in \\mathbb{R}\\ f\u0026rsquo;(x)\\geq 0$.\nUna función puede ser creciente o decreciente en un intervalo y no tener derivada.* Ejemplo. Consideremos la función $f(x)=x^4-2x^2+1$. Su derivada $f\u0026rsquo;(x)=4x^3-4x$ está definida en todo $\\mathbb{R}$ y es continua.\nDeterminación de los extremos relativos de una función Como consecuencia del resultado anterior, la derivada también sirve para determinar los extremos relativos de una función.\nTeorema - Criterio de la primera derivada. Sea $f$ es una función cuya derivada existe en un intervalo $I$, y sea $x_0\\in I$ tal que $f\u0026rsquo;(x_0)=0$, entonces:\nSi existe un $\\delta\u0026gt;0$ tal que $\\forall x\\in(x_0-\\delta,x_0)\\ f\u0026rsquo;(x)\u0026gt;0$ y $\\forall x\\in(x_0,x_0+\\delta)\\ f\u0026rsquo;(x)\u0026lt;0$ entonces $f$ tiene un máximo relativo en $x_0$. Si existe un $\\delta\u0026gt;0$ tal que $\\forall x\\in(x_0-\\delta,x_0)\\ f\u0026rsquo;(x)\u0026lt;0$ y $\\forall x\\in(x_0,x_0+\\delta)\\ f\u0026rsquo;(x)\u0026gt;0$ entonces $f$ tiene un mínimo relativo en $x_0$. Si existe un $\\delta\u0026gt;0$ tal que $\\forall x\\in(x_0-\\delta,x_0)\\ f\u0026rsquo;(x)\u0026gt;0$ y $\\forall x\\in(x_0,x_0+\\delta)\\ f\u0026rsquo;(x)\u0026gt;0$ entonces $f$ tiene un punto de inflexión creciente en $x_0$. Si existe un $\\delta\u0026gt;0$ tal que $\\forall x\\in(x_0-\\delta,x_0)\\ f\u0026rsquo;(x)\u0026lt;0$ y $\\forall x\\in(x_0,x_0+\\delta)\\ f\u0026rsquo;(x)\u0026lt;0$ entonces $f$ tiene un punto de inflexión decreciente en $x_0$. Los puntos donde se anula la derivada de una función se denominan puntos críticos.\nEjemplo. Consideremos de nuevo la función $f(x)=x^4-2x^2+1$. Su derivada $f\u0026rsquo;(x)=4x^3-4x$ está definida en todo $\\mathbb{R}$ y es continua.\nEstudio de la concavidad de una función La concavidad de una función puede estudiarse mediante el signo de la segunda derivada.\nTeorema - Criterio de la segunda derivada. Si $f$ es una función cuya segundaderivada existe en un intervalo $I$, entonces:\nSi $\\forall x\\in I\\ f^{\\prime\\prime}(x)\\geq 0$ entonces $f$ es cóncava en el intervalo $I$. Si $\\forall x\\in I\\ f^{\\prime\\prime}(x)\\leq 0$ entonces $f$ es convexa en el intervalo $I$. Ejemplo. La función $f(x)=x^2$ tiene segunda derivada $f^{\\prime\\prime}(x)=2\u0026gt;0$ y por tanto es cóncava en todo $\\mathbb{R}$.\nObservación. Una función puede ser cóncava o convexa en un intervalo y no tener derivada.\nEjemplo. Consideremos de nuevo la función $f(x)=x^4-2x^2+1$. Su segunda derivada $f^{\\prime\\prime}(x)=12x^2-4$ está definida en todo $\\mathbb{R}$ y es continua.\nPolinomios de Taylor Aproximación de una función mediante un polinomio Una aplicación muy útil de la derivada es la aproximación de funciones mediante polinomios.\nLos polinomios son funciones sencillas de calcular (mediante sumas y productos), que tienen muy buenas propiedades:\nEstán definidos en todos los números reales. Son funciones continuas. Son derivables hasta cualquier orden y sus derivadas son continuas. Objetivo. Aproximar una función $f(x)$ mediante un polinomio $p(x)$ cerca de un valor $x=x_0$.\nAproximación mediante un polinomio de grado 0 Un polinomio de grado 0 tiene ecuación $$p(x) = c_0,$$ donde $c_0$ es una constante.\nComo el polinomio debe valer lo que la función en el punto $x_0$, debe cumplir\n$$p(x_0) = c_0 = f(x_0).$$\nEn consecuencia, el polinomio de grado 0 que mejor aproxima a $f$ en un entorno de $x_0$ es\n$$p(x) = f(x_0).$$\nAproximación mediante un polinomio de grado 1 Un polinomio de grado 1 es una recta y tiene ecuación\n$$p(x) = c_0+c_1x,$$\naunque también puede escribirse\n$$p(x) = c_0+c_1(x-x_0).$$\nDe entre todos los polinomios de grado 1, el que mejor aproxima a $f$ en entorno de $x_0$ será el que cumpla las dos condiciones siguientes:\n$p$ y $f$ valen lo mismo en $x_0$: $p(x_0) = f(x_0)$, $p$ y $f$ tienen la misma tasa de crecimiento en $a$: $p\u0026rsquo;(x_0) = f\u0026rsquo;(x_0)$. Esta última condición nos asegura que en un entorno de $x_0$, $p$ y $f$ tienen aproximadamente la misma tendencia de crecimiento, pero requiere que la función $f$ sea derivable en $x_0$.\nImponiendo las condiciones anteriores tenemos\n$p(x)=c_0+c_1(x-x_0) \\Rightarrow p(x_0)=c_0+c_1(x_0-x_0)=c_0=f(x_0)$, $p\u0026rsquo;(x)=c_1 \\Rightarrow p\u0026rsquo;(x_0)=c_1=f\u0026rsquo;(x_0)$. Así pues, el polinomio de grado 1 que mejor aproxima a $f$ en un entorno de $x_0$ es\n$$p(x) = f(x_0)+f \u0026lsquo;(x_0)(x-x_0),$$\nque resulta ser la recta tangente a $f$ en el punto $(x_0,f(x_0))$.\nAproximación mediante un polinomio de grado 2 Un polinomio de grado 2 es una parábola y tiene ecuación\n$$p(x) = c_0+c_1x+c_2x^2,$$\naunque también puede escribirse\n$$p(x) = c_0+c_1(x-x_0)+c_2(x-x_0)^2.$$\nDe entre todos los polinomio de grado 2, el que mejor aproxima a $f$ en entorno de $x_0$ será el que cumpla las tres condiciones siguientes:\n$p$ y $f$ valen lo mismo en $x_0$: $p(x_0) = f(x_0)$, $p$ y $f$ tienen la misma tasa de crecimiento en $x_0$: $p\u0026rsquo;(x_0) = f\u0026rsquo;(x_0)$. $p$ y $f$ tienen la misma curvatura en $x_0$: $p\u0026rsquo;\u0026rsquo;(x_0)=f\u0026rsquo;\u0026rsquo;(x_0)$. Esta última condición requiere que la función $f$ sea dos veces derivable en $x_0$.\nImponiendo las condiciones anteriores tenemos\n$p(x)=c_0+c_1(x-x_0)+c_2(x-x_0)^2 \\Rightarrow p(x_0)=c_0=f(x_0)$, $p\u0026rsquo;(x)=c_1+2c_2(x-x_0) \\Rightarrow p\u0026rsquo;(x_0)=c_1+2c_2(x_0-x_0)=c_1=f\u0026rsquo;(x_0)$, $p\u0026rsquo;\u0026rsquo;(x)=2c_2 \\Rightarrow p\u0026rsquo;\u0026rsquo;(x_0)=2c_2=f\u0026rsquo;\u0026rsquo;(x_0) \\Rightarrow c_2=\\frac{f\u0026rsquo;\u0026rsquo;(x_0)}{2}$. Así pues, el polinomio de grado 2 que mejor aproxima a $f$ en un entorno de $x_0$ es\n$$p(x) = f(x_0)+f\u0026rsquo;(x_0)(x-x_0)+\\frac{f\u0026rsquo;\u0026rsquo;(x_0)}{2}(x-x_0)^2.$$\nAproximación mediante un polinomio de grado $n$ Un polinomio de grado $n$ tiene ecuación\n$$p(x) = c_0+c_1x+c_2x^2+\\cdots +c_nx^n,$$\naunque también puede escribirse\n$$p(x) = c_0+c_1(x-x_0)+c_2(x-x_0)^2+\\cdots +c_n(x-x_0)^n.$$\nDe entre todos los polinomio de grado $n$, el que mejor aproxima a $f$ en entorno de $x_0$ será el que cumpla las $n+1$ condiciones siguientes:\n$p(x_0) = f(x_0)$, $p\u0026rsquo;(x_0) = f\u0026rsquo;(x_0)$, $p\u0026rsquo;\u0026rsquo;(x_0)=f\u0026rsquo;\u0026rsquo;(x_0)$, $\\cdots$ $p^{(n}(x_0)=f^{(n}(x_0)$. Las sucesivas derivadas de $p$ valen\n$$ \\begin{aligned} p(x) \u0026amp;= c_0+c_1(x-x_0)+c_2(x-x_0)^2+\\cdots +c_n(x-x_0)^n,\\newline p\u0026rsquo;(x)\u0026amp; = c_1+2c_2(x-x_0)+\\cdots +nc_n(x-x_0)^{n-1},\\newline p\u0026rsquo;\u0026rsquo;(x)\u0026amp; = 2c_2+\\cdots +n(n-1)c_n(x-x_0)^{n-2},\\newline \\vdots\\ \\newline p^{(n}(x)\u0026amp;= n(n-1)(n-2)\\cdots 1 c_n=n!c_n. \\end{aligned} $$\nImponiendo las condiciones anteriores se tiene\n$p(x_0) = c_0+c_1(x_0-x_0)+c_2(x_0-x_0)^2+\\cdots +c_n(x_0-x_0)^n=c_0=f(x_0),$ $p\u0026rsquo;(x_0) = c_1+2c_2(x_0-x_0)+\\cdots +nc_n(x_0-x_0)^{n-1}=c_1=f\u0026rsquo;(x_0),$ $p\u0026rsquo;\u0026rsquo;(x_0) = 2c_2+\\cdots +n(n-1)c_n(x_0-x_0)^{n-2}=2c_2=f\u0026rsquo;\u0026rsquo;(x_0)\\Rightarrow c_2=\\frac{f\u0026rsquo;\u0026rsquo;(x_0)}{2},$ $\\cdots$ $p^{(n}(x_0)=n!c_n=f^{(n}(x_0)=c_n=\\frac{f^{(n}(x_0)}{n!}$. Definición - Polinomio de Taylor de orden $n$ para $f$ en el punto $a$. Dada una función $f$, $n$ veces derivable en $x=x_0$, se define el polinomio de Taylor de orden $n$ para $f$ en $x_0$ como\n$$ \\begin{aligned} p_{f,x_0}^n(x)\u0026amp;=f(x_0)+f\u0026rsquo;(x_0)(x-x_0)+\\frac{f\u0026rsquo;\u0026rsquo;(x_0)}{2}(x-x_0)^2+\\cdots +\\frac{f^{(n}(x_0)}{n!}(x-x_0)^n = \\newline \u0026amp;=\\sum_{i=0}^{n}\\frac{f^{(i}(x_0)}{i!}(x-x_0)^i, \\end{aligned} $$\no bien, escribiendo $x=x_0+h$\n$$ \\begin{aligned} p_f^n(x_0+h) \u0026amp;= f(x_0)+f\u0026rsquo;(x_0)h+\\frac{f\u0026rsquo;\u0026rsquo;(x_0)}{2}h^2+\\cdots +\\frac{f^{(n}(x_0)}{n!}h^n =\\newline \u0026amp;= \\sum_{i=0}^{n}\\frac{f^{(i}(x_0)}{i!}h^i. \\end{aligned} $$\nEl polinomio de Taylor de orden $n$ para $f$ en $x_0$ es el polinomio de orden $n$ que mejor aproxima a $f$ alrededor de $x_0$, ya que es el único que cumple las $n+1$ condiciones anteriores. Ejemplo. Vamos a aproximar la función $f(x)=\\log x$ en un entorno del punto $1$ mediante un polinomio de grado $3$.\nLa ecuación del polinomio de Taylor de orden $3$ para $f$ en el punto $1$ es\n$$p_{f,1}^3(x)=f(1)+f\u0026rsquo;(1)(x-1)+\\frac{f\u0026rsquo;\u0026rsquo;(1)}{2}(x-1)^2+\\frac{f\u0026rsquo;\u0026rsquo;\u0026rsquo;(1)}{3!}(x-1)^3.$$\nCalculamos las tres primeras derivadas de $f$ en $1$:\n$$ \\begin{array}{lll} f(x)=\\log x \u0026amp; \\quad \u0026amp; f(1)=\\log 1 =0,\\newline f\u0026rsquo;(x)=1/x \u0026amp; \u0026amp; f\u0026rsquo;(1)=1/1=1,\\newline f\u0026rsquo;\u0026rsquo;(x)=-1/x^2 \u0026amp; \u0026amp; f\u0026rsquo;\u0026rsquo;(1)=-1/1^2=-1,\\newline f\u0026rsquo;\u0026rsquo;\u0026rsquo;(x)=2/x^3 \u0026amp; \u0026amp; f\u0026rsquo;\u0026rsquo;\u0026rsquo;(1)=2/1^3=2. \\end{array} $$\nSustituyendo en la ecuación del polinomio se tiene\n$$p_{f,1}^3(x)=0+1(x-1)+\\frac{-1}{2}(x-1)^2+\\frac{2}{3!}(x-1)^3= \\frac{2}{3}x^3-\\frac{3}{2}x^2+3x-\\frac{11}{6}.$$\nPolinomio de Maclaurin de orden $n$ La ecuación del polinomio de Taylor se simplifica cuando el punto en torno al cual queremos aproximar es el $0$.\nDefinición - Polinomio de Maclaurin de orden $n$ para $f$. Dada una función $f$, $n$ veces derivable en $0$, se define el polinomio de Maclaurin de orden $n$ para $f$ como\n$$ \\begin{aligned} p_{f,0}^n(x) \u0026amp;= f(0)+f\u0026rsquo;(0)x+\\frac{f\u0026rsquo;\u0026rsquo;(0)}{2}x^2+\\cdots +\\frac{f^{(n}(0)}{n!}x^n =\\newline \u0026amp;= \\sum_{i=0}^{n}\\frac{f^{(i}(0)}{i!}x^i. \\end{aligned} $$\nEjemplo. Vamos a aproximar la función $f(x)=\\operatorname{sen} x$ en un entorno del punto $0$ mediante un polinomio de grado $3$.\nLa ecuación del polinomio de Maclaurin de orden $3$ para $f$ es\n$$p_{f,0}^3(x)=f(0)+f\u0026rsquo;(0)x+\\frac{f\u0026rsquo;\u0026rsquo;(0)}{2}x^2+\\frac{f\u0026rsquo;\u0026rsquo;\u0026rsquo;(0)}{3!}x^3.$$\nCalculamos las tres primeras derivadas de $f$ en $0$:\n$$ \\begin{array}{lll} f(x)=\\operatorname{sen} x \u0026amp; \\quad \u0026amp; f(0)=\\operatorname{sen} 0 =0,\\newline f\u0026rsquo;(x)=\\cos x \u0026amp; \u0026amp; f\u0026rsquo;(0)=\\cos 0=1,\\newline f\u0026rsquo;\u0026rsquo;(x)=-\\operatorname{sen} x \u0026amp; \u0026amp; f\u0026rsquo;\u0026rsquo;(0)=-\\operatorname{sen} 0=0,\\newline f\u0026rsquo;\u0026rsquo;\u0026rsquo;(x)=-\\cos x \u0026amp; \u0026amp; f\u0026rsquo;\u0026rsquo;\u0026rsquo;(0)=-\\cos 0=-1. \\end{array} $$\nSustituyendo en la ecuación del polinomio obtenemos\n$$p_{f,0}^3(x)=0+1\\cdot x+\\frac{0}{2}x^2+\\frac{-1}{3!}x^3= x-\\frac{x^3}{6}.$$\nPolinomios de Maclaurin de funciones elementales $$\\renewcommand{\\arraystretch}{2.5} \\begin{array}{|c|c|} \\hline f(x) \u0026amp; p_{f,0}^n(x) \\newline \\hline\\hline \\operatorname{sen} x \u0026amp; \\displaystyle x-\\frac{x^3}{3!}+\\frac{x^5}{5!}-\\cdots +(-1)^k\\frac{x^{2k-1}}{(2k-1)!} \\mbox{ si $n=2k$ o $n=2k-1$}\\newline \\hline \\cos x \u0026amp; \\displaystyle 1-\\frac{x^2}{2!}+\\frac{x^4}{4!}-\\cdots +(-1)^k\\frac{x^{2k}}{(2k)!} \\mbox{ si $n=2k$ o $n=2k+1$}\\newline \\hline \\operatorname{arctg} x \u0026amp; \\displaystyle x-\\frac{x^3}{3}+\\frac{x^5}{5}-\\cdots +(-1)^k\\frac{x^{2k-1}}{(2k-1)} \\mbox{ si $n=2k$ o $n=2k-1$}\\newline \\hline e^x \u0026amp; \\displaystyle 1+x+\\frac{x^2}{2!}+\\frac{x^3}{3!}+\\cdots + \\frac{x^n}{n!}\\newline \\hline \\log(1+x) \u0026amp; \\displaystyle x-\\frac{x^2}{2}+\\frac{x^3}{3}-\\cdots +(-1)^{n-1}\\frac{x^n}{n}\\newline \\hline \\end{array}$$\nResto de Taylor Los polinomios de Taylor permiten calcular el valor aproximado de una función cerca de un valor $x_0$, pero siempre se comete un error en dicha aproximación.\nDefinición - Resto de Taylor. Si $f$ es una función para la que existe el su polinomio de Taylor de orden $n$ en $x_0$, $p_{f,x_0}^n$, entonces se define el resto de Taylor de orden $n$ para $f$ en $x_0$ como\n$$r_{f,x_0}^n(x)=f(x)-p_{f,x_0}^n(x).$$\nEl resto mide el error cometido al aproximar $f(x)$ mediante $p_{f,x_0}^n(x)$ y permite expresar la función $f$ como la suma de un polinomio de Taylor más su resto correspondiente:\n$$f(x)=p_{f,x_0}^n(x) + r_{f,x_0}^n(x).$$\nEsta expresión se conoce como fórmula de Taylor de orden $n$ para $f$ en $x_0$. Se pude demostrar, además, que\n$$\\lim_{h\\rightarrow 0}\\frac{r_{f,x_0}^n(x_0+h)}{h^n}=0,$$\nlo cual indica que el resto $r_{f,x_0}^n(x_0+h)$ es mucho menor que $h^n$.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631523540,"objectID":"df2ccd9f16b8acc1c8bccb5f9fd02f02","permalink":"/docencia/calculo/manual/derivadas-una-variable/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/derivadas-una-variable/","section":"docencia","summary":"El concepto de derivada Tasa de variación media Definición - Incremento. Dada una función $y=f(x)$, se llama incremento de $f$ en un intervalo $[a,b]$ a la diferencia entre el valor de $f$ en cada uno de los extremos del intervalo, y se nota","tags":["Derivada","Recta Tangente"],"title":"Cálculo diferencial en una variable","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Condicionales (if) if condición1:\nbloque código\nelif condición2:\nbloque código\n\u0026hellip;\nelse :\nbloque código\nEvalúa la expresión lógica condición1 y ejecuta el primer bloque de código si es True; si no, evalúa la siguientes condiciones hasta llegar a la primera que es True y ejecuta el bloque de código asociado. Si ninguna condición es True ejecuta el bloque de código después de else:.\nPueden aparecer varios bloques elif pero solo uno else al final.\nLos bloques de código deben estar indentados por 4 espacios.\nLa instrucción condicional permite evaluar el estado del programa y tomar decisiones sobre qué código ejecutar en función del mismo.\n\u0026gt;\u0026gt;\u0026gt; edad = 14 \u0026gt;\u0026gt;\u0026gt; if edad \u0026lt;= 18 : ... print('Menor') ... elif edad \u0026gt; 65: ... print('Jubilado') ... else: ... print('Activo') ... Menor \u0026gt;\u0026gt;\u0026gt; age = 20 \u0026gt;\u0026gt;\u0026gt; if edad \u0026lt;= 18 : ... print('Menor') ... elif edad \u0026gt; 65: ... print('Jubilado') ... else: ... print('Activo') ... Activo ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1616021803,"objectID":"d5cba1b3c3213089063c1d6d3c7e4e69","permalink":"/docencia/python/manual/condicionales/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/condicionales/","section":"docencia","summary":"Condicionales (if) if condición1:\nbloque código\nelif condición2:\nbloque código\n\u0026hellip;\nelse :\nbloque código\nEvalúa la expresión lógica condición1 y ejecuta el primer bloque de código si es True; si no, evalúa la siguientes condiciones hasta llegar a la primera que es True y ejecuta el bloque de código asociado.","tags":["Condicionales"],"title":"Condicionales","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Deshacer cambios Eliminar cambios del directorio de trabajo o volver a una versión anterior git checkout git checkout \u0026lt;commit\u0026gt; -- \u0026lt;file\u0026gt; actualiza el fichero \u0026lt;file\u0026gt; a la versión correspondiente al commit \u0026lt;commit\u0026gt;.\nSuele utilizarse para eliminar los cambios en un fichero que no han sido guardados aún en la zona de intercambio temporal, mediante el comando git checkout HEAD -- \u0026lt;file\u0026gt;. Eliminar cambios de la zona de intercambio temporal git reset git reset \u0026lt;fichero\u0026gt; elimina los cambios del fichero \u0026lt;fichero\u0026gt; de la zona de intercambio temporal, pero preserva los cambios en el directorio de trabajo. Para eliminar por completo los cambios de un fichero que han sido guardados en la zona de intercambio temporal hay que aplicar este comando y después git checkout HEAD -- \u0026lt;fichero\u0026gt;.\nEliminar cambios de un commit git reset git reset --hard \u0026lt;commit\u0026gt; elimina todos los cambios desde el commit \u0026lt;commit\u0026gt; y actualiza el HEAD este commit.\nSuele usarse para eliminar todos los cambios en el directorio de trabajo desde el último commit mediante el comando git reset --hard HEAD.\nUsar con cuidado este comando pues los cambios posteriores al commit indicado se pierden por completo. git reset \u0026lt;commit\u0026gt; actualiza el HEAD al commit \u0026lt;commit\u0026gt;, es decir, elimina todos los commits posteriores a este commit, pero no elimina los cambios del directorio de trabajo. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"71fb71936da1a058c98293e12360af80","permalink":"/docencia/git/manual/deshacer-cambios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/deshacer-cambios/","section":"docencia","summary":"Deshacer cambios Eliminar cambios del directorio de trabajo o volver a una versión anterior git checkout git checkout \u0026lt;commit\u0026gt; -- \u0026lt;file\u0026gt; actualiza el fichero \u0026lt;file\u0026gt; a la versión correspondiente al commit \u0026lt;commit\u0026gt;.","tags":null,"title":"Deshacer cambios","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista y la muestre por pantalla.\nSolución\nEjercicio 2 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista y la muestre por pantalla el mensaje Yo estudio \u0026lt;asignatura\u0026gt;, donde \u0026lt;asignatura\u0026gt; es cada una de las asignaturas de la lista.\nSolución\nEjercicio 3 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista, pregunte al usuario la nota que ha sacado en cada asignatura, y después las muestre por pantalla con el mensaje En \u0026lt;asignatura\u0026gt; has sacado \u0026lt;nota\u0026gt; donde \u0026lt;asignatura\u0026gt; es cada una des las asignaturas de la lista y \u0026lt;nota\u0026gt; cada una de las correspondientes notas introducidas por el usuario.\nSolución\nEjercicio 4 Escribir un programa que pregunte al usuario los números ganadores de la lotería primitiva, los almacene en una lista y los muestre por pantalla ordenados de menor a mayor.\nSolución\nEjercicio 5 Escribir un programa que almacene en una lista los números del 1 al 10 y los muestre por pantalla en orden inverso separados por comas.\nSolución\nEjercicio 6 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista, pregunte al usuario la nota que ha sacado en cada asignatura y elimine de la lista las asignaturas aprobadas. Al final el programa debe mostrar por pantalla las asignaturas que el usuario tiene que repetir.\nSolución\nEjercicio 7 Escribir un programa que almacene el abecedario en una lista, elimine de la lista las letras que ocupen posiciones múltiplos de 3, y muestre por pantalla la lista resultante.\nSolución\nEjercicio 8 Escribir un programa que pida al usuario una palabra y muestre por pantalla si es un palíndromo.\nSolución\nEjercicio 9 Escribir un programa que pida al usuario una palabra y muestre por pantalla el número de veces que contiene cada vocal.\nSolución\nEjercicio 10 Escribir un programa que almacene en una lista los siguientes precios, 50, 75, 46, 22, 80, 65, 8, y muestre por pantalla el menor y el mayor de los precios.\nSolución\nEjercicio 11 Escribir un programa que almacene los vectores (1,2,3) y (-1,0,2) en dos listas y muestre por pantalla su producto escalar.\nSolución\nEjercicio 12 Escribir un programa que almacene las matrices $$ A = \\left( \\begin{array}{rrr} 1 \u0026amp; 2 \u0026amp; 3\\newline 4 \u0026amp; 5 \u0026amp; 6 \\end{array} \\right) \\quad y \\quad B = \\left( \\begin{array}{rr} -1 \u0026amp; 0\\newline 0 \u0026amp; 1\\newline 1 \u0026amp; 1 \\end{array} \\right) $$\nen una lista y muestre por pantalla su producto.\nNota: Para representar matrices mediante listas usar listas anidadas, representando cada vector fila en una lista.\nSolución\nEjercicio 13 Escribir un programa que pregunte por una muestra de números, separados por comas, los guarde en una lista y muestre por pantalla su media y desviación típica.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1646900374,"objectID":"3550f02cdad88d554c881d13aacfbe25","permalink":"/docencia/python/ejercicios/listas-tuplas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/listas-tuplas/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista y la muestre por pantalla.\nSolución\nEjercicio 2 Escribir un programa que almacene las asignaturas de un curso (por ejemplo Matemáticas, Física, Química, Historia y Lengua) en una lista y la muestre por pantalla el mensaje Yo estudio \u0026lt;asignatura\u0026gt;, donde \u0026lt;asignatura\u0026gt; es cada una de las asignaturas de la lista.","tags":["Ejercicios","Listas","Tuplas"],"title":"Ejercicios de Listas y Tuplas","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Farmacia\nUn grupo de 50 alumnos tiene 3 asignaturas A, B y C en un curso. El número de aprobados en la convocatoria ordinaria y extraordinaria aparece en la siguiente tabla (se supone que quien ha aprobado en la convocatoria ordinaria no se presenta a la extraordinaria):\n|Asignatura | Ordinaria | Extraordinaria| |A | 25 | 12 | |B | 14 | 10 | |C | 32 | 8|\nSuponiendo que el aprobado en cada asignatura es independiente de las demás, se pide:\n¿Cuál es la probabilidad de aprobar alguna asignatura en la convocatoria ordinaria? ¿Cuál es la probabilidad de aprobar las tres asignaturas? Si un alumno ha aprobado la asignatura A, ¿cuál es la probabilidad de que hubiese aprobado en la convocatoria ordinaria? SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"27b19c7d0024b4d811be174b79e85e33","permalink":"/docencia/estadistica/ejercicios/probabilidad/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/probabilidad/","section":"docencia","summary":"Ejercicio 1 Titulación: Farmacia\nUn grupo de 50 alumnos tiene 3 asignaturas A, B y C en un curso. El número de aprobados en la convocatoria ordinaria y extraordinaria aparece en la siguiente tabla (se supone que quien ha aprobado en la convocatoria ordinaria no se presenta a la extraordinaria):","tags":["Probabilidad"],"title":"Ejercicios de Probabilidad","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre historial de cambios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:\n\u0026gt; git clone https://github.com/asalber/libro-git.git \u0026gt; cd libro-git \u0026gt; git reset --hard 48ed8 \u0026gt; git remote remove origin Ejercicio 1 Crear una nueva rama bibliografia y mostrar las ramas del repositorio.\nSolución \u0026gt; git branch bibliografia \u0026gt; git branch -av Resolución Ejercicio 2 Crear el fichero capitulos/capitulo4.txt y añadir el texto siguiente En este capítulo veremos cómo usar GitHub para alojar repositorios en remoto.\nAñadir los cambios a la zona de intercambio temporal. Hacer un commit con el mensaje \u0026ldquo;Añadido capítulo 4.\u0026rdquo; Mostrar la historia del repositorio incluyendo todas las ramas. Solución \u0026gt; cat \u0026gt; capitulos/capitulo4.txt En este capítulo veremos cómo usar GitHub para alojar repositorios en remoto. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido capítulo 4.\u0026quot; \u0026gt; git log --graph --all --oneline Resolución Ejercicio 3 Cambiar a la rama bibliografia. Crear el fichero bibliografia.txt y añadir la siguiente referencia Chacon, S. and Straub, B. Pro Git. Apress. Añadir los cambios a la zona de intercambio temporal. Hacer un commit con el mensaje \u0026ldquo;Añadida primera referencia bibliográfica.\u0026rdquo; Mostrar la historia del repositorio incluyendo todas las ramas. Solución \u0026gt; git checkout bibliografia \u0026gt; cat \u0026gt; bibliografia.txt - Chacon, S. and Straub, B. Pro Git. Apress. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadida primera referencia bibliográfica.\u0026quot; \u0026gt; git log --graph --all --oneline Resolución Ejercicio 4 Fusionar la rama bibliografia con la rama master. Mostrar la historia del repositorio incluyendo todas las ramas. Eliminar la rama bibliografia. Mostrar de nuevo la historia del repositorio incluyendo todas las ramas. Solución \u0026gt; git checkout master \u0026gt; git merge bibliografia \u0026gt; git log --graph --all --oneline \u0026gt; git branch -d bibliografia \u0026gt; git log --graph --all --oneline Resolución Ejercicio 5 Crear la rama bibliografia. Cambiar a la rama bibliografia. Cambiar el fichero bibliografia.txt para que contenga las siguientes referencias: Scott Chacon and Ben Straub. Pro Git. Apress. Ryan Hodson. Ry\u0026rsquo;s Git Tutorial. Smashwords (2014) Añadir los cambios a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Añadida nueva referencia bibliográfica.\u0026rdquo; Cambiar a la rama master. Cambiar el fichero bibliografia.txt para que contenga las siguientes referencias: Chacon, S. and Straub, B. Pro Git. Apress. Loeliger, J. and McCullough, M. Version control with Git. O\u0026rsquo;Reilly. Añadir los cambios a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Añadida nueva referencia bibliográfica.\u0026rdquo; Fusionar la rama bibliografia con la rama master. Resolver el conflicto dejando el fichero bibliografia.txt con las referencias: Chacon, S. and Straub, B. Pro Git. Apress. Loeliger, J. and McCullough, M. Version control with Git. O\u0026rsquo;Reilly. Hodson, R. Ry\u0026rsquo;s Git Tutorial. Smashwords (2014) Añadir los cambios a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Resuelto conflicto de bibliografía.\u0026rdquo; Mostrar la historia del repositorio incluyendo todas las ramas. Solución \u0026gt; git branch bibliografia \u0026gt; git checkout bibliografia \u0026gt; cat \u0026gt; bibliografia.txt - Scott Chacon and Ben Straub. Pro Git. Apress. - Ryan Hodson. Ry's Git Tutorial. Smashwords (2014) Ctrl+D \u0026gt; git commit -a -m \u0026quot;Añadida nueva referencia bibliográfica.\u0026quot; \u0026gt; git checkout master \u0026gt; cat \u0026gt; bibliografia.txt - Chacon, S. and Straub, B. Pro Git. Apress. - Loeliger, J. and McCullough, M. Version control with Git. O'Reilly. Ctrl+D \u0026gt; git commit -a -m \u0026quot;Añadida nueva referencia bibliográfica.\u0026quot; \u0026gt; git merge bibliografia \u0026gt; git nano bibliografia # Hacer los cambios indicados en el fichero \u0026gt; git commit -a -m \u0026quot;Solucionado conflicto bibliografía.\u0026quot; \u0026gt; git log --graph --all --oneline Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"902b64123d03a98beb2ce49f12cfc93f","permalink":"/docencia/git/ejercicios/ramas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/ramas/","section":"docencia","summary":"Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre historial de cambios o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:","tags":["Ejercicios"],"title":"Ejercicios de gestión de ramas","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Bucles condicionales (while) while condición:\nbloque código\nRepite la ejecución del bloque de código mientras la expresión lógica condición sea cierta.\nSe puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break.\nEl bloque de código debe estar indentado por 4 espacios.\n\u0026gt;\u0026gt;\u0026gt; # Pregunta al usuario por un número hasta que introduce 0. \u0026gt;\u0026gt;\u0026gt; num = None \u0026gt;\u0026gt;\u0026gt; while num != 0: ... num = int(input('Introduce un número: ')) ... Introduce un número: 2 Introduce un número: 1 Introduce un número: 0 \u0026gt;\u0026gt;\u0026gt; Alternativa:\n\u0026gt;\u0026gt;\u0026gt; # Pregunta al usuario por un número hasta que introduce 0. \u0026gt;\u0026gt;\u0026gt; while True: ... num = int(input('Introduce un número: ')) ... if num == 0: ... break ... Introduce un número: 2 Introduce un número: 1 Introduce un número: 0 \u0026gt;\u0026gt;\u0026gt; Bucles iterativos (for) for i in secuencia:\nbloque código\nRepite la ejecución del bloque de código para cada elemento de la secuencia secuencia, asignado dicho elemento a i en cada repetición.\nSe puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break o saltar la ejecución para un determinado elemento de la secuencia con la instrucción continue.\nEl bloque de código debe estar indentado por 4 espacios.\nSe utiliza fundamentalmente para recorrer colecciones de objetos como cadenas, listas, tuplas o diccionarios.\nA menudo se usan con la instrucción range:\nrange(fin) : Genera una secuencia de números enteros desde 0 hasta fin-1. range(inicio, fin, salto) : Genera una secuencia de números enteros desde inicio hasta fin-1 con un incremento de salto. \u0026gt;\u0026gt;\u0026gt; palabra = 'Python' \u0026gt;\u0026gt;\u0026gt; for letra in palabra: ... print(letra) ... P y t h o n \u0026gt;\u0026gt;\u0026gt; for i in range(1, 10, 2): ... print(i, end=\u0026quot;, \u0026quot;) ... 1, 3, 5, 7, 9, \u0026gt;\u0026gt;\u0026gt; ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1616021803,"objectID":"fe396b4d9364285e2f839481809acb20","permalink":"/docencia/python/manual/bucles/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/bucles/","section":"docencia","summary":"Bucles condicionales (while) while condición:\nbloque código\nRepite la ejecución del bloque de código mientras la expresión lógica condición sea cierta.\nSe puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break.","tags":["Bucles"],"title":"Bucles","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable"],"content":"Primitiva de una función Definición - Primitiva de una función. Se dice que la función $F(X)$ es una función primitiva de $f(x)$ si se verifica que $F\u0026rsquo;(x)=f(x)$ $\\forall x \\in \\textrm{Dom}(f)$. Ejemplo. La función $F(x)=x^2$ es una primitiva de la función $f(x)=2x$ ya que $F\u0026rsquo;(x)=2x$ para todo $\\mathbb{R}$.\nEl cálculo de primitivas puede verse con un proceso inverso al cálculo de derivadas, y es por eso también se suele llamar antiderivada a la primitiva de una función.\nIntegral indefinida de una función Si $F(x)$ es una función primitiva de $f(x)$ también lo será toda función de la forma $F(x)+C$, $\\forall C \\in \\mathbb{R}$, de manera que si una función tiene primitiva, tiene infinitas primitivas que se obtienen añadiendo una constante a cualquiera de ellas.\nDefinición - Integral indefinida. Se llama función integral indefinida de la función $f$ al conjunto de todas sus funciones primitivas y se representa como\n$$\\int{f(x)}\\,dx=F(x)+C$$\nsiendo $F(x)$ una función primitiva de $f(x)$ y $C$ una constante arbitraria.\nEjemplo. La integral indefinida de $f(x)=2x$ es\n$$\\int 2x\\, dx = x^2+C.$$\nInterpretación de la integral En temas anteriores se vio que la derivada de una función es la tasa de variación instantánea, de manera que si conocemos la tasa de variación instantánea de una función en cada instante, podemos averiguar la variación real de la función.\nEjemplo. ¿Cuál sera el espacio recorrido por un objeto en caída libre?\nCuando soltamos cualquier objeto desde una altura, la única fuerza que actúa sobre el es la gravedad, con una aceleración aproximada de $9.8$ m/s$^2$, esto quiere decir que la velocidad varía de forma constante y por tanto la velocidad del objeto en cada instante $t$ sera:\n$$v(t) = 9.8t \\mbox{ m/s}.$$\nPuesto que la velocidad en cada instante es la tasa de variación instantánea del espacio recorrido por el objeto, su primitiva nos dará el espacio recorrido por el objeto en cada instante:\n$$e(t) = \\int 9.8t\\, dt = 9,8\\frac{t^2}{2}.$$\nAsí, por ejemplo, a los 2 segundos, el espacio recorrido será $e(2) = 9.8\\frac{2^2}{2} = 19.6$ m.\nLinealidad de la integral Dadas dos funciones $f$ y $g$ que admiten primitiva, y una constante $k \\in \\mathbb{R}$ se verifica que\n$\\int{(f(x)+g(x))}\\,dx=\\int{f(x)}\\,dx+\\int{g(x)}\\,dx$, $\\int{kf(x)}\\,dx=k\\int{f(x)}\\,dx$. Integrales inmediatas $\\int a\\,dx=ax+C$, con $a$ constante. $\\int x^n\\,dx=\\dfrac{x^{n+1}}{n+1}+C$ si $n\\neq -1$. $\\int \\dfrac{1}{x}\\, dx=\\ln\\lvert x\\rvert+C$. $\\int e^x\\,dx=e^x+C$. $\\int a^x\\,dx=\\dfrac{a^x}{\\ln a}+C$. $\\int \\operatorname{sen} x\\, dx=-\\cos x+C$. $\\int \\cos x\\, dx=\\operatorname{sen} x+C$. $\\int \\operatorname{tg} x\\, dx=\\ln\\lvert\\operatorname{sec} x\\rvert+C$. $\\int \\operatorname{sec} x\\, dx = \\ln\\lvert\\operatorname{sec} x + \\operatorname{tg} x\\rvert+C$. $\\int \\operatorname{cosec} x\\, dx= \\ln\\lvert\\operatorname{cosec} x-\\operatorname{cotg} x\\rvert+C$. $\\int \\operatorname{cotg} x\\, dx= \\ln\\lvert\\operatorname{sen} x\\rvert+C$. $\\int \\operatorname{sec}^2 x\\, dx= \\operatorname{tg} x+ C$. $\\int \\operatorname{cosec}^2 x\\, dx= -\\operatorname{cotg} x+ C$. $\\int \\operatorname{sec} x \\operatorname{tg} x\\, dx= \\operatorname{sec} x+ C$. $\\int \\operatorname{cosec} x \\operatorname{cotg} x\\, dx = -\\operatorname{cosec} x +C$. $\\int \\dfrac{dx}{\\sqrt{a^2-x^2}}=\\operatorname{arcsen}\\dfrac{x}{a}+C$. $\\int \\dfrac{dx}{a^2+x^2}=\\dfrac{1}{a}\\operatorname{arctg}\\dfrac{x}{a}+C$. $\\int \\dfrac{dx}{x\\sqrt{x^2-a^2}}=\\dfrac{1}{a}\\operatorname{sec}^{-1}\\dfrac{x}{a}+C$. $\\int \\dfrac{dx}{a^2-x^2}=\\dfrac{1}{2a}\\ln\\lvert\\dfrac{x+a}{x-a}\\rvert+C$. Técnicas de integración Desgraciadamente, y a diferencia del cálculo de derivadas, no existe un procedimiento infalible que permita calcular la primitiva de una función siempre que exista. Existen no obstante, diferentes técnicas para integrar algunos tipos de funciones. Las técnicas más habituales son:\nIntegración por partes Integración por reducción Integración por cambio de variable Integración de funciones racionales Integración de funciones trigonométricas Integración por partes Teorema - Integración por partes. Dadas $f$ y $g$, dos funciones derivables de $x$,\n$$\\int{f\u0026rsquo;(x)g(x)}\\,dx=f(x)g(x)-\\int{g\u0026rsquo;(x)f(x)}\\,dx,$$\no con notación diferencial, si $u$ y $v$ son funciones derivables de $x$\n$$\\int{u}\\,dv=uv-\\int{v}\\,du.$$\nDemostración De la regla de la derivada del producto se tiene\n$$ (uv)\u0026rsquo; = u\u0026rsquo;v + uv\u0026rsquo; $$\ny calculando la integral a ambos lados se llega a\n$$ \\begin{gathered} \\int (uv)\u0026rsquo; \\, dx = \\int u\u0026rsquo;v \\, dx + \\int uv\u0026rsquo;\\, dx \\Rightarrow\\newline uv = \\int v\\,du + \\int u\\, dv \\Rightarrow\\newline \\int{u}\\,dv=uv-\\int{v}\\,du. \\end{gathered} $$\nAl emplear el método de integración por partes se debe realizar la elección de $u$ y $dv$ de tal forma que las integrales que haya que realizar sean lo más sencillas posibles.\nEjemplo. Para integrar $\\int{x \\operatorname{sen} x}\\,dx$ se deberá elegir $u=x$ y $dv=\\operatorname{sen} x\\, dx$, con lo que $du=dx$ y $v=-\\cos x$, resultando\n$$\\int{x \\operatorname{sen} x}\\,dx=-x\\cos x-\\int (-\\cos x)\\,dx = -x\\cos x +\\operatorname{sen} x.$$\nSi hubiésemos elegido $u=\\operatorname{sen} x$ y $dv=x\\,dx$, la cosa se complica.\nIntegración por reducción Las fórmulas de reducción permiten simplificar el cálculo cuando hay que aplicar la integración por partes varias veces consecutivas.\nSi se tiene que calcular una integral indefinida $I_n$ que depende de un número natural $n$, las fórmulas de reducción nos permitirán expresar $I_{n}$ en función de $I_{n-1}$, es decir se obtendrá una relación recurrente del tipo\n$$I_n=f(I_{n-1},x,n)$$\ncon lo que calculando una integral se pueden obtener fácilmente las demás.\nEjemplo. Si se desea calcular $I_{n}=\\int{x^{n}e^{x}}\\,dx$, aplicando la integración por partes se debe elegir $u=x^{n}$ y $dv=e^{x}\\,dx$, con lo que $du=nx^{n-1}\\,dx$ y $v=e^{x}$, obteniéndose\n$$\\ I_{n}=\\int{x^{n}e^{x}}\\,dx=x^{n}e^{x}-n\\int{x^{n-1}e^{x}}\\,dx=x^{n}e^{x}-nI_{n-1}.$$\nAsí, por ejemplo, para $n=3$ se tiene\n$$ \\begin{aligned} \\int x^3 e^x\\, dx \u0026amp;= I_3 = x^3e^x-3I_2 = x^3e^x-3(x^2e^x-2I_1) = x^3e^x-3(x^2e^x-(xe^x-I_0) =\\newline \u0026amp;= x^3e^x-3(x^2e^x-(xe^x-e^x) = e^x(x^3-3x^2+6x-6). \\end{aligned} $$\nIntegración por cambio de variable La regla de la cadena establece que la derivada de una función compuesta $f(g(x))$ es $$f(g(x))\u0026rsquo; = f\u0026rsquo;(g(x))g\u0026rsquo;(x),$$ de manera que es posible integrar esta última expresión haciendo un cambio de variable $u=g(x)$ de manera que $du=g\u0026rsquo;(x)dx$:\n$$\\int f\u0026rsquo;(g(x))g\u0026rsquo;(x)\\, dx = \\int f\u0026rsquo;(u)\\, du = f(u)+C = f(g(x))+C.$$\nEjemplo. Para calcular la integral $\\int{\\dfrac{1}{x\\log x}}\\, dx$ puede hacerse el cambio de variable $u=\\log x$ con lo que $du=\\frac{1}{x}dx$ y sustituyendo queda\n$$\\int \\frac{dx}{x\\log x}=\\int \\frac{1}{\\log x}\\frac{1}{x}\\,dx = \\int \\frac{1}{u}\\,du = \\log |u|+ C,$$\ny deshaciendo el cambio tenemos\n$$\\int \\frac{1}{x\\log x}\\,dx= \\log |\\log x| + C.$$\nIntegración de funciones racionales Descomposición en fracciones simples Toda función racional se puede escribir como suma de un polinomio (que tiene primitiva inmediata) más una función racional propia, es decir, una función racional en la que el grado del numerador sea menor que el grado del denominador. A su vez, toda función racional propia puede expresarse como suma de fracciones simples de los tipos siguientes:\n$$\\begin{array}{cl} \\dfrac{A}{(x-a)}\u0026amp; \\textrm{: con raíces reales simples del denominador.}\\newline \\dfrac{A}{(x-a)^{n}}\u0026amp; \\textrm{: con raíces reales múltiples del denominador.}\\newline \\dfrac{Ax+B}{x^2+cx+d}\u0026amp; \\textrm{: con raíces complejas simples del denominador.}\\newline \\dfrac{Ax+B}{(x^2+cx+d)^n} \u0026amp; \\textrm{: con raíces complejas múltiples del denominador.} \\end{array}$$\ncon $n\u0026gt;1$.\nPrimitivas de fracciones simples Usando la linealidad de la integral, basta calcular la primitiva de cada una de estas fracciones simples para calcular la primitiva de la función racional:\n$$ \\begin{aligned} \\int \\frac{A}{x-a}\\,dx \u0026amp;= A\\log|x-a|+C,\\newline \\int \\frac{A}{(x-a)^n}\\,dx \u0026amp;= \\frac{-A}{(n-1)(x-a)^{n-1}}+C \\textrm{ si $n\\neq 1$}.\\newline \\int \\frac{Ax+B}{x^2+cx+d} \u0026amp;= \\frac{A}{2}\\log|x^2+cx+d|+\\frac{2B-Ac}{\\sqrt{4d-c^2}}\\operatorname{arctg} \\frac{2x+c}{\\sqrt{4d-c^2}}+C. \\end{aligned} $$\nEjemplo - Raíces reales. Consideremos la función $f(x)=\\dfrac{x^2+3x-5}{x^3-3x+2}$. Su denominador se puede factorizar como $x^3-3x+2=(x-1)^2(x+2)$ por lo que tiene una raíz simple -2 y una raíz múltiple 1.\nLa descomposición en fracciones simples es:\n$$ \\begin{aligned} \\frac{x^2+3x-5}{x^3-3x+2}\u0026amp;=\\frac{A}{x-1}+\\frac{B}{(x-1)^2}+\\frac{C}{x+2} = \\newline \u0026amp;= \\frac{A(x-1)(x+2)+ B(x+2)+C(x-1)^2}{(x-1)^2(x+2)} = \\newline \u0026amp;= \\frac{(A+C)x^2+(A+B-2C)x+(-2A+2B+C)}{(x-1)^2(x+2)} \\end{aligned} $$\ne igualando los numeradores tenemos $A=16/9$, $B=-1/3$ y $C=-7/9$, de modo que\n$$\\frac{x^2+3x-5}{x^3-3x+2}= \\frac{16/9}{x-1}+\\frac{-1/3}{(x-1)^2}+\\frac{-7/9}{x+2}.$$\nFinalmente, integrando tenemos\n$$ \\begin{aligned} \\int \\frac{x^2+3x-5}{x^3-3x+2}\\, dx \u0026amp;= \\int \\frac{16/9}{x-1}\\,dx+\\int \\frac{-1/3}{(x-1)^2}\\,dx+\\int \\frac{-7/9}{x+2}\\,dx = \\newline \u0026amp;= \\frac{16}{9}\\int\\frac{1}{x-1}\\,dx-\\frac{1}{3}\\int(x-1)^{-2}\\,dx- \\frac{7}{9}\\int \\frac{1}{x+2}\\,dx = \\newline \u0026amp;= \\frac{16}{9}\\ln|x-1|+\\frac{1}{3(x-1)}-\\frac{7}{9}\\ln|x+2|+C. \\end{aligned} $$\nEjemplo - Raíces imaginarias. Consideremos la función $f(x)=\\dfrac{x+1}{x^2-4x+8}$.\nEn este caso el denominador no tiene raíces reales, pero puede escribirse de la forma $$x^2-4x+8 = (x-2)^2+4$$ Integrando, tenemos\n$$ \\begin{aligned} \\int \\dfrac{x+1}{x^2-4x+8}\\, dx \u0026amp;= \\int \\dfrac{x-2+3}{(x-2)^2+4}\\,dx = \\newline \u0026amp;= \\int \\dfrac{x-2}{(x-2)^2+4}\\,dx + \\int \\dfrac{3}{(x-2)^2+4}\\,dx = \\newline \u0026amp;= \\frac{1}{2}\\ln|(x-2)^2+4| + \\dfrac{3}{2}\\operatorname{arctg}\\left(\\frac{x-2}{2}\\right)+C. \\end{aligned} $$\nIntegración de funciones trigonométricas Función $\\sin^n x\\cos^m x$ con $n$ o $m$ impares Si $f(x)=\\sin^n x\\cos^m x$ con $n$ o $m$ impares, entonces para integrar esta función se hace el cambio $\\operatorname{sen} x = t$ o $\\cos x =t$. Ejemplo.\n$$\\int \\operatorname{sen}^2 x\\cos^3 x\\, dx = \\int \\operatorname{sen}^2 x\\cos^2 x\\cos x\\, dx = \\int \\operatorname{sen}^2 x(1-\\operatorname{sen}^2 x)\\cos x\\, dx,$$\ny haciendo el cambio $t=\\operatorname{sen} x$, de modo que $dt = \\cos x dx$, se tiene\n$$\\int \\operatorname{sen}^2 x(1-\\operatorname{sen}^2 x)\\cos x\\, dx = \\int t^2(1-t^2)\\, dt = \\int t^2-t^4\\, dt = \\frac{t^3}{3}-\\frac{t^5}{5}+C,$$\ny deshaciendo el cambio anterior se obtiene\n$$\\int \\operatorname{sen}^2 x\\cos^3 x\\, dx = \\frac{\\operatorname{sen}^3 x}{3}-\\frac{\\sin^5 x}{5}+C.$$\nFunción $\\sin^n x\\cos^m x$ con $n$ y $m$ pares Si $f(x)=\\operatorname{sen}^n x\\cos^m x$ con $n$ y $m$ pares, entonces se suelen utilizar las siguientes igualdades para facilitar el cálculo de la integral:\n$$ \\begin{aligned} \\operatorname{sen}^2 x \u0026amp;= \\frac{1}{2}(1-\\cos 2x)\\newline \\cos^2 x \u0026amp;= \\frac{1}{2}(1+\\cos 2x)\\newline \\operatorname{sen} x\\cos x \u0026amp;= \\frac{1}{2}\\operatorname{sen} 2x \\end{aligned} $$\nEjemplo.\n$$ \\begin{aligned} \\int \\operatorname{sen}^2 x\\cos^4 x\\, dx \u0026amp;= \\int (\\operatorname{sen} x\\cos x)^2\\cos^2 x\\, dx = \\int \\left(\\frac{1}{2}\\operatorname{sen} 2x\\right)^2\\frac{1}{2}(1+\\cos 2x)\\,dx =\\newline \u0026amp;= \\frac{1}{8}\\int \\operatorname{sen}^2 2x\\,dx+\\frac{1}{8}\\int \\sin^2 2x \\cos 2x\\,dx, \\end{aligned} $$\nsiendo la primera integral es de este mismo tipo y la segunda del anterior\n$$\\int \\operatorname{sen}^2 x\\cos^4 x\\, dx = \\frac{1}{32}x-\\frac{1}{32}\\operatorname{sen} 2x)+\\frac{1}{24}\\operatorname{sen}^3 2x.$$\nProductos de senos y cosenos Las igualdades\n$$ \\begin{aligned} \\operatorname{sen} x\\cos y \u0026amp;= \\frac{1}{2}(\\operatorname{sen}(x-y)+\\operatorname{sen}(x+y))\\newline \\operatorname{sen} x\\operatorname{sen} y \u0026amp;= \\frac{1}{2}(\\cos(x-y)-\\cos(x+y))\\newline \\cos x\\cos y \u0026amp;= \\frac{1}{2}(\\cos(x-y)+\\cos(x+y)) \\end{aligned} $$\ntransforman los productos en sumas, simplificando su integración.\nEjemplo.\n$$ \\begin{aligned} \\int \\operatorname{sen} x\\cos 2x\\, dx \u0026amp;= \\int \\frac{1}{2}(\\operatorname{sen}(x-2x)+\\operatorname{sen}(x+2x))\\,dx = \\newline \u0026amp;= \\frac{1}{2}\\int \\operatorname{sen} (-x)\\,dx +\\frac{1}{2}\\int \\operatorname{sen} 3x\\,dx = \\newline \u0026amp;= \\frac{1}{2}\\cos(-x)- \\frac{1}{6}\\cos 3x +C. \\end{aligned} $$\nFunciones racionales de senos y cosenos Si $f(x,y)$ es una función racional entonces la función $f(\\operatorname{sen} x,\\cos x)$ puede convertirse en una función racional en $t$ mediante los cambios\n$$\\operatorname{tg} \\frac{x}{2}=t \\quad \\operatorname{sen} x=\\frac{2t}{1+t^2} \\quad \\cos x = \\frac{1-t^2}{1+t^2} \\quad dx = \\frac{2}{1+t^2}dt.$$\nEjemplo.\n$$\\int \\frac{1}{\\operatorname{sen} x}\\,dx = \\int \\frac{1}{\\frac{2t}{1+t^2}}\\frac{2}{1+t^2}\\,dt = \\int \\frac{1}{t}\\,dt = \\log|t|+C = \\log|\\operatorname{tg}\\frac{x}{2}|+C.$$\nIntegral definida Definición - Integral definida. Sea $f(x)$ una función continua en el intervalo $[a, b]$. Si se divide este intervalo en $n$ subintervalos de igual amplitud $\\Delta x$ y se elige un punto cualquiera $x_i$ de cada subintervalo, la integral definida de $f$ desde $a$ hasta $b$ se define como el límite\n$$\\int_a^b f(x)\\,dx = \\lim_{n\\rightarrow \\infty}\\sum_{i=1}^n f(x_i)\\Delta x.$$\nTeorema - Primer teorema fundamental de Cálculo. Si $f(x)$ es una función continua en el intervalo $[a,b]$ y $F(x)$ es la primitiva de $f$ en $[a,b]$, entonces\n$$\\int_a^b f(x)\\,dx = F(b)-F(a)$$\nEjemplo. Dada la función $f(x)=x^2$, se tiene\n$$\\int_1^2 x^2\\,dx = \\left[\\frac{x^3}{3}\\right]_1^2 = \\frac{2^3}{3}-\\frac{1^3}{3} = \\frac{7}{3}.$$\nPropiedades de la integral definida Dadas dos funciones $f$ y $g$ integrables en $[a,b]$ y $k \\in \\mathbb{R}$ se cumplen las siguientes propiedades\n$\\int_a^b(f(x)+g(x))\\,dx=\\int_a^bf(x)\\,dx+\\int_a^bg(x)\\,dx$ (linealidad) $\\int_a^b{kf(x)}\\,dx=k\\int_a^b{f(x)}\\,dx$ (linealidad) $\\int_a^b{f(x)\\,dx} \\leq \\int_a^b{g(x)\\,dx}$ si $f(x)\\leq g(x)\\ \\forall x \\in [a,b]$ (monotonía) $\\int_a^b{f(x)\\,dx} = \\int_a^c{f(x)\\,dx}+\\int_c^b{f(x)\\,dx}$ para cualquier $c\\in(a,b)$ (aditividad) $\\int_a^b f(x)\\,dx = -\\int_b^a f(x)\\,dx$ Cálculo de áreas Área delimitada por una función positiva y el eje de abscisas Si $f$ es una función integrable en un intervalo $[a,b]$ y $f(x)\\geq 0\\ \\forall x\\in[a,b]$, entonces la integral definida\n$$\\int_a^b f(x)\\,dx$$\nmide le área que queda entre la el gráfico de la función $f$ y el eje de abscisas en el intervalo $[a,b]$.\nÁrea delimitada por una función negativa y el eje de abscisas Si $f$ es una función integrable en un intervalo $[a,b]$ y $f(x)\\leq 0\\ \\forall x\\in[a,b]$, entonces el área que queda entre el gráfico de la función $f$ y el eje de abscisas en el intervalo $[a,b]$ es\n$$-\\int_a^b f(x)\\,dx.$$\nÁrea delimitada por una función y el eje de abscisas En general, si $f(x)$ es una función integrable en el intervalo $[a,b]$, no importa el signo de $f$ en $[a,b]$, el area entre el gráfico de la función $f$ y el eje de abscisas en el intervalo $[a,b]$ es\n$$\\int_a^b \\vert f(x)\\vert\\,dx.$$\nÁrea delimitada por dos funciones Si $f$ y $g$ son dos funciones integrables en el intervalo $[a,b]$, entonces el área limitada por los gráficos de $f$ y $g$ en el intervalo $[a,b]$ es\n$$\\int_{a}^{b}{\\vert f(x)- g(x)\\vert\\,dx}.$$\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600986575,"objectID":"83b63bfc034b1d717427164d692c4a47","permalink":"/docencia/calculo/manual/integrales/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/integrales/","section":"docencia","summary":"Primitiva de una función Definición - Primitiva de una función. Se dice que la función $F(X)$ es una función primitiva de $f(x)$ si se verifica que $F\u0026rsquo;(x)=f(x)$ $\\forall x \\in \\textrm{Dom}(f)$.","tags":["Integral","Primitiva","Area"],"title":"Cálculo integral","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que guarde en una variable el diccionario {'Euro':'€', 'Dollar':'$', 'Yen':'¥'}, pregunte al usuario por una divisa y muestre su símbolo o un mensaje de aviso si la divisa no está en el diccionario.\nSolución\nEjercicio 2 Escribir un programa que pregunte al usuario su nombre, edad, dirección y teléfono y lo guarde en un diccionario. Después debe mostrar por pantalla el mensaje \u0026lt;nombre\u0026gt; tiene \u0026lt;edad\u0026gt; años, vive en \u0026lt;dirección\u0026gt; y su número de teléfono es \u0026lt;teléfono\u0026gt;.\nSolución\nEjercicio 3 Escribir un programa que guarde en un diccionario los precios de las frutas de la tabla, pregunte al usuario por una fruta, un número de kilos y muestre por pantalla el precio de ese número de kilos de fruta. Si la fruta no está en el diccionario debe mostrar un mensaje informando de ello.\nFruta Precio Plátano 1.35 Manzana 0.80 Pera 0.85 Naranja 0.70 Solución\nEjercicio 4 Escribir un programa que pregunte una fecha en formato dd/mm/aaaa y muestre por pantalla la misma fecha en formato dd de \u0026lt;mes\u0026gt; de aaaa donde \u0026lt;mes\u0026gt; es el nombre del mes.\nSolución\nEjercicio 5 Escribir un programa que almacene el diccionario con los créditos de las asignaturas de un curso {'Matemáticas': 6, 'Física': 4, 'Química': 5} y después muestre por pantalla los créditos de cada asignatura en el formato \u0026lt;asignatura\u0026gt; tiene \u0026lt;créditos\u0026gt; créditos, donde \u0026lt;asignatura\u0026gt; es cada una de las asignaturas del curso, y \u0026lt;créditos\u0026gt; son sus créditos. Al final debe mostrar también el número total de créditos del curso.\nSolución\nEjercicio 6 Escribir un programa que cree un diccionario vacío y lo vaya llenado con información sobre una persona (por ejemplo nombre, edad, sexo, teléfono, correo electrónico, etc.) que se le pida al usuario. Cada vez que se añada un nuevo dato debe imprimirse el contenido del diccionario.\nSolución\nEjercicio 7 Escribir un programa que cree un diccionario simulando una cesta de la compra. El programa debe preguntar el artículo y su precio y añadir el par al diccionario, hasta que el usuario decida terminar. Después se debe mostrar por pantalla la lista de la compra y el coste total, con el siguiente formato\nLista de la compra Artículo 1 Precio Artículo 2 Precio Artículo 3 Precio \u0026hellip; \u0026hellip; Total Coste Solución\nEjercicio 8 Escribir un programa que cree un diccionario de traducción español-inglés. El usuario introducirá las palabras en español e inglés separadas por dos puntos, y cada par \u0026lt;palabra\u0026gt;:\u0026lt;traducción\u0026gt; separados por comas. El programa debe crear un diccionario con las palabras y sus traducciones. Después pedirá una frase en español y utilizará el diccionario para traducirla palabra a palabra. Si una palabra no está en el diccionario debe dejarla sin traducir.\nSolución\nEjercicio 9 Escribir un programa que gestione las facturas pendientes de cobro de una empresa. Las facturas se almacenarán en un diccionario donde la clave de cada factura será el número de factura y el valor el coste de la factura. El programa debe preguntar al usuario si quiere añadir una nueva factura, pagar una existente o terminar. Si desea añadir una nueva factura se preguntará por el número de factura y su coste y se añadirá al diccionario. Si se desea pagar una factura se preguntará por el número de factura y se eliminará del diccionario. Después de cada operación el programa debe mostrar por pantalla la cantidad cobrada hasta el momento y la cantidad pendiente de cobro.\nSolución\nEjercicio 10 Escribir un programa que permita gestionar la base de datos de clientes de una empresa. Los clientes se guardarán en un diccionario en el que la clave de cada cliente será su NIF, y el valor será otro diccionario con los datos del cliente (nombre, dirección, teléfono, correo, preferente), donde preferente tendrá el valor True si se trata de un cliente preferente. El programa debe preguntar al usuario por una opción del siguiente menú: (1) Añadir cliente, (2) Eliminar cliente, (3) Mostrar cliente, (4) Listar todos los clientes, (5) Listar clientes preferentes, (6) Terminar. En función de la opción elegida el programa tendrá que hacer lo siguiente:\nPreguntar los datos del cliente, crear un diccionario con los datos y añadirlo a la base de datos. Preguntar por el NIF del cliente y eliminar sus datos de la base de datos. Preguntar por el NIF del cliente y mostrar sus datos. Mostrar lista de todos los clientes de la base datos con su NIF y nombre. Mostrar la lista de clientes preferentes de la base de datos con su NIF y nombre. Terminar el programa. Solución\nEjercicio 11 El directorio de los clientes de una empresa está organizado en una cadena de texto como la de más abajo, donde cada línea contiene la información del nombre, email, teléfono, nif, y el descuento que se le aplica. Las líneas se separan con el carácter de cambio de línea \\n y la primera línea contiene los nombres de los campos con la información contenida en el directorio.\n\u0026quot;nif;nombre;email;teléfono;descuento\\n01234567L;Luis González;[email protected];656343576;12.5\\n71476342J;Macarena Ramírez;[email protected];692839321;8\\n63823376M;Juan José Martínez;[email protected];664888233;5.2\\n98376547F;Carmen Sánchez;[email protected];667677855;15.7\u0026quot; Escribir un programa que genere un diccionario con la información del directorio, donde cada elemento corresponda a un cliente y tenga por clave su nif y por valor otro diccionario con el resto de la información del cliente. Los diccionarios con la información de cada cliente tendrán como claves los nombres de los campos y como valores la información de cada cliente correspondientes a los campos. Es decir, un diccionario como el siguiente\n{'01234567L': {'nombre': 'Luis González', 'email': '[email protected]', 'teléfono': '656343576', 'descuento': 12.5}, '71476342J': {'nombre': 'Macarena Ramírez', 'email': '[email protected]', 'teléfono': '692839321', 'descuento': 8.0}, '63823376M': {'nombre': 'Juan José Martínez', 'email': '[email protected]', 'teléfono': '664888233', 'descuento': 5.2}, '98376547F': {'nombre': 'Carmen Sánchez', 'email': '[email protected]', 'teléfono': '667677855', 'descuento': 15.7}} Solución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1616018187,"objectID":"5814d828f965da91f158fec41c6bf63f","permalink":"/docencia/python/ejercicios/diccionarios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/diccionarios/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que guarde en una variable el diccionario {'Euro':'€', 'Dollar':'$', 'Yen':'¥'}, pregunte al usuario por una divisa y muestre su símbolo o un mensaje de aviso si la divisa no está en el diccionario.","tags":["Ejercicios","Diccionarios"],"title":"Ejercicios de Diccionarios","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Ramas Inicialmente cualquier repositorio tiene una única rama llamada master donde se van sucediendo todos los commits de manera lineal.\nUna de las característica más útiles de Git es que permite la creación de ramas para trabajar en distintas versiones de un proyecto a la vez.\nEsto es muy útil si, por ejemplo, se quieren añadir nuevas funcionalidades al proyecto sin que interfieran con lo desarrollado hasta ahora.\nCuando se termina el desarrollo de las nuevas funcionalidades las ramas se pueden fusionar para incorporar lo cambios al proyecto principal.\nCreación de ramas git branch git branch \u0026lt;rama\u0026gt; crea una nueva rama con el nombre \u0026lt;rama\u0026gt; en el repositorio a partir del último commit, es decir, donde apunte HEAD. Al crear una rama a partir de un commit, el flujo de commits se bifurca en dos de manera que se pueden desarrollar dos versiones del proyecto en paralelo.\nDesarrollo en ramas diferentes Listado de ramas git log git branch muestra las ramas activas de un repositorio indicando con * la rama activa en ese momento.\ngit log --graph --oneline muestra la historia del repositorio en forma de grafo (\u0026ndash;graph) incluyendo todas las ramas (\u0026ndash;all).\nCambio de ramas git checkout git checkout \u0026lt;rama\u0026gt; actualiza los ficheros del directorio de trabajo a la última versión del repositorio correspondiente a la rama \u0026lt;rama\u0026gt;, y la activa, es decir, HEAD pasa a apuntar al último commit de esta rama.\ngit checkout -b \u0026lt;rama\u0026gt; crea una nueva rama con el nombre \u0026lt;rama\u0026gt; y la activa, es decir, HEAD pasa a apuntar al último commit de esta rama. Este comando es equivalente aplicar los comandos git branch \u0026lt;rama\u0026gt; y después git checkout \u0026lt;rama\u0026gt;.\nFusión de ramas git merge git merge \u0026lt;rama\u0026gt; integra los cambios de la rama \u0026lt;rama\u0026gt; en la rama actual a la que apunta HEAD. Resolución de conflictos Para fusionar dos ramas es necesario que no haya conflictos entre los cambios realizados a las dos versiones del proyecto.\nSi en ambas versiones se han hecho cambios sobre la misma parte de un fichero, entonces se produce un conflicto y es necesario resolverlo antes de poder fusionar las ramas.\nLa resolución debe hacerse manualmente observando los cambios que interfieren y decidiendo cuales deben prevalecer, aunque existen herramientas como KDif3 o meld que facilitan el proceso.\nReorganización de ramas git rebase git rebase \u0026lt;rama-1\u0026gt; \u0026lt;rama-2\u0026gt; replica los cambios de la rama \u0026lt;rama-2\u0026gt; en la rama \u0026lt;rama-1\u0026gt; partiendo del ancestro común de ambas ramas. El resultado es el mismo que la fusión de las dos ramas pero la bifurcación de la \u0026lt;rama-2\u0026gt; desaparece ya que sus commits pasan a estar en la \u0026lt;rama-1\u0026gt;. Eliminación de ramas git branch -d git branch -d \u0026lt;rama\u0026gt; elimina la rama de nombre \u0026lt;rama\u0026gt; siempre y cuando haya sido fusionada previamente.\ngit branch -D \u0026lt;rama\u0026gt; elimina la rama de nombre \u0026lt;rama\u0026gt; incluso si no ha sido fusionada. Si la rama no ha sido fusionada previamente se perderán todos los cambios de esa rama.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"2082b24eb472576e083e0271ffa0bbb7","permalink":"/docencia/git/manual/gestion-ramas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/gestion-ramas/","section":"docencia","summary":"Ramas Inicialmente cualquier repositorio tiene una única rama llamada master donde se van sucediendo todos los commits de manera lineal.\nUna de las característica más útiles de Git es que permite la creación de ramas para trabajar en distintas versiones de un proyecto a la vez.","tags":null,"title":"Gestión de ramas","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre ramas o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:\n\u0026gt; git clone https://github.com/asalber/libro-git.git \u0026gt; cd libro-git \u0026gt; git reset --hard cb1e4 \u0026gt; git remote remove origin Ejercicio 1 Crear un nuevo repositorio público en GitHub con el nombre libro-git. Añadirlo al repositorio local del libro. Mostrar todos los repositorios remotos configurados. Solución # Crear el repositorio en GitHub y copiar su url con protocolo https. \u0026gt; git remote add github url \u0026gt; git remote -v Resolución Ejercicio 2 Añadir los cambios del repositorio local al repositorio remoto de GitHub. Acceder a GitHub y comprobar que se han subido los cambios mostrando el historial de versiones. Solución \u0026gt;git push github master Resolución Ejercicio 3 Colaborar en el repositorio remoto libro-git de otro usuario. Clonar su repositorio libro-git. Añadir el fichero autores.txt que contenga el nombre del usuario y su correo electrónico. Añadir los cambios a la zona de intercambio temporal. Hacer un commit con el mensaje \u0026ldquo;Añadido autor.\u0026rdquo; Subir los cambios al repositorio remoto. Solución # Entrar en GigHub en el proyecto libro-git del que seamos colaboradores y copiar la url. \u0026gt; git clone url \u0026gt; cat \u0026gt; autores.txt # Escribir el nombre del autor y su correo. Ctrl+D \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadido autor.\u0026quot; \u0026gt; git push origin master. Resolución Ejercicio 4 Hacer una bifurcación del repositorio remoto asalber/libro-git en GitHub. Clonar el repositorio creado en la cuenta de GitHub del usuario. Crear una nueva rama autoria y activarla. Añadir el nombre del usuario y su correo al fichero autores.txt. Añadir los cambios a la zona de intercambio temporal. Hacer un commit con el mensaje \u0026ldquo;Añadido nuevo autor.\u0026rdquo; Subir los cambios de la rama autoria al repositorio remoto en GitHub. Hacer un Pull Request de los cambios en la rama autoria. Solución # Hacer el fork del repositorio asalber/libro-git en GitHub y copiar la url del repositorio creado en la cuenta de GitHub del usuario. \u0026gt; git clone url \u0026gt; git checkout -b autoria # Editar con nano el fichero autores.txt y añadir el nombre y el correo electrónico del usuario en una nueva línea. \u0026gt; git commit -am \u0026quot;Añadido nuevo autor.\u0026quot; \u0026gt; git push origin autoria # Ir al repositorio remoto en GitHub y hacer clic en el botón Compare \u0026amp; Pull Request y después completar la solicitud haciendo clic en el botón Create Pull Request. Resolución ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"959c8c1a135e1a36dd16678fb41e48db","permalink":"/docencia/git/ejercicios/repositorios-remotos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/ejercicios/repositorios-remotos/","section":"docencia","summary":"Para hacer estos ejercicios es necesario haber hecho antes los ejercicios sobre ramas o bien hacer un clon del repositorio remoto https://github.com/asalber/libro-git mediante la siguiente secuencia de comandos:\n\u0026gt; git clone https://github.","tags":["Ejercicios"],"title":"Ejercicios de repositorios remotos","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Epidemiología"],"content":"Ejercicio 1 Titulación: Farmacia, Medicina\nPara detectar el parásito del paludismo existe un test de respuesta inmediata que produce un 2 % de falsos positivos y un 4 % de falsos negativos. En una determinada región de África se sabe que hay un 32 % de personas con paludismo. Se pide:\n¿Cuál es la probabilidad de que el test de un diagnóstico acertado? ¿Cuál es el poder predictivo negativo del test? ¿Cuánto debería valer la sensibilidad del test para que el poder predictivo negativo fuese de al menos el 99 %? SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"e2818d2a7ff70a4d9520fdf196b0e459","permalink":"/docencia/estadistica/ejercicios/tests-diagnosticos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/tests-diagnosticos/","section":"docencia","summary":"Ejercicio 1 Titulación: Farmacia, Medicina\nPara detectar el parásito del paludismo existe un test de respuesta inmediata que produce un 2 % de falsos positivos y un 4 % de falsos negativos.","tags":["Probabilidad","Tests Diagnósticos"],"title":"Ejercicios de Tests Diagnósticos","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Una Variable"],"content":"Definición de las ecuaciones diferenciales ordinarias En muchos problemas de geometría, física, química, etc, seq presentan a menudo ecuaciones que relacionan una función con su derivada o derivadas sucesivas.\nDefinición - Ecuación diferencial ordinaria. Se llama ecuación diferencial ordinaria (E.D.O.) a una ecuación que relaciona una variable independiente $x$, una función desconocida $y(x)$, y las derivadas de $y$ de diversos órdenes $y\u0026rsquo;,y\u0026rsquo;\u0026rsquo;,\\ldots,y^{(n}$; es decir una expresión de la forma\n$$F(x, y, y\u0026rsquo;, y\u0026rsquo;\u0026rsquo;,\\ldots, y^{(n})=0.$$\nSe llama orden de la ecuación diferencial al mayor de los órdenes de las derivadas que contienen la ecuación.\nEjemplo. La ecuación $y\\prime\\prime\\prime+\\operatorname{sen}(x)y\u0026rsquo;=2x$ es una ecuación diferencial ordinaria de tercer orden.\nDeducción de una ecuación diferencial Para deducir la ecuación diferencial que explica un fenómeno es fundamental saber interpretar las derivadas de una función.\nEjemplo Una de las leyes de la termodinámica de Newton dice\n“La velocidad de enfriamiento de un cuerpo en el aire es proporcional a la diferencia de temperatura $T$ del cuerpo y la temperatura $T_a$ del aire.”\nLa velocidad de enfriamiento es la variación instantánea de la temperatura con respecto al tiempo, es decir, la derivada de la temperatura con respecto al tiempo $dT/dt$. Por tanto, el fenómeno anterior puede describirse mediante la ecuación diferencial\n$$\\frac{dT}{dt}=k(T-T_a),$$\ndonde $k$ es una constante de proporcionalidad.\nSolución de una ecuación diferencial ordinaria Definición - Solución de una ecuación diferencial ordinaria. Se llama solución de una ecuación diferencial ordinaria $F(x,y,y\u0026rsquo;,y\u0026rsquo;\u0026rsquo;,\\ldots,y^{(n})=0$ a cualquier función $y =f(x)$ tal que al sustituirla en la ecuación la convierte en una igualdad; es decir\n$$F(x,f(x), f\u0026rsquo;(x), f\u0026rsquo;\u0026rsquo;(x),\\ldots, f^{(n}(x))=0.$$\nLa gráfica de la solución de una ecuación diferencial ordinaria se llama curva integral.\nResolver o integrar una ecuación diferencial ordinaria consiste en hallar todas sus soluciones en un dominio dado. Para ello, habrá que recurrir al cálculo integral.\nDe igual modo que al integrar una función aparece una constante que nos da la familia de primitivas de la función, al integrar una ecuación diferencial ordinaria surgen varias constantes arbitrarias. Dando valores a dichas constantes se obtienen todas las soluciones de la ecuación.\nDefinición - Solución general de una E.D.O.. Se llama solución general de una ecuación diferencial ordinaria de orden $n$, a una función de la forma $$y =f (x,C_1,\\ldots,C_n)$$ que es solución de la ecuación diferencial para cualquier valor que tomen las constantes $C_1,\\ldots,C_n$.\nPara cada valor que tomen las constantes se obtiene una solución particular de la ecuación diferencial. Por ello, una E.D.O. tiene infinitas soluciones.\nGeométricamente, la solución general representa una familia de curvas integrales de la ecuación diferencial.\nA menudo, se suelen imponer condiciones para reducir el número de soluciones de la ecuación diferencial. En muchos casos estas condiciones permiten fijar los valores de las constantes y así obtener una solución particular a partir de la solución general.\nEcuaciones diferenciales ordinarias de primer orden Vamos a estudiar la resolución de E.D.O. de primer orden, $$F(x,y,y\u0026rsquo;)=0.$$\nLa solución general de una E.D.O. de primer orden es $$y = f (x,C),$$ de manera que para obtener una solución particular de la ecuación basta con darle valor a la constante $C$, y para ello es suficiente con fijar una condición inicial.\nDefinición - Problema del valor inicial. Al conjunto formado por una ecuación diferencial ordinaria de primer orden y una condición inicial se le llama problema del valor inicial:\n$$ \\begin{cases} F(x,y,y\u0026rsquo;)=0, \u0026amp; \\mbox{Ecuación diferencial de primer orden;} \\newline y(x_0)=y_0, \u0026amp; \\mbox{Condición inicial.} \\end{cases} $$\nResolver un problema del valor inicial consiste en encontrar una solución de la ecuación diferencial que cumpla la condición inicial.\nEjemplo. Recordemos la ecuación diferencial de primer orden que explicaba el enfriamiento de un cuerpo en el aire: $$\\frac{dT}{dt}=k(T-T_a),$$ donde $T$ es la temperatura del cuerpo y $T_a$ la del aire.\nEs fácil comprobar que la solución general de esta ecuación diferencial es\n$$T(t) = Ce^{kt}+T_a.$$\nSi imponemos la condición inicial de que en el instante inicial el cuerpo estaba a $5$ ºC, es decir, $T(0)=5$, tenemos\n$$T(0) = Ce^{k\\cdot0}+T_a = C+T_a = 5,$$\nde donde se deduce que $C=5-T_a$, y esto nos lleva a la solución particular\n$$T(t) = (5-T_a)e^{kt}+T_a.$$\nPor último, en el caso de que la temperatura del aire fuese $T_a=0$ ºC y $k=1$, la solución general de la ecuación sería\n$$T(t)=Ce^t,$$\nlo que nos daría la siguiente familia de curvas integrales\nde las cuales, la solución del problema del valor incial es la función cuya gráfica pasa por el punto $(0,5)$.\nExistencia y unicidad de soluciones Teorema - Existencia y unicidad de la solución de una E.D.O.. Dado un problem del valor inicial\n$$\\begin{cases} y\u0026rsquo;=F(x,y);\\newline y(x_0)=y_0; \\end{cases} $$\nsi $F(x,y(x))$ es una función continua en un intervalo abierto alrededor del punto $(x_0,y_0)$, entonces existe una solución del problema del valor inicial. Si, además, $\\frac{\\partial F}{\\partial y}$ es continua en un intervalo abierto alrededor de $(x_0,y_0)$, la solución es única.\nAunque este teorema nos garantiza la existencia y la unicidad de las soluciones no nos proporciona un método para llegar a ellas.\nEn realidad, no existe un método general para resolver ecuaciones diferenciales de primer orden pero veremos cómo resolver algunos tipos especiales de ellas:\nDe variables separables, Homogéneas, Lineales. E.D.O. de variables separables Definición - E.D.O. de variables separables. Una ecuación diferencial ordinaria de variables separables es una ecuación diferencial de primer orden que puede escribirse de la forma\n$$y\u0026rsquo;g(y)=f(x),$$\no lo que es lo mismo,\n$$g(y)dy=f(x)dx,$$\nde manera que a un lado de la igualdad sólo aparece la variable $y$ y al otro la variable $x$ (las variables están separadas).\nLa solución general de esta ecuación diferencial se obtiene integrando ambos lados de la igualdad\n$$\\int g(y)\\,dy = \\int f(x)\\,dx+C.$$\nEjemplo. La ecuación diferencial que explica el enfriamiento de un cuerpo en el aire\n$$\\frac{dT}{dt}=k(T-T_a),$$\nes una ecuación diferencial de variables separables ya que puede escribirse\n$$\\frac{1}{T-T_a}dT=k\\,dt.$$\nIntegrando ambos miembros de la igualdad tenemos\n$$\\int \\frac{1}{T-T_a}\\,dT=\\int k\\,dt\\Leftrightarrow \\log(T-T_a)=kt+C,$$\ny despejando $T$ llegamos a la solución general de la ecuación\n$$T(t)=e^{kt+C}+T_a=e^Ce^{kt}+T_a=Ce^{kt}+T_a,$$\nreescribiendo $C=e^C$ como una constante arbitraria.\nE.D.O. homogéneas Definición - Función homogénea. Una función $f(x,y)$ es homogénea de grado $n$, si para cualquier valor $k$ se cumple\n$$f(kx,ky)= k^nf(x,y).$$\nEn particular, para una función homogénea de grado $0$ siempre se cumple\n$$f(kx,ky)=f(x,y).$$\nEn concreto, si tomamos $k=1/x$ tenemos\n$$ f(x,y)=f\\left(\\frac{1}{x}x,\\frac{1}{x}y\\right)=f\\left(1,\\frac{y}{x}\\right)=g\\left(\\frac{y}{x}\\right), $$\nde manera que una función homogénea de grado $0$ siempre puede escribirse como una función de $u=y/x$:\n$$f(x,y)=g\\left(\\frac{y}{x}\\right)=g(u).$$\nDefinición - E.D.O. homogénea. Una ecuación diferencial ordinaria homogénea es una ecuación diferencial de primer orden que puede escribirse de la forma\n$$y\u0026rsquo;=f(x,y),$$\ndonde $f(x,y)$ es una función homogénea de grado $0$.\nLa solución de esta ecuación diferencial se obtiene realizando el cambio de variable\n$$u=\\frac{y}{x}\\Leftrightarrow y=ux,$$\ncon lo que la ecuación diferencial anterior se convierte en\n$$u\u0026rsquo;x+u=f(u),$$\nque es de variables separables.\nUna vez resuelta la ecuación diferencial anterior, sólo queda deshacer el cambio de variable.\nEjemplo. Consideremos la siguiente ecuación diferencial\n$$4x-3y+y\u0026rsquo;(2y-3x)=0.$$\nEscribiéndola de la forma\n$$y\u0026rsquo;=\\frac{3y-4x}{2y-3x}$$\nse puede ver fácilmente que es homogénea.\nPara resolverla hacemos el cambio de variable $y=ux$ y se obtine\n$$u\u0026rsquo;x+u=\\frac{3ux-4x}{2ux-3x}=\\frac{3u-4}{2u-3}$$\nque es de variables separables, y separando las variables se llega a\n$$u\u0026rsquo;x=\\frac{3u-4}{2u-3}-u=\\frac{-2u^2+6u-4}{2u-3}\\Leftrightarrow \\frac{2u-3}{-2u^2+6u-4}\\,du=\\frac{1}{x}\\,dx.$$\nIntegrando ahora ambos miembros obtenemos\n$$\\renewcommand{\\arraystretch}{2} \\begin{array}{c} \\displaystyle \\int \\frac{2u-3}{-2u^2+6u-4}\\,du=\\int \\frac{1}{x}\\,dx \\Leftrightarrow -\\frac{1}{2}\\log|u^2-3u+2|=\\log|x|+C \\Leftrightarrow\\newline \\Leftrightarrow \\log|u^2-3u+2|=-2\\log|x|-2C, \\end{array}$$\ny aplicando la función exponencial a ambos miembros y simplificando llegamos a la solución\n$$u^2-3u+2=e^{-2\\log|x|-2C}=\\frac{e^{-2C}}{e^{\\log|x|^2}}=\\frac{C}{x^2},$$\nreescribiendo $C=e^{-2C}$, como una constante arbitraria.\nFinalmente, deshaciendo el cambio inicial de variable $u=y/x$, llegamos a la solución general de la ecuación\n$$\\left(\\frac{y}{x}\\right)^2-3\\frac{y}{x}+2=\\frac{C}{x^2}\\Leftrightarrow y^2-3xy+2x^2=C.$$\nE.D.O. lineales Definición - E.D.O. lineal. Una ecuación diferencial ordinaria lineal es una ecuación diferencial de primer orden que puede escribirse de la forma\n$$y\u0026rsquo;+g(x)y = h(x).$$\nResolución de una E.D.O. Lineal Para resolver esta ecuación diferencial, intentamos poner el primer miembro como derivada de un producto. Para ello multiplicamos los dos miembros de la igualdad por una función $f(x)$ tal que\n$$f\u0026rsquo;(x)=g(x)f(x).$$\nDe esta manera tenemos\n$$\\begin{array}{c}ç y\u0026rsquo;f(x)+g(x)f(x)y=h(x)f(x)\\newline \\Updownarrow\\newline y\u0026rsquo;f(x)+f\u0026rsquo;(x)y=h(x)f(x)\\newline \\Updownarrow\\newline \\dfrac{d}{dx}(yf(x))=h(x)f(x) \\end{array}$$\nIntegrando ambos miembros de la ecuación anterior llegamos a la solución\n$$yf(x)=\\int h(x)f(x)\\,dx+C.$$\nPor otro lado, la única función que cumple $f\u0026rsquo;(x)=g(x)f(x)$ es\n$$f(x)=e^{\\int g(x)\\,dx},$$\nde modo que, al sustituir en la solución anterior, llegamos a la solución general de una ecuación diferencial lineal\n$$ye^{\\int g(x)\\,dx}=\\int h(x) e^{\\int g(x)\\,dx}\\,dx+C,$$\no lo que es lo mismo\nSolución de un ecuación diferencial homogenea $$y=e^{-\\int g(x)\\,dx}\\left(\\int h(x)e^{\\int g(x)\\,dx}\\,dx+C\\right).$$ Ejemplo. Si en la ecuación diferencial que explica el enfriamiento de un cuerpo, la temperatura del medio en el que se encuentra no es constante sino que cambia con el tiempo, es decir, es una función $T_a(t)$, entonces la ecuación diferencial resultante\n$$\\frac{dT}{dt}=k(T-T_a(t)),$$\nes una ecuación diferencial lineal que puede escribirse como\n$$T\u0026rsquo;-kT=-kT_a(t),$$\ndonde el término independiente es $-kT_a(t)$ y el coeficiente de $T$ es $-k$.\nSustituyendo en la solución general de una ecuación diferencial lineal tenemos\n$$y=e^{-\\int -k\\,dt}\\left(\\int -kT_a(t)e^{\\int -k\\,dt}\\,dt+C\\right)= e^{kt}\\left(-\\int kT_a(t)e^{-kt}\\,dt+C\\right).$$\nSi en un caso concreto la temperatura del aire estuviese dada por la función $T_a(t)=t$, y la constante de proporcionalidad fuese $k=1$, entonces la solución general de la ecuación diferencial sería\n$$y=e^{t}\\left(-\\int te^{-kt}\\,dt+C\\right)=e^t(e^{-t}(t+1)+C)=Ce^t+t+1.$$\nSi además nos dicen que en el instante $0$ la temperatura del cuerpo es de $5$ ºC, es decir, nos dan la condición inicial $T(0)=5$, entonces se puede calcular la constante $C$\n$$y(0)=Ce^0+0+1=5 \\Leftrightarrow C+1=5 \\Leftrightarrow C=4,$$\ny entonces la solución particular que se obtiene es\n$$y(t)=4e^t+t+1.$$\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600986575,"objectID":"cd14fe39fed29e94b839392c19ee2645","permalink":"/docencia/calculo/manual/ecuaciones-diferenciales-ordinarias/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/ecuaciones-diferenciales-ordinarias/","section":"docencia","summary":"Definición de las ecuaciones diferenciales ordinarias En muchos problemas de geometría, física, química, etc, seq presentan a menudo ecuaciones que relacionan una función con su derivada o derivadas sucesivas.\nDefinición - Ecuación diferencial ordinaria.","tags":["Ecuación Diferencial"],"title":"Ecuaciones diferenciales ordinarias","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir una función que muestre por pantalla el saludo ¡Hola amiga! cada vez que se la invoque.\nSolución\nEjercicio 2 Escribir una función a la que se le pase una cadena \u0026lt;nombre\u0026gt; y muestre por pantalla el saludo ¡hola \u0026lt;nombre\u0026gt;!.\nSolución\nEjercicio 3 Escribir una función que reciba un número entero positivo y devuelva su factorial.\nSolución\nEjercicio 4 Escribir una función que calcule el total de una factura tras aplicarle el IVA. La función debe recibir la cantidad sin IVA y el porcentaje de IVA a aplicar, y devolver el total de la factura. Si se invoca la función sin pasarle el porcentaje de IVA, deberá aplicar un 21%.\nSolución\nEjercicio 5 Escribir una función que calcule el área de un círculo y otra que calcule el volumen de un cilindro usando la primera función.\nSolución\nEjercicio 6 Escribir una función que reciba una muestra de números en una lista y devuelva su media.\nSolución\nEjercicio 7 Escribir una función que reciba una muestra de números en una lista y devuelva otra lista con sus cuadrados.\nSolución\nEjercicio 8 Escribir una función que reciba una muestra de números en una lista y devuelva un diccionario con su media, varianza y desviación típica.\nSolución\nEjercicio 9 Escribir una función que calcule el máximo común divisor de dos números y otra que calcule el mínimo común múltiplo.\nSolución\nEjercicio 10 Escribir una función que convierta un número decimal en binario y otra que convierta un número binario en decimal.\nSolución\nEjercicio 11 Escribir un programa que reciba una cadena de caracteres y devuelva un diccionario con cada palabra que contiene y su frecuencia. Escribir otra función que reciba el diccionario generado con la función anterior y devuelva una tupla con la palabra más repetida y su frecuencia.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600773632,"objectID":"53abc8538d19c89640a9bdc9ec4df263","permalink":"/docencia/python/ejercicios/funciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/funciones/","section":"docencia","summary":"Ejercicio 1 Escribir una función que muestre por pantalla el saludo ¡Hola amiga! cada vez que se la invoque.\nSolución\nEjercicio 2 Escribir una función a la que se le pase una cadena \u0026lt;nombre\u0026gt; y muestre por pantalla el saludo ¡hola \u0026lt;nombre\u0026gt;!","tags":["Ejercicios","Funciones"],"title":"Ejercicios de Funciones","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Listas Una lista es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes [ ] separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos. Son mutables, es decir, pueden alterarse durante la ejecución de un programa. # Lista vacía \u0026gt;\u0026gt;\u0026gt; type([]) \u0026lt;class 'list'\u0026gt; # Lista con elementos de distintos tipos \u0026gt;\u0026gt;\u0026gt; [1, \u0026quot;dos\u0026quot;, True] # Listas anidadas \u0026gt;\u0026gt;\u0026gt; [1, [2, 3], 4] Creación de listas mediante la función list() Otra forma de crear listas es mediante la función list().\nlist(c) : Crea una lista con los elementos de la secuencia o colección c. Se pueden indicar los elementos separados por comas, mediante una cadena, o mediante una colección de elementos iterable.\n\u0026gt;\u0026gt;\u0026gt; list() [] \u0026gt;\u0026gt;\u0026gt; list(1, 2, 3) [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; list(\u0026quot;Python\u0026quot;) ['P', 'y', 't', 'h', 'o', 'n'] Acceso a los elementos de una lista Se utilizan los mismos operadores de acceso que para cadenas de caracteres.\nl[i] : Devuelve el elemento de la lista l con el índice i. El índice del primer elemento de la lista es 0.\n\u0026gt;\u0026gt;\u0026gt; a = ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[0] 'P' \u0026gt;\u0026gt;\u0026gt; a[5] 'n' \u0026gt;\u0026gt;\u0026gt; a[6] Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; IndexError: list index out of range \u0026gt;\u0026gt;\u0026gt; a[-1] 'n' Sublistas l[i:j:k] : Devuelve la sublista desde el elemento de l con el índice i hasta el elemento anterior al índice j, tomando elementos cada k. \u0026gt;\u0026gt;\u0026gt; a = ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[1:4] ['y', 't', 'h'] \u0026gt;\u0026gt;\u0026gt; a[1:1] [] \u0026gt;\u0026gt;\u0026gt; a[:-3] ['y', 't', 'h'] \u0026gt;\u0026gt;\u0026gt; a[:] ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[0:6:2] ['P', 't', 'o'] Operaciones que no modifican una lista len(l) : Devuelve el número de elementos de la lista l. min(l) : Devuelve el mínimo elemento de la lista l siempre que los datos sean comparables. max(l) : Devuelve el máximo elemento de la lista l siempre que los datos sean comparables. sum(l) : Devuelve la suma de los elementos de la lista l, siempre que los datos se puedan sumar. dato in l : Devuelve True si el dato dato pertenece a la lista l y False en caso contrario. l.index(dato) : Devuelve la posición que ocupa en la lista l el primer elemento con valor dato. l.count(dato) : Devuelve el número de veces que el valor dato está contenido en la lista l. all(l) : Devuelve True si todos los elementos de la lista l son True y False en caso contrario. any(l) : Devuelve True si algún elemento de la lista l es True y False en caso contrario. \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 2, 3] \u0026gt;\u0026gt;\u0026gt; len(a) 4 \u0026gt;\u0026gt;\u0026gt; min(a) 1 \u0026gt;\u0026gt;\u0026gt; max(a) 3 \u0026gt;\u0026gt;\u0026gt; sum(a) 8 \u0026gt;\u0026gt;\u0026gt; 3 in a True \u0026gt;\u0026gt;\u0026gt; a.index(2) 1 \u0026gt;\u0026gt;\u0026gt; a.count(2) 2 \u0026gt;\u0026gt;\u0026gt; all(a) True \u0026gt;\u0026gt;\u0026gt; any([0, False, 3\u0026lt;2]) False Operaciones que modifican una lista l1 + l2 : Crea una nueva lista concatenan los elementos de la listas l1 y l2. l.append(dato) : Añade dato al final de la lista l. l.extend(sequencia) : Añade los datos de sequencia al final de la lista l. l.insert(índice, dato) : Inserta dato en la posición índice de la lista l y desplaza los elementos una posición a partir de la posición índice. l.remove(dato) : Elimina el primer elemento con valor dato en la lista l y desplaza los que están por detrás de él una posición hacia delante. l.pop([índice]) : Devuelve el dato en la posición índice y lo elimina de la lista l, desplazando los elementos por detrás de él una posición hacia delante. l.sort() : Ordena los elementos de la lista l de acuerdo al orden predefinido, siempre que los elementos sean comparables. l.reverse() : invierte el orden de los elementos de la lista l. \u0026gt;\u0026gt;\u0026gt; a = [1, 3] \u0026gt;\u0026gt;\u0026gt; b = [2 , 4, 6] \u0026gt;\u0026gt;\u0026gt; a.append(5) \u0026gt;\u0026gt;\u0026gt; a [1, 3, 5] \u0026gt;\u0026gt;\u0026gt; a.remove(3) \u0026gt;\u0026gt;\u0026gt; a [1, 5] \u0026gt;\u0026gt;\u0026gt; a.insert(1, 3) \u0026gt;\u0026gt;\u0026gt; a [1, 3, 5] \u0026gt;\u0026gt;\u0026gt; b.pop() 6 \u0026gt;\u0026gt;\u0026gt; c = a + b \u0026gt;\u0026gt;\u0026gt; c [1, 3, 5, 2, 4] \u0026gt;\u0026gt;\u0026gt; c.sort() \u0026gt;\u0026gt;\u0026gt; c [1, 2, 3, 4, 5] \u0026gt;\u0026gt;\u0026gt; c.reverse() \u0026gt;\u0026gt;\u0026gt; c [5, 4, 3, 2, 1] Copia de listas Existen dos formas de copiar listas:\nCopia por referencia l1 = l2: Asocia la la variable l1 la misma lista que tiene asociada la variable l2, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través de l1 o l2 afectará a la misma lista. Copia por valor l1 = list(l2): Crea una copia de la lista asociada a l2 en una dirección de memoria diferente y se la asocia a l1. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará a la lista de l2 y viceversa. \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = a \u0026gt;\u0026gt;\u0026gt; b [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; b.remove(2) \u0026gt;\u0026gt;\u0026gt; b [1, 3] \u0026gt;\u0026gt;\u0026gt; a [1, 3] \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = list(a) \u0026gt;\u0026gt;\u0026gt; b [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; b.remove(2) \u0026gt;\u0026gt;\u0026gt; b [1, 3] \u0026gt;\u0026gt;\u0026gt; a [1, 2, 3] ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"c32c69be8ea9cb6116843e4221f5086a","permalink":"/docencia/python/manual/listas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/listas/","section":"docencia","summary":"Listas Una lista es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes [ ] separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos.","tags":["Listas"],"title":"Listas","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":"Repositorios remotos La otra característica de Git, que unida a las ramas, facilita la colaboración entre distintos usuarios en un proyecto son los repositorios remotos.\nGit permite la creación de una copia del repositorio en un servidor git en internet. La principal ventaja de tener una copia remota del repositorio, a parte de servir como copia de seguridad, es que otros usuarios pueden acceder a ella y hacer también cambios.\nExisten muchos proveedores de alojamiento para repositorios Git pero el más usado es GitHub.\n¿Qué es GitHub? GitHub es el proveedor de alojamiento en la nube para repositorios gestionados con git más usado y el que actualmente tiene alojados más proyectos de desarrollo de software de código abierto en el mundo.\nLa principal ventaja de GitHub es que permite albergar un número ilimitado de repositorios tanto públicos como privados, y que además ofrece servicios de registro de errores, solicitud de nuevas funcionalidades, gestión de tareas, wikis o publicación de páginas web, para cada proyecto, incluso con el plan básico que es gratuito.\nAñadir un repositorio remoto git remote add git remote add \u0026lt;repositorio-remoto\u0026gt; \u0026lt;url\u0026gt; crea un enlace con el nombre \u0026lt;repositorio-remoto\u0026gt; a un repositorio remoto ubicado en la dirección \u0026lt;url\u0026gt;. Cuando se añade un repositorio remoto a un repositorio, Git seguirá también los cambios del repositorio remoto de manera que se pueden descargar los cambios del repositorio remoto al local y se pueden subir los cambios del repositorio local al remoto.\nLista de repositorios remotos git remote git remote muestra un listado con todos los enlaces a repositorios remotos definidos en un repositorio local.\ngit remote -v muestra además las direcciones url para cada repositorio remoto.\nDescargar cambios desde un repositorio remoto git pull git pull \u0026lt;remoto\u0026gt; \u0026lt;rama\u0026gt; descarga los cambios de la rama \u0026lt;rama\u0026gt; del repositorio remoto \u0026lt;remoto\u0026gt; y los integra en la última versión del repositorio local, es decir, en el HEAD.\ngit fetch \u0026lt;remoto\u0026gt; descarga los cambios del repositorio remoto \u0026lt;remoto\u0026gt; pero no los integra en la última versión del repositorio local.\nSubir cambios a un repositorio remoto git push git push \u0026lt;remoto\u0026gt; \u0026lt;rama\u0026gt; sube al repositorio remoto \u0026lt;remoto\u0026gt; los cambios de la rama \u0026lt;rama\u0026gt; en el repositorio local. Colaboración en repositorios remotos de GitHub Existen dos formas de colaborar en un repositorio alojado en GitHub:\nSer colaborador del repositorio.\nRecibir autorización de colaborador por parte de la persona propietaria del proyecto. Clonar el repositorio en local. Hacer cambios en el repositorio local. Subir los cambios al repositorio remoto. Primero hacer git pull para integrar los cambios remotos en el repositorio local y luego git push para subir los cambios del repositorio local al remoto. Replicar el repositorio y solicitar integración de cambios.\nReplicar el repositorio remoto en nuestra cuenta de GitHub mediante un fork. Hacer cambios en nuestro repositorio remoto. Solicitar a la persona propietaria del repositorio original que integre nuestros cambios en su repositorio mediante un pull request. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"6dc7ca6de9d9165fe6f63bf3763757e5","permalink":"/docencia/git/manual/repositorios-remotos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/repositorios-remotos/","section":"docencia","summary":"Repositorios remotos La otra característica de Git, que unida a las ramas, facilita la colaboración entre distintos usuarios en un proyecto son los repositorios remotos.\nGit permite la creación de una copia del repositorio en un servidor git en internet.","tags":null,"title":"Repositorios remotos","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Farmacia, Biotecnología\nSe sabe que el 0.1 % de los comprimidos fabricados en un laboratorio no supera los controles de calidad. Se pide:\nCalcular la probabilidad de que en un envase de 500 comprimidos haya más de 2 comprimidos que no superan los controles de calidad. Calcular la probabilidad de que en un lote de 10 envases haya más de 7 envases en los que todos sus comprimidos superen los controles de calidad. SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"07cacb5ebc06fd96a960f9d07682aa19","permalink":"/docencia/estadistica/ejercicios/variables-aleatorias-discretas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/variables-aleatorias-discretas/","section":"docencia","summary":"Ejercicio 1 Titulación: Farmacia, Biotecnología\nSe sabe que el 0.1 % de los comprimidos fabricados en un laboratorio no supera los controles de calidad. Se pide:\nCalcular la probabilidad de que en un envase de 500 comprimidos haya más de 2 comprimidos que no superan los controles de calidad.","tags":["Probabilidad","Variables Aleatorias","Variables Aleatorias Discretas"],"title":"Ejercicios de Variables Aleatorias Discretas","type":"book"},{"authors":null,"categories":["Cálculo","Cálculo en Varias Variables"],"content":"Funciones vectoriales de una variable real Definición - Función vectorial de una variable real. Una función vectorial de una variable real o campo vectorial de una variable escalar es una función que asocia cada valor escalar $t\\in D\\subseteq \\mathbb{R}$ con un vector $(x_1(t),\\ldots,x_n(t))$ en $\\mathbb{R}^n$:\n$$ \\begin{array}{rccl} f: \u0026amp; \\mathbb{R} \u0026amp; \\longrightarrow \u0026amp; \\mathbb{R}^n\\newline \u0026amp; t \u0026amp; \\longrightarrow \u0026amp; (x_1(t),\\ldots, x_n(t)) \\end{array} $$\ndonde $x_i(t)$, $i=1,\\ldots,n$, son funciones reales de una variable real conocidas como funciones coordenadas.\nLos campos vectoriales más habituales se dan en plano real $\\mathbb{R}^2$, donde se suelen representar así\n$$f(t)=x(t)\\mathbf{i}+y(t)\\mathbf{j},$$\ny en el espacio real $\\mathbb{R}^3$, donde ser representan así\n$$f(t)=x(t)\\mathbf{i}+y(t)\\mathbf{j}+z(t)\\mathbf{k},$$\nRepresentación gráfica de un campo vectorial La representación gráfica de un campo vectorial en $\\mathbb{R}^2$ es una trayectoria en el plano real.\nLa representación gráfica de un campo vectorial en $\\mathbb{R}^3$ es una trayectoria en el espacio real.\nDerivative of a vector field The concept of derivative as the limit of the average rate of change of a function can be extended easily to vector fields.\nDefinition - Derivative of a vectorial field. A vectorial field $f(t)=(x_1(t),\\ldots,x_n(t))$ is differentiable at a point $t=a$ if the limit\n$$\\lim_{\\Delta t\\rightarrow 0} \\frac{f(a+\\Delta t)-f(a)}{\\Delta t}.$$\nexists. In such a case, the value of the limit is known as the derivative of the vector field at $a$, and it is written $f\u0026rsquo;(a)$.\nMany properties of real functions of a single real variable can be extended to vector fields through its component functions. Thus, for instance, the derivative of a vector field can be computed from the derivatives of its component functions.\nTheorem. Given a vector field $f(t)=(x_1(t),\\ldots,x_n(t))$, if $x_i(t)$ is differentiable at $t=a$ for all $i=1,\\ldots,n$, then $f$ is differentiable at $a$ and its derivative is\n$$f\u0026rsquo;(a)=(x_1\u0026rsquo;(a),\\ldots,x_n\u0026rsquo;(a))$$\nProof The proof for a vectorial field in $\\mathbb{R}^2$ is easy.\n$$\\begin{aligned} f\u0026rsquo;(a)\u0026amp;=\\lim_{\\Delta t\\rightarrow 0} \\frac{f(a+\\Delta t)-f(a)}{\\Delta t} = \\lim_{\\Delta t\\rightarrow 0} \\frac{(x(a+\\Delta t),y(a+\\Delta t))-(x(a),y(a))}{\\Delta t} =\\newline \u0026amp;= \\lim_{\\Delta t\\rightarrow 0} \\left(\\frac{x(a+\\Delta t)-x(a)}{\\Delta t},\\frac{y(a+\\Delta t)-y(a)}{\\Delta t}\\right) =\\newline \u0026amp;= \\left(\\lim_{\\Delta t\\rightarrow 0}\\frac{x(a+\\Delta t)-x(a)}{\\Delta t},\\lim_{\\Delta t\\rightarrow 0}\\frac{y(a+\\Delta t)-y(a)}{\\Delta t}\\right) = (x\u0026rsquo;(a),y\u0026rsquo;(a)). \\end{aligned} $$\nKinematics: Curvilinear motion The notion of derivative as a velocity along a trajectory in the real line can be generalized to a trajectory in any euclidean space $\\mathbb{R}^n$.\nIn case of a two dimensional space $\\mathbb{R}^2$, if $f(t)$ describes the position of a moving object in the real plane at any time $t$, taking as reference the coordinates origin $O$ and the unitary vectors ${\\mathbf{i}=(1,0),\\mathbf{j}=(0,1)}$, we can represent the position of the moving object $P$ at every moment $t$ with a vector $\\vec{OP}=x(t)\\mathbf{i}+y(t)\\mathbf{j}$, where the coordinates\n$$ \\begin{cases} x=x(t)\\newline y=y(t) \\end{cases} \\quad t\\in \\mbox{Dom}(f) $$\nare the coordinate functions of $f$.\nIn this context the derivative of a trajectory $f\u0026rsquo;(a)=(x_1\u0026rsquo;(a),\\ldots,x_n\u0026rsquo;(a))$ is the velocity vector of the trajectory $f$ at moment $t=a$. Example. Given the trajectory $f(t) = (\\cos t,\\sin t)$, $t\\in \\mathbb{R}$, whose image is the unit circumference centred in the coordinate origin, its coordinate functions are $x(t) = \\cos t$, $y(t) = \\sin t$, $t\\in \\mathbb{R}$, and its velocity is\n$$\\mathbf{v}=f\u0026rsquo;(t)=(x\u0026rsquo;(t),y\u0026rsquo;(t))=(-\\sin t, \\cos t).$$\nIn the moment $t=\\pi/4$, the object is in position $f(\\pi/4) = (\\cos(\\pi/4),\\sin(\\pi/4)) =(\\sqrt{2}/2,\\sqrt{2}/2)$ and it is moving with a velocity $\\mathbf{v}=f\u0026rsquo;(\\pi/4)=(-\\sin(\\pi/4),\\cos(\\pi/4))=(-\\sqrt{2}/2,\\sqrt{2}/2)$.\nObserve that the module of the velocity vector is always 1 as $\\vert\\mathbf{v}\\vert=\\sqrt{(-\\sin t)^2+(\\cos t)^2}=1$.\nTangent line to a trajectory Tangent line to a trajectory in the plane Vectorial equation Given a trajectory $f(t)$ in the real plane, the vectors that are parallel to the velocity $\\mathbf{v}$ at a moment $a$ are called tangent vectors to the trajectory $f$ at the moment $a$, and the line passing through $P=f(a)$ directed by $\\mathbf{v}$ is the tangent line to the graph of $f$ at the moment $a$.\nDefinition - Tangent line to a trajectory. Given a trajectory $f(t)$ in the real plane $\\mathbb{R}^2$, the tangent line to to the graph of $f$ at $a$ is the line with equation\n$$ \\begin{aligned} l:(x,y) \u0026amp;= f(a)+tf\u0026rsquo;(a) = (x(a),y(a))+t(x\u0026rsquo;(a),y\u0026rsquo;(a))\\newline \u0026amp; = (x(a)+tx\u0026rsquo;(a),y(a)+ty\u0026rsquo;(a)). \\end{aligned} $$\nExample. We have seen that for the trajectory $f(t) = (\\cos t,\\sin t)$, $t\\in \\mathbb{R}$, whose image is the unit circumference centred at the coordinate origin, the object position at the moment $t=\\pi/4$ is $f(\\pi/4)=(\\sqrt{2}/2,\\sqrt{2}/2)$ and its velocity $\\mathbf{v}=(-\\sqrt{2}/2,\\sqrt{2}/2)$. Thus the equation of the tangent line to $f$ at that moment is\n$$ \\begin{aligned} l: (x,y) \u0026amp; = f(\\pi/4)+t\\mathbf{v} = \\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right)+t\\left(\\frac{-\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right) =\\newline \u0026amp; =\\left(\\frac{\\sqrt{2}}{2}-t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right). \\end{aligned} $$\nCartesian and point-slope equations From the vectorial equation of the tangent to a trajectory $f(t)$ at the moment $t=a$ we can get the coordinate functions\n$$ \\begin{cases} x=x(a)+tx\u0026rsquo;(a)\\newline y=y(a)+ty\u0026rsquo;(a) \\end{cases} \\quad t\\in \\mathbb{R}, $$\nand solving for $t$ and equalling both equations we get the Cartesian equation of the tangent\n$$\\frac{x-x(a)}{x\u0026rsquo;(a)}=\\frac{y-y(a)}{y\u0026rsquo;(a)},$$\nif $x\u0026rsquo;(a)\\neq 0$ and $y\u0026rsquo;(a)\\neq 0$.\nFrom this equation it is easy to get the point-slope equation of the tangent\n$$y-y(a)=\\frac{y\u0026rsquo;(a)}{x\u0026rsquo;(a)}(x-x(a)).$$\nExample. Using the vectorial equation of the tangent of the previous example\n$$l: (x,y)=\\left(\\frac{\\sqrt{2}}{2}-t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right),$$\nits Cartesian equation is $$\\frac{x-\\sqrt{2}/2}{-\\sqrt{2}/2} = \\frac{y-\\sqrt{2}/2}{\\sqrt{2}/2}$$ and the point-slope equation is\n$$y-\\sqrt{2}/2 = \\frac{-\\sqrt{2}/2}{\\sqrt{2}/2}(x-\\sqrt{2}/2) \\Rightarrow y=-x+\\sqrt{2}.$$\nNormal line to a trajectory in the plane We have seen that the tangent line to a trajectory $f(t)$ at $a$ is the line passing through the point $P=f(a)$ directed by the velocity vector $\\mathbf{v}=f\u0026rsquo;(a)=(x\u0026rsquo;(a),y\u0026rsquo;(a))$. If we take as direction vector a vector orthogonal to $\\mathbf{v}$, we get another line that is known as normal line to the trajectory.\nDefinition - Normal line to a trajectory. Given a trajectory $f(t)$ in the real plane $\\mathbb{R}^2$, the normal line to the graph of $f$ at moment $t=a$ is the line with equation\n$$l: (x,y)=(x(a),y(a))+t(y\u0026rsquo;(a),-x\u0026rsquo;(a)) = (x(a)+ty\u0026rsquo;(a),y(a)-tx\u0026rsquo;(a)).$$\nThe Cartesian equation is\n$$\\frac{x-x(a)}{y\u0026rsquo;(a)} = \\frac{y-y(a)}{-x\u0026rsquo;(a)},$$\nand the point-slope equation is\n$$y-y(a) = \\frac{-x\u0026rsquo;(a)}{y\u0026rsquo;(a)}(x-x(a)).$$\nThe normal line is always perpendicular to the tangent line as their direction vectors are orthogonal. Example. Considering again the trajectory of the unit circumference $f(t) = (\\cos t,\\sin t)$, $t\\in \\mathbb{R}$, the normal line to the graph of $f$ at moment $t=\\pi/4$ is\n$$ \\begin{aligned} l: (x,y)\u0026amp;=(\\cos(\\pi/2),\\sin(\\pi/2))+t(\\cos(\\pi/2),\\sin(\\pi/2)) =\\newline \u0026amp;= \\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right)+t\\left(\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}\\right) =\\left(\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2},\\frac{\\sqrt{2}}{2}+t\\frac{\\sqrt{2}}{2}\\right), \\end{aligned} $$\nthe Cartesian equation is\n$$\\frac{x-\\sqrt{2}/2}{\\sqrt{2}/2} = \\frac{y-\\sqrt{2}/2}{\\sqrt{2}/2},$$ and the point-slope equation is $$y-\\sqrt{2}/2 = \\frac{\\sqrt{2}/2}{\\sqrt{2}/2}(x-\\sqrt{2}/2) \\Rightarrow y=x.$$\nTangent and normal lines to a function A particular case of tangent and normal lines to a trajectory are the tangent and normal lines to a function of one real variable. For every function $y=f(x)$, the trajectory that trace its graph is\n$$g(x) = (x,f(x)) \\quad x\\in \\mathbb{R},$$\nand its velocity is\n$$g\u0026rsquo;(x) = (1,f\u0026rsquo;(x)),$$\nso that the tangent line to $g$ at the moment $a$ is\n$$\\frac{x-a}{1} = \\frac{y-f(a)}{f\u0026rsquo;(a)} \\Rightarrow y-f(a) = f\u0026rsquo;(a)(x-a),$$\nand the normal line is\n$$\\frac{x-a}{f\u0026rsquo;(a)} = \\frac{y-f(a)}{-1} \\Rightarrow y-f(a) = \\frac{-1}{f\u0026rsquo;(a)}(x-a).$$\nExample. Given the function $y=x^2$, the trajectory that traces its graph is $g(x)=(x,x^2)$ and its velocity is $g\u0026rsquo;(x)=(1,2x)$. At the moment $x=1$ the trajectory passes through the point $(1,1)$ with a velocity $(1,2)$. Thus, the tangent line at that moment is\n$$\\frac{x-1}{1} = \\frac{y-1}{2} \\Rightarrow y-1 = 2(x-1) \\Rightarrow y = 2x-1,$$\nand the normal line is\n$$\\frac{x-1}{2} = \\frac{y-1}{-1} \\Rightarrow y-1 = \\frac{-1}{2}(x-1) \\Rightarrow y = \\frac{-x}{2}+\\frac{3}{2}.$$\nTangent line to a trajectory in the space The concept of tangent line to a trajectory can be easily extended from the real plane to the three-dimensional space $\\mathbb{R}^3$.\nIf $f(t)=(x(t),y(t),z(t))$, $t\\in \\mathbb{R}$, is a trajectory in the real space $\\mathbb{R}^3$, then at the moment $a$, the moving object that follows this trajectory will be at the position $P=(x(a),y(a),z(a))$ with a velocity $\\mathbf{v}=f\u0026rsquo;(t)=(x\u0026rsquo;(t),y\u0026rsquo;(t),z\u0026rsquo;(t))$. Thus, the tangent line to $f$ at this moment have the following vectorial equation\n$$ \\begin{aligned} l\u0026amp;: (x,y,z)=(x(a),y(a),z(a))+t(x\u0026rsquo;(a),y\u0026rsquo;(a),z\u0026rsquo;(a)) =\\newline \u0026amp;= (x(a)+tx\u0026rsquo;(a),y(a)+ty\u0026rsquo;(a),z(a)+tz\u0026rsquo;(a)), \\end{aligned} $$\nand the Cartesian equations are $$\\frac{x-x(a)}{x\u0026rsquo;(a)}=\\frac{y-y(a)}{y\u0026rsquo;(a)}=\\frac{z-z(a)}{z\u0026rsquo;(a)},$$ provided that $x\u0026rsquo;(a)\\neq 0$, $y\u0026rsquo;(a)\\neq 0$ y $z\u0026rsquo;(a)\\neq 0$.\nExample. Given the trajectory $f(t)=(\\cos t, \\sin t, t)$, $t\\in \\mathbb{R}$ in the real space, at the moment $t=\\pi/2$ the trajectory passes through the point\n$$f(\\pi/2)=(\\cos(\\pi/2),\\sin(\\pi/2),\\pi/2)=(0,1,\\pi/2),$$\nwith velocity\n$$\\mathbf{v}=f\u0026rsquo;(\\pi/2)=(-\\sin(\\pi/2),\\cos(\\pi/2), 1)=(-1,0,1),$$\nand the tangent line to the graph of $f$ at that moment is\n$$l:(x,y,z)=(0,1,\\pi/2)+t(-1,0,1) = (-t,1,t+\\pi/2).$$\nInteractive Example\nNormal plane to a trajectory in the space In the three-dimensional space $\\mathbb{R}^3$, the normal line to a trajectory is not unique. There are an infinite number of normal lines and all of them are in the normal plane.\nIf $f(t)=(x(t),y(t),z(t))$, $t\\in \\mathbb{R}$, is a trajectory in the real space $\\mathbb{R}^3$, then at the moment $a$, the moving object that follows this trajectory will be at the position $P=(x(a),y(a),z(a))$ with a velocity $\\mathbf{v}=f\u0026rsquo;(t)=(x\u0026rsquo;(t),y\u0026rsquo;(t),z\u0026rsquo;(t))$. Thus, using the velocity vector as normal vector the normal plane to $f$ at this moment have the following vectorial equation\n$$ \\begin{aligned} \\Pi \u0026amp;: (x-x(a),y-y(a),z-z(a))(x\u0026rsquo;(a),y\u0026rsquo;(a),z\u0026rsquo;(a)) = 0\\newline \u0026amp;= x\u0026rsquo;(a)(x-x(a))+y\u0026rsquo;(a)(y-y(a))+z\u0026rsquo;(a)(z-z(a))=0. \\end{aligned} $$\nExample. For the trajectory of the previous example $f(t)=(\\cos t, \\sin t, t)$, $t\\in \\mathbb{R}$, at the moment $t=\\pi/2$ the trajectory passes through the point\n$$f(\\pi/2)=(\\cos(\\pi/2),\\sin(\\pi/2),\\pi/2)=(0,1,\\pi/2),$$\nwith velocity\n$$\\mathbf{v}=f\u0026rsquo;(\\pi/2)=(-\\sin(\\pi/2),\\cos(\\pi/2), 1)=(-1,0,1),$$ and normal plane to the graph of $f$ at that moment is\n$$\\Pi:\\left(x-0,y-1,z-\\frac{\\pi}{2}\\right)(-1,0,1) =0 \\Leftrightarrow -x+z-\\frac{\\pi}{2}=0.$$\nInteractive Example\nFunciones de varias variables En numerosos problemas de geometría, física y ciencias naturales nos encontramos a menudo con variables o factores que dependen o están relacionados con otros dos, tres o más factores:\nEl área de un triángulo depende de dos factores que son su base y su altura. El volumen que ocupa un gas perfecto depende de dos factores que son su presión y su temperatura. El camino recorrido por un cuerpo en un movimiento de caída libre depende de multitud de factores entre los que cabe destacar: el tiempo que dure la caída, el área de la sección transversal del cuerpo, la latitud del lugar, la altura sobre el nivel del mar, la presión del aire, la temperatura del aire, etc. Estas dependencias se expresan con funciones de varias variables.\nDefinición - Función de varias variables. Una función de $n$ variables de un conjunto $A_1\\times \\cdots \\times A_n$ en un conjunto $B$, es una relación que asocia a cada tupla $(a_1,\\ldots,a_n)\\in A_1\\times \\cdots\\times A_n$ un único elemento de $B$ que se denota $f(a_1,\\ldots,a_n)$, y se llama imagen de $(a_1,\\ldots,a_n)$ mediante $f$.\n$$ \\begin{array}{lccc} f: \u0026amp; A_1\\times\\cdots\\times A_n \u0026amp; \\longrightarrow \u0026amp; B\\newline \u0026amp;(a_1,\\ldots,a_n) \u0026amp; \\longrightarrow \u0026amp; f(a_1,\\ldots,a_n) \\end{array} $$\nCuando $A_1,\\ldots,A_n,B\\subseteq \\mathbb{R}$, entonces se dice que $f$ es una función real de $n$ variables reales o bien un campo escalar.\nEjemplos.\nEl área de un triángulo es la función real de dos variables reales $$f(x,y)=\\frac{xy}{2}.$$\nEl volumen de un gas perfecto es otra función real de dos variables\n$$v=f(t,p)=\\frac{nRt}{p},$$\ncon $n$ y $R$ constantes.\nGráfica de una función de dos variables La representación gráfica cartesiana de una función de dos variables $f(x,y)$ es una superficie del espacio real $\\mathbb{R}^3$ donde cada punto de la superficie tiene coordenadas $(x,y,z)$, siendo $z=f(x,y)$.\nEjemplos. La función $f(x,y)=\\dfrac{xy}{2}$ que mide el área de un triángulo de base $x$ y altura $y$ tiene la siguiente representación gráfica:\nY la función $\\displaystyle f(x,y)=\\frac{\\operatorname{sen}(x^2+y^2)}{\\sqrt{x^2+y^2}}$ tiene la siguiente representación gráfica tan peculiar:\nConjunto de nivel de un campo escalar Definición - Conjunto de nivel. Dado un campo ecalar $f:\\mathbb{R}^n\\rightarrow \\mathbb{R}$, se llama conjunto de nivel $c$ de $f$ al conjunto $$C_{f,c}={(x_1,\\ldots,x_n): f(x_1,\\ldots,x_n)=c}.$$ Ejemplo. Si $f(x,y)=x^2+y^2$ y $P=(1,1)$, el conjunto de nivel de $f$ que incluye al punto $P$ es\n$$C_{f,2} = {(x,y): f(x,y)=f(1,1)=2} = {(x,y): x^2+y^2=2},$$\nque es la circunferencia del plano real centrada en el origen y de radio $\\sqrt{2}$.\nFunciones parciales Definición - Función parcial. Dado un campo ecalar $f:\\mathbb{R}^n\\rightarrow \\mathbb{R}$, se llama función parcial $i$-esima de $f$ a cualquier función $f_i:\\mathbb{R}\\rightarrow \\mathbb{R}$ que resulta de fijar todas las variables de $f$ como constantes, excepto la variable $i$, es decir:\n$$f_i(x)=f(c_1,\\ldots,c_{i-1},x,c_{i+1},\\ldots,c_{n}),$$\ncon $c_j$ $(j=1,\\ldots, n,\\ j\\neq i)$ constantes.\nEjemplo. Si consideramos la función del área de un triángulo\n$$f(x,y)=\\frac{xy}{2},$$\ny fijamos el valor de la base $x=c$, entonces el área del triángulo ya sólo depende de la altura y $f$ se convierte en una función de una sola variable, que es la función parcial:\n$$f_1(y)=f(c,y)=\\frac{cy}{2},$$\ncon $c$ constante.\nNoción de derivada parcial Variación de una función con respecto a una variable Al igual que medíamos la variación de una función de una variable, tiene sentido medir la variación de una función de varias variables con respecto a cada una de sus variables.\nSea $z=f(x,y)$ un campo escalar de $\\mathbb{R}^2$. Si estamos en el punto $(x_0,y_0)$ y nos movemos una cantidad $\\Delta x$ en la dirección del eje $X$, entonces, al mantenerse la coordenada $y$ constante, pasaremos desde el punto $(x_0,y_0)$ al punto $(x_0+\\Delta x,y_0)$, y la variación que experimenta la función será\n$$\\Delta z=f(x_0+\\Delta x,y_0)-f (x_0,y_0).$$\nLa variación relativa que experimenta la función con respecto a la variable $x$ vendrá dada por el cociente\n$$\\frac{\\Delta z}{\\Delta x}=\\frac{f(x_0+\\Delta x,y_0)-f(x_0,y_0)}{\\Delta x}.$$\nTasa de variación instantánea de un campo escalar con respecto a una variable Si en lugar de medir la variación de una función con respecto a una variable en un intervalo, medimos la variación en un punto, es decir, cuando $\\Delta x$ tiende a 0, entonces obtenemos una tasa de variación instantánea:\n$$\\lim_{\\Delta x\\rightarrow 0}\\frac{\\Delta z}{\\Delta x}=\\lim_{\\Delta x \\rightarrow 0}\\frac{f(x_0+\\Delta x,y_0)-f(x_0,y_0)}{\\Delta x}.$$\nAl valor del límite, cuando existe, también se le conoce como derivada parcial de $f$ con respecto a la variable $x$ en el punto $(x_0,y_0)$ y se nota\n$$\\frac{\\partial f}{\\partial x}(x_0,y_0).$$\nEsta derivada parcial mide la tasa de variación instantánea de $f$ en el punto $P=(x_0,y_0)$ cuando $P$ se mueve en la dirección del eje $X$.\nInterpretación geométrica de la derivada parcial Geométricamente, $z=f(x,y)$ define una superficie. Si se corta esta superficie con el plano de ecuación $y=y_0$ (es decir, si $y$ se fija como una constante), la intersección de este plano con la superficie es una curva plana cuya pendiente en el punto $(x_0,y_0)$ es la derivada parcial de $f$ con respecto a $x$ en el punto $(x_0,y_0)$.\nDerivada parcial El concepto de derivada parcial visto para funciones de dos variables puede extenderse fácilmente para funciones de $n$ variables.\nDefinición - Derivada parcial. Dada una función de $n$ variables $f(x_1,\\ldots,x_n)$, se dice que $f$ es derivable parcialmente con respecto a la variable $x_i$ en el punto $a=(a_1,\\ldots,a_n)$ si existe el límite\n$$\\lim_{h\\rightarrow 0} \\frac{f(a_1,\\ldots,a_{i-1},a_i+h,a_{i+1},\\ldots,a_n)-f(a_1,\\ldots,a_{i-1},a_i,a_{i+1},\\ldots,a_n)} {h}.$$\nEn tal caso, al valor del límite se le llama derivada parcial de $f$ en $a$ con respecto a la variable $x_i$, y se denota\n$$f\u0026rsquo;_{x_i}(a)=\\frac{\\partial f}{\\partial x_i}(a).$$\nLa definición de derivada para funciones de una variable es un caso particular de esta definición para $n=1$.\nCálculo de la derivada parcial Al medir la variación de $f$ con respecto a la variación de una sola de sus variables $x_i$ en un punto $a=(a_1,\\ldots,a_n)$, el resto de las variables se pueden considerar como constantes y, en tal caso, podemos ver a $f$ como una función parcial $i$-ésima\n$$f_i(x_i)=f(a_1,\\ldots,a_{i-1},x_i,a_{i+1},\\ldots,a_n).$$\nLa derivada parcial de $f$ con respecto a $x_i$ puede calcularse derivando esta función:\n$$\\frac{\\partial f}{\\partial x_i}(a)=f_i\u0026rsquo;(a_i).$$\nRegla. Para derivar parcialmente $f(x_1,\\ldots,x_n)$ con respecto a una variable $x_i$, se deriva $f$ como si la única variable fuese $x_i$, tratando el resto de las variables como constantes.\nEjemplo En la ecuación de estado de los gases perfectos, el volumen es una función que depende de dos variables\n$$v(t,p)=\\frac{nRt}{p},$$\ndonde $t$ mide la temperatura, $p$ la presión y $n$ y $R$ son constantes.\nLa tasa de variación instantánea que experimenta el volumen con respecto a la presión viene dada por la derivada parcial de $v$ con respecto a $p$.\nPara calcular esta derivada parcial se fija $t$ como constante y se deriva $v$ como si la única variable fuese $p$:\n$$\\frac{\\partial v}{\\partial p}(t,p)=\\frac{d}{dp}\\left(\\frac{nRt}{p}\\right)_{\\mbox{$t=$cte}}=\\frac{-nRt}{p^2}.$$\nDel mismo modo, la tasa de variación instantánea del volumen conrespecto a la temperatura es:\n$$\\frac{\\partial v}{\\partial t}(t,p)=\\frac{d}{dt}\\left(\\frac{nRt}{p}\\right)_{\\mbox{$p=$cte}}=\\frac{nR}{p}.$$\nVector gradiente Definición - Vector gradiente. Dado un campo escalar $f(x_1,\\ldots,x_n)$, se llama gradiente de $f$, y se escribe $\\nabla f$, a la función que a cada punto $a=(a_1,\\ldots,a_n)$ le asigna el vector cuyas coordenadas cartesianas son las derivadas parciales de $f$ en $a$,\n$$\\nabla f(a)=\\left(\\frac{\\partial f}{\\partial x_1}(a),\\ldots,\\frac{\\partial f}{\\partial x_n}(a)\\right).$$\nMás adelante se mostrará que vector gradiente en un punto dado tiene la misma magnitud y dirección que la velocidad máxima de variación de la función en ese punto.\nDe este modo, , mientras que $-\\nabla f(a)$ indica la dirección de máximo decrecimiento.\nEjemplo. Al calentar una superficie la temperatura $t$ (en ºC) en cada punto $(x,y,z)$ (en m) de dicha superficie viene dada por la función:\n$$t(x,y,z)=\\frac{x}{y}+z^2.$$\nLa dirección en la que más rápidamente aumenta la temperatura nos la da el vector gradiente\n$$\\nabla t(x,y,z)=\\left(\\frac{\\partial t}{\\partial x}(x,y,z),\\frac{\\partial t}{\\partial y}(x,y,z),\\frac{\\partial t}{\\partial z}(x,y,z)\\right)=\\left(\\frac{1}{y},\\frac{-x}{y^2},2z\\right).$$\nSi estamos, por ejemplo, en el punto $(2,1,1)$ dicha dirección será\n$$\\nabla t(2,1,1)=\\left(\\frac{1}{1},\\frac{-2}{1^2},2\\cdot 1\\right)=(1,-2,2),$$\ny su magnitud\n$$|\\nabla f(2,1,1)|=|\\sqrt{1^2+(-2)^2+2^2}|=|\\sqrt{9}|=3 \\mbox{ $^\\circ$C/m}.$$\nComposición de una trayectoria con un campo escalar Regla de la cadena Si $f:\\mathbb{R}^n\\rightarrow \\mathbb{R}$ es un campo escalar y $g:\\mathbb{R}\\rightarrow \\mathbb{R}^n$ es una trayectoría, entonces es posible componer $g$ con $f$, de manera que $f\\circ g:\\mathbb{R}\\rightarrow \\mathbb{R}$ es una función real de variable real.\nTeorema - Regla de la cadena. Si $f:\\mathbb{R}^n\\rightarrow \\mathbb{R}$ es un campo escalar y $g:\\mathbb{R}\\rightarrow \\mathbb{R}^n$ es una trayectoría, entonces\n$$(f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t).$$\nEjemplo. Si se toma el campo escalar del plano real $f(x,y)=x^2y$ y la trayectoria $g(t)=(\\cos t,\\operatorname{sen} t)$ $t\\in [0,2\\pi]$ del mismo plano, entonces\n$$\\nabla f(x,y) = (2xy, x^2) \\quad \\mbox{y} \\quad g\u0026rsquo;(t) = (-\\operatorname{sen} t, \\cos t),$$\ny\n$$(f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t) = (2\\cos t\\operatorname{sen} t,\\cos^2 t)\\cdot (-\\operatorname{sen} t,\\cos t) = -2\\cos t\\operatorname{sen}^2 t+\\cos^3 t.$$\nSe puede llegar al mismo resultado, sin aplicar la regla de la cadena, derivando directamente la función compuesta\n$$(f\\circ g)(t) = f(g(t)) = f(\\cos t, \\operatorname{sen} t) = \\cos^2 t\\operatorname{sen} t,$$\nde manera que\n$$(f\\circ g)\u0026rsquo;(t) = 2\\cos t(-\\operatorname{sen} t)\\operatorname{sen} t+\\cos^2 t \\cos t = -2\\cos t\\operatorname{sen}^2 t+\\cos^3 t.$$\nLa regla de la cadena para la composición de un campo escalar con una trayectoria permite obtener fácilmente el álgebra de derivadas para funciones reales de una variable real:\n$$ \\begin{aligned} (u+v)\u0026rsquo; \u0026amp;= u\u0026rsquo;+v\u0026rsquo;\\newline (uv)\u0026rsquo; \u0026amp;= u\u0026rsquo;v+uv\u0026rsquo;\\newline \\left(\\frac{u}{v}\\right)\u0026rsquo; \u0026amp;= \\frac{u\u0026rsquo;v-uv\u0026rsquo;}{v^2}\\newline (u\\circ v)\u0026rsquo; \u0026amp;= u\u0026rsquo;(v)v' \\end{aligned} $$\nPara deducir la derivada de la suma se toma el campo escalar $f(x,y)=x+y$ y la trayectoria $g(t)=(u(t),v(t))$, de manera que aplicando la regla de la cadena se tiene\n$$(u+v)\u0026rsquo;(t) = (f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t) = (1,1)\\cdot (u\u0026rsquo;(t),v\u0026rsquo;(t)) = u\u0026rsquo;(t)+v\u0026rsquo;(t).$$\ny para deducir derivada del producto, tomando $f(x,y)=xy$, se tiene\n$$(uv)\u0026rsquo;(t) = (f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t) = (v(t),u(t))\\cdot (u\u0026rsquo;(t),v\u0026rsquo;(t)) = u\u0026rsquo;(t)v(t)+u(t)v\u0026rsquo;(t).$$\nDerivada direccional Para un campo escalar $f(x,y)$ de $\\mathbb{R}^2$ y un punto $P=(x_0,y_0)$, se vió que $\\dfrac{\\partial f}{\\partial x}$ es la tasa de variación instantánea de $f$ con respecto a $x$ en el punto $P$, es decir, cuando nos desplazamos desde el punto $P$ en la dirección del eje $X$.\nDel mismo modo, $\\dfrac{\\partial f}{\\partial y}$ es la tasa de variación instantánea de $f$ con respecto a $y$ en el punto $P$, es decir, cuando nos desplazamos desde el punto $P$ en la dirección del eje $Y$.\nPero, ¿qué pasa si nos movemos en cualquier otra dirección?\nLa tasa de variación instantánea de $f$ en un punto $P$ en la dirección de un vector unitario cualquiera $u$ se conoce como derivada direccional.\nDefinición - Derivada direccional. Dado un campo escalar $f$ de $\\mathbb{R}^n$, un punto $P$ y un vector unitario $\\mathbf{u}$ en ese espacio, el límite\n$$f\u0026rsquo;{\\mathbf{u}}(P) = \\lim{h\\rightarrow 0}\\frac{f(P+h\\mathbf{u})-f(P)}{h},$$\ncuando existe, se llama derivada direccional de $f$ en el punto $P$ en la dirección de $\\mathbf{u}$.\nSi se considera un vector unitario $\\mathbf{u}$, la trayectoria que pasa por $P$, dirigida por $\\mathbf{u}$, tiene ecuación\n$$g(t)=P+t\\mathbf{u},\\ t\\in\\mathbb{R},$$ que para $t=0$, pasa por $P=g(0)$ con velocidad $\\mathbf{u}=g\u0026rsquo;(0)$.\nAsí, la tasa de variación de $f$ a partir del punto $P$ en la dirección de $\\mathbf{u}$ es\n$$(f\\circ g)\u0026rsquo;(0) = \\nabla f(g(0))\\cdot g\u0026rsquo;(0) = \\nabla f(P)\\cdot \\mathbf{u}.$$\nObsérvese que las derivadas parciales son las derivadas direccionales en las direcciones de los vectores coordenados.\nEjemplo. Dada la función $f(x,y) = x^2+y^2$, su vector gradiente es\n$$\\nabla f(x,y) = (2x,2y),$$\nde manera que la derivada direccional en el punto $P=(1,1)$, en la dirección del vector unitario $\\mathbf{u}=(1/\\sqrt{2},1/\\sqrt{2})$ es\n$$f\u0026rsquo;_{\\mathbf{u}}(P) = \\nabla f(P)\\cdot \\mathbf{u} = (2,2)\\cdot(1/\\sqrt{2},1/\\sqrt{2}) = \\frac{2}{\\sqrt{2}}+\\frac{2}{\\sqrt{2}} = \\frac{4}{\\sqrt{2}}.$$\nPara calcular la derivada direccional en la dirección de un vector no unitario $\\mathbf{v}$, basta con convertirlo en unitario mediante la transformación\n$$\\mathbf{v\u0026rsquo;}=\\frac{\\mathbf{v}}{|\\mathbf{v}|}.$$\nCrecimiento de un campo escalar a partir del gradiente Como se ha visto, para un vector unitario $\\mathbf{u}$\n$$f\u0026rsquo;_{\\mathbf{u}}(P) = \\nabla f(P)\\cdot \\mathbf{u} = |\\nabla f(P)|\\cos \\theta,$$\ndonde $\\theta$ es el ángulo que forma $\\mathbf{u}$ con el vector gradiente $\\nabla f(P)$.\nTeniendo en cuenta que $-1\\leq \\cos\\theta\\leq 1$, para cualquier vector $\\mathbf{u}$ se cumple\n$$-|\\nabla f(P)|\\leq f\u0026rsquo;_{\\mathbf{u}}(P)\\leq |\\nabla f(P)|.$$\nAdemás, si $\\mathbf{u}$ tiene la misma dirección y sentido que el gradiente, se tiene\n$$f\u0026rsquo;_{\\mathbf{u}}(P)=\\lvert \\nabla f(P)\\rvert \\cos 0=\\lvert \\nabla f(P)\\rvert .$$\nPor tanto, el crecimiento máximo de un campo escalar se produce en la dirección y sentido del gradiente.\nDel mismo modo, si $\\mathbf{u}$ tiene la misma dirección y sentido opuesto al gradiente, se tiene\n$$f\u0026rsquo;_{\\mathbf{u}}(P)=\\lvert \\nabla f(P)\\rvert \\cos \\pi=-\\lvert \\nabla f(P)\\rvert.$$\nPor tanto, el decrecimiento máximo de un campo escalar se produce en la dirección y sentido opuesto al gradiente.\nDerivación implícita Si se sabe que la ecuación $$f(x,y)=0$$ define a $y$ como función de $x$, $y=h(x)$, alrededor de cierto valor $x=x_0$ para el que $y=h(x_0)=y_0$, entonces, si se toma la trayectoria $g(x)=(x,h(x))$, la ecuación anterior se puede expresar como\n$$(f\\circ g)(x) = f(g(x)) = f(x,h(x))=0,$$\nde modo que usando la regla de la cadena sobre se tiene\n$$(f\\circ g)\u0026rsquo;(x) = \\nabla f(g(x))\\cdot g\u0026rsquo;(x) = \\left(\\frac{\\partial f}{\\partial x}, \\frac{\\partial f}{\\partial y}\\right)\\cdot (1,h\u0026rsquo;(x)) = \\frac{\\partial f}{\\partial x}+\\frac{\\partial f}{\\partial y}h\u0026rsquo;(x) = 0,$$\nde donde se deduce\n$$y\u0026rsquo;=h\u0026rsquo;(x)=\\frac{-\\dfrac{\\partial f}{\\partial x}}{\\dfrac{\\partial f}{\\partial y}}$$\nA este proceso que permite obtener $y\u0026rsquo;$ en un entorno de $x_0$ sin disponer de la fórmula explícita $y=h(x)$, se le llama derivación implícita.\nEjemplo. La ecuación $x^2+y^2=1$ define a la circunferencia de radio 1 centrada en el origen de coordenadas, que también puede expresarse como\n$$f(x,y) = x^2+y^2-1 = 0.$$\nSi se piensa en $y$ como función implícita de $x$, se tiene\n$$y\u0026rsquo;=\\frac{-\\dfrac{\\partial f}{\\partial x}}{\\dfrac{\\partial f}{\\partial y}} = \\frac{-2x}{2y}=\\frac{-x}{y}.$$\nPodría llegarse al mismo resultado, despejando $y$ de la ecuación de la circunferencia,\n$$x^2+y^2=1 \\Leftrightarrow y^2=1-x^2 \\Leftrightarrow y= \\pm\\sqrt{1-x^2}.$$\nSi se toma la raíz positiva, que corresponde a la semicircunferencia superior, la derivada vale\n$$y\u0026rsquo; = \\frac{1}{2\\sqrt{1-x^2}}(-2x) = \\frac{-x}{\\sqrt{1-x^2}},$$\nque coincide con el resultado de la derivación implícita, teniendo en cuenta que $y=\\sqrt{1-x^2}$.\nPropiedad del gradiente Teorema. Sea $C$ el conjunto de nivel de un campo escalar $f$ que incluye a un punto $P$. Si $\\mathbf{v}$ es la velocidad al pasar por $P$ de una trayectoria que circule por $C$, entonces\n$$\\nabla f(P) \\cdot \\mathbf{v} = 0.$$\nEs decir, el vector gradiente de $f$ en $P$ es normal a $C$ en $P$, siempre que no sea nulo.\nDemostración. Si se considera una trayectoria $g(t)$ a lo largo del conjunto de nivel $C$ que pase por $P=g(t_0)$, de modo que $\\mathbf{v}=g\u0026rsquo;(t_0)$, entonces\n$$(f\\circ g)(t) = f(g(t)) = f(P),$$\nque es constante para cualquier $t$, y al aplicar la regla de la cadena se tiene\n$$(f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t) = 0,$$\nde modo que, cuanto $t=t_0$, se tiene\n$$\\nabla f(P)\\cdot \\mathbf{v} = 0.$$\nRectas normal y tangente a una linea en el plano Según el resultado anterior, la recta normal a una línea $f(x,y)=0$ en un punto $P=(x_0,y_0)$, tiene ecuación\n$$P+t\\nabla f(P) = (x_0,y_0)+t\\nabla f(x_0,y_0).$$\nEjemplo. Dado el campo escalar $f(x,y)=x^2+y^2-1$, y el punto $P=(0,1)$, resulta que el conjunto de nivel que pasa por $P$, para el que $f(x,y)=f(P)=0$ es la circunferencia de radio 1 centrada en el origen. Así pues, tomando como vector normal el gradiente de $f$ $$\\nabla f(x,y) = (2x,2y),$$ que en el punto $P=(0,1)$ vale $\\nabla f(0,1) = (0,2)$, la recta normal a la circunferencia en $P$ es\n$$P+t\\nabla f(P) = (0,1)+t(0,2) = (0,1+2t),$$\nque se trata de la recta vertical $x=0$, que coincide con el eje $Y$.\ny la recta tangente a la circunferencia en $P$ es\n$$((x,y)-P)\\cdot \\nabla f(P) = ((x,y)-(0,1))\\cdot (0,2) = (x,y-1)\\cdot(0,2) = 2(y-1) = 0 \\Rightarrow y=1.$$\nRecta normal y plano tangente a una superficie De mismo modo, si en lugar de una línea en el plano se tiene una superficie $f(x,y,z)=0$, en el punto $P=(x_0,y_0,z_0)$ la recta normal tiene ecuación\n$$P+t\\nabla f(P) = (x_0,y_0,z_0)+t\\nabla f(x_0,y_0,z_0).$$\nDada el campo escalar $f(x,y,z)=x^2+y^2-z$, y el punto $P=(1,1,2)$, resulta que el conjunto de nivel que pasa por $P$, para el que $f(x,y)=f(P)=0$, es el paraboloide $z=x^2+y^2$. Así pues, tomando como vector normal el gradiente de $f$, que vale\n$$\\nabla f(x,y,z) = (2x,2y,-1),$$\nque en el punto $P=(1,1,2)$ vale $\\nabla f(1,1,2) = (2,2,-1)$, la recta normal al paraboloide en $P$ es\n$$P+t\\nabla f(P) = (1,1,2)+t\\nabla f(1,1,2) = (1,1,2)+t(2,2,-1) = (1+2t,1+2t,2-t),$$\nque se trata de la recta de ecuaciones $x=y$ y $x=5-2z$.\nY el plano tangente al paraboloide en $P$ es\n$$ \\begin{aligned} ((x,y,z)-P)\\cdot \\nabla f(P) \u0026amp;= ((x,y,z)-(1,1,2))(2,2,-1) = (x-1,y-1,z-2)(2,2,-1)=\\newline \u0026amp;= 2(x-1)+2(y-1)-(z-2) = 2x+2y-z-2= 0. \\end{aligned} $$\nEjemplo. La gráfica del paraboloide $f(x,y,z)=x^2+y^2-z=0$ y su plano tangente en el punto $P=(1,1,2)$ es\nDerivadas parciales de segundo orden Las derivadas parciales de una función son, a su vez, funciones de varias variables que muchas veces pueden volverse a derivar parcialmente con respecto a alguna de sus variables.\nDefinición - Derivadas parciales de segundo orden. Si una función $f(x_1,\\ldots,x_n)$ tiene derivada parcial $$f\u0026rsquo;{x_i}(x_1,\\ldots,x_n)$$ con respecto a la variable $x_i$ en un conjunto $A$, entonces podemos derivar de nuevo parcialmente $f\u0026rsquo;{x_i}$ con respecto a la variable $x_j$. Esta segunda derivada, cuando existe, se llama derivada parcial de segundo orden de $f$ con respecto a las variables $x_i$ y $x_j$, y se nota\n$$\\frac{\\partial ^2 f}{\\partial x_j \\partial x_i}= \\frac{\\partial}{\\partial x_j}\\left(\\frac{\\partial f}{\\partial x_i}\\right).$$\nDe forma análoga se definen las derivadas de orden superior.\nEjemplo. La función de dos variables $$f(x,y)=x^y$$ tiene cuatro derivadas parciales de segundo orden, que son:\n$$\\begin{aligned} \\frac{\\partial^2 f}{\\partial x^2}(x,y) \u0026amp;= \\frac{\\partial}{\\partial x}\\left(\\frac{\\partial f}{\\partial x}(x,y)\\right) = \\frac{\\partial}{\\partial x}\\left(yx^{y-1}\\right) = y(y-1)x^{y-2},\\newline \\frac{\\partial^2 f}{\\partial y \\partial x}(x,y) \u0026amp;= \\frac{\\partial}{\\partial y}\\left(\\frac{\\partial f}{\\partial x}(x,y)\\right) = \\frac{\\partial}{\\partial y}\\left(yx^{y-1}\\right) = x^{y-1}+yx^{y-1}\\log x,\\newline \\frac{\\partial^2 f}{\\partial x \\partial y}(x,y) \u0026amp;= \\frac{\\partial}{\\partial x}\\left(\\frac{\\partial f}{\\partial y}(x,y)\\right) = \\frac{\\partial}{\\partial x}\\left(x^y\\log x \\right) = yx^{y-1}\\log x+x^y\\frac{1}{x},\\newline \\frac{\\partial^2 f}{\\partial y^2}(x,y) \u0026amp;= \\frac{\\partial}{\\partial y}\\left(\\frac{\\partial f}{\\partial y}(x,y)\\right) = \\frac{\\partial}{\\partial y}\\left(x^y\\log x \\right) = x^y(\\log x)^2.\\end{aligned}$$\nMatriz hessiana Definición - Matriz hessiana. Dada una función de varias variables $f(x_1,\\ldots,x_n)$, para la que existen todas sus derivadas parciales de segundo orden en un punto $a=(a_1,\\ldots,a_n)$, se define la matriz hessiana de $f$ en $a$, y se nota $\\nabla^2f(a)$, como la matriz cuadrada cuyos elementos son\n$$\\nabla^2f(a)=\\left( \\begin{array}{cccc} \\dfrac{\\partial^2 f}{\\partial x_1^2}(a) \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_1 \\partial x_2}(a) \u0026amp; \\cdots \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_1 \\partial x_n}(a)\\newline \\dfrac{\\partial^2 f}{\\partial x_2 \\partial x_1}(a) \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_2^2}(a) \u0026amp; \\cdots \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_2 \\partial x_n}(a)\\newline \\vdots \u0026amp; \\vdots \u0026amp; \\ddots \u0026amp; \\vdots \\newline \\dfrac{\\partial^2 f}{\\partial x_n \\partial x_1}(a) \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_n \\partial x_2}(a) \u0026amp; \\cdots \u0026amp; \\dfrac{\\partial^2 f}{\\partial x_n^2}(a) \\end{array} \\right).$$\nAl determinante de esta matriz se le llama hessiano de $f$ en $a$, y se nota $Hf(a)=\\lvert \\nabla^2f(a)\\rvert$.\nEjemplo. Consideremos de nuevo la función de dos variables $f(x,y)=x^y$. Su matriz hessiana es\n$$\\nabla^2f(x,y)=\\left( \\begin{array}{cc} \\dfrac{\\partial^2 f}{\\partial x^2} \u0026amp; \\dfrac{\\partial^2 f}{\\partial x \\partial y}\\newline \\dfrac{\\partial^2 f}{\\partial y \\partial x} \u0026amp; \\dfrac{\\partial^2 f}{\\partial y^2} \\end{array} \\right) \\left( \\begin{array}{cc} y(y-1)x^{y-2} \u0026amp; x^{y-1}(y\\log x+1) \\newline x^{y-1}(y\\log x+1) \u0026amp; x^y(\\log x)^2 \\end{array} \\right).$$\nEn el punto $(1,2)$ la matriz vale\n$$\\nabla^2f(1,2)=\\left( \\begin{array}{cc} 2(2-1)1^{2-2} \u0026amp; 1^{2-1}(2\\log 1+1) \\newline 1^{2-1}(2\\log 1+1) \u0026amp; 1^2(\\log 1)^2 \\end{array} \\right) \\left( \\begin{array}{cc} 2 \u0026amp; 1 \\newline 1 \u0026amp; 0 \\end{array} \\right).$$\nY el hessiano en dicho punto vale\n$$Hf(1,2)=\\left| \\begin{array}{cc} 2 \u0026amp; 1 \\newline 1 \u0026amp; 0 \\end{array} \\right|= 2\\cdot 0-1\\cdot1= -1. $$\nIgualdad de las derivadas cruzadas En el ejemplo anterior se aprecia que las derivadas cruzadas de segundo orden $\\frac{\\partial^2 f}{\\partial y\\partial x}$ y $\\frac{\\partial^2 f}{\\partial x\\partial y}$ coinciden. Ello es debido al siguiente teorema:\nTeorema - Igualdad derivadas cruzadas. Si $f(x,y)$ es una función tal que sus derivadas parciales $\\frac{\\partial f}{\\partial x}$, $\\frac{\\partial f}{\\partial y}$, $\\frac{\\partial^2 f}{\\partial y\\partial x}$ y $\\frac{\\partial^2 f}{\\partial x\\partial y}$ existen y son continuas en un conjunto abierto $A$, entonces\n$$\\frac{\\partial^2 f}{\\partial y\\partial x}=\\frac{\\partial^2 f}{\\partial x\\partial y}.$$\nUna consecuencia del teorema es que, al calcular una derivada parcial de segundo orden que cumpla lo anterior, ¡el orden en que se realicen las derivadas parciales no importa!\nSi el teorema se cumple para todas las derivadas parciales de segundo orden, entonces la matriz hessiana es simétrica.\nFórmula de Taylor Aproximación lineal de un campo escalar Ya se vio cómo aproximar funciones de una variable mediante polinomios de Taylor. Esto también se puede generalizar a la aproximación de campos escalares mediante polinomios de varias variables.\nSi $P$ es un punto del dominio de un campo escalar $f$ y $\\mathbf{v}$ un vector, la fórmula de Taylor de primer grado de $f$ alrededor del punto $P$ es\n$$f(P+\\mathbf{v}) = f(P) + \\nabla f(P)\\cdot \\mathbf{v} +R^1_{f,P}(\\mathbf{v}),$$\ndonde\n$$ \\begin{aligned} P^1_{f,P}(\\mathbf{v}) = f(P)+\\nabla f(P)\\mathbf{v} \\end{aligned} $$\nes el polinomio de Taylor de primer grado de $f$ en el punto $P$, y $R^1_{f,P}(\\mathbf{v})$ es el resto de taylor para el vector $\\mathbf{v}$, y mide el error cometido en la aproximación.\nSe cumple que\n$$\\lim_{|\\mathbf{v}|\\rightarrow 0} \\frac{R^1_{f,P}(\\mathbf{v})}{|\\mathbf{v}|} = 0$$\nObsérvese que el polinomio de Taylor de primer grado coincide con el plano tangente a $f$ en $P$.\nSi $f$ es un campo escalar de dos variables $f(x,y)$ y $P=(x_0,y_0)$, teniendo en cuenta que para un punto cualquiera $Q=(x,y)$, el vector $\\mathbf{v}=\\vec{PQ}=(x-x_0,y-y_0)$, el polinomio de Taylor de $f$ en el punto $P$, puede expresarse\n$$\\begin{aligned} P^1_{f,P}(x,y) \u0026amp;= f(x_0,y_0)+\\nabla f(x_0,y_0)(x-x_0,y-y_0) =\\newline \u0026amp;= f(x_0,y_0)+\\frac{\\partial f}{\\partial x}(x_0,y_0)(x-x_0)+\\frac{\\partial f}{\\partial y}(x_0,y_0)(y-y_0). \\end{aligned} $$\nEjemplo. Dado el campo escalar $f(x,y)=\\log(xy)$, su gradiente es\n$$\\nabla f(x,y) = \\left(\\frac{1}{x},\\frac{1}{y}\\right),$$\ny el polinomio de Taylor de primer grado en el punto $P=(1,1)$ es\n$$ \\begin{aligned} P^1_{f,P}(x,y) \u0026amp;= f(1,1) +\\nabla f(1,1)\\cdot (x-1,y-1) = \\newline \u0026amp;= \\log 1+(1,1)\\cdot(x-1,y-1) = x-1+y-1 = x+y-2.\\newline \\end{aligned} $$\nEste polinomio, permite aproximar el valor de $f$ cerca del punto $P$.\nPor ejemplo\n$$f(1.01,1.01) \\approx P^1_{f,P}(1.01,1.01) = 1.01+1.01-2 = 0.02.$$\nAproximación cuadrática de un campo escalar Si $P$ es un punto del dominio de un campo escalar $f$ y $\\mathbf{v}$ un vector, la fórmula de Taylor de segundo grado de $f$ alrededor del punto $P$ es\n$$f(P+\\mathbf{v}) = f(P) + \\nabla f(P)\\cdot \\mathbf{v} + \\frac{1}{2}\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v} + R^2_{f,P}(\\mathbf{v}),$$\ndonde\n$$ \\begin{aligned} P^2_{f,P}(\\mathbf{v})\u0026amp;=f(P)+\\nabla f(P)\\mathbf{v}+\\frac{1}{2}\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v} \\end{aligned} $$\nes el polinomio de Taylor de segundo grado de $f$ en el punto $P$, y $R^2_{f,P}(\\mathbf{v})$ es el resto de taylor para el vector $\\mathbf{v}$.\nSe cumple que\n$$\\lim_{|\\mathbf{v}\\rightarrow 0|} \\frac{R^2_{f,P}(\\mathbf{v})}{|\\mathbf{v}|^2} = 0$$\nlo que indica que el resto es mucho más pequeño que el cuadrado del módulo de $\\mathbf{v}$.\nSi $f$ es un campo escalar de dos variables $f(x,y)$ y $P=(x_0,y_0)$, el polinomio de Taylor de $f$ en el punto $P$, puede expresarse\n$$ \\begin{gathered} P^2_{f,P}(x,y) = f(x_0,y_0)+\\nabla f(x_0,y_0)(x-x_0,y-y_0) +\\newline +\\frac{1}{2}(x-x_0,y-y_0)\\nabla^2f(x_0,y_0)(x-x_0,y-y_0)= \\newline = f(x_0,y_0)+\\frac{\\partial f}{\\partial x}(x_0,y_0)(x-x_0)+\\frac{\\partial f}{\\partial y}(x_0,y_0)(y-y_0)+\\newline +\\frac{1}{2}\\left(\\frac{\\partial^2 f}{\\partial x^2}(x_0,y_0) (x-x_0)^2 + 2\\frac{\\partial^2 f}{\\partial y\\partial x}(x_0,y_0) (x-x_0)(y-y_0) + \\frac{\\partial^2 f}{\\partial y^2}(x_0,y_0) (y-y_0)^2\\right) \\end{gathered} $$\nEjemplo. Dado el campo escalar $f(x,y)=\\log(xy)$, su gradiente es\n$$\\nabla f(x,y) = \\left(\\frac{1}{x},\\frac{1}{y}\\right),$$\ny su matriz hessiana es\n$$Hf(x,y) = \\left( \\begin{array}{cc} \\frac{-1}{x^2} \u0026amp; 0\\newline 0 \u0026amp; \\frac{-1}{y^2} \\end{array} \\right)$$\ny el polinomio de Taylor de segundo grado en el punto $P=(1,1)$ es\n$$ \\begin{aligned} P^2_{f,P}(x,y) \u0026amp;= f(1,1) +\\nabla f(1,1)\\cdot (x-1,y-1) + \\frac{1}{2}(x-1,y-1)\\nabla^2f(1,1)\\cdot(x-1,y-1)=\\newline \u0026amp;= \\log 1+(1,1)\\cdot(x-1,y-1) + \\frac{1}{2}(x-1,y-1) \\left( \\begin{array}{cc} -1 \u0026amp; 0\\newline 0 \u0026amp; -1 \\end{array} \\right) \\left( \\begin{array}{c} x-1\\newline y-1 \\end{array} \\right) = \\newline \u0026amp;= x-1+y-1+\\frac{-x^2-y^2+2x+2y-2}{2} = \\frac{-x^2-y^2+4x+4y-6}{2}. \\end{aligned} $$\nAsí, $$f(1.01,1.01) \\approx P^1_{f,P}(1.01,1.01) = \\frac{-1.01^2-1.01^2+4\\cdot 1.01+4\\cdot 1.01-6}{2} = 0.0199$$.\nExtremos Definición - Máximo y mínimo relativos. Dado un campo escalar $f$ de $\\mathbb{R}^n$, se dice que un punto $P$ es un máximo relativo de $f$ si existe un valor $\\epsilon\u0026gt;0$ tal que\n$$f(P)\\geq f(X)\\ \\forall X, |\\vec{PX}|\u0026lt;\\epsilon.$$\nDel mismo modo se dice que un punto $P$ es un mínimo relativo de $f$ si existe un valor $\\epsilon\u0026gt;0$ tal que\n$$f(P)\\leq f(X)\\ \\forall X, |\\vec{PX}|\u0026lt;\\epsilon.$$\nA los máximos y mínimos de $f$ se les conoce como extremos relativos de $f$.\nAnulación del gradiente en los extremos Si $P$ es un extremo de un campo escalar $f$ de $\\mathbb{R}^n$, entonces $P$ es un punto crítico de $f$, es decir,\n$$\\nabla f(P) = 0.$$\nTomando la trayectoria que pasa por $P$ con la dirección y sentido del gradiente, $$g(t)=P+t\\nabla f(P),$$ la función $h=(f\\circ g)(t)$ nunca decrece ya que\n$$h\u0026rsquo;(t)= (f\\circ g)\u0026rsquo;(t) = \\nabla f(g(t))\\cdot g\u0026rsquo;(t) = \\nabla f(P)\\cdot \\nabla f(P) = |\\nabla f(P)|^2\\geq 0.$$\ny sólo se anula si $\\nabla f(P)=0$.\nAsí pues, si $\\nabla f(P)\\neq 0$, entonces $P$ no puede ser un máximo ya que siguiendo la trayectoria de $g$ desde $P$ se encontrarían puntos en los que la imagen de $f$ es mayor que en $P$. Del mismo modo, siguiendo la trayectoria opuesta a $g$ se encontrarían puntos en los que la imagen de $f$ es menor que la imagen en $P$, por lo que tampoco puede ser un mínimo.\nEjemplo. Para el campo escalar $f(x,y)=x^2+y^2$, resulta evidente que sólo tiene un mínimo en el origen $(0,0)$ ya que\n$$f(0,0)=0 \\leq f(x,y)=x^2+y^2,\\ \\forall x,y\\in \\mathbb{R}.$$\nEn este punto se cumple, $\\nabla f(0,0) = 0$.\nPuntos de silla No todos los puntos críticos son extremos. Si se considera, por ejemplo, el campo escalar $f(x,y)=x^2-y^2$, su gradiente es\n$$\\nabla f(x,y) = (2x,-2y),$$\nque sólo se anula en el punto $(0,0)$. Sin embargo, este punto no es un máximo relativo ya que los puntos $(x,0)$ del eje $X$ tienen imágenes $f(x,0)=x^2\\geq 0=f(0,0)$, y tampoco es un mínimo relativo ya que los puntos $(0,y)$ del eje $Y$ tienen imágenes $f(0,y)=-y^2\\leq 0=f(0,0)$. Este tipo de puntos que anulan el gradiente pero que no son extremos, se conocen como puntos de silla.\nDeterminación de los extremos de un campo escalar De la fórmula de Taylor de segundo grado para un campo escalar $f$ en un punto $P$ se deduce que\n$$f(P+\\mathbf{v})-f(P)\\approx \\nabla f(P)\\mathbf{v}+\\frac{1}{2}\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v}.$$\nDe manera que si $P$ es un punto crítico de $f$, como $\\nabla f(P)=0$, se tiene que\n$$f(P+\\mathbf{v})-f(P)\\approx \\frac{1}{2}\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v}.$$\nPor tanto, el signo de $f(P+\\mathbf{v})-f(P)$ coincide con el signo del término cuadrático $Hf(P)\\mathbf{v}\\cdot\\mathbf{v}$.\nSe pueden dar cuatro posibilidades:\nDefinido positivo: $\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v}\u0026gt;0$ $\\forall \\mathbf{v}\\neq 0$. Definido negativo: $\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v}\u0026lt;0$ $\\forall \\mathbf{v}\\neq 0$. Indefinido: $\\nabla^2f(P)\\mathbf{v}\\cdot\\mathbf{v}\u0026gt;0$ para algún $\\mathbf{v}\\neq 0$ y $\\nabla^2f(P)\\mathbf{u}\\cdot\\mathbf{u}\u0026lt;0$ para algún $\\mathbf{u}\\neq 0$. Semidefinido: Cualquier otro caso distinto de los anteriores. Así pues, dependiendo el signo de $Hf(P)\\mathbf{v}\\cdot\\mathbf{v}$, se tiene\nTeorema. Dado un punto crítico $P$ de un campo escalar $f$ que tiene matríz hessiana $Hf(P)$, se cumple\nSi $\\nabla^2f(P)$ es definido positivo entonces $f$ tiene un mínimo relativo en $P$. Si $\\nabla^2f(P)$ es definido negativo entonces $f$ tiene un máximo relativo en $P$. Si $\\nabla^2f(P)$ es indefinido entonces $f$ tiene un punto de silla en $P$. En el caso de que $\\nabla^2f(P)$ sea semidefinido, no se puede obtener ninguna conclusión y hay que recurrir a derivadas parciales de orden superior.\nEn el caso particular de un campo escalar de dos variables se tiene\nTeorema. Dado un punto crítico $P=(x_0,y_0)$ de un campo escalar $f(x,y)$ que tiene matríz hessiana $\\nabla^2f(P)$, se cumple\nSi $Hf(P)\u0026gt;0$ y $\\frac{\\partial^2 f}{\\partial x^2}(x_0,y_0)\u0026gt;0$ entonces $f$ tiene un mínimo relativo en $P$. Si $Hf(P)\u0026gt;0$ y $\\frac{\\partial^2 f}{\\partial x^2}(x_0,y_0)\u0026lt;0$ entonces $f$ tiene un máximo relativo en $P$. Si $Hf(P)\u0026lt;0$ entonces $f$ tiene un punto de silla en $P$. Ejemplo. Dada el campo escalar $f(x,y)=\\dfrac{x^3}{3}-\\dfrac{y^3}{3}-x+y$, se tiene que su gradiente vale\n$$\\nabla f(x,y)= (x^2-1,-y^2+1),$$\nque se anula en los puntos $(1,1)$, $(1,-1)$, $(-1,1)$ y $(-1,-1)$.\nLa matriz hessiana vale\n$$\\nabla^2f(x,y) = \\left( \\begin{array}{cc} 2x \u0026amp; 0\\newline 0 \u0026amp; -2y \\end{array} \\right)$$\ny el hessiano vale\n$$Hf(x,y) = -4xy.$$\nAsí pues, se tiene\nPunto $(1,1)$: $Hf(1,1)=-4\u0026lt;0 \\Rightarrow$ Punto de silla. Punto $(1,-1)$: $Hf(1,-1)=4\u0026gt;0$ y $\\frac{\\partial^2}{\\partial x^2}(1,-1)=2\u0026gt;0 \\Rightarrow$ Mínimo relativo. Punto $(-1,1)$: $Hf(-1,1)=4\u0026gt;0$ y $\\frac{\\partial^2}{\\partial x^2}(-1,1)=-2\u0026lt;0 \\Rightarrow$ Máximo relativo. Punto $(-1,-1)$: $Hf(-1,-1)=-4\u0026lt;0 \\Rightarrow$ Punto de silla. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1690551088,"objectID":"3b2de900f0a5bb02caba0ae2954bc890","permalink":"/docencia/calculo/manual/derivadas-n-variables/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/manual/derivadas-n-variables/","section":"docencia","summary":"Funciones vectoriales de una variable real Definición - Función vectorial de una variable real. Una función vectorial de una variable real o campo vectorial de una variable escalar es una función que asocia cada valor escalar $t\\in D\\subseteq \\mathbb{R}$ con un vector $(x_1(t),\\ldots,x_n(t))$ en $\\mathbb{R}^n$:","tags":["Derivada Parcial","Gradiente","Recta Tangente","Plano Normal","Matriz Hessiana","Extremos"],"title":"Cálculo diferencial en varias variables","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir una función que aplique un descuento a un precio y otra que aplique el IVA a un precio. Escribir una tercera función que reciba un diccionario con los precios y porcentajes de una cesta de la compra, y una de las funciones anteriores, y utilice la función pasada para aplicar los descuentos o el IVA a los productos de la cesta y devolver el precio final de la cesta.\nSolución\nEjercicio 2 Escribir una función que simule una calculadora científica que permita calcular el seno, coseno, tangente, exponencial y logaritmo neperiano. La función preguntará al usuario el valor y la función a aplicar, y mostrará por pantalla una tabla con los enteros de 1 al valor introducido y el resultado de aplicar la función a esos enteros.\nSolución\nEjercicio 3 Escribir una función que reciba otra función y una lista, y devuelva otra lista con el resultado de aplicar la función dada a cada uno de los elementos de la lista.\nSolución\nEjercicio 4 Escribir una función que reciba otra función booleana y una lista, y devuelva otra lista con los elementos de la lista que devuelvan True al aplicarles la función booleana.\nSolución\nEjercicio 5 Escribir una función que reciba una frase y devuelva un diccionario con las palabras que contiene y su longitud.\nSolución\nEjercicio 6 Escribir una función reciba una lista de notas y devuelva la lista de calificaciones correspondientes a esas notas.\nSolución\nEjercicio 7 Escribir una función reciba un diccionario con las asignaturas y las notas de un alumno y devuelva otro diccionario con las asignaturas en mayúsculas y las calificaciones correspondientes a las notas.\nSolución\nEjercicio 8 Escribir una función reciba un diccionario con las asignaturas y las notas de un alumno y devuelva otro diccionario con las asignaturas en mayúsculas y las calificaciones correspondientes a las notas aprobadas.\nSolución\nEjercicio 9 Escribir una función que calcule el módulo de un vector.\nSolución\nEjercicio 10 Una inmobiliaria de una ciudad maneja una lista de inmuebles como la siguiente:\n[{'año': 2000, 'metros': 100, 'habitaciones': 3, 'garaje': True, 'zona': 'A'}, {'año': 2012, 'metros': 60, 'habitaciones': 2, 'garaje': True, 'zona': 'B'}, {'año': 1980, 'metros': 120, 'habitaciones': 4, 'garaje': False, 'zona': 'A'}, {'año': 2005, 'metros': 75, 'habitaciones': 3, 'garaje': True, 'zona': 'B'}, {'año': 2015, 'metros': 90, 'habitaciones': 2, 'garaje': False, 'zona': 'A'}] Construir una función que permita hacer búsqueda de inmuebles en función de un presupuesto dado. La función recibirá como entrada la lista de inmuebles y un precio, y devolverá otra lista con los inmuebles cuyo precio sea menor o igual que el dado. Los inmuebles de la lista que se devuelva deben incorporar un nuevo par a cada diccionario con el precio del inmueble, donde el precio de un inmueble se calcula con las siguiente fórmula en función de la zona:\nZona A: precio = (metros * 1000 + habitaciones * 5000 + garaje * 15000) * (1-antiguedad/100) Zona B: precio = (metros * 1000 + habitaciones * 5000 + garaje * 15000) * (1-antiguedad/100) * 1.5 Solución\nEjercicio 11 Escribir una función que reciba una muestra de números y devuelva los valores atípicos, es decir, los valores cuya puntuación típica sea mayor que 3 o menor que -3. Nota: La puntuación típica de un valor se obtiene restando la media y dividiendo por la desviación típica de la muestra.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600773632,"objectID":"a00387f6a49f0bc49ae0376ec05d7f2b","permalink":"/docencia/python/ejercicios/programacion-funcional/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/programacion-funcional/","section":"docencia","summary":"Ejercicio 1 Escribir una función que aplique un descuento a un precio y otra que aplique el IVA a un precio. Escribir una tercera función que reciba un diccionario con los precios y porcentajes de una cesta de la compra, y una de las funciones anteriores, y utilice la función pasada para aplicar los descuentos o el IVA a los productos de la cesta y devolver el precio final de la cesta.","tags":["Ejercicios","Programación Funcional"],"title":"Ejercicios de Programación Funcional","type":"book"},{"authors":null,"categories":["Programación","Git"],"content":" Git. Sitio web de Git. GitHub. Sitio web de GitHub. Pro Git. Libro oficial de Git. Ry\u0026rsquo;s Git Tutorial. Tutorial de Git gratuito. Gitcheats. Página de ayuda sobre los comandos de Git. Trucos y consejos de Git Resumen de los comandos más importantes y consejos sobre el uso de Git. Chuleta de comandos de Git Resumen de los comandos de Git más habituales. Flujos de trabajo con Git Esquema de los flujos de trabajo más habituales con Git. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"348a50acd3e95a77d98874fa7ce5dd06","permalink":"/docencia/git/manual/referencias/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/git/manual/referencias/","section":"docencia","summary":"Git. Sitio web de Git. GitHub. Sitio web de GitHub. Pro Git. Libro oficial de Git. Ry\u0026rsquo;s Git Tutorial. Tutorial de Git gratuito. Gitcheats. Página de ayuda sobre los comandos de Git.","tags":null,"title":"Referencias","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Tuplas Una tupla es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes ( ) separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos. Son inmutables, es decir, no pueden alterarse durante la ejecución de un programa. Se usan habitualmente para representar colecciones de datos una determinada estructura semántica, como por ejemplo un vector o una matriz.\n# Tupla vacía type(()) \u0026lt;class 'tuple'\u0026gt; # Tupla con elementos de distintos tipos (1, \u0026quot;dos\u0026quot;, True) # Vector (1, 2, 3) # Matriz ((1, 2, 3), (4, 5, 6)) Creación de tuplas mediante la función tuple() Otra forma de crear tuplas es mediante la función tuple().\ntuple(c) : Crea una tupla con los elementos de la secuencia o colección c. Se pueden indicar los elementos separados por comas, mediante una cadena, o mediante una colección de elementos iterable.\n\u0026gt;\u0026gt;\u0026gt; tuple() () \u0026gt;\u0026gt;\u0026gt; tuple(1, 2, 3) (1, 2, 3) \u0026gt;\u0026gt;\u0026gt; tuple(\u0026quot;Python\u0026quot;) ('P', 'y', 't', 'h', 'o', 'n') \u0026gt;\u0026gt;\u0026gt; tuple([1, 2, 3]) (1, 2, 3) Operaciones con tuplas El acceso a los elementos de una tupla se realiza del mismo modo que en las listas. También se pueden obtener subtuplas de la misma manera que las sublistas.\nLas operaciones de listas que no modifican la lista también son aplicables a las tuplas.\n\u0026gt;\u0026gt;\u0026gt; a = (1, 2, 3) \u0026gt;\u0026gt;\u0026gt; a[1] 2 \u0026gt;\u0026gt;\u0026gt; len(a) 3 \u0026gt;\u0026gt;\u0026gt; a.index(3) 2 \u0026gt;\u0026gt;\u0026gt; 0 in a False \u0026gt;\u0026gt;\u0026gt; b = ((1, 2, 3), (4, 5, 6)) \u0026gt;\u0026gt;\u0026gt; b[1] (4, 5, 6) \u0026gt;\u0026gt;\u0026gt; b[1][2] 6 ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"34c09e32ed87be8fca150c2d8980a1a5","permalink":"/docencia/python/manual/tuplas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/tuplas/","section":"docencia","summary":"Tuplas Una tupla es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes ( ) separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos.","tags":["Tuplas"],"title":"Tuplas","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Ejercicio 1 Titulación: Todas\nEn una población se sabe que las estaturas de los hombres y de las mujeres siguen una distribución normal con la misma desviación típica y que la media de los hombres es 5 cm mayor que la de las mujeres. También se sabe que el 75 % de los hombres miden menos de 178 cm y que el 10 % de las mujeres miden más de 176.8 cm. Se pide:\nCalcular las medias y las desviaciones típicas de las distribuciones de estaturas de los hombres y de las mujeres. Calcular la probabilidad de que un hombre mida entre 170 y 180 cm. Calcular el percentil 90 de la estatura de los hombres. SOLUCIÓN\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"61b201e37be00ad5d288f919af488d8e","permalink":"/docencia/estadistica/ejercicios/variables-aleatorias-continuas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/ejercicios/variables-aleatorias-continuas/","section":"docencia","summary":"Ejercicio 1 Titulación: Todas\nEn una población se sabe que las estaturas de los hombres y de las mujeres siguen una distribución normal con la misma desviación típica y que la media de los hombres es 5 cm mayor que la de las mujeres.","tags":["Probabilidad","Variables Aleatorias","Variables Aleatorias Continuas"],"title":"Ejercicios de Variables Aleatorias Continuas","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Diccionarios Un diccionario es una colección de pares formados por una clave y un valor asociado a la clave.\nSe construyen poniendo los pares entre llaves { } separados por comas, y separando la clave del valor con dos puntos :.\nSe caracterizan por:\nNo tienen orden. Pueden contener elementos de distintos tipos. Son mutables, es decir, pueden alterarse durante la ejecución de un programa. Las claves son únicas, es decir, no pueden repetirse en un mismo diccionario, y pueden ser de cualquier tipo de datos inmutable. # Diccionario vacío type({}) \u0026lt;class 'dict'\u0026gt; # Diccionario con elementos de distintos tipos {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} # Diccionarios anidados {'nombre_completo':{'nombre': 'Alfredo', 'Apellidos': 'Sánchez Alberca'}} Acceso a los elementos de un diccionario d[clave] devuelve el valor del diccionario d asociado a la clave clave. Si en el diccionario no existe esa clave devuelve un error. d.get(clave, valor) devuelve el valor del diccionario d asociado a la clave clave. Si en el diccionario no existe esa clave devuelve valor, y si no se especifica un valor por defecto devuelve None. \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a['nombre'] 'Alfredo' \u0026gt;\u0026gt;\u0026gt; a['despacho'] = 210 \u0026gt;\u0026gt;\u0026gt; a {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a.get('email') '[email protected]' \u0026gt;\u0026gt;\u0026gt; a.get('universidad', 'CEU') 'CEU' Operaciones que no modifican un diccionario len(d) : Devuelve el número de elementos del diccionario d. min(d) : Devuelve la mínima clave del diccionario d siempre que las claves sean comparables. max(d) : Devuelve la máxima clave del diccionario d siempre que las claves sean comparables. sum(d) : Devuelve la suma de las claves del diccionario d, siempre que las claves se puedan sumar. clave in d : Devuelve True si la clave clave pertenece al diccionario d y False en caso contrario. d.keys() : Devuelve un iterador sobre las claves de un diccionario. d.values() : Devuelve un iterador sobre los valores de un diccionario. d.items() : Devuelve un iterador sobre los pares clave-valor de un diccionario. \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; len(a) 3 \u0026gt;\u0026gt;\u0026gt; min(a) 'despacho' \u0026gt;\u0026gt;\u0026gt; 'email' in a True \u0026gt;\u0026gt;\u0026gt; a.keys() dict_keys(['nombre', 'despacho', 'email']) \u0026gt;\u0026gt;\u0026gt; a.values() dict_values(['Alfredo', 218, '[email protected]']) \u0026gt;\u0026gt;\u0026gt; a.items() dict_items([('nombre', 'Alfredo'), ('despacho', 218), ('email', '[email protected]')]) Operaciones que modifican un diccionario d[clave] = valor : Añade al diccionario d el par formado por la clave clave y el valor valor. d.update(d2). Añade los pares del diccionario d2 al diccionario d. d.pop(clave, alternativo) : Devuelve del valor asociado a la clave clave del diccionario d y lo elimina del diccionario. Si la clave no está devuelve el valor alternativo. d.popitem() : Devuelve la tupla formada por la clave y el valor del último par añadido al diccionario d y lo elimina del diccionario. del d[clave] : Elimina del diccionario d el par con la clave clave. d.clear() : Elimina todos los pares del diccionario d de manera que se queda vacío. \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a['universidad'] = 'CEU' \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'despacho': 218, 'email': '[email protected]', 'universidad': 'CEU'} \u0026gt;\u0026gt;\u0026gt; a.pop('despacho') 218 \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'email': '[email protected]', 'universidad': 'CEU'} \u0026gt;\u0026gt;\u0026gt; a.popitem() ('universidad', 'CEU') \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'email': '[email protected]'} \u0026gt;\u0026gt;\u0026gt; del a['email'] \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo'} \u0026gt;\u0026gt;\u0026gt; a.clear() \u0026gt;\u0026gt;\u0026gt; a {} Copia de diccionarios Existen dos formas de copiar diccionarios:\nCopia por referencia d1 = d2: Asocia la la variable d1 el mismo diccionario que tiene asociado la variable d2, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través de l1 o l2 afectará al mismo diccionario. Copia por valor d1 = list(d2): Crea una copia del diccionario asociado a d2 en una dirección de memoria diferente y se la asocia a d1. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará al diccionario de l2 y viceversa. \u0026gt;\u0026gt;\u0026gt; a = {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = a \u0026gt;\u0026gt;\u0026gt; b {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; b.pop(2) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a = {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = dict(a) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; b.pop(2) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a {1:'A', 2:'B', 3:'C'} ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"aa51264860febaca7a0d1f078911fd22","permalink":"/docencia/python/manual/diccionarios/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/diccionarios/","section":"docencia","summary":"Diccionarios Un diccionario es una colección de pares formados por una clave y un valor asociado a la clave.\nSe construyen poniendo los pares entre llaves { } separados por comas, y separando la clave del valor con dos puntos :.","tags":["Diccionarios"],"title":"Diccionarios","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir una función que pida un número entero entre 1 y 10 y guarde en un fichero con el nombre tabla-n.txt la tabla de multiplicar de ese número, done n es el número introducido.\nSolución\nEjercicio 2 Escribir una función que pida un número entero entre 1 y 10, lea el fichero tabla-n.txt con la tabla de multiplicar de ese número, done n es el número introducido, y la muestre por pantalla. Si el fichero no existe debe mostrar un mensaje por pantalla informando de ello.\nSolución\nEjercicio 3 Escribir una función que pida dos números n y m entre 1 y 10, lea el fichero tabla-n.txt con la tabla de multiplicar de ese número, y muestre por pantalla la línea m del fichero. Si el fichero no existe debe mostrar un mensaje por pantalla informando de ello.\nSolución\nEjercicio 4 Escribir un programa que acceda a un fichero de internet mediante su url y muestre por pantalla el número de palabras que contiene.\nSolución\nEjercicio 5 Escribir un programa que abra el fichero con información sobre el PIB per cápita de los países de la Unión Europea (url:https://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?file=data/sdg_08_10.tsv.gz\u0026amp;unzip=true), pregunte por las iniciales de un país y muestre el PIB per cápita de ese país de todos los años disponibles.\nSolución\nEjercicio 6 Escribir un programa para gestionar un listín telefónico con los nombres y los teléfonos de los clientes de una empresa. El programa incorporar funciones crear el fichero con el listín si no existe, para consultar el teléfono de un cliente, añadir el teléfono de un nuevo cliente y eliminar el teléfono de un cliente. El listín debe estar guardado en el fichero de texto listin.txt donde el nombre del cliente y su teléfono deben aparecer separados por comas y cada cliente en una línea distinta.\nSolución\nEjercicio 7 El fichero cotizacion.csv contiene las cotizaciones de las empresas del IBEX35 con las siguientes columnas: Nombre (nombre de la empresa), Final (precio de la acción al cierre de bolsa), Máximo (precio máximo de la acción durante la jornada), Mínimo (precio mínimo de la acción durante la jornada), Volumen (Volumen al cierre de bolsa), Efectivo (capitalización al cierre en miles de euros).\nConstruir una función reciba el fichero de cotizaciones y devuelva un diccionario con los datos del fichero por columnas.\nConstruir una función que reciba el diccionario devuelto por la función anterior y cree un fichero en formato csv con el mínimo, el máximo y la media de dada columna.\nSolución\nEjercicio 8 El fichero calificaciones.csv contiene las calificaciones de un curso. Durante el curso se realizaron dos exámenes parciales de teoría y un examen de prácticas. Los alumnos que tuvieron menos de 4 en alguno de estos exámenes pudieron repetirlo en la al final del curso (convocatoria ordinaria). Escribir un programa que contenga las siguientes funciones:\nUna función que reciba el fichero de calificaciones y devuelva una lista de diccionarios, donde cada diccionario contiene la información de los exámenes y la asistencia de un alumno. La lista tiene que estar ordenada por apellidos.\nUna función que reciba una lista de diccionarios como la que devuelve la función anterior y añada a cada diccionario un nuevo par con la nota final del curso. El peso de cada parcial de teoría en la nota final es de un 30% mientras que el peso del examen de prácticas es de un 40%.\nUna función que reciba una lista de diccionarios como la que devuelve la función anterior y devuelva dos listas, una con los alumnos aprobados y otra con los alumnos suspensos. Para aprobar el curso, la asistencia tiene que ser mayor o igual que el 75%, la nota de los exámenes parciales y de prácticas mayor o igual que 4 y la nota final mayor o igual que 5.\nSolución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1602747190,"objectID":"be0ed853ab5a260f0d43cb3a59c1248c","permalink":"/docencia/python/ejercicios/ficheros/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/ficheros/","section":"docencia","summary":"Ejercicio 1 Escribir una función que pida un número entero entre 1 y 10 y guarde en un fichero con el nombre tabla-n.txt la tabla de multiplicar de ese número, done n es el número introducido.","tags":["Ejercicios","Ficheros"],"title":"Ejercicios de Ficheros","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Funciones (def) Una función es un bloque de código que tiene asociado un nombre, de manera que cada vez que se quiera ejecutar el bloque de código basta con invocar el nombre de la función.\nPara declarar una función se utiliza la siguiente sintaxis:\ndef \u0026lt;nombre-funcion\u0026gt; (\u0026lt;parámetros\u0026gt;):\nbloque código\nreturn \u0026lt;objeto\u0026gt;\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(): ... print('¡Bienvenido a Python!') ... return ... \u0026gt;\u0026gt;\u0026gt; type(bienvenida) \u0026lt;class 'function'\u0026gt; \u0026gt;\u0026gt;\u0026gt; bienvenida() ¡Bienvenido a Python! Parámetros y argumentos de una función Una función puede recibir valores cuando se invoca a través de unas variables conocidas como parámetros que se definen entre paréntesis en la declaración de la función. En el cuerpo de la función se pueden usar estos parámetros como si fuesen variables.\nLos valores que se pasan a la función en una llamada o invocación concreta de ella se conocen como argumentos y se asocian a los parámetros de la declaración de la función.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre): ... print('¡Bienvenido a Python', nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! Paso de argumentos a una función Los argumentos se pueden pasar de dos formas:\nArgumentos posicionales: Se asocian a los parámetros de la función en el mismo orden que aparecen en la definición de la función. Argumentos nominales: Se indica explícitamente el nombre del parámetro al que se asocia un argumento de la forma parametro = argumento. \u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre, apellido): ... print('¡Bienvenido a Python', nombre, apellido + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alfredo', 'Sánchez) ¡Bienvenido a Python Alfredo Sánchez! \u0026gt;\u0026gt;\u0026gt; bienvenida(apellido = 'Sánchez', nombre = 'Alfredo') ¡Bienvenido a Python Alfredo Sánchez! Retorno de una función Una función puede devolver un objeto de cualquier tipo tras su invocación. Para ello el objeto a devolver debe escribirse detrás de la palabra reservada return. Si no se indica ningún objeto, la función no devolverá nada.\n\u0026gt;\u0026gt;\u0026gt; def area_triangulo(base, altura): ... return base * altura / 2 ... \u0026gt;\u0026gt;\u0026gt; area_triangulo(2, 3) 3 \u0026gt;\u0026gt;\u0026gt; area_triangulo(4, 5) 10 Una función puede devolver más de un objeto separándolos por comas tras la palabra reservada return. En tal caso, la función agrupará los objetos en una tupla y devolverá la tupla.\nArgumentos por defecto En la definición de una función se puede asignar a cada parámetro un argumento por defecto, de manera que si se invoca la función sin proporcionar ningún argumento para ese parámetro, se utiliza el argumento por defecto.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre, lenguaje = 'Python'): ... print('¡Bienvenido a', lenguaje, nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf', 'Java') ¡Bienvenido a Java Alf! Los parámetros con un argumento por defecto deben indicarse después de los parámetros sin argumentos por defectos. De lo contrario se produce un error.\nPasar un número indeterminado de argumentos Por último, es posible pasar un número variable de argumentos a un parámetro. Esto se puede hacer de dos formas:\n*parametro: Se antepone un asterisco al nombre del parámetro y en la invocación de la función se pasa el número variable de argumentos separados por comas. Los argumentos se guardan en una lista que se asocia al parámetro. \u0026gt;\u0026gt;\u0026gt; def menu(*platos): ... print('Hoy tenemos: ', end='') ... for plato in platos: ... print(plato, end=', ') ... return ... \u0026gt;\u0026gt;\u0026gt; menu('pasta', 'pizza', 'ensalada') Hoy tenemos: pasta, pizza, ensalada, **parametro: Se anteponen dos asteriscos al nombre del parámetro y en la invocación de la función se pasa el número variable de argumentos por pares nombre = valor, separados por comas. Los argumentos se guardan en un diccionario que se asocia al parámetro. \u0026gt;\u0026gt;\u0026gt; def contacto(**info): ... print('Datos del contacto) ... for clave, valor in info.items(): ... print(clave, \u0026quot;:\u0026quot;, valor) ... return ... \u0026gt;\u0026gt;\u0026gt; contacto(Nombre = \u0026quot;Alf\u0026quot;, Email = \u0026quot;[email protected]\u0026quot;) Datos del contacto Nombre : Alf Email : [email protected] \u0026gt;\u0026gt;\u0026gt; contacto(Nombre = \u0026quot;Alf\u0026quot;, Email = \u0026quot;[email protected]\u0026quot;, Dirección = \u0026quot;Madrid\u0026quot;) Datos del contacto Nombre : Alf Email : [email protected] Dirección : Madrid Ámbito de los parámetros y variables de una función Los parámetros y las variables declaradas dentro de una función son de ámbito local, mientras que las definidas fuera de ella son de ámbito ámbito global.\nTanto los parámetros como las variables del ámbito local de una función sólo están accesibles durante la ejecución de la función, es decir, cuando termina la ejecución de la función estas variables desaparecen y no son accesibles desde fuera de la función.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre): ... lenguaje = 'Python' ... print('¡Bienvenido a', lenguaje, nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! \u0026gt;\u0026gt;\u0026gt; lenguaje Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; NameError: name 'lenguaje' is not defined Si en el ámbito local de una función existe una variable que también existe en el ámbito global, durante la ejecución de la función la variable global queda eclipsada por la variable local y no es accesible hasta que finaliza la ejecución de la función.\n\u0026gt;\u0026gt;\u0026gt; lenguaje = 'Java' \u0026gt;\u0026gt;\u0026gt; def bienvenida(): ... lenguaje = 'Python' ... print('¡Bienvenido a', lenguaje + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida() ¡Bienvenido a Python! \u0026gt;\u0026gt;\u0026gt; print(lenguaje) Java Paso de argumentos por asignación En Python los argumentos se pasan a una función por asignación, es decir, se asignan a los parámetros de la función como si fuesen variables locales. De este modo, cuando los argumentos son objetos mutables (listas, diccionarios, etc.) se pasa al parámetro una referencia al objeto, de manera que cualquier cambio que se haga dentro de la función mediante el parámetro asociado afectará al objeto original.\n\u0026gt;\u0026gt;\u0026gt; primer_curso = ['Matemáticas', 'Física'] \u0026gt;\u0026gt;\u0026gt; def añade_asignatura(curso, asignatura): ... curso.append(asignatura) ... return ... \u0026gt;\u0026gt;\u0026gt; añade_asignatura(primer_curso, 'Química') \u0026gt;\u0026gt;\u0026gt; print(primer_curso) ['Matemáticas', 'Física', 'Química'] Las funciones son objetos En Python las funciones son objetos como el resto de tipos de datos, de manera que es posible asignar una función a una variable y luego utilizar la variable para hacer la llamada a la función.\n\u0026gt;\u0026gt;\u0026gt; def saludo(nombre): ... print(\u0026quot;Hola\u0026quot;, nombre) ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida = saludo \u0026gt;\u0026gt;\u0026gt; bienvenida(\u0026quot;Alf\u0026quot;) Hola Alf Esto permite, por tanto, pasar funciones como argumentos en la llamada a una función y que una función pueda devolver otras funciones.\n\u0026gt;\u0026gt;\u0026gt; def impuesto(porcentaje): ... def aplicar(base): ... return base * porcentaje / 100 ... return aplicar ... \u0026gt;\u0026gt;\u0026gt; iva = impuesto(21) \u0026gt;\u0026gt;\u0026gt; iva(1000) 210.0 Funciones recursivas Una función recursiva es una función que en su cuerpo contiene una llama a si misma.\nLa recursión es una práctica común en la mayoría de los lenguajes de programación ya que permite resolver las tareas recursivas de manera más natural.\nPara garantizar el final de una función recursiva, las sucesivas llamadas tienen que reducir el grado de complejidad del problema, hasta que este pueda resolverse directamente sin necesidad de volver a llamar a la función.\n\u0026gt;\u0026gt;\u0026gt; def factorial(n): ... if n == 0: ... return 1 ... else: ... return n * factorial(n-1) ... \u0026gt;\u0026gt;\u0026gt; f(5) 120 Funciones recursivas múltiples Una función recursiva puede invocarse a si misma tantas veces como quiera en su cuerpo.\n\u0026gt;\u0026gt;\u0026gt; def fibonacci(n): ... if n \u0026lt;= 1: ... return n ... else: ... return fibonacci(n - 1) + fibonacci(n - 2) ... \u0026gt;\u0026gt;\u0026gt; fibonacci(6) 8 Los riesgos de la recursión Aunque la recursión permite resolver las tareas recursivas de forma más natural, hay que tener cuidado con ella porque suele consumir bastante memoria, ya que cada llamada a la función crea un nuevo ámbito local con las variables y los parámetros de la función.\nEn muchos casos es más eficiente resolver la tarea recursiva de forma iterativa usando bucles.\n\u0026gt;\u0026gt;\u0026gt; def fibonacci(n): ... a, b = 0, 1 ... for i in range(n): ... a, b = b, a + b ... return a ... \u0026gt;\u0026gt;\u0026gt; fibonacci(6) 8 Documentación de funciones Una práctica muy recomendable cuando se define una función es describir lo que la función hace en un comentario.\nEn Python esto se hace con un docstring que es un tipo de comentario especial se hace en la línea siguiente al encabezado de la función entre tres comillas simples ''' o dobles \u0026quot;\u0026quot;\u0026quot;.\nDespués se puede acceder a la documentación de la función con la función help(\u0026lt;nombre-función\u0026gt;).\n\u0026gt;\u0026gt;\u0026gt; def area_triangulo(base, altura): ... \u0026quot;\u0026quot;\u0026quot;Función que calcula el área de un triángulo. ... ... Parámetros: ... - base: Un número real con la base del triángulo. ... - altura: Un número real con la altura del triángulo. ... Salida: ... Un número real con el área del triángulo de base y altura especificadas. ... \u0026quot;\u0026quot;\u0026quot; ... return base * altura / 2 ... \u0026gt;\u0026gt;\u0026gt; help(area_triangulo) area_triangulo(base, altura) Función que calcula el área de un triángulo. Parámetros: - base: Un número real con la base del triángulo. - altura: Un número real con la altura del triángulo. Salida: Un número real con el área del triángulo de base y altura especificadas. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1649150300,"objectID":"ccb40c41e5d5379ca14abd0325690701","permalink":"/docencia/python/manual/funciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/funciones/","section":"docencia","summary":"Funciones (def) Una función es un bloque de código que tiene asociado un nombre, de manera que cada vez que se quiera ejecutar el bloque de código basta con invocar el nombre de la función.","tags":["Funciones"],"title":"Funciones","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Corregir los errores sintácticos del siguiente programa:\ncontraseña = input('Introduce la contraseña: \u0026quot;) if contraseña in ['sesamo'): print('Pasa') else print('No pasa') Solución\nEjercicio 2 Detectar y corregir los errores del siguiente programa que aplica el iva a una factura:\nbase = input('Introduce la base imponible de la factura: ') print(aplica_iva(base, iva)) def aplica_iva(base, iva = 21): base = base * iva return base Solución\nEjercicio 3 Detectar y corregir los errores del siguiente programa que calcula el producto escalar de dos vectores:\nu = (1, 2, 3) v = (4, 5, 6) def producto_escalar(u, v): for i in u: u[i+1] *= v[i+1] return sum(u) print(producto_escalar(u, v)) Solución\nEjercicio 4 Detectar y corregir los errores del siguiente programa que devuelve y elimina el teléfono de un listín telefónico a través del nombre del usuario:\nlistin = {'Juan':123456789, 'Pedro':987654321} def elimina(listin, usuario): del listin[usuario] return listin[usuario] print(elimina(listin, 'Pablo')) Solución\nEjercicio 5 Detectar y corregir los errores del siguiente programa que multiplica dos matrices:\na = ((1, 2, 3), (3, 2, 1)) b = ((1, 2), (3, 4), (5, 6)) def producto(a, b): producto = [] for i in range(len(b)): fila = [] for j in range(len(a[0])): suma = 0 for k in range(len(a[0]+1)): suma += a[i][k] * b[k+1][j] fila[j] = suma producto[i] = tuple(fila) return tuple(producto) print(producto(a, b)) Solución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600773632,"objectID":"6ab2d4aec1dac56e03d8e71825459103","permalink":"/docencia/python/ejercicios/depuracion/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/depuracion/","section":"docencia","summary":"Ejercicio 1 Corregir los errores sintácticos del siguiente programa:\ncontraseña = input('Introduce la contraseña: \u0026quot;) if contraseña in ['sesamo'): print('Pasa') else print('No pasa') Solución\nEjercicio 2 Detectar y corregir los errores del siguiente programa que aplica el iva a una factura:","tags":["Ejercicios","Depuración"],"title":"Ejercicios de Depuración","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que pregunte al usuario por las ventas de un rango de años y muestre por pantalla una serie con los datos de las ventas indexada por los años, antes y después de aplicarles un descuento del 10%.\nSolución\nEjercicio 2 Escribir una función que reciba un diccionario con las notas de los alumno de un curso y devuelva una serie con la nota mínima, la máxima, media y la desviación típica.\nSolución\nEjercicio 3 Escribir una función que reciba un diccionario con las notas de los alumnos de un curso y devuelva una serie con las notas de los alumnos aprobados ordenadas de mayor a menor.\nSolución\nEjercicio 4 Escribir programa que genere y muestre por pantalla un DataFrame con los datos de la tabla siguiente:\nMes Ventas Gastos Enero 30500 22000 Febrero 35600 23400 Marzo 28300 18100 Abril 33900 20700 Solución\nEjercicio 5 Escribir una función que reciba un DataFrame con el formato del ejercicio anterior, una lista de meses, y devuelva el balance (ventas - gastos) total en los meses indicados.\nSolución\nEjercicio 6 El fichero cotizacion.csv contiene las cotizaciones de las empresas del IBEX35 con las siguientes columnas: nombre (nombre de la empresa), Final (precio de la acción al cierre de bolsa), Máximo (precio máximo de la acción durante la jornada), Mínimo (precio mínimo de la acción durante la jornada), volumen (Volumen al cierre de bolsa), Efectivo (capitalización al cierre en miles de euros). Construir una función que construya un DataFrame a partir del un fichero con el formato anterior y devuelva otro DataFrame con el mínimo, el máximo y la media de dada columna.\nSolución\nEjercicio 7 El fichero titanic.csv contiene información sobre los pasajeros del Titanic. Escribir un programa con los siguientes requisitos:\nGenerar un DataFrame con los datos del fichero. Mostrar por pantalla las dimensiones del DataFrame, el número de datos que contiene, los nombres de sus columnas y filas, los tipos de datos de las columnas, las 10 primeras filas y las 10 últimas filas Mostrar por pantalla los datos del pasajero con identificador 148. Mostrar por pantalla las filas pares del DataFrame. Mostrar por pantalla los nombres de las personas que iban en primera clase ordenadas alfabéticamente. Mostrar por pantalla el porcentaje de personas que sobrevivieron y murieron. Mostrar por pantalla el porcentaje de personas que sobrevivieron en cada clase. Eliminar del DataFrame los pasajeros con edad desconocida. Mostrar por pantalla la edad media de las mujeres que viajaban en cada clase. Añadir una nueva columna booleana para ver si el pasajero era menor de edad o no. Mostrar por pantalla el porcentaje de menores y mayores de edad que sobrevivieron en cada clase. Solución\nEjercicio 8 Los ficheros emisiones-2016.csv, emisiones-2017.csv, emisiones-2018.csv y emisiones-2019.csv, contienen datos sobre las emisiones contaminates en la ciudad de Madrid en los años 2016, 2017, 2018 y 2019 respectivamente. Escribir un programa con los siguientes requisitos:\nGenerar un DataFrame con los datos de los cuatro ficheros. Filtrar las columnas del DataFrame para quedarse con las columnas ESTACION, MAGNITUD, AÑO, MES y las correspondientes a los días D01, D02, etc. Reestructurar el DataFrame para que los valores de los contaminantes de las columnas de los días aparezcan en una única columna. Añadir una columna con la fecha a partir de la concatenación del año, el mes y el día (usar el módulo datetime). Eliminar las filas con fechas no válidas (utilizar la función isnat del módulo numpy) y ordenar el DataFrame por estaciones contaminantes y fecha. Mostrar por pantalla las estaciones y los contaminantes disponibles en el DataFrame. Crear una función que reciba una estación, un contaminante y un rango de fechas y devuelva una serie con las emisiones del contaminante dado en la estación y rango de fechas dado. Mostrar un resumen descriptivo (mínimo, máximo, media, etc.) para cada contaminante. Mostrar un resumen descriptivo para cada contaminante por distritos. Crear una función que reciba una estación y un contaminante y devuelva un resumen descriptivo de las emisiones del contaminante indicado en la estación indicada. Crear una función que devuelva las emisiones medias mensuales de un contaminante y un año dados para todos las estaciones. Crear un función que reciba una estación de medición y devuelva un DataFrame con las medias mensuales de los distintos tipos de contaminantes. Solución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1651136371,"objectID":"a20923175daaf7d9900fab1e37e12efd","permalink":"/docencia/python/ejercicios/pandas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/pandas/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que pregunte al usuario por las ventas de un rango de años y muestre por pantalla una serie con los datos de las ventas indexada por los años, antes y después de aplicarles un descuento del 10%.","tags":["Ejercicios","Pandas"],"title":"Ejercicios de la Librería Pandas","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Programación funcional En Python las funciones son objetos de primera clase, es decir, que pueden pasarse como argumentos de una función, al igual que el resto de los tipos de datos.\n\u0026gt;\u0026gt;\u0026gt; def aplica(funcion, argumento): ... return funcion(argumento) ... \u0026gt;\u0026gt;\u0026gt; def cuadrado(n): ... return n*n ... \u0026gt;\u0026gt;\u0026gt; def cubo(n): ... return n**3 ... \u0026gt;\u0026gt;\u0026gt; aplica(cuadrado, 5) 25 \u0026gt;\u0026gt;\u0026gt; aplica(cubo, 5) 125 Funciones anónimas (lambda) Existe un tipo especial de funciones que no tienen nombre asociado y se conocen como funciones anónimas o funciones lambda.\nLa sintaxis para definir una función anónima es\nlambda \u0026lt;parámetros\u0026gt; : \u0026lt;expresión\u0026gt;\nEstas funciones se suelen asociar a una variable o parámetro desde la que hacer la llamada.\n\u0026gt;\u0026gt;\u0026gt; area = lambda base, altura : base * altura \u0026gt;\u0026gt;\u0026gt; area(4, 5) 10 Aplicar una función a todos los elementos de una colección iterable (map) map(f, c) : Devuelve una objeto iterable con los resultados de aplicar la función f a los elementos de la colección c. Si la función f requiere n argumentos entonces deben pasarse n colecciones con los argumentos. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\n\u0026gt;\u0026gt;\u0026gt; def cuadrado(n): ... return n * n ... \u0026gt;\u0026gt;\u0026gt; list(map(cuadrado, [1, 2, 3]) [1, 4, 9] \u0026gt;\u0026gt;\u0026gt; def rectangulo(a, b): ... return a * b ... \u0026gt;\u0026gt;\u0026gt; tuple(map(rectangulo, (1, 2, 3), (4, 5, 6))) (4, 10, 18) Filtrar los elementos de una colección iterable (filter) filter(f, c) : Devuelve una objeto iterable con los elementos de la colección c que devuelven True al aplicarles la función f. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\nf debe ser una función que recibe un argumento y devuelve un valor booleano.\n\u0026gt;\u0026gt;\u0026gt; def par(n): ... return n % 2 == 0 ... \u0026gt;\u0026gt;\u0026gt; list(filter(par, range(10)) [0, 2, 4, 6, 8] Combinar los elementos de varias colecciones iterables (zip) zip(c1, c2, ...) : Devuelve un objeto iterable cuyos elementos son tuplas formadas por los elementos que ocupan la misma posición en las colecciones c1, c2, etc. El número de elementos de las tuplas es el número de colecciones que se pasen. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\n\u0026gt;\u0026gt;\u0026gt; asignaturas = ['Matemáticas', 'Física', 'Química', 'Economía'] \u0026gt;\u0026gt;\u0026gt; notas = [6.0, 3.5, 7.5, 8.0] \u0026gt;\u0026gt;\u0026gt; list(zip(asignaturas, notas)) [('Matemáticas', 6.0), ('Física', 3.5), ('Química', 7.5), ('Economía', 8.0)] \u0026gt;\u0026gt;\u0026gt; dict(zip(asignaturas, notas[:3])) {'Matemáticas': 6.0, 'Física': 3.5, 'Química': 7.5} Operar todos los elementos de una colección iterable (reduce) reduce(f, l) : Aplicar la función f a los dos primeros elementos de la secuencia l. Con el valor obtenido vuelve a aplicar la función f a ese valor y el siguiente de la secuencia, y así hasta que no quedan más elementos en la lista. Devuelve el valor resultado de la última aplicación de la función f.\nLa función reduce está definida en el módulo functools.\n\u0026gt;\u0026gt;\u0026gt; from functools import reduce \u0026gt;\u0026gt;\u0026gt; def producto(n, m): ... return n * m ... \u0026gt;\u0026gt;\u0026gt; reduce(producto, range(1, 5)) 24 ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"3034aa63c4110dd84864ee4be80ca912","permalink":"/docencia/python/manual/programacion-funcional/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/programacion-funcional/","section":"docencia","summary":"Programación funcional En Python las funciones son objetos de primera clase, es decir, que pueden pasarse como argumentos de una función, al igual que el resto de los tipos de datos.","tags":["Programación funcional"],"title":"Programación funcional","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Comprensión de colecciones En muchas aplicaciones es habitual aplicar una función o realizar una operación con los elementos de una colección (lista, tupla o diccionario) y obtener una nueva colección de elementos transformados. Aunque esto se puede hacer recorriendo la secuencia con un bucle iterativo, y en programación funcional mediante la función map, Python incorpora un mecanismo muy potente que permite esto mismo de manera más simple.\nComprensión de listas [expresion for variable in lista if condicion]\nEsta instrucción genera la lista cuyos elementos son el resultado de evaluar la expresión expresion, para cada valor que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la condición condición.\n\u0026gt;\u0026gt;\u0026gt; [x ** 2 for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] \u0026gt;\u0026gt;\u0026gt; [x for x in range(10) if x % 2 == 0] [0, 2, 4, 6, 8] \u0026gt;\u0026gt;\u0026gt; [x ** 2 for x in range(10) if x % 2 == 0] [0, 4, 16, 36, 64] \u0026gt;\u0026gt;\u0026gt; notas = {'Carmen':5, 'Antonio':4, 'Juan':8, 'Mónica':9, 'María': 6, 'Pablo':3} \u0026gt;\u0026gt;\u0026gt; [nombre for (nombre, nota) in notas.items() if nota \u0026gt;= 5] ['Carmen', 'Juan', 'Mónica', 'María'] Comprensión de diccionarios {expresion-clave:expresion-valor for variables in lista if condicion}\nEsta instrucción genera el diccionario formado por los pares cuyas claves son el resultado de evaluar la expresión expresion-clave y cuyos valores son el resultado de evaluar la expresión expresion-valor, para cada valor que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la condición condición.\n\u0026gt;\u0026gt;\u0026gt; {palabra:len(palabra) for palabra in ['I', 'love', 'Python']} {'I': 1, 'love': 4, 'Python': 6} \u0026gt;\u0026gt;\u0026gt; notas = {'Carmen':5, 'Antonio':4, 'Juan':8, 'Mónica':9, 'María': 6, 'Pablo':3} \u0026gt;\u0026gt;\u0026gt; {nombre: nota +1 for (nombre, nota) in notas.items() if nota \u0026gt;= 5]) {'Carmen': 6, 'Juan': 9, 'Mónica': 10, 'María': 7} ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1a8540ee77b09e0e12351a90a373cdcd","permalink":"/docencia/python/manual/comprension-colecciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/comprension-colecciones/","section":"docencia","summary":"Comprensión de colecciones En muchas aplicaciones es habitual aplicar una función o realizar una operación con los elementos de una colección (lista, tupla o diccionario) y obtener una nueva colección de elementos transformados.","tags":["Comprensión Colecciones"],"title":"Comprensión de Colecciones","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ejercicio 1 Escribir un programa que pregunte al usuario por las ventas de un rango de años y muestre por pantalla un diagrama de líneas con la evolución de las ventas.\nSolución\nEjercicio 2 Escribir una función que reciba una diccionario con las notas de las asignaturas de un curso y una cadena con el nombre de un color y devuelva un diagrama de barras de las notas en el color dado.\nSolución\nEjercicio 3 Escribir una función que reciba una serie de Pandas con las notas de los alumnos de un curso y devuelva un diagrama de cajas con las notas. El diagrama debe tener el título \u0026ldquo;Distribución de notas\u0026rdquo;.\nSolución\nEjercicio 4 Escribir una función que reciba una serie de Pandas con el número de ventas de un producto durante los meses de un trimestre y un título y cree un diagrama de sectores con las ventas en formato png con el titulo dado. El diagrama debe guardarse en un fichero con formato png y el título dado.\nSolución\nEjercicio 5 Escribir una función que reciba una serie de Pandas con el número de ventas de un producto por años y una cadena con el tipo de gráfico a generar (lineas, barras, sectores, areas) y devuelva un diagrama del tipo indicado con la evolución de las ventas por años y con el título \u0026ldquo;Evolución del número de ventas\u0026rdquo;.\nSolución\nEjercicio 6 Escribir una función que reciba un dataframe de Pandas con los ingresos y gastos de una empresa por meses y devuelva un diagrama de líneas con dos líneas, una para los ingresos y otra para los gastos. El diagrama debe tener una leyenda identificando la línea de los ingresos y la de los gastos, un título con el nombre \u0026ldquo;Evolución de ingresos y gastos\u0026rdquo; y el eje y debe empezar en 0.\nSolución\nEjercicio 7 El fichero bancos.csv contiene las cotizaciones de los principales bancos de España con : Empresa (nombre de la empresa), Apertura (precio de la acción a la apertura de bolsa), Máximo (precio máximo de la acción durante la jornada), Mínimo (precio mínimo de la acción durante la jornada), Cierre (precio de la acción al cierre de bolsa), Volumen (volumen al cierre de bolsa). Construir una función reciba el fichero bancos.csv y cree un diagrama de líneas con las series temporales de las cotizaciones de cierre de cada banco.\nSolución\nEjercicio 8 El fichero titanic.csv contiene información sobre los pasajeros del Titanic. Crear un dataframe con Pandas y a partir de él generar los siguientes diagramas.\nDiagrama de sectores con los fallecidos y supervivientes. Histograma con las edades. Diagrama de barras con el número de personas en cada clase. Diagrama de barras con el número de personas fallecidas y supervivientes en cada clase. Diagrama de barras con el número de personas fallecidas y supervivientes acumuladas en cada clase. Solución\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1620774167,"objectID":"137f8a1adb7399b82cdbc8a5d3192d17","permalink":"/docencia/python/ejercicios/matplotlib/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/ejercicios/matplotlib/","section":"docencia","summary":"Ejercicio 1 Escribir un programa que pregunte al usuario por las ventas de un rango de años y muestre por pantalla un diagrama de líneas con la evolución de las ventas.","tags":["Ejercicios","Matplotlib"],"title":"Ejercicios de la librería Matplotlib","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Ficheros Hasta ahora hemos visto como interactuar con un programa a través del teclado (entrada de datos) y la terminal (salida), pero en la mayor parte de las aplicaciones reales tendremos que leer y escribir datos en ficheros.\nAl utilizar ficheros para guardar los datos estos perdurarán tras la ejecución del programa, pudiendo ser consultados o utilizados más tarde.\nLas operaciones más habituales con ficheros son:\nCrear un fichero. Escribir datos en un fichero. Leer datos de un fichero. Borrar un fichero. Creación y escritura de ficheros Para crear un fichero nuevo se utiliza la siguiente función:\nopen(ruta, 'w') : Crea el fichero con la ruta ruta, lo abre en modo escritura (el argumento \u0026lsquo;w\u0026rsquo; significa write) y devuelve un objeto que lo referencia. Si el fichero indicado por la ruta ya existe en el sistema, se reemplazará por el nuevo.\nUna vez creado el fichero, para escribir datos en él se utiliza el siguiente método:\nf.write(c) : Escribe la cadena c en el fichero referenciado por f y devuelve el número de caracteres escritos. \u0026gt;\u0026gt;\u0026gt; f = open('saludo.txt', 'w') \u0026gt;\u0026gt;\u0026gt; f.write('¡Bienvenido a Python!') 21 Añadir datos a un fichero Si en lugar de crear un fichero nuevo queremos añadir datos a un fichero existente se debe utilizar la siguiente función:\nopen(ruta, 'a') : Abre el fichero con la ruta ruta en modo añadir (el argumento \u0026lsquo;a\u0026rsquo; significa append) y devuelve un objeto que lo referencia. Una vez abierto el fichero, se utiliza el método de escritura anterior y los datos se añaden al final del fichero.\n\u0026gt;\u0026gt;\u0026gt; f = open('saludo.txt', 'a') \u0026gt;\u0026gt;\u0026gt; f.write('\\n¡Hasta pronto!') 15 Leer datos de un fichero Para abrir un fichero en modo lectura se utiliza la siguiente función:\nopen(ruta, 'r') : Abre el fichero con la ruta ruta en modo lectura (el argumento \u0026lsquo;r\u0026rsquo; significa read) y devuelve un objeto que lo referencia. Una vez abierto el fichero, se puede leer todo el contenido del fichero o se puede leer línea a línea. Para ello se utilizan las siguientes funciones:\nf.read() : Devuelve todos los datos contenidos en el fichero referenciado por f como una cadena de caracteres.\nf.readlines() : Devuelve una lista de cadenas de caracteres donde cada cadena es una linea del fichero referenciado por f.\n\u0026gt;\u0026gt;\u0026gt; f = open('saludo.txt', 'r') \u0026gt;\u0026gt;\u0026gt; print(f.read()) ¡Bienvenido a Python! ¡Hasta pronto! \u0026gt;\u0026gt;\u0026gt; f = open('saludo.txt', 'r') \u0026gt;\u0026gt;\u0026gt; lineas = f.readlines() \u0026gt;\u0026gt;\u0026gt; print(lineas) ['Bienvenido a Python!\\n', '¡Hasta pronto!'] Cerrar un fichero Para cerrar un fichero se utiliza el siguiente método:\nf.close() : Cierra el fichero referenciado por el objeto f.\nCuando se termina de trabajar con un fichero conviene cerrarlo, sobre todo si se abre en modo escritura, ya que mientras está abierto en este modo no se puede abrir por otra aplicación. Si no se cierra explícitamente un fichero, Python intentará cerrarlo cuando estime que ya no se va a usar más.\n\u0026gt;\u0026gt;\u0026gt; f = open('saludo.txt'): \u0026gt;\u0026gt;\u0026gt; print(f.read()) ¡Bienvenido a Python! ¡Hasta pronto! \u0026gt;\u0026gt;\u0026gt; f.close() # Cierre del fichero \u0026gt;\u0026gt;\u0026gt; print(f.read()) # Produce un error Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; ValueError: I/O operation on closed file. La estructura with open(...) as Para despreocuparnos del cierre de un fichero cuando ya no es necesario y no tener que cerrarlo explícitamente, se utiliza la siguiente estructura:\nwith open(ruta, modo) as f:\nbloque código\nEsta estructura abre el fichero con la ruta ruta en el modo modo ('w' para escribir, 'a' para añadir y 'r' para leer) y devuelve una referencia al mismo en la variable f. El fichero permanece abierto mientras se ejecuta el bloque de código asociado y se cierra automáticamente cuando termina la ejecución del bloque.\n\u0026gt;\u0026gt;\u0026gt; with open('saludo.txt', 'w') as f: ... f.write(\u0026quot;Hola de nuevo\u0026quot;) ... 13 \u0026gt;\u0026gt;\u0026gt; with open('saludo.txt', 'r') as f: ... print(f.read()) ... Hola de nuevo \u0026gt;\u0026gt;\u0026gt; print(f.read()) # Produce un error al estar el fichero cerrado Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; ValueError: I/O operation on closed file. Renombrado y borrado de un fichero Para renombra o borrar un fichero se utilizan funciones del módulo os.\nos.rename(ruta1, ruta2) : Renombra y mueve el fichero de la ruta ruta1 a la ruta ruta2.\nos.remove(ruta) : Borra el fichero de la ruta ruta.\nAntes de borrar o renombra un directorio conviene comprobar que existe para que no se produzca un error. Para ello se utiliza la función\nos.path.isfile(ruta) : Devuelve True si existe un fichero en la ruta ruta y False en caso contrario.\nRenombrado y borrado de un fichero o directorio \u0026gt;\u0026gt;\u0026gt; import os \u0026gt;\u0026gt;\u0026gt; f = 'saludo.txt' \u0026gt;\u0026gt;\u0026gt; if os.path.isfile(f): ... os.rename(f, 'bienvenida.txt') # renombrado ... else: ... print('¡El fichero', f, 'no existe!') ... \u0026gt;\u0026gt;\u0026gt; f = 'bienvenida.txt' \u0026gt;\u0026gt;\u0026gt; if os.path.isfile(f): ... os.remove(f) # borrado ... else: ... print('¡El fichero', f, 'no existe!') ... Creación, cambio y eliminación de directorios Para trabajar con directorios también se utilizan funciones del módulo os.\nos.listdir(ruta) : Devuelve una lista con los ficheros y directiorios contenidos en la ruta ruta.\nos.mkdir(ruta) : Crea un nuevo directorio en la ruta ruta.\nos.chdir(ruta) : Cambia el directorio actual al indicado por la ruta ruta.\nos.getcwd() : Devuelve una cadena con la ruta del directorio actual.\nos.rmdir(ruta) : Borra el directorio de la ruta ruta, siempre y cuando esté vacío.\nLeer un fichero de internet Para leer un fichero de internet hay que utilizar la función urlopen del módulo urllib.request.\nurlopen(url) : Abre el fichero con la url especificada y devuelve un objeto del tipo fichero al que se puede acceder con los métodos de lectura de ficheros anteriores.\n\u0026gt;\u0026gt;\u0026gt; from urllib import request \u0026gt;\u0026gt;\u0026gt; f = request.urlopen('https://raw.githubusercontent.com/asalber/asalber.github.io/master/README.md') \u0026gt;\u0026gt;\u0026gt; datos = f.read() \u0026gt;\u0026gt;\u0026gt; print(datos.decode('utf-8')) Aprende con Alf =============== Este es el repositorio del sitio web Aprende con Alf: http://aprendeconalf.es ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1652952238,"objectID":"89a33074707749b011f5d18b22103e24","permalink":"/docencia/python/manual/ficheros/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/ficheros/","section":"docencia","summary":"Ficheros Hasta ahora hemos visto como interactuar con un programa a través del teclado (entrada de datos) y la terminal (salida), pero en la mayor parte de las aplicaciones reales tendremos que leer y escribir datos en ficheros.","tags":["Ficheros"],"title":"Ficheros","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Control de errores mediante excepciones Python utiliza un objeto especial llamado excepción para controlar cualquier error que pueda ocurrir durante la ejecución de un programa.\nCuando ocurre un error durante la ejecución de un programa, Python crea una excepción. Si no se controla esta excepción la ejecución del programa se detiene y se muestra el error (traceback).\n\u0026gt;\u0026gt;\u0026gt; print(1 / 0) # Error al intentar dividir por 0. Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; ZeroDivisionError: division by zero Tipos de excepciones Los principales excepciones definidas en Python son:\nTypeError : Ocurre cuando se aplica una operación o función a un dato del tipo inapropiado. ZeroDivisionError : Ocurre cuando se itenta dividir por cero. OverflowError : Ocurre cuando un cálculo excede el límite para un tipo de dato numérico. IndexError : Ocurre cuando se intenta acceder a una secuencia con un índice que no existe. KeyError : Ocurre cuando se intenta acceder a un diccionario con una clave que no existe. FileNotFoundError : Ocurre cuando se intenta acceder a un fichero que no existe en la ruta indicada. ImportError : Ocurre cuando falla la importación de un módulo. Consultar la documentaciónde Python para ver la lista de exepciones predefinidas.\nControl de excepciones try - except - else Para evitar la interrución de la ejecución del programa cuando se produce un error, es posible controlar la exepción que se genera con la siguiente instrucción:\ntry:\nbloque código 1\nexcept excepción:\nbloque código 2\nelse:\nbloque código 3\nEsta instrucción ejecuta el primer bloque de código y si se produce un error que genera una excepción del tipo excepción entonces ejecuta el segundo bloque de código, mientras que si no se produce ningún error, se ejecuta el tercer bloque de código.\nControl de excepciones \u0026gt;\u0026gt;\u0026gt; def division(a, b): ... try: ... result = a / b ... except ZeroDivisionError: ... print('¡No se puede dividir por cero!') ... else: ... print(result) ... \u0026gt;\u0026gt;\u0026gt; division(1, 0) ¡No se puede dividir por cero! \u0026gt;\u0026gt;\u0026gt; division(1, 2) 0.5 \u0026gt;\u0026gt;\u0026gt; try: ... f = open('fichero.txt') # El fichero no existe ... except FileNotFoundError: ... print('¡El fichero no existe!') ... else: ... print(f.read()) ¡El fichero no existe! ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"46efb42a9f21f7d33060175e47ee6c7f","permalink":"/docencia/python/manual/excepciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/excepciones/","section":"docencia","summary":"Control de errores mediante excepciones Python utiliza un objeto especial llamado excepción para controlar cualquier error que pueda ocurrir durante la ejecución de un programa.\nCuando ocurre un error durante la ejecución de un programa, Python crea una excepción.","tags":["Excepciones"],"title":"Excepciones","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Objetos Python también permite la programación orientada a objetos, que es un paradigma de programación en la que los datos y las operaciones que pueden realizarse con esos datos se agrupan en unidades lógicas llamadas objetos.\nLos objetos suelen representar conceptos del dominio del programa, como un estudiante, un coche, un teléfono, etc. Los datos que describen las características del objeto se llaman atributos y son la parte estática del objeto, mientras que las operaciones que puede realizar el objeto se llaman métodos y son la parte dinámica del objeto.\nLa programación orientada a objetos permite simplificar la estructura y la lógica de los grandes programas en los que intervienen muchos objetos que interactúan entre si.\nEjemplo. Una tarjeta de crédito puede representarse como un objeto:\nAtributos: Número de la tarjeta, titular, balance, fecha de caducidad, pin, entidad emisora, estado (activa o no), etc. Métodos: Activar, pagar, renovar, anular. Acceso a los atributos y métodos de un objeto dir(objeto): Devuelve una lista con los nombres de los atributos y métodos del objeto objeto. Para ver si un objeto tiene un determinado atributo o método se utiliza la siguiente función:\nhasattr(objeto, elemento): Devuelve True si elemento es un atributo o un método del objeto objeto y False en caso contrario. Para acceder a los atributos y métodos de un objeto se pone el nombre del objeto seguido del operador punto y el nombre del atributo o el método.\nobjeto.atributo: Accede al atributo atributo del objeto objeto. objeto.método(parámetros): Ejecuta el método método del objeto objeto con los parámetros que se le pasen. En Python los tipos de datos primitivos son también objetos que tienen asociados atributos y métodos.\nEjemplo. Las cadenas tienen un método upper que convierte la cadena en mayúsculas. Para aplicar este método a la cadena c se utiliza la instrucción c.upper().\n\u0026gt;\u0026gt;\u0026gt; c = 'Python' \u0026gt;\u0026gt;\u0026gt; print(c.upper()) # Llamada al método upper del objeto c (cadena) PYTHON Ejemplo. Las listas tienen un método append que convierte añade un elemento al final de la lista. Para aplicar este método a la lista l se utiliza la instrucción l.append(\u0026lt;elemento\u0026gt;).\n\u0026gt;\u0026gt;\u0026gt; l = [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; l.append(4) # Llamada al método append del objeto l (lista) \u0026gt;\u0026gt;\u0026gt; print(l) [1, 2, 3, 4] Clases (class) Los objetos con los mismos atributos y métodos se agrupan clases. Las clases definen los atributos y los métodos, y por tanto, la semántica o comportamiento que tienen los objetos que pertenecen a esa clase. Se puede pensar en una clase como en un molde a partir del cuál se pueden crear objetos.\nPara declarar una clase se utiliza la palabra clave class seguida del nombre de la clase y dos puntos, de acuerdo a la siguiente sintaxis:\nclass \u0026lt;nombre-clase\u0026gt;:\n\u0026lt;atributos\u0026gt;\n\u0026lt;métodos\u0026gt;\nLos atributos se definen igual que las variables mientras que los métodos se definen igual que las funciones. Tanto unos como otros tienen que estar indentados por 4 espacios en el cuerpo de la clase.\nEjemplo El siguiente código define la clase Saludo sin atributos ni métodos. La palabra reservada pass indica que la clase está vacía.\n\u0026gt;\u0026gt;\u0026gt; class Saludo: ... pass # Clase vacía sin atributos ni métodos. \u0026gt;\u0026gt;\u0026gt; print(Saludo) \u0026lt;class '__main__.Saludo'\u0026gt; Es una buena práctica comenzar el nombre de una clase con mayúsculas.\nClases primitivas En Python existen clases predefinidas para los tipos de datos primitivos:\nint: Clase de los números enteros. float: Clase de los números reales. str: Clase de las cadenas de caracteres. list: Clase de las listas. tuple: Clase de las tuplas. dict: Clase de los diccionarios. \u0026gt;\u0026gt;\u0026gt; type(1) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(1.5) \u0026lt;class 'float'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type('Python') \u0026lt;class 'str'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type([1,2,3]) \u0026lt;class 'list'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type((1,2,3)) \u0026lt;class 'tuple'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type({1:'A', 2:'B'}) \u0026lt;class 'dict'\u0026gt; Instanciación de clases Para crear un objeto de una determinada clase se utiliza el nombre de la clase seguida de los parámetros necesarios para crear el objeto entre paréntesis.\nclase(parámetros): Crea un objeto de la clase clase inicializado con los parámetros dados. Cuando se crea un objeto de una clase se dice que el objeto es una instancia de la clase.\n\u0026gt;\u0026gt;\u0026gt; class Saludo: ... pass # Clase vacía sin atributos ni métodos. \u0026gt;\u0026gt;\u0026gt; s = Saludo() # Creación del objeto mediante instanciación de la clase. \u0026gt;\u0026gt;\u0026gt; s \u0026lt;__main__.Saludo object at 0x7fcfc7756be0\u0026gt; # Dirección de memoria donde se crea el objeto \u0026gt;\u0026gt;\u0026gt; type(s) \u0026lt;class '__main__.Saludo'\u0026gt; # Clase del objeto Definición de métodos Los métodos de una clase son las funciones que definen el comportamiento de los objetos de esa clase.\nSe definen como las funciones con la palabra reservada def. La única diferencia es que su primer parámetro es especial y se denomina self. Este parámetro hace siempre referencia al objeto desde donde se llama el método, de manera que para acceder a los atributos o métodos de una clase en su propia definición se puede utilizar la sintaxis self.atributo o self.método.\n\u0026gt;\u0026gt;\u0026gt; class Saludo: ... mensaje = \u0026quot;Bienvenido \u0026quot; # Definición de un atributo ... def saludar(self, nombre): # Definición de un método ... print(self.mensaje + nombre) ... return ... \u0026gt;\u0026gt;\u0026gt; s = Saludo() \u0026gt;\u0026gt;\u0026gt; s.saludar('Alf') Bienvenido Alf La razón por la que existe el parámetro self es porque Python traduce la llamada a un método de un objeto objeto.método(parámetros) en la llamada clase.método(objeto, parámetros), es decir, se llama al método definido en la clase del objeto, pasando como primer argumento el propio objeto, que se asocia al parámetro self.\nEl método __init__ En la definición de una clase suele haber un método llamado __init__ que se conoce como inicializador. Este método es un método especial que se llama cada vez que se instancia una clase y sirve para inicializar el objeto que se crea. Este método crea los atributos que deben tener todos los objetos de la clase y por tanto contiene los parámetros necesarios para su creación, pero no devuelve nada. Se invoca cada vez que se instancia un objeto de esa clase.\n\u0026gt;\u0026gt;\u0026gt; class Tarjeta: ... def __init__(self, id, cantidad = 0): # Inicializador self.id = id # Creación del atributo id ... self.saldo = cantidad # Creación del atributo saldo ... return ... def mostrar_saldo(self): ... print('El saldo es', self.saldo, '€') ... return \u0026gt;\u0026gt;\u0026gt; t = Tarjeta('1111111111', 1000) # Creación de un objeto con argumentos \u0026gt;\u0026gt;\u0026gt; t.muestra_saldo() El saldo es 1000 € Atributos de instancia vs atributos de clase Los atributos que se crean dentro del método __init__ se conocen como atributos del objeto, mientras que los que se crean fuera de él se conocen como atributos de la clase. Mientras que los primeros son propios de cada objeto y por tanto pueden tomar valores distintos, los valores de los atributos de la clase son los mismos para cualquier objeto de la clase.\nEn general, no deben usarse atributos de clase, excepto para almacenar valores constantes.\n\u0026gt;\u0026gt;\u0026gt; class Circulo: ... pi = 3.14159 # Atributo de clase ... def __init__(self, radio): ... self.radio = radio # Atributo de instancia ... def area(self): ... return Circulo.pi * self.radio ** 2 ... \u0026gt;\u0026gt;\u0026gt; c1 = Circulo(2) \u0026gt;\u0026gt;\u0026gt; c2 = Circulo(3) \u0026gt;\u0026gt;\u0026gt; print(c1.area()) 12.56636 \u0026gt;\u0026gt;\u0026gt; print(c2.area()) 28.27431 \u0026gt;\u0026gt;\u0026gt; print(c1.pi) 3.14159 \u0026gt;\u0026gt;\u0026gt; print(c2.pi) 3.14159 El método __str__ Otro método especial es el método llamado __str__ que se invoca cada vez que se llama a las funciones print o str. Devuelve siempre una cadena que se suele utilizar para dar una descripción informal del objeto. Si no se define en la clase, cada vez que se llama a estas funciones con un objeto de la clase, se muestra por defecto la posición de memoria del objeto.\n\u0026gt;\u0026gt;\u0026gt; class Tarjeta: ... def __init__(self, numero, cantidad = 0): ... self.numero = numero ... self.saldo = cantidad ... return ... def __str__(self): ... return 'Tarjeta número {} con saldo {:.2f}€'.format(self.numero, str(self.saldo)) \u0026gt;\u0026gt;\u0026gt; t = tarjeta('0123456789', 1000) \u0026gt;\u0026gt;\u0026gt; print(t) Tarjeta número 0123456789 con saldo 1000.00€ Herencia Una de las características más potentes de la programación orientada a objetos es la herencia, que permite definir una especialización de una clase añadiendo nuevos atributos o métodos. La nueva clase se conoce como clase hija y hereda los atributos y métodos de la clase original que se conoce como clase madre.\nPara crear un clase a partir de otra existente se utiliza la misma sintaxis que para definir una clase, pero poniendo detrás del nombre de la clase entre paréntesis los nombres de las clases madre de las que hereda.\nEjemplo. A partir de la clase Tarjeta definida antes podemos crear mediante herencia otra clase Tarjeta_Descuento para representar las tarjetas de crédito que aplican un descuento sobre las compras.\n\u0026gt;\u0026gt;\u0026gt; class Tarjeta: ... def __init__(self, id, cantidad = 0): ... self.id = id ... self.saldo = cantidad ... return ... def mostrar_saldo(self): # Método de la clase Tarjeta que hereda la clase Tarjeta_descuento ... print('El saldo es', self.saldo, '€.') ... return ... \u0026gt;\u0026gt;\u0026gt; class Tarjeta_descuento(Tarjeta): ... def __init__(self, id, descuento, cantidad = 0): ... self.id = id ... self.descuento = descuento ... self.saldo = cantidad ... return ... def mostrar_descuento(self): # Método exclusivo de la clase Tarjeta_descuento ... print('Descuento de', self.descuento, '% en los pagos.') ... return ... \u0026gt;\u0026gt;\u0026gt; t = Tarjeta_descuento('0123456789', 2, 1000) \u0026gt;\u0026gt;\u0026gt; t.mostrar_saldo() El saldo es 1000 €. \u0026gt;\u0026gt;\u0026gt; t.mostrar_descuento() Descuento de 2 % en los pagos. La principal ventaja de la herencia es que evita la repetición de código y por tanto los programas son más fáciles de mantener.\nEn el ejemplo de la tarjeta de crédito, el método mostrar_saldo solo se define en la clase madre. De esta manera, cualquier cambio que se haga en el cuerpo del método en la clase madre, automáticamente se propaga a las clases hijas. Sin la herencia, este método tendría que replicarse en cada una de las clases hijas y cada vez que se hiciese un cambio en él, habría que replicarlo también en las clases hijas.\nJerarquía de clases A partir de una clase derivada mediante herencia se pueden crear nuevas clases hijas aplicando de nuevo la herencia. Ello da lugar a una jerarquía de clases que puede representarse como un árbol donde cada clase hija se representa como una rama que sale de la clase madre.\nDebido a la herencia, cualquier objeto creado a partir de una clase es una instancia de la clase, pero también lo es de las clases que son ancestros de esa clase en la jerarquía de clases.\nEl siguiente comando permite averiguar si un objeto es instancia de una clase:\nisinstance(objeto, clase): Devuelve True si el objeto objeto es una instancia de la clase clase y False en caso contrario. # Asumiendo la definición de las clases Tarjeta y Tarjeta_descuento anteriores. \u0026gt;\u0026gt;\u0026gt; t1 = Tarjeta('1111111111', 0) \u0026gt;\u0026gt;\u0026gt; t2 = t = Tarjeta_descuento('2222222222', 2, 1000) \u0026gt;\u0026gt;\u0026gt; isinstance(t1, Tarjeta) True \u0026gt;\u0026gt;\u0026gt; isinstance(t1, Tarjeta_descuento) False \u0026gt;\u0026gt;\u0026gt; isinstance(t2, Tarjeta_descuento) True \u0026gt;\u0026gt;\u0026gt; isinstance(t2, Tarjeta) True Sobrecarga y polimorfismo Los objetos de una clase hija heredan los atributos y métodos de la clase madre y, por tanto, a priori tienen tienen el mismo comportamiento que los objetos de la clase madre. Pero la clase hija puede definir nuevos atributos o métodos o reescribir los métodos de la clase madre de manera que sus objetos presenten un comportamiento distinto. Esto último se conoce como sobrecarga.\nDe este modo, aunque un objeto de la clase hija y otro de la clase madre pueden tener un mismo método, al invocar ese método sobre el objeto de la clase hija, el comportamiento puede ser distinto a cuando se invoca ese mismo método sobre el objeto de la clase madre. Esto se conoce como polimorfismo y es otra de las características de la programación orientada a objetos.\n\u0026gt;\u0026gt;\u0026gt; class Tarjeta: ... def __init__(self, id, cantidad = 0): ... self.id = id ... self.saldo = cantidad ... return ... def mostrar_saldo(self): ... print('El saldo es {:.2f}€.'.format(self.saldo)) ... return ... def pagar(self, cantidad): ... self.saldo -= cantidad ... return \u0026gt;\u0026gt;\u0026gt; class Tarjeta_Oro(Tarjeta): ... def __init__(self, id, descuento, cantidad = 0): ... self.id = id ... self.descuento = descuento ... self.saldo = cantidad ... return ... def pagar(self, cantidad): ... self.saldo -= cantidad * (1 - self.descuento / 1...00) \u0026gt;\u0026gt;\u0026gt; t1 = Tarjeta('1111111111', 1000) \u0026gt;\u0026gt;\u0026gt; t2 = Tarjeta_Oro('2222222222', 1, 1000) \u0026gt;\u0026gt;\u0026gt; t1.pagar(100) \u0026gt;\u0026gt;\u0026gt; t1.mostrar_saldo() El saldo es 900.00€. \u0026gt;\u0026gt;\u0026gt; t2.pagar(100) \u0026gt;\u0026gt;\u0026gt; t2.mostrar_saldo() El saldo es 901.00€. Principios de la programación orientada a objetos La programación orientada a objetos se basa en los siguientes principios:\nEncapsulación: Agrupar datos (atributos) y procedimientos (métodos) en unidades lógicas (objetos) y evitar maninupar los atributos accediendo directamente a ellos, usando, en su lugar, métodos para acceder a ellos. Abstracción: Ocultar al usuario de la clase los detalles de implementación de los métodos. Es decir, el usuario necesita saber qué hace un método y con qué parámetros tiene que invocarlo (interfaz), pero no necesita saber cómo lo hace. Herencia: Evitar la duplicación de código en clases con comportamientos similares, definiendo los métodos comunes en una clase madre y los métodos particulares en clases hijas. Polimorfismo: Redefinir los métodos de la clase madre en las clases hijas cuando se requiera un comportamiento distinto. Así, un mismo método puede realizar operaciones distintas dependiendo del objeto sobre el que se aplique. Resolver un problema siguiendo el paradigma de la programación orientada a objetos requiere un cambio de mentalidad con respecto a como se resuelve utilizando el paradigma de la programación procedimental.\nLa programación orientada a objetos es más un proceso de modelado, donde se identifican las entidades que intervienen en el problema y su comportamiento, y se definen clases que modelizan esas entidades. Por ejemplo, las entidades que intervienen en el pago con una tarjeta de crédito serían la tarjeta, el terminal de venta, la cuenta corriente vinculada a la tarjeta, el banco, etc. Cada una de ellas daría lugar a una clase.\nDespués se crean objetos con los datos concretos del problema y se hace que los objetos interactúen entre sí, a través de sus métodos, para resolver el problema. Cada objeto es responsable de una subtarea y colaboran entre ellos para resolver la tarea principal. Por ejemplo, la terminal de venta accede a los datos de la tarjeta y da la orden al banco para que haga un cargo en la cuenta vinculada a la tarjeta.\nDe esta forma se pueden abordar problemas muy complejos descomponiéndolos en pequeñas tareas que son más fáciles de resolver que el problema principal (¡divide y vencerás!).\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1615158565,"objectID":"4520fbb17f2fb3d4683366a85e897c32","permalink":"/docencia/python/manual/objetos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/objetos/","section":"docencia","summary":"Objetos Python también permite la programación orientada a objetos, que es un paradigma de programación en la que los datos y las operaciones que pueden realizarse con esos datos se agrupan en unidades lógicas llamadas objetos.","tags":[],"title":"Programación Orientada a Objetos","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Módulos El código de un programa en Python puede reutilizarse en otro importándolo. Cualquier fichero con código de Python reutilizable se conoce como módulo o librería.\nLos módulos suelen contener funciones reutilizables, pero también pueden definir variables con datos simples o compuestos (listas, diccionarios, etc), o cualquier otro código válido en Python.\nPython permite importar un módulo completo o sólo algunas partes de él. Cuando se importa un módulo completo, el intérprete de Python ejecuta todo el código que contiene el módulo, mientras que si solo se importan algunas partes del módulo, solo se ejecutarán esas partes.\nImportación completa de módulos (import) import M : Ejecuta el código que contiene M y crea una referencia a él, de manera que pueden invocarse un objeto o función f definida en él mediante la sintaxis M.f.\nimport M as N : Ejecuta el código que contiene M y crea una referencia a él con el nombre N, de manera que pueden invocarse un objeto o función f definida en él mediante la sintaxis N.f. Esta forma es similar a la anterior, pero se suele usar cuando el nombre del módulo es muy largo para utilizar un alias más corto.\nImportación parcial de módulos (from import) from M import f, g, ... : Ejecuta el código que contiene M y crea referencias a los objetos f, g, ..., de manera que pueden ser invocados por su nombre. De esta manera para invocar cualquiera de estos objetos no hace falta precederlos por el nombre del módulo, basta con escribir su nombre.\nfrom M import * : Ejecuta el código que contiene M y crea referencias a todos los objetos públicos (aquellos que no empiezan por el carácter _) definidos en el módulo, de manera que pueden ser invocados por su nombre.\nCuando se importen módulos de esta manera hay que tener cuidado de que no haya coincidencias en los nombres de funciones, variables u otros objetos.\n\u0026gt;\u0026gt;\u0026gt; import calendar \u0026gt;\u0026gt;\u0026gt; print(calendar.month(2019, 4)) April 2019 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \u0026gt;\u0026gt;\u0026gt; from math import * \u0026gt;\u0026gt;\u0026gt; cos(pi) -1.0 Módulos de la librería estándar más importantes Python viene con una biblioteca de módulos predefinidos que no necesitan instalarse. Algunos de los más utilizados son:\nsys: Funciones y parámetros específicos del sistema operativo. os: Interfaz con el sistema operativo. os.path: Funciones de acceso a las rutas del sistema. io: Funciones para manejo de flujos de datos y ficheros. string: Funciones con cadenas de caracteres. datetime: Funciones para fechas y tiempos. math: Funciones y constantes matemáticas. statistics: Funciones estadísticas. random: Generación de números pseudo-aleatorios. Otras librerías imprescindibles Estas librerías no vienen en la distribución estándar de Python y necesitan instalarse. También puede optarse por la distribución Anaconda que incorpora la mayoría de estas librerías.\nNumPy: Funciones matemáticas avanzadas y arrays. SciPy: Más funciones matemáticas para aplicaciones científicas. matplotlib: Análisis y representación gráfica de datos. Pandas: Funciones para el manejo y análisis de estructuras de datos. Request: Acceso a internet por http. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"f050bffb58ac2f325858a32ad0ad73ec","permalink":"/docencia/python/manual/modulos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/modulos/","section":"docencia","summary":"Módulos El código de un programa en Python puede reutilizarse en otro importándolo. Cualquier fichero con código de Python reutilizable se conoce como módulo o librería.\nLos módulos suelen contener funciones reutilizables, pero también pueden definir variables con datos simples o compuestos (listas, diccionarios, etc), o cualquier otro código válido en Python.","tags":["Módulos"],"title":"Módulos","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Para manejar fechas en Python se suele utilizar la librería datetime que incorpora los tipos de datos date, time y datetime para representar fechas y funciones para manejarlas. Algunas de las operaciones más habituales que permite son:\nAcceder a los distintos componentes de una fecha (año, mes, día, hora, minutos, segundos y microsegundos). Convertir cadenas con formato de fecha en los tipos date, time o datetime. Convertir fechas de los tipos date, time o datetime en cadenas formateadas de acuerdo a diferentes formatos de fechas. Hacer aritmética de fechas (sumar o restar fechas). Comparar fechas. Los tipos de datos date, time y datetime date(año, mes, dia) : Devuelve un objeto de tipo date que representa la fecha con el año, mes y dia indicados. time(hora, minutos, segundos, microsegundos) : Devuelve un objeto de tipo time que representa un tiempo la hora, minutos, segundos y microsegundos indicados. datetime(año, mes, dia, hora, minutos, segundos, microsegundos) : Devuelve un objeto de tipo datetime que representa una fecha y hora con el año, mes, dia, hora, minutos, segundos y microsegundos indicados. from datetime import date, time, datetime \u0026gt;\u0026gt;\u0026gt; date(2020, 12, 25) datetime.date(2020, 12, 25) \u0026gt;\u0026gt;\u0026gt; time(13,30,5) datetime.time(13, 30, 5) \u0026gt;\u0026gt;\u0026gt; datetime(2020, 12, 25, 13, 30, 5) datetime.datetime(2020, 12, 25, 13, 30, 5) \u0026gt;\u0026gt;\u0026gt; print(datetime(2020, 12, 25, 13, 30, 5)) 2020-12-25 13:30:05 \u0026ndash;\nAcceso a los componentes de una fecha date.today() : Devuelve un objeto del tipo date la fecha del sistema en el momento en el que se ejecuta. datetime.now(): Devuelve un objeto del tipo datetime con la fecha y la hora del sistema en el momento exacto en el que se ejecuta. d.year : Devuelve el año de la fecha d, puede ser del tipo date o datetime. d.month : Devuelve el mes de la fecha d, que puede ser del tipo date o datetime. d.day : Devuelve el día de la fecha d, que puede ser del tipo date o datetime. d.weekday() : Devuelve el día de la semana de la fecha d, que puede serpuede ser del tipo date o datetime. t.hour : Devuelve las horas del tiempo t, que puede ser del tipo time o datetime. t.hour : Devuelve los minutos del tiempo t, que puede ser del tipo time o datetime. t.second : Devuelve los segundos del tiempo t, que puede ser del tipo time o datetime. t.microsecond : Devuelve los microsegundos del tiempo t, que puede ser del tipo time o datetime. \u0026gt;\u0026gt;\u0026gt; from datetime import date, time, datetime \u0026gt;\u0026gt;\u0026gt; print(date.today()) 2020-04-11 \u0026gt;\u0026gt;\u0026gt; dt = datetime.now() \u0026gt;\u0026gt;\u0026gt; dt.year 2020 \u0026gt;\u0026gt;\u0026gt; dt.month 4 \u0026gt;\u0026gt;\u0026gt; dt.day 11 \u0026gt;\u0026gt;\u0026gt; dt.hour 22 \u0026gt;\u0026gt;\u0026gt; dt.minute 5 \u0026gt;\u0026gt;\u0026gt; dt.second 45 \u0026gt;\u0026gt;\u0026gt; dt.microsecond 1338 Conversión de fechas en cadenas con diferentes formatos d.strftime(formato) : Devuelve la cadena que resulta de transformar la fecha d con el formato indicado en la cadena formato. La cadena formato puede contener los siguientes marcadores de posición: %Y (año completo), %y (últimos dos dígitos del año), %m (mes en número), %B (mes en palabra), %d (día), %A (día de la semana), %a (día de la semana abrevidado), %H (hora en formato 24 horas), %I (hora en formato 12 horas), %M (minutos), %S (segundos), %p (AM o PM), %C (fecha y hora completas), %x (fecha completa), %X (hora completa). \u0026gt;\u0026gt;\u0026gt; from datetime import date, time, datetime \u0026gt;\u0026gt;\u0026gt; d = datetime.now() \u0026gt;\u0026gt;\u0026gt; print(d.strftime('%d-%m-%Y')) 13-04-2020 \u0026gt;\u0026gt;\u0026gt; print(d.strftime('%A, %d %B, %y')) Monday, 13 April, 20 \u0026gt;\u0026gt;\u0026gt; print(d.strftime('%H:%M:%S')) 20:55:53 \u0026gt;\u0026gt;\u0026gt; print(d.strftime('%H horas, %M minutos y %S segundos')) 20 horas, 55 minutos y 53 segundos Conversión de cadenas en fechas strptime(s, formato) : Devuelve el objeto de tipo date, time o datetime que resulta de convertir la cadena s de acuerdo al formato indicado en la cadena formato. La cadena formato puede contener los siguientes marcadores de posición: %Y (año completo), %y (últimos dos dígitos del año), %m (mes en número), %B (mes en palabra), %d (día), %A (día de la semana), %a (día de la semana abrevidado), %H (hora en formato 24 horas), %I (hora en formato 12 horas), %M (minutos), %S (segundos), %p (AM o PM), %C (fecha y hora completas), %x (fecha completa), %X (hora completa). \u0026gt;\u0026gt;\u0026gt; from datetime import date, time, datetime \u0026gt;\u0026gt;\u0026gt; datetime.strptime('15/4/2020', '%d/%m/%Y') datetime.datetime(2020, 4, 15, 0, 0) \u0026gt;\u0026gt;\u0026gt; datetime.strptime('2020-4-15 20:50:30', '%Y-%m-%d %H:%M:%S') datetime.datetime(2020, 4, 15, 20, 50, 30) Aritmética de fechas Para representar el tiempo transcurrido entre dos fechas se utiliza el tipo timedelta.\ntimedelta(dias, segundos, microsegundos) : Devuelve un objeto del tipo timedelta que representa un intervalo de tiempo con los dias, segundos y micorsegundos indicados. d1 - d2 : Devuelve un objeto del tipo timedelta que representa el tiempo transcurrido entre las fechas d1 y d2 del tipo datetime. d + delta : Devuelve la fecha del tipo datetime que resulta de sumar a la fecha d el intervalo de tiempo delta, donde delta es del tipo timedelta. \u0026gt;\u0026gt;\u0026gt; from datetime import date, time, datetime, timedelta \u0026gt;\u0026gt;\u0026gt; d1 = datetime(2020, 1, 1) \u0026gt;\u0026gt;\u0026gt; d1 + timedelta(31, 3600) datetime.datetime(2020, 2, 1, 1, 0) \u0026gt;\u0026gt;\u0026gt; datetime.now() - d1 datetime.timedelta(days=132, seconds=1826, microseconds=895590) ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"0489d5b2ec4534b1c689c4f0fc90d4a6","permalink":"/docencia/python/manual/datetime/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/datetime/","section":"docencia","summary":"Para manejar fechas en Python se suele utilizar la librería datetime que incorpora los tipos de datos date, time y datetime para representar fechas y funciones para manejarlas. Algunas de las operaciones más habituales que permite son:","tags":[],"title":"La librería Datetime","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":" NumPy es una librería de Python especializada en el cálculo numérico y el análisis de datos, especialmente para un gran volumen de datos.\nIncorpora una nueva clase de objetos llamados arrays que permite representar colecciones de datos de un mismo tipo en varias dimensiones, y funciones muy eficientes para su manipulación.\nLa ventaja de Numpy frente a las listas predefinidas en Python es que el procesamiento de los arrays se realiza mucho más rápido (hasta 50 veces más) que las listas, lo cual la hace ideal para el procesamiento de vectores y matrices de grandes dimensiones.\nLa clase de objetos array Un array es una estructura de datos de un mismo tipo organizada en forma de tabla o cuadrícula de distintas dimensiones.\nLas dimensiones de un array también se conocen como ejes.\nCreación de arrays Para crear un array se utiliza la siguiente función de NumPy\nnp.array(lista) : Crea un array a partir de la lista o tupla lista y devuelve una referencia a él. El número de dimensiones del array dependerá de las listas o tuplas anidadas en lista:\nPara una lista de valores se crea un array de una dimensión, también conocido como vector.\nPara una lista de listas de valores se crea un array de dos dimensiones, también conocido como matriz.\nPara una lista de listas de listas de valores se crea un array de tres dimensiones, también conocido como cubo.\nY así sucesivamente. No hay límite en el número de dimensiones del array más allá de la memoria disponible en el sistema.\nLos elementos de la lista o tupla deben ser del mismo tipo.\n\u0026gt;\u0026gt;\u0026gt; # Array de una dimensión \u0026gt;\u0026gt;\u0026gt; a1 = np.array([1, 2, 3]) \u0026gt;\u0026gt;\u0026gt; print(a1) [1 2 3] \u0026gt;\u0026gt;\u0026gt; # Array de dos dimensiones \u0026gt;\u0026gt;\u0026gt; a2 = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a2) [[1 2 3] [4 5 6]] \u0026gt;\u0026gt;\u0026gt; # Array de tres dimensiones \u0026gt;\u0026gt;\u0026gt; a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) \u0026gt;\u0026gt;\u0026gt; print(a3) [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] Otras funciones útiles que permiten generar arrays son:\nnp.empty(dimensiones) : Crea y devuelve una referencia a un array vacío con las dimensiones especificadas en la tupla dimensiones.\nnp.zeros(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos ceros.\nnp.ones(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos unos.\nnp.full(dimensiones, valor) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos valor.\nnp.identity(n) : Crea y devuelve una referencia a la matriz identidad de dimensión n.\nnp.arange(inicio, fin, salto) : Crea y devuelve una referencia a un array de una dimensión cuyos elementos son la secuencia desde inicio hasta fin tomando valores cada salto.\nnp.linspace(inicio, fin, n) : Crea y devuelve una referencia a un array de una dimensión cuyos elementos son la secuencia de n valores equidistantes desde inicio hasta fin.\nnp.random.random(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son aleatorios.\n\u0026gt;\u0026gt;\u0026gt; print(np.zeros(3,2)) [[0. 0. 0.] [0. 0. 0.]] \u0026gt;\u0026gt;\u0026gt; print(np.idendity(3)) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] \u0026gt;\u0026gt;\u0026gt; print(np.arange(1, 10, 2)) [1 3 5 7 9] \u0026gt;\u0026gt;\u0026gt; print(np.linspace(0, 10, 5)) [ 0. 2.5 5. 7.5 10. ] Atributos de un array Existen varios atributos y funciones que describen las características de un array.\na.ndim : Devuelve el número de dimensiones del array a.\na.shape : Devuelve una tupla con las dimensiones del array a.\na.size : Devuelve el número de elementos del array a.\na.dtype: Devuelve el tipo de datos de los elementos del array a.\nAcceso a los elementos de un array Para acceder a los elementos contenidos en un array se usan índices al igual que para acceder a los elementos de una lista, pero indicando los índices de cada dimensión separados por comas.\nAl igual que para listas, los índices de cada dimensión comienzan en 0.\nTambién es posible obtener subarrays con el operador dos puntos : indicando el índice inicial y el siguiente al final para cada dimensión, de nuevo separados por comas.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a[1, 0]) # Acceso al elemento de la fila 1 columna 0 4 \u0026gt;\u0026gt;\u0026gt; print(a[1][0]) # Otra forma de acceder al mismo elemento 4 \u0026gt;\u0026gt;\u0026gt; print(a[:, 0:2]) [[1 2] [4 5]] Filtrado de elementos de un array Una característica muy útil de los arrays es que es muy fácil obtener otro array con los elementos que cumplen una condición.\na[condicion] : Devuelve una lista con los elementos del array a que cumplen la condición condicion.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a[(a % 2 == 0)]) [2 4 6] \u0026gt;\u0026gt;\u0026gt; print(a[(a % 2 == 0) \u0026amp; (a \u0026gt; 2)]) [2 4] Operaciones matemáticas con arrays Existen dos formas de realizar operaciones matemáticas con arrays: a nivel de elemento y a nivel de array.\nLas operaciones a nivel de elemento operan los elementos que ocupan la misma posición en dos arrays. Se necesitan, por tanto, dos arrays con las mismas dimensiones y el resultado es una array de la misma dimensión.\nLos operadores mamemáticos +, -, *, /, %, ** se utilizan para la realizar suma, resta, producto, cociente, resto y potencia a nivel de elemento.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; b = np.array([[1, 1, 1], [2, 2, 2]]) \u0026gt;\u0026gt;\u0026gt; print(a + b ) [[2 3 4] [6 7 8]] \u0026gt;\u0026gt;\u0026gt; print(a / b) [[1. 2. 3. ] [2. 2.5 3. ]] \u0026gt;\u0026gt;\u0026gt; print(a ** 2) [[ 1 4 9] [16 25 36]] Álgebra matricial Numpy incorpora funciones para realizar las principales operaciones algebraicas con vectores y matrices. La mayoría de los métodos algebráicos se agrupan en el submódulo linalg.\nProducto escalar de dos vectores Para realizar el producto escalar de dos vectores se utiliza el operador @ o el siguiente método:\nu.dot(v): Devuelve el producto escalar de los vectores u y v.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([1, 2, 3]) \u0026gt;\u0026gt;\u0026gt; b = np.array([1, 0, 1]) \u0026gt;\u0026gt;\u0026gt; print(a @ b) 4 \u0026gt;\u0026gt;\u0026gt; print(a.dot(b)) 4 Módulo de un vector Para calcular el módulo de un vector se utiliza el siguiente método:\nnorm(v): Devuelve el módulo del vector v.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([3, 4]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.norm(a)) 5.0 Producto de dos matrices Para realizar el producto matricial se utiliza el mismo operador @ y método que para el producto escalar de vectores:\na.dot(b) : Devuelve el producto matricial de las matrices a y b siempre y cuando sus dimensiones sean compatibles.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; b = np.array([[1, 1], [2, 2], [3, 3]]) \u0026gt;\u0026gt;\u0026gt; print(a @ b) [[14 14] [32 32]] \u0026gt;\u0026gt;\u0026gt; print(a.dot(b)) [[14 14] [32 32]] Matriz traspuesta Para trasponer una matriz se utiliza el método\na.T : Devuelve la matriz traspuesta de la matriz a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a.T) [[1 4] [2 5] [3 6]] Traza de una matriz La traza de una matriz cuadrada se calcula con el siguiente método:\na.trace() : Devuelve la traza (suma de la diagonal principal) de la matriz cuadrada a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) \u0026gt;\u0026gt;\u0026gt; print(a.trace()) 15 Determinante de una matriz El determinante de una matriz cuadrada se calcula con la siguiente función:\ndet(a) : Devuelve el determinante de la matriz cuadrada a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2], [3, 4]]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.det(a)) -2.0 Matriz inversa La inversa de una matriz se calcula con la siguiente función:\ninv(a) : Devuelve la matriz inversa de la matriz cuadrada a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2], [3, 4]]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.inv(a)) [[-2. 1. ] [ 1.5 -0.5]] Autovalores de una matriz Los autovalores de una matriz cuadrada se calculan con la siguiente función:\neigvals(a) : Devuelve los autovalores de la matriz cuadrada a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 1, 0], [1, 2, 1], [0, 1, 1]]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.eigvals(a)) [ 3.00000000e+00 1.00000000e+00 -3.36770206e-17] Autovectores de una matriz Los autovectores de una matriz cuadrada se calculan con la siguiente función:\neig(a) : Devuelve los autovalores y los autovectores asociados de la matriz cuadrada a.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 1, 0], [1, 2, 1], [0, 1, 1]]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.eig(a)) (array([ 3.00000000e+00, 1.00000000e+00, -3.36770206e-17]), array([[-4.08248290e-01, 7.07106781e-01, 5.77350269e-01], [-8.16496581e-01, 2.61239546e-16, -5.77350269e-01], [-4.08248290e-01, -7.07106781e-01, 5.77350269e-01]])) Solución de un sistema de ecuaciones Para resolver un sistema de ecuaciones lineales se utiliza la función siguiente:\nsolve(a, b) : Devuelve la solución del sistema de ecuaciones lineales con los coeficientes de la matriz a y los términos independientes de la matriz b.\n\u0026gt;\u0026gt;\u0026gt; import numpy as np # Sistema de dos ecuaciones y dos incógnitas # x + 2y = 1 # 3x + 5y = 2 \u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2], [3, 5]]) \u0026gt;\u0026gt;\u0026gt; b = np.array([1, 2]) \u0026gt;\u0026gt;\u0026gt; print(np.linalg.solve(a, b)) [-1. 1.] ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1652390973,"objectID":"71934ad6524147c69c7fa9f34fb2f1e5","permalink":"/docencia/python/manual/numpy/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/numpy/","section":"docencia","summary":"NumPy es una librería de Python especializada en el cálculo numérico y el análisis de datos, especialmente para un gran volumen de datos.\nIncorpora una nueva clase de objetos llamados arrays que permite representar colecciones de datos de un mismo tipo en varias dimensiones, y funciones muy eficientes para su manipulación.","tags":["Numpy"],"title":"La librería Numpy","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":" Pandas es una librería de Python especializada en el manejo y análisis de estructuras de datos.\nLas principales características de esta librería son:\nDefine nuevas estructuras de datos basadas en los arrays de la librería NumPy pero con nuevas funcionalidades. Permite leer y escribir fácilmente ficheros en formato CSV, Excel y bases de datos SQL. Permite acceder a los datos mediante índices o nombres para filas y columnas. Ofrece métodos para reordenar, dividir y combinar conjuntos de datos. Permite trabajar con series temporales. Realiza todas estas operaciones de manera muy eficiente. Tipos de datos de Pandas Pandas dispone de tres estructuras de datos diferentes:\nSeries: Estructura de una dimensión. DataFrame: Estructura de dos dimensiones (tablas). Panel: Estructura de tres dimensiones (cubos). Estas estructuras se construyen a partir de arrays de la librería NumPy, añadiendo nuevas funcionalidades.\nLa clase de objetos Series Son estructuras similares a los arrays de una dimensión. Son homogéneas, es decir, sus elementos tienen que ser del mismo tipo, y su tamaño es inmutable, es decir, no se puede cambiar, aunque si su contenido.\nDispone de un índice que asocia un nombre a cada elemento del la serie, a través de la cuál se accede al elemento.\nEjemplo. La siguiente serie contiene las asignaturas de un curso.\nCreación de series Creación de una serie a partir de una lista Series(data=lista, index=indices, dtype=tipo) : Devuelve un objeto de tipo Series con los datos de la lista lista, las filas especificados en la lista indices y el tipo de datos indicado en tipo. Si no se pasa la lista de índices se utilizan como índices los enteros del 0 al $n-1$, done $n$ es el tamaño de la serie. Si no se pasa el tipo de dato se infiere. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series(['Matemáticas', 'Historia', 'Economía', 'Programación', 'Inglés'], dtype='string') \u0026gt;\u0026gt;\u0026gt; print(s) 0 Matemáticas 1 Historia 2 Economía 3 Programación 4 Inglés dtype: string Creación de una serie a partir de un diccionario Series(data=diccionario, index=indices): Devuelve un objeto de tipo Series con los valores del diccionario diccionario y las filas especificados en la lista indices. Si no se pasa la lista de índices se utilizan como índices las claves del diccionario. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series({'Matemáticas': 6.0, 'Economía': 4.5, 'Programación': 8.5}) \u0026gt;\u0026gt;\u0026gt; print(s) Matemáticas 6.0 Economía 4.5 Programación 8.5 dtype: float64 Atributos de una serie Existen varias propiedades o métodos para ver las características de una serie.\ns.size : Devuelve el número de elementos de la serie s.\ns.index : Devuelve una lista con los nombres de las filas del DataFrame s.\ns.dtype : Devuelve el tipo de datos de los elementos de la serie s.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series([1, 2, 2, 3, 3, 3, 4, 4, 4, 4]) \u0026gt;\u0026gt;\u0026gt; s.size 10 \u0026gt;\u0026gt;\u0026gt; s.index RangeIndex(start=0, stop=10, step=1) \u0026gt;\u0026gt;\u0026gt; s.dtype dtype('int64') Acceso a los elementos de una serie El acceso a los elementos de un objeto del tipo Series puede ser a través de posiciones o través de índices (nombres).\nAcceso por posición Se realiza de forma similar a como se accede a los elementos de un array.\ns[i] : Devuelve el elemento que ocupa la posición i+1 en la serie s. s[posiciones]: Devuelve otra serie con los elementos que ocupan las posiciones de la lista posiciones. Acceso por índice s[nombre] : Devuelve el elemento con el nombre nombre en el índice. s[nombres] : Devuelve otra serie con los elementos correspondientes a los nombres indicadas en la lista nombres en el índice. \u0026gt;\u0026gt;\u0026gt; s[1:3] Economía 4.5 Programación 8.5 dtype: float64 \u0026gt;\u0026gt;\u0026gt; s['Economía'] 4.5 \u0026gt;\u0026gt;\u0026gt; s[['Programación', 'Matemáticas']] Programación 8.5 Matemáticas 6.0 dtype: float64 Resumen descriptivo de una serie Las siguientes funciones permiten resumir varios aspectos de una serie:\ns.count() : Devuelve el número de elementos que no son nulos ni NaN en la serie s. s.sum() : Devuelve la suma de los datos de la serie s cuando los datos son de un tipo numérico, o la concatenación de ellos cuando son del tipo cadena str. s.cumsum() : Devuelve una serie con la suma acumulada de los datos de la serie s cuando los datos son de un tipo numérico. s.value_counts() : Devuelve una serie con la frecuencia (número de repeticiones) de cada valor de la serie s. s.min() : Devuelve el menor de los datos de la serie s. s.max() : Devuelve el mayor de los datos de la serie s. s.mean() : Devuelve la media de los datos de la serie s cuando los datos son de un tipo numérico. s.var() : Devuelve la varianza de los datos de la serie s cuando los datos son de un tipo numérico. s.std() : Devuelve la desviación típica de los datos de la serie s cuando los datos son de un tipo numérico. s.describe(): Devuelve una serie con un resumen descriptivo que incluye el número de datos, su suma, el mínimo, el máximo, la media, la desviación típica y los cuartiles. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series([1, 1, 1, 1, 2, 2, 2, 3, 3, 4]) \u0026gt;\u0026gt;\u0026gt; s.count() # Tamaño muestral 10 \u0026gt;\u0026gt;\u0026gt; s.sum() # Suma 20 \u0026gt;\u0026gt;\u0026gt; s.cumsum() # Suma acumulada 0 1 1 2 2 3 3 4 4 6 5 8 6 10 7 13 8 16 9 20 dtype: int64 \u0026gt;\u0026gt;\u0026gt; s.value_counts() # Frecuencias absolutas 1 4 2 3 3 2 4 1 dtype: int64 \u0026gt;\u0026gt;\u0026gt; s.value_counts(normalize=True) # Frecuencias relativas 1 0.4 2 0.3 3 0.2 4 0.1 dtype: float64 \u0026gt;\u0026gt;\u0026gt; s.min() # Mínimo 1 \u0026gt;\u0026gt;\u0026gt; s.max() # Máximo 4 \u0026gt;\u0026gt;\u0026gt; s.mean() # Media 2.0 \u0026gt;\u0026gt;\u0026gt; s.var() # Varianza 1.1111111111111112 \u0026gt;\u0026gt;\u0026gt; s.std() # Desviación típica 1.0540925533894598 \u0026gt;\u0026gt;\u0026gt; s.describe() # Resume descriptivo count 10.000000 mean 2.000000 std 1.054093 min 1.000000 25% 1.000000 50% 2.000000 75% 2.750000 max 4.000000 dtype: float64 Aplicar operaciones a una serie Los operadores binarios (+, *, /, etc.) pueden utilizarse con una serie, y devuelven otra serie con el resultado de aplicar la operación a cada elemento de la serie.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd s = pd.Series([1, 2, 3, 4]) \u0026gt;\u0026gt;\u0026gt; s * 2 0 2 1 4 2 6 3 8 dtype: int64 \u0026gt;\u0026gt;\u0026gt; s % 2 0 1 1 0 2 1 3 0 dtype: int64 \u0026gt;\u0026gt;\u0026gt; s = pd.Series(['a', 'b', 'c']) \u0026gt;\u0026gt;\u0026gt; s * 5 0 aaaaa 1 bbbbb 2 ccccc dtype: object Aplicar funciones a una serie También es posible aplicar una función a cada elemento de la serie mediante el siguiente método:\ns.apply(f) : Devuelve una serie con el resultado de aplicar la función f a cada uno de los elementos de la serie s. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; from math import log \u0026gt;\u0026gt;\u0026gt; s = pd.Series([1, 2, 3, 4]) \u0026gt;\u0026gt;\u0026gt; s.apply(log) 0 0.000000 1 0.693147 2 1.098612 3 1.386294 dtype: float64 \u0026gt;\u0026gt;\u0026gt; s = pd.Series(['a', 'b', 'c']) \u0026gt;\u0026gt;\u0026gt; s.apply(str.upper) 0 A 1 B 2 C dtype: object Filtrar una serie Para filtrar una serie y quedarse con los valores que cumplen una determinada condición se utiliza el siguiente método:\ns[condicion] : Devuelve una serie con los elementos de la serie s que se corresponden con el valor True de la lista booleana condicion. condicion debe ser una lista de valores booleanos de la misma longitud que la serie. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series({'Matemáticas': 6.0, 'Economía': 4.5, 'Programación': 8.5}) \u0026gt;\u0026gt;\u0026gt; print(s[s \u0026gt; 5]) Matemáticas 6.0 Programación 8.5 dtype: float64 Ordenar una serie Para ordenar una serie se utilizan los siguientes métodos:\ns.sort_values(ascending=booleano) : Devuelve la serie que resulta de ordenar los valores la serie s. Si argumento del parámetro ascending es True el orden es creciente y si es False decreciente.\ndf.sort_index(ascending=booleano) : Devuelve la serie que resulta de ordenar el índice de la serie s. Si el argumento del parámetro ascending es True el orden es creciente y si es False decreciente.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; s = pd.Series({'Matemáticas': 6.0, 'Economía': 4.5, 'Programación': 8.5}) \u0026gt;\u0026gt;\u0026gt; print(s.sort_values()) Economía 4.5 Matemáticas 6.0 Programación 8.5 dtype: float64 \u0026gt;\u0026gt;\u0026gt; print(s.sort_index(ascending = False)) Programación 8.5 Matemáticas 6.0 Economía 4.5 dtype: float64 Eliminar los dados desconocidos en una serie Los datos desconocidos representan en Pandas por NaN y los nulos por None. Tanto unos como otros suelen ser un problema a la hora de realizar algunos análisis de datos, por lo que es habitual eliminarlos. Para eliminarlos de una serie se utiliza el siguiente método:\ns.dropna() : Elimina los datos desconocidos o nulos de la serie s. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; import numpy as np \u0026gt;\u0026gt;\u0026gt; s = pd.Series(['a', 'b', None, 'c', np.NaN, 'd']) \u0026gt;\u0026gt;\u0026gt; s 0 a 1 b 2 None 3 c 4 NaN 5 d dtype: object \u0026gt;\u0026gt;\u0026gt; s.dropna() 0 a 1 b 3 c 5 d dtype: object La clase de objetos DataFrame Un objeto del tipo DataFrame define un conjunto de datos estructurado en forma de tabla donde cada columna es un objeto de tipo Series, es decir, todos los datos de una misma columna son del mismo tipo, y las filas son registros que pueden contender datos de distintos tipos.\nUn DataFrame contiene dos índices, uno para las filas y otro para las columnas, y se puede acceder a sus elementos mediante los nombres de las filas y las columnas.\nEjemplo. El siguiente DataFrame contiene información sobre los alumnos de un curso. Cada fila corresponde a un alumno y cada columna a una variable.\nCreación de un DataFrame Creación de un DataFrame a partir de un diccionario de listas Para crear un DataFrame a partir de un diccionario cuyas claves son los nombres de las columnas y los valores son listas con los datos de las columnas se utiliza el método:\nDataFrame(data=diccionario, index=filas, columns=columnas, dtype=tipos) : Devuelve un objeto del tipo DataFrame cuyas columnas son las listas contenidas en los valores del diccionario diccionario, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y los tipos indicados en la lista tipos. La lista filas tiene que tener el mismo tamaño que las listas del diccionario, mientras que las listas columnas y tipos tienen que tener el mismo tamaño que el diccionario. Si no se pasa la lista de filas se utilizan como nombres los enteros empezando en 0. Si no se pasa la lista de columnas se utilizan como nombres las claves del diccionario. Si no se pasa la lista de tipos, se infiere. Los valores asociados a las claves del diccionario deben ser listas del mismo tamaño.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; datos = {'nombre':['María', 'Luis', 'Carmen', 'Antonio'], ... 'edad':[18, 22, 20, 21], ... 'grado':['Economía', 'Medicina', 'Arquitectura', 'Economía'], ... 'correo':['[email protected]', '[email protected]', '[email protected]', '[email protected]'] ... } \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame(datos) \u0026gt;\u0026gt;\u0026gt; print(df) nombre edad grado correo 0 María 18 Economía [email protected] 1 Luis 22 Medicina [email protected] 2 Carmen 20 Arquitectura [email protected] 3 Antonio 21 Economía [email protected] Creación de un DataFrame a partir de una lista de listas Para crear un DataFrame a partir de una lista de listas con los datos de las columnas se utiliza el siguiente método:\nDataFrame(data=listas, index=filas, columns=columnas, dtype=tipos) : Devuelve un objeto del tipo DataFrame cuyas columnas son los valores de las listas de la lista listas, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y los tipos indicados en la lista tipos. La lista filas, tiene que tener el mismo tamaño que la lista listas mientras que las listas columnas y tipos tienen que tener el mismo tamaño que las listas anidadas en listas. Si no se pasa la lista de filas o de columnas se utilizan enteros empezando en 0. Si no se pasa la lista de tipos, se infiere. Si las listas anidadas en listas no tienen el mismo tamaño, las listas menores se rellenan con valores NaN.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame([['María', 18], ['Luis', 22], ['Carmen', 20]], columns=['Nombre', 'Edad']) \u0026gt;\u0026gt;\u0026gt; print(df) Nombre Edad 0 María 18 1 Luis 22 2 Carmen 20 Creación de un DataFrame a partir de una lista de diccionarios Para crear un DataFrame a partir de una lista de diccionarios con los datos de las filas, se utiliza el siguiente método:\nDataFrame(data=diccionarios, index=filas, columns=columnas, dtype=tipos) : Devuelve un objeto del tipo DataFrame cuyas filas contienen los valores de los diccionarios de la lista diccionarios, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y los tipos indicados en la lista tipos. La lista filas tiene que tener el mismo tamaño que la lista lista. Si no se pasa la lista de filas se utilizan enteros empezando en 0. Si no se pasa la lista de columnas se utilizan las claves de los diccionarios. Si no se pasa la lista de tipos, se infiere. Si los diccionarios no tienen las mismas claves, las claves que no aparecen en el diccionario se rellenan con valores NaN.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame([{'Nombre':'María', 'Edad':18}, {'Nombre':'Luis', 'Edad':22}, {'Nombre':'Carmen'}]) \u0026gt;\u0026gt;\u0026gt; print(df) 0 María 18.0 1 Luis 22.0 2 Carmen NaN Creación de un DataFrame a partir de un array Para crear un DataFrame a partir de un array de NumPy se utiliza el siguiente método:\nDataFrame(data=array, index=filas, columns=columnas, dtype=tipo) : Devuelde un objeto del tipo DataFrame cuyas filas y columnas son las del array array, los nombres de filas indicados en la lista filas, los nombres de columnas indicados en la lista columnas y el tipo indicado en tipo. La lista filas tiene que tener el mismo tamaño que el número de filas del array y la lista columnas el mismo tamaño que el número de columnas del array. Si no se pasa la lista de filas se utilizan enteros empezando en 0. Si no se pasa la lista de columnas se utilizan las claves de los diccionarios. Si no se pasa la lista de tipos, se infiere. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame(np.random.randn(4, 3), columns=['a', 'b', 'c']) \u0026gt;\u0026gt;\u0026gt; print(df) a b c 0 -1.408238 0.644706 1.077434 1 -0.279264 -0.249229 1.019137 2 -0.805470 -0.629498 0.935066 3 0.236936 -0.431673 -0.177379 Creación de un DataFrame a partir de un fichero CSV o Excel Dependiendo del tipo de fichero, existen distintas funciones para importar un DataFrame desde un fichero.\nread_csv(fichero.csv, sep=separador, header=n, index_col=m, na_values=no-validos, decimal=separador-decimal) : Devuelve un objeto del tipo DataFrame con los datos del fichero CSV fichero.csv usando como separador de los datos la cadena separador. Como nombres de columnas se utiliza los valores de la fila n y como nombres de filas los valores de la columna m. Si no se indica m se utilizan como nombres de filas los enteros empezando en 0. Los valores incluídos en la lista no-validos se convierten en NaN. Para los datos numéricos se utiliza como separador de decimales el carácter indicado en separador-decimal.\nread_excel(fichero.xlsx, sheet_name=hoja, header=n, index_col=m, na_values=no-validos, decimal=separador-decimal) : Devuelve un objeto del tipo DataFrame con los datos de la hoja de cálculo hoja del fichero Excel fichero.xlsx. Como nombres de columnas se utiliza los valores de la fila n y como nombres de filas los valores de la columna m. Si no se indica m se utilizan como nombres de filas los enteros empezando en 0. Los valores incluídos en la lista no-validos se convierten en NaN. Para los datos numéricos se utiliza como separador de decimales el carácter indicado en separador-decimal.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; # Importación del fichero datos-colesteroles.csv \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesteroles.csv', sep=';', decimal=',') \u0026gt;\u0026gt;\u0026gt; print(df.head()) nombre edad sexo peso altura colesterol 0 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 1 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 2 Javier García Sánchez 24 H NaN 1.81 191.0 3 Carmen López Pinzón 35 M 65.0 1.70 200.0 4 Marisa López Collado 46 M 51.0 1.58 148.0 Exportación de ficheros También existen funciones para exportar un DataFrame a un fichero con diferentes formatos.\ndf.to_csv(fichero.csv, sep=separador, columns=booleano, index=booleano) : Exporta el DataFrame df al fichero fichero.csv en formato CSV usando como separador de los datos la cadena separador. Si se pasa True al parámetro columns se exporta también la fila con los nombres de columnas y si se pasa True al parámetro index se exporta también la columna con los nombres de las filas.\ndf.to_excel(fichero.xlsx, sheet_name = hoja, columns=booleano, index=booleano) : Exporta el DataFrame df a la hoja de cálculo hoja del fichero fichero.xlsx en formato Excel. Si se pasa True al parámetro columns se exporta también la fila con los nombres de columnas y si se pasa True al parámetro index se exporta también la columna con los nombres de las filas.\nAtributos de un DataFrame Existen varias propiedades o métodos para ver las características de un DataFrame.\ndf.info() : Devuelve información (número de filas, número de columnas, índices, tipo de las columnas y memoria usado) sobre el DataFrame df.\ndf.shape : Devuelve una tupla con el número de filas y columnas del DataFrame df.\ndf.size : Devuelve el número de elementos del DataFrame.\ndf.columns : Devuelve una lista con los nombres de las columnas del DataFrame df.\ndf.index : Devuelve una lista con los nombres de las filas del DataFrame df.\ndf.dtypes : Devuelve una serie con los tipos de datos de las columnas del DataFrame df.\ndf.head(n) : Devuelve las n primeras filas del DataFrame df.\ndf.tail(n) : Devuelve las n últimas filas del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; df.info() \u0026lt;class 'pandas.core.frame.DataFrame'\u0026gt; RangeIndex: 14 entries, 0 to 13 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 nombre 14 non-null object 1 edad 14 non-null int64 2 sexo 14 non-null object 3 peso 13 non-null float64 4 altura 14 non-null float64 5 colesterol 13 non-null float64 dtypes: float64(3), int64(1), object(2) memory usage: 800.0+ bytes \u0026gt;\u0026gt;\u0026gt; df.shape (14, 6) \u0026gt;\u0026gt;\u0026gt; df.size 84 \u0026gt;\u0026gt;\u0026gt; df.columns Index(['nombre', 'edad', 'sexo', 'peso', 'altura', 'colesterol'], dtype='object') \u0026gt;\u0026gt;\u0026gt; df.index RangeIndex(start=0, stop=14, step=1) \u0026gt;\u0026gt;\u0026gt; df.dtypes nombre object edad int64 sexo object peso float64 altura float64 colesterol float64 dtype: object Renombrar los nombres de las filas y columnas Para cambiar el nombre de las filas y las columnas de un DataFrame se utiliza el siguiente método:\ndf.rename(columns=columnas, index=filas): Devuelve el DataFrame que resulta de renombrar las columnas indicadas en las claves del diccionario columnas con sus valores y las filas indicadas en las claves del diccionario filas con sus valores en el DataFrame df. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.rename(columns={'nombre':'nombre y apellidos', 'altura':'estatura'}, index={0:1000, 1:1001, 2:1002})) nombre y apellidos edad sexo peso estatura colesterol 1000 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 1001 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 1002 Javier García Sánchez 24 H NaN 1.81 191.0 3 Carmen López Pinzón 35 M 65.0 1.70 200.0 4 Marisa López Collado 46 M 51.0 1.58 148.0 ... Cambiar el índice de un DataFrame Aunque el índice de un DataFrame suele fijarse en la creación del mismo, en ocasiones puede ser necesario cambiar el índice una vez creado el DataFrame. Para ello se utiliza el siguiente método:\ndf.set_index(keys = columnas, verify_integrity = bool): Devuelve el DataFrame que resulta de eliminar las columnas de la lista columnas y convertirlas en el nuevo índice. El parámetro verify_integrity recibe un booleano (False por defecto) y realiza una comprobación para evitar duplicados en la clave cuando recibe True. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.set_index(\u0026quot;nombre\u0026quot;).head()) edad sexo peso altura colesterol nombre José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 Javier García Sánchez 24 H NaN 1.81 191.0 Carmen López Pinzón 35 M 65.0 1.70 200.0 Marisa López Collado 46 M 51.0 1.58 148.0 \u0026gt;\u0026gt;\u0026gt; Reindexar un DataFrame Para reordenar los índices de las filas y las columnas de un DataFrame, así como añadir o eliminar índices, se utiliza el siguiente método:\ndf.reindex(index=filas, columns=columnas, fill_value=relleno) : Devuelve el DataFrame que resulta de tomar del DataFrame df las filas con nombres en la lista filas y las columnas con nombres en la lista columnas. Si alguno de los nombres indicados en filas o columnas no existía en el DataFrame df, se crean filan o columnas nuevas rellenas con el valor relleno. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.reindex(index=[4, 3, 1], columns=['nombre', 'tensión', 'colesterol'])) nombre tensión colesterol 4 Marisa López Collado NaN 148.0 3 Carmen López Pinzón NaN 200.0 1 Rosa Díaz Díaz NaN 232.0 Acceso a los elementos de un DataFrame El acceso a los datos de un DataFrame se puede hacer a través de posiciones o través de los nombres de las filas y columnas.\nAccesos mediante posiciones df.iloc[i, j] : Devuelve el elemento que se encuentra en la fila i y la columna j del DataFrame df. Pueden indicarse secuencias de índices para obtener partes del DataFrame.\ndf.iloc[filas, columnas] : Devuelve un DataFrame con los elementos de las filas de la lista filas y de las columnas de la lista columnas.\ndf.iloc[i] : Devuelve una serie con los elementos de la fila i del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.iloc[1, 3]) 65 \u0026gt;\u0026gt;\u0026gt; print(df.iloc[1, :2]) nombre Rosa Díaz Díaz edad 32 Acceso a los elementos mediante nombres df.loc[fila, columna] : Devuelve el elemento que se encuentra en la fila con nombre fila y la columna de con nombre columna del DataFrame df. df.loc[filas, columnas] : Devuelve un DataFrame con los elemento que se encuentra en las filas con los nombres de la lista filas y las columnas con los nombres de la lista columnas del DataFrame df.\ndf[columna] : Devuelve una serie con los elementos de la columna de nombre columna del DataFrame df.\ndf.columna : Devuelve una serie con los elementos de la columna de nombre columna del DataFrame df. Es similar al método anterior pero solo funciona cuando el nombre de la columna no tiene espacios en blanco.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.loc[2, 'colesterol']) 191 \u0026gt;\u0026gt;\u0026gt; print(df.loc[:3, ('colesterol','peso')]) colesterol peso 1 232.0 65.0 2 191.0 NaN 3 200.0 65.0 \u0026gt;\u0026gt;\u0026gt; print(df['colesterol']) 0 182.0 1 232.0 2 191.0 3 200.0 ... Operaciones con las columnas de un DataFrame Añadir columnas a un DataFrame El procedimiento para añadir una nueva columna a un DataFrame es similar al de añadir un nuevo par a un diccionario, pero pasando los valores de la columna en una lista o serie.\nd[nombre] = lista: Añade al DataFrame df una nueva columna con el nombre nombre y los valores de la lista lista. La lista debe tener el mismo tamaño que el número de filas de df.\nd[nombre] = serie: Añade al DataFrame df una nueva columna con el nombre nombre y los valores de la serie serie. Si el tamaño de la serie es menor que el número de filas de df se rellena con valores NaN mientras que si es mayor se recorta.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; df['diabetes'] = pd.Series([False, False, True, False, True]) \u0026gt;\u0026gt;\u0026gt; print(df) nombre edad sexo peso altura colesterol diabetes 0 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 False 1 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 False 2 Javier García Sánchez 24 H NaN.0 1.81 191.0 True 3 Carmen López Pinzón 35 M 65.0 1.70 200.0 False 4 Marisa López Collado 46 M 51.0 1.58 148.0 True 5 Antonio Ruiz Cruz 68 H 66.0 1.74 249.0 NaN ... Operaciones sobre columnas Puesto que los datos de una misma columna de un DataFrame son del mismo tipo, es fácil aplicar la misma operación a todos los elementos de la columna.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df['altura']*100) 0 179 1 173 2 181 ... \u0026gt;\u0026gt;\u0026gt; print(df['sexo']=='M') 0 False 1 True 2 False ... Aplicar funciones a columnas Para aplicar funciones a todos los elementos de una columna se utiliza el siguiente método:\ndf[columna].apply(f) : Devuelve una serie con los valores que resulta de aplicar la función f a los elementos de la columna con nombre columna del DataFrame df. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; from math import log \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df['altura'].apply(log)) 0 0.582216 1 0.548121 2 0.593327 ... Convertir una columna al tipo datetime A menudo una columna contiene cadenas que representan fechas. Para convertir estas cadenas al tipo datetime se utiliza el siguiente método:\nto_datetime(columna, formato): Devuelve la serie que resulta de convertir las cadenas de la columna con el nombre columna en fechas del tipo datetime con el formado especificado en formato. ( Ver librería datetime) \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame({'Name': ['María', 'Carlos', 'Carmen'], 'Nacimiento':['05-03-2000', '20-05-2001', '10-12-1999']}) \u0026gt;\u0026gt;\u0026gt; print(pd.to_datetime(df.Nacimiento, format = '%d-%m-%Y')) 0 2000-03-05 1 2001-05-20 2 1999-12-10 Name: Nacimiento, dtype: datetime64[ns] Resumen descriptivo de un DataFrame Al igual que para las series, los siguientes métodos permiten resumir la información de un DataFrame por columnas:\ndf.count() : Devuelve una serie con el número de elementos que no son nulos ni NaN en cada columna del DataFrame df. df.sum() : Devuelve una serie con la suma de los datos de las columnas del DataFrame df cuando los datos son de un tipo numérico, o la concatenación de ellos cuando son del tipo cadena str. df.cumsum() : Devuelve un DataFrame con la suma acumulada de los datos de las columnas del DataFrame df cuando los datos son de un tipo numérico. df.min() : Devuelve una serie con los menores de los datos de las columnas del DataFrame df. df.max() : Devuelve una serie con los mayores de los datos de las columnas del DataFrame df. df.mean() : Devuelve una serie con las medias de los datos de las columnas numéricas del DataFrame df. df.var() : Devuelve una serie con las varianzas de los datos de las columnas numéricas del DataFrame df. df.std() : Devuelve una serie con las desviaciones típicas de los datos de las columnas numéricas del DataFrame df. df.cov() : Devuelve un DataFrame con las covarianzas de los datos de las columnas numéricas del DataFrame df. df.corr() : Devuelve un DataFrame con los coeficientes de correlación de Pearson de los datos de las columnas numéricas del DataFrame df. df.describe(include = tipo) : Devuelve un DataFrame con un resumen estadístico de las columnas del DataFrame df del tipo tipo. Para los datos numéricos (number) se calcula la media, la desviación típica, el mínimo, el máximo y los cuartiles. Para los datos no numéricos (object) se calcula el número de valores, el número de valores distintos, la moda y su frecuencia. Si no se indica el tipo solo se consideran las columnas numéricas. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt;df.edad.count() # Tamaño muestral 14 \u0026gt;\u0026gt;\u0026gt; print(df.edad.mean()) # Media 38.214285714285715 \u0026gt;\u0026gt;\u0026gt; print(df.edad.var()) # Varianza 244.02747252747255 \u0026gt;\u0026gt;\u0026gt; print(df.edad.std()) # Desviación típica 15.62137870123737 \u0026gt;\u0026gt;\u0026gt; df.cov() # Matriz de covarianzas edad peso altura colesterol edad 244.027473 -69.891026 -0.326593 279.717949 peso -69.891026 260.076923 1.764615 -2.424242 altura -0.326593 1.764615 0.013229 0.563269 colesterol 279.717949 -2.424242 0.563269 1587.858974 \u0026gt;\u0026gt;\u0026gt; df.corr() # Matriz de correlación edad peso altura colesterol edad 1.000000 -0.276185 -0.181774 0.452391 peso -0.276185 1.000000 0.918984 -0.003621 altura -0.181774 0.918984 1.000000 0.122694 colesterol 0.452391 -0.003621 0.122694 1.000000 \u0026gt;\u0026gt;\u0026gt; print(df.describe()) # Resumen descriptivo edad peso altura colesterol count 14.000000 13.000000 14.000000 13.000000 mean 38.214286 70.923077 1.768571 220.230769 std 15.621379 16.126901 0.115016 39.847948 min 18.000000 51.000000 1.580000 148.000000 25% 24.750000 61.000000 1.705000 194.000000 50% 35.000000 65.000000 1.755000 210.000000 75% 49.750000 78.000000 1.840000 249.000000 max 68.000000 109.000000 1.980000 280.000000 \u0026gt;\u0026gt;\u0026gt; print(df.describe(include='object')) nombre sexo count 14 14 unique 14 2 top Antonio Fernández Ocaña H freq 1 8 Eliminar columnas de un DataFrame Para eliminar columnas de un DataFrame se utilizan los siguientes métodos:\ndel d[nombre] : Elimina la columna con nombre nombre del DataFrame df.\ndf.pop(nombre) : Elimina la columna con nombre nombre del DataFrame df y la devuelve como una serie.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; edad = df.pop('edad') \u0026gt;\u0026gt;\u0026gt; print(df) nombre sexo peso altura colesterol 0 José Luis Martínez Izquierdo H 85.0 1.79 182.0 1 Rosa Díaz Díaz M 65.0 1.73 232.0 2 Javier García Sánchez H NaN 1.81 191.0 ... print(edad) 0 18 1 32 2 24 ... Operaciones con las filas de un DataFrame Añadir una fila a un DataFrame Para añadir una fila a un DataFrame se utiliza el siguiente método:\ndf.append(serie, ignore_index=True) : Devuelve el DataFrame que resulta de añadir una fila al DataFrame df con los valores de la serie serie. Los nombres del índice de la serie deben corresponderse con los nombres de las columnas de df. Si no se pasa el parámetro ignore_index entonces debe pasarse el parámetro name a la serie, donde su argumento será el nombre de la nueva fila. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; df = df.append(pd.Series(['Carlos Rivas', 28, 'H', 89.0, 1.78, 245.0], index=['nombre','edad','sexo','peso','altura','colesterol']), ignore_index=True) \u0026gt;\u0026gt;\u0026gt; print(df.tail()) nombre edad sexo peso altura colesterol 10 Macarena Álvarez Luna 53 M 55.0 1.62 262.0 11 José María de la Guía Sanz 58 H 78.0 1.87 198.0 12 Miguel Angel Cuadrado Gutiérrez 27 H 109.0 1.98 210.0 13 Carolina Rubio Moreno 20 M 61.0 1.77 194.0 14 Carlos Rivas 28 H 89.0 1.78 245.0 Eliminar filas de un DataFrame Para eliminar filas de un DataFrame se utilizan el siguiente método:\ndf.drop(filas) : Devuelve el DataFrame que resulta de eliminar las filas con los nombres indicados en la lista filas del DataFrame df. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.drop([1, 3])) nombre edad sexo peso altura colesterol 0 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 2 Javier García Sánchez 24 H NaN 1.81 191.0 4 Marisa López Collado 46 M 51.0 1.58 148.0 ... Filtrar las filas de un DataFrame Una operación bastante común con un DataFrame es obtener las filas que cumplen una determinada condición.\ndf[condicion] : Devuelve un DataFrame con las filas del DataFrame df que se corresponden con el valor True de la lista booleana condicion. condicion debe ser una lista de valores booleanos de la misma longitud que el número de filas del DataFrame. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df[(df['sexo']=='H') \u0026amp; (df['colesterol'] \u0026gt; 260)]) nombre edad sexo peso altura colesterol 6 Antonio Fernández Ocaña 51 H 62.0 1.72 276.0 9 Santiago Reillo Manzano 46 H 75.0 1.85 280.0 Ordenar un DataFrame Para ordenar un DataFrame de acuerdo a los valores de una determinada columna se utilizan los siguientes métodos:\ndf.sort_values(columna, ascending=booleano) : Devuelve el DataFrame que resulta de ordenar las filas del DataFrame df según los valores del la columna con nombre columna. Si argumento del parámetro ascending es True el orden es creciente y si es False decreciente.\ndf.sort_index(ascending=booleano) : Devuelve el DataFrame que resulta de ordenar las filas del DataFrame df según los nombres de las filas. Si el argumento del parámetro ascending es True el orden es creciente y si es False decreciente.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.sort_values('colesterol')) nombre edad sexo peso altura colesterol 4 Marisa López Collado 46 M 51.0 1.58 148.0 0 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 2 Javier García Sánchez 24 H NaN 1.81 191.0 13 Carolina Rubio Moreno 20 M 61.0 1.77 194.0 ... Eliminar las filas con dados desconocidos en un DataFrame Para eliminar las filas de un DataFrame que contienen datos desconocidos NaN o nulos None se utiliza el siguiente método:\ns.dropna(subset=columnas) : Devuelve el DataFrame que resulta de eliminar las filas que contienen algún dato desconocido o nulo en las columnas de la lista columna del DataFrame df. Si no se pasa un argumento al parámetro subset se aplica a todas las columnas del DataFrame. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.dropna()) nombre edad sexo peso altura colesterol 0 José Luis Martínez Izquierdo 18 H 85.0 1.79 182.0 1 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 3 Carmen López Pinzón 35 M 65.0 1.70 200.0 4 Marisa López Collado 46 M 51.0 1.58 148.0 ... Agrupación de un DataFrame En muchas aplicaciones es útil agrupar los datos de un DataFrame de acuerdo a los valores de una o varias columnas (categorías), como por ejemplo el sexo o el país.\nDividir un DataFrame en grupos Para dividir un DataFrame en grupos se utiliza el siguiente método:\ndf.groupby(columnas).groups : Devuelve un diccionario con cuyas claves son las tuplas que resultan de todas las combinaciones de los valores de las columnas con nombres en la lista columnas, y valores las listas de los nombres de las filas que contienen esos valores en las correspondientes columnas del DataFrame df. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.groupby('sexo').groups) {'H': Int64Index([0, 2, 5, 6, 8, 9, 11, 12], dtype='int64'), 'M': Int64Index([1, 3, 4, 7, 10, 13], dtype='int64')} \u0026gt;\u0026gt;\u0026gt; print(df.groupby(['sexo','edad']).groups) {('H', 18): Int64Index([0], dtype='int64'), ('H', 24): Int64Index([2], dtype='int64'), ('H', 27): Int64Index([12], dtype='int64'), ('H', 35): Int64Index([8], dtype='int64'), ('H', 46): Int64Index([9], dtype='int64'), ('H', 51): Int64Index([6], dtype='int64'), ('H', 58): Int64Index([11], dtype='int64'), ('H', 68): Int64Index([5], dtype='int64'), ('M', 20): Int64Index([13], dtype='int64'), ('M', 22): Int64Index([7], dtype='int64'), ('M', 32): Int64Index([1], dtype='int64'), ('M', 35): Int64Index([3], dtype='int64'), ('M', 46): Int64Index([4], dtype='int64'), ('M', 53): Int64Index([10], dtype='int64')} Para obtener un grupo concreto se utiliza el siguiente método:\ndf.groupby(columnas).get_group(valores) : Devuelve un DataFrame con las filas del DataFrame df que cumplen que las columnas de la lista columnas presentan los valores de la tupla valores. La lista columnas y la tupla valores deben tener el mismo tamaño. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.groupby('sexo').get_group('M')) nombre edad sexo peso altura colesterol 1 Rosa Díaz Díaz 32 M 65.0 1.73 232.0 3 Carmen López Pinzón 35 M 65.0 1.70 200.0 4 Marisa López Collado 46 M 51.0 1.58 148.0 7 Pilar Martín González 22 M 60.0 1.66 NaN 10 Macarena Álvarez Luna 53 M 55.0 1.62 262.0 13 Carolina Rubio Moreno 20 M 61.0 1.77 194.0 Aplicar una función de agregación por grupos Una vez dividido el DataFame en grupos, es posible aplicar funciones de agregación a cada grupo mediante el siguiente método:\ndf.groupby(columnas).agg(funciones) : Devuelve un DataFrame con el resultado de aplicar las funciones de agregación de la lista funciones a cada uno de los DataFrames que resultan de dividir el DataFrame según las columnas de la lista columnas. Una función de agregación toma como argumento una lista y devuelve una único valor. Algunas de las funciones de agregación más comunes son:\nnp.min : Devuelve el mínimo de una lista de valores. np.max : Devuelve el máximo de una lista de valores. np.count_nonzero : Devuelve el número de valores no nulos de una lista de valores. np.sum : Devuelve la suma de una lista de valores. np.mean : Devuelve la media de una lista de valores. np.std : Devuelve la desviación típica de una lista de valores. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.groupby('sexo').agg(np.mean)) edad peso altura colesterol sexo H 40.875000 80.714286 1.837500 228.375 M 34.666667 59.500000 1.676667 207.200 Reestructurar un DataFrame A menudo la disposición de los datos en un DataFrame no es la adecuada para su tratamiento y es necesario reestructurar el DataFrame. Los datos que contiene un DataFrame pueden organizarse en dos formatos: ancho y largo.\nConvertir un DataFrame a formato largo Para convertir un DataFrame de formato ancho a formato largo (columnas a filas) se utiliza el siguiente método:\ndf.melt(id_vars=id-columnas, value_vars=columnas, var_name=nombre-columnas, var_value=nombre-valores) : Devuelve el DataFrame que resulta de convertir el DataFrame df de formato ancho a formato largo. Todas las columnas de lista columnas se reestructuran en dos nuevas columnas con nombres nombre-columnas y nombre-valores que contienen los nombres de las columnas originales y sus valores, respectivamente. Las columnas en la lista id-columnas se mantienen sin reestructurar. Si no se pasa la lista columnas entonces se reestructuran todas las columnas excepto las columnas de la lista id-columnas. \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; datos = {'nombre':['María', 'Luis', 'Carmen'], ... 'edad':[18, 22, 20], ... 'Matemáticas':[8.5, 7, 3.5], ... 'Economía':[8, 6.5, 5], ... 'Programación':[6.5, 4, 9]} \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame(datos) \u0026gt;\u0026gt;\u0026gt; df1 = df.melt(id_vars=['nombre', 'edad'], var_name='asignatura', value_name='nota') \u0026gt;\u0026gt;\u0026gt; print(df1) nombre edad asignatura nota 0 María 18 Matemáticas 8.5 1 Luis 22 Matemáticas 7.0 2 Carmen 20 Matemáticas 3.5 3 María 18 Economía 8.0 4 Luis 22 Economía 6.5 5 Carmen 20 Economía 5.0 6 María 18 Programación 6.5 7 Luis 22 Programación 4.0 8 Carmen 20 Programación 9.0 Convertir un DataFrame a formato ancho Para convertir un DataFrame de formato largo a formato ancho (filas a columnas) se utiliza el siguiente método:\ndf.pivot(index=filas, columns=columna, values=valores) : Devuelve el DataFrame que resulta de convertir el DataFrame df de formato largo a formato ancho. Se crean tantas columnas nuevas como valores distintos haya en la columna columna. Los nombres de estas nuevas columnas son los valores de la columna columna mientras que sus valores se toman de la columna valores. Los nombres del índice del nuevo DataFrame se toman de los valores de la columna filas. # Continuación del código anterior \u0026gt;\u0026gt;\u0026gt; print(df1.pivot(index='nombre', columns='asignatura', values='nota')) asignatura Economía Matemáticas Programación nombre Carmen 5.0 3.5 9.0 Luis 6.5 7.0 4.0 María 8.0 8.5 6.5 Combinar varios DataFrames Dos o más DataFrames pueden combinarse en otro DataFrame. La combinación puede ser de varias formas:\nConcatenación: Combinación de varios DataFrames concatenando sus filas o columnas. Mezcla: Combinación de varios DataFrames usando columnas o índices comunes. Concatenación de DataFrames Concatenación de filas. Las filas de los DataFrames se concatenan unas a continuación de las otras para formar el nuevo DataFrame. Para ello es necesario que los DataFrames que se combinen tengan el mismo índice de columnas.\nConcatenación de columnas. Las columnas de los DataFrames se concatenan unas a continuación de las otras para formar el nuevo DataFrame. Para ello es necesario que los DataFrames que se combinen tengan el mismo índice de filas.\nPara concatenar dos o más DataFrames se utiliza el siguiente método:\ndf.concat(dataframes, axis = eje): Devuelve el DataFrame que resulta de concatenar los DataFrames de la lista dataframes. Si eje es 0 (valor por defecto) la concatenación se realiza por filas, y si eje es 1 se realiza por columnas. Si los DataFrames que se concatenan por filas no tienen el mismo índice de columnas, el DataFrame resultante incluirá todas las columnas existentes en los DataFrames y rellenará con valores NaN los datos no disponibles. Si los DataFrames que se concatenan por columnas no tienen el mismo índice de filas, el DataFrame resultante incluirá todas las filas existentes en los DataFrames y rellenará con valores NaN los datos no disponibles.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;], ... \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;], \u0026quot;Edad\u0026quot;:[22, 18]}).set_index(\u0026quot;Nombre\u0026quot;) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;María\u0026quot;, \u0026quot;Pedro\u0026quot;], ... \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;], \u0026quot;Edad\u0026quot;:[25, 30]}).set_index(\u0026quot;Nombre\u0026quot;) \u0026gt;\u0026gt;\u0026gt; df = pd.concat([df1, df2]) \u0026gt;\u0026gt;\u0026gt; df Sexo Edad Nombre Carmen Mujer 22 Luis Hombre 18 María Mujer 25 Pedro Hombre 30 \u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], ... \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;, \u0026quot;Mujer\u0026quot;]}).set_index(\u0026quot;Nombre\u0026quot;) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], ... \u0026quot;Edad\u0026quot;:[22, 18, 25]}).set_index(\u0026quot;Nombre\u0026quot;) \u0026gt;\u0026gt;\u0026gt; df = pd.concat([df1, df2], axis = 1) \u0026gt;\u0026gt;\u0026gt; df Sexo Edad Nombre Carmen Mujer 22 Luis Hombre 18 María Mujer 25 Mezcla de DataFrames La mezcla de DataFrames permite integrar filas de dos DataFrames que contienen información en común en una o varias columnas o índices que se conocen como clave.\nPara mezclar dos DataFrames se utiliza el siguiente método:\ndf.merge(df1, df2, on = clave, how = tipo): Devuelve el DataFrame que resulta de mezclar el DataFrame df2 con el DataFrame df1, usando como claves las columnas de la lista clave y siguiendo el método de mezcla indicado por tipo. El tipo de mezcla puede ser\n\u0026quot;inner\u0026quot; (por defecto): El DataFrame resultante solo contiene las filas cuyos valores en la clave están en los dos DataFrames. Es equivalente a la intersección de conjuntos.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;, \u0026quot;Mujer\u0026quot;]}) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;María\u0026quot;, \u0026quot;Pedro\u0026quot;, \u0026quot;Luis\u0026quot;], \u0026quot;Edad\u0026quot;:[25, 30, 18]]}) \u0026gt;\u0026gt;\u0026gt; df = pd.merge(df1, df2, on=\u0026quot;Nombre\u0026quot;) \u0026gt;\u0026gt;\u0026gt; print(df) Nombre Sexo Edad 0 Luis Hombre 18 1 María Mujer 25 \u0026quot;outer\u0026quot;: El DataFrame resultante contiene todas las filas de los dos DataFrames. Si una fila de un DataFrame no puede emparejarse con otra los mismos valores en la clave en el otro DataFrame, la fila se añade igualmente al DataFrame resultante rellenando las columnas del otro DataFrame con el valor NaN. Es equivalente a la unión de conjuntos.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;, \u0026quot;Mujer\u0026quot;]}) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;María\u0026quot;, \u0026quot;Pedro\u0026quot;, \u0026quot;Luis\u0026quot;], \u0026quot;Edad\u0026quot;:[25, 30, 18]]}) \u0026gt;\u0026gt;\u0026gt; df = pd.merge(df1, df2, on=\u0026quot;Nombre\u0026quot;, how=\u0026quot;outer\u0026quot;) \u0026gt;\u0026gt;\u0026gt; print(df) Nombre Sexo Edad 0 Carmen Mujer NaN 1 Luis Hombre 18.0 2 María Mujer 25.0 3 Pedro NaN 30.0 \u0026quot;left\u0026quot;: El DataFrame resultante contiene todas las filas del primer DataFrame y descarta las filas del segundo DataFrame que no pueden emparejarse con alguna fila del primer DataFrame a través de la clave.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;, \u0026quot;Mujer\u0026quot;]}) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;María\u0026quot;, \u0026quot;Pedro\u0026quot;, \u0026quot;Luis\u0026quot;], \u0026quot;Edad\u0026quot;:[25, 30, 18]]}) \u0026gt;\u0026gt;\u0026gt; df = pd.merge(df1, df2, on=\u0026quot;Nombre\u0026quot;, how=\u0026quot;left\u0026quot;) \u0026gt;\u0026gt;\u0026gt; print(df) Nombre Sexo Edad 0 Carmen Mujer NaN 1 Luis Hombre 18.0 2 María Mujer 25.0 \u0026quot;right\u0026quot;: El DataFrame resultante contiene todas las filas del segundo DataFrame y descarta las filas del primer DataFrame que no pueden emparejarse con alguna fila del segundo DataFrame a través de la clave.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df1 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;Carmen\u0026quot;, \u0026quot;Luis\u0026quot;, \u0026quot;María\u0026quot;], \u0026quot;Sexo\u0026quot;:[\u0026quot;Mujer\u0026quot;, \u0026quot;Hombre\u0026quot;, \u0026quot;Mujer\u0026quot;]}) \u0026gt;\u0026gt;\u0026gt; df2 = pd.DataFrame({\u0026quot;Nombre\u0026quot;:[\u0026quot;María\u0026quot;, \u0026quot;Pedro\u0026quot;, \u0026quot;Luis\u0026quot;], \u0026quot;Edad\u0026quot;:[25, 30, 18]]}) \u0026gt;\u0026gt;\u0026gt; df = pd.merge(df1, df2, on=\u0026quot;Nombre\u0026quot;, how=\u0026quot;right\u0026quot;) \u0026gt;\u0026gt;\u0026gt; print(df) Nombre Sexo Edad 0 María Mujer 25 1 Pedro NaN 30 2 Luis Hombre 18 ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1655200898,"objectID":"c70e805aef0f1c642ecbb2948f2809fb","permalink":"/docencia/python/manual/pandas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/pandas/","section":"docencia","summary":"Pandas es una librería de Python especializada en el manejo y análisis de estructuras de datos.\nLas principales características de esta librería son:\nDefine nuevas estructuras de datos basadas en los arrays de la librería NumPy pero con nuevas funcionalidades.","tags":["Pandas"],"title":"La librería Pandas","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":" Matplotlib es una librería de Python especializada en la creación de gráficos en dos dimensiones.\nPermite crear y personalizar los tipos de gráficos más comunes, entre ellos:\nDiagramas de barras Histograma Diagramas de sectores Diagramas de caja y bigotes Diagramas de violín Diagramas de dispersión o puntos Diagramas de lineas Diagramas de areas Diagramas de contorno Mapas de color y combinaciones de todos ellos.\nEn la siguiente galería de gráficos pueden apreciarse todos los tipos de gráficos que pueden crearse con esta librería.\nCreación de gráficos con matplotlib Para crear un gráfico con matplotlib es habitual seguir los siguientes pasos:\nImportar el módulo pyplot.\nDefinir la figura que contendrá el gráfico, que es la region (ventana o página) donde se dibujará y los ejes sobre los que se dibujarán los datos. Para ello se utiliza la función subplots().\nDibujar los datos sobre los ejes. Para ello se utilizan distintas funciones dependiendo del tipo de gráfico que se quiera.\nPersonalizar el gráfico. Para ello existen multitud de funciones que permiten añadir un título, una leyenda, una rejilla, cambiar colores o personalizar los ejes.\nGuardar el gráfico. Para ello se utiliza la función savefig().\nMostrar el gráfico. Para ello se utiliza la función show().\n# Importar el módulo pyplot con el alias plt import matplotlib.pyplot as plt # Crear la figura y los ejes fig, ax = plt.subplots() # Dibujar puntos ax.scatter(x = [1, 2, 3], y = [3, 2, 1]) # Guardar el gráfico en formato png plt.savefig('diagrama-dispersion.png') # Mostrar el gráfico plt.show() Diagramas de dispersión o puntos scatter(x, y): Dibuja un diagrama de puntos con las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de líneas plot(x, y): Dibuja un polígono con los vértices dados por las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de areas fill_between(x, y): Dibuja el area bajo el polígono con los vértices dados por las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.fill_between([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de barras verticales bar(x, y): Dibuja un diagrama de barras verticales donde x es una lista con la posición de las barras en el eje X, e y es una lista con la altura de las barras en el eje Y. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.bar([1, 2, 3], [3, 2, 1]) plt.show() Diagramas de barras horizontales barh(x, y): Dibuja un diagrama de barras horizontales donde x es una lista con la posición de las barras en el eje Y, e y es una lista con la longitud de las barras en el eje X. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.barh([1, 2, 3], [3, 2, 1]) plt.show() Histogramas hist(x, bins): Dibuja un histograma con las frecuencias resultantes de agrupar los datos de la lista x en las clases definidas por la lista bins. import numpy as np import matplotlib.pyplot as plt fig, ax = plt.subplots() x = np.random.normal(5, 1.5, size=1000) ax.hist(x, np.arange(0, 11)) plt.show() Diagramas de sectores pie(x): Dibuja un diagrama de sectores con las frecuencias de la lista x. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.pie([5, 4, 3, 2, 1]) plt.show() Diagramas de caja y bigotes boxplot(x): Dibuja un diagrama de caja y bigotes con los datos de la lista x. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.boxplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.show() Diagramas de violín violinplot(x): Dibuja un diagrama de violín con los datos de la lista x. import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.violinplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.show() Diagramas de contorno contourf(x, y, z): Dibuja un diagrama de contorno con las curvas de nivel de la superficie dada por los puntos con las coordenadas de las listas x, y y z en los ejes X, Y y Z respectivamente. import matplotlib.pyplot as plt fig, ax = plt.subplots() x = np.linspace(-3.0, 3.0, 100) y = np.linspace(-3.0, 3.0, 100) x, y = np.meshgrid(x, y) z = np.sqrt(x**2 + 2*y**2) ax.contourf(x, y, z) plt.show() Mapas de color imshow(x): Dibuja un mapa de color a partir de una matriz (array bidimensiona) x. import matplotlib.pyplot as plt fig, ax = plt.subplots() x = np.random.random((16, 16)) ax.imshow(x) plt.show() hist2d(x, y): Dibuja un mapa de color que simula un histograma bidimensional, donde los colores de los cuadrados dependen de las frecuencias de las clases de la muestra dada por las listas x e y. import matplotlib.pyplot as plt fig, ax = plt.subplots() x, y = np.random.multivariate_normal(mean=[0.0, 0.0], cov=[[1.0, 0.4], [0.4, 0.5]], size=1000).T ax.hist2d(x, y) plt.show() Cambiar el aspecto de los gráficos Los gráficos creados con Matplotlib son personalizables y puede cambiarse el aspecto de casi todos sus elementos. Los elementos que suelen modificarse más a menudo son:\nColores Marcadores de puntos Estilo de líneas Títulos Ejes Leyenda Rejilla Colores Para cambiar el color de los objetos se utiliza el parámetro color = nombre-color, donde nombre-color es una cadena con el nombre del color de entre los colores disponibles.\nimport matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], color = 'tab:purple') ax.plot(dias, temperaturas['Barcelona'], color = 'tab:green') plt.show() Marcadores Para cambiar la forma de los puntos marcadores se utiliza el parámetro marker = nombre-marcador donde nombre-marcador es una cadena con el nombre del marcador de entre los marcadores disponibles\nimport matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], marker = '^') ax.plot(dias, temperaturas['Barcelona'], marker = 'o') plt.show() Líneas Para cambiar el estilo de las líneas se utiliza el parámetro linestyle = nombre-estilo donde nombre-estilo es una cadena con el nombre del estilo de entre los estilos disponibles\nimport matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], linestyle = 'dashed') ax.plot(dias, temperaturas['Barcelona'], linestyle = 'dotted') plt.show() Títulos Para añadir un título principal al gráfico se utiliza el siguiente método:\nax.set_title(titulo, loc=alineacion, fontdict=fuente) : Añade un título con el contenido de la cadena titulo a los ejes ax. El parámetro loc indica la alineación del título, que puede ser 'left' (izquierda), 'center' (centro) o 'right' (derecha), y el parámetro fontdict indica mediante un diccionario las características de la fuente (la el tamaño fontisize, el grosor fontweight o el color color). import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.set_title('Evolución de la temperatura diaria', loc = \u0026quot;left\u0026quot;, fontdict = {'fontsize':14, 'fontweight':'bold', 'color':'tab:blue'}) plt.show() Ejes Para cambiar el aspecto de los ejes se suelen utilizar los siguientes métodos:\nax.set_xlabel(titulo) : Añade un título con el contenido de la cadena titulo al eje x de ax. Se puede personalizar la alineación y la fuente con los mismos parámetros que para el título principal. ax.set_ylabel(titulo) : Añade un título con el contenido de la cadena titulo al eje y de ax. Se puede personalizar la alineación y la fuente con los mismos parámetros que para el título principal. ax.set_xlim([limite-inferior, limite-superior]) : Establece los límites que se muestran en el eje x de ax. ax.set_ylim([limite-inferior, limite-superior]) : Establece los límites que se muestran en el eje y de ax. ax.set_xticks(marcas) : Dibuja marcas en el eje x de ax en las posiciones indicadas en la lista marcas. ax.set_yticks(marcas) : Dibuja marcas en el eje y de ax en las posiciones indicadas en la lista marcas. ax.set_xscale(escala) : Establece la escala del eje x de ax, donde el parámetro escala puede ser 'linear' (lineal) o 'log' (logarítmica). ax.set_yscale(escala) : Establece la escala del eje y de ax, donde el parámetro escala puede ser 'linear' (lineal) o 'log' (logarítmica). import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.set_xlabel(\u0026quot;Días\u0026quot;, fontdict = {'fontsize':14, 'fontweight':'bold', 'color':'tab:blue'}) ax.set_ylabel(\u0026quot;Temperatura ºC\u0026quot;) ax.set_ylim([20,35]) ax.set_yticks(range(20, 35)) plt.show() Leyenda Para añadir una leyenda a un gráfico se utiliza el siguiente método:\nax.legend(leyendas, loc = posición) : Dibuja un leyenda en los ejes ax con los nombres indicados en la lista leyendas. El parámetro loc indica la posición en la que se dibuja la leyenda y puede ser 'upper left' (arriba izquierda), 'upper center' (arriba centro), 'upper right' (arriba derecha), 'center left' (centro izquierda), 'center' (centro), 'center right' (centro derecha), 'lower left' (abajo izquierda), 'lower center' (abajo centro), 'lower right' (abajo derecha). Se puede omitir la lista leyendas si se indica la leyenda de cada serie en la función que la dibuja mediante el parámetro label. import matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid'], label = 'Madrid') ax.plot(dias, temperaturas['Barcelona'], label = 'Barcelona') ax.legend(loc = 'upper right') plt.show() Rejilla ax.grid(axis=ejes, color=color, linestyle=estilo) : Dibuja una rejilla en los ejes de ax. El parámetro axis indica los ejes sobre los que se dibuja la regilla y puede ser 'x' (eje x), 'y' (eje y) o 'both' (ambos). Los parámetros color y linestyle establecen el color y el estilo de las líneas de la rejilla, y pueden tomar los mismos valores vistos en los apartados de colores y líneas.\nimport matplotlib.pyplot as plt fig, ax = plt.subplots() dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax.plot(dias, temperaturas['Madrid']) ax.plot(dias, temperaturas['Barcelona']) ax.grid(axis = 'y', color = 'gray', linestyle = 'dashed') plt.show() Múltiples gráficos Es posible dibujar varios gráficos en distintos ejes en una misma figura organizados en forma de tabla. Para ello, cuando se inicializa la figura y los ejes, hay que pasarle a la función subplots el número de filas y columnas de la tabla que contendrá los gráficos. Con esto los distintos ejes se organizan en un array y se puede acceder a cada uno de ellos a través de sus índices. Si se quiere que los distintos ejes compartan los mismos límites para los ejes se pueden pasar los parámetros sharex = True para el eje x o sharey = True para el eje y.\nimport matplotlib.pyplot as plt fig, ax = plt.subplots(2, 2, sharey = True) dias = ['L', 'M', 'X', 'J', 'V', 'S', 'D'] temperaturas = {'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]} ax[0, 0].plot(dias, temperaturas['Madrid']) ax[0, 1].plot(dias, temperaturas['Barcelona'], color = 'tab:orange') ax[1, 0].bar(dias, temperaturas['Madrid']) ax[1, 1].bar(dias, temperaturas['Barcelona'], color = 'tab:orange') plt.show() Integración con Pandas Matplotlib se integra a la perfección con la librería Pandas, permitiendo dibujar gráficos a partir de los datos de las series y DataFrames de Pandas.\ndf.plot(kind=tipo, x=columnax, y=columnay, ax=ejes) : Dibuja un diagrama del tipo indicado por el parámetro kind en los ejes indicados en el parámetro ax, representando en el eje x la columna del parámetro x y en el eje y la columna del parámetro y. El parámetro kind puede tomar como argumentos 'line' (lineas), 'scatter' (puntos), 'bar' (barras verticales), 'barh' (barras horizontales), 'hist' (histograma), 'box' (cajas), 'density' (densidad), 'area' (area) o 'pie' (sectores). Es posible pasar otros parámetros para indicar el color, el marcador o el estilo de línea como se vió en los apartados anteriores. import pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'Días':['L', 'M', 'X', 'J', 'V', 'S', 'D'], 'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]}) fig, ax = plt.subplots() df.plot(x = 'Días', y = 'Madrid', ax = ax) df.plot(x = 'Días', y = 'Barcelona', ax = ax) plt.show() Si no se indican los parámetros x e y se representa el índice de las filas en el eje x y una serie por cada columna del Dataframe. Las columnas no numéricas se ignoran.\nimport pandas as pd import matplotlib.pyplot as plt df = pd.DataFrame({'Días':['L', 'M', 'X', 'J', 'V', 'S', 'D'], 'Madrid':[28.5, 30.5, 31, 30, 28, 27.5, 30.5], 'Barcelona':[24.5, 25.5, 26.5, 25, 26.5, 24.5, 25]}) df = df.set_index('Días') fig, ax = plt.subplots() df.plot(ax = ax) plt.show() ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601843787,"objectID":"f2069d4824ae9091b5efb06caf9da796","permalink":"/docencia/python/manual/matplotlib/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/matplotlib/","section":"docencia","summary":"Matplotlib es una librería de Python especializada en la creación de gráficos en dos dimensiones.\nPermite crear y personalizar los tipos de gráficos más comunes, entre ellos:\nDiagramas de barras Histograma Diagramas de sectores Diagramas de caja y bigotes Diagramas de violín Diagramas de dispersión o puntos Diagramas de lineas Diagramas de areas Diagramas de contorno Mapas de color y combinaciones de todos ellos.","tags":["Matplotlib"],"title":"La librería Matplotlib","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Depuración de programas La depuración es una técnica que permite trazar un programa, es decir, seguir el flujo de ejecución de un programa paso a paso, ejecutando una instrucción en cada paso, y observar el estado de sus variables.\nCuando un programa tiene cierta complejidad, la depuración es imprescindible pare detectar posibles errores.\nPython dispone del módulo pyd para depurar programas, pero es mucho más cómodo utilizar algún entorno de desarrollo que incorpore la depuración, como por ejemplo Visual Studio Code.\nComandos de depuración Establecer punto de parada: Detiene la ejecución del programa en una línea concreta de código. Continuar la ejecución: Continúa la ejecución del programa hasta el siguiente punto de parada o hasta que finalice. Próximo paso: Ejecuta la siguiente línea de código y para la ejecución. Próximo paso con entrada en función: Ejecuta la siguiente línea de código. Si se trata de una llamada a una función entonces ejecuta la primera instrucción de la función y para la ejecución. Próximo paso con salida de función: Ejecuta lo que queda de la función actual y para la ejecución. Terminar la depuración: Termina la depuración. Depuración en Visual Studio Code Antes de iniciar la depuración de un programa en VSCode hay que establecer algún punto de parada. Para ello basta con hacer click en le margen izquierdo de la ventana con del código a la altura de la línea donde se quiere parar la ejecución del programa.\n\u0026gt;\nPara iniciar la depuración de un programa en VSCode hay que hacer clic sobre el botón o pulsar la combinación de teclas (Ctr+Shift+D).\nLa primera vez que depuremos un programa tendremos que crear un fichero de configuración del depurador (launch.json). Para ello hay que hacer clic en el botón Run and Debug. VSCode mostrará los distintos ficheros de configuración disponibles y debe seleccionarse el más adecuado para el tipo de programa a depurar. Para programas simples se debe seleccionar Python file.\nLa depuración comenzará iniciando la ejecución del programa desde el inicio hasta el primer punto de parada que encuentre.\nUna vez iniciado el proceso de depuración, se puede avanzar en la ejecución del programa haciendo uso de la barra de depuración que contiene botones con los principales comandos de depuración.\nDurante la ejecución del programa, se puede ver el contenido de las variables del programa en la ventana del estado de las variables.\nEl usuario también puede introducir expresiones y ver cómo se evalúan durante la ejecución del programa en la ventana de vista de expresiones.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601843302,"objectID":"af648141b171a09b4dcfc263b29cb08c","permalink":"/docencia/python/manual/depuracion/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/depuracion/","section":"docencia","summary":"Depuración de programas La depuración es una técnica que permite trazar un programa, es decir, seguir el flujo de ejecución de un programa paso a paso, ejecutando una instrucción en cada paso, y observar el estado de sus variables.","tags":[],"title":"Depuración de código","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Referencias Webs Python Sitio web de Python. Repl.it Entorno de desarrollo web para varios lenguajes, incluido Python. Python tutor Sitio web que permite visualizar la ejecución el código Python. Libros y manuales Tutorial de Python Tutorial rápido de python. Python para todos Libro de introducción a Python con muchos ejemplos. Es de licencia libre. Python para principiantes Libro de introducción Python que abarca orientación a objetos. Es de licencia libre. Python crash course Libro de introducción a Python gratuito. Think python 2e. Libro de introducción a Python que abarca también algoritmos, estructuras de datos y gráficos. Es de licencia libre. Learning Python Libro de introducción a Python con enfoque de programación orientada a objetos. Vídeos Curso \u0026ldquo;Python para todos\u0026rdquo;. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"49676abf614dd6e680152dbba42627f7","permalink":"/docencia/python/manual/referencias/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/referencias/","section":"docencia","summary":"Referencias Webs Python Sitio web de Python. Repl.it Entorno de desarrollo web para varios lenguajes, incluido Python. Python tutor Sitio web que permite visualizar la ejecución el código Python. Libros y manuales Tutorial de Python Tutorial rápido de python.","tags":[],"title":"Referencias","type":"book"},{"authors":null,"categories":["Matemáticas","Estadística","Ciencia de Datos"],"content":"Como cualquier investigador en Ciencia de Datos, Matemáticas o Estadística, tengo que escribir documentos científicos y técnicos (apuntes, libros, presentaciones, artículos para revistas, etc.). En estos documentos es habitual incluir fórmulas matemáticas, gráficos, tablas, algoritmos, código fuente, etc., elementos que luego suelo referenciar en el texto así como referencias bibliográficas. Hasta ahora, para la elaboración de estos documentos solía utilizar LaTeX, un sistema de composición de textos científicos y técnicos que permite la elaboración de documentos en formato PDF, HTML y EPUB. Sin embargo, LaTeX tiene una curva de aprendizaje elevada y su sintaxis es compleja. Además resulta complicado integrar código de otros lenguajes de programación en los documentos. Por esta razón, recientemente he comenzado a utilizar Quarto para la elaboración de mis documentos científicos y técnicos.\nQuarto es un sistema de composición de textos científicos y técnicos que permite la elaboración de documentos en formato PDF, HTML y EPUB. Con Quarto se pueden crear artículos, libros, presentaciones e incluso libros enteros de manera mucho más sencilla que LaTeX y permite incluir código de otros lenguajes de programación (Python, Julia, R, etc.) en los documentos, lo que facilita la creación de informes completamente reproducibles. Además, Quarto permite la inclusión de fórmulas matemáticas, gráficos, tablas, algoritmos, listado de código fuente, referencias cruzadas, referencias bibliográficas y, en general, todos elementos que suelen utilizarse en la elaboración de documentos científicos y técnicos.\nComo resultado de mi aprendizaje y mi experiencia con esta nueva herramienta, he creado un pequeño tutorial para elaborar documentos científicos y técnicos con Quarto. En este tutorial se muestra cómo instalar Quarto, cómo crear un nuevo proyecto, cómo incluir fórmulas matemáticas, gráficos, tablas, algoritmos, listado de código fuente, referencias cruzadas, referencias bibliográficas, etc. Además, se muestra cómo compilar el documento en formato PDF, HTML y EPUB.\nPodéis acceder aL tutorial con el siguiente enlace: Creación de documentos científicos con Quarto.\n","date":1709251200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1710327536,"objectID":"c405480d61e824af3d21040278b41dbc","permalink":"/post/quarto-documentos-cientificos/","publishdate":"2024-03-01T00:00:00Z","relpermalink":"/post/quarto-documentos-cientificos/","section":"post","summary":"Como cualquier investigador en Ciencia de Datos, Matemáticas o Estadística, tengo que escribir documentos científicos y técnicos (apuntes, libros, presentaciones, artículos para revistas, etc.). En estos documentos es habitual incluir fórmulas matemáticas, gráficos, tablas, algoritmos, código fuente, etc.","tags":["Tutorial","Quarto"],"title":"Documentos científicos con Quarto","type":"post"},{"authors":null,"categories":["Matemáticas","Estadística"],"content":"La semana pasada participé en el seminario de innovación docente organizado por el Grupo de Innovación Docente en Modelización Matemática y Simulación Numérica (M2SINUM) de la Universidad de La Coruña.\nAllí presenté la experiencia docente de la introducción de Julia como lenguaje de computación para las prácticas de varias asignaturas (Análisis, Álgebra Lineal y Matemática Discreta) del grado de Ingeniería Matemática de la Universidad CEU San Pablo durante este curso 2023-2024. Durante la presentación se mostraron las principales razones que han motivado la elección de este lenguaje y se vió cómo utilizar Julia tanto para cálculo simbólico como numérico en distintas áreas de las Matemáticas (representación gráfica de funciones, cálculo de límites, derivadas, integrales, resolución de ecuaciones, ecuaciones diferenciales, Álgebra Lineal, etc.).\nPodéis acceder a la presentación con el siguiente enlace: Cálculo Numérico y Simbólico con Julia.\n","date":1690156800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1690551088,"objectID":"2864fc65bf52643f7b65ca53098a6e47","permalink":"/post/presentacion-julia-seminario-innovacion/","publishdate":"2023-07-24T00:00:00Z","relpermalink":"/post/presentacion-julia-seminario-innovacion/","section":"post","summary":"La semana pasada participé en el seminario de innovación docente organizado por el Grupo de Innovación Docente en Modelización Matemática y Simulación Numérica (M2SINUM) de la Universidad de La Coruña.","tags":["Tutorial","Julia"],"title":"Cálculo numérico y simbólico con Julia","type":"post"},{"authors":null,"categories":["Matemáticas","Estadística"],"content":"Julia es un lenguaje de programación moderno que se caracteriza por ser tan sencillo de aprender como Python o R, pero que es tan rápido como C, lo que lo convierte en una opción muy interesante para realizar cálculos que tienen un alto coste computacional.\nDurante el curso 2022-2023 hemos introducido Julia como uno de los lenguajes de programación básicos en el grado de Ingeniería Matemática y por tal motivo he preparado un pequeño manual de introducción a Julia.\nPodéis acceder a él con el siguiente enlace: Manual de Julia.\nEspero que os resulte útil.\n","date":1685577600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1690551088,"objectID":"1a8e1a865479815b50a8bc7d7c00300b","permalink":"/post/manual-julia/","publishdate":"2023-06-01T00:00:00Z","relpermalink":"/post/manual-julia/","section":"post","summary":"Julia es un lenguaje de programación moderno que se caracteriza por ser tan sencillo de aprender como Python o R, pero que es tan rápido como C, lo que lo convierte en una opción muy interesante para realizar cálculos que tienen un alto coste computacional.","tags":["Tutorial","Julia"],"title":"Manual de Julia","type":"post"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 24 de junio de 2022\nEjercicio 1 Las matemáticas financieras, resumidas en una frase, las podríamos definir como la rama de las matemáticas que estudia los flujos de dinero a través del tiempo. Básicamente se presupone que el dinero tiene menos valor en el futuro que en el presente, ya sea por un tema inflacionario o por la preferencia natural de las personas a priorizar el consumo presente.\nEl valor futuro es el valor alcanzado por un determinado capital al final del período determinado (para el ejemplo usaremos la fórmula del interés compuesto). Para calcularlo se utiliza la siguiente fórmula\n$$VF = VA\\cdot (1 + i)^n$$\nEl valor presente de una inversión es cuando calculamos el valor actual que tendrá una determinada cantidad que recibiremos o pagaremos en un futuro. Para calcularlo se utiliza la siguiente fórmula\n$$VA = \\frac{VF}{(1 + i)^n}$$\nDonde $VF$ es el valor futuro, $VA$ es el valor actual o inicial de la inversión, $i$ es el tipo de interés y $n$ es número de años de la inversión.\nCrear una función que reciba como entrada un capital, un tipo de interés y un número de años, y muestre por pantalla el valor futuro de la inversión cada año del periodo indicado. Crear una función que reciba como entrada un capital, un tipo de interés y un número de años, y muestre por pantalla el valor actual del capital cada año del periodo indicado. Ejemplo de ejecución\nIntroduce un capital: 1000 Introduce un tipo de interés: 10 Introduce un número de años: 3 VALOR FUTURO Año 0 : 1100.0 Año 1 : 1210.0000000000002 Año 2 : 1331.0000000000005 VALOR ACTUAL Año 0 : 909.090909090909 Año -1 : 826.4462809917354 Año -2 : 751.3148009015775 Solución\nEjercicio 2 Realizar un programa que simule el juego de las tres en raya. Cada jugador solo debe colocar su ficha una vez por turno y no debe ser sobre una casilla ya ocupada. En caso de que el jugador haga trampa el ganador será el otro. Para ganar se debe conseguir realizar una línea recta (horizontal, vertical o diagonal) con la misma ficha. El tablero es de 3x3 y cualquier casilla podrá estar vacía u ocupada sólo por una ficha X o 0. El programa debe realizar las siguientes operaciones:\nMostrar el tablero por pantalla. Poner una ficha en una cuadricula comprobando que no está ocupada. Comprobar si se produce tres en raya e indicar si es de X o de O, o si hay empate. Ejemplo de ejecución\n[' ', ' ', ' '] [' ', ' ', ' '] [' ', ' ', ' '] Introduce la coordenada X del 1 al 3: 2 Introduce la coordenada Y del 1 al 3: 2 Introduce 0 para círculo o X para cruz: X [' ', ' ', ' '] [' ', 'X', ' '] [' ', ' ', ' '] Introduce la coordenada X del 1 al 3: 2 Introduce la coordenada Y del 1 al 3: 1 Introduce 0 para círculo o X para cruz: 0 [' ', ' ', ' '] ['0', 'X', ' '] [' ', ' ', ' '] Introduce la coordenada X del 1 al 3: 2 Introduce la coordenada Y del 1 al 3: 1 Introduce 0 para círculo o X para cruz: X Esa coordenada ya está siendo utilizada, use una libre. [' ', ' ', ' '] ['0', 'X', ' '] [' ', ' ', ' '] Introduce la coordenada X del 1 al 3: 3 Introduce la coordenada Y del 1 al 3: 1 Introduce 0 para círculo o X para cruz: X [' ', ' ', ' '] ['0', 'X', ' '] ['X', ' ', ' '] Introduce la coordenada X del 1 al 3: 1 Introduce la coordenada Y del 1 al 3: 2 Introduce 0 para círculo o X para cruz: 0 [' ', '0', ' '] ['0', 'X', ' '] ['X', ' ', ' '] Introduce la coordenada X del 1 al 3: 1 Introduce la coordenada Y del 1 al 3: 3 Introduce 0 para círculo o X para cruz: X [' ', '0', 'X'] ['0', 'X', ' '] ['X', ' ', ' '] La partida la ha ganado el jugador con la ficha X. Solución\nEjercicio 3 El fichero bank-loans.csv contiene información sobre los préstamos de los clientes de un banco. Utilizando la librería Pandas, se pide: Crear un DataFrame importando los datos del fichero. Mostrar por pantalla el nombre de las columnas del DataFrame. Mostrar por pantalla las filas del DataFrame múltiplos de 10. Mostrar por pantalla el número de clientes casados con edad entre 30 y 40 años. Añadir al DataFrame una columna nueva con la edad en meses. Mostrar por pantalla las frecuencias de los oficios ordenadas de mayor a menor. Mostrar por pantalla las edades medias según el nivel de estudios. Mostrar por pantalla el porcentaje de préstamos hipotecarios (housing) según el estado civil (marital). Dibujar el diagrama de sectores con los porcentajes de los niveles de estudio y ponerle un título. Dibujar en una misma figura el histograma y el diagrama de cajas de las edades. El histograma debe tener clases de amplitud 10 desde 20 hasta 70 años, y en color rojo. Solución\nEjercicio 4 El fichero bank-loans.csv contiene información sobre los préstamos de los clientes de un banco. Utilizando ficheros (sin usar la librería Pandas), crear una función que tenga como parámetros la url del fichero, el nombre de una columna cualitativa y un booleano para los porcentajes (False por defecto), que devuelva un diccionario con las frecuencias absolutas de las categorías de la columna indicada. Si se pasa True como argumento del parámetro para el porcentaje, la función debe devolver el diccionario de porcentajes de las categorías. Ejemplo de ejecución\nSalida de la llamada a la función con la columna \u0026ldquo;education\u0026rdquo;.\n{'basic.4y': 1299, 'high.school': 2382, 'basic.6y': 761, 'basic.9y': 1820, 'professional.course': 1142, 'unknown': 485, 'university.degree': 2109, 'illiterate': 2} Salida de la llamada a la función con la columna \u0026ldquo;housing\u0026rdquo; y porcentaje = True.\n{'no': 51.88, 'yes': 45.24, 'unknown': 2.88} Solución\n","date":1656028800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1656370239,"objectID":"3be6497cf17d33c650a8db4a1dcb090c","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-06-24/","publishdate":"2022-06-24T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-06-24/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 24 de junio de 2022\nEjercicio 1 Las matemáticas financieras, resumidas en una frase, las podríamos definir como la rama de las matemáticas que estudia los flujos de dinero a través del tiempo.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2022-06-24","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 4 de junio de 2022\nEjercicio 1 Realizar un programa que pregunte al usuario por un número entero impar y dibuje un rombo con el número de filas introducidas por el usuario.\nEjemplo de ejecución\nIntroduce el número de filas del rombo (un número impar): 7 * *** ***** ******* ***** *** * Solución\nEjercicio 2 Realizar un programa que simule la operativa de una cuenta bancaria. El programa debe preguntar al usuario si desea realizar un ingreso o un reintegro hasta que el usuario decida terminar el programa.\nSi el usuario selecciona la opción de ingreso, debe preguntarle por la cantidad a ingresar e incrementar el saldo en esa cantidad.\nSi el usuario selecciona la opción de reintegro deberá preguntarle por la cantidad a sacar y sustraerla del saldo, siempre y cuando haya saldo suficiente. Si no hubiese saldo suficiente avisará al usuario y no realizará el reintegro.\nLas cantidades de las operaciones deben guardarse en una sola lista (positivos para ingresos y negativos para reintegros), y después de cada operación debe mostrarse el saldo por pantalla.\nCuando el usuario ya no quiera hacer más operaciones, a partir de la lista de operaciones se deben crear dos listas más, una para los ingresos y otra para los reintegros y deben mostrarse por pantalla.\nEjemplo de ejecución\nOPERATIVA CUENTA BANCARIA ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 1 Introduce la cantidad: 1000 Saldo: 1000.0 ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 2 Introduce la cantidad: 1200 Lo siento, no hay saldo suficiente. ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 2 Introduce la cantidad: 800 Saldo: 200.0 ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 1 Introduce la cantidad: 500 Saldo: 700.0 ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 2 Introduce la cantidad: 400 Saldo: 300.0 ¿Qué deseas hacer? 1- Ingreso 2- Reintegro Elige una opción (cualquier otra para terminar): 3 Ingresos: [1000.0, 500.0] Reintegros: [-800.0, -400.0] Solución\nEjercicio 3 Existe un texto que se usa frecuentemente para demostraciones dentro del ámbito del diseño gráfico. De hecho, este texto cuyo nombre es Lorem ipsum es un estándar utilizado desde el año 1500 y sirve principalmente para probar el diseño visual antes de insertar el texto definitivo. Dicho pasaje es el siguiente:\n\u0026ldquo;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\u0026rdquo;\nRealizar un programa que analice dicho pasaje y realice las siguientes operaciones:\nCrear un diccionario con la frecuencia de cada carácter sin tener en cuenta el espacio. Muestre por pantalla el carácter que más se repite. Muestre por pantalla las palabras que contienen el carácter más repetido y su frecuencia por palabra. Ejemplo de ejecución\nCarácter más repetido: i Las palabras donde se encuentra el carácter que más se repite: {'ipsum': 1, 'sit': 1, 'adipiscing': 3, 'elit,': 1, 'eiusmod': 1, 'incididunt': 3, 'aliqua.': 1, 'enim': 1, 'minim': 2, 'veniam,': 1, 'quis': 1, 'exercitation': 2, 'laboris': 1, 'nisi': 2, 'aliquip': 2, 'Duis': 1, 'irure': 1, 'in': 1, 'reprehenderit': 1, 'velit': 1, 'cillum': 1, 'fugiat': 1, 'pariatur.': 1, 'sint': 1, 'cupidatat': 1, 'proident,': 1, 'qui': 1, 'officia': 2, 'mollit': 1, 'anim': 1, 'id': 1} Solución\nEjercicio 4 Escriba un programa que obtenga el máximo y el mínimo de una serie de datos proporcionados en Hexadecimal. Para ello se le pasará una lista de datos en formato hexadecimal, y tendrá que convertirlos primero a formato Binario, y a continuación a formato Decimal. Para ello, se pide lo siguiente:\nCrear una función de conversión de formato hexadecimal a binario en base a la siguiente tabla:\nHexadecimal 0 1 2 3 4 5 6 7 Decimal 0000 0001 0010 0011 0100 0101 0110 0111 Hexadecimal 8 9 A B C D E F Decimal 1000 1001 1010 1011 1100 1101 1110 1111 Ejemplo de ejecución\nIntroduce un número hexadecimal: AA55 El número hexadecimal AA55 en binario es 1010101001010101 Crear una función de conversión de formato binario a decimal. El procedimiento se detalla a continuación:\nEjemplo de ejecución\nIntroduce un número binario: 1010101001010101 El número binario 1010101001010101 es en decimal 43605 Crear una función que reciba una lista de números hexadecimales y devuelva una tupla con el máximo y su valor decimal.\nEjemplo de ejecución\nUsando como entrada de la última función la lista: [\u0026quot;AA55\u0026quot;, \u0026quot;1010\u0026quot;, \u0026quot;BEBE\u0026quot;, \u0026quot;0101\u0026quot;, \u0026quot;0FEA\u0026quot;]\nMáximo: ('BEBE', 48830) Solución\nEjercicio 5 El fichero coches.csv contiene información sobre los modelos de coches vendidos en USA un determinado año. Se pide:\nCrear un DataFrame a partir del fichero anterior. Eliminar las filas con valores desconocidos y mostrar el número de filas del dataframe resultante. Crear una columna con el precio en euros (cambio 1$ = 0.94€) Mostrar por pantalla las 10 últimas filas del DataFrame. Mostrar por pantalla el número de marcas que contiene el DataFrame. Mostrar por pantalla el número de modelos de cada marca que hay en el DataFrame, de mayor a menor frecuencia. Mostrar por pantalla la marca y el modelo del coche más caro. Mostrar por pantalla el precio medio en euros de los coches agrupando por marca y ordenando de menor a mayor precio. Dibujar el diagrama de barras del porcentaje de modelos de cada marca. Dibujar el diagrama de dispersión de la potencia y el precio.\nLos gráficos deben guardarse en una carpeta con el nombre gráficos y deben tener un título adecuado. Solución\nEjercicio 6 El fichero bitcoin-tweets.csv contiene los tweets obtenidos en una búsqueda en Twitter sobre bitcoins (cada línea contiene información de un tweet). Se pide:\nCrear una función que reciba la url de un fichero csv como el anterior y devuelva una lista con los tweets del fichero, donde cada tweet se represente con un diccionario con sus campos, tal y como se muestra en la siguiente salida:\n[{'fecha': '2022-05-20 15:11:03+00:00', 'usuario': 'infobaeeconomia', 'texto': 'Bill Gates contra el Bitcoin: “No aporta nada” https://t.co/pZBlC664gw', 'likes': '496'}, {'fecha': '2022-05-21 14:26:51+00:00', 'usuario': 'DaniaGonzalz', 'texto': 'El Salvador hoy es un referente en materia de Inclusión Financiera gracias a la Ley #Bitcoin, países de la región c… https://t.co/P8oS2nfm36', 'likes': '554'}, {'fecha': '2022-05-20 20:42:04+00:00', 'usuario': 'LaHuellaSV', 'texto': 'El asesor en criptoeconomía y fundador de Criptokuántica, Néstor Kreimer, afirmó que El Salvador tiene actualmente… https://t.co/HbSqrQYk67', 'likes': '57'}, {'fecha': '2022-05-20 11:38:19+00:00', 'usuario': 'carmenaidalazo', 'texto': 'La ironía con bitcoin es que años de bajas tasas y politica monetaria expansiva alimentaron incrementos en precios… https://t.co/cm2mo86eKy', 'likes': '284'}, {'fecha': '2022-05-20 11:56:30+00:00', 'usuario': 'garciabanchs', 'texto': 'Cuando a soberbios del #Bitcoin aún les cambiaban los pañales, ya me quemaba las pestañas en mi doctorado de Econom… https://t.co/82tj5Dcalp', 'likes': '74'}, {'fecha': '2022-05-21 14:27:07+00:00', 'usuario': 'DaniaGonzalz', 'texto': '\u0026quot;El Salvador es la capital del #Bitcoin #Ethereum , invitamos a todos los países a invertir en el futuro, por eso nuestro p… https://t.co/UnQVQZj7aw\u0026quot;', 'likes': '89'}, {'fecha': '2022-05-14 00:07:00+00:00', 'usuario': 'ActualidadRT', 'texto': \u0026quot;@ActualidadRT's account has been withheld in Belgium, Austria, Bulgaria, Sweden, Croatia, Spain, Slovenia, Cyprus, Slovakia, Czech Republic, Romania, Portugal, Poland, Denmark, Netherlands, Estonia, Malta, Luxembourg, Finland, France, Lithuania, Germany, Greece, Latvia, Hungary, Italy, Ireland, United Kingdom in response to a legal demand. Learn more.\u0026quot;, 'likes': '1037'}, {'fecha': '2022-05-14 14:01:45+00:00', 'usuario': 'ChiguireBipolar', 'texto': 'Testigo de Jehová se esconde de promotor del Bitcoin https://t.co/odVOELmYKu https://t.co/GOtuWLoGhT', 'likes': '1082'}, {'fecha': '2022-05-15 01:21:58+00:00', 'usuario': 'el_pais', 'texto': 'El Salvador convirtió al Bitcoin en su moneda legal. Con la caída de las criptomonedas, han caído en picado también… https://t.co/fFlk1P1LSj', 'likes': '551'}, {'fecha': '2022-05-13 23:00:28+00:00', 'usuario': 'garciabanchs', 'texto': 'La cantidad de dinero que han perdido fans por hacerle caso a celebridades en torno a la adquisición de criptomoned… https://t.co/UOjmvj4Jxq', 'likes': '1143'}, {'fecha': '2022-05-14 15:44:24+00:00', 'usuario': 'juanrallo', 'texto': 'Llevas diciendo que Bitcoin es una burbuja desde que cotizaba a 100 dólares. Que sepamos los patrones típicos de un… https://t.co/2inCgvPHnE', 'likes': '1423'}, {'fecha': '2022-05-14 16:01:48+00:00', 'usuario': 'wallstwolverine', 'texto': 'Los mismos políticos que asesoraban a Venezuela en sus políticas económicas te dan lecciones hoy de lo peligroso qu… https://t.co/wRje03EydN', 'likes': '1543'}, {'fecha': '2022-05-18 06:18:46+00:00', 'usuario': 'EdgardoMulatoSV', 'texto': 'Ya se preguntaron, ¿Por qué sube la ola de homicidios y ataques al Gobierno cuando vienen INVERSIONISTAS al país?… https://t.co/T5PCT8RgKB', 'likes': '796'}] Crear una función que reciba una lista de tweets como la que devuelve la función anterior, y devuelva un diccionario con los hashtags contenidos en los tweets y su frecuencia, tal y como se muestra en la siguiente salida:\n{'#Bitcoin': 3, '#Ethereum': 1} Solución\n","date":1654300800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1656370239,"objectID":"3f492c801079784109deea191ba3f85f","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-06-04/","publishdate":"2022-06-04T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-06-04/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 4 de junio de 2022\nEjercicio 1 Realizar un programa que pregunte al usuario por un número entero impar y dibuje un rombo con el número de filas introducidas por el usuario.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2022-06-04","type":"book"},{"authors":null,"categories":["LaTeX","Matemáticas"],"content":"$\\LaTeX$ es un sistema de composición de documentos bien conocido por los matemáticos ya que facilita la escritura de fórmulas y ecuaciones y, en general, todo el proceso de creación de un documento científico o técnico.\nLo conocí cuando estudiaba la carrera de Matemáticas y quedé maravillado por su lógica y la belleza de los documentos finales. Desde entonces ha sido mi procesador de textos y nunca me ha fallado.\nLa curva de aprendizaje de la $\\LaTeX$ es larga y requiere bastante tiempo dominarlo, pero el tiempo invertido sin duda merece la pena. No me imagino la de horas y días que habría perdido escribiendo mi tesis doctoral en Word, tratando que colocar todo en su lugar\u0026hellip;\nDurante mucho tiempo he querido escribir un manual para facilitar ese aprendizaje y facilitarle a los principiantes los conocimientos básicos para empezar a componer sus propios documentos, pero hasta finales de este curso no he tenido tiempo para ponerme con ello. Por fin, he podido escribir este breve y modesto manual que espero os ayude a descubrir y a enamoraros del maravilloso mundo de $\\LaTeX$.\nPodéis acceder al manual en el siguiente enlace: https://aprendeconalf.es/latex-manual/\n","date":1654041600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1663107083,"objectID":"4ea124d1912dae75e1df876d8be536a0","permalink":"/post/manual-latex/","publishdate":"2022-06-01T00:00:00Z","relpermalink":"/post/manual-latex/","section":"post","summary":"$\\LaTeX$ es un sistema de composición de documentos bien conocido por los matemáticos ya que facilita la escritura de fórmulas y ecuaciones y, en general, todo el proceso de creación de un documento científico o técnico.","tags":["Manual"],"title":"Manual de LaTeX","type":"post"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 24 de marzo de 2022\nEjercicio 1 Escriba un programa que permita practicar una variante simplificada de la prueba de cálculo mental La calculadora humana del concurso televisivo Saber y ganar. El usuario debe ir sumando todos los números de la lista de uno en uno hasta que se equivoque o termine la lista, en cuyo caso ganará.\nEjemplo usando la lista [50, 4, 28, 33, 12]:\nSUMAR Y GANAR Vaya sumando todos los números que le iré diciendo. Empezamos por 0. Más 50: 50 Más 4: 54 Más 28: 72 Te has equivocado, pero has acertado 2 veces seguidas. SUMAR Y GANAR Vaya sumando todos los números que le iré diciendo. Empezamos por 0. Más 50: 50 Más 4: 54 Más 28: 82 Más 33: 115 Más 12: 127 Enhorabuena, GANASTE. Solución\nEjercicio 2 Escribir un programa que calcule a partir de una fecha de un año no bisiesto el número de días que han transcurrido en ese año y el número de meses lunares completos que abarcan. Se recuerda que un mes lunar dura aproximadamente 29,53 días.\nEl programa debe usar diccionarios para acceder al número de días de cada mes.\nEjemplo:\nCALENDARIO LUNAR Este programa convierte una fecha de un año NO bisiesto a un calendario lunar. Indique el día: 1 Indique el mes: henero El mes henero no existe. CALENDARIO LUNAR Este programa convierte una fecha de un año NO bisiesto a un calendario lunar Indique el día: -5 Indique el mes: marzo El día -5 de marzo no existe. CALENDARIO LUNAR Este programa convierte una fecha de un año NO bisiesto a un calendario lunar Indique el día: 29 Indique el mes: febrero El día 29 de febrero no existe. CALENDARIO LUNAR Este programa convierte una fecha de un año NO bisiesto a un calendario lunar Indique el día: 1 Indique el mes: febrero El día 1 de febrero es el día 32 del año. Habrán pasado 1.08 meses lunares. Solución\nEjercicio 3 Un cine tiene una sala rectangular con 5 filas y 4 columnas de butacas. Escribir un programa que permita gestionar la reserva de butacas con los siguientes requisitos:\nEl programa mostrará una matriz con el carácter X para las butacas libres y O para las ocupadas y preguntará por la fila y columna de la butaca a reservar. Si el usuario introduce una fila o una columna no válidas, se le avisará y se le volverá a preguntar. Si la fila y la columna introducida corresponde a una butaca ocupada, se avisará al usuario y se le volverá a preguntar. Si la butaca está libre se reservará y se volverá a preguntar al usuario si quiere hacer más reservas. El programa terminará cuando el usuario no quiera hacer más reservas. Ejemplo:\nRESERVA DE BUCATAS XXXXX XXXXX XXXXX XXXXX Introduce la fila que quieres: 2 Introduce la columna que quieres: 3 Reserva realizada. ¿Desea realizar otra reserva? (S/N): S RESERVA DE BUCATAS XXXXX XXOXX XXXXX XXXXX Introduce la fila que quieres: 5 Introduce la columna que quieres: 1 La fila y columna elegidas no son válidas. ¿Desea realizar otra reserva? (S/N): S RESERVA DE BUCATAS XXXXX XXOXX XXXXX XXXXX Introduce la fila que quieres: 2 Introduce la columna que quieres: 3 La butaca elegida está ocupada. ¿Desea realizar otra reserva? (S/N): S RESERVA DE BUCATAS XXXXX XXOXX XXXXX XXXXX Introduce la fila que quieres: 1 Introduce la columna que quieres: 2 Reserva realizada. ¿Desea realizar otra reserva? (S/N): N ¡Gracias! Solución\n","date":1648080000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1648592530,"objectID":"54dd80296eb130c30ab85849fc26f8b8","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-03-24/","publishdate":"2022-03-24T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2022-03-24/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 24 de marzo de 2022\nEjercicio 1 Escriba un programa que permita practicar una variante simplificada de la prueba de cálculo mental La calculadora humana del concurso televisivo Saber y ganar.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2022-03-24","type":"book"},{"authors":null,"categories":["Estadística","Epidemiología"],"content":"Debido a la epidemia provocada por el coronavirus, la Epidemiología se ha convertido en una de las ramas de la medicina que más interés despiertan.\nEn estos tiempos de pandemia un montón de términos técnicos de la Epidemiología se han convertido en lugares comunes gracias a los medios de comunicación. Sin embargo, muchos de estos términos se utilizan de manera errónea, incluso por los propios medios de comunicación, y generan confusión para la población no experta.\nPor ello, y con motivo de la Semana de la Ciencia y la Innovación de Madrid 2021, he preparado un tutorial para explicar al público en general los principales conceptos epidemiológicos usados en el control de enfermedades como la COVID e ilustrar su uso con ejemplos de aplicación.\nPodéis acceder a él en el siguiente enlace: Tutorial de Epidemiología\n","date":1636243200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1636487321,"objectID":"bccd8435bdd0e0007e22b7c6bd3b5a11","permalink":"/post/epidemiologia-tiempos-pandemias/","publishdate":"2021-11-07T00:00:00Z","relpermalink":"/post/epidemiologia-tiempos-pandemias/","section":"post","summary":"Debido a la epidemia provocada por el coronavirus, la Epidemiología se ha convertido en una de las ramas de la medicina que más interés despiertan.\nEn estos tiempos de pandemia un montón de términos técnicos de la Epidemiología se han convertido en lugares comunes gracias a los medios de comunicación.","tags":["Tutorial","Ejemplos"],"title":"Epidemiología para tiempos de pandemia","type":"post"},{"authors":null,"categories":["R"],"content":" Acceso a la aplicación Índice Acceso a la aplicación ¿Qué es Rúbricas? ¿Cómo citar Rúbricas? ¿Qué es Rúbricas? Rúbricas es una aplicación web basada en R y Shiny para la evaluación mediante rúbricas.\nLa aplicación permite:\nGenerar la rúbrica correspondiente a un examen o prueba de evaluación. Cargar la lista de alumnos a partir de un fichero csv y generar una plantilla de corrección. Cargar las correcciones desde la plantilla de corrección. Generar la lista de notas de los alumnos. Generar un resumen descriptivo de la distribución de notas. Generar un informe personalizado con la corrección de cada alumno. En el siguiente vídeo se puede ver una presentación más detallada de esta aplicación:\n¿Cómo citar Rúbricas? Anemone, Gloria., Sánchez-Alberca, Alfredo. (2021). Rúbricas (version 1.0) [software]. Obtenido de: https://aprendeconalf.es/es/proyecto/rubricas.\n","date":1630454400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1634551798,"objectID":"89fa3951a85d7c264149d84e1dd86e0a","permalink":"/proyecto/rubricas/","publishdate":"2021-09-01T00:00:00Z","relpermalink":"/proyecto/rubricas/","section":"proyecto","summary":"Aplicación web para la evaluación mediante rúbricas.","tags":["Rúbricas","Software","Shiny"],"title":"Rúbricas","type":"project"},{"authors":null,"categories":["Estadística","R"],"content":"Acabo de publicar una guía básica con los principales tipos de estudios estadísticos y ejemplos realizados con el programa de análisis de datos R.\nUna de las preguntas más recurrentes de suelen hacerme mis compañeros cuando están realizando un estudio de investigación es ¿qué tipo de estudio estadístico tengo que aplicar?. Con esta guía pretendo ayudar a encontrar la respuesta a todos aquellos que se hagan esta pregunta.\nEn esta guía no se abordan todos los tipos de estudios estadísticos que existen, pero si lo más habituales, dependiendo del objetivo perseguido, el número de variables que intervienen y el tipo de estas variables. Para facilitar la comprensión de cada tipo de estudio se muestra un ejemplo sencillo implementado con R.\nEspero que os sea útil.\n","date":1626825600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1646989826,"objectID":"cab2b81e97fa88cd95bc2328bd769903","permalink":"/post/estudios-estadisticos-r/","publishdate":"2021-07-21T00:00:00Z","relpermalink":"/post/estudios-estadisticos-r/","section":"post","summary":"Acabo de publicar una guía básica con los principales tipos de estudios estadísticos y ejemplos realizados con el programa de análisis de datos R.\n","tags":["Ejemplos"],"title":"Tipos de estudios estadísticos","type":"post"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 5 de junio de 2021\nEjercicio 1 A veces, al tratar con tuplas, podemos tener un problema en el que necesitamos extraer solo $k$ elementos extremos, es decir, los $k$ máximos y mínimos. Este problema puede tener aplicaciones en campos como el desarrollo web y la ciencia de datos. Desarrollar un programa que dada una tupla y un número $k$ devuelva otra tupla con los $k$ elementos máximos y mínimos.\nEjemplo:\nLa tupla original es: (5, 20, 3, 7, 6, 8) La tupla con los k = 2 máximos y mínimos es: (3, 5, 8, 20) Solución\nEjercicio 2 Construir un programa que evalúe operaciones aritméticas sencillas (sumas, restas, productos, cocientes y potencias) introducidas por el usuario. El programa preguntará por la operación a realizar y el usuario tecleará por pantalla la operación con el siguiente formato:\noperando1 operador operando2\nDespués el programa debe mostrar por pantalla el resultado de la operación con el siguiente formato:\noperando1 operador operando2 = resultado\nEl programa debe preguntar al usuario hasta que este introduzca la palabra “salir”. También mostrará un mensaje de error si el usuario introduce un número de valores distinto de 3 y si introduce un operador no válido.\nEjemplo:\nIntroduce la operación con el formato operando1 operador operando2: 2+3 Entrada no válida. Debes introducir exactamente tres valores separados por espacio. Introduce la operación con el formato operando1 operador operando2: 2 + 3 2 + 3 = 5.0 Introduce la operación con el formato operando1 operador operando2: 4 ^ 2 Operación no válida. Introduce la operación con el formato operando1 operador operando2: 4 ** 2 4 ** 2 = 16.0 Introduce la operación con el formato operando1 operador operando2: salir Solución\nEjercicio 3 El siguiente diccionario contiene pares formados por números de teléfonos y propietarios:\n{'919654665':'Pedro', '917489210': 'Luis', '623543213':'Carmen', '674833721':'Luis'}\nCrear un programa que construya un diccionario con la misma información, pero tomando como claves los nombres de los usuarios y como valores los teléfonos. Como un usuario puede tener dos teléfonos, uno móvil y uno fijo, los teléfonos deben agruparse a su vez en un diccionario cuyos elementos tendrán clave “movil” o “fijo” según el teléfono empiece por 6 o no. Por ejemplo, a partir del diccionario anterior debe construirse el siguiente diccionario:\n{'Pedro': {'fijo': '919654665'}, 'Luis': {'fijo': '917489210', 'movil': '674833721'}, 'Carmen': {'movil': '623543213'}}\nDespués el programa debe recorrer este diccionario y mostrar por pantalla los teléfonos del listín en orden alfabético.\nEjemplo:\nTeléfonos de Carmen movil : 623543213 Teléfonos de Luis fijo : 917489210 movil : 674833721 Teléfonos de Pedro fijo : 919654665 Solución\nEjercicio 4 Construir un programa para realizar las siguientes operaciones con dos números proporcionados por el usuario:\nComprobar si uno de los dos números es divisible por el otro. Un número es divisible por otro cuando el resto de la división entera es cero. Calcular su Máximo Común Divisor. Calcular su Mínimo Común Múltiplo. Cada una de las operaciones deben estar separadas en funciones que tengan como parámetros los 2 números y devuelvan el resultado adecuado.\nSolución\nEjercicio 5 El fichero cercanias.csv contiene información sobre las líneas de tren de cercanías de Madrid: id (identificador del tren), línea (nombre de la línea), estaciones (estaciones de origen y destino separadas por un guion). Se pide:\nConstruir una función que lea el fichero cercanias.csv y cree un diccionario donde la clave de cada par sea el identificador de la línea y el valor asociado una lista de dos elementos con la estación de origen y la estación de destino como el que se muestra a continuación a modo de ejemplo: {'10T0001C1': ['Principe Pio', 'Aeropuerto'], '10T0002C1': ['Aeropuerto', 'Principe Pio'], ...}\nLa función debe recibir el nombre del fichero como parámetro. 2. Construir otra función que guarde la información del diccionario obtenido en el apartado anterior en un fichero csv separado por punto y coma con 3 columnas con los encabezados id, origen y destino. La función debe recibir como parámetros el diccionario con los trenes y el nombre del fichero resultante.\nSolución\nEjercicio 6 Construir un programa que realize las siguientes operaciones con la librería Pandas:\nCrear un DataFrame con las siguientes columnas:\nNombre: Juan, Marta, Pedro, Jorge, Blas, Lisa, Antonio Edad: 23,78,22,19,45,33,20 Género: M, F, M, M, M, F, M Provincia\u0026rsquo;: Burgos, Madrid, Toledo, Burgos, Madrid, Toledo, Madrid Hijos: 2,0,0,3,2,1,4 Mascotas: 5,1,0,5,2,2,3 Mostrar la información básica del DataFrame.\nObtener los principales estadísticos de las columnas numéricas.\nObtener los porcentajes de hombres y mujeres por provincias.\nRepresentar, mediante un diagrama de dispersión, en número de hijos frente al número de mascotas para las personas de Madrid.\nRealizar la siguiente gráfica. Solución\n","date":1622851200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1624868934,"objectID":"43ce5638a55325232929584631dd4fb3","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-06-05/","publishdate":"2021-06-05T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-06-05/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 5 de junio de 2021\nEjercicio 1 A veces, al tratar con tuplas, podemos tener un problema en el que necesitamos extraer solo $k$ elementos extremos, es decir, los $k$ máximos y mínimos.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2021-06-05","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 26 de mayo de 2021\nEjercicio 1 Dadas dos listas de números del mismo tamaño x e y, construir las siguientes funciones:\nUna función para calcular la media de una lista de números. Una función para calcular la varianza de una lista de números. Una función para calcular la covarianza de dos listas de números. Una función para calcular los coeficientes de la recta de regresión de y sobre x. Una función que devuelva el diagrama de dispersión y la recta de regresión como la que se muestra en el siguiente ejemplo: x = [1, 2, 3, 4, 5, 6] y = [20, 18, 12, 10, 9, 9] Usar las siguientes fórmulas para el cálculo de los estadísticos: $\\bar x = \\frac{\\sum x_i}{n}$, $s^2 = \\frac{\\sum x_i^2}{n}-\\bar{x}^2$, $s_{xy} = \\frac{\\sum x_iy_j}{n} - \\bar{x}\\bar{y}$, $b = \\frac{s_{xy}}{s_x^2}$ y $a = \\bar{y} - b * \\bar{x}$.\nSolución\nEjercicio 2 Escribir una función que, dado un número x, genere una matriz cuadrada (x*x elementos) con el resultado de sus tablas de multiplicar desde 0 hasta x. El resultado debe guardarse en un fichero llamado tabla-X.txt donde X es el número introducido por el usuario.\nEscribir otra función que, dado un número x, acceda al fichero de la tabla correspondiente y muestre la tabla por pantalla. En caso de que la tabla no exista deberá controlar la excepción para mostrar un mensaje de aviso al usuario.\nEjemplo:\n\u0026gt;\u0026gt;\u0026gt; Introduce un número entre 1 y 10: 5 \u0026gt;\u0026gt;\u0026gt; Contenido del fichero matriz-5.txt 0 0 0 0 0 0 0 1 2 3 4 5 0 2 4 6 8 10 0 3 6 9 12 15 0 4 8 12 16 20 0 5 10 15 20 25 Solución\nEjercicio 3 Crear un programa utilizando la librería Pandas y Matplotlib que realice lo siguiente:\nCrear el siguiente DataFrame indexado: calorias tiempo L 420 60 M 380 40 X 390 75 J 490 55 V 300 45 Calcular la media, mediana y desviación típica de ambas columnas. Añadir otra columna booleana al DataFrame para ver si se ha cumplido el reto de quemar más de 400 calorías por hora. La nueva columna debe generarse aplicando una fórmula a las otras columnas. El DataFrame resultante debe ser el siguiente: calorias tiempo reto L 420 60 True M 380 40 True X 390 75 False J 490 55 True V 300 45 False Filtrar el DataFrame y devolver otro DataFrame con las filas pares que cumplan que el número de calorías es mayor de 400. Crear a partir del DataFrame una serie con los porcentajes de días que se ha conseguido el reto y los que no. Crear un gráfico como el de más abajo que muestre la progresión de las calorías y tiempo durante la semana. Solución\n","date":1621987200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1622064817,"objectID":"855d08b4eb7f9918bc3ef530955c8af3","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-05-26/","publishdate":"2021-05-26T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-05-26/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 26 de mayo de 2021\nEjercicio 1 Dadas dos listas de números del mismo tamaño x e y, construir las siguientes funciones:\nUna función para calcular la media de una lista de números.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2021-05-26","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 25 de marzo de 2021\nEjercicio 1 El cálculo del IRPF en la Hacienda española se define como progresivo. Hacienda divide los ingresos (tu renta) en tramos y asigna un porcentaje a pagar en cada uno de ellos. Estos tramos son los siguientes:\nTramos IRPF 2021 Tipos a aplicar Desde 0 hasta 12.450€ 19% De 12.450€ a 20.200€ 24% De 20.200€ a 35.200€ 30% De 35.200€ en adelante 37% Por ejemplo, para una persona con una renta de 65.000€, el cálculo del impuesto se haría así:\nPrimer tramo IRPF: se paga el 19% de 12.450 euros, es decir, 2.365,5 euros Segundo tramo IRPF: se paga el 24% de 7.750 euros (la diferencia entre el primer y segundo tramo), es decir, 1.860 euros. Tercer tramo IRPF: se paga el 30% de 15.000 euros (la diferencia entre el segundo y tercer tramo), es decir, 4.500 euros. Cuarto tramo IRPF: se paga el 37% de 29.800 euros (la diferencia entre su renta y el límite del tercer tramo), es decir, 11.026 euros. La suma de las anteriores cantidades es el total a pagar: 19.751,5 euros.\nEscribir un programa que pregunte por la renta del usuario y muestre por pantalla el IRPF que debe pagar a Hacienda.\nSolución\nEjercicio 2 Juan juega siempre la misma combinación a la bonoloto: 7, 13, 21, 37, 46, 49.\nConstruir un programa que pregunte al usuario por la combinación ganadora y diga si Juan ha ganado o, en caso contrario, muestre por pantalla la lista de los números que no ha acertado. El programa debe usar listas.\nNota: El juego de la bonoloto consiste en acertar una combinación de 6 números entre 1 y 49.\nSolución\nEjercicio 3 Los productos en oferta de una tienda de informática se guardan una cadena como la de más abajo, donde cada línea (separadas por el carácter de cambio de línea ‘\\n’) contiene el nombre del producto, el número de unidades en stock, el precio (en €) y el descuento que tiene (en porcentaje), separados por punto y coma.\n'disco duro 500Gb;200;25;15\\nmemoria ram 16Gb;500;30;20\\nratón inalámbrico;800;12;10\\ntarjeta wifi;150;20;12' Construir un programa que genere, a partir de la cadena anterior, un diccionario como el de más abajo, donde cada par corresponda un producto, siendo la clave el nombre del producto y el valor una lista con el resto de la información del producto.\n{‘disco duro 500Gb’: [‘200’, ‘25’, ‘15’], ‘memoria ram 16Gb’: [‘500’, ‘30’, ‘20’], ‘ratón inalámbrico’: [‘800’, ‘12’, ‘10’], ‘tarjeta wifi’: [‘150’, ‘20’, ‘12’]} Después el programa debe recorrer el diccionario y mostrar por pantalla un listado con los nombres de todos los productos en oferta y su precio final tras aplicar el descuento.\nSolución\n","date":1616630400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1616708694,"objectID":"0ccbf715dc64a6b066d334d8673072a7","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-03-25/","publishdate":"2021-03-25T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2021-03-25/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 25 de marzo de 2021\nEjercicio 1 El cálculo del IRPF en la Hacienda española se define como progresivo. Hacienda divide los ingresos (tu renta) en tramos y asigna un porcentaje a pagar en cada uno de ellos.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2021-03-25","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 18 de enero de 2021\nEjercicio 1 Un medicamento se administra por vía intravenosa a una velocidad de 15 mg/hora. Al mismo tiempo, el cuerpo metaboliza el medicamento a una velocidad del 80% de la cantidad presente en el cuerpo por hora.\nSi el medicamento se administra de forma indefinida y suponiendo que al principio no había nada de medicamento en el cuerpo, ¿cuál será la máxima cantidad de medicamento que habrá en el cuerpo?\nSi el medicamento deja de administrarse después de haber administrado 150 mg, ¿cuánto tiempo tiene que pasar desde ese momento hasta que la cantidad de medicamento en el cuerpo sea 10 mg?\nSolución Sea $x(t)$ la cantidad de medicamento en el cuerpo en el instante $t$.\nEcuación diferencial: $x\u0026rsquo;=15-0.8x$. Condición inicial $x(0)=0$. Solución particular: $x(t)=18.75-18.75e^{-0.8t}$ y la cantidad máxima de medicamento en el cuerpo será 18.75 mg.\nEcuación diferencial: $x\u0026rsquo;=-0.8x$. Condición inicial $x(0)=18.74$. Solución particular: $x(t)=18.74e^{-0.8t}$ y el tiempo que tarda en haber una cantidad de 10 mg en el cuerpo es $0.7851$ horas.\nResolución Ejercicio 2 La función $T(x,y)=\\ln(3xy+2x^2-y)$ da la temperatura de la superficie de una montaña en la latitud $x$ y longitud $y$. Unos montañeros están perdidos en la posición $(1,2)$ y corren el riesgo de morir congelados.\n¿En qué dirección deben moverse para evitar el riesgo de congelación lo más rápidamente posible?\nSi se mueven en una dirección equivocada de manera que la longitud decrece la mitad de lo que aumenta la latitud, ¿aumentará o disminuirá el riesgo de hipotermia?\n¿En qué dirección deben moverse para que la temperatura permanezca constante?\nSolución $\\nabla T(1,2)=\\frac{1}{3}(5,1)$.\nSea $\\mathbf{u}$ el vector $(1,-1/2)$, entonces $T\u0026rsquo;_{\\mathbf{u}}(1,2) = \\frac{3}{\\sqrt{5}}$ ºC.\nSiguiendo la dirección del vector $(1,-5)$.\nResolución Ejercicio 3 Una pelota de playa tiene un volumen de 50 dm$^3$ en el momento que empieza a introducirse aire a razón de 2 dm$^3$/min.\n¿A qué velocidad cambiará el radio?\n¿Aproximadamente cuándo la superficie de la pelota se habrá duplicado?\nNota: El volumen de una esfera es $V(r)=\\frac{4}{3}\\pi r^3$ y la superficie $S(r)=4\\pi r^2$.\nSolución $\\dfrac{dr}{dt}=0.0305$ dm/min.\nUsando la aproximación lineal del diferencial $dt = S\u0026rsquo;/dS=37.5013$ minutos aproximadamente.\nResolución ","date":1610928000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612727901,"objectID":"85a4127c1dcfee44205f324399282863","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2021-01-18/","publishdate":"2021-01-18T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2021-01-18/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 18 de enero de 2021\nEjercicio 1 Un medicamento se administra por vía intravenosa a una velocidad de 15 mg/hora. Al mismo tiempo, el cuerpo metaboliza el medicamento a una velocidad del 80% de la cantidad presente en el cuerpo por hora.","tags":["Examen"],"title":"Examen de Farmacia 2021-01-18","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 18 de enero de 2021\nEjercicio 1 La siguiente tabla muestra las diferencias de notas entre las notas de bachillerato y las del examen de selectividad en los centros públicos ($X$) y privados ($Y$) de una región:\n$$ \\begin{array}{lrrrrrrrrr} \\hline \\mbox{Centros públicos} \u0026amp; -1.2 \u0026amp; -0.7 \u0026amp; -0.4 \u0026amp; -0.9 \u0026amp; -1.6 \u0026amp; 0.5 \u0026amp; 0.2 \u0026amp; -1.8 \u0026amp; 0.8\\newline\n\\mbox{Centros privados} \u0026amp; -2.1 \u0026amp; -0.5 \u0026amp; -0.7 \u0026amp; -1.9 \u0026amp; 0.2 \u0026amp; -2.8 \u0026amp; -1\\newline\n\\hline \\end{array} $$\n¿Cuál de los siguientes diagramas de cajas corresponde a cada variable? Comparar la dispersión central de las dos variables según los diagramas de caja. ¿En qué variable es menor la mediana de las diferencias de notas? ¿En qué centros es más representativa la media de la diferencia de notas, en los públicos o en los privados?\n¿En qué centros la distribución de la diferencia de notas es más simétrica?\n¿En qué centros la distribución de la diferencia de notas es más apuntada?\n¿Qué diferencia es relativamente menor, $-0.5$ puntos en un centro público o $-1$ en un centro privado?\nUsar las siguientes sumas para los cálculos:\nPublic: $\\sum x_i=-5.1$, $\\sum x_i^2=9.63$, $\\sum (x_i-\\bar x)^3=0.95$ y $\\sum (x_i-\\bar x)^4=8.76$. Private: $\\sum y_i=-8.8$, $\\sum y_i^2=17.64$, $\\sum (y_i-\\bar y)^3=-0.82$ y $\\sum (y_i-\\bar y)^4=11.28$.\nSolución El diagrama de cajas 1 corresponde a los centros privados y el 2 a los centros públicos. La dispersión central (anchura de las cajas) es similar en ambas variables. La mediana es menor en los centros privados.\nCentros públicos: $\\bar x=-0.5667$ , $s^2=0.7489$ , $s=0.8654$ y $cv=1.5271$. Centros privados: $\\bar y=-1.2571$ , $s^2=0.9396$ , $s=0.9693$ y $cv=0.7711$. Por tanto, la media de las diferencias de notas es más representativa en los centros privados.\n$g_{1x}=0.1626$ y $g_{1y}=-0.1285$. Por tanto, la distribución de las diferencias de notas en los centros privados es más simétrica ya que su coeficiente de asimetría está más cerca de 0.\n$g_{2x}=-1.2651$ y $g_{2y}=-1.1748$. Así pues, la distribución de las diferencias de notas en los centros privados es más apuntada ya que su coeficiente de apuntamiento es mayor.\nCentro público: $z(-0.5)=0.077$. Centro privado: $z(-1)=0.2653$. Por tanto, una diferencia de notas de -0.5 puntos en centros públicos es relativamente menor que una diferencia de -1 puntos en centros privados.\nEjercicio 2 Un auditor ha estudiado la relación entre el salario y el número de ausencias de los celadores de un hospital. La tabla siguiente muestra los salarios en miles de euros ($X$) y el número medio de ausencias anuales con esos salarios ($Y$).\n$$ \\begin{array}{lrrrrrrrrr} \\hline \\mbox{Salario} \u0026amp; 20.0 \u0026amp; 22.5 \u0026amp; 25 \u0026amp; 27.5 \u0026amp; 30.0 \u0026amp; 32.5 \u0026amp; 35.0 \u0026amp; 37.5 \u0026amp; 40.0 \\newline \\mbox{Ausencias} \u0026amp; 2.3 \u0026amp; 2.0 \u0026amp; 2 \u0026amp; 1.8 \u0026amp; 2.2 \u0026amp; 1.5 \u0026amp; 1.2 \u0026amp; 1.3 \u0026amp; 0.6 \\newline \\hline \\end{array} $$\nCalcular la recta de regresión que explique las ausencias en función del salario.\n¿Cuál es el número de ausencias esperado de un celador con un salario de 29000€? ¿Es esta predicción fiable?\n¿Cuánto aumentará o disminuirá el número de ausencias por cada incremento de 1000€ en el salario?\nUsar las siguientes sumas para los cálculos:\n$\\sum x_i=270$ $10^3$€, $\\sum y_i=14.9$ ausencias,\n$\\sum x_i^2=8475$ ($10^3$€)$^2$, $\\sum y_i^2=27.11$ ausencias$^2$,\n$\\sum x_iy_j=420$ $10^3$€ ausencias.\nSolución $\\bar x=30$ $10^3$€, $s_x^2=41.6667$ ($10^3$€)$^2$,\n$\\bar y=1.6556$ ausencias, $s_y^2=0.2714$ ausencias$^2$,\n$s_{xy}=-3$ $10^3$€ ausencias\nRecta de regresión de las ausencias sobre el salario: $y=3.8156-0.072x$.\n$y(29) = 1.7276$ ausencias\n$r^2 = 0.796$, de modo que el modelo lineal se ajusta bien ya que el coeficiente de determinación no está lejos de 1, pero el tamaño muestral es demasiado pequeño para que las predicciones sean fiables.\nEl número de ausencias disminuirá 0.072 por cada incremento de 1000€ en el salario.\nEjercicio 3 En un estudio de regresión se sabe que la recta de regresión de $Y$ sobre $X$ es $y+2x-10=0$ y la recta de regresión de $X$ sobre $Y$ es $y+3x-14=0$.\nCalcular las medias de $X$ e $Y$.\nCalcular el coeficiente de correlación lineal e interpretarlo.\nSolución $\\bar x=4$ y $\\bar y=2$.\n$r=-0.8165$. El coeficiente de correlación lineal está cerca de -1 lo que significa que existe una relación lineal fuerte e inversa entre $X$ e $Y$.\nEjercicio 4 Un test para diagnosticar el cáncer de próstata produce un 1% de falsos positivos y un 0.2% de falsos negativos. Se sabe también que una población 1 cada 400 hombres sufre este tipo de cáncer.\nCalcular la sensibilidad y la especificidad del test.\nSi un hombre tiene un resultado positivo en el test, ¿cuál es la probabilidad de que tenga cáncer de próstata?\nCalcular e interpretar el valor negativo predictivo del test.\n¿Es este teste mejor para detectar o para descartar el cáncer de próstata?\nPara ver si existe asociación entre el cáncer de próstata y la práctica del deporte, se tomó una muestra de 1000 hombres, de los cuales 700 practicaban deporte, y se observó que había 2 hombres con cáncer de próstata en el grupo de los que practicaban deporte y 3 hombres con cáncer de próstata en el grupo de los que no practicaban deporte. Calcular el riesgo relativo y el odds ratio de sufrir cáncer de próstata cuando se practica deporte.\nSolución Sea $C$ el suceso correspondiente a sufrir cáncer de próstata y $+$ y $-$ los sucesos consistentes en tener un resultado positivo y negativo en el test respectivamente.\nLa sensibilidad es $P(+|D) = 0.2$ y la especificidad $P(-|\\overline D) = 0.99$.\nEl valor predictivo positivo es $P(D|+) = 0.0476$.\nEl valor predictivo negativo es $P(\\overline D|-) = 0.998$.\nComo el valor predictivo negativo es mayor que el valor predictivo positivo, el test es mejor para descartar la enfermedad que para confirmarla. De hecho el test no permite detectar la enfermedad ya que el valor predictivo positivo es menor que 0.5.\n$RR(D)=0.2857$ y $OR(D)=0.2837$. Por tanto, existe una asociación entre la práctica del deporte y el cáncer de próstata, de manera que la probabilidad de sufrir cáncer de próstata cuando un hombre practica deporte es casi un cuarto de la probabilidad de sufrirlo cuando no se practica deporte, y con el odds ocurre algo similar.\nResolución Ejercicio 5 La probabilidad de que un hijo de una madre con el gen del daltonismo y un padre sin el gen del daltonismo sea un varón daltónico es $0.25$.\nSi esta pareja tiene 5 hijos, ¿cuál es la probabilidad de que a lo sumo 2 sean varones daltónicos?\nSi esta pareja tiene 5 hijos, y el sexo de los hijos es equiprobable, ¿cuál es la probabilidad de que 3 o más sean mujeres?\nSi se toma una muestra aleatoria de 10000 hombres de una población en la que hay un varón daltónico por cada 5000 hombres, ¿cuál es la probabilidad de que haya más de 3 varones daltónicos?\nSolución Sea $X$ el número de hijos varones daltónicos en una muestra de 5 hijos de la pareja. Entonces $X\\sim B(5, 0.25)$ y $P(X\\leq 2)=0.8965$.\nSea $Y$ el número de mujeres en una muestra de 5 hijos de la pareja. Entonces $Y\\sim B(5, 0.5)$ y $P(Y\\geq 3)=0.5$.\nSea $Z$ el número de varones daltónicos en una muestra de 1000 hombres de la población. Entonces $Z\\sim B(10000, 2e-04)\\approx P(2)$ y $P(Z\u0026gt;3)=0.1429$.\nResolución Ejercicio 6 La capacidad craneal de los primates sigue una distribución normal de media 1200 cm$^3$ y desviación típica 140 cm$^3$.\nCalcular la probabilidad de que la capacidad craneal de un primate sea mayor de 1400 cm$^3$.\nCalcular la probabilidad de que la capacidad craneal de un primate sea exáctamente 1400 cm$^3$.\nCalcular la capacidad craneal por encima de la cual estarán el 20% of primates.\nCalcular el rango intercuartílico de la capacidad craneal de los primates e interpretarlo.\nSolución Sea $X$ la capacidad craneal de los primates. Entonces $X\\sim N(1200,140)$.\n$P(X\u0026gt;1400) = 0.0766$.\n$P(X=1400) = 0$.\n$P_{80} = 1317.827$ cm$^3$.\n$Q_1 = 1105.5714$ cm$^3$, $Q_3 = 1294.4286$ cm$^3$ y $IQR = 188.8571$ cm$^3$. Por tanto, el 50% central de los datos está concentrado en un intervalo de amplitud $188.8571$ cm$^3$, que es poca dispersión.\nResolución ","date":1610928000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612657121,"objectID":"d99a3bb71010f3436d6222cbc5b5416c","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2021-01-18/","publishdate":"2021-01-18T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2021-01-18/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 18 de enero de 2021\nEjercicio 1 La siguiente tabla muestra las diferencias de notas entre las notas de bachillerato y las del examen de selectividad en los centros públicos ($X$) y privados ($Y$) de una región:","tags":["Examen"],"title":"Examen de Farmacia 2021-01-18","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Óptica"],"content":"Titulación: Grado en Óptica\nFecha: 13 de Noviembre de 2020\nEjercicio 1 En una muestra de familias se ha medido la estatura del padre ($X$), de la madre ($Y$) y de un hijo ($Z$) en centímetros, obteniendo los siguientes resultados:\n$$ \\begin{array}{ccc} \\mbox{Estatura padre} \u0026amp; \\mbox{Estatura madre} \u0026amp; \\mbox{Estatura hijo} \\newline \\hline 175 \u0026amp; 164 \u0026amp; 177 \\newline 182 \u0026amp; 175 \u0026amp; 180 \\newline 190 \u0026amp; 165 \u0026amp; 193 \\newline 165 \u0026amp; 160 \u0026amp; 172 \\newline 172 \u0026amp; 155 \u0026amp; 173 \\newline 183 \u0026amp; 172 \u0026amp; 188 \\newline 187 \u0026amp; 160 \u0026amp; 185 \\newline 174 \u0026amp; 151 \u0026amp; 177 \\newline 168 \u0026amp; 165 \u0026amp; 168 \\newline 178 \u0026amp; 163 \u0026amp; 182 \\newline \\hline \\end{array} $$\nSe pide:\n¿En qué grupo es más representativa la media, en el de padres o en el de madres?\n¿Hay alguna estatura atípica entre los hijos?\nSegún su forma, ¿puede provenir la muestra de madres de una distribución normal?\n¿Quién es más alto dentro de su grupo, una madre con una altura de 165 cm o un hijo con una altura de 178 cm?\n¿Cómo afectaría a la representatividad de las medias que las alturas se midiesen en metros en vez de en centímetros?\nUsar las siguientes sumas para los cálculos:\nEstatura padre: $\\sum x_i=1774$ cm, $\\sum x_i^2=315300$ cm$^2$, $\\sum (x_i-\\bar x)^3=210.48$ cm$^3$ y $\\sum (x_i-\\bar x)^4=67596.27$ cm$^4$.\nEstatura madre: $\\sum y_i=1630$ cm, $\\sum y_i^2=266150$ cm$^2$, $\\sum (y_i-\\bar y)^3=180$ cm$^3$ y $\\sum (y_i-\\bar y)^4=52324$ cm$^4$.\nEstatura hijo : $\\sum z_i=1795$ cm, $\\sum z_i^2=322737$ cm$^2$, $\\sum (z_i-\\bar z)^3=1008$ cm$^3$ y $\\sum (z_i-\\bar z)^4=61906.62$ cm$^4$.\nSolución Padres: $\\bar x=177.4$ cm, $s^2=59.24$ cm$^2$, $s=7.6968$ cm y $cv=0.0434$.\nMadres: $\\bar y=163$ cm, $s^2=46$ cm$^2$, $s=6.7823$ cm y $cv=0.0416$.\nLa estatura media es un poco más representativa en el grupo de las madres.\nLas vallas en la muestra de hijos son $f_1=155$ cm y $f_2=203$ cm por lo que no hay estaturas atípicas entre los hijos.\n$g_{1y}=0.0577$ y $g_{2y}=-0.5272$. Como el coeficiente de asimetría y el de apuntamiento están dentro del intervalo de -2 a 2, podemos asumir que la muestra de estaturas de madres proviene de una población normal.\nPuntuación típica madres: $z(165)=0.2949$.\nPuntuación típica hijos: $z(178)=-0.2052$.\nAsí pues, una madre de 165 cm es relativamente más alta que un hijo de 178 cm.\nLa representatividad de las medias no cambiaría ya que tanto las medias como las desviaciones típicas estarían divididas por 100.\nEjercicio 2 Uno de los parámetros que se suele utilizar para diagnosticar el glaucoma de ángulo abierto es la distancia mínima al borde de la abertura de la membrana de Bruch ($X$) de la retina, pero se sabe que esta medida depende de la edad del paciente ($Y$) en años y del área de la abertura de esta membrana por la que pasa el nervio óptico ($Z$). En un estudio se ha medido en 1000 pacientes estas variables obteniendo los siguientes resultados:\n$\\sum x_i=346337.03$ $\\mu$m, $\\sum y_i=47212.1$ años, $\\sum z_i=2002.384$ mm$^2$,\n$\\sum x_i^2=123828243.48$ $\\mu$m$^2$, $\\sum y_i^2=2601264.99$ años$^2$, $\\sum z_i^2=4175.89$ mm$^4$,\n$\\sum x_iy_j=15855138.59$ $\\mu$m$\\cdot$años, $\\sum x_iz_j=686623.65$ $\\mu$m$\\cdot$mm$^2$, $\\sum y_iz_j=94144.37$ años$\\cdot$mm$^2$.\nSe pide:\nCalcular las rectas de regresión de la distancia mínima al borde de la abertura de la membrana de Bruch sobre la edad, y de la distancia mínima al borde de la abertura de la membrana de Bruch sobre el área de la abertura de la membrana.\n¿Cuánto aumenta o disminuye la distancia mínima al borde de la abertura de la membrana de Bruch por cada año más del paciente?\n¿Qué porcentaje de la variabilidad de la distancia mínima al borde de la abertura de la membrana de Bruch explica cada uno de los modelos lineales anteriores?\nUtilizando el mejor de los modelos lineales anteriores predecir la distancia mínima al borde de la abertura de la membrana de Bruch de un paciente de 60 años con un área de la abertura de la membrana de 2 mm$^2$.\nSolución $\\bar x=346.337$ $\\mu$m, $s_x^2=3878.9051$ $\\mu$m$^2$,\n$\\bar y=47.2121$ años, $s_y^2=372.2826$ años$^2$,\n$\\bar z=2.0024$ mm$^2$, $s_z^2=0.1664$ mm$^4$,\n$s_{xy}=-496.1599$ $\\mu$m$\\cdot$años y $s_{xz}=-6.8761$ $\\mu$m$\\cdot$mm$^2$.\nRecta de regresión de $X$ sobre $Y$: $x=409.259 + -1.3328y$.\nRecta de regresión de $X$ sobre $Z$: $x=429.1056 + -41.335z$.\nLa distancia mínima al borde de la abertura de la membrana de Bruch disminuye $1.3328$ $\\mu$m por cada año más del paciente.\n$r^2_{xy}=0.1705$, de manera que la recta de regresión de $X$ sobre $Y$ explica el $17.05$% de la variabilidad de la distancia mínima al borde de la abertura de la membrana de Bruch, y $r^2_{xz}=0.0733$, de manera que la recta de regresión de $X$ sobre $Z$ explica el $7.33$% de la variabilidad de la distancia mínima al borde de la abertura de la membrana de Bruch.\n$x(60)=329.2939$ $\\mu$m.\n","date":1605225600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1605289162,"objectID":"a97093807c2c211192816cf071b6ba49","permalink":"/docencia/estadistica/examenes/optica/optica-2020-11-13/","publishdate":"2020-11-13T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/optica/optica-2020-11-13/","section":"docencia","summary":"Titulación: Grado en Óptica\nFecha: 13 de Noviembre de 2020\nEjercicio 1 En una muestra de familias se ha medido la estatura del padre ($X$), de la madre ($Y$) y de un hijo ($Z$) en centímetros, obteniendo los siguientes resultados:","tags":["Examen"],"title":"Examen de Óptica 2020-11-13","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 26 de octubre de 2020\nEjercicio 1 La siguiente tabla recoge el número de pacientes diarios que ingresaron en un hospital durante el mes de septiembre.\n$$ \\begin{array}{cr} \\mbox{Pacientes} \u0026amp; \\mbox{Frecuencia} \\newline \\hline (10,14] \u0026amp; 6 \\newline (14,18] \u0026amp; 10 \\newline (18,22] \u0026amp; 7 \\newline (22,26] \u0026amp; 6 \\newline (26,30] \u0026amp; 1 \\newline \\hline \\end{array}$$\nSe pide:\nEstudiar la dispersión del 50% de los datos centrales.\nCalcular la media y estudiar la dispersión con respecto a ella.\nEstudiar la normalidad de los datos.\nSe sabe que en mismo hospital durante el mes de abril la media fue 35 pacientes y la varianza 40 pacientes$^2$. ¿En qué mes hubo más variabilidad relativa?\n¿Qué número de ingresos es relativamente mayor, 20 ingresos en septiembre o 40 en abril?\nUsar las siguientes sumas para los cálculos:\n$\\sum x_in_i=544$ pacientes, $\\sum x_i^2n_i=10464$ pacientes$^2$, $\\sum (x_i-\\bar x)^3n_i=736.14$ pacientes$^3$ y $\\sum (x_i-\\bar x)^4n_i = 25367.44$ pacientes$^4$.\nSolución $Q_1=16$ pacientes, $Q_3=20$ pacientes y $RI=4$ pacientes. Por tanto, la dispersión central es pequeña.\n$\\bar x=18.1333$ pacientes, $s^2=19.9822$ pacientes$^2$, $s=4.4701$ pacientes y $cv=0.2465$. Por tanto, la dispersión con respecto a la media es pequeña y la media representa bien.\n$g_1=0.2747$ y $g_2=-0.2346$. Como los coeficientes de asimetría y apuntamiento están entre -2 y 2, podemos asumir que la muestra proviene de una población normal.\nSea $Y$ el número de pacientes diarios hospitalizados durante el mes de abril. Entonces, $cv_y=0.8779$. Como el coeficiente de variación del mes de abril es mayor que el de septiembre, la dispersión relativa es mayor en abril.\nSeptiembre: $z(20)=-2.7143$.\nAbril: $z(40)=-83.9682$.\nAsí pues, 40 pacientes hospitalizados en abril es relativamente mayor que 20 pacientes hospitalizados en septiembre ya que su puntuación típica es mayor.\nEjercicio 2 El siguiente diagrama muestra la distribución de notas en tres asignaturas distintas.\n¿Qué asignatura es más difícil?\n¿En qué asignatura hay más variabilidad central de los datos?\n¿En qué asignaturas hay datos atípicos?\n¿Qué asignatura tiene una distribución más asimétrica?\nSolución La asignatura $Y$ ya que sus puntuaciones son menores (la caja y los bigotes están más desplazados hacia la izquierda).\nLa asignatura $X$ porque la anchura de la caja es mayor.\nLa asignatura $Z$ porque hay una nota que está fuera de los bigotes.\nLa asignatura $Z$ porque la distancia desde el primer cuartil hasta la mediana (lado izquierdo de la caja) es mayor que la distancia desde la mediana al tercer cuartil (lado derecho de la caja).\nEjercicio 3 Se quiere estudiar si la estatura de los hijos depende de la estatura de los padres y para ello se ha tomado una muestra de 10 familias con un hijo mayor de 20 años y se ha medido la estatura del padre ($X$), de la madre ($Y$) y del hijo ($Z$) en centímetros, obteniendo los siguientes resultados:\n$\\sum x_i=1774$ cm, $\\sum y_i=1630$ cm, $\\sum z_i=1795$ cm,\n$\\sum x_i^2=315300$ cm$^2$, $\\sum y_i^2=266150$ cm$^2$, $\\sum z_i^2=322737$ cm$^2$,\n$\\sum x_iy_j=289364$ cm$^2$, $\\sum x_iz_j=318958$ cm$^2$, $\\sum y_iz_j=292757$ cm$^2$.\nSe pide:\n¿De qué estatura depende más linealmente la estatura del hijo, de la estatura del padre o de la madre?\nUtilizando el mejor modelo lineal, predecir la estatura de un hijo cuyo padre mide 181 cm y cuya madre mide 163 cm.\n¿Cuánto aumentará la estatura del hijo por cada centímetro que aumente la estatura del padre? ¿Y de la madre?\n¿Cómo afectaría a la fiabilidad de los modelos que las estaturas se hubiesen medido en pulgadas? (Una pulgada son 2.54 cm).\nSolución $\\bar x=177.4$ cm, $s_x^2=59.24$ cm$^2$,\n$\\bar y=163$ cm, $s_y^2=46$ cm$^2$,\n$\\bar z=179.5$ cm, $s_z^2=53.45$ cm$^2$,\n$s_{xz}=69.8861$ cm$^2$ y $s_{yz}=17.2$ cm$^2$.\n$r^2_{xz}=0.9273$ y $r^2_{yz}=0.1203$, de manera que la estatura de los hijos depende linealmente más de la estatura del padre ya que su coeficiente de determinación es mayor.\nRecta de regresión de $Z$ sobre $X$: $z=-29.7808 + 1.1797x$ y $z(181)=183.747$ cm.\nLa estatura del hijo aumentará $1.1797$ cm por cada cm que aumente la estatura del padre y $0.3739$ cm por cada cm que aumente la estatura de la madre.\nLa fiabilidad sería la misma, ya que al aplicar la misma transformación lineal a $X$ y $Z$, las varianzas quedan multiplicadas por el cuadrado de la pendiente y la covarianza también queda multiplicada por el cuadrado de la pendiente.\n","date":1603670400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1605344328,"objectID":"af7b50b04180defa0ffe7ce69c3a105d","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2020-10-26/","publishdate":"2020-10-26T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2020-10-26/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 26 de octubre de 2020\nEjercicio 1 La siguiente tabla recoge el número de pacientes diarios que ingresaron en un hospital durante el mes de septiembre.","tags":["Examen"],"title":"Examen de Farmacia 2020-10-26","type":"book"},{"authors":null,"categories":["R"],"content":"Índice ¿Qué es rkTeaching? Instalación Instalación en Windows Instalación en Mac Os Instalación en Linux Procedimientos estadísticos Funcionalidades ¿Cómo citar rkTeaching? ¿Qué es rkTeaching? rkTeaching es un paquete de R que proporciona un plugin para la interfaz gráfica RKWard añadiendo nuevos menús y cuadros de diálogo especialmente diseñados para la enseñanza de Estadística.\nEl paquete ha sido desarrollado y es mantenido por Alfredo Sánchez Alberca [email protected] del Departamento de Matemáticas de la Universidad San Pablo CEU de Madrid.\nSi descubre algún error o tiene cualquier sugerencia, por favor, envíeselo por correo al autor o bien indíquelo como un issue en Github.\nInstalación Instalación en Windows Para usuarios de plataformas Windows existe un programa de instalación que incluye R, RKWard y rkTeaching.\nDescarga la última versión (R versión 4.3, RKWard versión 0.8, rkTeaching versión 1.3.0)\nDescarga la versión anterior (R versión 3.6.2, RKWard versión 0.7.1b, rkTeaching versión 1.3.0)\nUna vez descargado el fichero, sólo hay que ejecutarlo para descomprimirlo. Al ejecutarse aparecerá un cuadro de diálogo donde preguntará por la unidad y el directorio de instalación y es importante indicar que se instale en la carpeta raíz del disco duro C, es decir en la dirección C:\\, tras esto se creará una carpeta RKWard y dentro de ella la carpeta bin donde se encuentra el fichero rkward.exe que hay que ejecutar para arrancar RKWard.\nEl siguiente vídeo muestra el proceso de instalación.\nInstalación en Mac Os Para instalar el software en plataformas Mac Os debe instalarse cada programa por separado con el siguiente orden:\nInstalar R. R puede descargarse desde la página https://cran.r-project.org/. Se recomienda instalar la versión 4.3 para MacOs. Dependiendo el procesador del ordenador debe seleccionarse la versión arm65 para ordenadores con un chip silicon (M1-3) o la versión x86 para ordenadores con chip de Intel.\nR versión 4.3 para MacOs con chip silicon (M1-3) R versión 4.3 para MacOs con chip de Intel (x86) Instalar RKWard. RKWard puede descargarse desde la página https://rkward.kde.org/. Debe seleccionarse la distribución correspondiente a Mac Os ( https://rkward.kde.org/RKWard_on_Mac.html) y seguir las instrucciones de instalación que allí se especifican. Es importante asegurase de tener una versión de Mac OS X 10.15 o superior, ya que RKWard no funciona con versiones anteriores.\nSi hay algún error en la instalación, consultar las posibles soluciones en ( http://rkward.sourceforge.net/wiki/RKWard_on_Mac#Troubleshooting)\nInstalar los paquetes de los que depende rkTeaching. Para instalar rkTeaching primero hay que instalar los paquetes de R de los que depende. Para ello, hay que ejecutar R en línea de comandos, o bien arrancar RKWard e ir a la solapa de la Consola de R (R console) e introducir los siguientes comandos:\ninstall.packages(c(\u0026quot;R2HTML\u0026quot;,\u0026quot;car\u0026quot;,\u0026quot;e1071\u0026quot;,\u0026quot;Hmisc\u0026quot;, \u0026quot;ez\u0026quot;, \u0026quot;multcomp\u0026quot;, \u0026quot;psych\u0026quot;, \u0026quot;probs\u0026quot;, \u0026quot;tidyverse\u0026quot;, \u0026quot;knitr\u0026quot;, \u0026quot;kableExtra\u0026quot;, \u0026quot;remotes\u0026quot;)) Instalar rkTeaching. La mejor forma de instalar rkTeaching desde este repositorio es utilizando el paquete de R remotes. Para ello hay que introducir los siguientes comandos en la consola de R:\nlibrary(remotes) install_github(\u0026quot;rkward-community/rk.Teaching\u0026quot;) El siguiente vídeo muestra el proceso de instalación.\nInstalación en MacOs mediante WMware Fusion Si el procedimiento anterior no funciona, es posible instalar una máquina virtual con RKward ya instalado mediante el software WMware Fusion. Para ello deben seguirse los siguientes pasos:\nInstalar WMware Fusion. WMware Fusion es un software de virtualización que permite instalar sistemas operativos Windows o Linux en un Mac. Descargar WMware Fusion y seguir las instrucciones de instalación.\nDescargar la máquina virtual con RKWard ya instalado.\nDescargar máquina virtual con RKWard versión 0.8 y rkTeaching 1.4 Descargar máquina virtual con RKWard versión 0.7 y rkTeaching 1.3 Arrancar WMware Fusion y abrir la máquina virtual descargada. La máquina virtual arrancará con RKWard ya instalado y listo para su uso.\nInstalación en Linux Para instalar el software en plataformas Linux debe instalarse cada programa por separado con el siguiente orden:\nInstalar R. R puede descargarse desde la página http://cran.es.r-project.org/. Debe seleccionarse la distribución correspondiente a Linux y seguir las instrucciones de instalación que allí se especifican. Es necesario que la versión de R sea la 3.0 o superior.\nEn sistemas Debian y Ubuntu, puede instalarse desde la línea de comandos con el comando:\nsudo apt-get install r-base Instalar RKWard. RKWard puede descargarse desde la página https://rkward.kde.org/. Debe seleccionarse la distribución correspondiente a Linux y seguir las instrucciones de instalación que allí se especifican.\nEn sistemas Debian y Ubuntu, puede instalarse desde la línea de comandos con el comando:\nsudo apt-get install rkward Es importante asegurarse de que la versión instalada es la 0.7.2 o superior.\nInstalar los paquetes de los que depende rkTeaching. Para instalar rkTeaching primero hay que instalar los paquetes de R de los que depende. Para ello, hay que ejecutar R en línea de comandos, o bien arrancar RKWard e ir a la solapa de la Consola de R (R console) e introducir los siguientes comandos:\ninstall.packages(c(\u0026quot;R2HTML\u0026quot;,\u0026quot;car\u0026quot;,\u0026quot;e1071\u0026quot;,\u0026quot;Hmisc\u0026quot;, \u0026quot;ez\u0026quot;, \u0026quot;multcomp\u0026quot;, \u0026quot;psych\u0026quot;, \u0026quot;probs\u0026quot;, \u0026quot;tidyverse\u0026quot;, \u0026quot;knitr\u0026quot;, \u0026quot;kableExtra\u0026quot;, \u0026quot;remotes\u0026quot;)) Instalar rkTeaching. La mejor forma de instalar rkTeaching desde este repositorio es utilizando el paquete de R remotes. Para ello hay que introducir los siguientes comandos en la consola de R:\nlibrary(remotes) install_github(\u0026quot;rkward-community/rk.Teaching\u0026quot;) El siguiente vídeo muestra el proceso de instalación.\nProcedimientos estadísticos Una vez instalado, al arrancar RKWard aparecerá un nuevo menú Teaching con los siguientes procedimientos estadísticos:\nManipulación de datos Filtrar datos Calcular variable Recodificar variable Ponderar datos Tipificar variables Distribución de frecuencias Tablas de frecuencias Tablas de frecuencias bidimensionales Gráficos Diagrama de barras Histograma Diagrama de sectores Diagrama de caja Diagrama de medias Diagrama de interacción Diagrama de dispersión Diagrama de lineas Matriz de dispersión Estadística descriptiva Estadísticos Estadísticos (cálculo detallado) Regresión Regresión lineal Regresión no lineal Comparación de modelos Predicciones Correlación Test paramétricos Medias Test T para una muestra Test T para dos muestras independientes Test T para dos muestras pareadas ANOVA Cálculo del tamaño muestral para la media Cálculo del tamaño muestral para el test T Cálculo de la potencia de un test T Varianzas Test para la varianza de una población Test F de Fisher Test de Levene Proporciones Test para una proporción Test para dos proporciones Cálculo del tamaño muestral para una proproción Test no paramétricos Normalidad Test de Lilliefors (Komogorov-Smirnov) Test de Shapiro-Wilk Test U de Mann-Whitney para dos muestas independientes Test de Wilcoxon para dos muestras pareadas Test de Kruskal-Wallis para varias muestras independientes Test de Friedman para medidas repetidas Test Chi-cuadrado de independencia Test Chi-cuadrado de bondad de ajuste Concordancia Coeficiente de correlación intraclase Kappa de Cohen Probabilidad Juegos de azar Monedas Espacio probabilístico Lanzamiento de monedas Dados Espacio probabilístico Lanzamiento de dados Naipes Espacio probabilístico Extracción naipes Urnas Espacio probabilístico Extracción de urnas Construcción de espacio probabilístico Combinación de espacios probabilísticos Repetición de espacios probabilísticos Cálculo de probabilidad Distribuciones de probabilidad Distribuciones discretas Binomial Probabilidades Cuantiles Gráfico de probabilidad Poisson Probabilidades Cuantiles Gráfico de probabilidad Distribuciones continuas Chi-cuadrado Probabilidades Cuantiles Gráfico de probabilidad F de Fisher Probabilidades Cuantiles Gráfico de probabilidad Normal Probabilidades Cuantiles Gráfico de probabilidad T de student Probabilidades Cuantiles Gráfico de probabilidad Uniforme continua Probabilidades Cuantiles Gráfico de probabilidad Simulaciones Ley de los casos raros Funcionalidades Menús y cuadros de diálogo diseñados para facilitar el aprendizaje, eliminando todas las opciones secundarias para conseguir una interfaz simple e intuitiva.\nDiseño de asistentes que guían al usuario paso a paso y le asesoran en los análisis estadísticos. Salidas en HTML que presentan los resultados de los análisis y sus interpretaciones de manera clara y concisa. Gráficos sencillos basados en el moderno paquete ggplot2. Posibilidad mostrar el desarrollo de los cálculos de algunos procedimientos estadísticos. rkTeaching es mantenido por asalber.\n¿Cómo citar rkTeaching? Sánchez-Alberca, A. (2024). rkTeaching (version 1.4) [software]. Obtenido de: http://aprendeconalf.es/es/proyecto/rkteaching.\n","date":1598918400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1729805100,"objectID":"42555f67a27ef383e36b903f7e3d7db7","permalink":"/proyecto/rkteaching/","publishdate":"2020-09-01T00:00:00Z","relpermalink":"/proyecto/rkteaching/","section":"proyecto","summary":"Un paquete de R para el aprendizaje de Estadística","tags":["RKWard","rkTeaching","Software"],"title":"rkTeaching","type":"project"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 19 de Junio de 2020\nEjercicio 1 Escribe un programa en python que permita guardar las notas de un alumno conseguidas en un cuatrimestre. Guarda la información en un diccionario cuyas claves sean las asignaturas y los valores las notas de cada asignatura. El programa pedirá la asignatura y la nota para esa asignatura. Si se recibe un número negativo en la nota, el programa termina y muestra las asignaturas suspensas.\nEjemplo\nIntroduce una asignatura: matemáticas Introduce la nota: 4 Introduce una asignatura: economía Introduce la nota: 8 Introduce una asignatura: programación Introduce la nota: 10 Introduce una asignatura: ninguna Introduce la nota: -2 Las asignaturas suspensas son: matemáticas Solución\nEjercicio 2 Escribir una función que tome una lista de números enteros desordenados y devuelva dos listas ordenadas. La primera con los números pares y la segunda con los números impares.\nSolución\nEjercicio 3 Escribir un programa para gestionar las citas de una consulta médica. La base de datos de citas debe estar en un fichero de nombre citas.csv. Cada cita contendrá los campos dni, mes, dia, hora y especialidad. No es necesario que la primera fila del csv contenga los nombres de los campos. El programa debe incluir las siguientes funciones:\nUna función que permita generar el fichero y añadir una cita a la base de datos. Una función que reciba un dni y devuelva una lista con las citas de ese paciente. Una función para eliminar las citas anteriores a una fecha dada. Solución\nEjercicio 4 El fichero ipc-2020.csv contiene el IPC de las comunidades autónomas de los cinco primeros meses de 2020. Crear un programa que realice las siguientes operaciones utilizando la librería Pandas:\nCrear un DataFrame leyendo el fichero desde internet con la url https://aprendeconalf.es/docencia/python/examenes/inteligencia-negocios/soluciones/examen-2020-06-19/ipc-2020.csv. Mostrar por pantalla el DataFrame con los datos de las filas 10 a 15. Mostrar por pantalla el DataFrame con los datos de Canarias de Mayo. Mostrar por pantalla una serie con el IPC mensual máximo de cada comunidad autónoma. Mostrar por pantalla una serie con la desviación típica del IPC mensual de cada grupo. Mostrar por pantalla un DataFrame con las comunidades y grupos donde los precios no han subido en promedio (IPC mensual medio menor de 100). Solución\n","date":1592524800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1623875101,"objectID":"838830051ec14f23af303371f8c37896","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2020-06-19/","publishdate":"2020-06-19T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2020-06-19/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 19 de Junio de 2020\nEjercicio 1 Escribe un programa en python que permita guardar las notas de un alumno conseguidas en un cuatrimestre. Guarda la información en un diccionario cuyas claves sean las asignaturas y los valores las notas de cada asignatura.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2020-06-19","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 27 de Mayo de 2020\nEjercicio 1 Escribir un programa al que al introducirle la altura de una línea sea capaz de dibujarla en diagonal con asteriscos. Por ejemplo, si introducimos altura = 5 dibujaría lo siguiente:\n* * * * * Solución\nEjercicio 2 Escribir una función que cuente las palabras que hay en una frase y las devuelva dentro de un diccionario. También tiene que devolver una lista con las palabras que aparecen más de una vez. Por ejemplo si se le pasa la frase: La caracola está enterrada al lado de otra caracola de color la función debe devolver el diccionario y la lista siguientes:\n{'La': 1, 'caracola': 2, 'está': 1, 'enterrada': 1, 'al': 1, 'lado': 1, 'de': 2, 'otra': 1, 'color': 1} ['caracola', 'de'] Solución\nEjercicio 3 El fichero horas-trabajo.csv contiene el número de horas mensuales trabajadas por los empleados de una empresa durante el primer cuatrimestre. Crear un programa que realice las siguientes operaciones sin utilizar la librería Pandas:\nLeer el fichero de internet https://aprendeconalf.es/docencia/python/examenes/inteligencia-negocios/soluciones/examen-2020-05-27/horas-trabajo.csv y crear una lista con las líneas del fichero. Mostrar por pantalla las horas totales del primer operario. Crear un diccionario de diccionarios tal que las claves del diccionario principal serán los identificadores de los operarios y sus valores serán, a su vez, otros diccionarios cuyas claves serán los meses y sus valores las horas trabajadas en esos meses para cada operario. Es decir, un diccionario como el siguiente: {'OP1': {'Enero': '180', 'Febrero': '160', 'Marzo': '140', 'Abril': '180'}, 'OP2': {'Enero': '120', 'Febrero': '140', 'Marzo': '', 'Abril': '100'}, ... } Crear una función que reciba la base de datos de las horas trabajadas (puede utilizarse el diccionario del apartado anterior u otra estructura de datos), el identificador de un operario y el precio de la hora, y devuelva una tupla con el número totales de horas trabajadas y el salario de ese operario. Solución\nEjercicio 4 El fichero horas-trabajo.csv contiene el número de horas mensuales trabajadas por los empleados de una empresa durante el primer cuatrimestre. Crear un programa que realice las siguientes operaciones utilizando la librería Pandas:\nCrear un DataFrame leyendo el fichero desde internet con la url http://aprendeconalf.es/python/examenes/soluciones/examen-2020-05-27/horas-trabajo.csv. Obsérvese que el separador de campos es el punto y coma. Mostrar por pantalla una serie con el número total de horas trabajadas para cada mes. Mostrar por pantalla una serie con el número de operarios de cada departamento. Mostrar por pantalla el número de empleados que han trabajado todos los meses, es decir, que tienen un número de horas todos los meses del cuatrimestre. Convertir el DataFrame a formato largo, de manera que todas las horas aparezcan en la misma columna. Mostrar por pantalla una serie con el número medio de horas trabajadas en cada departamento. Mostrar por pantalla una serie con el total de horas trabajadas de cada operario. Mostrar por pantalla una serie con los salarios de todos los operarios ordenados de mayor a menor. Solución\n","date":1590537600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1623875101,"objectID":"661b29889e990e801857131ababbf354","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2020-05-27/","publishdate":"2020-05-27T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2020-05-27/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 27 de Mayo de 2020\nEjercicio 1 Escribir un programa al que al introducirle la altura de una línea sea capaz de dibujarla en diagonal con asteriscos.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2020-05-27","type":"book"},{"authors":["Parrab-Blesa, Alfonso; Sanchez-Alberca, Alfredo; Garcia-Medina, Jose Javier"],"categories":[],"content":"","date":1577836800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"c28983392176b78c2c324f2c97d13ef2","permalink":"/publication/clinical-2020/","publishdate":"2020-09-16T21:26:02.134179Z","relpermalink":"/publication/clinical-2020/","section":"publication","summary":"Primary open-angle glaucoma (POAG) is considered one of the main causes of blindness. Detection of POAG at early stages and classification into evolutionary stages is crucial to blindness prevention. Methods: 1001 patients were enrolled, of whom 766 were healthy subjects and 235 were ocular hypertensive or glaucomatous patients in different stages of the disease. Spectral domain optical coherence tomography (SD-OCT) was used to determine Bruch’s membrane opening-minimum rim width (BMO-MRW) and the thicknesses of peripapillary retinal nerve fibre layer (RNFL) rings with diameters of 3.0, 4.1 and 4.7 mm centred on the optic nerve. The BMO-MRW rim and RNFL rings were divided into seven sectors (G-T-TS-TI-N-NS-NI). The k-means algorithm and linear discriminant analysis were used to classify patients into disease stages. Results: We defined four glaucoma stages and provided a new model for classifying eyes into these stages, with an overall accuracy greater than 92% (88% when including healthy eyes). An online application was also implemented to predict the probability of glaucoma stage for any given eye. Conclusions: We propose a new objective algorithm for classifying POAG into clinical-evolutionary stages using SD-OCT.","tags":[],"title":"Clinical-Evolutionary Staging System of Primary Open-Angle Glaucoma Using Optical Coherence Tomography","type":"publication"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología Fecha: 16 de diciembre de 2019\nEjercicio 1 Una laguna contaminada con nitratos contiene 1000 toneladas de nitratos disueltos en 6 millones de metros cúbicos de agua. Para descontaminar la laguna se empieza a introducir agua pura a razón de 100000 metros cúbicos por día y se saca la misma cantidad de agua contaminada. Suponiendo que la concentración de nitratos se mantiene uniforme en la laguna, ¿cuál será la cantidad de nitratos en la laguna después de 2 semanas? Si la concentración máxima de nitratos para no considerar el agua contaminada es de $0.1$ kg/m$^3$, ¿cuándo se puede considerar que la laguna está descontaminada?\nSolución Sea $n(t)$ la cantidad de nitratos en la laguna en el instante $t$.\nEcuación diferencial: $n\u0026rsquo;=-n/60$.\nSolución: $n(t)=10^6 e^{-t/60}$.\n$n(14)=791889.6$ kg.\nLa laguna estará descontaminada después de $30.6495$ días. Ejercicio 2 La temperatura $T$ de una reacción depende de las concentraciones de dos substancias $x$ e $y$ estando relacionadas por la expresión $$T(x,y)=-x^3+4x^2y-3y^2$$.\nSi la concentración de las substancias $x$ e $y$ son 2 y 1 respectivamente, ¿cuál tendría que ser la variación de las mismas para que la temperatura se incrementase lo más rápidamente posible? ¿Cuál es la variación de la temperatura si cambiamos las concentraciones en esa dirección? ¿Cómo tendrían que incrementarse las concentraciones para que la tasa de variación de la temperatura fuese 10? Solución $x$ e $y$ deben cambiar siguiendo la dirección del vector gradiente $\\nabla T(2,1) = (4, 10)$. A lo largo de esta dirección la tasa de variación instantánea de la temperatura es $|\\nabla T(2,1)|=10.77$ ºC (gr/dl)$^{-1}$. $x$ e $y$ deben cambiar siguiendo la dirección del vector unitario $(0, 1)$, es decir, $x$ debe mantenerse constante. Ejercicio 3 Se administra una medicina a un enfermo y t horas después la concentración en sangre del principio activo viene dada por $c(t) = t^2e^{-t/2}$ miligramos por mililitro. Se pide:\nCalcular el valor máximo de la concentración e indicar en qué momento se alcanza dicho valor máximo.2. Estudiar la concavidad y calcular los puntos de inflexión de la concentración. Solución El valor máximo se alcanza para $t=4$ horas y $c(4)=16e^{-2}$ mg/dl. Hay dos puntos de inflexión en $t=1.1716$ y $t=6.8284$.\nLa función es cóncava hacia arriba en $(-\\infty, 1.1716) \\cup (6.8284, \\infty)$ y cóncava hacia abajo en $(1.1716, 6.8284)$. ","date":1576454400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"dc6cbddec520a3127673c3f10b37685f","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2019-12-16/","publishdate":"2019-12-16T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2019-12-16/","section":"docencia","summary":"Grados: Farmacia y Biotecnología Fecha: 16 de diciembre de 2019\nEjercicio 1 Una laguna contaminada con nitratos contiene 1000 toneladas de nitratos disueltos en 6 millones de metros cúbicos de agua.","tags":["Examen"],"title":"Examen de Farmacia 2019-12-16","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 16 de Diciembre de 2019\nEjercicio 1 Se ha analizado en 50 casos el tiempo en minutos que, después de una operación, un paciente ha tardado en eliminar la anestesia, obteniéndose el siguiente resultado:\n$$ \\begin{array}{cr} \\mbox{Tiempo} \u0026amp; \\mbox{Pacientes} \\newline \\hline 10-30 \u0026amp; 2 \\newline 30-45 \u0026amp; 11 \\newline 45-60 \u0026amp; 18 \\newline 60-90 \u0026amp; 9 \\newline 90-120 \u0026amp; 8 \\newline 120-180 \u0026amp; 2 \\newline \\hline \\end{array} $$\nSe pide:\n¿Presenta la muestra algún dato atípico? ¿Es la media un valor representativo de la muestra? ¿Cuánto vale? Si un protocolo de postoperatorio contempla monitorizar al 15% de los pacientes que más tardan en eliminar la anestesia. ¿A partir de que tiempo se debe monitorizar a un paciente según la muestra? Si se suministra un fármaco antagonista del anestésico, se sabe que el tiempo de eliminación de la anestesia disminuye en un 25%. ¿Cómo afectará esta disminución a la representatividad de la nueva media? Si se sabe que el tiempo de eliminación de otro tipo de anestesia $B$ tiene media 50 minutos y desviación típica 15 minutos, ¿qué tiempo de eliminación es relativamente mayor, 70 minutos con este tipo de anestesia o 60 minutos con el tipo de anestesia $B$? Usar las siguientes sumas para los cálculos:\n$\\sum x_in_i=3212.5$ min, $\\sum x_i^2n_i=249706.25$ min$^2$,\n$\\sum (x_i-\\bar x)^3n_i=1400531.25$ min$^3$ y\n$\\sum (x_i-\\bar x)^4n_i=143958437.7$ min$^4$.\nSolución $C_1=44.3182$, $C_3=81.6667$, $RI=37.3485$, $v_1=-11.7045$ y $v_2=137.6894$. Puesto que la última clase contiene valores por encima de la valla superior, podría haber datos atípicos. $\\bar x=64.25$ min, $s^2=866.0625$ min$^2$, $s=29.4289$ min y $cv=0.458$. Por tanto, la representatividad de la media es moderada. $P_{85}=99.375$ min. Aplicando la transformación lineal $y=0.75x$, $\\bar y=48.1875$ min, $s_y=22.0717$ min y $cv=0.458$. Por tanto, la representatividad de la media es la misma. Puntuación típica para la primera anestesia: $z(70)=0.1954$.\nPuntuación típica para la anestesia $B$: $z(60)=0.6667$.\nPor tanto, 60 min es relativamente mayor con la anestesia $B$. Ejercicio 2 La siguiente tabla contiene las notas de un grupo de 10 alumnos de matemáticas de farmacia en tres exámenes parciales.\n$$ \\begin{array}{rrr} \\mbox{Parcial 1} (X) \u0026amp; \\mbox{Parcial 2} (Y) \u0026amp; \\mbox{Parcial 3} (Z) \\newline \\hline 5.5 \u0026amp; 3.2 \u0026amp; 5.0 \\newline 7.5 \u0026amp; 6.5 \u0026amp; 2.0 \\newline 2.5 \u0026amp; 4.0 \u0026amp; 1.0 \\newline 6.0 \u0026amp; 4.0 \u0026amp; 6.0 \\newline 8.0 \u0026amp; 7.5 \u0026amp; 6.0 \\newline 4.0 \u0026amp; 3.5 \u0026amp; 1.0 \\newline 7.0 \u0026amp; 5.5 \u0026amp; 4.0 \\newline 9.5 \u0026amp; 10.0 \u0026amp; 9.0 \\newline 10.0 \u0026amp; 9.5 \u0026amp; 8.0 \\newline 1.0 \u0026amp; 3.0 \u0026amp; 0.5 \\newline \\hline \\end{array} $$\nSe pide:\n¿Cuáles son las dos notas que mejor se correlacionan linealmente? Utilizando modelos lineales, ¿cuáles serían las notas estimadas en los parciales 2 y 3 de un alumno que obtuvo un $6.5$ en el parcial 1? Usar las siguientes sumas para los cálculos:\n$\\sum x_i=61$, $\\sum y_i=56.7$, $\\sum z_i=42.5$,\n$\\sum x_i^2=449$, $\\sum y_i^2=382.49$, $\\sum z_i^2=264.25$,\n$\\sum x_iy_j=405.85$, $\\sum x_iz_j=327$, $\\sum y_jz_j=295$.\nSolución $\\bar x=6.1$, $s_x^2=7.69$, $\\bar y=5.67$, $s_y^2=6.1001$, $\\bar z=4.25$, $s_z^2=8.3625$, $s_{xy}=5.998$, $s_{xz}=6.775$, $s_{yz}=5.4025$, $r^2_{xy}=0.7669$, $r^2_{xz}=0.7138$ y $r^2_{yz}=0.5722$. Por tanto, las dos variables más correlacionadas linealmente son $X$ e $Y$, ya que su coeficiente de determinación es mayor. Recta de regresión de $Y$ sobre $X$: $y=0.9122 + 0.78x$ y $y(6.5)=5.982$.\nRecta de regresión de $Z$ sobre $X$: $z=-1.1242 + 0.881x$ y $z(6.5)=4.6024$. Ejercicio 3 Para ver si existe algún tipo de asociación entre la osteoporosis y el sexo se ha tomado una muestra aleatoria de personas entre 65 y 70 años y se ha observado el sexo y cuántos presentaban osteoporosis. Los resultados se reflejan en la siguiente tabla.\n$$ \\begin{array}{lcc} \\hline \u0026amp; \\mbox{Osteoporosis} \u0026amp; \\mbox{No osteoporosis} \\newline \\mbox{Mujeres} \u0026amp; 480 \u0026amp; 2320 \\newline \\mbox{Hombres} \u0026amp; 255 \u0026amp; 1505 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular la prevalencia de la osteoporosis en la población. Calcular el riesgo relativo de presentar osteoporosis de las mujeres con respecto a los hombres e interpretarlo. Calcular el odds ratio de presentar osteoporosis de las mujeres con respecto a los hombres e interpretarlo. ¿Cuál de las dos medidas de asociación es más apropiada para estudiar la asociación entre la osteoporosis y el sexo? Justificar la respuesta. Solución Sea $E$ el evento consistente en tener osteoporosis.\nPrevalencia: $P(E)=0.1612$. $RR(E)=1.1832$. Por tanto, el riesgo de sufrir osteoporosis en mujeres es mayor que en hombres, pero no mucho. No existe una asociación fuerte entre la osteoporosis y el sexo. $OR(E)=1.2211$. Por tanto, el odds de sufrir en mujeres es mayor que en hombres, pero no mucho. Puesto que es posible calcular la prevalencia de la osteoporosis, ambas medidas pueden calcularse, pero el riesgo relativo es más fácil de interpretar. Ejercicio 4 La probabilidad de contraer la gripe en dos ciudades $A$ y $B$ del mismo tamaño es del 14% y del 8% respectivamente. Se pide:\nCalcular la probabilidad de que en una muestra aleatoria de 10 individuos de la ciudad $A$ haya más de 2 que contraigan la gripe. Calcular la probabilidad de que en una muestra aleatoria de 50 individuos de la ciudad $B$ haya más de 2 y menos de 5 que contraigan la gripe. Calcular la probabilidad de que en una muestra aleatoria de 8 individuos tomados de ambas ciudades haya 2 que contraigan la gripe. Suponiendo que contraer la gripe en ambas ciudades son sucesos independientes, calcular la probabilidad de que en una muestra de 5 personas que han estado en las dos ciudades haya alguna que contraiga la gripe. Solución Sea $X$ el número de personas que contraen la gripe en una muestra de 10 personas de la población $A$, entonces $X\\sim B(10, 0.14)$ y $P(X\u0026gt;2)=0.1545$. Sea $Y$ el número de personas que contraen la gripe en una muestra de 50 personas de la población $B$, entonces $Y\\sim B(50, 0.08)\\approx P(4)$ y $P(2 \u0026lt; Y \u0026lt; 5) = 0.3907$. Sea $Z$ el número de personas que contraen la gripe en una muestra de 8 personas de las poblaciones $A$ y $B$, entonces $Z\\sim B(8, 0.11)$ y $P(Z = 2) = 0.1684$. Sea $U$ el número de personas que contraen la gripe en una muestra de 5 personas que han vivido en ambas ciudades, entonces $U\\sim B(5, 0.2088)$ y $P(U\u0026gt;0)=0.69$. Ejercicio 5 En un estudio sobre el nivel de colesterol de los habitantes de una población se midió el nivel de colesterol de 10000 hombres y 10000 mujeres, obteniéndose que 3420 hombres y 1234 mujeres tenían un nivel de colesterol superior a 230 mg/dl, y que 4936 hombres tenían entre 210 y 230 mg/dl. Suponiendo que los niveles de colesterol en los hombres y en las mujeres siguen distribuciones normales con la misma desviación típica, calcular:\nLas medias y la desviación típica de las distribuciones del nivel de colesterol en hombres y mujeres.\nNota: Si no se saben calcular las medias y desviación típica, tomar 215 mg/dl y 220 mg/dl como las medias de mujeres y hombres respectivamente, y 10 mg/dl como la desviación típica, para los próximos apartados. El porcentaje de hombres cuyo nivel de colesterol estará entre 200 y 240 mg/dl. El rango intercuartílico del nivel de colesterol en las mujeres. Solución Sean $X$ e $Y$ los niveles de colesterol en hombres y mujeres respectivamente, entonces $X\\sim N(224.1164, 14.4556)$ e $Y\\sim N(213.2581, 14.4556)$. $P(200\\leq X \\leq 240) = 0.8164$. 3. $RI = 19.5003$ mg/dl. ","date":1576454400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"d454be111e6147d9b5611389e20cc47a","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2019-12-16/","publishdate":"2019-12-16T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2019-12-16/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 16 de Diciembre de 2019\nEjercicio 1 Se ha analizado en 50 casos el tiempo en minutos que, después de una operación, un paciente ha tardado en eliminar la anestesia, obteniéndose el siguiente resultado:","tags":["Examen"],"title":"Examen de Farmacia 2019-12-16","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 18 de Junio de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-computadores-2019-06-18-parcial1.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, \u0026lt;APELLIDO1-APELLIDO2\u0026gt;, y convertir esta rama en la rama activa. Crear el fichero ejercicio1.3.txt que contenga la salida del comando de Git que muestra el historial de commits del repositorio, mostrando un commit por línea. Crear un fichero ejercicio1.4.txt que contenga la salida del comando que muestra las diferencias entre el primer y el tercer commits del repositorio. Crear un fichero ejercicio1.5.txt que contenga la salida del comando de Git que muestra los repositorios remotos configurados junto con sus urls. Añadir todos los cambios a la zona temporal de intercambio y hacer un commit con el mensaje \u0026ldquo;Añadidas respuestas ejercicio 1.\u0026rdquo; Solución \u0026gt; git clone https://github.com/asalberceu/examen-fundamentos-computadores-2019-06-18-parcial1.git \u0026gt; cd examen-fundamentos-computadores-2019-06-18-parcial1.git \u0026gt; git checkout -b SANCHEZ-ALBERCA \u0026gt; git log --oneline \u0026gt; ejercicio1.3.txt \u0026gt; git diff f9ed835 a485ced \u0026gt; ejercicio1.4.txt \u0026gt; git remote -v \u0026gt; ejercicio1.5.txt \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadida respuestas.\u0026quot; Ejercicio 2 A lo largo de un curso se realizan dos exámenes parciales. Para aprobar el curso la nota media debe ser mayor o igual que 5 siempre y cuando en ambos parciales se tenga al menos un 4. Escribir un programa que pregunte al usuario la nota de los dos parciales y muestre por pantalla si el alumno ha aprobado el curso o si no, y en caso de no haber aprobado, qué parcial tiene que repetir por tener menos de 4 en él.\nSolución\nEjercicio 3 Un n-grama es una secuencia de $n$ caracteres consecutivos de una cadena. Por ejemplo, los 3-gramas de la cadena 'Python' son 'Pyt', 'yth', 'tho' y 'hon'. Escribir un programa que pregunte por una cadena y un número entero positivo $n$ y muestre por pantalla todos los n-gramas de la cadena.\nSolución\nEjercicio 4 Escribir un programa que elimine de una lista dada todos los elementos repetidos y muestre por pantalla los elementos de la lista sin repeticiones.\nSolución\nEjercicio 5 Definir funciones para codificar y decodificar mensajes en código morse.\nDefinir una función para codificar una palabra en código morse. Debe cumplir los siguientes requisitos:\nDebe usarse el diccionario que se da. El único parámetro de entrada de la función es una cadena con una palabra. Debe devolver una cadena con el código morse correspondiente a la palabra, separando los bloques de código correspondientes a cada letra por punto y coma ;. Definir una función para decodificar una palabra en código morse. Debe cumplir los siguientes requisitos:\nA partir del diccionario que se da se debe crear el diccionario invertido, es decir, un diccionario cuyas claves son los códigos morse y sus valores las letras correspondientes. Se valorará especialmente el uso de comprensión de diccionarios. El único parámetro de entrada de la función es una cadena de código morse, donde los bloques de código correspondientes a cada letra van separados por puntos y coma ;. Debe devolver una cadena con la palabra decodificada. Definir una función para codificar un mensaje en código morse. Debe cumplir los siguientes requisitos:\nDebe usarse la función anterior para codificar palabras. El único parámetro de entrada de la función es una cadena con un mensaje (palabras separadas con espacios). Debe devolver una cadena con las palabras del mensaje codificadas y separadas por espacios. Se valorará especialmente el uso de programación funcional. Definir una función para decodificar un mensaje en código morse. Debe cumplir los siguientes requisitos:\nDebe usarse la función anterior para decodificar palabras. El único parámetro de entrada de la función es una cadena con un mensaje en código morse (letras separadas por punto y coma, y palabras separadas con espacios). Debe devolver una cadena con las palabras del mensaje decodificadas y separadas por espacios. Se valorará especialmente el uso de programación funcional. Solución\nEjercicio 6 La url https://datos.madrid.es/egob/catalogo/300117-0-arrendamiento-programas.csv apunta a un fichero en formato csv con datos de los arrendamientos de viviendas de la Empresa Municipal de la Vivienda del Ayuntamiento de Madrid.\nConstruir una función que abra un fichero con el formato anterior y devuelva una lista cuyos elementos son a su vez las listas que contienen los datos de cada línea del fichero menos la primera línea. Debe cumplir los siguientes requisitos:\nLa función recibirá como único parámetro la url del fichero. Debe leer el fichero por líneas y para cada línea debe dividir la línea por el separador de campos (punto y coma) y guardar los datos en una lista. Debe devolver la lista con las listas de datos obtenidas a partir de cada línea. Construir una función que reciba una lista de listas como la que devuelve la función anterior y devuelva otra lista con los nombres de los distritos contenidos en la lista. Debe cumplir los siguientes requisitos:\nLa función recibirá como único parámetro una lista de listas con las viviendas arrendadas por distrito. Debe recorrer la lista de listas y para cada lista debe extraer el nombre del distrito y añadirlo a una lista con los distritos. Debe devolver la lista de distritos. Construir una función que reciba una lista de listas como la que devuelve la primera función y una lista de nombres de distritos y devuelva la lista con las listas correspondientes a los distritos indicados. Debe satisfacer los siguientes requisitos:\nLa función recibirá como parámetros una lista de listas con las viviendas arrendadas por distrito y otra lista con nombres de distritos. Debe recorrer la lista de viviendas arrendadas y añadir a otra lista nueva las líneas correspondientes a los distritos indicados en la segunda lista. Debe devolver la nueva lista con las listas correspondientes a los distritos indicados. Construir una función que reciba una lista como la que devuelve la primera función y devuelva un diccionario cuyas claves sean los nombres de distrito y cuyos valores sean el total de viviendas arrendadas en el distrito. Debe cumplir los siguientes requisitos:\nLa función recibirá como único parámetro la lista con las viviendas arrendadas por distrito. Debe recorrer la lista de listas y para cada lista extraer el nombre del distrito y el total de viviendas arrendadas en el distrito y añadir el par a un diccionario. Debe devolver un diccionario con un par para cada lista de la lista, cuya clave sea el nombre del distrito y cuyo valor sea el número total de viviendas arrendadas en ese distrito. Solución\n","date":1560816000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600774105,"objectID":"80ac1dfcc12880c877a8aa6bbb4930e4","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-06-18/","publishdate":"2019-06-18T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-06-18/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 18 de Junio de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-computadores-2019-06-18-parcial1.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, \u0026lt;APELLIDO1-APELLIDO2\u0026gt;, y convertir esta rama en la rama activa.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2019-06-18","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 27 de Mayo de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-computadores-2019-05-27-parcial1.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, \u0026lt;APELLIDO1-APELLIDO2\u0026gt;, y convertir esta rama en la rama activa. Crear el fichero ejercicio1.3.txt que contenga la salida del comando de Git que muestra para cada línea del fichero ejercicio2.py la información sobre el commit en que se realizó el último cambio en esa línea. Crear un fichero ejercicio1.4.txt que contenga la salida del comando que muestra las diferencias entre el primer y el segundo commits del repositorio. Crear un fichero ejercicio1.5.txt que contenga la salida del comando de Git que muestra el estado actual del repositorio. Añadir todos los cambios a la zona temporal de intercambio y hacer un commit con el mensaje \u0026ldquo;Añadidas respuestas.\u0026rdquo; Solución \u0026gt; git clone https://github.com/asalberceu/examen-fundamentos-computadores-2019-05-27-parcial1.git \u0026gt; cd examen-fundamentos-computadores-2019-05-27-parcial1.git \u0026gt; git checkout -b SANCHEZ-ALBERCA \u0026gt; git annotate ejercicio2.py \u0026gt; ejercicio1.3.txt \u0026gt; git diff afce5 b4a76 \u0026gt; ejercicio1.4.txt \u0026gt; git status \u0026gt; ejercicio1.5.txt \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadida respuestas.\u0026quot; Ejercicio 2 Escribir un programa que pida al usuario un número entero $n$ y muestre por pantalla un triángulo el de más abajo.\n* *** ***** ******* ********* donde $n$ es el número de filas del triángulo.\nSolución\nEjercicio 3 Escribir un programa para ver los beneficios de una empresa en un periodo de años.\nEl programa debe cumplir los siguientes requisitos:\nEl programa tiene que preguntar al usuario por un año inicial y otro final, y después preguntar por los ingresos y los gastos de cada año desde el año inicial hasta el año final. Con los datos introducidos se deben crear dos listas, una con los ingresos y otra con los gastos, de manera que los ingresos y los gastos de cada año aparezcan en la misma posición de las listas. El programa debe crear otra lista con el beneficio de cada año (ingresos menos gastos) y mostrarla por pantalla. El programa debe crear otra lista booleana que indique para cada año si ha habido beneficios o no y mostrarla por pantalla. Finalmente el programa debe mostrar por pantalla la lista de los años con beneficios la lista de los años con pérdidas. Solución\nEjercicio 4 Definir una función que reciba un número entero entre 0 y 999, y devuelva una cadena con la cantidad introducida en palabras. Por ejemplo, si se introduce 647 debe devolver la cadena \u0026ldquo;seiscientos cuarenta y siete\u0026rdquo;.\nLa función debe cumplir los siguientes requisitos:\nEl único parámetro de entrada de la función es un número entero entre 0 y 999. Deben usarse diccionarios para emparejar cada dígito con la palabra correspondiente para las unidades, decenas y centenas. Debe devolver una cadena con la cantidad introducida en palabras. Solución\nEjercicio 5 El fichero cotizacion.csv contiene las cotizaciones de las empresas del IBEX35 con las siguientes columnas: nombre (nombre de la empresa), Final (precio de la acción al cierre de bolsa), Máximo (precio máximo de la acción durante la jornada), Mínimo (precio mínimo de la acción durante la jornada), volumen (Volumen al cierre de bolsa), Efectivo (capitalización al cierre en miles de euros).\nConstruir una función que abra un fichero con el formato anterior y devuelva un diccionario con los datos del fichero por columnas.\nLa función debe cumplir los siguientes requisitos:\nLa función recibirá como único parámetro la ruta del fichero. Debe realizarse un preprocesado de los datos que reemplace la coma por el punto como separador de decimales. Debe realizarse el control de errores mediante excepciones para el caso de que el fichero no exista en la ruta indicada. Debe devolver un diccionario con tantos elementos como columnas tenga el fichero, donde la clave de cada par sea el nombre de la columna y el valor la lista de datos de la columna. Construir una función que reciba el diccionario devuelto por la función anterior y cree un fichero en formato csv con el mínimo, el máximo y la media de dada columna.\nLa función debe cumplir los siguientes requisitos:\nLa función recibirá como parámetros el diccionario con los datos de cotización y la ruta del fichero a crear. El fichero generado tendrá las mismas columnas que el fichero cotizacion.csv con los mismos nombres de columnas, y tres líneas correspondientes al mínimo, máximo y media de los datos de cada columna. En la columna nombre en lugar del nombre de la empresa debe aparecer la medida calculada en esa línea (mínimo, máximo o media). Los datos deben estar separados por punto y coma. Solución\nEjercicio 6 Definir una función que reciba una lista de facturas, un NIF y un mes, y devuelva un diccionario con el número de facturas emitidas a ese NIF en el mes indicado y el total facturado en ese mes.\nLa función debe cumplir los siguientes requisitos:\nLos parámetros de entrada serán una lista de facturas, una cadena con un NIF y otra cadena con el mes. Cada factura se representarán mediante un diccionario con las claves nif (NIF del cliente), mes (mes de emisión de la factura), cantidad (cantidad facturada sin IVA), iva (porcentaje de IVA a aplicar). Se debe crear una lista con el total de cada factura (una vez aplicado el IVA) para el NIF y el mes indicados utilizando programación funcional o comprensión de listas. La función debe devolver un diccionario con el número de facturas y el total facturado al NIF en el mes indicado. Solución\n","date":1558915200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1623875101,"objectID":"48fee810c46b560031ef053834b38cc1","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-05-27/","publishdate":"2019-05-27T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-05-27/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 27 de Mayo de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-computadores-2019-05-27-parcial1.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, \u0026lt;APELLIDO1-APELLIDO2\u0026gt;, y convertir esta rama en la rama activa.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2019-05-27","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"Grado: Inteligencia de los Negocios\nFecha: 27 de Marzo de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-programacion-2019-03-27-A.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, APELLIDO1-APELLIDO2, y convertir esta rama en la rama activa. Crear la carpeta respuestas, y dentro de ella el fichero ejercicio1.3.txt que contenga la salida que da el comando de Git para mostrar todas diferencias entre la última versión de la rama actual y la anterior. Añadir todos los cambios a la zona temporal de intercambio y hacer un commit con el mensaje \u0026ldquo;Añadida respuesta ejercicio 1.3.\u0026rdquo; Crear dentro de la carpeta respuestas el fichero ejercicio1.5.txt que contenga la salida que da el comando de Git para mostrar todos los commits del repositorio (una línea por commit), incluyendo todas las ramas. Añadir todos los cambios a la zona temporal de intercambio y hacer un commit con el mensaje \u0026ldquo;Añadida respuesta ejercicio 1.5.\u0026rdquo; Solución \u0026gt; git clone https://github.com/asalberceu/examen-fundamentos-programacion-2019-03-27-A.git \u0026gt; cd examen-fundamentos-programacion-2019-03-27-A \u0026gt; git checkout -b SANCHEZ-ALBERCA \u0026gt; mkdir respuestas \u0026gt; git diff HEAD~1 \u0026gt; respuestas/ejercicio1.3.txt \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadida respuesta ejercicio 1.3\u0026quot; \u0026gt; git log --oneline --all \u0026gt; respuestas/ejercicio1.5.txt \u0026gt; git add . \u0026gt; git commit -m \u0026quot;Añadida respuesta ejercicio 1.5\u0026quot; Ejercicio 2 Escribir un programa que realice la devolución de una cantidad dada por el usuario en monedas.\nEl programa debe cumplir los siguientes requisitos:\nSolo se disponen de tres tipos de monedas: 5, 2 y 1 €. Crear una lista que contenga estos tres tipos de moneda y usar la lista en la solución. El programa debe preguntar al usuario por una cantidad entera de euros. El programa debe mostrar por pantalla el mínimo número de monedas necesarias para sumar la cantidad introducida por el usuario y cuántas monedas de cada tipo se necesitan para ello. El número de monedas de cada tipo debe guardarse en otra lista. El programa debe guardarse dentro de la carpeta respuestas con el nombre ejercicio2.py. Cuando el programa esté terminado, añadir el fichero ejercicio2.py a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Añadida respuesta ejercicio 2\u0026rdquo;. Solución\nEjercicio 3 Escribir un programa que simule el famoso juego del ahorcado.\nEl programa debe cumplir los siguientes requisitos:\nEl programa debe preguntar al usuario la palabra a adivinar. A partir de la palabra introducida debe crear una lista con los caracteres de la palabra. Después debe ir preguntando al usuario por letras hasta un máximo de 5 fallos o hasta que no queden letras en la lista. En ambos casos el programa terminará pero mostrará el mensaje \u0026ldquo;Perdiste\u0026rdquo; si se comenten 5 fallos y el mensaje \u0026ldquo;Ganaste\u0026rdquo; si no quedan palabras en la lista. Cada vez que el usuario introduzca una nueva letra, si la letra está en la lista la eliminará y mostrará el mensaje \u0026ldquo;Acierto\u0026rdquo;, mientras que si la letra no está en la lista mostrará el mensaje \u0026ldquo;Fallo\u0026rdquo;. Si la letra está más de una vez en la lista, sólo se eliminará la primera instancia que aparezca. El programa debe guardarse dentro de la carpeta respuestas con el nombre ejercicio3.py. Cuando el programa esté terminado, añadir el fichero ejercicio3.py a la zona de intercambio temporal y hacer un commit con el mensaje \u0026ldquo;Añadida respuesta ejercicio 3\u0026rdquo;. Requisito adicional para un punto extra:\nCada vez que el usuario acierte una letra debe mostrar la palabra a adivinar con las letras acertadas hasta el momento y el resto reemplazadas por asteriscos. Solución\n","date":1553644800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"d49c5770d178c8086e6429d973492e82","permalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-03-27/","publishdate":"2019-03-27T00:00:00Z","relpermalink":"/docencia/python/examenes/inteligencia-negocios/examen-python-2019-03-27/","section":"docencia","summary":"Grado: Inteligencia de los Negocios\nFecha: 27 de Marzo de 2019\nEjercicio 1 Clonar con git el repositorio con la url https://github.com/asalberceu/examen-fundamentos-programacion-2019-03-27-A.git. Crear una rama con los apellidos del alumno en mayúsculas y separados por un guión, es decir, APELLIDO1-APELLIDO2, y convertir esta rama en la rama activa.","tags":["Exámen"],"title":"Examen de Inteligencia de los Negocios 2019-03-27","type":"book"},{"authors":null,"categories":["Programación"],"content":"¿Conoces Git?\nSi no lo conoces deberías, porque no importa a lo que te dediques, una vez aprendas a usarlo no podrás vivir sin él.\nGit es el sistema de control de versiones más usado en el mundo. Pero, ¿qué es un sistema de control de versiones? Pues es una aplicación que permite gestionar los cambios que se realizan sobre los elementos de un proyecto o repositorio, guardando así versiones del mismo en todas sus fases de desarrollo. No importa el contenido de tu carpeta o repositorio, ya sean documentos, hojas de cálculo, fotos, páginas web o código en un lenguaje de programación, con git podrás tener un control absoluto sobre los cambios en tu repositorio: qué cambios se hicieron, cuándo, quién los hizo, e incluso podrás volver a versiones anteriores del repositorio.\nRecientemente he dado un curso de programación y he tenido que preparar un mini curso de Git que pongo a vuestra disposición. Podéis acceder al curso en los siguientes enlaces:\nManual de Git Ejercicios de Git Espero que os sean muy útiles.\nComo siempre, agradezco que aviséis de cualquier error que encontréis.\n","date":1551435710,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1601240261,"objectID":"a7ca0f3275bb9c8eaeec255d7b4a51a9","permalink":"/post/curso-git/","publishdate":"2019-03-01T10:21:50Z","relpermalink":"/post/curso-git/","section":"post","summary":"¿Conoces Git?\nSi no lo conoces deberías, porque no importa a lo que te dediques, una vez aprendas a usarlo no podrás vivir sin él.\nGit es el sistema de control de versiones más usado en el mundo.","tags":["Git"],"title":"Curso de Git","type":"post"},{"authors":["Alfredo Sánchez Alberca, María Luisa Sánchez Rodríguez, Manuel Camacho Sampelayo, José Miguel Camacho Sampelayo, José Javier García Medina Alfonso Parra Blesa"],"categories":[],"content":"","date":1546300800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"b92a4a34decc05a181d033ea99c9c0da","permalink":"/publication/clasificacion-2019/","publishdate":"2020-09-16T21:26:03.60199Z","relpermalink":"/publication/clasificacion-2019/","section":"publication","summary":"","tags":[],"title":"Clasificación por estadios clínico evolutivos del glaucoma primario de ángulo abierto (GPAA) usando valores normalizados obtenidos mediante tomografía de coherencia óptica","type":"publication"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 17 de diciembre de 2018\nEjercicio 1 Se sabe que un organismo metaboliza el alcohol a una velocidad de la mitad de la cantidad presente. Si inicialmente no había nada de alcohol y comenzamos a introducir alcohol a un ritmo constante de 2 ml/min, ¿qué cantidad de alcohol habrá en el organismo transcurridos 5 minutos?\nSolución Sea $a(t)$ la cantidad de alcohol en el organismo en el instante $t$.\nEcuación diferencial: $a\u0026rsquo;=2-a/2$.\nSolución: $a(t)=4-4e^{-t/2}$.\n$a(5)=3.6717$ ml. Ejercicio 2 La cantidad $y$ de bacterias de tipo $B$ (en miles) en un cultivo está relacionado con la cantidad $x$ de bacterias de tipo $A$ (también en miles) mediante la función $y=f(x)$. Sabiendo que en este cultivo se cumple la ecuación $x^2y^3-6x^3y^2+2xy=1$ y que $f(1/2)=2$, estudiar si $f$ podría tener un máximo relativo en $x=1/2$.\nSolución Derivada implícita: $y\u0026rsquo;= \\dfrac{-2xy^3+18x^2y^2+2y}{3x^2y^2-12x^3y+2x}$.\n$y\u0026rsquo;(1/2)=6\\neq 0$, de manera que $f$ no tiene un máximo local en $x=1/2$. Ejercicio 3 Se han diseñado unas cápsulas con forma piramidal con base un rectángulo de lados $a=3$ cm, $b=4$ cm, y altura $h=6$ cm. Se pide:\n¿Cómo deben cambiar las dimensiones de la cápsula para que el volumen aumente lo más rápidamente posible? ¿Cuál sería la tasa de variación del volumen si cambian las dimensiones de la cápsula en la proporciones anteriores? Si se empiezan a cambiar las dimensiones de la cápsula de manera que el lado mayor del rectángulo disminuye la mitad de lo que aumenta el lado menor, y la altura aumenta el doble de lo que aumenta el lado menor, ¿cuál sería la tasa de variación del volumen de la cápsula en las condiciones anteriores? Nota: El volumen de una pirámide es $1/3$ del área la base por la altura.\nSolución $\\nabla V(3,4,6)=(8,6,4)$ y el volumen aumentará a razón de $|\\nabla V(3,4,6)|=10.7703$ cm$^3$/s si cambiamos las dimensiones de la cápsula siguiendo esa dirección. Derivada direccional de $V$ en $(3,4,6)$ siguiendo la dirección del vector $\\mathbf{u}=(1,-1/2,2)$: $V\u0026rsquo;_{\\mathbf{u}}(3,4,6)=5.6737$ cm$^3$/s. Ejercicio 4 El rendimiento de una cosecha $y$ depende de las concentraciones de nitrógeno $n$ y fósforo $p$ según la ecuación $$y(n,p)=\\frac{np}{e^{n+p}}.$$ Calcular el valor de $n$ y $p$ que maximiza el rendimiento de la cosecha.\nSolución $n=1$ y $p=1$. ","date":1545004800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"62dc09f8ee6fb11fb7dad8d7bf91cce3","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2018-12-17/","publishdate":"2018-12-17T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2018-12-17/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 17 de diciembre de 2018\nEjercicio 1 Se sabe que un organismo metaboliza el alcohol a una velocidad de la mitad de la cantidad presente. Si inicialmente no había nada de alcohol y comenzamos a introducir alcohol a un ritmo constante de 2 ml/min, ¿qué cantidad de alcohol habrá en el organismo transcurridos 5 minutos?","tags":["Examen"],"title":"Examen de Farmacia 2018-12-17","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 17 de Diciembre de 2018\nEjercicio 1 El siguiente gráfico representa la distribución acumulada del número de fármacos defectuosos diarios producidos por una máquina en una muestra de 40 fármacos.\nConstruir la tabla de frecuencias del número de fármacos defectuosos. Dibujar el diagrama de caja y bigotes del número de fármacos defectuosos. Estudiar la asimetría de la distribución del número de fármacos defectuosos. Si el número de fármacos defectuosos producidos por una segunda máquina sigue la ecuación $y=3x+2$, donde $x$ e $y$ son el número de fármacos defectuosos producidos con la primera y la segunda máquina respectivamente, ¿en qué máquina es más representativa la media del número de fármacos defectuosos? ¿Qué número de fármacos defectuosos es relativamente menor, 3 fármacos en la primera máquina o 9 fármacos en la segunda? Solución $$\\begin{array}{|c|r|r|r|r|} \\hline \\mbox{Fármacos defectuosos} \u0026amp; n_i \u0026amp; f_i \u0026amp; N_i \u0026amp; F_i \\newline \\hline 0 \u0026amp; 1 \u0026amp; 0.025 \u0026amp; 1 \u0026amp; 0.025 \\newline 1 \u0026amp; 3 \u0026amp; 0.075 \u0026amp; 4 \u0026amp; 0.100 \\newline 2 \u0026amp; 6 \u0026amp; 0.150 \u0026amp; 10 \u0026amp; 0.250 \\newline 3 \u0026amp; 7 \u0026amp; 0.175 \u0026amp; 17 \u0026amp; 0.425 \\newline 4 \u0026amp; 8 \u0026amp; 0.200 \u0026amp; 25 \u0026amp; 0.625 \\newline 5 \u0026amp; 6 \u0026amp; 0.150 \u0026amp; 31 \u0026amp; 0.775 \\newline 6 \u0026amp; 5 \u0026amp; 0.125 \u0026amp; 36 \u0026amp; 0.900 \\newline 7 \u0026amp; 2 \u0026amp; 0.050 \u0026amp; 38 \u0026amp; 0.950 \\newline 8 \u0026amp; 1 \u0026amp; 0.025 \u0026amp; 39 \u0026amp; 0.975 \\newline 9 \u0026amp; 1 \u0026amp; 0.025 \u0026amp; 40 \u0026amp; 1.000 \\newline \\hline \\end{array} $$ $\\bar x=3.975$ fármacos, $s_x=1.9936$ fármacos y $g_1=0.3184$. Por tanto, la distribución es un poco asimétrica hacia la derecha. $cv_x=0.5015$, $\\bar y=13.925$ fármacos, $s_y=5.9808$ fármacos y $cv_y=0.4295$.\nAsí pues, la media de $y$ es más representativa que la media de $x$ ya que su coeficiente de variación es menor. $z_x=-0.4891$ y $z_y=-0.8235$, por tanto, 9 fármacos defectuosos en la máquina $y$ es relativamente menor. Ejercicio 2 Un laboratorio farmacéutico fabrica dos modelos de tensiómetro, uno de brazo y otro de muñeca. Para comprobar la precisión de los mismos se ha realizado un control de calidad tomando la tensión a 20 pacientes y se han obtenido obtenido los siguientes resultados:\n$\\sum x_i=265.4$ mmHg, $\\sum y_i=262.5$ mmHg , $\\sum z_i=262.4$ mmHg,\n$\\sum x_i^2=3701.14$ mmHg$^2$, $\\sum y_i^2=3629.41$ mmHg$^2$, $\\sum z_i^2=3615.38$ mmHg$^2$,\n$\\sum x_iy_j=3658.28$ mmHg$^2$, $\\sum x_iz_j=3655.95$ mmHg$^2$, $\\sum y_jz_j=3613.97$ mmHg$^2$.\nDonde $X$ es la tensión con el tensiómetro de brazo, $Y$ con el tensiómetro de muñeca y $Z$ la tensión real. Se pide:\n¿Qué tensiómetro predice mejor la tensión real? Si un paciente tiene una tensión real de $13.5$ mmHg, ¿qué se espera que marque el tensiómetro de brazo? Solución Presión arterial con el tensiómetro de brazo: $\\bar x=13.27$ mmHg, $s^2_x=8.9641$ mmHg².\nPresión arterial con el tensiómetro de muñeca: $\\bar y=13.125$ mmHg, $s^2_y=9.2049$ mmHg².\nPresión arterial real: $\\bar z=13.12$ mmHg, $s^2_z=8.6346$ mmHg².\n$s_{xz}=8.6951$ mmHg², $s_{yz}=8.4985$ mmHg², $r^2_{xz}=0.9768$ y $r^2_{yz}=0.9087$.\nAsí pues, el tensiómetro de brazo predice mejor la presión arterial real con un modelo de regresión lineal ya que el coeficiente de determinación lineal es mayor. Recta de regresión de $X$ sobre $Z$: $x=0.0581+1.007z$.\nPredicción: $x(13.5)=13.6527$ mmHg. Ejercicio 3 La recta de regresión de $Y$ sobre $X$ es $y=1.2x-0.6$. Se pide:\nIndicar razonadamente cuáles de las siguientes rectas no pueden ser las recta de regresión de $X$ sobre $Y$. $x=0.9y-0.6$ $x=-0.7y+0.4$ $x=0.8y-0.7$ $x=-0.6y-0.5$ $x=0.4y-0.6$ $x=-0.5y+0.9$ Entre las que puedan ser indicar razonadamente con cuál de ellas serían más fiables las predicciones. Solución (b), (d) y (f) no son posibles porque tienen pendiente negativa, y (a) no es posible porque el coeficiente de determinación lineal es mayor que 1. (c) da las mejores predicciones porque su coeficiente de determinación es mayor. Ejercicio 4 En un estudio epidemiológico se tomó una muestra de 400 personas con cáncer de pulmón y otra de 1200 sin cáncer de pulmón. Entre las personas con cáncer de pulmón se observó que había 180 fumadoras, mientras que entre las personas sin cáncer de pulmón había 1140 no fumadoras. Se pide:\nCalcular el riesgo relativo de desarrollar cáncer al fumar e interpretarlo. Calcular el odds ratio de desarrollar cáncer al fumar e interpretarlo. Solución Sea $C$ el evento correspondiente a tener cáncer de pulmón.\n$RR(C)=9$. Esto quiere decir que la probabilidad de tener cancer de pulmón al fumar es 9 veces mayor que sin fumar. $OR(C)=15.5455$. Como es positivo existe una asociación directa entre fumar y tener cáncer de pulmón. El odds de tener cáncer de pulmón si se fuma es más the 15 veces mayor que si no se fuma. Ejercicio 5 Se quiere desarrollar un test diagnóstico que sirva para descartar una enfermedad cuando el test es negativo (valor predictivo negativo) con al menos una probabilidad del 90% para aplicarlo en una población en la que se sabe que hay un 15% de individuos que presentan la enfermedad. Si la sensibilidad del test se ha establecido en un 80%,\n¿Qué especificidad mínima tendría que tener el test? ¿Cuál sería en ese caso su probabilidad de diagnóstico correcto? ¿Cuál sería la probabilidad de descartar la enfermedad en un paciente que se le ha aplicado dos veces el test y ha dado negativo en ambos casos? Solución Sea $E$ el evento correspondiente a tener la enfermedad y $+$ y $-$ los eventos correspondientes a tener un resultado positivo o negativo en el test diagnóstico respectivamente.\nEspecificidad mínima $P(-|\\overline{E})=0.3176$. $P(VP) + P(VN) = P(E\\cap +) + P(\\overline{E}\\cap -) = 0.12+0.27 = 0.39$. $P(\\overline{E}| -_1\\cap -_2)=0.9346$. Ejercicio 6 Se sabe que en una ciudad una de cada 20 personas, por término medio, tiene sangre del tipo $AB$.\nSi se eligen al azar doscientos donantes de sangre, ¿cuál es la probabilidad de que al menos 5 tengan sangre de tipo $AB$? Si se eligen al azar 10 personas, ¿cuál es la probabilidad de que haya más de 8 con grupo sanguíneo distinto de $AB$? Solución Sea $X$ el número de donantes con grupo sanguíneo $AB$ en una muestra de 200 donantes de sangre. Entonces, $X\\sim B(200,1/20)\\approx P(10)$, y $P(X\\geq 5)=0.9707$. Sea $Y$ el número de donantes con grupo sanguíneo distinto de $AB$ en una muestra de 10 donantes. Entonces, $Y\\sim B(10,19/20)$, y $P(Y\u0026gt;8)=0.9139$. Ejercicio 7 En una asignatura hay 230 alumnos, de los cuales 150 son chicas y 80 chicos. Se sabe que las notas siguen distribuciones normales con la misma desviación típica en las chicas y en los chicos. Si hay 120 chicas y 56 chicos que tienen una nota superior a 5 y 36 chicos tienen una nota entre 5 y 7. Se pide:\nLas medias y las desviaciones típicas de las notas de chicas y chicos. ¿Cuántas chicas tendrán una nota entre 4.5 y 8? ¿Por encima de qué nota estarán el 10% de las chicas? Solución Sea $X$ la nota de un chico aleatorio del curso e $Y$ la nota de una chica aleatoria del curso. Entonces, $X\\sim N(\\mu_x,\\sigma)$ y $Y\\sim N(\\mu_y,\\sigma)$.\n$\\mu_x=5.87$, $\\mu_y=6.41$ y $\\sigma=1.68$. $P(4.5\\leq Y\\leq 8) = 0.7018$, es decir, $105.27$ chicas. $P_{90}=8.8$. ","date":1545004800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"c248d8e0f804e188eea463f361bf0854","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2018-12-17/","publishdate":"2018-12-17T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2018-12-17/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 17 de Diciembre de 2018\nEjercicio 1 El siguiente gráfico representa la distribución acumulada del número de fármacos defectuosos diarios producidos por una máquina en una muestra de 40 fármacos.","tags":["Examen"],"title":"Examen de Farmacia 2018-12-17","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Óptica"],"content":"Titulación: Grado en Óptica\nFecha: 24 de Octubre de 2018\nEjercicio 1 En un estudio sobre la presbicia se tomó una muestra de pacientes y se midió la edad y la distancia mínima a la que eran capaces de leer una frase en cm. Los datos se muestran en la siguiente tabla.\n$$ \\begin{array}{lrrrrrrrrrrrrrrrrrrrr} \\hline \\mbox{Edad} \u0026amp; 7 \u0026amp; 12 \u0026amp; 15 \u0026amp; 15 \u0026amp; 18 \u0026amp; 21 \u0026amp; 25 \u0026amp; 28 \u0026amp; 32 \u0026amp; 35 \u0026amp; 43 \u0026amp; 46 \u0026amp; 48 \u0026amp; 51 \u0026amp; 54 \u0026amp; 57 \u0026amp; 60 \u0026amp; 66 \u0026amp; 72 \u0026amp; 92 \\newline \\mbox{Distancia} \u0026amp; 13 \u0026amp; 14 \u0026amp; 12 \u0026amp; 14 \u0026amp; 13 \u0026amp; 14 \u0026amp; 13 \u0026amp; 14 \u0026amp; 16 \u0026amp; 13 \u0026amp; 18 \u0026amp; 19 \u0026amp; 22 \u0026amp; 22 \u0026amp; 26 \u0026amp; 25 \u0026amp; 27 \u0026amp; 28 \u0026amp; 29 \u0026amp; 36 \\newline \\hline \\end{array} $$\nUtilizar las siguientes sumas para los cálculos ($X$= Edad e $Y$= Distancia mínima de enfoque):\nMenores de 40\n$\\sum x_i=208$ años, $\\sum x_i^2=5066$ años², $\\sum(x_i-\\bar x)^3=993.84$ años³, $\\sum(x_i-\\bar x)^4=103981.55$ años⁴,\n$\\sum y_j=136$ cm, $\\sum y_j^2=1860$ cm², $\\sum(y_j-\\bar y)^3=9.12$ cm³, $\\sum(y_j-\\bar y)^4=40.35$ cm⁴,\n$\\sum x_iy_j=2861$ años$\\cdot$cm.\nMayores de 40\n$\\sum x_i=589$ años, $\\sum x_i^2=36639$ años², $\\sum(x_i-\\bar x)^3=30793.08$ años³, $\\sum(x_i-\\bar x)^4=1342559.42$ años⁴,\n$\\sum y_j=252$ cm, $\\sum y_j^2=6604$ cm², $\\sum(y_j-\\bar y)^3=665.76$ cm³, $\\sum(y_j-\\bar y)^4=18260.51$ cm⁴,\n$\\sum x_iy_j=15523$ años$\\cdot$cm.\nSe pide:\nDibujar el diagrama de caja y bigotes de la distancia mínima de enfoque. ¿Existen datos atípicos? ¿En qué distribución de la distancia mínima de enfoque es más representativa la media, en la de menores o en la de mayores de 40 años? ¿Qué distribución de la distancia mínima de enfoque es más asimétrica, la de los menores o la de los mayores de 40 años? ¿Qué distancia mínima de enfoque es relativamente menor, una distancia de 12 cm en los menores de 40 años, o una distancia de 30 cm en los mayores de 40 años? Dibujar el diagrama de dispersión de la edad y la distancia mínima de enfoque. Según del diagrama, ¿existe relación lineal entre la distancia mínima de enfoque y la edad? ¿En qué grupo existe una relación lineal más fuerte entre la distancia mínima de enfoque y la edad, en los menores o en los mayores de 40 años? Según la recta de regresión, ¿cuánto aumenta la distancia mínima de enfoque por cada año que pasa en el grupo de los mayores de 40 años? A qué edad se espera tener una distancia mínima de enfoque de 32 cm en el grupo de los mayores de 40 años? ¿Es fiable esta predicción? Solución No hay datos atípicos. Menores de 40: $\\bar y=13.6$ cm, $s^2_y=1.04$ cm², $s_y=1.0198$ cm y $cv_y=0.075$.\nMayores de 40: $\\bar y=25.2$ cm, $s^2_y=25.36$ cm², $s_y=5.0359$ cm y $cv_y=0.1998$.\nAsí pues, la media es más representativa en los menores de 40 años ya que su coeficiente de variación es menor. Menores de 40: $g_1=0.86$\nMayores de 40: $g_1=0.52$\nPor tanto, la distribución de los menores de 40 es más asimétrica ya que el coeficiente de asimetría está más lejos de 0. Menores de 40: $z(12)=-1.57$.\nMayores de 40: $z(30)=0.95$.\nAsí pues, una distancia de 12 cm en menores de 40 es relativamente menor. Se observan claramente dos tendencias, una para los menores de 40 y la otra para los mayores. En el caso de los menores no parece haber una relación fuerte entre la distancia mínima de enfoque y la edad, mientras que en el caso de los mayores si parece que la hay y además es lineal.\nMenores de 40: $\\bar x=20.8$ años, $s^2=73.96$, $s_{xy}=3.22$ y $r^2=0.13$.\nMayores de 40: $\\bar x=58.9$ años, $s^2=194.69$, $s_{xy}=68.02$ y $r^2=0.94$.\nPor tanto, la relación lineal es más fuerte en los mayores de 40 ya que el coeficiente de determinación es mayor. Recta de regresión de $Y$ sobre $X$ en los mayores de 40: $y=4.6218+0.3494x$.\nAsí pues, por cada año que pasa la distancia mínima de enfoque aumenta $0.3494$ cm. Recta de regresión de $X$ sobre $Y$ en los mayores de 40: $x=-8.6909+2.6822y$.\n$X(32)=77.14$ años. Según el coeficiente de determinación la predicción es muy fiable, aunque el tamaño muestral no es muy grande y eso resta un poco de fiabilidad. ","date":1540339200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1e9df2e878dd9f97d35d74a9a307a4ed","permalink":"/docencia/estadistica/examenes/optica/optica-2018-10-24/","publishdate":"2018-10-24T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/optica/optica-2018-10-24/","section":"docencia","summary":"Titulación: Grado en Óptica\nFecha: 24 de Octubre de 2018\nEjercicio 1 En un estudio sobre la presbicia se tomó una muestra de pacientes y se midió la edad y la distancia mínima a la que eran capaces de leer una frase en cm.","tags":["Examen"],"title":"Examen de Óptica 2018-10-24","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Fisioterapia"],"content":"Grados: Fisioterapia\nFecha: 18 de junio de 2019\nEjercicio 1 En un estudio sobre la efectividad de un programa de prevención de riesgos laborales en oficios que requieren estar sentados muchas horas, se tomó una muestra aleatoria de individuos entre 40 y 50 años que pasaban más de 5 horas sentados y se observó si habían seguido las recomendaciones del programa de prevención o no y el número de lesiones vertebrales transcurridos 10 años. Los resultados obtenidos aparecen en la siguiente tabla.\n$$ \\begin{array}{lrrrrrrrrrrrrrrr} \\hline \\mbox{Con programa de prevención} \u0026amp; 1 \u0026amp; 3 \u0026amp; 2 \u0026amp; 4 \u0026amp; 4 \u0026amp; 0 \u0026amp; 2 \u0026amp; 4 \u0026amp; 2 \u0026amp; 2 \u0026amp; 5 \u0026amp; 2 \u0026amp; 3 \u0026amp; 2 \u0026amp; 0 \\newline \\mbox{Sin programa de prevención} \u0026amp; 6 \u0026amp; 3 \u0026amp; 1 \u0026amp; 3 \u0026amp; 7 \u0026amp; 6 \u0026amp; 5 \u0026amp; 5 \u0026amp; 9 \u0026amp; 5 \u0026amp; 5 \u0026amp; 4 \u0026amp; 4 \u0026amp; 3 \u0026amp; \\newline \\hline \\end{array}$$\nSe pide:\nDibujar el polígono de frecuencias relativas acumuladas de la muestra global. Según el rango intercuartílico, ¿en qué muestra hay una mayor dispersión central del número de lesiones vertebrales, en la de los que siguieron el programa de prevención o en la de los que no? ¿En qué muestra hay una mayor dispersión relativa del número de lesiones vertebrales, en la de los que siguieron el programa de prevención o en la de los que no? ¿Qué muestra tienen un apuntamiento más normal del número de lesiones vertebrales, la de los que siguieron el programa de prevención o en la de los que no? ¿Qué número de lesiones vertebrales es relativamente mayor, 2 lesiones siguiendo el programa de prevención o 4 sin seguirlo? Usar las siguientes sumas para los cálculos:\nSiguiendo el programa de prevención: $\\sum x_i=36$ lesiones, $\\sum x_i^2=116$ lesiones$^2$, $\\sum (x_i-\\bar x)^3=-0.48$ lesiones$^3$ y $\\sum (x_i-\\bar x)^4=135.97$ lesiones$^4$.\nNo siguiendo el programa de prevención: $\\sum y_i=66$ lesiones, $\\sum y_i^2=362$ lesiones$^2$, $\\sum (y_i-\\bar y)^3=27.92$ lesiones$^3$ y $\\sum (y_i-\\bar y)^4=586.9$ lesiones$^4$.\nSolución Con programa de prevención: $C_1=2$ lesiones, $C_3=4$ lesiones, $RI=2$ lesiones.\nSin programa de prevención: $C_1=3$ lesiones, $C_3=6$ lesiones, $RI=3$ lesiones.\nLa muestra que no siguió el programa de prevención tiene una dispersión central mayor ya que su rango intercuartílico es mayor.\nCon programa de prevención: $\\bar x=2.4$ lesiones, $s^2=1.9733$ lesiones$^2$, $s=1.4048$ lesiones and $cv=0.5853$.\nSin programa de prevención: $\\bar y=4.7143$ lesiones, $s^2=3.6327$ lesiones$^2$, $s=1.906$ lesiones and $cv=0.4043$.\nLa muestra que siguió el programa de prevención tiene una dispersión relativa con respecto a la media mayor ya que su coeficiente de variación es mayor.\nCon programa de prevención: $g_2=-0.6722$.\nSin programa de prevención: $g_2=0.1768$.\nAsí pues, la muestra que no siguió el programa de prevención tiene un apuntamiento más normal ya que el coeficiente de apuntamiento está más próximo a 0.\nCon programa de prevención: $z(2)=-0.2847$.\nSin programa de prevención: $z(4)=-0.3748$.\nAsí pues, 4 lesiones sin seguir el programa de prevención es relativamente menor que 2 lesiones siguiendo el programa ya que su puntuación típica es menor.\nEjercicio 2 El precio de cierto relajante muscular evolucionó entre 2015 y 2019 como indica la siguiente tabla:\n$$ \\begin{array}{lrrrrr} \\hline \\mbox{Año} \u0026amp; 2015 \u0026amp; 2016 \u0026amp; 2017 \u0026amp; 2018 \u0026amp; 2019 \\newline \\mbox{Precio (€)} \u0026amp; 1.40 \u0026amp; 1.60 \u0026amp; 1.92 \u0026amp; 2.30 \u0026amp; 2.91 \\newline \\hline \\end{array} $$\n¿Qué modelo de regresión es mejor para predecir el precio del función del año, el lineal o el exponencial? Utilizar el mejor de los dos modelos anteriores para predecir el precio del medicamento en 2020. Solución $\\bar x=2017$ años, $s_x^2=2$ años$^2$.\n$\\bar y=2.026$ €, $s_y^2=0.2882$ €$^2$.\n$\\overline{\\log(y)}=0.672$ log(€), $s_{\\log(y)}^2=0.0673$ log(€)$^2$.\n$s_{xy}=0.744$ años$\\cdot$€, $s_{x\\log(y)}=0.3653$ años$\\cdot\\log(€)$.\nCoeficiente de determinación lineal: $r^2=0.9603$.\nCoeficiente de determinación exponencial: $r^2=0.9909$.\nAsí pues, el modelo de regresión exponencial es mejor para predecir el precio ya que su coeficiente de determinación es mayor.\nModelo de regresión exponencial: $y=e^{-367.6861+0.1826x}$.\nPredicción: $y(2020)=3.3867$ €.\nEjercicio 3 En un problema de regresión lineal entre dos variables $X$ e $Y$ se conoce $\\bar x = 3$, $s_x^2=2$, $s_y^2=10.8$ y la ecuación de la recta de regresión de $Y$ sobre $X$ es $y=90.9-2.3x$.\nCalcular la media de $Y$. Calcular e interpretar el coeficiente de correlación lineal. Solución $\\bar y = 84$. $r=-0.9898$. Ejercicio 4 En un estudio sobre la efectividad de un programa de prevención de riesgos laborales en oficios que requieren estar sentados muchas horas, se tomó una muestra aleatoria 500 de individuos entre 40 y 50 años sin lesiones vertebrales que pasaban más de 5 horas sentados. La mitad de los individuos siguieron un programa de prevención de riesgos laborales mientras que los demás no. Transcurridos 5 años el número de personas que desarrollaron alguna lesión vertebral en el grupo de los que siguieron el programa de prevención fue de 12, mientras que en el otro grupo fue de 32. En los siguientes 5 años hubo otras 21 personas que desarrollaron alguna lesión vertebral en el grupo de los que siguieron el programa de prevención, mientras que en el otro grupo fue de 48.\nCalcular la incidencia acumulada de lesiones vertebrales en la muestra total a los 5 y a los 10 años. Calcular el riesgo absoluto de desarrollar alguna lesión vertebral a los 10 años en el grupo de los que siguieron el programa de prevención y en el de los que no. Calcular el riesgo relativo de desarrollar alguna lesión vertebral a los 10 años de los que siguieron el programa de prevención de riesgos con respecto a los que no e interpretarlo. Calcular el odds ratio de desarrollar alguna lesión vertebral a los 10 años de los que siguieron el programa de prevención de riesgos con respecto a los que no e interpretarlo. ¿Cuál de las dos medidas anteriores, riesgo relativo u odds ratio, tiene más sentido en este estudio? Justificar la respuesta. Solución Sea $E$ el evento consistente en sufrir una lesión vertebral.\nIncidencia acumulada después de 5 años: $R(E)=0.088$.\nIncidencia acumulada después de 10 años: $R(E)=0.226$.\nRiesgo en el grupo tratamiento: $R_T(E)=0.132$.\nRiesgo en el grupo control: $R_C(E)=0.32$.\n$RR(D)=0.4125$. Por tanto, el riesgo de sufrir una lesión vertebral es menos de la mitad si se sigue el programa de prevención.\n$OR(D)=0.3232$. Por tanto, el odd de sufrir una lesión vertebral es menos de un tercio si se sigue el programa de prevención.\nPuesto que se trata de un estudio prospectivo se puede estimar la prevalencia de $D$ y ambos estadísticos son válidos, pero el riesgo relativo es más fácil de interpretar.\nEjercicio 5 En la siguiente tabla se muestran los resultados de un estudio para evaluar la utilidad de una tira reactiva para el diagnóstico de infección urinaria:\n$$\\begin{array}{ccc} \\hline \\mbox{Resultado} \u0026amp; \\mbox{Con infección} \u0026amp; \\mbox{Sin infección}\\newline \\mbox{Positivo} \u0026amp; 60 \u0026amp; 80\\newline \\mbox{Negativo} \u0026amp; 10 \u0026amp; 200\\newline \\hline \\end{array} $$\nCalcular la sensibilidad y la especificidad del test. Calcular los valores predictivos positivo y negativo del test. ¿El test es mejor para confirmar la enfermedad o para descartarla? Si a partir de un estudio de prevalencia efectuado previamente conociéramos que la verdadera prevalencia de la infección urinaria en la población es del 2%, ¿cómo se verían afectados los valores predictivos? Solución Sea $E$ el suceso consistente en tener la infección urinaria y $+$ y $-$ los sucesos correspondientes a obtener un resultado positivo y negativo respectivamente en el test.\nSensibilidad = $0.8571$ y Especificidad = $0.7143$. $VPP=0.4286$ y $VPN=0.9524$. Puesto que $VPP\u0026lt;VPN$ el test es mejor para descartar la enfermedad. $VPP=0.0577$ y $VPN=0.9959$. El valor predictivo positivo decrece mucho mientras el valor predictivo negativo aumenta un poco. Ejercicio 6 El tiempo de recuperación tras un tipo de lesión sigue una distribución normal con varianza 64 días. Se sabe además que el 10% de las personas con esta lesión tardan en curarse más de 80 días.\n¿Cuál es el tiempo esperado de curación para esta lesión? ¿Qué porcentaje de individuos tardará en curarse entre 60 y 75 días? Si se toma una muestra aleatoria de 12 individuos con esta lesión, ¿cuál es la probabilidad de que haya entre 9 y 11 individuos, ambos incluidos, que tarden menos de 80 días en curarse? Si se toma una muestra aleatoria de 500 individuos con esta lesión, ¿cuál es la probabilidad de haya menos de 4 por encima del percentil 99 del tiempo de curación? Solución Sea $X$ el tiempo requerido para recuperarse de la lesión. Entonces $X\\sim N(\\mu, 8)$.\n$\\mu=69.7476$ días. $P(60\u0026lt;X\u0026lt;75) = 0.6327$. Sea $Y$ el número de individuos con la lesión que requieren más de 80 días para recuperarse en una muestra aleatoria de 12 individuos. Entonces $Y\\sim B(12, 0.9)$ y $P(9\\leq Y\\leq 11)=0.6919$. Sea $Z$ be el número de individuos con la lesión que requieren un tiempo de recuperación por encima del percentil 99 en una muestra aleatoria de 500 individuos. Entonces $Z\\sim B(500, 0.01)\\approx P(5)$ y $P(Z\\leq 4)=0.265$. ","date":1529280000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"88e50c4cbdd8e33266b5f0d13ee125d6","permalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-06-18/","publishdate":"2018-06-18T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-06-18/","section":"docencia","summary":"Grados: Fisioterapia\nFecha: 18 de junio de 2019\nEjercicio 1 En un estudio sobre la efectividad de un programa de prevención de riesgos laborales en oficios que requieren estar sentados muchas horas, se tomó una muestra aleatoria de individuos entre 40 y 50 años que pasaban más de 5 horas sentados y se observó si habían seguido las recomendaciones del programa de prevención o no y el número de lesiones vertebrales transcurridos 10 años.","tags":["Examen"],"title":"Examen de Fisioterapia 2018-06-18","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Fisioterapia"],"content":"Grados: Fisioterapia\nFecha: 31 de mayo de 2018\nEjercicio 1 Las edades de una muestra de pacientes que acuden a una clínica de fisioterapia son las siguientes:\n25, 30, 44, 44, 51, 51, 53, 56, 57, 58, 58, 58, 59, 59, 61, 63, 63, 63, 66, 68, 70, 71, 72, 74, 82, 85\nSe pide:\nCalcular los cuartiles. Dibujar el diagrama de cajas e identificar los datos atípicos (no agrupar los datos en intervalos). Considerando los grupos de los menores y mayores de 65 años, ¿en cuál de ellos es más representativa la media? ¿Qué distribución es menos simétrica, la de los menores o la de los mayores de 65 años? ¿Qué edad es relativamente mayor con respecto a su grupo, 50 años en el grupo de los menores o 75 en el de los mayores? Usar las siguientes sumas para los cálculos.\nMenores de 65: $\\sum x_i=953$ años, $\\sum x_i^2=52475$ años$^2$, $\\sum (x_i-\\bar x)^3=-30846.51$ años$^3$ y $\\sum (x_i-\\bar x)^4=939658.83$ años$^4$.\nMayores de 65: $\\sum x_i=588$ años, $\\sum x_i^2=43530$ años$^2$, $\\sum (x_i-\\bar x)^3=1485$ años$^3$ y $\\sum (x_i-\\bar x)^4=26983.5$ años$^4$.\nSolución $C_1=53$ años, $C_2=59$ años and $C_3=68$ años. Existen dos datos atípicos: 25 y 30.\nSea $X$ la edad de los pacientes menores de 65 años e $Y$ la de los mayores.\n$\\bar x=52.9444$ años, $s_x^2=112.1636$ años$^2$, $s_x=10.5907$ años y $cv_x=0.2$.\n$\\bar y=73.5$ años, $s_y^2=39$ años$^2$, $s_y=6.245$ años y $cv_y=0.085$.\nLa media es más representativa en los pacientes mayores de 65 ya que el coeficiente de variación es menor. $g_{1x}=-1.4426$ y $g_{1y}=0.7621$, de manera que la distribución menos simétrica es la de los menores de 65 años. Las puntuaciones típicas son $z_x(50)=-0.278$ y $z_y(72)=-0.2402$, de manera que una edad de 50 años es relativamente menor en el grupo de los menores de 65 años. Ejercicio 2 La siguiente tabla recoge el número de lesiones en un equipo durante una temporada y el número medio de minutos diarios de calentamiento que hacen sus jugadores.\n$$ \\begin{array}{lrrrrrrrrrr} \\hline \\mbox{Tiempo calentamiento} \u0026amp; 15 \u0026amp; 35 \u0026amp; 22 \u0026amp; 28 \u0026amp; 21 \u0026amp; 18 \u0026amp; 25 \u0026amp; 30 \u0026amp; 23 \u0026amp; 20 \\newline \\mbox{Lesiones} \u0026amp; 42 \u0026amp; 2 \u0026amp; 16 \u0026amp; 6 \u0026amp; 17 \u0026amp; 29 \u0026amp; 10 \u0026amp; 3 \u0026amp; 12 \u0026amp; 20 \\newline \\hline \\end{array} $$\nSe pide:\nDibujar el diagrama de dispersión. ¿Qué modelo de regresión es más apropiado para predecir el número de lesiones en función del tiempo de calentamiento, el logarítmico o el exponencial? Utilizar dicho modelo para predecir el número de lesiones esperado para 20 minutos de calentamiento diarios. ¿Qué modelo de regresión es más apropiado para predecir el tiempo de calentamiento en función del número de lesiones, el logarítmico o el exponencial? Utilizar dicho modelo para predecir el mínimo tiempo de calentamiento diario necesario para no tener más de 10 lesiones en la temporada. ¿Son fiables estas predicciones? ¿Cuál de ellas es más fiable? Usar las siguientes sumas para los cálculos (X=tiempo de calentamiento e Y=número de lesiones): $\\sum x_i=237$, $\\sum \\log(x_i)=31.3728$, $\\sum y_j=157$, $\\sum \\log(y_j)=24.0775$,\n$\\sum x_i^2=5937$, $\\sum \\log(x_i)^2=98.9906$, $\\sum y_j^2=3843$, $\\sum \\log(y_j)^2=66.3721$,\n$\\sum x_iy_j=3115$, $\\sum x_i\\log(y_j)=519.1907$, $\\sum \\log(x_i)y_j=465.8093$, $\\sum \\log(x_i)\\log(y_j)=73.3995$.\nSolución $\\bar x=23.7$ min, $s_x^2=32.01$ min$^2$.\n$\\overline{\\log(x)}=3.1373$ log(min), $s_{\\log(x)}^2=0.0565$ log(min)$^2$.\n$\\bar y=15.7$ lesiones, $s_y^2=137.81$ lesiones$^2$.\n$\\overline{\\log(y)}=2.4078$ log(lesiones), $s_{\\log(y)}^2=0.8399$ log(lesiones)$^2$.\n$s_{x\\log(y)}=-5.1446$, $s_{\\log(x)y}=-2.6744$\nCoeficiente de determinanción exponencial: $r^2=0.9844$\nCoeficiente de determinación logarítmico: $r^2=0.9185$\nPor tanto, el modelo de regresión exponencial es mejor para predecir el número de lesiones en función del tiempo de calentamiento.\nModelo de regresión exponencial: $y=e^{6.2168+-0.1607x}$.\nPredicción: $y(20)=20.1341$ lesiones. El modelo logarítmico es mejor para predecir el tiempo de calentamiento en función del número de lesiones.\nModelo de regresión logarítmico: $x=164.1851+-47.3292\\log(y)$.\nPredicción: $x(10)=55.2056$ min. De acuerdo al coeficiente de determinación ambas predicciones son muy fiables pero la última lo es menos ya que es para un valor que no está incluido en el rango de valores de la muestra. Ejercicio 3 Se recurre a cierta técnica con ultrasonidos en el proceso de diagnosis de una enfermedad. Su sensibilidad es del 91% y su especificidad del 98%. Sabiendo que la prevalencia de dicha enfermedad es del 20%, se pide:\nSi a un individuo se le aplica la técnica y el resultado es positivo, ¿cuál es la probabilidad de que sufra esta enfermedad? Si el resultado fuese negativo, ¿cuál sería la probabilidad de que no tuviera la enfermedad? ¿La técnica es más fiable para confirmar la enfermedad o para descartarla? Justificar la respuesta. Calcular la probabilidad de obtener un diagnóstico acertado con esta técnica. Solución Sea $E$ el suceso consistente en tener la enfermedad y $+$ y $-$ los sucesos correspondientes a obtener un resultado positivo y negativo respectivamente en el test.\n$VPP=0.9192$. $VPN=0.9776$. Es más fiable para descartar la enfermedad ya que el valor predictivo negativo es mayor que el valor predictivo positivo. $P(E\\cap +)+P(\\overline E\\cap -) = 0.966$. Ejercicio 4 Se sabe que la longitud del fémur de un feto a las 25 semanas de embarazo sigue una distribución normal de media 44 mm y desviación típica 2 mm. Se pide:\nCalcular la probabilidad de que, tomando un feto de 25 semanas al azar, el fémur mida más de 46 mm. Calcular la probabilidad de que, tomando un feto de 25 semanas al azar, el fémur mida entre 46 y 49 mm. Determina un intervalo $(a,b)$ centrado en la media, que contenga el 80% de los valores de la longitud del fémur de fetos de 25 semanas. Solución Sea $X\\sim N(44,2)$ la longitud del fémur de un feto a las 25 semanas de embarazo.\n$P(X\u0026gt;46)=0.1587$. $P(46\u0026lt;X\u0026lt;49)=0.1524$. El intervalo centrado en $44$ que contiene 80% de las longitudes del fémur de fetos de 25 semanas es $(41.4369,46.5631)$. Ejercicio 5 La probabilidad de que una lesión $A$ se reproduzca es $4/5$, la de que se reproduzca otra lesión $B$ es $1/2$, y la de que ninguna se reproduzca $1/20$. Hallar la probabilidad de que:\nAl menos una se reproduzca. Sólo se reproduzca la lesión $B$. Se reproduzca la lesión $B$ si se ha reproducido la $A$. Se reproduzca la lesión $B$ si no se reproduce la lesión $A$. Solución $P(A\\cup B)=19/20$. $P(B\\cap\\overline{A})=3/20$. $P(B/A)=7/16$. $P(B/\\overline{A})=3/4$. Ejercicio 6 Una clínica de fisioterapia abre 6 horas al día y se sabe que el número medio de pacientes por día que llegan a la clínica es 12. Se pide:\nCalcular la probabilidad de que lleguen más de 4 pacientes en 1 horas. Si la clínica tiene 4 fisioterapeutas y cada uno puede atender a un paciente por hora, ¿cuál es la probabilidad de que un día cualquiera haya alguna hora en la que algún paciente no pueda ser atendido? ¿Cuántos empleados debería haber para asegurarse de que esta probabilidad es menor del 10%? Solución Sea $X$ el número de pacientes que llegan en 1 horas. $X\\sim P(2)$ y $P(X\u0026gt;4)=0.0527$. Sea $Y$ el número de horas en un día en las que algún paciente no puede ser atendido. $Y\\sim B(6, 0.0527)$ y $P(Y\u0026gt;0)=0.2771$.\nSe necesitan 5 empleados para que esta probabilidad sea menor del 10%, ya que $P(X\u0026gt;5)=0.0527$ y $P(Y\u0026gt;0)=0.0954$, siendo ahora $Y\\sim B(6, 0.0166)$. ","date":1527724800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"156306332888616ff13e29dc4ed8f365","permalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-05-31/","publishdate":"2018-05-31T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-05-31/","section":"docencia","summary":"Grados: Fisioterapia\nFecha: 31 de mayo de 2018\nEjercicio 1 Las edades de una muestra de pacientes que acuden a una clínica de fisioterapia son las siguientes:\n25, 30, 44, 44, 51, 51, 53, 56, 57, 58, 58, 58, 59, 59, 61, 63, 63, 63, 66, 68, 70, 71, 72, 74, 82, 85","tags":["Examen"],"title":"Examen de Fisioterapia 2018-05-31","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Fisioterapia"],"content":"Grados: Fisioterapia\nFecha: 9 de abril de 2018\nEjercicio 1 En un estudio se ha medido el arco de rotación de la cabeza en personas que trabajan habitualmente con ordenador y en personas que no. Los resultados aparecen en el siguiente histograma.\nSe pide:\nDibujar el polígono de frecuencias relativas acumuladas del arco de rotación de la cabeza en personas que trabajan con ordenador. Si se considera que una persona con un arco de rotación menor o igual de 115 grados tiene movilidad reducida, ¿qué porcentaje personas que trabajan con ordenador tienen movilidad reducida? ¿En qué distribución es más representativa la media del arco de rotación de la cabeza, en la de las personas que trabajan con ordenador o en las que no? Calcular la media global del arco de rotación de la cabeza. ¿Qué distribución es más asimétrica, la de las personas que trabajan con ordenador o la de las que no? ¿Qué valor del arco de rotación de la cabeza es relativamente mayor, 150 grados en las personas que trabajan con ordenador o 170 grados en las que no? Usar las siguientes sumas para los cálculos. Con ordenador: $\\sum x_i=3970$ grados, $\\sum x_i^2=534750$ grados², $\\sum (x_i-\\bar x)^3=103662.2222$ grados³ y $\\sum (x_i-\\bar x)^4=7903715.5556$ grados⁴.\nSin ordenador: $\\sum x_i=4230$ grados, $\\sum x_i^2=645900$ grados², $\\sum (x_i-\\bar x)^3=-42359.6939$ grados³ y $\\sum (x_i-\\bar x)^4=4101700.5284$ grados⁴.\nSolución $F(115)=0.1667 \\rightarrow 16.67$% de los que trabajan con ordenador tienen movilidad reducida. Con ordenador: $\\bar x=132.3333$ grados, $s_x^2=312.8889$ grados², $s_x=17.6887$ grados y $cv_x=0.1337$\nSin ordenador: $\\bar x=151.0714$ grados, $s_x^2=245.2806$ grados², $s_x=15.6614$ grados y $cv_x=0.1037$\nLa media de los que trabajan sin ordenador es más representativa que la de los que trabajan con ordenador ya que su coeficiente de variación es menor. $\\bar x=141.3793$. Con ordenador $g_1=0.6243$ y sin ordenador $g_1=-0.3938$. Por tanto, la distribución de los que trabajan con ordenador es más asimétrica. Puntuaciones típicas: $z(150)=0.9988$ y $z(170)=1.2086$. Por tanto, un arco de rotación de 150 grados en los que trabajan con ordenador es relativamente menor que un arco de rotación de 170 en los que trabajan sin ordenador. Ejercicio 2 La concentración de un fármaco en sangre $C$, medida en mg/dl, viene dada en función del tiempo $t$, en horas, según se recoge en la siguiente tabla:\n$$ \\begin{array}{lrrrrrrr} \\hline \\mbox{Tiempo} \u0026amp; 2 \u0026amp; 3 \u0026amp; 4 \u0026amp; 5 \u0026amp; 6 \u0026amp; 7 \u0026amp; 8\\newline \\mbox{Concentración} \u0026amp; 25 \u0026amp; 36 \u0026amp; 48 \u0026amp; 64 \u0026amp; 86 \u0026amp; 114 \u0026amp; 168\\newline \\hline \\end{array} $$\nSe pide:\n¿Qué modelo de regresión te parece más fiable para predecir la concentración que habría a las $4.8$ horas, el lineal o el exponencial? Realiza dicha predicción con el mejor modelo de los dos anteriores. Usar las siguientes sumas para los cálculos:\n$\\sum x_i=35$, $\\sum \\log(x_i)=10.6046$, $\\sum y_j=541$, $\\sum \\log(y_j)=29.147$,\n$\\sum x_i^2=203$, $\\sum \\log(x_i)^2=17.5205$, $\\sum y_j^2=56937$, $\\sum \\log(y_j)^2=124.0131$,\n$\\sum x_iy_j=3328$, $\\sum x_i\\log(y_j)=154.3387$, $\\sum \\log(x_i)y_j=951.6961$, $\\sum \\log(x_i)\\log(y_j)=46.0805$.\nSolución Modelo lineal de Concentración sobre Tiempo:\n$\\bar x=5$ horas, $s_x^2=4$ horas² .\n$\\bar y=77.2857$ mg/dl, $s_y^2=2160.7755$ (mg/dl)².\n$s_{xy}=89$ horas⋅mg/dl.\nCoeficiente de determinación lineal de Concentración sobre Tiempo $r^2=0.9165$.\nModelo exponencial de Concentración sobre tiempo:\n$\\overline{\\log(y)}=4.1639$ log(mg/dl), $s_{\\log(y)}^2=0.3785$ log(mg/dl)².\n$s_{x\\log(y)}=1.2291$ horas⋅log(mg/dl).\nCoeficiente de determinación exponencial de Concentración sobre Tiempo $r^2=0.9979$.\nPor tanto, el modelo exponencial explica mejor la relación entre la concentración y el tiempo ya que su coeficiente de determinación es mayor. Modelo exponencial de Concentración sobre Tiempo: $y=e^{2.6275 + 0.3073x}$.\n$y(4.8)=60.4853$ mg/dl. ","date":1523232000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"94257c612ddc7f140da2b448716c0654","permalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-04-09/","publishdate":"2018-04-09T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/fisioterapia/fisioterapia-2018-04-09/","section":"docencia","summary":"Grados: Fisioterapia\nFecha: 9 de abril de 2018\nEjercicio 1 En un estudio se ha medido el arco de rotación de la cabeza en personas que trabajan habitualmente con ordenador y en personas que no.","tags":["Examen"],"title":"Examen de Fisioterapia 2018-04-09","type":"book"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 19 de enero de 2018\nEjercicio 1 Obtén el plano tangente a la superficie $S: e^xy-zy^2+\\frac{x^4}{z}=-1$ en el punto $P=(0,1,2)$ y la recta tangente a la curva obtenida al intersecar $S$ con el plano $z=2$ en el mismo punto $P$.\nSolución Plano tangente: $x-3y-z+5=0$.\nRecta tangente: $(3t,1+t)$ o $y=\\frac{x}{3}+1$. Ejercicio 2 Se sabe que un organismo metaboliza el alcohol a un ritmo del triple de la cantidad de alcohol presente en cada instante. Si en el instante inicial el organismo no contiene alcohol y se empieza a suministrar alcohol a un ritmo constante de 12 cl la hora, ¿cuánto alcohol habrá en el organismo al cabo de 5 horas? ¿Cuál será la máxima cantidad de alcohol que tendrá el organismo? ¿Cuándo alcanzará dicha cantidad?\nSolución Sea $y(t)$ la cantidad de alcohol en el organismo en el instante $t$.\nEcuación diferencia: $y\u0026rsquo;=12-3y$.\nSolución: $y(t)=4-4e^{-3t}$.\n$y(5)=3.99$ cl.\nLa cantidad máxima de alcohol será 4 cl y se alcanzará en $t=\\infty$. Ejercicio 3 Tres alelos $A$, $B$ y $0$ determinan los cuatro grupos sanguíneos $A$ ($AA$ o $A0$), $B$ ($BB$ o $BO$), $0$ ($00$) y $AB$. La ley de Hardy-Weinberg establece que la proporción de individuos en una población que tiene dos alelos diferentes es\n$$ p(x,y,z)=2xy+2xz+2yz $$\ndonde $x$, $y$ y $z$ son las proporciones de $A$, $B$ y $O$ en la población. Calcular el máximo de $p$ sabiendo que $x+y+z=1$.\nSolución Hay un mínimo local en $(\\frac{1}{3},\\frac{1}{3})$ y $f(\\frac{1}{3},\\frac{1}{3})=\\frac{2}{3}$. Ejercicio 4 La ecuación\n$$ \\ln z - \\frac{x^2y}{z}=-1 $$\nexpresa el equilibrio en una reacción en la que intervienen tres sustancias $x$, $y$ y $z$. Considerando a $z$ como una función implícita de $x$ e $y$, calcular la variación que experimenta $z$ en el instante en que $x=y=z=1$, cuando $y$ decrece a la misma velocidad de que crece $x$.\nSolución Derivada direccional de $z$ en $(1,1,1)$ siguiendo la dirección del vector $\\mathbf{v}=(1,-1)$: $z\u0026rsquo;_\\mathbf{v}(1,1,1)=\\frac{1}{2\\sqrt{2}}$. ","date":1516320000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"0780d8b967454c9859f4894380b0b1b5","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2018-01-19/","publishdate":"2018-01-19T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2018-01-19/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 19 de enero de 2018\nEjercicio 1 Obtén el plano tangente a la superficie $S: e^xy-zy^2+\\frac{x^4}{z}=-1$ en el punto $P=(0,1,2)$ y la recta tangente a la curva obtenida al intersecar $S$ con el plano $z=2$ en el mismo punto $P$.","tags":["Examen"],"title":"Examen de Farmacia 2018-01-19","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 19 de Enero de 2018\nEjercicio 1 Se realizó un estudio en pacientes mayores de 60 años de la relación entre la edad de los pacientes $X$ y el número de veces que han acudido a consulta médica en el último año $Y$, obteniéndose los siguientes resultados:\n$$ \\begin{array}{lrrrrrrrr} \\hline \\mbox{Edad} \u0026amp; 62 \u0026amp; 65 \u0026amp; 71 \u0026amp; 79 \u0026amp; 83 \u0026amp; 88 \u0026amp; 90 \u0026amp; 95 \\newline \\mbox{Consultas} \u0026amp; 2 \u0026amp; 3 \u0026amp; 4 \u0026amp; 6 \u0026amp; 6 \u0026amp; 8 \u0026amp; 10 \u0026amp; 14 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular el número de veces que acudirá a consulta médica un paciente de 70 años según el modelo de regresión lineal. Lo mismo pero empleando el modelo de regresión exponencial. Razonar cuál de las dos predicciones es más fiable. Teniendo en cuenta que la ecuación del modelo potencial es $Y=aX^b$, explicar qué transformaciones hay que aplicar a las variables $X$ e $Y$ para convertirlo en un modelo lineal. Usar las siguientes sumas para los cálculos: $\\sum x_i=633$, $\\sum \\log(x_i)=34.8835$, $\\sum y_j=53$, $\\sum \\log(y_j)=13.7827$, $\\sum x_i^2=51109$, $\\sum \\log(x_i)^2=152.28$, $\\sum y_j^2=461$, $\\sum \\log(y_j)^2=26.6206$, $\\sum x_iy_j=4509$, $\\sum x_i\\log(y_j)=1144.0108$, $\\sum \\log(x_i)y_j=235.1289$, $\\sum \\log(x_i)\\log(y_j)=60.7921$.\nSolución Modelo lineal de Consultas sobre Edad:\n$\\bar x=79.125$ años, $s_x^2=127.8594$ años² .\n$\\bar y=6.625$ consultas, $s_y^2=13.7344$ consultas².\n$s_{xy}=39.4219$ años⋅consultas.\nRecta de regresión de Consultas sobre Edad: $y=-17.771 + 0.3083x$.\n$y(70) =3.8116$ consultas. $\\overline{\\log(y)}=1.7228$ log(consultas), $s_{\\log(y)}^2=0.3594$ log(consultas)².\n$s_{x\\log(y)}=6.6823$ años⋅log(consultas).\nModelo exponencial de consultas sobre Edad: $y=e^{-2.4124 + 0.0523x}$.\n$y(70)=3.4762$ consultas. Coeficiente de determinación lineal de Consultas sobre Edad $r^2=0.885$.\nCoeficiente de determinación exponencial de Consultas sobre Edad $r^2=0.9716$.\nPor tanto, el modelo exponencial explica un poco mejor el número de consultas médicas con respecto a la edad. Hay que aplicar la transformación logarítmica tanto a las Consultas como a la Edad: $\\log(Y)=\\log(aX^b)\\Rightarrow \\log(Y)=\\log(a)+\\log(X^b)=\\log(a)+b\\log(X)=a\u0026rsquo;+b\\log(X)$. Ejercicio 2 Se ha medido la concentración de polen en granos/m$^3$ de una determinada planta en el centro de una ciudad a lo largo de un año y se han obtenido los siguientes resultados:\n$$ \\begin{array}{cr} \\hline \\mbox{Nivel de polen} \u0026amp; \\mbox{Nº de días} \\newline 0-300 \u0026amp; 51 \\newline 300-500 \u0026amp; 60 \\newline 500-600 \u0026amp; 79 \\newline 600-800 \u0026amp; 91 \\newline 800-1000 \u0026amp; 60 \\newline 1000-1300 \u0026amp; 24 \\newline \\hline \\end{array} $$\nSi el 75% de los días se considera que los niveles de polen no han sido excesivos. ¿A partir de que nivel de polen se ha considerado un nivel excesivo? Se ha establecido una alerta naranja cuando el nivel de polen se sitúa entre 575 y 850. ¿En cuántos días del año se produjo dicha alerta naranja? ¿Hay datos atípicos en la muestra? Sabemos que hay otra planta que tiene un ciclo de polinización muy parecido al de la muestra, con unos niveles de polen que se pueden calcular de la forma $Y=0.5X-100$. ($Y$= niveles de la otra planta y $X$=niveles de la planta de la muestra) ¿Cuál sería la media de nivel de polen para esta otra planta? ¿Es un valor más o menos representativo que la de los niveles de la planta de la muestra recogida? ¿Se podría considerar que el nivel de polen en general sigue una distribución normal? Usar las siguientes sumas para los cálculos: $\\sum x_i=220400$ granos/m$^3$, $\\sum x_i^2=159575000$ (granos/m$^3$)$^2$, $\\sum (x_i-\\bar x)^3=261917220.867$ (granos/m$^3$)$^3$ y $\\sum (x_i-\\bar x)^4=4872705679772.61$ (granos/m$^3$)$^4$.\nSolución $P_{75}=784.0417$ granos/m³. $F(575)=0.4664$ y $F(860)=0.8192$, por lo que la frecuencia del número de días con alerta es $0.3528$ que corresponde a $128.77$ días. $Q_1=434.1849$ granos/m³, $Q_3=784.0417$ granos/m³ y $RI=349.8568$ granos/m³. Vallas: $v_1=-90.6001$ granos/m³ y $v_2=1308.8269$ granos/m³.\nComo todos los valores caen dentro de las vallas no hay datos atípicos. $\\bar x=603.8356$ granos/m³, $s_x^2=72574.3291$ (granos/m³)², $s_x=269.3962$ granos/m³ y $cv_x=0.4461$\n$\\bar y=201.9178$ granos/m³, $s_y=134.6981$ granos/m³ y $cv_y=0.6671$.\nLa media de $X$ es más representativa que la media de $Y$ ya que $cv_x\u0026lt;cv_y$. $g_1=0.0367$ y $g_2=-0.4654$. Como ambos están entre -2 y 2, se puede asumir que el nivel de polen se distribuye normalmente. Ejercicio 3 Los niveles de polen de gramíneas registrados en Madrid durante el año 2017 se distribuyeron de forma normal y tuvieron una media de 90. Si en 42 días del año 2017 se superó los 120 granos de polen/m$^3$ de aire, se pide:\nCalcular la desviación típica del nivel de polen de gramíneas en 2017.\nNota: Si no se sabe calcular tomar una desviación típica de 20 granos/m$^3$ para los demás apartados. ¿Durante cuantos días no se llegaron a 50 granos de polen/m$^3$ de aire? Si el 20% de los días hubo un nivel excesivamente alto de polen y hubo que avisar a la población, ¿a partir de qué nivel de polen se produjeron estos avisos? Solución Sea $X$ el nivel de polen en Madrid en 2017. $X\\sim N(90,\\sigma)$.\n$\\sigma=25$ granos/m³. $P(X\\leq 50)=0.0548$ que corresponde a $20.0017$ días. $P_{80}=111.0405$ granos/m³. Ejercicio 4 Se han ensayado dos tipos de medicamentos para reducir los niveles de colesterol y se ha observado que el medicamento $A$ es efectivo en el 75% de los casos y el medicamento B es efectivo en el $85%$ de los casos. Sin embargo, hay un 5% de casos en los que ninguno de los medicamentos es efectivo.\n¿En qué porcentaje de casos sería efectivo exclusivamente el medicamento $A$? Si en un paciente se ha comprobado que el medicamento $A$ es efectivo, ¿qué probabilidad hay de que también lo sea el medicamento $B$? Si en un paciente se ha comprobado que el medicamento $B$ no es efectivo, ¿qué probabilidad hay de que el medicamento $A$ si lo sea? ¿Es independiente la efectividad de estos medicamentos? Solución $P(A\\cap \\overline B)=0.1$, es decir, un $10%$. $P(B|A)=0.8667$. $P(A|\\overline B)=0.6667$. $P(B|A)\\neq P(B)$, de manera que los sucesos son dependientes. Ejercicio 5 El número medio de nacimientos que se producen en una semana en un hospital es 14. Se pide:\nCalcular la probabilidad de que un día se produzcan más de 2 nacimientos. Calcular la probabilidad de que una semana haya más de un día en que no se produzcan nacimientos. Solución Sea $X$ el número de nacimientos en un día. $X\\sim P(2)$ y $P(X\u0026gt;2)=0.3233.$ Sea $Y$ el número de días sin nacimientos en una semana. $Y\\sim B(7,0.1353)$ y $P(Y\u0026gt;1)=0.2427$. Ejercicio 6 Se está trabajando en el diseño de un test para detectar una enfermedad y para ensayarlo se dispone de una muestra de 250 individuos de los cuales 50 presentan la enfermedad y 200 son individuos sanos. Si se pretende que el test tenga un valor predictivo positivo de $0.7$ y un valor predictivo negativo de $0.9$, al realizar los ensayos sobre la muestra:\n¿Cuántos de los individuos sanos deberían dar positivo en el test? ¿Cuántos de los individuos enfermos deberían dar negativo en el test? ¿Qué probabilidad hay de que un individuo que ha dado dos veces positivo en el test sufra la enfermedad? Solución Sea $E$ el suceso correspondiente a tener la enfermedad.\n$P(+|\\overline{E})=0.0625\\Rightarrow 12.5$ personas. $P(-|E)=0.4165\\Rightarrow 20.825$ personas. $P(E|+\\cap +)=0.9561$. ","date":1516320000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"bb6dacea9b1190a1bb5258d5f95ea261","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2018-01-19/","publishdate":"2018-01-19T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2018-01-19/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 19 de Enero de 2018\nEjercicio 1 Se realizó un estudio en pacientes mayores de 60 años de la relación entre la edad de los pacientes $X$ y el número de veces que han acudido a consulta médica en el último año $Y$, obteniéndose los siguientes resultados:","tags":["Examen"],"title":"Examen de Farmacia 2018-01-19","type":"book"},{"authors":["Alfonso; Sánchez-Alberca, Alfredo; Sanchez-Rodríguez, María Luisa; García-Medina, José Javier Parra-Blesa"],"categories":[],"content":"","date":1514764800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"32a70383266fe72dd001692ee75901b5","permalink":"/publication/analisis-2018/","publishdate":"2020-09-16T21:26:03.202933Z","relpermalink":"/publication/analisis-2018/","section":"publication","summary":"","tags":[],"title":"Análisis epidemiológico evolutivo del daño sectorizado en la papila y retina papilar a través de OCT. Nueva clasificación de grados de GCAA.","type":"publication"},{"authors":["Alfonso Parra Blesa y Alfredo Sánchez Alberca"],"categories":[],"content":"","date":1514764800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"8640a1da22ff6713a8127e31da65afaf","permalink":"/publication/analisis-2018-2/","publishdate":"2020-09-16T21:26:03.500896Z","relpermalink":"/publication/analisis-2018-2/","section":"publication","summary":"","tags":[],"title":"Análisis estadístico inferencial y descriptivo de las capas retinianas; glaucoma versus no glaucoma","type":"publication"},{"authors":["Alfonso Parra Blesa y Alfredo Sánchez Alberca"],"categories":[],"content":"","date":1514764800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"5685a40d87b8cfe9d30a2750e895478b","permalink":"/publication/clasificacion-2018/","publishdate":"2020-09-16T21:26:03.396092Z","relpermalink":"/publication/clasificacion-2018/","section":"publication","summary":"","tags":[],"title":"Clasificación por estadios del glaucoma primario de ángulo abierto usando valores normalizados del anillo BMO","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1514764800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"51e29658e8323bebe5e43b0869705ba6","permalink":"/publication/nueva-2018-2/","publishdate":"2020-09-16T21:26:03.299049Z","relpermalink":"/publication/nueva-2018-2/","section":"publication","summary":"","tags":[],"title":"Una nueva taxonomía de colecciones y de funciones de similitud para su comparación","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1514764800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"6135f07167be641ec45b3f1793a049e7","permalink":"/publication/nueva-2018/","publishdate":"2020-09-16T21:26:01.940216Z","relpermalink":"/publication/nueva-2018/","section":"publication","summary":"","tags":[],"title":"Una nueva taxonomía de colecciones y de funciones de similitud para su comparación","type":"publication"},{"authors":null,"categories":["Estadística","Bioestadística","Óptica"],"content":"Titulación: Grado en Óptica\nFecha: 18 de Diciembre de 2017\nEjercicio 1 En un examen de estadística al que se han presentado 66 alumnos se ha contado el número de exámenes finalizados cada media hora, obteniendo el siguiente polígono:\nSe pide:\nConstruir la tabla de frecuencias del tiempo de finalización del examen. ¿Cuánto tiempo tiene que pasar para que hayan finalizado el examen la mitad de los alumnos? ¿Qué porcentaje de alumnos habrá terminado a los 100 minutos de examen? ¿Cuál es el tiempo de duración del examen que mejor representa a los estudiantes de la muestra? ¿Es un valor representativo? Según su simetría y apuntamiento, ¿se puede afirmar que la distribución del tiempo de duración del examen es normal? Se sabe que en otro examen diferente el tiempo medio de finalización es de 100 minutos y la desviación típica es 20 minutos. Un alumno tardó 110 minutos en el examen de Estadística y 122 minutos en este otro examen. ¿Qué examen finalizó antes en términos relativos? Utilizar las siguientes sumas para los cálculos: $\\sum x_i=5670$ min, $\\sum x_i^2=580050$ min², $\\sum (x_i-\\bar x)^3=-2155537.1901$ min³ y $\\sum (x_i-\\bar x)^4=311877385.4245$ min⁴.\nSolución $$ \\begin{array}{crrrrr} \\hline X \u0026amp; x_i \u0026amp; n_i \u0026amp; f_i \u0026amp; N_i \u0026amp; Fi \\newline 0-30 \u0026amp; 15 \u0026amp; 9 \u0026amp; 0.1364 \u0026amp; 9 \u0026amp; 0.1364 \\newline 30-60 \u0026amp; 45 \u0026amp; 6 \u0026amp; 0.0909 \u0026amp; 15 \u0026amp; 0.2273 \\newline 60-90 \u0026amp; 75 \u0026amp; 14 \u0026amp; 0.2121 \u0026amp; 29 \u0026amp; 0.4394 \\newline 90-120 \u0026amp; 105 \u0026amp; 26 \u0026amp; 0.3939 \u0026amp; 55 \u0026amp; 0.8333 \\newline 120-150 \u0026amp; 135 \u0026amp; 11 \u0026amp; 0.1667 \u0026amp; 66 \u0026amp; 1 \\newline \\hline \\end{array} $$ $Me=94.6154$ min. $F(100)=0.5708\\Rightarrow 57.08%$ de los estudiantes. $\\bar x=85.9091$ min, $s^2=1408.2645$ min², $s=37.5268$ min y $cv=0.4368$, luego la dispersión relativa con respecto a la media es moderada y la representatividad de la media también. $g_1=-0.618$, de manera que la distribución es asimétrica hacia la izquierda. $g_2=-0.6173$, de manera que la distribución es menos apuntada de lo normal (leptocúrtica). Como tanto $g_1$ como $g_2$ están entre -2 y 2 podemos asumir que la muestra proviene de una población normal. Examen de Estadística: $z(110)=0.642$.\nOtro examen: $z(122)=1.1$.\nAsí pues, terminó antes el examen de Estadística. Ejercicio 2 En un estudio sobre la presbicia se tomó una muestra de pacientes y se midió la edad y la distancia mínima a la que eran capaces de leer una frase en cm. Los resultados se muestran en la siguiente tabla:\n$$ \\begin{array}{lrrrrrrrrrrrr} \\hline \\mbox{Edad} \u0026amp; 25 \u0026amp; 46 \u0026amp; 76 \u0026amp; 32 \u0026amp; 18 \u0026amp; 43 \u0026amp; 40 \u0026amp; 51 \u0026amp; 68 \u0026amp; 54 \u0026amp; 47 \u0026amp; 37\\newline \\mbox{Distancia mínima de enfoque} \u0026amp; 15 \u0026amp; 28 \u0026amp; 51 \u0026amp; 23 \u0026amp; 14 \u0026amp; 28 \u0026amp; 25 \u0026amp; 36 \u0026amp; 47 \u0026amp; 42 \u0026amp; 31 \u0026amp; 29\\newline \\hline \\end{array} $$\nSe pide:\nCalcular la recta de regresión de la distancia mínima de enfoque con respecto a la edad. ¿Cuánto aumenta la distancia mínima de enfoque por cada año que pasa? Calcular el modelo de regresión logarítmico de la distancia mínima de enfoque con respecto a la edad. Utilizar el mejor modelo de regresión de los dos anteriores para predecir la distancia mínima de enfoque a los 65 años. ¿Es fiable esta predicción? Si la presbicia se diagnostica cuando la distancia mínima de enfoque es de 35 cm, ¿a qué edad aparecerá la presbicia? Utilizar las siguientes sumas para los cálculos ($X=$Edad e $Y=$Distancia):\n$\\sum x_i=537$, $\\sum \\log(x_i)=44.7858$, $\\sum y_j=369$, $\\sum \\log(y_j)=40.2703$, $\\sum x_i^2=27033$, $\\sum \\log(x_i)^2=168.9328$, $\\sum y_j^2=12815$, $\\sum \\log(y_j)^2=136.9234$, $\\sum x_iy_j=18561$, $\\sum x_i\\log(y_j)=1872.0711$, $\\sum \\log(x_i)y_j=1425.5363$, $\\sum \\log(x_i)\\log(y_j)=152.0296$.\nSolución Modelo de regresión de la distancia mínima de enfoque sobre la edad:\n$\\bar x=44.75$ años, $s_x^2=250.1875$ años².\n$\\bar y=30.75$ cm, $s_y^2=122.3542$ cm².\n$s_{xy}=170.6875$ años⋅cm.\nRecta de regresión de la distancia mínima de enfoque sobre la edad: $y=0.2198 + 0.6822x$.\nPor cada año que pasa la distancia mínima de enfoque aumenta 0.6822 cm.\n$\\overline{\\log(x)}=3.7322$ log(años), $s_{\\log(x)}^2=0.1488$ log(años)².\n$s_{\\log(x)y}=4.031$ log(años)⋅cm.\nModelo de regresión logarítmico de la distancia mínima de enfoque sobre la edad: $y=-70.3708 + 27.0945\\log(x)$.\nCoeficiente de determinación lineal: $r^2=0.9517$.\nCoeficiente de determinación logarítmico: $r^2=0.8926$.\nPor tanto, el modelo lineal explica mejor la relación entre la distancia mínima de enfoque y la edad, ya que su coeficiente de determinación es mayor.\n$y(65)=44.5653$ cm.\nRecta de regresión de la edad sobre la distancia mínima de enfoque: $x=1.8529 + 1.395y$.\n$x(35)=50.6789$ años.\n","date":1513555200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"4831e9bbc2d097fb6de782b57cbe699a","permalink":"/docencia/estadistica/examenes/optica/optica-2017-12-18/","publishdate":"2017-12-18T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/optica/optica-2017-12-18/","section":"docencia","summary":"Titulación: Grado en Óptica\nFecha: 18 de Diciembre de 2017\nEjercicio 1 En un examen de estadística al que se han presentado 66 alumnos se ha contado el número de exámenes finalizados cada media hora, obteniendo el siguiente polígono:","tags":["Examen"],"title":"Examen de Óptica 2017-12-18","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Titulación: Grado en Farmacia y Biotecnología\nFecha: 27 de Noviembre de 2017\nEjercicio 1 El siguiente diagrama muestra la distribución de emisiones de NO₂ (𝜇g/m³) en Madrid en los días de octubre de 2017.\nLa normativa europea sobre calidad del aire establece que el valor medio mensual no debe exceder de 40 𝜇g/m³. ¿Se ha cumplido la norma en el mes de Octubre? ¿Es este un valor representativo de las mediciones tomadas en octubre? El Ayuntamiento de Madrid ha decidido que se establecerán restricciones de velocidad en los accesos los días en los que se superen los 72 𝜇g/m³ y que además de estas restricciones se establecerán también restricciones al aparcamiento los días que se superen los 92 𝜇g/m³. ¿Qué porcentaje de días de octubre se establecieron solo restricciones de velocidad en los accesos? De acuerdo con esta muestra de datos tomada durante el mes de octubre, ¿puede establecerse por la forma de la distribución de la muestra que la distribución de las emisiones en toda la ciudad sigue una distribución normal? Además del nivel de NO₂, el Ayuntamiento también controla los niveles de SO₂, y se sabe que el nivel medio de esta sustancia durante el mes de octubre fue de 2.85 𝜇g/m³ con una desviación típica de 0.42 𝜇g/m³. Si un día hubo un nivel de NO₂ de 46 y un nivel de SO₂ de 2.24, ¿cuál de las dos sustancias tenía niveles más altos en referencia a sus mediciones? Si el índice de calidad del aire (ICA) puede estimarse multiplicando el nivel de NO₂ por 0.95 y sumándole una cantidad fija de 30. ¿Cuál fue el índice medio de la calidad del aire en Madrid el mes de octubre? ¿Es un valor más o menos representativo que el nivel de emisiones medio de NO₂? ¿Existen días atípicos en las emisiones de NO₂ del mes de octubre? Justificar la respuesta. Utilizar las siguientes sumas para los cálculos: $\\sum x_i=1945$ 𝜇g/m³, $\\sum x_i^2=131575$ (𝜇g/m³)², $\\sum (x_i-\\bar x)^3=93995.838$ (𝜇g/m³)³ y $\\sum (x_i-\\bar x)^4=7766271.021$ (𝜇g/m³)⁴.\nSolución $\\bar x=62.7419$ 𝜇g/m³, de manera que no se cumple el requisito.\n$s^2=307.8044$ (𝜇g/m³)², $s=17.5444$ 𝜇g/m³, $cv=0.2796$.\nComo el coeficiente de variación es menor que 0.3 hay poca variabilidad en los datos y la media es bastante representativa. $F(72)=0.7097$ y $F(92)=0.9161$, de manera que el porcentaje de días únicamente con restricciones de velocidad es $20.64%$. $g_1=0.5615$ y $g_2=-0.3558$. Como ambos están entre -2 y 2, se puede asumir que la distribución de emisiones es normal. NO₂: $z(46)=-0.9543$.\nSO₂: $z(2.24)=-1.4524$.\nAsí pues, las emisiones de NO₂ son relativamente mayores. Sea $y=0.95x+30$ el ICA.\n$\\bar y=89.6048$, $s_y=16.6671$, $cv=0.186$. Como el coeficiente de variación es menor, la media del ICA es más representativa. $Q_1=49.5816$ 𝜇g/m³, $Q_3=74.0093$ 𝜇g/m³ y $IQR=24.4277$ 𝜇g/m³. Vallas: $v_1=12.94$ 𝜇g/m³ y $v_2=110.65$ 𝜇g/m³. Por tanto, no hay datos atípicos. Ejercicio 2 La siguiente tabla muestra las tasas de incidencia de gripe por cada 100.000 habitantes registradas al cabo de un número de días desde el comienzo de el estudio.\n$$ \\begin{array}{lrrrrrrrr} \\hline \\mbox{Días} \u0026amp; 1 \u0026amp; 5 \u0026amp; 8 \u0026amp; 12 \u0026amp; 20 \u0026amp; 26 \u0026amp; 38 \u0026amp; 44 \\newline \\mbox{Tasa de gripe} \u0026amp; 60 \u0026amp; 66 \u0026amp; 71 \u0026amp; 80 \u0026amp; 106 \u0026amp; 132 \u0026amp; 194 \u0026amp; 235 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular la tasa de incidencia de gripe a los 50 días desde el comienzo del estudio mediante un modelo de regresión lineal. ¿Cuánto varía la tasa de incidencia de gripe cada día según el modelo lineal? Calcular la tasa de incidencia de gripe a los 50 días desde el comienzo del estudio mediante un modelo de regresión exponencial. ¿Cuál de las predicciones anteriores es más fiable? Razonar la respuesta. Utilizar las siguientes sumas para los cálculos ($X=$Días e $Y=$Tasa de gripe): $\\sum x_i=154$, $\\sum \\log(x_i)=19.8494$, $\\sum y_j=944$, $\\sum \\log(y_j)=37.2024$, $\\sum x_i^2=4690$, $\\sum \\log(x_i)^2=60.2309$, $\\sum y_j^2=140918$, $\\sum \\log(y_j)^2=174.8363$, $\\sum x_iy_j=25182$, $\\sum \\log(x_i)y_j=2795.2484$, $\\sum x_i\\log(y_j)=772.3504$, $\\sum \\log(x_i)\\log(y_j)=96.1974$.\nSolución Modelo lineal de la tasa de gripe sobre los días:\n$\\bar x=19.25$ días, $s_x^2=215.6875$ días².\n$\\bar y=118$ personas, $s_y^2=3690.75$ personas².\n$s_{xy}=876.25$ días⋅personas.\nRecta de regresión de la tasa de gripe sobre los días: $y=39.7951 + 4.0626x$.\n$y(50) =242.9247$. $4.0626$ personas por día. $\\overline{\\log(y)}=4.6503$ log(personas), $s_{\\log(y)}^2=0.2293$ log(personas)².\n$s_{x\\log(y)}=7.0255$ días⋅log(personas).\nModelo exponencial de la tasa de gripe sobre los días: $y=e^{4.0233 + 0.0326x}$.\n$y(50)=284.8357$. Coeficiente de determinación lineal de la tasa de gripe sobre los días $r^2=0.9645$. Coeficiente de determinación exponencial de la tasa de gripe sobre los días $r^2=0.9982$.\nAsí pues, el modelo exponencial explica un poco mejor la evolución de la tasa de gripe con respecto a los días. ","date":1511740800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"c907f3f04ebe0c05859854545be855b5","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2017-11-27/","publishdate":"2017-11-27T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2017-11-27/","section":"docencia","summary":"Titulación: Grado en Farmacia y Biotecnología\nFecha: 27 de Noviembre de 2017\nEjercicio 1 El siguiente diagrama muestra la distribución de emisiones de NO₂ (𝜇g/m³) en Madrid en los días de octubre de 2017.","tags":["Examen"],"title":"Examen de Farmacia 2017-11-27","type":"book"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 6 de noviembre de 2017\nEjercicio 1 Un adenoma (tumor benigno) suele tener forma esférica. Se sabe que a lo largo del tiempo el radio del adenoma varía con una tasa igual a la mitad de su valor en cada momento. Determinar la variación del volumen del tumor cuando el radio es de 5mm.\nSi el radio se ha medido con un margen de error de $\\pm 0.01$ mm, ¿cuál será el margen de error en la medición del volumen?\nNota: El volumen de una esfera es $\\frac{4}{3}\\pi r^3$.\nSolución Tasa de variación del volumen: $250\\pi$ mm³/s.\nError en el volumen: $\\pi$ mm³. Ejercicio 2 El peso de un bebé durante los primeros meses de vida crece de manera proporcional al inverso del peso. Un bebé pesa 3.3 kg al nacer y 4.3 kg después de un mes.\nCalcular el peso cuando el bebé tiene un año.\n¿Cuánto tiempo tiene que pasar para que el bebé tenga un peso de 8 kg?\n¿Es el modelo del peso bueno para estudiar el cambio de peso durante toda la vida de la persona?\nSolución Sea $w(t)$ e peso del beé en el instante $t$.\nEcuación diferencial: $w\u0026rsquo;=\\dfrac{k}{w}$\nSolución particular: $w(t)=\\sqrt{7.6t+10.89}$.\n$w(12)=10.1$ kg. 7 meses. No, porque la función es siempre creciente. Ejercicio 3 La función $f(x,y)=ye^{-x^2-\\frac{1}{2}y^2}$, expresa la cantidad de una sustancia $z=f(x,y)$ en función de otras dos $x$ e $y$ en una reacción química.\nCalcular el valor máximo local de $z$ teniendo en cuenta que $x\\geq 0$ e $y\\geq 0$.\n¿Cuál será la variación de $z$ cuando $x=1$ e $y=0$, si comenzamos a aumentar la cantidad de $x$ al doble de ritmo de la de $y$?\nCalcular el polinomio de Taylor de segundo grado de $f$ en el punto $(1,0)$.\nSolución $f$ tiene un máximo local en $(0,1)$ y el máximo valor es $z=f(0,1)=1/\\sqrt{e}$. Derivada direccional de $f$ en $(1,0)$ siguiendo la dirección del vector $v=(2,1)$: $f\u0026rsquo;_v(1,0)=\\frac{1}{e\\sqrt{5}}$. $P^2_{f,(1,0)}(x,y)=\\displaystyle\\frac{-2xy+3y}{e}$. Ejercicio 4 Dada la función vectorial $h(t)=(t\\cos(t), \\cos(t), \\ln(t^2+1))$, calcular la ecuación de la recta tangente y del plano normal a la trayectoria de $h$ en el punto $(0,1,0)$.\nSolución Recta tangente: $(t,1,0)$.\nPlano normal: $x=0$. ","date":1509926400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"6354a5378bf4daeee02d97f8712d18fa","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2017-11-06/","publishdate":"2017-11-06T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2017-11-06/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 6 de noviembre de 2017\nEjercicio 1 Un adenoma (tumor benigno) suele tener forma esférica. Se sabe que a lo largo del tiempo el radio del adenoma varía con una tasa igual a la mitad de su valor en cada momento.","tags":["Examen"],"title":"Examen de Farmacia 2017-11-06","type":"book"},{"authors":null,"categories":["Cálculo","Estadística"],"content":"A partir de ahora están disponibles varias hojas de fórmulas de cálculo y Estadística.\nEstas hojas contienen un resumen con las principales fórmulas utilizadas en Cálculo y Estadística.\nLas hojas de cálculo pueden descargarse desde los siguientes enlaces:\nHoja de fórmulas de Cálculo Hoja de fórmulas de Estadística Estaría muy agradecido si me informáis de cualquier error que detectéis en estas hojas.\n","date":1509618110,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1642926499,"objectID":"fa9373169ec5ae54b4365f0f5fc3e084","permalink":"/post/chuletas/","publishdate":"2017-11-02T10:21:50Z","relpermalink":"/post/chuletas/","section":"post","summary":"A partir de ahora están disponibles varias hojas de fórmulas de cálculo y Estadística.\n","tags":["Chuleta"],"title":"Hojas de fórmulas de Estadística y Cálculo","type":"post"},{"authors":null,"categories":[],"content":"En este artículo ofrezco varios consejos o buenas prácticas para ayudar a estudiantes de grado, especialmente durante su primer año, para sacarle el máximo partido a las clases, rentabilizar mejor su trabajo y culminar su proceso de aprendizaje con éxito.\nLos consejos que aquí aparecen se dan desde la experiencia de bastantes años de docencia, y teniendo en cuenta sobre todo, que el autor también fue y sigue siendo alumno.\nLa mayoría de estos consejos pueden parecer obvios pero muchos estudiantes los ignoran o fracasan al intentar ponerlos en práctica.\nMotivación La primera condición para lograr el éxito, no sólo en una titulación, sino en cualquier proyecto que se emprenda a lo largo de la vida, es la motivación. Sin motivación, lo más fácil es que a las primeras dificultades o inconvenientes que aparezcan tiremos la toalla, y debemos tener presente que seguro habrá dificultades. Conviene tener siempre presente las razones por las que se emprende el camino, y visualizar la meta. Es decir, caminar con un ojo puesto en el horizonte para saber hacia dónde nos dirigimos, y con el otro puesto en el camino para no tropezar.\nEs cierto que a veces se acaba en una carrera por imposición (de los padres, del mercado laboral, etc.), pero incluso en estos casos hay que ser positivos y pensar que lo que se aprenda sin duda nos hará mejores y seguramente nos servirá en un futuro. Además, en el peor de los casos hay que pensar que ¡cuanto antes se pase el trago mejor!, por lo que conviene poner toda la carne en el asador.\nUna grado supone mucho esfuerzo y sacrificio, pero debemos pensar que la mayor parte de las personas que comienza una grado lo acaba con éxito, muchas de ellas menos inteligentes que tú, que han pasado por las mismas dificultades y al final han superado los obstáculos. Si conoces a alguna, su consejo puede serte muy útil.\nToma la iniciativa En el proceso de aprendizaje, la alumna no es el objeto al cual hay que dotar de una serie de conocimientos y capacidades, sino el propio sujeto de su formación. La alumna está acostumbrada a seguir el rumbo que marca la profesora, los padres, la tutora, pero realmente es ella quien, una vez motivada, debe llevar la iniciativa en el proceso de aprendizaje, pues lo que está en juego es su formación y desarrollo integral. Este convencimiento debe llevar a la alumna a ir incluso por delante de sus docentes, preparando anticipadamente los capítulos del curso, trabajando ejercicios no propuestos, ampliando la documentación sobre los temas de clase, etc. De esta manera, la alumna no sólo aprenderá más, más rápido y mejor, sino que al mismo tiempo se estará preparando para su futuro profesional, en el que en muchas ocasiones no contará con nadie que le dirija o le aconseje sobre los problemas que se le presenten en su trabajo.\n¿Qué supone tomar la iniciativa? Explorar la materia por uno mismo. Preparar anticipadamente las clases. Intentar resolver los problemas sin ayuda. Ampliar la información dada en clase con otras fuentes. Intentar aplicar lo aprendido a tu propia vida o en otros contextos. Dar rienda suelta a tu curiosidad y creatividad. La profesora es tu aliada A menudo solemos pensar desgraciadamente que una profesora la tiene tomada con nosotras, que su objetivo es hacernos la vida imposible. En otras ocasiones, la vemos más como una juez que al final del curso emitirá el veredicto (aprobado o suspenso). Sin embargo, a pesar de la desagradable tarea de evaluar, el principal objetivo de una profesora es enseñar. Es cierto que a veces puede haber roces personales entre profesora y alumna, al igual que puede haberlos en una familia o entre personas cualesquiera que mantienen algún tipo de relación, pero en la inmensa mayoría de los casos, las acciones de una profesora, con mayor o menor motivación, mayor o menor éxito, tienen como único fin el aprendizaje de sus alumnas. Así que ¡cambia el chip!, piensa en tu profesora como en una aliada, no como una enemiga.\nSaca el máximo partido a tus clases Las clases presenciales no son la única forma de aprender, pero sí una de las más efectivas, aunque para ello es necesario saber aprovecharlas. Asistir a clase sólo por el hecho de firmar la lista de asistencia o de que la profesora me vea, sin otro interés, prácticamente no sirve de nada, y puede llegar a ser incluso contraproducente. Así pues, si asistes a una clase, olvida otras asignaturas o asuntos y trata de poner los cinco sentidos en el tema que se trata en la clase.\nPor otro lado, también necesitas hacer un uso adecuado de cada tipo de clase. Cuando se trata de una clase magistral, donde se da una introducción a un nuevo tema, es importante quedarse con las ideas principales y su estructura, y no preocuparse demasiado por los detalles y por anotar absolutamente cada palabra de la profesora.\nUn seminario, por contra, trata de profundizar en un tema concreto. Por tanto, es buena idea acudir con una preparación previa del tema a tratar. De este modo, la clase será sin duda mucho más provechosa ya que rápidamente se aterrizará sobre las dudas o los aspectos menos claros.\nFinalmente, si se trata de una clase de ejercicios, resulta imprescindible haberlos intentado previamente para identificar las principales dificultades o los callejones sin salida. De esta forma, una vez en clase, podremos detenernos justo en esos puntos y aprender realmente lo que nos faltaba por conocer o lo que estábamos haciendo mal. Si nos limitamos a copiar de la pizarra las resoluciones de los ejercicios, sin haberlos intentado previamente, lo más seguro es que no identifiquemos el conocimiento clave, o la técnica necesaria para resolver cada tipo de ejercicio, y que posteriormente no sepamos aplicarlas en ejercicios similares.\nCuando la materia lo permite también puedes pedirle al profesor que invierta la clase.\n¿Qué es una clase invertida? La clase invertida trata de darle la vuelta a la metodología clásica de enseñanza en la que la alumna se enfrenta por primera vez a los contenidos teóricos de la materia fuera de la clase, habitualmente leyendo libros o visualizado videos, y el tiempo de clase se dedica al trabajo más duro de asimilación del conocimiento por medio de resolución de dudas, resolución de problemas o debates.\nPregunta sin miedo En relación con el punto anterior, para un mejor aprovechamiento de las clases es imprescindible la interacción alumna-profesora o alumna-alumna. La profesora, por muy avispada que sea, la mayoría de las veces no sabrá si una alumna no comprende un concepto o se ha perdido en un desarrollo. Sólo si la alumna pregunta o muestra signos de no haber comprendido una explicación, la profesora podrá repetirla o poner más ejemplos para su comprensión. El miedo al ridículo suele ser el principal inconveniente a la hora de preguntar, sobre todo de las alumnas de primer curso. Debemos aprender a vencer la timidez y el miedo al ridículo, porque en la mayoría de los casos nuestras dudas seguro que son generalizadas en la clase, e incluso cuando no lo sean, debemos convencernos de que la pregunta más estúpida es aquélla que no se hace.\nLa retroalimentación es un aspecto esencial para asegurar un progreso sólido en cualquier proceso de aprendizaje.\nAprovecha las tutorías Una de las principales ventajas de los centros privados como este es la facilidad para acceder a las profesoras. Si tenemos claro que la profesora es nuestra aliada no deberíamos dudar en utilizar las tutorías cada vez que se presente algún problema.\nCada alumna debe tener asignada una tutora cuya función es informarle y asesorarle sobre cualquier duda de tipo académico que pueda tener durante el curso, desde la matrícula, hasta los exámenes. Si no conoces cual es tu tutora, pregúntalo en secretaría y concierta una entrevista con ella cuanto antes para presentaros mutuamente. Cada vez que tengas un problema o surja un incidente que no sepas cómo resolver acude a ella. Incluso en el caso de que no haya ningún tipo de incidente deberías visitar a tu tutora regularmente (sobre todo después de las evaluaciones) para revisar juntas la marcha del curso. Piensa que cuanto más conozca una tutora sobre ti y sobre tu trayectoria en la universidad, mejor podrá ayudarte.\nPor otro lado, cada profesora que te imparta una asignatura tiene asignadas unas horas para tutorías. Las tutorías suelen realizarse en el despacho de la profesora en la hora fijada para las mismas.\nUtiliza las tutorías para:\nPedir consejo a la profesora sobre cómo estudiar un determinado tema. Resolver dudas o aclarar conceptos que no has entendido bien (especialmente si has faltado a alguna clase). Pedir ayuda si no eres capaz de resolver algún ejercicio. Revisar tus exámenes. Pero también debes tener en cuenta que:\nLas tutorías no son clases particulares. Esto quiere decir que no están pensadas para repetir una clase dada al grupo, ni para hacer ejercicios con la alumna. A una tutoría hay que acudir con un problema concreto o para resolver una duda concreta, lo que supone que la alumna se ha documentado sobre la cuestión y ha habido un trabajo previo por su parte.\nRespeta el horario de las tutorías. La mayor parte de las profesoras promueven el uso de las tutorías porque además son una forma de interactuar con la alumna para conocerse mejor y ver su evolución. Sin embargo, las profesoras suelen tener otras ocupaciones además de la docencia por lo que, en la medida de lo posible, intenta no acudir a una tutoría fuera de su horario para no interrumpir su trabajo. Si no puedes acudir a una tutoría en la hora establecida, pide cita a la profesora.\nDocuméntate, lee y escribe Otras de las claves para el éxito es disponer de una buena documentación que complemente lo visto en clase. Muchas alumnas tienden a creer que la única información importante a tener en cuenta es la provista por la profesora. Incluso si sólo se piensa en superar los exámenes esto es un error, ya que la información que puede ofrecer una profesora en clase es limitada, incompleta, y a veces errónea (desgraciadamente las profesoras también se equivocan). Por tanto, una buena documentación te puede ayudar no sólo a contrastar lo visto en clase con otras fuentes, sino a comprender mejor lo explicado, y a ampliarlo viendo nuevos ejemplos, descubriendo nuevas aplicaciones, etc.\nPara cada asignatura deberías tener dos o tres libros de referencia durante el curso. En las guías docentes aparece la bibliografía recomendada por las profesoras de la asignatura. Empieza por mirar los libros básicos (la mayoría estarán disponibles en la biblioteca de la universidad), pero no te conformes con eso. Es posible que haya un libro muy bueno sobre una materia pero con el que te cueste comprender las cosas, de modo que no te sirva de mucho. ¡Cada una debe buscar su libro! Por eso es importante que busques aquellos libros que te permitan comprender la materia y con los que te sientas cómoda. Si no encuentras ninguno que te satisfaga entre los propuestos en la bibliografía de la asignatura, pregúntale a la profesora por otros libros o busca más información en Internet. Sobre todo nunca compres un libro antes de haberlo mirado en profundidad.\nUna vez se disponga de una documentación apropiada, debe realizarse una lectura comprensiva de la misma. Esto muchas veces exige leer varias veces el texto, acudir al diccionario cuando no se conozca alguna palabra, subrayar las ideas claves y anotar el texto complementando la información con alguna aclaración o ejemplo. Nunca se debe aprender de memoria algo si no se llega a comprender perfectamente.\nPor otro lado, es muy importante, a la hora de estructurar y asentar las ideas adquiridas sobre un tema, escribir sobre él. Está más que comprobado que escribir sobre un tema ayuda a pensar mejor y a razonar con más rigor. Un recurso muy utilizado es el desarrollo de esquemas o resúmenes que ayuden a sintetizar los conceptos más importantes en pocas páginas, y que además pueden servir para un repaso posterior del tema. También puede ser muy útil hacer pequeñas presentaciones de cada tema. Además, debe tenerse en cuenta que la mayoría de las pruebas de evaluación son escritas, por lo que es importante el entrenamiento en la escritura.\nTrabaja en grupo El trabajo en grupo es importante, no sólo desde el punto de vista del aprendizaje, sino porque además ayuda a desarrollar los hábitos sociales. En la mayoría de las ocupaciones profesionales es natural trabajar en equipo, pues la resolución de determinadas tareas o problemas se simplifica cuando se trabaja cooperativamente. En la enseñanza ocurre algo parecido, pues el aprendizaje colaborativo suele ser más rápido y mejor (y más divertido). De esta manera, el trabajo en grupo es útil en muchos aspectos:\nAyuda a desarrollar habilidades sociales. Refuerza la motivación de la alumna al sentirse miembro de un equipo. Enriquece el aprendizaje con la aportación de otros puntos de vista. Ayuda a desarrolla la capacidad crítica de la alumna. Pero aprender a trabajar en grupo no es fácil. Un grupo maduro es aquél en el que hay plena participación de sus miembros a la hora de tomar decisiones y de repartir tareas, y donde cada miembro asume su responsabilidad en la parte del trabajo que le corresponda, apoyándose en los demás cuando sea necesario. Adquirir las habilidades de trabajo en grupo lleva tiempo y sobre todo práctica, por eso cuanto antes empieces mejor. Si la profesora no organiza grupos de trabajo, crea junto a tus compañeras tus propios grupos de estudio o trabajo.\nOrganízate Muchas veces el fracaso no es debido a una falta de motivación o de trabajo, sino a una mala planificación. Es esencial hacer una buena planificación al comienzo del curso que contemple no sólo los horarios de clases, prácticas o las fechas de exámenes, sino también la organización del tiempo de trabajo fuera de la universidad. Lo más importante de esta planificación es que sea realista, es decir que si sólo disponemos de un par de horas para trabajar en casa, no contemos con más, pero tampoco con menos, y que hagamos un reparto razonable de las mismas, asignando más tiempo a las materias más complejas o que requieran más trabajo. Una buena pista del tiempo de trabajo que requiere cada asignatura es su número de créditos ECTS. Es recomendable revisar dicha planificación con la tutora. Una vez realizada la planificación, lo más importante es ser fiel a la misma, teniéndola presente en todo momento a lo largo del curso.\nRevisa regularmente la marcha del curso Dentro de la planificación del curso deben establecerse varias fechas, convenientemente espaciadas, para hacer una revisión parcial del camino recorrido y lo que queda por recorrer. Estas revisiones tienen por objeto hacer una pequeña autoevaluación sobre el proceso de aprendizaje, hasta qué punto se están cumpliendo los objetivos fijados y si estamos siendo fieles a las pautas marcadas por este manual de supervivencia. De este modo podremos identificar las principales dificultades en el aprendizaje y aquello en lo que estamos fallando, para corregir el rumbo a tiempo. En el peor de los casos, incluso si al final del curso no logramos superar alguna asignatura, es muy importante hacer una revisión final tratando de identificar las causas para aprender de los errores y que no se vuelvan a repetir en futuros cursos. No te desanimes y piensa que aunque no hayas superado la asignatura, seguro que no has perdido por completo el año. Se positiva y piensa en todo aquello que has aprendido y que sin duda te aportará experiencia para tu vida.\nRevisa regularmente estos consejos Por último, no te olvides de revisar y refrescar estos consejos.\n","date":1493018510,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"a004d161274f7441ea1564ad30668bd1","permalink":"/post/manual-supervivencia-grados/","publishdate":"2017-04-24T09:21:50+02:00","relpermalink":"/post/manual-supervivencia-grados/","section":"post","summary":"En este artículo ofrezco varios consejos o buenas prácticas para ayudar a estudiantes de grado, especialmente durante su primer año, para sacarle el máximo partido a las clases, rentabilizar mejor su trabajo y culminar su proceso de aprendizaje con éxito.\n","tags":[],"title":"Manual de supervivencia para grados","type":"post"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 10 de enero de 2017\nEjercicio 1 Un cultivo de bacterias crece al ritmo de la raíz cuadrada del número de bacterias en el cultivo. ¿Cuánto se habrá incrementado el número de bacterias con respecto al número inicial tras una hora del comienzo del cultivo? ¿Cuánto tiempo debe pasar para que el número de bacterias inicial se haya cuadruplicado?\nSolución Sea $x(t)$ el número de bacterias en el instante $t$.\nSolución particular: $x(t)=(\\frac{t}{2}+C)^2$.\nEl número de bacterias habrá aumentado $\\frac{1}{4}+C$ una hora después del comienzo del cultivo.\nEl número de bacterias se habrá cuadruplicado en el instante $t=2C$. Ejercicio 2 En un proceso químico, la temperatura depende de la cantidad de dos sustancias $x$ e $y$ de acuerdo a la fórmula $T(x,y)=4x^3+y^3-3xy$. Teniendo en cuenta que las cantidades de $x$ e $y$ no pueden ser negativas, estudiar los extremos relativos y los puntos de silla de la temperatura.\nSolución $T$ tiene un punto de silla en $(0,0)$ y un mínimo local $(\\frac{\\sqrt[3]{4}}{4},\\frac{\\sqrt[3]{2}}{2})$. Ejercicio 3 Un modelo ecológico explica el número de individuos de una población mediante la función $$f(x,t)=\\dfrac{e^t}{x},$$ donde $t$ es el tiempo y $x$ el número de predadores en la región. Calcular el valor aproximado de individuos en la población para $t=0.1$ y $x=0.9$ utilizando el polinomio de Taylor de segundo grado de la función en el punto $(1,0)$.\nSolución Polinomio de Taylor de segundo orden de $f$ en el punto $(1,0)$: $P^2_{f,(1,0)}(x,y)=3-3x+2t+x^2+\\frac{t^2}{2}-xt$.\n$P^2_{f,(1,0)}(0.9,0.1)=1.225$. Ejercicio 4 Una partícula se mueve en el espacio de manera que su posición en cada instante $t$ viene dado por la función $f(t)=(e^{t/2}, \\operatorname{sen}^2(t), \\sqrt[3]{1-t})$. Se pide:\nCalcular los vectores velocidad y aceleración en el instante $t=0$.\nNota: La velocidad es la variación del espacio con respecto al tiempo y la aceleración es la variación de la velocidad con respecto al tiempo. Calcular el plano normal a la trayectoria de la partícula en el instante $t=0$. Solución $f\u0026rsquo;(t)=(\\frac{e^{t/2}}{2},2\\operatorname{sen} t \\cos t, \\frac{-(1-t)^{-2/3}}{3})$ y $f\u0026rsquo;(0)=(\\frac{1}{2},0,-\\frac{1}{3})$.\n$f\u0026rsquo;\u0026rsquo;(t)=(\\frac{e^{t/2}}{4},2(\\cos^2 t-\\operatorname{sen}^2 t), \\frac{-2(1-t)^{-5/3}}{9})$ y $f\u0026rsquo;\u0026rsquo;(0)=(\\frac{1}{4},2,-\\frac{2}{9})$. Plano normal a la trayectoria en el instante $t=0$: $3x-2z=1$. ","date":1484006400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"832f22fe9fa494a62e344e56f7fc98b9","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2017-01-10/","publishdate":"2017-01-10T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2017-01-10/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 10 de enero de 2017\nEjercicio 1 Un cultivo de bacterias crece al ritmo de la raíz cuadrada del número de bacterias en el cultivo. ¿Cuánto se habrá incrementado el número de bacterias con respecto al número inicial tras una hora del comienzo del cultivo?","tags":["Examen"],"title":"Examen de Farmacia 2017-01-10","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia, Biotecnología Fecha: 10 de enero de 2017\nEjercicio 1 La siguiente tabla recoge la distribución de frecuencias del tiempo de espera en un servicio de urgencias de una muestra de pacientes.\n$$ \\begin{array}{cr} \\hline \\mbox{Tiempo} \u0026amp; \\mbox{Pacientes} \\newline (0,10] \u0026amp; 22 \\newline (10,20] \u0026amp; 43 \\newline (20,30] \u0026amp; 33 \\newline (30,40] \u0026amp; 12 \\newline (40,50] \u0026amp; 6 \\newline (50,60] \u0026amp; 4 \\newline \\hline \\end{array} $$\nSe pide:\nDibujar el polígono de frecuencias relativas acumuladas del tiempo de espera. Calcular la mediana el tiempo de espera e interpretarla. ¿Qué porcentaje de pacientes han tenido que esperar más de 38 minutos? Solución $Me=18.89$ min. El 10% de los pacientes han tenido que esperar más de 18 minutos. En dos poblaciones de mujeres A y B se ha tomado una muestra y se ha medido el número de embarazos de cada mujer durante su vida fértil obteniéndo los siguientes resultados:\n$$ \\begin{array}{ccccccccccccccccc} \\hline A \u0026amp; 2 \u0026amp; 3 \u0026amp; 4 \u0026amp; 4 \u0026amp; 3 \u0026amp; 2 \u0026amp; 6 \u0026amp; 1 \u0026amp; 5 \u0026amp; 3 \u0026amp; 4 \u0026amp; 4 \u0026amp; 3 \u0026amp; 2 \u0026amp; 5 \u0026amp; 0 \\newline B \u0026amp; 1 \u0026amp; 0 \u0026amp; 2 \u0026amp; 1 \u0026amp; 0 \u0026amp; 2 \u0026amp; 0 \u0026amp; 3 \u0026amp; 0 \u0026amp; 1 \u0026amp; 0 \u0026amp; 2 \u0026amp; 5 \u0026amp; 1 \u0026amp; 1 \u0026amp; 1 \\newline \\hline \\end{array} $$\nSe pide:\nConstruir los diagramas de caja de ambas muestras y compararlos. ¿En qué muestra es más representativa la media? Justificar la respuesta. Calcular el coeficiente de asimetría de ambas distribuciones. ¿Qué distribución es más asimétrica? ¿Qué número de embarazos es relativamente mayor, 5 embarazos en la población A o 3 en la B? Utilizar las siguientes sumas para los cálculos:\n$\\sum a_i=51$, $\\sum a_i^2=199$, $\\sum (a_i-\\bar a)^3=-11.6016$, $\\sum (a_i-\\bar a)^4=217.9954$,\n$\\sum b_i=20$, $\\sum b_i^2=52$, $\\sum (b_i-\\bar b)^3=49.5$, $\\sum (b_i-\\bar b)^4=220.3125$.\nSolución $\\bar a=3.1875$ embarazos, $s_a^2=2.2773$ embarazos², $s_a=1.5091$ embarazos, $cv_a=0.4734$.\n$\\bar b=1.25$ embarazos, $s_b^2=1.6875$ embarazos², $s_b=1.299$ embarazos, $cv_b=1.0392$.\nComo el coeficiente de variación de $A$ es menor que el coeficiente de variación de $B$, la media de la población $A$ es más representativa que la media de la población $B$. $g_{1,a}=-0.211$ y $g_{1,b}=1.4113$, de modo que la distribución de $B$ es más asimétrica que la distribución de $A$. $z_a(5)=1.2011$ y $z_b(3)=1.3472$, de modo que 3 embarazos en la población $B$ es relativamente mayor que 5 embarazos en la población $A$. Ejercicio 3 En un estudio se ha medido la reducción en el nivel de colesterol de un grupo de personas hipertensas tras un programa de ejercicios. Los resultados aparecen en la siguiente tabla.\n¿Qué modelo de regresión explica mejor la reducción de colesterol en función de los minutos de ejercicio, el lineal o el exponencial? Justificar la respuesta. Según el modelo de regresión lineal, ¿cuánto disminuirá el colesterol por cada minuto más de ejercicio? Según el modelo logarítmico, ¿cuántos minutos de ejercicio se necesitan para reducir el colesterol 100 mg/dl? ¿Es fiable la predicción? Justificar la respuesta. Utilizar las siguientes sumas para los cálculos ($X$=Minutos de ejercicio e $Y$=Reducción de colesterol):\n$\\sum x_i=2148$, $\\sum \\log(x_i)=53.0559$, $\\sum y_j=199$, $\\sum \\log(y_j)=27.1766$,\n$\\sum x_i^2=507082$, $\\sum \\log(x_i)^2=282.9578$, $\\sum y_j^2=5779$, $\\sum \\log(y_j)^2=80.035$,\n$\\sum x_iy_j=50750$, $\\sum x_i\\log(y_j)=6359.0468$, $\\sum \\log(x_i)y_j=1097.978$, $\\sum \\log(x_i)\\log(y_j)=147.0682$.\nSolución Modelo de regresión lineal de la reducción del colesterol sobre el tiempo de ejercicio:\n$\\bar x=214.8$ min, $s_x^2=4569.16$ min².\n$\\bar y=19.9$ mg/dl, $s_y^2=181.89$ (mg/dl)².\n$s_{xy}=800.48$ min⋅mg/dl.\n$r^2 = 0.771$.\nModelo de regresión exponencial de la reducción de colesterol sobre el tiempo de ejercicio: $\\overline{\\log(y)}=2.7177$ log(mg/dl), $s_{\\log(y)}^2=0.6178$ log(mg/dl)².\n$s_{x\\log(y)}=52.1504$ min⋅log(mg/dl).\n$r^2 = 0.9635$.\nPor tanto, el modelo de regresión exponencial es mejor ya que su coeficiente de determinación es mayor. Recta de regresión de la reducción del colesterol sobre el tiempo de ejercicio: $y=-17.7312 + 0.1752x$.\nPor cada minuto más de ejercicio la reducción del colesterol aumenta 0.1752 mg/dl. Modelo de regresión logarítmico del tiempo de ejercicio sobre la reducción del colesterol: $x=-14.6075 + 84.4135\\log(y)$.\n$x(100)=374.131$.\nA pesar de que el coeficiente de determinación está muy cerca de 1, la estimación no es muy fiable porque 100 mg/dl está bastante lejos del rango de valores de la muestra. Ejercicio 4 En el servicio de emergencias de un municipio se sabe que por término medio se producen 6 avisos cada día. Sabiendo que el servicio está organizado en 3 turnos diários de 8 horas, se pide:\nCalcular la probabilidad de que en un turno se produzcan más de 3 avisos. Calcular la probabilidad de que en alguno de los tres turnos de un día no se produzca ningún aviso. Solución Llamando $X$ al número de avisos en un turno de 8 horas, $X\\sim P(2)$ y $P(X\u0026gt;3)=0.1429$. Llamando $Y$ al número de turnos sin avisos, $Y\\sim B(3,0.1353)$ y $P(Y\u0026gt;0)=0.3535$. Ejercicio 5 Para detectar una enfermedad con una prevalencia del 10% se dispone de un test diagnóstico con una sensibilidad del 95% y una especificidad del 85%. Se pide:\nCalcular los valores predictivos positivo y negativo del test e interpretarlos. ¿Se trata de un test más útil para detectar la enfermedad o para descartarla? ¿Cuál debería la especificidad del test para que el valor predictivo positivo fuera del 80%? Solución $VPP=P(D|+)=0.413$ y $VPN=P(\\overline D|-)=0.9935$. La especificidad debería ser $97.37%$. Ejercicio 6 Se ha medido la presión arterial sistólica a 8000 individuos de una población se ha observado que 2254 tiene más de 130 mmHg y 3126 tienen entre 110 y 130 mmHg. Suponiendo que la presión arterial sistólica sigue una distribución de probabilidad normal, se pide:\nCalcular la media y la desviación típica. Si se consideran hipertensas las personas con una presión arterial superior a 140 mmHg, ¿cuántas personas hipertensas hay en la población? Si una analítica sanguínea marca como anormales el 5% de los individuos con menor presión arterial y el 5% con mayor presión arterial, ¿entre qué presiones arteriales debe estar la presión de un individuo para que la analítica lo considere normal? Solución Llamando $X$ a la presión arterial, $X\\sim N(118.723, 19.5221)$. $P(X\u0026gt;140)=0.1379$ y por tanto existen $1103.0473$ personas con hipertensión. La presión es normal en el intervalo $(86.612, 150.8341)$. Ejercicio 7 En una asignatura se hacen dos exámenes parciales a lo largo del curso. El primer parcial lo aprobaron el 60% de los alumnos y el segundo parcial lo aprobaron el 68%. Del grupo de alumnos que aprobaron el primer parcial, el 80% de ellos aprobaron el segundo. Si se elige un alumno al azar, calcular:\nProbabilidad de que no haya aprobado ningún parcial. Probabilidad de que haya aprobado el primer parcial si no ha aprobado el segundo. Solución Llamando $E_1$ al evento consistente en aprobar el primer examen y $E_2$ al evento consistente en aprobar el segundo examen:\n$P(\\overline E_1\\cap \\overline E_2)=0.2$. $P(E_1|\\overline E_2)=0.375$. ","date":1484006400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"a7f9d7ded8cef1c71a91d67c7d86ee2f","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2017-01-10/","publishdate":"2017-01-10T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2017-01-10/","section":"docencia","summary":"Grados: Farmacia, Biotecnología Fecha: 10 de enero de 2017\nEjercicio 1 La siguiente tabla recoge la distribución de frecuencias del tiempo de espera en un servicio de urgencias de una muestra de pacientes.","tags":["Examen"],"title":"Examen de Farmacia 2017-01-10","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología Fecha: 28 de Noviembre de 2016\nEjercicio 1 La siguiente tabla contiene la distribución de las puntuaciones obtenidas por una muestra de alumnos de medicina que se presentaron al examen del MIR.\n$$ \\begin{array}{|c|r|r|r|r|r|} \\hline x \u0026amp; n_i \u0026amp; x_in_i \u0026amp; x_i^2n_i \u0026amp; (x_i-\\bar x)^3n_i \u0026amp; (x_i-\\bar x)^4n_i \\newline \\hline (0,40] \u0026amp; 84 \u0026amp; 1680 \u0026amp; 33600 \u0026amp; -12155062.50 \u0026amp; 638140781.25 \\newline (40,80] \u0026amp; 185 \u0026amp; 11100 \u0026amp; 666000 \u0026amp; -361328.13 \u0026amp; 4516601.56 \\newline (80,120] \u0026amp; 72 \u0026amp; 7200 \u0026amp; 720000 \u0026amp; 1497375.00 \u0026amp; 41177812.50 \\newline (120,160] \u0026amp; 40 \u0026amp; 5600 \u0026amp; 784000 \u0026amp; 12301875.00 \u0026amp; 830376562.50 \\newline (160,200] \u0026amp; 19 \u0026amp; 3420 \u0026amp; 615600 \u0026amp; 23603640.63 \u0026amp; 2537391367.19 \\newline \\hline \\sum \u0026amp; 400 \u0026amp; 29000 \u0026amp; 2819200 \u0026amp; 24886500.00 \u0026amp; 4051603125.00 \\newline \\hline \\end{array} $$\nCalcular el rango intercuartílico de las puntuaciones e interpretarlo. ¿Hay datos atípicos en la muestra? Si la nota de corte para aprobar el examen es 150, ¿qué porcentaje de alumnos aprobó el examen? Estudiar la representatividad de la media. Según la asimetría y el apuntamiento de la muestra, ¿se puede suponer que proviene de una población normal? Justificarlo con el cálculo de estadísticos de forma. Calcular la puntuación típica que le correspondería a un alumno con una puntuación de 150 puntos. Solución $C_1=43.48$ puntos, $C_3=97.78$ puntos y $RI=54.3$ puntos.\nVallas: $V_1=-37.97$ puntos y $V_2=179.23$ puntos. Por tanto, existen datos atípicos. $F_{150}=0.925$, de manera que el porcentaje de estudiantes que aprobaron el examen fue $7.5%$. $\\bar x=72.5$ puntos, $s^2=1791.75$ puntos², $s=42.3291$ puntos, $cv=0.5838$. Como el coeficiente de variación es mayor que 0.5 pero no demasiado, existe una variabilidad moderada y la representatividad de la media es también moderada. $g_1=0.8203$, de manera que la distribución es asimétrica hacia la izquierda. $g_2=0.1551$, de manera que la distribución es un poco más apuntada de lo normal (leptocúrtica). Como tanto $g_1$ como $g_2$ están entre -2 y 2 podemos asumir que la muestra proviene de una población normal. $z(150)=1.83$. Ejercicio 2 La siguiente tabla refleja la evolución del Producto Interior Bruto (PIB) per capita (en miles de euros) y la mortalidad infantil (niños por cada mil habitantes) de una serie de años.\n$$ \\begin{array}{lrrrrrrrr} \\hline \\mbox{Año} \u0026amp; 1993 \u0026amp; 1994 \u0026amp; 1995 \u0026amp; 1996 \u0026amp; 1997 \u0026amp; 1998 \u0026amp; 1999 \u0026amp; 2000 \\newline \\mbox{PIB} \u0026amp; 17 \u0026amp; 17 \u0026amp; 18 \u0026amp; 18 \u0026amp; 19 \u0026amp; 20 \u0026amp; 21 \u0026amp; 22 \\newline \\mbox{Mortalidad} \u0026amp; 6 \u0026amp; 5.6 \u0026amp; 5.2 \u0026amp; 4.9 \u0026amp; 4.6 \u0026amp; 4.3 \u0026amp; 4.1 \u0026amp; 4 \\newline \\hline \\end{array} $$\nEstimar el PIB correspondiente a una mortalidad de $3.8$ según el modelo lineal. ¿Qué modelo de regresión expresa mejor la relación entre el PIB y la mortalidad, el lineal o el exponencial? Si el PIB del año 2001 fue de 23, ¿cuál es la mortalidad esperada ese año según el modelo de regresión exponencial? Considerando los modelos lineales del PIB sobre la mortalidad y de la mortalidad sobre el PIB, ¿cuál de los dos modelos es más fiable? Utilizar las siguientes sumas ($X$=PIB y $Y$=Mortalidad) para los cálculos: $\\sum x_i=152$, $\\sum \\log(x_i)=23.5229$, $\\sum y_j=38.7$, $\\sum \\log(y_j)=12.5344$, $\\sum x_i^2=2912$, $\\sum \\log(x_i)^2=69.2305$, $\\sum y_j^2=190.87$, $\\sum \\log(y_j)^2=19.7912$, $\\sum x_iy_j=726.5$, $\\sum x_i\\log(y_j)=236.3256$, $\\sum \\log(x_i)y_j=113.3308$, $\\sum \\log(x_i)\\log(y_j)=36.76$.\nSolución Modelo de regresión lineal del PIB sobre la mortalidad infantil: $\\bar x=19$ 10³€, $s_x^2=3$ 10⁶€.\n$\\bar y=4.8375$ niños por cada mil, $s_y^2=0.4573$ (niños por cada mil)².\n$s_{xy}=-1.1$ 10³€⋅niños por cada mil.\nRecta de regresión del PIB sobre la mortalidad infantil: $x=30.6351 + -2.4052y$.\n$x(3.8) =21.4954$. $\\overline{\\log(x)}=2.9404$ log(10³€), $s_{\\log(x)}^2=0.0081$ log(10³€)².\n$s_{\\log(x)y}=-0.0577$ log(10³€)•niños por cada mil.\nCoeficiente de determinación lineal del PIB sobre la mortaliad infantil $r^2=0.8819$.\nCoeficiente de determinación exponencial del PIB sobre la mortaliad infantil $r^2=0.9002$.\nPor tanto, el modelo exponencial explica mejor la relación entre el PIB y la mortalidad infantil ya que su coeficiente de determinación es mayor. $\\overline{\\log(y)}=1.5668$ log(niños por cada mil), $s_{\\log(y)}^2=0.019$ log(niños por cada mil)².\n$s_{x\\log(y)}=-0.2284$ 10³€⋅log(niños por cada mil).\nModelo de regresión exponencial de la mortalidad infantil sobre el PIB: $y=e^{3.0135 + -0.0761x}$.\ny(23)=3.5332$. niños por cada mil. La fiabilidad de ambos modelos es la misma ya que tienen el mismo coeficiente de determinación. Ejercicio 3 Sabiendo que las rectas de regresión correspondientes a dos variables $X$ e $Y$ se cortan en el punto $(2,3)$ y que la predicción que da la recta de regresión para $x=3$ es $y=1$, ¿cuánto cambiará $Y$ según el modelo lineal por cada unidad que aumente $X$ ? Si el coeficiente de correlación lineal es $-0.8$, ¿cuánto cambiará $X$ según el modelo lineal por cada unidad que aumente $Y$?\nSolución $\\bar x=2$ and $\\bar y=3$.\n$b_{yx}=-2$, de modo que $Y$ decrece 2 unidades cuando $X$ crece una unidad.\n$b_{xy}=-0.32$, de modo que $X$ decrece 0.32 unidades cuando $Y$ crece una unidad. ","date":1480291200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"b146a7434459112d104b12e8551e8173","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2016-11-28/","publishdate":"2016-11-28T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2016-11-28/","section":"docencia","summary":"Grados: Farmacia y Biotecnología Fecha: 28 de Noviembre de 2016\nEjercicio 1 La siguiente tabla contiene la distribución de las puntuaciones obtenidas por una muestra de alumnos de medicina que se presentaron al examen del MIR.","tags":["Examen"],"title":"Examen de Farmacia 2016-11-28","type":"book"},{"authors":null,"categories":["Cálculo","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 7 de noviembre de 2016\nEjercicio 1 La relación entre la cantidad de dos sustancias $x$ e $y$ (en mg) en una reacción química viene dada por la ecuación $$ \\log(\\sqrt{x^2+y^2}) = y. $$\nCalcular la ecuación de las rectas tangente y normal a la gráfica de $y$ como función de $x$ en el punto $(1,0)$.\nEn el mismo punto, calcular la variación aproximada que experimenta $y$ para una variación de $x$ de 2 mg.\nSolución Recta tangente: $y=x-1$.\nRecta normal: $y=-x+1$. $\\Delta y\\approx 2$ mg. Ejercicio 2 La temperatura en cualquier punto de un espacio tridimensional viene dada por la función $$ T(x,y,z)= \\frac{e^{xy}}{z} $$\nSi nos encontramos en el punto $(1,1,1)$,\n¿cuál será la dirección en que la temperatura decrecerá lo más rápidamente posible? ¿Cuál será la tasa de variación de la temperatura en esa dirección? Interpretarla.\nCalcular e interpretar la derivada direccional en la dirección en que $y$ aumenta el doble de $x$ y $z$ aumenta la mitad que $x$.\nSolución $-\\nabla f(1,1,1)=(-e,-e,e)$. La tasa de decrecimiento es $\\sqrt{3}e$. Tomando el vector $\\mathbf{u}=(1,2,1/2)$, $f_{\\mathbf{u}}\u0026rsquo;(1,1,1)=5e/\\sqrt{21}$, lo que quiere decir que por cada unidad que se avance en la dirección del vector $(1,2,1/2)$ la función aumentará $5e/\\sqrt{21}$ unidades. Ejercicio 3 El crecimiento alométrico explica la relación entre el tamaño de diversas partes de un organismo. Si $x(t)$ e $y(t)$ son los tamaños de dos órganos de un cuerpo de edad $t$, la relación viene dada por la ecuación $$ \\frac{1}{y}\\frac{dy}{dt} = k \\frac{1}{x}\\frac{dx}{dt}, $$ donde $k$ es una constante positiva. Se pide:\nDar la ecuación diferencial que exprese $y$ en función de $x$ (es decir, tomando como variable independiente $x$ y como variable dependiente $y$) y resolverla para $y$.\nSuponiendo que $y$ es la masa de una célula y $x$ su volumen, con $k=0.0794$, calcular $y$ como función de $x$, sabiendo que a la edad en la que el volumen es 1000 $\\mu$m$^3$, la masa es 1 ng.\nSolución Ecuación diferencial: $y\u0026rsquo;=k\\dfrac{y}{x}$.\nSolución general: $y=cx^k$. Solución particular: $y=0.5778 x^{0.0794}$. Ejercicio 4 Estudiar los extremos relativos y puntos de silla de la función $f(x,y)=e^y(y^2-x^2)$.\nSolución $f$ tiene un punto de silla en $(0,0)$ y un máximo local en $(0,-2)$. ","date":1478476800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1612192256,"objectID":"8b2c4d38ec522b9a1426b922243d39f3","permalink":"/docencia/calculo/examenes/farmacia/farmacia-2016-11-07/","publishdate":"2016-11-07T00:00:00Z","relpermalink":"/docencia/calculo/examenes/farmacia/farmacia-2016-11-07/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 7 de noviembre de 2016\nEjercicio 1 La relación entre la cantidad de dos sustancias $x$ e $y$ (en mg) en una reacción química viene dada por la ecuación $$ \\log(\\sqrt{x^2+y^2}) = y.","tags":["Examen"],"title":"Examen de Farmacia 2016-11-07","type":"book"},{"authors":null,"categories":["rkTeaching","R"],"content":"Ya está disponible la nueva versión 1.3.0 del paquete de R rk.Teaching para el aprendizaje de Estadística. Esta versión está actualizada para la versión 3.2.3 de R y la versión 0.6.5 de RKWard.\nSe trata de una versión de transición hacia una actualización mayor que llegará en breve y que incorporará la internacionalización del paquete.\nSi quieres instalarlo visita la página de rkTeaching.\n","date":1464566400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"c080d61a8a40cf8fea7390fb0d1ca8b9","permalink":"/post/rkteaching-version1.3/","publishdate":"2016-05-30T00:00:00Z","relpermalink":"/post/rkteaching-version1.3/","section":"post","summary":"Ya está disponible la nueva versión 1.3.0 del paquete de R rk.Teaching para el aprendizaje de Estadística. Esta versión está actualizada para la versión 3.2.3 de R y la versión 0.6.5 de RKWard.\n","tags":["rkTeaching","RKWard"],"title":"Liberada la versión 1.3.0 del paquete rkTeaching","type":"post"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1451606400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"2414f1cf796086a6cb4c1e40f2fc1ff0","permalink":"/publication/innovacion-2016-2/","publishdate":"2020-09-16T21:26:03.10618Z","relpermalink":"/publication/innovacion-2016-2/","section":"publication","summary":"","tags":[],"title":"Innovación en la docencia de Estadística con R y rk.Teaching","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1451606400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"39bad87ab5875006e593268ed2565eaf","permalink":"/publication/innovacion-2016/","publishdate":"2020-09-16T21:26:01.841858Z","relpermalink":"/publication/innovacion-2016/","section":"publication","summary":"","tags":[],"title":"Innovación en la docencia de Estadística con R y rk.Teaching","type":"publication"},{"authors":null,"categories":["Estadística","rkTeaching","R"],"content":"El último numero del Boletín de Estadística e Investigación Operativa (BEIO) que publica la Sociedad de Estadística e Investigación Operativa contiene un artículo sobre RKTeaching y su uso en la docencia de Estadística.\nRecomiendo su lectura especialmente a aquellos docentes de Estadística que usen R o quieran pasar a utilizar R en sus clases sin que suponga un trauma para sus alumnos.\nDescarga el artículo\n","date":1438387200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"f0b16c58d02a602fb88743443b676505","permalink":"/post/articulo-rkteaching-beio/","publishdate":"2015-08-01T00:00:00Z","relpermalink":"/post/articulo-rkteaching-beio/","section":"post","summary":"El último numero del Boletín de Estadística e Investigación Operativa (BEIO) que publica la Sociedad de Estadística e Investigación Operativa contiene un artículo sobre RKTeaching y su uso en la docencia de Estadística.","tags":["rkTeaching","RKWard"],"title":"rkTeaching en BEIO","type":"post"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 13 de Enero de 2015\nEjercicio 1 Un laboratorio farmacéutico está probando un nuevo medicamento y se están estudiando los efectos secundarios que provoca. Se sabe que la probabilidad de que el medicamento provoque mareos es de 0.20 y de que provoque náuseas es de 0.50. También se sabe que la probabilidad de que provoque solo mareos es 0.15.\n¿Que probabilidad hay de que el medicamento provoque algún efecto secundario? ¿Que probabilidad hay de que el medicamento provoque los dos efectos secundarios? ¿Que probabilidad hay de que el medicamento provoque solo náuseas? ¿Que probabilidad hay de que el medicamento provoque náuseas si ha provocado mareos? ¿Son independientes los efectos secundarios? Resolución Ejercicio 2 Se sabe que en personas con infección urinaria el número medio de bacterias por mm$^3$ de orina es 5, mientras que en personas sanas la media es de 2 bacterias por mm$^3$. Se pide:\nCalcular la probabilidad de que en una muestra de medio mm$^3$ de orina de un individuo con infección haya alguna bacteria. Calcular la probabilidad de que en una muestra de dos mm$^3$ de orina de un individuo sano haya menos de 3 bacterias. Si un test diagnóstico para detectar la infección urinaria da positivo cuando en un mm$^3$ de orina hay más de 6 bacterias, ¿cuál es la sensibilidad del test? ¿Y cuál es su especificidad? Si la prevalencia de la infección urinaria en la población es del 5%, ¿cuál es el valor predictivo positivo del test diagnóstico del apartado anterior? ¿Y su valor predictivo negativo? Si se toman 5 muestras de un mm$^3$ de una persona con infección de orina, ¿cuál es la probabilidad de que se produzca algún falso negativo? Nota: La sensibilidad de un test el porcentaje de resultados positivos en personas enfermas, la especificidad es el porcentaje de resultados negativos en personas sanas, la prevalencia es el porcentaje de personas enfermas en la población, el valor predictivo positivo es el porcentaje de personas enfermas entre las que han dado positivo en el test, y el valor predictivo negativo es el porcentaje de personas sanas entre las que han dado negativo en el test.\nResolución Ejercicio 3 En un estudio realizado a 720 niños de 8 años se observó que 324 tenían un peso superior a 27.2 kg y que 216 tenían un peso entre 24.6 y 27.2 kg. Suponiendo que el peso de los niños de 8 años sigue una distribución normal, se pide:\nCalcular la media y la desviación típica del peso de los niños de 8 años. ¿Cuántos niños de 8 años tendrán un peso comprendido entre 24 y 28 kg? Si un niño de 8 años pesa 28.5 kg, ¿cuánto debe adelgazar para situarse por debajo del percentil 60 del peso? Resolución ","date":1421107200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1c907d0f0461045681447d4efd241170","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2015-01-13/","publishdate":"2015-01-13T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2015-01-13/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 13 de Enero de 2015\nEjercicio 1 Un laboratorio farmacéutico está probando un nuevo medicamento y se están estudiando los efectos secundarios que provoca. Se sabe que la probabilidad de que el medicamento provoque mareos es de 0.","tags":["Examen"],"title":"Examen de Farmacia 2015-01-13","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","rkTeaching","R"],"content":"Ya está aquí la tercera edición del Curso Práctico de Bioestadística con R ofrecido por la plataforma MiriadaX, que se desarrollará del 8 de enero al 16 de febrero de 2015.\nSi te perdiste las dos primeras ediciones no dudes en apuntarte a esta tercera edición que, al igual que todos los cursos de MiriadaX, son es gratuíta.\nSólo tienes que registrarte en la página web de MiriadaX y matricularte en el curso en la dirección: https://www.miriadax.net/web/curso-practico-bioestadistica-r-3edicion\n¡No lo dejes para más tarte! \u0026lsquo;Apúntate ya, y díselo a tus conocidos!\n","date":1420675200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"81c7a35bb4d025d9cc8a0290e56f355a","permalink":"/post/curso-bioestadistica-miriadax-3ed/","publishdate":"2015-01-08T00:00:00Z","relpermalink":"/post/curso-bioestadistica-miriadax-3ed/","section":"post","summary":"Ya está aquí la tercera edición del Curso Práctico de Bioestadística con R ofrecido por la plataforma MiriadaX, que se desarrollará del 8 de enero al 16 de febrero de 2015.\n","tags":["rkTeaching","RKWard"],"title":"3ª edición del Curso Práctico de Bioestadística con R","type":"post"},{"authors":["Alfredo Sánchez Alberca"],"categories":[],"content":"","date":1420070400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"6fd719886c7cb7d4e40b67df952eb8a7","permalink":"/publication/bringing-2015/","publishdate":"2020-09-16T21:26:02.037032Z","relpermalink":"/publication/bringing-2015/","section":"publication","summary":"","tags":[],"title":"Bringing R to non-expert users with the package RKTeaching","type":"publication"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 24 de Noviembre de 2014\nEjercicio 1 El siguiente diagrama refleja la distribución acumulada del número de partes de asistencia médica que han dado durante un año una muestra de 100 asegurados.\nDibujar el diagrama de cajas y ver si existen datos atípicos en la muestra.\nResolución Ejercicio 2 En un centro de salud, la ocupación del aparcamiento durante la última semana fue registrada mediante la siguiente tabla:\n$$ \\begin{array}{|c|r|r|r|r|r|} \\hline x \u0026amp; n_i \u0026amp; x_in_i \u0026amp; x_i^2n_i \u0026amp; (x_i-\\bar x)^3n_i \u0026amp; (x_i-\\bar x)^4n_i \\newline \\hline (0,40] \u0026amp; 84 \u0026amp; 1680 \u0026amp; 33600 \u0026amp; -12155062.50 \u0026amp; 638140781.25 \\newline (40,80] \u0026amp; 185 \u0026amp; 11100 \u0026amp; 666000 \u0026amp; -361328.13 \u0026amp; 4516601.56 \\newline (80,120] \u0026amp; 72 \u0026amp; 7200 \u0026amp; 720000 \u0026amp; 1497375.00 \u0026amp; 41177812.50 \\newline (120,160] \u0026amp; 40 \u0026amp; 5600 \u0026amp; 784000 \u0026amp; 12301875.00 \u0026amp; 830376562.50 \\newline (160,200] \u0026amp; 19 \u0026amp; 3420 \u0026amp; 615600 \u0026amp; 23603640.63 \u0026amp; 2537391367.19 \\newline \\hline \\sum \u0026amp; 400 \u0026amp; 29000 \u0026amp; 2819200 \u0026amp; 24886500.00 \u0026amp; 4051603125.00 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular el tiempo por encima del cual han estacionado el 60% de los vehículos. ¿Qué porcentaje de vehículos ha estacionado por encima de 100 minutos? Calcular la media del tiempo de estacionamiento. ¿Es representativa la media? Calcular el coeficiente de asimetría y de apuntamiento de la distribución del tiempo de estacionamiento e interpretarlos. Sabiendo que la empresa responsable del aparcamiento cobra 3 céntimos por minuto de aparcamiento más una cantidad fija de 20 céntimos, calcular el precio medio del aparcamiento y la desviación típica del mismo. Resolución Ejercicio 3 Una botánica comenzó a tratar una planta de soja con cierta sustancia estimulante del crecimiento. Para ver cómo evolucionaba el peso en función del tiempo, hizo 8 medidas del peso en distintos instantes, obteniendo los siguientes resultados\n$$ \\begin{array}{lllllll} \\sum t = 250 \u0026amp; \\quad \u0026amp; \\sum p = 2369 \u0026amp; \\quad \u0026amp; \\sum \\ln(t) = 25.94 \u0026amp; \\quad \u0026amp; \\sum \\ln(p) = 27.17 \\newline \\sum t^2= 10358 \u0026amp; \u0026amp; \\sum p^2 = 2848799 \u0026amp; \u0026amp; \\sum (\\ln t)^2 = 87.70 \u0026amp; \u0026amp; \\sum (\\ln p)^2 = 139.52 \\newline \\sum tp= 133399 \u0026amp; \u0026amp; \\sum \\ln(t) p = 9527.34 \u0026amp; \u0026amp; \\sum t\\ln(p) = 1193.26 \u0026amp; \u0026amp; \\sum \\ln(t)\\ln(p) = 100.60 \\end{array} $$\nSe pide:\nEstudiar si el modelo logarítmico es más fiable que el lineal para predecir los días de tratamiento en función el peso de la planta. Utilizar el mejor modelo para estimar los días de tratamiento necesarios para que la planta pese 500 gr. Considerando el resultado del apartado anterior, ¿cuál sería el mejor modelo de regresión para estimar el peso de la planta a los 30 días de tratamiento? Hacer dicha estimación. Resolución Ejercicio 4 La recta de regresión de una variable $Y$ sobre otra $X$ tiene ecuación $y+\\frac{1}{4}x-1=0$, mientras que la recta de regresión de $X$ sobre $Y$, tiene ecuación $y+\\frac{3}{4}x-2=0$. Se pide:\nCalcular la media de $X$ y la de $Y$. Calcular el coeficiente de correlación lineal e interpretarlo. Resolución ","date":1416787200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"82e01ad6bfb981f7f5c0742c9e912bc6","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2014-11-24/","publishdate":"2014-11-24T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2014-11-24/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 24 de Noviembre de 2014\nEjercicio 1 El siguiente diagrama refleja la distribución acumulada del número de partes de asistencia médica que han dado durante un año una muestra de 100 asegurados.","tags":["Examen"],"title":"Examen de Farmacia 2014-11-24","type":"book"},{"authors":null,"categories":["Cálculo"],"content":"En la sección de cálculo ya está disponible el manual de cálculo en una y varias variables. En este manual se introducen los principales conceptos de cálculo de manera sencilla y progresiva con multitud de ejemplos aplicados.\nEl manual está pensado para alumnos de primeros cursos de grado, especialmente en disciplinas aplicadas, e incluye varios capítulos entre los que cabe destacar los capítulos de derivadas de funciones de una y de varias variables, aunque también incluye integrales y ecuaciones diferenciales de primer grado. Existen también varios capítulos más elementales con conceptos básicos de geometría analítica, funciones elementales y límites y continuidad.\nEl manual incluye multitud de ejemplos aplicados y también ejemplos interactivos con el programa Geogebra.\nEspero que os sea útil.\n","date":1412121600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1334385c8b1fbc4b81cac5e5f5c76702","permalink":"/post/apuntes-calculo/","publishdate":"2014-10-01T00:00:00Z","relpermalink":"/post/apuntes-calculo/","section":"post","summary":"En la sección de cálculo ya está disponible el manual de cálculo en una y varias variables. En este manual se introducen los principales conceptos de cálculo de manera sencilla y progresiva con multitud de ejemplos aplicados.\n","tags":["Cálculo","Geogebra"],"title":"Manual de Cálculo en una y varias variables","type":"post"},{"authors":null,"categories":["rkTeaching","R"],"content":"Ya está disponible la nueva versión 1.2.0 del paquete de R rkTeaching para el aprendizaje de Estadística. La principal novedad de esta nueva versión es la inclusión de un nuevo menú para el cálculo de probabilidades.\nEste nuevo menú permite construir los espacios muestrales y probabilísticos de distintos juegos de azar (lanzamiento de dados, lanzamiento de monedas, extracción de naipes de una baraja y extracción de objetos de urnas), así como la simulación de los respectivos experimentos aleatorios. Este menú también permite la construcción de espacios probabilísticos definidos por el usuario a partir de las frecuencias de los sucesos elementales, la combinación de espacios probabilísticos correspondientes a experimentos aleatorios independientes, la construcción de espacios probabilísticos asociados a la repetición de experimentos aleatorios y por supuesto el cálculo de probabilidades dentro de un espacio probabilístico.\n¿A qué esperas para probarlo? Visita la página de rkTeaching.\n","date":1409529600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"490aeb0d03bd66edb079b57411123c29","permalink":"/post/rkteaching-version1.2/","publishdate":"2014-09-01T00:00:00Z","relpermalink":"/post/rkteaching-version1.2/","section":"post","summary":"Ya está disponible la nueva versión 1.2.0 del paquete de R rkTeaching para el aprendizaje de Estadística. La principal novedad de esta nueva versión es la inclusión de un nuevo menú para el cálculo de probabilidades.\n","tags":["rkTeaching","RKWard"],"title":"Liberada la versión 1.2.0 del paquete rkTeaching","type":"post"},{"authors":null,"categories":["Estadística","Bioestadística"],"content":"Acaba de publicase un nuevo libro práctico para el análisis de datos con SPSS aplicado principalmente a las ciencias de la Salud.\nEl análisis de datos en cualquier Ciencia Experimental o de la Salud es imprescindible para la compresión de los fenómenos biológicos, físicos o químicos. Las nuevas tecnologías han hecho posible el desarrollo de programas capaces de recopilar, organizar y analizar enormes cantidades de datos con poco esfuerzo.\nSPSS es uno de los programas de análisis estadísticos más utilizados, sobre todo en el ámbito de las ciencias biosanitarias. Este libro presenta las principales técnicas Estadísticas, tanto de Estadística Descriptiva como de Inferencia Estadística, aplicadas con SPSS a multitud de ejemplos del ámbito de las Ciencias de la Salud, desarrollados paso a paso.\nMás información.\n","date":1404950400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"efdc7656086aa847c33249d5da66309d","permalink":"/post/libro-bioestadistica/","publishdate":"2014-07-10T00:00:00Z","relpermalink":"/post/libro-bioestadistica/","section":"post","summary":"Acaba de publicase un nuevo libro práctico para el análisis de datos con SPSS aplicado principalmente a las ciencias de la Salud.\n","tags":["SPSS"],"title":"Nuevo libro de Bioestadística Aplicada con SPSS","type":"post"},{"authors":null,"categories":["Estadística","Bioestadística","rkTeaching","R"],"content":"Tras el éxito de la primera edición del Curso Práctico de Bioestadística con R ofrecido por la plataforma MiriadaX, el próximo 19 de mayo comienza la segunda edición.\nSi te perdiste la primera edición no dudes en apuntarte a esta segunda edición que como la primera es gratuíta.\nSólo tienes que registrarte en la página web de MiriadaX y matricularte en el curso en la dirección: https://www.miriadax.net/web/curso-practico-bioestadistica-r-2edicion\n¡Que corra la voz!\n","date":1399852800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1fa367c77accdd6f7956ebacfe5f5cde","permalink":"/post/curso-bioestadistica-miriadax/","publishdate":"2014-05-12T00:00:00Z","relpermalink":"/post/curso-bioestadistica-miriadax/","section":"post","summary":"Tras el éxito de la primera edición del Curso Práctico de Bioestadística con R ofrecido por la plataforma MiriadaX, el próximo 19 de mayo comienza la segunda edición.\n","tags":["rkTeaching","RKWard"],"title":"2ª edición del Curso Práctico de Bioestadística con R","type":"post"},{"authors":null,"categories":["rkTeaching","R"],"content":"¿Necesitas ayuda con el analizar datos en tus estudios o trabajo?\nNo te preocupes, porque la Estadística ahora está al alcance de cualquiera con el paquete rkTeachig, un paquete de R que he desarrollado para facilitar el aprendizaje de Estadística.\nRKTeaching es software libre, y por tanto es gratuito. Además está diseñado para poder realizar los procedimientos estadísticos más habituales sin necesidad de conocer el lenguaje R ya que dispone de menús y cuadros de diálogos especialmente diseñados para facilitar la aplicación de estos procedimientos.\nSi estás interesado en sus características, no lo dudes, visita la página de rkTeaching(/es/proyecto/rkteaching)\n","date":1397088000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"950caedb8f3e0daf421b0142227c3d87","permalink":"/post/rkteaching/","publishdate":"2014-04-10T00:00:00Z","relpermalink":"/post/rkteaching/","section":"post","summary":"¿Necesitas ayuda con el analizar datos en tus estudios o trabajo?\nNo te preocupes, porque la Estadística ahora está al alcance de cualquiera con el paquete rkTeachig, un paquete de R que he desarrollado para facilitar el aprendizaje de Estadística.\n","tags":["rkTeaching","RKWard"],"title":"rkTeaching: La Estadística al alcance de cualquiera","type":"post"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 27 de Enero de 2014\nEjercicio 1 Se realiza un estudio para determinar la efectividad de un medicamento para controlar la hipertensión a 180 pacientes hipertensos. Para ello se les suministra una cantidad determinada del mismo obteniéndose los siguientes resultados\n$$ \\begin{array}{|c|c|c|c|c|} \\hline \\textrm{Dosis (mg)} \u0026amp; n_i \u0026amp; f_i \u0026amp; N_i \u0026amp; F_i \\newline \\hline\\hline (100,400] \u0026amp; 15 \u0026amp; \u0026amp; \u0026amp; \\newline \\hline (400,700] \u0026amp; \u0026amp; \u0026amp; \u0026amp; 0.2167 \\newline \\hline (700,800] \u0026amp; 36 \u0026amp; \u0026amp; \u0026amp; \\newline \\hline (800,900] \u0026amp; \u0026amp; 0.3333 \u0026amp; \u0026amp; \\newline \\hline (900,1000] \u0026amp; \u0026amp; \u0026amp; \u0026amp; \\newline \\hline \\end{array} $$\nSe pide:\nCompletar la tabla. ¿Cuál ha sido la dosis media de medicamento administrado? ¿Es representativa? Si se considera que a partir de una administración de 725mg hay que hacer un seguimiento para controlar posibles hipotensiones, ¿qué porcentaje de pacientes necesitan ese seguimiento? ¿Cuál fue la cantidad mínima de medicamento suministrada al 60% de los pacientes más medicados? ¿Cuál fue la cantidad más habitual de medicamento administrado? Si a un paciente se le suministró una cantidad de medicamento de 725 mg y a otro una cantidad tipificada de 0.95, ¿A cuál se le administró una cantidad mayor? Justificar la respuesta. Calcular el coeficiente de asimetría e interpretarlo. Dibujar el diagrama de cajas e interpretarlo. Si se cambia de medicamento por otro cuya cantidad a administrar viene dada en función del anterior medicamento mediante la relación $Y=100+0.7X$, siendo $X$ la cantidad de medicamento original e $Y$ la cantidad de medicamento nuevo, ¿cuál será la media de la cantidad administrada del nuevo medicamento? ¿Es más representativa que en el medicamento original? Justificar la respuesta. Nota: Para facilitar los cálculos se dan las siguientes sumas:\n$$ \\begin{array}{c} \\sum x_in_i=137700 \\quad \\sum x_i^2n_i=112410000 \\newline \\sum (x_i-\\bar x)^3n_i= -1965735000 \\quad \\sum (x_i-\\bar x)^4n_i=1162291162500 \\end{array} $$\nEjercicio 2 En un estudio se ha medido el calor liberado en una reacción química en distintos instantes desde el comienzo de la reacción, obteniendo los siguientes datos:\n$$ \\begin{array}{lrrrrr} \\hline \\textrm{Tiempo en minutos} \u0026amp; 2.5 \u0026amp; 3.7 \u0026amp; 4.1 \u0026amp; 5.3 \u0026amp; 6.2 \\newline \\textrm{Calor en calorías} \u0026amp; 15.9 \u0026amp; 44.5 \u0026amp; 65.6 \u0026amp; 206.5 \u0026amp; 498.7 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular el modelo de regresión lineal del calor sobre el tiempo. Según este modelo ¿Cuándo cambiarán las calorías por cada minuto que pase? Calcular el modelo de regresión exponencial del calor sobre el tiempo. Utilizando el mejor de los dos modelos anteriores, predecir el calor generado a los 5 minutos de la reacción. ¿Es fiable la predicción? Justificar la respuesta. Resolución ","date":1390780800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"953e24db119bde37d3eb7560f3178438","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2014-01-27/","publishdate":"2014-01-27T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2014-01-27/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 27 de Enero de 2014\nEjercicio 1 Se realiza un estudio para determinar la efectividad de un medicamento para controlar la hipertensión a 180 pacientes hipertensos.","tags":["Examen"],"title":"Examen de Farmacia 2014-01-27","type":"book"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1388534400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"e4bec646020b6be1cad0ffbe8a72bfba","permalink":"/publication/bioestadistica-2014/","publishdate":"2020-09-16T21:26:02.230139Z","relpermalink":"/publication/bioestadistica-2014/","section":"publication","summary":"","tags":[],"title":"Bioestadística Aplicada con SPSS","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1388534400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"aa51cd44895df4c2492b5da16f359322","permalink":"/publication/towards-2014-1/","publishdate":"2020-09-16T21:26:02.426838Z","relpermalink":"/publication/towards-2014-1/","section":"publication","summary":"","tags":[],"title":"Towards a Semanctic Catalog of Similarity Measures","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1388534400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"ef9a9eb14999b77d107482c74d6c3dbd","permalink":"/publication/towards-2014/","publishdate":"2020-09-16T21:26:01.646422Z","relpermalink":"/publication/towards-2014/","section":"publication","summary":"","tags":[],"title":"Towards a Semantic Catalog of Similarity Measures","type":"publication"},{"authors":null,"categories":null,"content":"Esta es la entrada inaugural del blog Aprende con Alf.\n\u0026ldquo;Si he logrado ver más lejos, ha sido porque he subido a hombros de gigantes\u0026rdquo; (Isaac Newton)\nDurante mis años de docencia he aprendido un montón de cosas, no sólo de Matemáticas, gracias a una multitud de personas que han compartido sus conocimientos y trabajo mediante una licencia libre. Creo que ya es hora de que yo también aporte mi granito de arena al mundo y en particular a la comunidad de personas interesadas en aprender Matemáticas.\nPor tal motivo, me he decidido a crear este blog y ofrecer en abierto (bajo licencia creative common) nuevos materiales y aportaciones frutos de mi trabajo y experiencia como profesor de Matemáticas.\nEs la colaboración y el conocimiento libre lo que dignifica el nombre de la Ciencia y la hace avanzar a pasos de gigante.\nEn este blog podrás encontrar comentarios sobre los principales materiales de Estadística, Cálculo, Inteligencia Artificial y otras materias relacionadas con las Matemáticas que estarán disponibles en la web Aprende con Alf.\nCualquier sugerencia o comentario, siempre que sea constructivo, es bienvenido.\n","date":1369958400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"de5648e4e0e2b11cec4b051b06b7c9b6","permalink":"/post/inicio-blog/","publishdate":"2013-05-31T00:00:00Z","relpermalink":"/post/inicio-blog/","section":"post","summary":"Esta es la entrada inaugural del blog Aprende con Alf.\n","tags":null,"title":"Comenzando a aprender con Alf","type":"post"},{"authors":null,"categories":["Estadística","Bioestadística","Farmacia","Biotecnología"],"content":"Grados: Farmacia y Biotecnología\nFecha: 24 de Enero de 2013\nEjercicio 1 En un grupo de personas sometidas a una anestesia general se ha medido la dosis de sustancia anestésica recibida $X$ en mg y el tiempo que estuvieron dormidas $Y$ en horas. Las frecuencias observadas aparecen en la siguiente tabla:\n$$ \\begin{array}{|l|rrr|r|} \\hline X\\backslash Y \u0026amp; [1,2) \u0026amp; [2,3) \u0026amp; [3,4) \u0026amp; n_x \\newline \\hline (20,30] \u0026amp; 14 \u0026amp; 10 \u0026amp; 0 \u0026amp; 24 \\newline (30,40] \u0026amp; 12 \u0026amp; 26 \u0026amp; 7 \u0026amp; 45 \\newline (40,50] \u0026amp; 2 \u0026amp; 12 \u0026amp; 17 \u0026amp; 31 \\newline \\hline n_y \u0026amp; 28 \u0026amp; 48 \u0026amp; 24 \u0026amp; 100 \\newline \\hline \\end{array} $$\nSe pide:\n¿En qué variable es más representativa la media? Justificar la respuesta ¿Por encima de cuánto tiempo estarán dormidas el 10% de las personas que reciben una dosis entre 30 y 40 mg? ¿En qué variable hay más asimetría? Justificar la respuesta. Según el modelo de regresión lineal, ¿cuánta sustancia anestésica será necesaria para dormir a alguien durante al menos dos horas? ¿Es fiable la predicción? Justificar la respuesta. Resolución Ejercicio 2 Se sometió a una persona a unas sesiones de entrenamiento para el manejo de una máquina de análisis químicos y se valoró la destreza en el manejo en diversas ocasiones, valorandola en una escala de 0 a 100. Los resultados obtenidos aparecen en la siguiente tabla\n$$ \\begin{array}{lrrrrrr} \\hline \\textrm{Sesiones} \u0026amp; 2 \u0026amp; 5 \u0026amp; 7 \u0026amp; 10 \u0026amp; 12 \u0026amp; 16 \\newline \\textrm{Destreza} \u0026amp; 15 \u0026amp; 40 \u0026amp; 62 \u0026amp; 86 \u0026amp; 92 \u0026amp; 95 \\newline \\hline \\end{array} $$\nSe pide:\nCalcular la destreza alcanzada al cabo de 8 sesiones empleando el modelo logarítmico. Calcular el número de sesiones necesarias para alcanzar una destreza de 80 empleando el modelo exponencial. Justificar razonadamente cuál de las predicciones anteriores es más fiable. Resolución Ejercicio 3 Al realizar un estudio de regresión lineal de dos variables $X$ e $Y$, se sabe que las rectas de regresión se cortan en el punto $(5,15)$, que el coeficiente de correlación lineal es $-0.85$ y que la pendiente de la recta de regresión de $X$ sobre $Y$ es el doble que la de la recta de $Y$ sobre $X$. Se pide:\nCalcular las ecuaciones de las rectas de regresión de $Y$ sobre $X$ y de $X$ sobre $Y$. ¿Qué porcentaje de la variabilidad de $Y$ queda explicado por el modelo lineal? Resolución ","date":1358985600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"504ceaf6d1b6d7b9a07a630020a6911f","permalink":"/docencia/estadistica/examenes/farmacia/farmacia-2013-01-24/","publishdate":"2013-01-24T00:00:00Z","relpermalink":"/docencia/estadistica/examenes/farmacia/farmacia-2013-01-24/","section":"docencia","summary":"Grados: Farmacia y Biotecnología\nFecha: 24 de Enero de 2013\nEjercicio 1 En un grupo de personas sometidas a una anestesia general se ha medido la dosis de sustancia anestésica recibida $X$ en mg y el tiempo que estuvieron dormidas $Y$ en horas.","tags":["Examen"],"title":"Examen de Farmacia 2013-01-24","type":"book"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1356998400,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"5f25873cb050b635b9d7ac567a3583fa","permalink":"/publication/rkteaching-2013/","publishdate":"2020-09-16T21:26:02.327055Z","relpermalink":"/publication/rkteaching-2013/","section":"publication","summary":"","tags":[],"title":"RKTeaching: a new R package for teaching Statistics .","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1325376000,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"eff321037b1ca9bd9606d2292bb57de4","permalink":"/publication/rkteaching-2012/","publishdate":"2020-09-16T21:26:02.816682Z","relpermalink":"/publication/rkteaching-2012/","section":"publication","summary":"","tags":[],"title":"RKTeaching: Un paquete de R para la enseñanza de la Estadística","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1167609600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"99b05fedcabac3a3c427f3d002dbee36","permalink":"/publication/evolution-2007/","publishdate":"2020-09-16T21:26:01.746253Z","relpermalink":"/publication/evolution-2007/","section":"publication","summary":"","tags":[],"title":"Evolution of neuroendocrine cell population and peptidergic innervation, assessed by discriminant analysis, during postnatal development of the rat prostate","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1104537600,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"1978ae6e507b7e05ad3b7c46ff392638","permalink":"/publication/amon-2005/","publishdate":"2020-09-16T21:26:02.916684Z","relpermalink":"/publication/amon-2005/","section":"publication","summary":"","tags":[],"title":"AMON: A software system for automatic generation of ontology mappings","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1072915200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"199ff9472d40e6d884fe9391ee05c343","permalink":"/publication/framework-2004/","publishdate":"2020-09-16T21:26:02.625162Z","relpermalink":"/publication/framework-2004/","section":"publication","summary":"","tags":[],"title":"Framework for automatic generation of ontology mappings","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1072915200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"e58d1e5c9a8550c9c583ec27c0e329ca","permalink":"/publication/herramientas-2004/","publishdate":"2020-09-16T21:26:02.523121Z","relpermalink":"/publication/herramientas-2004/","section":"publication","summary":"","tags":[],"title":"Herramientas de trabajo cooperativo","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":1009843200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"3bdc4ec32bc413161b88aaf91a72f877","permalink":"/publication/aspectos-2002/","publishdate":"2020-09-16T21:26:03.009331Z","relpermalink":"/publication/aspectos-2002/","section":"publication","summary":"","tags":[],"title":"Aspectos técnicos de la comunidad virtual de usuarios FARMATOXI","type":"publication"},{"authors":["G; Rimbau, V; Sanchez-Alberca, A; Reverte, M; Alguacil, L F Repetto"],"categories":[],"content":"","date":978307200,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"1787620af867a98e635721f0278eca4d","permalink":"/publication/farmatoxi-2001/","publishdate":"2020-09-16T21:26:03.700427Z","relpermalink":"/publication/farmatoxi-2001/","section":"publication","summary":"","tags":[],"title":"FARMATOXI, a new virtual community of pharmacology and toxicology","type":"publication"},{"authors":["Alfredo Sánchez-Alberca"],"categories":[],"content":"","date":946684800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600296078,"objectID":"d3e2a26e98a746b19fdefca4b7030590","permalink":"/publication/farmatoxi-2000/","publishdate":"2020-09-16T21:26:02.719337Z","relpermalink":"/publication/farmatoxi-2000/","section":"publication","summary":"","tags":[],"title":"FARMATOXI: Red temática de farmacología y toxicología de RedIris","type":"publication"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"El objetivo de este trabajo es comprobar si se está utilizando la plataforma Airbnb por parte de empresas, en lugar de particulares, para alquiler turístico en el centro de Madrid.\nConjunto de datos Datos abiertos de Inside Airbnb: Fichero alojamientos Madrid detallado.\nRequisitos obligatorios Sin usar Pandas:\nExtraer del fichero de alojamientos una lista con todos los alojamientos, donde cada alojamiento sea un diccionario que contenga el identificador del alojamiento, el identificador del anfitrión, el distrito, el precio y las plazas. Crear una función que reciba la lista de alojamientos y devuelva el número de alojamientos en cada distrito. Crear una función que reciba la lista de alojamientos y un número de ocupantes y devuelva la lista de alojamientos con un número de plazas mayor o igual que el número de ocupantes. Crear una función que reciba la lista de alojamientos un distrito, y devuelva los 10 alojamientos más baratos del distrito. Crear una función que reciba la lista de alojamientos y devuelva un diccionario con los anfitriones y el número de alojamientos que posee cada uno. Usando Pandas:\nPreprocesar el fichero de alojamientos para crear un data frame con las variables id, host_id, listing_url, room_type, neighbourhood_group_cleansed, price, cleaning_fee, accommodates, minimum_nights, minimum_cost, review_scores_rating, latitude, longitude, is_location_exact. Eliminar del data frame cualquier fila incompleta. Añadir al data frame nuevas variables con el coste mínimo por noche y por persona (que incluya los gastos de limpieza). Crear una función que reciba una lista de distritos y devuelva un diccionario con los tipos de alojamiento en ese distrito y el porcentaje de alojamientos de ese tipo. Crear una función que reciba una lista de distritos y devuelva un diccionario con el número de alojamientos que cada anfitrión ofrece en esos distrito, ordenado de más a menos alojamientos. Crear una función que reciba devuelva un diccionario con el número medio de alojamientos por anfitrión de cada distrito. Crear una función que reciba una lista de distritos y dibuje un diagrama de sectores con los porcentajes de tipos de alojamientos en esos distritos. Crear una función que dibuje un diagrama de barras con el número de alojamientos por distritos. Crear una función que dibuje un diagrama de barras con los porcentajes acumulados de tipos de alojamientos por distritos. Crear una función reciba una lista de distritos y una lista de tipos de alojamientos, y dibuje un diagrama de sectores con la distribución del número de alojamientos de ese tipo por anfitrión. Crear una función que dibuje un diagrama de barras con los precios medios por persona y día de cada distrito. Crear una función que reciba una lista de distritos y dibuje un gráfico de dispersión con el coste mínimo por noche y persona y la puntuación en esos distritos. Crear una función que reciba una lista de distritos y dibuje dos histogramas con la distribución de precios por persona y día, uno para los alojamientos con título en inglés y otro para los alojamientos con títulos en español. Si la distribución es muy asimétrica, aplicar una transformación logarítmica. ¿Hay diferencias entre los precios de los alojamientos en inglés y el español? Nota: Para identificar el idioma puede usare el módulo langdetect. Solución Solución\nAbrir con ","date":2020,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631523540,"objectID":"d39d23a5fb0bfae3a2b84e3b3f27a009","permalink":"/docencia/python/trabajos/inteligencia-negocios/madrid-airbnb1/","publishdate":"1970-01-01T01:33:40+01:00","relpermalink":"/docencia/python/trabajos/inteligencia-negocios/madrid-airbnb1/","section":"docencia","summary":"Análisis de la ocupación de alojamientos con la plataforma Airbnb en Madrid.","tags":["Trabajo"],"title":"Airbnb Madrid","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"El objetivo de este trabajo es hacer un análisis del endeudamiento público por países.\nConjunto de datos Datos del banco mundial: Deuda pública países y PIB países.\nRequisitos Sin usar la librería Pandas:\nCrear una función que reciba un país y un tipo de deuda y devuelva un diccionario con todos los periodos y la cantidad de deuda en esos periodos de ese país y tipo de deuda. Crear una función que reciba un país y un tipo de deuda y devuelva un diccionario con el mínimo y el máximo de deuda de ese tipo para ese país. Crear una función que reciba un país y un año, y devuelva un diccionario con la deuda interna y la deuda externa de ese país en ese año. Crear una función que reciba un país y un año, y devuelva un diccionario con la deuda en moneda local y la deuda en moneda extranjera de ese país en ese año. Usando Pandas:\nPreprocesar el fichero de deuda pública para obtener un data frame con el país, el tipo de deuda, la fecha y la cantidad de deuda. Crear una función que reciba un país y una fecha y devuelva un diccionario con la deuda total interna, externa, en moneda local, en moneda extranjera, a corto plazo y a largo plazo, de ese país en esa fecha. Crear una función que reciba un tipo de deuda y una fecha, y devuelva un diccionario con la deuda de ese tipo de todos los países en esa fecha. Crear una función que reciba un país y una fecha y dibuje un diagrama de sectores con la deuda interna y la deuda externa de ese país en esa fecha. Crear una función que reciba un país y una fecha, y dibuje un diagrama de barras con las cantidades de los distintos tipos de deudas de ese país en esa fecha. Crear una función que reciba una lista de países y un tipo de deuda y dibuje un diagrama de líneas con la evolución de ese tipo de deuda de esos países (una línea por país). Crear una función que reciba un país y una lista de tipos de deuda y dibuje un diagrama de líneas con la evolución de esos tipos de deuda de ese país (una línea por tipo de deuda). Crear una función que reciba una lista de países y una lista de tipos de deuda, y dibuje un diagrama de cajas con las deudas de esos tipos de esos países (una caja por país y tipo de deuda). Preprocesar el fichero del PIB crear un data frame con el país, la fecha y el PIB. Crear una función que reciba un país y dibuje la evolución de la deuda pública total como porcentaje del PIB. Crear una función que reciba un país devuelva un diccionario con los años y si el endeudamiento en esa fecha era insostenible. Se considera un endeudamiento insostenible si durante los tres años anteriores el porcentaje de deuda pública con respecto al PIB es superior al 20%. Solución Solución\nAbrir con ","date":2020,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1633627012,"objectID":"8a2078ecb5d2ca972f78887a143ec685","permalink":"/docencia/python/trabajos/inteligencia-negocios/deuda-publica/","publishdate":"1970-01-01T01:33:40+01:00","relpermalink":"/docencia/python/trabajos/inteligencia-negocios/deuda-publica/","section":"docencia","summary":"Análisis de la deuda pública por Países y tipologías.","tags":["Trabajo"],"title":"Deuda Pública","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Tarea 1 La primera tarea consiste en escribir un programa que guarde en un fichero la secuencia de tableros de una partida de ajedrez. Partiremos del tablero inicial donde las filas del tablero están separadas por cambios de línea y las columnas por tabuladores.\nEl programa debe guardar el tablero inicial en un fichero con el nombre que elija el usuario. Después debe preguntar al usuario si quiere hacer un movimiento o terminar la partida. Cada vez que el usuario quiera hacer un nuevo movimiento debe preguntar la fila y la columna de la pieza que quiere mover y la fila y la columna a la que la quiere mover. Tras ello añadirá el tablero resultante al final del fichero anterior.\nEl fichero partida-ajedrez.txt contiene un ejemplo con el fichero resultante de una partida con 3 movimientos.\nTarea 2 Una vez generado el fichero con los tableros sucesivos de una partida de ajedrez, el programa preguntará por un movimiento y mostrará por pantalla el tablero correspondiente ese movimiento. Por ejemplo, utilizando el fichero partida-ajedrez.txt, si el usuario introduce el movimiento 2, debería mostrar por pantalla el siguiente tablero:\n♜\t♞\t♝\t♛\t♚\t♝\t♞\t♜ ♟\t♟\t♟\t♟\t♟\t♟\t♟ ♟\t♙\t♙\t♙\t♙\t♙\t♙\t♙\t♙ ♖\t♘\t♗\t♕\t♔\t♗\t♘\t♖ Solución Solución\n","date":2019,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1621599037,"objectID":"7abc995ed51fb148097720cac6cfa77b","permalink":"/docencia/python/retos/ajedrez/","publishdate":"1970-01-01T01:33:39+01:00","relpermalink":"/docencia/python/retos/ajedrez/","section":"docencia","summary":"Realizar movimientos en un tablero de ajedrez","tags":["Listas","Ficheros"],"title":"Ajedrez","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"El objetivo de este trabajo es hacer un análisis de los contratos menores del Ayuntamiento de Madrid desde 2015 para hacer una comparativa por años y ver qué empresas han resultado más beneficiadas.\nConjunto de datos Datos abiertos del Ayuntamiento de Madrid: Contratos menores\nDeben usarse los datos desde 2015.\nRequisitos obligatorios Crear una función que reciba una empresa y una lista de años y devuelva un diccionario con el número de contratos y el total facturado por la empresa esos años. Crear una función que reciba una sección y una lista de años y devuelva un diccionario con el número de contratos y el total facturado a la sección esos años. Crear una función que reciba una empresa, una sección y una lista de años y devuelva un diccionario con el número de contratos y el total facturado por la empresa a la sección esos años. Crear una función que reciba una rango de años y un número entero n e imprima la lista de las n empresas que más han facturado durante esos años ordenadas de mayor a menor facturación y genere un gráfico con esa información. Crear una función reciba una rango de años y un número entero n y genere un gráfico con la evolución anual del total facturado por las n empresas que más han facturado. Crear una función reciba una rango de años y genere un gráfico con la evolución anual del total facturado a las secciones. Solución Solución\nAbrir con ","date":2019,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631523540,"objectID":"256cc359bfebab0a47a477821987768d","permalink":"/docencia/python/trabajos/inteligencia-negocios/contratos-menores-madrid/","publishdate":"1970-01-01T01:33:39+01:00","relpermalink":"/docencia/python/trabajos/inteligencia-negocios/contratos-menores-madrid/","section":"docencia","summary":"Análisis del gasto en contratos menores del Ayuntamiento de Madrid.","tags":["Trabajo"],"title":"Contratos menores de Madrid","type":"book"},{"authors":null,"categories":["Programación","Python","Inteligencia de los Negocios"],"content":"El objetivo de este trabajo es comprobar si las restricciones de tráfico establecidas en Madrid Central han servido para reducir significativamente las emisiones de gases contaminantes.\nConjunto de datos Datos abiertos del Ayuntamiento de Madrid: Calidad del aire. Datos diarios años 2001 a 2019.\nRequisitos Crear una función que reciba una estación de medición y una magnitud y devuelva una lista con todas las mediciones de la magnitud en la estación. Crear una función que reciba un mes y una estación de medición y devuelva un diccionario con las medias de las magnitudes medidas por la estación durante ese mes. Crear una función que reciba un mes y una magnitud y devuelva un diccionario con las medias de las estaciones de medición de la magnitud durante ese mes. Crear una función que reciba un rango de fechas y una estación de medición y genere un gráfico con la evolución diaria de las magnitudes de esa estación en las fechas indicadas. Crear una función que reciba un rango de fechas y una magnitud y genere un gráfico con la evolución diaria de la magnitud para cada estación de medición en las fechas indicadas. Crear una función que reciba una magnitud y genere un gráfico con las medias mensuales para cada estación de medición. Crear una función que reciba un mes y una magnitud y devuelva un diccionario con las medias de la magnitud dentro de Madrid Central y fuera de ella. Crear una función que reciba una magnitud y genere un gráfico con las medias mensuales dentro de Madrid Central y fuera de ella. Solución Solución\nAbrir con ","date":2019,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631523540,"objectID":"760b081fbca88523853096346708f670","permalink":"/docencia/python/trabajos/inteligencia-negocios/emisiones-madrid/","publishdate":"1970-01-01T01:33:39+01:00","relpermalink":"/docencia/python/trabajos/inteligencia-negocios/emisiones-madrid/","section":"docencia","summary":"Análisis de las emisiones contaminantes de Madrid.","tags":["Trabajo"],"title":"Emisiones de Madrid","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Tarea El reto consiste en programar una función que dibuje estrellas como la que aparece a continuación con un número de puntas dado.\nPara ello hay que utilizar el módulo de Python Turtle que permite realizar trazos sencillos en una ventana gráfica.\nEn el siguiente video hay una introducción básica al módulo Turtle.\nY también dispones de una hoja de resumen con las principales funciones de Turtle.\nSolución Solución\n","date":2019,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1621599532,"objectID":"8636246bbef3086adb7305c5b9e7a2ac","permalink":"/docencia/python/retos/estrellas-regulares/","publishdate":"1970-01-01T01:33:39+01:00","relpermalink":"/docencia/python/retos/estrellas-regulares/","section":"docencia","summary":"Dibujar estrellas regulares con el módulo Turtle","tags":["Bucles","Turtle"],"title":"Estrellas regulares","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Tarea 1 La primera tarea consiste en construir un laberinto como el de la siguiente figura.\nEl laberinto se representará como una una lista de listas, donde cada lista es una fila del laberinto y cada casilla se representará con un espacio \u0026rsquo; \u0026rsquo; si hay paso o con la letra \u0026lsquo;X\u0026rsquo; si hay un muro, tal y como se muestra a continuación:\nlaberinto = [ [' ', 'X', 'X', 'X', 'X'], [' ', 'X', ' ', ' ', ' '], [' ', 'X', ' ', 'X', ' '], [' ', ' ', ' ', 'X', ' '], ['X', 'X', 'X', 'X', 'S'] ] El laberinto se debe crear a partir de una tupla con las coordenadas de las casillas donde hay muro, como la siguiente:\nmuro = ((0,1), (0,2), (0,3), (0,4), (1,1), (2,1), (2,3), (3,3), (4,0), (4,1), (4,2), (4,3)) Tarea 2 La segunda tarea a resolver consiste en construir un programa para recorrer el laberinto desde la entrada a la salida. La entrada siempre está en la esquina superior izquierda y la salida en la esquina inferior derecha.\nEl programa debe devolver una lista con la secuencia de movimientos para ir de la entrada a la salida del laberinto, tal y como se muestra a continuación:\n['Abajo', 'Abajo', 'Abajo', 'Abajo', 'Derecha', 'Derecha', 'Arriba', 'Arriba', 'Derecha', 'Derecha', 'Abajo', 'Abajo', 'Abajo'] Solución Solución\n","date":2019,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1621599532,"objectID":"ff28852d2f4813db7b3b0737d7930a96","permalink":"/docencia/python/retos/laberinto/","publishdate":"1970-01-01T01:33:39+01:00","relpermalink":"/docencia/python/retos/laberinto/","section":"docencia","summary":"Buscar la salida de un laberinto.","tags":["Listas","Bucles"],"title":"Laberinto","type":"book"},{"authors":null,"categories":null,"content":"Python ¿Qué es Python? Python es un lenguaje de programación de alto nivel multiparadigma que permite:\nProgramación imperativa Programación funcional Programación orientada a objetos Fue creado por Guido van Rossum en 1990 aunque actualmente es desarrollado y mantenido por la Python Software Foundation\nPrincipales ventajas de Python Es de código abierto (certificado por la OSI). Es interpretable y compilable. Es fácil de aprender gracias a que su sintaxis es bastante legible para los humanos. Es un lenguaje maduro (29 años). Es fácilmente extensible e integrable en otros lenguajes (C, java). Esta mantenido por una gran comunidad de desarrolladores y hay multitud de recursos para su aprendizaje. Tipos de ejecución Interpretado en la consola de Python Se ejecuta cada instrucción que introduce el usuario de manera interactiva.\n\u0026gt; python \u0026gt;\u0026gt;\u0026gt; name = \u0026quot;Alf\u0026quot; \u0026gt;\u0026gt;\u0026gt; print(\u0026quot;Hola \u0026quot;, name) Hola Alf Interpretado en fichero Se leen y se ejecutan una a una todas las instrucciones del fichero.\n# Fichero hola.py name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola \u0026quot;, name) \u0026gt; python hola.py Hola Alf También se puede hacer el fichero ejecutable indicando en la primera línea la ruta hasta el intérprete de Python.\n#!/usr/bin/python3 name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola\u0026quot;, name) \u0026gt; chmod +x hola.py \u0026gt; ./hola.py Hola Alf Compilado a bytecode # Fichero hola.py name = \u0026quot;Alf\u0026quot; print(\u0026quot;Hola \u0026quot; + name) \u0026gt; python -O -m py_compile hola.py \u0026gt; python __pycache__/hola.cpython-37.pyc Hola Alf Compilado a ejecutable del sistema Hay distintos paquetes que permiten compilar a un ejecutable del sistema operativo usado, por ejemplo pyinstaller.\n\u0026gt; conda install pyinstaller \u0026gt; pyinstaller hola.py \u0026gt; ./dist/hola/hola Hola Alf Tipos de datos primitivos simples Números (numbers): Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números.\nEjemplo. 0, -1, 3.1415. Cadenas (strings): Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas simples o dobles.\nEjemplo. \u0026lsquo;Hola\u0026rsquo;, \u0026ldquo;Adiós\u0026rdquo;. Booleanos (boolean): Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso respectivamente. Estos datos son inmutables, es decir, su valor es constante y no puede cambiar.\nTipos de datos primitivos compuestos (contenedores) Listas (lists): Colecciones de objetos que representan secuencias ordenadas de objetos de distintos tipos. Se representan con corchetes y los elementos se separan por comas.\nEjemplo. [1, \u0026ldquo;dos\u0026rdquo;, [3, 4], True]. Tuplas (tuples). Colecciones de objetos que representan secuencias ordenadas de objetos de distintos tipos. A diferencia de las listas son inmutables, es decir, que no cambian durante la ejecución. Se representan mediante paréntesis y los elementos se separan por comas.\nEjemplo. (1, \u0026lsquo;dos\u0026rsquo;, 3) Diccionarios (dictionaries): Colecciones de objetos con una clave asociada. Se representan con llaves, los pares separados por comas y cada par contiene una clave y un objeto asociado separados por dos puntos.\nEjemplo. {\u0026lsquo;pi\u0026rsquo;:3.1416, \u0026rsquo;e\u0026rsquo;:2.718}. Clase de un dato type() La clase a la que pertenece un dato se obtiene con el comando type()\n\u0026gt;\u0026gt;\u0026gt; type(1) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(\u0026quot;Hola\u0026quot;) \u0026lt;class 'str'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type([1, \u0026quot;dos\u0026quot;, [3, 4], True]) \u0026lt;class 'list'\u0026gt; \u0026gt;\u0026gt;\u0026gt;type({'pi':3.1416, 'e':2.718}) \u0026lt;class 'dict'\u0026gt; \u0026gt;\u0026gt;\u0026gt;type((1, 'dos', 3)) \u0026lt;class 'tuple'\u0026gt; Números (clases int y float) Secuencia de dígitos (pueden incluir el - para negativos y el . para decimales) que representan números. Pueden ser enteros (int) o reales (float).\n\u0026gt;\u0026gt;\u0026gt; type(1) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(-2) \u0026lt;class 'int'\u0026gt; \u0026gt;\u0026gt;\u0026gt; type(2.3) \u0026lt;class 'float'\u0026gt; Operadores aritméticos Operadores aritméticos: + (suma), - (resta), * (producto), / (cociente), // (cociente división entera), % (resto división entera), ** (potencia). Orden de prioridad de evaluación:\n1 Funciones predefinidas 2 Potencias 3 Productos y cocientes 4 Sumas y restas Se puede saltar el orden de evaluación utilizando paréntesis ( ).\n\u0026gt;\u0026gt;\u0026gt; 2+3 5 \u0026gt;\u0026gt;\u0026gt; 5*-2 -10 \u0026gt;\u0026gt;\u0026gt; 5/2 2.5 \u0026gt;\u0026gt;\u0026gt; 5//2 2 \u0026gt;\u0026gt;\u0026gt; (2+3)**2 25 Operadores lógicos con números Devuelven un valor lógico o booleano.\nOperadores lógicos: == (igual que), \u0026gt; (mayor que), \u0026lt; (menor que), \u0026gt;= (mayor o igual que), \u0026lt;= (menor o igual que), != (distinto de). \u0026gt;\u0026gt;\u0026gt; 3==3 True \u0026gt;\u0026gt;\u0026gt; 3.1\u0026lt;=3 False \u0026gt;\u0026gt;\u0026gt; -1!=1 True Cadenas (clase str) Secuencia de caracteres alfanuméricos que representan texto. Se escriben entre comillas sencillas ' o dobles \u0026quot;.\n'Python' \u0026quot;123\u0026quot; 'True' # Cadena vacía '' # Cadena con un espacio en blanco ' ' # Cambio de línea '\\n' # Tabulador '\\t' Acceso a los elementos de una cadena Cada carácter tiene asociado un índice que permite acceder a él.\nCadena P y t h o n Índice positivo 0 1 2 3 4 5 Índice negativo -6 -5 -4 -3 -2 -1 c[i] devuelve el carácter de la cadena c con el índice i. El índice del primer carácter de la cadena es 0.\nTambién se pueden utilizar índices negativos para recorrer la cadena del final al principio.\nEl índice del último carácter de la cadena es -1.\n\u0026gt;\u0026gt;\u0026gt; 'Python'[0] 'P' \u0026gt;\u0026gt;\u0026gt; 'Python'[1] 'y' \u0026gt;\u0026gt;\u0026gt; 'Python'[-1] 'n' \u0026gt;\u0026gt;\u0026gt; 'Python'[6] Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; IndexError: string index out of range Subcadenas c[i:j:k] : Devuelve la subcadena de c desde el carácter con el índice i hasta el carácter anterior al índice j, tomando caracteres cada k. \u0026gt;\u0026gt;\u0026gt; 'Python'[1:4] 'yth' \u0026gt;\u0026gt;\u0026gt; 'Python'[1:1] '' \u0026gt;\u0026gt;\u0026gt; 'Python'[2:] 'thon' \u0026gt;\u0026gt;\u0026gt; 'Python'[:-2] 'ytho' \u0026gt;\u0026gt;\u0026gt; 'Python'[:] 'Python' \u0026gt;\u0026gt;\u0026gt; 'Python'[0:6:2] 'Pto' Operaciones con cadenas c1 + c2 : Devuelve la cadena resultado de concatenar las cadenas c1 y c2. c * n : Devuelve la cadena resultado de concatenar n copias de la cadena c. c1 in c2 : Devuelve True si c1 es una cadena concenida en c2 y False en caso contrario. c1 not in c2 : Devuelve True si c1 es una cadena no concenida en c2 y False en caso contrario. \u0026gt;\u0026gt;\u0026gt; 'Me gusta ' + 'Python' 'Me gusta Python' \u0026gt;\u0026gt;\u0026gt; 'Python' * 3 'PythonPythonPython' \u0026gt;\u0026gt;\u0026gt; 'y' in 'Python' True \u0026gt;\u0026gt;\u0026gt; 'tho' in 'Python' True \u0026gt;\u0026gt;\u0026gt; 'to' not in 'Python' True Operaciones de comparación de cadenas c1 == c2 : Devuelve True si la cadena c1 es igual que la cadena c2 y False en caso contrario. c1 \u0026gt; c2 : Devuelve True si la cadena c1 sucede a la cadena c2 y False en caso contrario. c1 \u0026lt; c2 : Devuelve True si la cadena c1 antecede a la cadena c2 y False en caso contrario. c1 \u0026gt;= c2 : Devuelve True si la cadena c1 sucede o es igual a la cadena c2 y False en caso contrario. c1 \u0026lt;= c2 : Devuelve True si la cadena c1 antecede o es igual a la cadena c2 y False en caso contrario. c1 != c2 : Devuelve True si la cadena c1 es distinta de la cadena c2 y False en caso contrario. Utilizan el orden establecido en el código ASCII.\nOperaciones de comparación de cadenas \u0026gt;\u0026gt;\u0026gt; 'Python' == 'python' False \u0026gt;\u0026gt;\u0026gt; 'Python' \u0026lt; 'python' True \u0026gt;\u0026gt;\u0026gt; 'a' \u0026gt; 'Z' True \u0026gt;\u0026gt;\u0026gt; 'A' \u0026gt;= 'Z' False \u0026gt;\u0026gt;\u0026gt; '' \u0026lt; 'Python' True Funciones de cadenas len(c) : Devuelve el número de caracteres de la cadena c. min(c) : Devuelve el carácter menor de la cadena c. max(c) : Devuelve el carácter mayor de la cadena c. c.upper() : Devuelve la cadena con los mismos caracteres que la cadena c pero en mayúsculas. c.lower() : Devuelve la cadena con los mismos caracteres que la cadena c pero en minúsculas. c.title() : Devuelve la cadena con los mismos caracteres que la cadena c con el primer carácter en mayúsculas y el resto en minúsculas. c.split(delimitador) : Devuelve la lista formada por las subcadenas que resultan de partir la cadena c usando como delimitador la cadena delimitador. Si no se especifica el delimitador utiliza por defecto el espacio en blanco. Funciones de cadenas \u0026gt;\u0026gt;\u0026gt; len('Python') 6 \u0026gt;\u0026gt;\u0026gt; min('Python') 'P' \u0026gt;\u0026gt;\u0026gt; max('Python') 'y' \u0026gt;\u0026gt;\u0026gt; 'Python'.upper() 'PYTHON' \u0026gt;\u0026gt;\u0026gt; 'A,B,C'.split(',') ['A', 'B', 'C'] \u0026gt;\u0026gt;\u0026gt; 'I love Python'.split() ['I', 'love', 'Python'] Datos lógicos o booleanos (clase bool) Contiene únicamente dos elementos True y False que representan los valores lógicos verdadero y falso respectivamente.\nFalse tiene asociado el valor 0 y True tiene asociado el valor 1.\nOperaciones con valores lógicos Operadores lógicos: == (igual que), \u0026gt; (mayor), \u0026lt; (menor), \u0026gt;= (mayor o igual que), \u0026lt;= (menor o igual que), != (distinto de). not b (negación) : Devuelve True si el dato booleano b es False , y False en caso contrario. b1 and b2 : Devuelve True si los datos booleanos b1 y b2 son True, y False en caso contrario. b1 or b2 : Devuelve True si alguno de los datos booleanos b1 o b2 son True, y False en caso contrario. Tabla de verdad x y not x x and y x or y False False True False False False True True False True True False False False True True True False True True \u0026gt;\u0026gt;\u0026gt; not True False \u0026gt;\u0026gt;\u0026gt; False or True True \u0026gt;\u0026gt;\u0026gt; True and False False \u0026gt;\u0026gt;\u0026gt; True and True True Conversión de datos primitivos simples Las siguientes funciones convierten un dato de un tipo en otro, siempre y cuando la conversión sea posible.\nint() convierte a entero.\nEjemplo. int('12') 12\nint(True) 1\nint('c') Error float() convierte a real.\nEjemplo. float('3.14') 3.14\nfloat(True) 1.0\nfloat('III') Error str() convierte a cadena.\nEjemplo. str(3.14) '3.14'\nstr(True) 'True' bool() convierte a lógico.\nEjemplo. bool('0') False\nbool('3.14') True\nbool('') False\nbool('Hola') True Variables Una variable es un identificador ligado a algún valor.\nReglas para nombrarlas:\nComienzan siempre por una letra, seguida de otras letras o números. No se pueden utilizarse palabras reservadas del lenguaje. A diferencia de otros lenguajes no tienen asociado un tipo y no es necesario declararlas antes de usarlas (tipado dinámico).\nPara asignar un valor a una variable se utiliza el operador = y para borrar una variable se utiliza la instrucción del.\nlenguaje = 'Python' x = 3.14 y = 3 + 2 # Asignación múltiple a1, a2 = 1, 2 # Intercambio de valores a, b = b, a # Incremento (equivale a x = x + 2) x += 2 # Decremento (equivale a x = x - 1) x -= 1 # Valor no definido x = None del x Entrada por terminal input Para asignar a una variable un valor introducido por el usuario en la consola se utiliza la instrucción\ninput(mensaje) : Muestra la cadena mensaje por la terminal y devuelve una cadena con la entrada del usuario.\nEl valor devuelto siempre es una cadena, incluso si el usuario introduce un dato numérico.\n\u0026gt;\u0026gt;\u0026gt; language = input('¿Cuál es tu lenguaje favorito? ') ¿Cuál es tu lenguaje favorito? Python \u0026gt;\u0026gt;\u0026gt; language 'Python' \u0026gt;\u0026gt;\u0026gt; age = input('¿Cuál es tu edad? ') ¿Cuál es tu edad? 20 \u0026gt;\u0026gt;\u0026gt; age '20' Salida por terminal print() Para mostrar un dato por la terminal se utiliza la instrucción\nprint(dato1, ..., sep=' ', end='\\n', file=sys.stdout)\ndonde\ndato1, ... son los datos a imprimir y pueden indicarse tantos como se quieran separados por comas. sep establece el separador entre los datos, que por defecto es un espacio en blanco ' '. end indica la cadena final de la impresión, que por defecto es un cambio de línea \\n. file indica la dirección del flujo de salida, que por defecto es la salida estándar sys.stdout. Salida por terminal print() \u0026gt;\u0026gt;\u0026gt; print('Hola') Hola \u0026gt;\u0026gt;\u0026gt; name = 'Alf' \u0026gt;\u0026gt;\u0026gt; print('Hola', name) Hola Alf \u0026gt;\u0026gt;\u0026gt; print('El valor de pi es', 3.1415) El valor de pi es 3.1415 \u0026gt;\u0026gt;\u0026gt; print('Hola', name, sep='') HolaAlf \u0026gt;\u0026gt;\u0026gt; print('Hola', name, end='!\\n') Hola Alf! Cadenas formateadas % El operador % se puede usar también para formatear cadenas.\nprint(dato1, ..., sep=' ', end='\\n', file=sys.stdout)\ndonde\ndato1, ... son los datos a imprimir y pueden indicarse tantos como se quieran separados por comas. sep establece el separador entre los datos, que por defecto es un espacio en blanco ' '. end indica la cadena final de la impresión, que por defecto es un cambio de línea \\n. file indica la dirección del flujo de salida, que por defecto es la salida estándar sys.stdout. Condicionales if if condición1:\nbloque código\nelif condición2:\nbloque código\n\u0026hellip;\nelse:\nbloque código\nEvalúa la expresión lógica condición1 y ejecuta el primer bloque de código si es True; si no, evalúa la siguientes condiciones hasta llegar a la primera que es True y ejecuta el bloque de código asociado. Si ninguna condición es True ejecuta el bloque de código después de else:.\nPueden aparecer varios bloques elif pero solo uno else al final.\nLos bloques de código deben estar indentados por 4 espacios.\nCondicionales La instrucción condicional permite evaluar el estado del programa y tomar decisiones sobre qué código ejecutar en función del mismo.\n\u0026gt;\u0026gt;\u0026gt; edad = 14 \u0026gt;\u0026gt;\u0026gt; if edad \u0026lt;= 18 : ... print('Menor') ... elif edad \u0026gt; 65: ... print('Jubilado') ... else: ... print('Activo') ... Menor \u0026gt;\u0026gt;\u0026gt; age = 20 \u0026gt;\u0026gt;\u0026gt; if edad \u0026lt;= 18 : ... print('Menor') ... elif edad \u0026gt; 65: ... print('Jubilado') ... else: ... print('Activo') ... Activo Bucles condicionales while while condición:\nbloque código\nRepite la ejecución del bloque de código mientras la expresión lógica condición sea cierta.\nSe puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break.\nEl bloque de código debe estar indentado por 4 espacios.\nBucles condicionales \u0026gt;\u0026gt;\u0026gt; # Pregunta al usuario por un número hasta que introduce 0. \u0026gt;\u0026gt;\u0026gt; num = None \u0026gt;\u0026gt;\u0026gt; while num != 0: ... num = int(input('Introduce un número: ')) ... Introduce un número: 2 Introduce un número: 1 Introduce un número: 0 \u0026gt;\u0026gt;\u0026gt; Alternativa:\n\u0026gt;\u0026gt;\u0026gt; # Pregunta al usuario por un número hasta que introduce 0. \u0026gt;\u0026gt;\u0026gt; while True: ... num = int(input('Introduce un número: ')) ... if num == 0: ... break ... Introduce un número: 2 Introduce un número: 1 Introduce un número: 0 \u0026gt;\u0026gt;\u0026gt; Bucles iterativos for for i in secuencia:\nbloque código\nRepite la ejecución del bloque de código para cada elemento de la secuencia secuencia, asignado dicho elemento a i en cada repetición.\nSe puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción break o saltar la ejecución para un determinado elemento de la secuencia con la instrucción continue.\nEl bloque de código debe estar indentado por 4 espacios.\nSe utiliza fundamentalmente para recorrer colecciones de objetos como cadenas, listas, tuplas o diccionarios.\nBucles iterativos A menudo se usan con la instrucción range:\nrange(fin) : Genera una secuencia de números enteros desde 0 hasta fin-1. range(inicio, fin, salto) : Genera una secuencia de números enteros desde inicio hasta fin-1 con un incremento de salto. \u0026gt;\u0026gt;\u0026gt; palabra = 'Python' \u0026gt;\u0026gt;\u0026gt; for letra in palabra: ... print(letra) ... P y t h o n \u0026gt;\u0026gt;\u0026gt; for i in range(1, 10, 2): ... print(i, end=\u0026quot;, \u0026quot;) ... 1, 3, 5, 7, 9, \u0026gt;\u0026gt;\u0026gt; Listas Una lista es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes [ ] separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos. Son mutables, es decir, pueden alterarse durante la ejecución de un programa. # Lista vacía type([]) \u0026lt;class 'list'\u0026gt; # Lista con elementos de distintos tipos [1, \u0026quot;dos\u0026quot;, True] # Listas anidadas [1, [2, 3], 4] Acceso a los elementos de una lista Se utilizan los mismos operadores de acceso que para cadenas de caracteres.\nl[i] devuelve el elemento de la lista l con el índice i. El índice del primer elemento de la lista es 0.\n\u0026gt;\u0026gt;\u0026gt; a = ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[0] 'P' \u0026gt;\u0026gt;\u0026gt; a[5] 'n' \u0026gt;\u0026gt;\u0026gt; a[6] Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; IndexError: list index out of range \u0026gt;\u0026gt;\u0026gt; a[-1] 'n' Sublistas l[i:j:k] : Devuelve la sublista desde el elemento de l con el índice i hasta el elemento anterior al índice j, tomando elementos cada k. \u0026gt;\u0026gt;\u0026gt; a = ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[1:4] ['y', 't', 'h'] \u0026gt;\u0026gt;\u0026gt; a[1:1] [] \u0026gt;\u0026gt;\u0026gt; a[:-3] ['y', 't', 'h'] \u0026gt;\u0026gt;\u0026gt; a[:] ['P', 'y', 't', 'h', 'o', 'n'] \u0026gt;\u0026gt;\u0026gt; a[0:6:2] ['P', 't', 'o'] Operaciones que no modifican una lista len(l) : Devuelve el número de elementos de la lista l. min(l) : Devuelve el mínimo elemento de la lista l siempre que los datos sean comparables. max(l) : Devuelve el máximo elemento de la lista l siempre que los datos sean comparables. sum(l) : Devuelve la suma de los elementos de la lista l, siempre que los datos se puedan sumar. dato in l : Devuelve True si el dato dato pertenece a la lista l y False en caso contrario. l.index(dato) : Devuelve la posición que ocupa en la lista l el primer elemento con valor dato. l.count(dato) : Devuelve el número de veces que el valor dato está contenido en la lista l. all(l) : Devuelve True si todos los elementos de la lista l son True y False en caso contrario. any(l) : Devuelve True si algún elemento de la lista l es True y False en caso contrario. Operaciones que no modifican una lista \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 2, 3] \u0026gt;\u0026gt;\u0026gt; len(a) 4 \u0026gt;\u0026gt;\u0026gt; min(a) 1 \u0026gt;\u0026gt;\u0026gt; max(a) 3 \u0026gt;\u0026gt;\u0026gt; sum(a) 8 \u0026gt;\u0026gt;\u0026gt; 3 in a True \u0026gt;\u0026gt;\u0026gt; a.index(2) 1 \u0026gt;\u0026gt;\u0026gt; a.count(2) 2 \u0026gt;\u0026gt;\u0026gt; all(a) True \u0026gt;\u0026gt;\u0026gt; any([0, False, 3\u0026lt;2]) False Operaciones que modifican una lista l1 + l2 : Crea una nueva lista concatenan los elementos de la listas l1 y l2. l.append(dato) : Añade dato al final de la lista l. l.extend(sequencia) : Añade los datos de sequencia al final de la lista l. l.insert(índice, dato) : Inserta dato en la posición índice de la lista l y desplaza los elementos una posición a partir de la posición índice. l.remove(dato) : Elimina el primer elemento con valor dato en la lista l y desplaza los que están por detrás de él una posición hacia delante. l.pop([índice]) : Devuelve el dato en la posición índice y lo elimina de la lista l, desplazando los elementos por detrás de él una posición hacia delante. l.sort() : Ordena los elementos de la lista l de acuerdo al orden predefinido, siempre que los elementos sean comparables. l.reverse() : invierte el orden de los elementos de la lista l. Operaciones que modifican una lista \u0026gt;\u0026gt;\u0026gt; a = [1, 3] \u0026gt;\u0026gt;\u0026gt; b = [2 , 4, 6] \u0026gt;\u0026gt;\u0026gt; a.append(5) \u0026gt;\u0026gt;\u0026gt; a [1, 3, 5] \u0026gt;\u0026gt;\u0026gt; a.remove(3) \u0026gt;\u0026gt;\u0026gt; a [1, 5] \u0026gt;\u0026gt;\u0026gt; a.insert(1, 3) \u0026gt;\u0026gt;\u0026gt; a [1, 3, 5] \u0026gt;\u0026gt;\u0026gt; b.pop() 6 \u0026gt;\u0026gt;\u0026gt; c = a + b \u0026gt;\u0026gt;\u0026gt; c [1, 3, 5, 2, 4] \u0026gt;\u0026gt;\u0026gt; c.sort() \u0026gt;\u0026gt;\u0026gt; c [1, 2, 3, 4, 5] \u0026gt;\u0026gt;\u0026gt; c.reverse() \u0026gt;\u0026gt;\u0026gt; c [5, 4, 3, 2, 1] Copia de listas Existen dos formas de copiar listas:\nCopia por referencia l1 = l2: Asocia la la variable l1 la misma lista que tiene asociada la variable l2, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través de l1 o l2 afectará a la misma lista. Copia por valor l1 = list(l2): Crea una copia de la lista asociada a l2 en una dirección de memoria diferente y se la asocia a l1. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará a la lista de l2 y viceversa. Copia de listas \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = a \u0026gt;\u0026gt;\u0026gt; b [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; b.remove(2) \u0026gt;\u0026gt;\u0026gt; b [1, 3] \u0026gt;\u0026gt;\u0026gt; a [1, 3] \u0026gt;\u0026gt;\u0026gt; a = [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = list(a) \u0026gt;\u0026gt;\u0026gt; b [1, 2, 3] \u0026gt;\u0026gt;\u0026gt; b.remove(2) \u0026gt;\u0026gt;\u0026gt; b [1, 3] \u0026gt;\u0026gt;\u0026gt; a [1, 2, 3] Tuplas Una tupla es una secuencias ordenadas de objetos de distintos tipos.\nSe construyen poniendo los elementos entre corchetes ( ) separados por comas.\nSe caracterizan por:\nTienen orden. Pueden contener elementos de distintos tipos. Son inmutables, es decir, no pueden alterarse durante la ejecución de un programa. Se usan habitualmente para representar colecciones de datos una determinada estructura semántica, como por ejemplo un vector o una matriz.\n# Tupla vacía type(()) \u0026lt;class 'tuple'\u0026gt; # Tupla con elementos de distintos tipos (1, \u0026quot;dos\u0026quot;, True) # Vector (1, 2, 3) # Matriz ((1, 2, 3), (4, 5, 6)) Operaciones con tuplas El acceso a los elementos de una tupla se realiza del mismo modo que en las listas. También se pueden obtener subtuplas de la misma manera que las sublistas.\nLas operaciones de listas que no modifican la lista también son aplicables a las tuplas.\n\u0026gt;\u0026gt;\u0026gt; a = (1, 2, 3) \u0026gt;\u0026gt;\u0026gt; a[1] 2 \u0026gt;\u0026gt;\u0026gt; len(a) 3 \u0026gt;\u0026gt;\u0026gt; a.index(3) 2 \u0026gt;\u0026gt;\u0026gt; 0 in a False \u0026gt;\u0026gt;\u0026gt; b = ((1, 2, 3), (4, 5, 6)) \u0026gt;\u0026gt;\u0026gt; b[1] (4, 5, 6) \u0026gt;\u0026gt;\u0026gt; b[1][2] 6 Diccionarios Un diccionario es una colección de pares formados por una clave y un valor asociado a la clave.\nSe construyen poniendo los pares entre llaves { } separados por comas, y separando la clave del valor con dos puntos :.\nSe caracterizan por:\nNo tienen orden. Pueden contener elementos de distintos tipos. Son mutables, es decir, pueden alterarse durante la ejecución de un programa. Las claves son únicas, es decir, no pueden repetirse en un mismo diccionario, y pueden ser de cualquier tipo de datos inmutable. # Diccionario vacío type({}) \u0026lt;class 'dict'\u0026gt; # Diccionario con elementos de distintos tipos {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} # Diccionarios anidados {'nombre_completo':{'nombre': 'Alfredo', 'Apellidos': 'Sánchez Alberca'}} Acceso a los elementos de un diccionario d[clave] devuelve el valor del diccionario d asociado a la clave clave. Si en el diccionario no existe esa clave devuelve un error. d.get(clave, valor) devuelve el valor del diccionario d asociado a la clave clave. Si en el diccionario no existe esa clave devuelve valor, y si no se especifica un valor por defecto devuelve None. \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a['nombre'] 'Alfredo' \u0026gt;\u0026gt;\u0026gt; a['despacho'] = 210 \u0026gt;\u0026gt;\u0026gt; a {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a.get('email') '[email protected]' \u0026gt;\u0026gt;\u0026gt; a.get('universidad', 'CEU') 'CEU' Operaciones que no modifican un diccionario len(d) : Devuelve el número de elementos del diccionario d. min(d) : Devuelve la mínima clave del diccionario d siempre que las claves sean comparables. max(d) : Devuelve la máxima clave del diccionario d siempre que las claves sean comparables. sum(d) : Devuelve la suma de las claves del diccionario d, siempre que las claves se puedan sumar. clave in d : Devuelve True si la clave clave pertenece al diccionario d y False en caso contrario. d.keys() : Devuelve un iterador sobre las claves de un diccionario. d.values() : Devuelve un iterador sobre los valores de un diccionario. d.items() : Devuelve un iterador sobre los pares clave-valor de un diccionario. Operaciones que no modifican un diccionario \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; len(a) 3 \u0026gt;\u0026gt;\u0026gt; min(a) 'despacho' \u0026gt;\u0026gt;\u0026gt; 'email' in a True \u0026gt;\u0026gt;\u0026gt; a.keys() dict_keys(['nombre', 'despacho', 'email']) \u0026gt;\u0026gt;\u0026gt; a.values() dict_values(['Alfredo', 218, '[email protected]']) \u0026gt;\u0026gt;\u0026gt; a.items() dict_items([('nombre', 'Alfredo'), ('despacho', 218), ('email', '[email protected]')]) Operaciones que modifican un diccionario d[clave] = valor : Añade al diccionario d el par formado por la clave clave y el valor valor. d.update(d2). Añade los pares del diccionario d2 al diccionario d. d.pop(clave, alternativo) : Devuelve del valor asociado a la clave clave del diccionario d y lo elimina del diccionario. Si la clave no está devuelve el valor alternativo. d.popitem() : Devuelve la tupla formada por la clave y el valor del último par añadido al diccionario d y lo elimina del diccionario. del d[clave] : Elimina del diccionario d el par con la clave clave. d.clear() : Elimina todos los pares del diccionario d de manera que se queda vacío. Operaciones que modifican un diccionario \u0026gt;\u0026gt;\u0026gt; a = {'nombre':'Alfredo', 'despacho': 218, 'email':'[email protected]'} \u0026gt;\u0026gt;\u0026gt; a['universidad'] = 'CEU' \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'despacho': 218, 'email': '[email protected]', 'universidad': 'CEU'} \u0026gt;\u0026gt;\u0026gt; a.pop('despacho') 218 \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'email': '[email protected]', 'universidad': 'CEU'} \u0026gt;\u0026gt;\u0026gt; a.popitem() ('universidad', 'CEU') \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo', 'email': '[email protected]'} \u0026gt;\u0026gt;\u0026gt; del a['email'] \u0026gt;\u0026gt;\u0026gt; a {'nombre': 'Alfredo'} \u0026gt;\u0026gt;\u0026gt; a.clear() \u0026gt;\u0026gt;\u0026gt; a {} Copia de diccionarios Existen dos formas de copiar diccionarios:\nCopia por referencia d1 = d2: Asocia la la variable d1 el mismo diccionario que tiene asociado la variable d2, es decir, ambas variables apuntan a la misma dirección de memoria. Cualquier cambio que hagamos a través de l1 o l2 afectará al mismo diccionario. Copia por valor d1 = list(d2): Crea una copia del diccionario asociado a d2 en una dirección de memoria diferente y se la asocia a d1. Las variables apuntan a direcciones de memoria diferentes que contienen los mismos datos. Cualquier cambio que hagamos a través de l1 no afectará al diccionario de l2 y viceversa. Copia de diccionarios \u0026gt;\u0026gt;\u0026gt; a = {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = a \u0026gt;\u0026gt;\u0026gt; b {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; b.pop(2) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a = {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; # copia por referencia \u0026gt;\u0026gt;\u0026gt; b = dict(a) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 2:'B', 3:'C'} \u0026gt;\u0026gt;\u0026gt; b.pop(2) \u0026gt;\u0026gt;\u0026gt; b {1:'A', 3:'C'} \u0026gt;\u0026gt;\u0026gt; a {1:'A', 2:'B', 3:'C'} Funciones def Una función es un bloque de código que tiene asociado un nombre, de manera que cada vez que se quiera ejecutar el bloque de código basta con invocar el nombre de la función.\nPara declarar una función se utiliza la siguiente sintaxis:\ndef \u0026lt;nombre-funcion\u0026gt; (\u0026lt;parámetros\u0026gt;):\nbloque código\nreturn \u0026lt;objeto\u0026gt;\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(): ... print('¡Bienvenido a Python!') ... return ... \u0026gt;\u0026gt;\u0026gt; type(bienvenida) \u0026lt;class 'function'\u0026gt; \u0026gt;\u0026gt;\u0026gt; bienvenida() ¡Bienvenido a Python! Parámetros de una función Una función puede recibir valores cuando se invoca a través de unas variables conocidas como parámetros que se definen entre paréntesis en la declaración de la función. En el cuerpo de la función se pueden usar estos parámetros como si fuesen variables.\nLos valores que se pasan a la función en una invocación concreta de ella se conocen como argumentos y se asocian a los parámetros de la declaración de la función.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre): ... print('¡Bienvenido a Python', nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! Argumentos de la llamada a una función Los valores que se pasan a la función en una llamada o invocación concreta de ella se conocen como argumentos y se asocian a los parámetros de la declaración de la función.\nLos argumentos se pueden indicar de dos formas:\nArgumentos posicionales: Se asocian a los parámetros de la función en el mismo orden que aparecen en la definición de la función. Argumentos por nombre: Se indica explícitamente el nombre del parámetro al que se asocia un argumento de la forma parametro = argumento. \u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre, apellido): ... print('¡Bienvenido a Python', nombre, apellido + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alfredo', 'Sánchez) ¡Bienvenido a Python Alfredo Sánchez! \u0026gt;\u0026gt;\u0026gt; bienvenida(apellido = 'Sánchez', nombre = 'Alfredo') ¡Bienvenido a Python Alfredo Sánchez! Retorno de una función Una función puede devolver un objeto de cualquier tipo tras su invocación. Para ello el objeto a devolver debe escribirse detrás de la palabra reservada return. Si no se indica ningún objeto, la función no devolverá nada.\n\u0026gt;\u0026gt;\u0026gt; def area_triangulo(base, altura): ... return base * altura / 2 ... \u0026gt;\u0026gt;\u0026gt; area_triangulo(2, 3) 3 \u0026gt;\u0026gt;\u0026gt; area_triangulo(4, 5) 10 Argumentos por defecto En la definición de una función se puede asignar a cada parámetro un argumento por defecto, de manera que si se invoca la función sin proporcionar ningún argumento para ese parámetro, se utiliza el argumento por defecto.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre, lenguaje = 'Python'): ... print('¡Bienvenido a', lenguaje, nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf', 'Java') ¡Bienvenido a Java Alf! Pasar un número indeterminado de argumentos Por último, es posible pasar un número variable de argumentos a un parámetro. Esto se puede hacer de dos formas:\n*parametro: Se antepone un asterisco al nombre del parámetro y en la invocación de la función se pasa el número variable de argumentos separados por comas. Los argumentos se guardan en una lista que se asocia al parámetro. **parametro: Se anteponen dos asteriscos al nombre del parámetro y en la invocación de la función se pasa el número variable de argumentos por pares nombre = valor, separados por comas. Los argumentos se guardan en un diccionario que se asocia al parámetro. \u0026gt;\u0026gt;\u0026gt; def menu(*platos): ... print('Hoy tenemos: ', end='') ... for plato in platos: ... print(plato, end=', ') ... return ... \u0026gt;\u0026gt;\u0026gt; menu('pasta', 'pizza', 'ensalada') Hoy tenemos: pasta, pizza, ensalada, Ámbito de los parámetros y variables de una función Los parámetros y las variables declaradas dentro de una función son de ámbito local, mientras que las definidas fuera de ella son de ámbito ámbito global.\nTanto los parámetros como las variables del ámbito local de una función sólo están accesibles durante la ejecución de la función, es decir, cuando termina la ejecución de la función estas variables desaparecen y no son accesibles desde fuera de la función.\n\u0026gt;\u0026gt;\u0026gt; def bienvenida(nombre): ... lenguaje = 'Python' ... print('¡Bienvenido a', lenguaje, nombre + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida('Alf') ¡Bienvenido a Python Alf! \u0026gt;\u0026gt;\u0026gt; lenguaje Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; NameError: name 'lenguaje' is not defined Ámbito de los parámetros y variables de una función Si en el ámbito local de una función existe una variable que también existe en el ámbito global, durante la ejecución de la función la variable global queda eclipsada por la variable local y no es accesible hasta que finaliza la ejecución de la función.\n\u0026gt;\u0026gt;\u0026gt; lenguaje = 'Java' \u0026gt;\u0026gt;\u0026gt; def bienvenida(): ... lenguaje = 'Python' ... print('¡Bienvenido a', lenguaje + '!') ... return ... \u0026gt;\u0026gt;\u0026gt; bienvenida() ¡Bienvenido a Python! \u0026gt;\u0026gt;\u0026gt; print(lenguaje) Java Paso de argumentos por referencia En Python el paso de argumentos a una función es siempre por referencia, es decir, se pasa una referencia al objeto del argumento, de manera que cualquier cambio que se haga dentro de la función mediante el parámetro asociado afectará al objeto original, siempre y cuando este sea mutable.\n\u0026gt;\u0026gt;\u0026gt; primer_curso = ['Matemáticas', 'Física'] \u0026gt;\u0026gt;\u0026gt; def añade_asignatura(curso, asignatura): ... curso.append(asignatura) ... return ... \u0026gt;\u0026gt;\u0026gt; añade_asignatura(primer_curso, 'Química') \u0026gt;\u0026gt;\u0026gt; print(primer_curso) ['Matemáticas', 'Física', 'Química'] Documentación de funciones Una práctica muy recomendable cuando se define una función es describir lo que la función hace en un comentario.\nEn Python esto se hace con un docstring que es un tipo de comentario especial se hace en la línea siguiente al encabezado de la función entre tres comillas simples ''' o dobles \u0026quot;\u0026quot;\u0026quot;.\nDespués se puede acceder a la documentación de la función con la función help(\u0026lt;nombre-función\u0026gt;).\n\u0026gt;\u0026gt;\u0026gt; def area_triangulo(base, altura): ... \u0026quot;\u0026quot;\u0026quot;Función que calcula el área de un triángulo. ... ... Parámetros: ... - base: La base del triángulo. ... - altura: La altura del triángulo. ... Resultado: ... El área del triángulo con la base y altura especificadas. ... \u0026quot;\u0026quot;\u0026quot; ... return base * altura / 2 ... \u0026gt;\u0026gt;\u0026gt; help(area_triangulo) area_triangulo(base, altura) Función que calcula el área de un triángulo. Parámetros: - base: La base del triángulo. - altura: La altura del triángulo. Resultado: El área del triángulo con la base y altura especificadas. Funciones recursivas Una función recursiva es una función que en su cuerpo contiene una llama a si misma.\nLa recursión es una práctica común en la mayoría de los lenguajes de programación ya que permite resolver las tareas recursivas de manera más natural.\nPara garantizar el final de una función recursiva, las sucesivas llamadas tienen que reducir el grado de complejidad del problema, hasta que este pueda resolverse directamente sin necesidad de volver a llamar a la función.\n\u0026gt;\u0026gt;\u0026gt; def factorial(n): ... if n == 0: ... return 1 ... else: ... return n * factorial(n-1) ... \u0026gt;\u0026gt;\u0026gt; f(5) 120 Funciones recursivas múltiples Una función recursiva puede invocarse a si misma tantas veces como quiera en su cuerpo.\n\u0026gt;\u0026gt;\u0026gt; def fibonacci(n): ... if n \u0026lt;= 1: ... return n ... else: ... return fibonacci(n - 1) + fibonacci(n - 2) ... \u0026gt;\u0026gt;\u0026gt; fibonacci(6) 8 Los riesgos de la recursión Aunque la recursión permite resolver las tareas recursivas de forma más natural, hay que tener cuidado con ella porque suele consumir bastante memoria, ya que cada llamada a la función crea un nuevo ámbito local con las variables y los parámetros de la función.\nEn muchos casos es más eficiente resolver la tarea recursiva de forma iterativa usando bucles.\n\u0026gt;\u0026gt;\u0026gt; def fibonacci(n): ... a, b = 0, 1 ... for i in range(n): ... a, b = b, a + b ... return a ... \u0026gt;\u0026gt;\u0026gt; fibonacci(6) 8 Importación de funciones import Las funciones definidas en un programa o módulo de Python pueden ser importadas y reutilizadas en otros programas.\nExisten varias formas de importar módulos y funciones:\nimport M : Importa el módulo M y crea una referencia a él, de manera que pueden invocarse un objeto o función f definida en él mediante la sintaxis M.f.\nimport M as N : Importa el módulo M y crea una referencia N a él, de manera que pueden invocarse un objeto o función f definida en él mediante la sintaxis N.f. Esta forma es similar a la anterior, pero tiene se suele usar cuando el nombre del módulo es muy largo para utilizar un alias más corto.\nImportación de funciones from import from M import * : Importa el módulo M y crea referencias a todos los objetos públicos (aquellos que no empiezan por el carácter _) definidos en el módulo. De esta manera para invocar un objeto del módulo no hace falta precederlo por el nombre del módulo, basta con escribir su nombre.\nfrom M import f, g, ... : Importa el módulo M y crea referencias a los objetos f, g, ..., de manera que pueden ser invocados por su nombre.\nImportación de funciones \u0026gt;\u0026gt;\u0026gt; import calendar \u0026gt;\u0026gt;\u0026gt; print(calendar.month(2019, 4)) April 2019 Mo Tu We Th Fr Sa Su 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 \u0026gt;\u0026gt;\u0026gt; from math import * \u0026gt;\u0026gt;\u0026gt; cos(pi) -1.0 Módulos de la librería estándar más importantes No necesitan instalarse porque vienen incluidos en la distribución de Python.\nsys: Funciones y parámetros específicos del sistema operativo. os: Interfaz con el sistema operativo. os.path: Funciones de acceso a las rutas del sistema. io: Funciones para manejo de flujos de datos y ficheros. string: Funciones con cadenas de caracteres. datetime: Funciones para fechas y tiempos. math: Funciones y constantes matemáticas. statistics: Funciones estadísticas. random: Generación de números pseudo-aleatorios. Otros módulos imprescindibles Necesitan instalarse.\nNumPy: Funciones matemáticas avanzadas y arrays. SciPy: Más funciones matemáticas para aplicaciones científicas. matplotlib: Análisis y representación gráfica de datos. Pandas: Funciones para el manejo y análisis de estructuras de datos. Request: Acceso a internet por http. Programación funcional En Python las funciones son objetos de primera clase, es decir, que pueden pasarse como argumentos de una función, al igual que el resto de los tipos de datos.\n\u0026gt;\u0026gt;\u0026gt; def aplica(funcion, argumento): ... return funcion(argumento) ... \u0026gt;\u0026gt;\u0026gt; def cuadrado(n): ... return n*n ... \u0026gt;\u0026gt;\u0026gt; def cubo(n): ... return n**3 ... \u0026gt;\u0026gt;\u0026gt; aplica(cuadrado, 5) 25 \u0026gt;\u0026gt;\u0026gt; aplica(cubo, 5) 125 Funciones anónimas lambda Existe un tipo especial de funciones que no tienen nombre asociado y se conocen como funciones anónimas o funciones lambda.\nLa sintaxis para definir una función anónima es\nlambda \u0026lt;parámetros\u0026gt; : \u0026lt;expresión\u0026gt;\nEstas funciones se suelen asociar a una variable o parámetro desde la que hacer la llamada.\n\u0026gt;\u0026gt;\u0026gt; area = lambda base, altura : base * altura \u0026gt;\u0026gt;\u0026gt; area(4, 5) 10 Aplicar una función a todos los elementos de una colección iterable map map(f, c) : Devuelve una objeto iterable con los resultados de aplicar la función f a los elementos de la colección c. Si la función f requiere n argumentos entonces deben pasarse n colecciones con los argumentos. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\n\u0026gt;\u0026gt;\u0026gt; def cuadrado(n): ... return n * n ... \u0026gt;\u0026gt;\u0026gt; list(map(cuadrado, [1, 2, 3]) [1, 4, 9] \u0026gt;\u0026gt;\u0026gt; def rectangulo(a, b): ... return a * b ... \u0026gt;\u0026gt;\u0026gt; tuple(map(rectangulo, (1, 2, 3), (4, 5, 6))) (4, 10, 18) Filtrar los elementos de una colección iterable filter filter(f, c) : Devuelve una objeto iterable con los elementos de la colección c que devuelven True al aplicarles la función f. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\nf debe ser una función que recibe un argumento y devuelve un valor booleano.\n\u0026gt;\u0026gt;\u0026gt; def par(n): ... return n % 2 == 0 ... \u0026gt;\u0026gt;\u0026gt; list(filter(par, range(10)) [0, 2, 4, 6, 8] Combinar los elementos de varias colecciones iterables zip zip(c1, c2, ...) : Devuelve un objeto iterable cuyos elementos son tuplas formadas por los elementos que ocupan la misma posición en las colecciones c1, c2, etc. El número de elementos de las tuplas es el número de colecciones que se pasen. Para convertir el objeto en una lista, tupla o diccionario hay que aplicar explícitamente las funciones list(), tuple() o dic() respectivamente.\n\u0026gt;\u0026gt;\u0026gt; asignaturas = ['Matemáticas', 'Física', 'Química', 'Economía'] \u0026gt;\u0026gt;\u0026gt; notas = [6.0, 3.5, 7.5, 8.0] \u0026gt;\u0026gt;\u0026gt; list(zip(asignaturas, notas)) [('Matemáticas', 6.0), ('Física', 3.5), ('Química', 7.5), ('Economía', 8.0)] \u0026gt;\u0026gt;\u0026gt; dict(zip(asignaturas, notas[:3])) {'Matemáticas': 6.0, 'Física': 3.5, 'Química': 7.5} Operar todos los elementos de una colección iterable reduce reduce(f, l) : Aplicar la función f a los dos primeros elementos de la secuencia l. Con el valor obtenido vuelve a aplicar la función f a ese valor y el siguiente de la secuencia, y así hasta que no quedan más elementos en la lista. Devuelve el valor resultado de la última aplicación de la función f.\nLa función reduce está definida en el módulo functools.\n\u0026gt;\u0026gt;\u0026gt; from functools import reduce \u0026gt;\u0026gt;\u0026gt; def producto(n, m): ... return n * m ... \u0026gt;\u0026gt;\u0026gt; reduce(producto, range(1, 5)) 24 Comprensión de colecciones En muchas aplicaciones es habitual aplicar una función o realizar una operación con los elementos de una colección (lista, tupla o diccionario) y obtener una nueva colección de elementos transformados. Aunque esto se puede hacer recorriendo la secuencia con un bucle iterativo, y en programación funcional mediante la función map, Python incorpora un mecanismo muy potente que permite esto mismo de manera más simple.\nComprensión de listas [expresion for variable in lista if condicion]\nEsta instrucción genera la lista cuyos elementos son el resultado de evaluar la expresión expresion, para cada valor que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la condición condición.\n\u0026gt;\u0026gt;\u0026gt; [x ** 2 for x in range(10)] [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] \u0026gt;\u0026gt;\u0026gt; [x for x in range(10) if x % 2 == 0] [0, 2, 4, 6, 8] \u0026gt;\u0026gt;\u0026gt; [x ** 2 for x in range(10) if x % 2 == 0] [0, 4, 16, 36, 64] \u0026gt;\u0026gt;\u0026gt; notas = {'Carmen':5, 'Antonio':4, 'Juan':8, 'Mónica':9, 'María': 6, 'Pablo':3} \u0026gt;\u0026gt;\u0026gt; [nombre for (nombre, nota) in notas.items() if nota \u0026gt;= 5] ['Carmen', 'Juan', 'Mónica', 'María'] Comprensión de diccionarios {expresion-clave:expresion-valor for variables in lista if condicion}\nEsta instrucción genera el diccionario formado por los pares cuyas claves son el resultado de evaluar la expresión expresion-clave y cuyos valores son el resultado de evaluar la expresión expresion-valor, para cada valor que toma la variable variable, donde variable toma todos los valores de la lista lista que cumplen la condición condición.\n\u0026gt;\u0026gt;\u0026gt; {palabra:len(palabra) for palabra in ['I', 'love', 'Python']} {'I': 1, 'love': 4, 'Python': 6} \u0026gt;\u0026gt;\u0026gt; notas = {'Carmen':5, 'Antonio':4, 'Juan':8, 'Mónica':9, 'María': 6, 'Pablo':3} \u0026gt;\u0026gt;\u0026gt; {nombre: nota +1 for (nombre, nota) in notas.items() if nota \u0026gt;= 5]) {'Carmen': 6, 'Juan': 9, 'Mónica': 10, 'María': 7} Ficheros Hasta ahora hemos visto como interactuar con un programa a través del teclado (entrada de datos) y la terminal (salida), pero en la mayor parte de las aplicaciones reales tendremos que leer y escribir datos en ficheros.\nAl utilizar ficheros para guardar los datos estos perdurarán tras la ejecución del programa, pudiendo ser consultados o utilizados más tarde.\nLas operaciones más habituales con ficheros son:\nCrear un fichero. Escribir datos en un fichero. Leer datos de un fichero. Borrar un fichero. Creación y escritura de ficheros Para crear un fichero nuevo se utiliza la instrucción\nopen(ruta, 'w') : Crea el fichero con la ruta ruta, lo abre en modo escritura (el argumento \u0026lsquo;w\u0026rsquo; significa write) y devuelve un objeto que lo referencia.\nSi el fichero indicado por la ruta ya existe en el sistema, se reemplazará por el nuevo.\nUna vez creado el fichero, para escribir datos en él se utiliza el método\nfichero.write(c) : Escribe la cadena c en el fichero referenciado por fichero.\n\u0026gt;\u0026gt;\u0026gt; f = open('bienvenida.txt', 'w') ... f.write('¡Bienvenido a Python!') Añadir datos a un fichero Si en lugar de crear un fichero nuevo queremos añadir datos a un fichero existente se debe utilizar la instrucción\nopen(ruta, 'a') : Abre el fichero con la ruta ruta en modo añadir (el argumento \u0026lsquo;a\u0026rsquo; significa append) y devuelve un objeto que lo referencia.\nUna vez abierto el fichero, se utiliza el método de escritura anterior y los datos se añaden al final del fichero.\n\u0026gt;\u0026gt;\u0026gt; f = open('bienvenida.txt', 'a') ... f.write('\\n¡Hasta pronto!') Leer datos de un fichero Para abrir un fichero en modo lectura se utiliza la instrucción\nopen(ruta, 'r') : Abre el fichero con la ruta ruta en modo lectura (el argumento \u0026lsquo;r\u0026rsquo; significa read) y devuelve un objeto que lo referencia.\nUna vez abierto el fichero, se puede leer todo el contenido del fichero o se puede leer línea a línea.\nLeer datos de un fichero fichero.read() : Devuelve todos los datos contenidos en fichero como una cadena de caracteres.\nfichero.readlines() : Devuelve una lista de cadenas de caracteres donde cada cadena es una linea del fichero referenciado por fichero.\n\u0026gt;\u0026gt;\u0026gt; f = open('bienvenida.txt', 'r') ... print(f.read()) ¡Bienvenido a Python! ¡Hasta pronto! \u0026gt;\u0026gt;\u0026gt; f = open('bienvenida.txt', 'r') ... lineas = print(f.readlines()) \u0026gt;\u0026gt;\u0026gt; print(lineas) ['Bienvenido a Python!\\n', '¡Hasta pronto!'] Cerrar un fichero Para cerrar un fichero se utiliza el método\nfichero.close() : Cierra el fichero referenciado por el objeto fichero.\nCuando se termina de trabajar con un fichero conviene cerrarlo, sobre todo si se abre en modo escritura, ya que mientras está abierto en este modo no se puede abrir por otra aplicación. Si no se cierra explícitamente un fichero, Python intentará cerrarlo cuando estime que ya no se va a usar más.\n\u0026gt;\u0026gt;\u0026gt; f = open('bienvenida.txt'): ... print(f.read()) ... f.close() # Cierre del fichero ... ¡Bienvenido a Python! ¡Hasta pronto! Renombrado y borrado de un fichero Para renombra o borrar un fichero se utilizan funciones del módulo os.\nos.rename(ruta1, ruta2) : Renombra y mueve el fichero de la ruta ruta1 a la ruta ruta2.\nos.remove(ruta) : Borra el fichero de la ruta ruta.\nAntes de borrar o renombra un directorio conviene comprobar que existe para que no se produzca un error. Para ello se utiliza la función\nos.path.isfile(ruta) : Devuelve True si existe un fichero en la ruta ruta y False en caso contrario.\nRenombrado y borrado de un fichero o directorio \u0026gt;\u0026gt;\u0026gt; import os \u0026gt;\u0026gt;\u0026gt; f = 'bienvenida.txt' \u0026gt;\u0026gt;\u0026gt; if os.path.isfile(f): ... os.rename(f, 'saludo.txt') # renombrado ... else: ... print('¡El fichero', f, 'no existe!') ... \u0026gt;\u0026gt;\u0026gt; f = 'saludo.txt' \u0026gt;\u0026gt;\u0026gt; if os.path.isfile(f): ... os.remove(f) # borrado ... else: ... print('¡El fichero', f, 'no existe!') ... Creación, cambio y eliminación de directorios Para trabajar con directorios también se utilizan funciones del módulo os.\nos.mkdir(ruta) : Crea un nuevo directorio en la ruta ruta.\nos.chdir(ruta) : Cambia el directorio actual al indicado por la ruta ruta.\nos.getcwd() : Devuelve una cadena con la ruta del directorio actual.\nos.rmdir(ruta) : Borra el directorio de la ruta ruta, siempre y cuando esté vacío.\nLeer un fichero de internet Para leer un fichero de internet hay que utilizar la función urlopen del módulo urllib.request.\nurlopen(url) : Abre el fichero con la url especificada y devuelve un objeto del tipo fichero al que se puede acceder con los métodos de lectura de ficheros anteriores.\n\u0026gt;\u0026gt;\u0026gt; from urllib import request \u0026gt;\u0026gt;\u0026gt; f = request.urlopen('https://raw.githubusercontent.com/asalber/asalber.github.io/master/README.md') \u0026gt;\u0026gt;\u0026gt; datos = f.read() \u0026gt;\u0026gt;\u0026gt; print(datos.decode('utf-8')) Aprende con Alf =============== Este es el repositorio del sitio web Aprende con Alf: http://aprendeconalf.es Control de errores mediante excepciones Python utiliza un objeto especial llamado excepción para controlar cualquier error que pueda ocurrir durante la ejecución de un programa.\nCuando ocurre un error durante la ejecución de un programa, Python crea una excepción. Si no se controla esta excepción la ejecución del programa se detiene y se muestra el error (traceback).\n\u0026gt;\u0026gt;\u0026gt; print(1 / 0) # Error al intentar dividir por 0. Traceback (most recent call last): File \u0026quot;\u0026lt;stdin\u0026gt;\u0026quot;, line 1, in \u0026lt;module\u0026gt; ZeroDivisionError: division by zero Tipos de excepciones Los principales excepciones definidas en Python son:\nTypeError : Ocurre cuando se aplica una operación o función a un dato del tipo inapropiado. ZeroDivisionError : Ocurre cuando se itenta dividir por cero. OverflowError : Ocurre cuando un cálculo excede el límite para un tipo de dato numérico. IndexError : Ocurre cuando se intenta acceder a una secuencia con un índice que no existe. KeyError : Ocurre cuando se intenta acceder a un diccionario con una clave que no existe. FileNotFoundError : Ocurre cuando se intenta acceder a un fichero que no existe en la ruta indicada. ImportError : Ocurre cuando falla la importación de un módulo. Consultar la documentaciónde Python para ver la lista de exepciones predefinidas.\nControl de excepciones try - except - else Para evitar la interrución de la ejecución del programa cuando se produce un error, es posible controlar la exepción que se genera con la siguiente instrucción:\ntry:\nbloque código 1\nexcept excepción:\nbloque código 2\nelse:\nbloque código 3\nEsta instrucción ejecuta el primer bloque de código y si se produce un error que genera una excepción del tipo excepción entonces ejecuta el segundo bloque de código, mientras que si no se produce ningún error, se ejecuta el tercer bloque de código.\nControl de excepciones \u0026gt;\u0026gt;\u0026gt; def division(a, b): ... try: ... result = a / b ... except ZeroDivisionError: ... print('¡No se puede dividir por cero!') ... else: ... print(result) ... \u0026gt;\u0026gt;\u0026gt; division(1, 0) ¡No se puede dividir por cero! \u0026gt;\u0026gt;\u0026gt; division(1, 2) 0.5 \u0026gt;\u0026gt;\u0026gt; try: ... f = open('fichero.txt') # El fichero no existe ... except FileNotFoundError: ... print('¡El fichero no existe!') ... else: ... print(f.read()) ¡El fichero no existe! La librería NumPy NumPy es una librería de Python especializada en el cálculo numérico y el análisis de datos, especialmente para un gran volumen de datos.\nIncorpora una nueva clase de objetos llamados arrays que permite representar colecciones de datos de un mismo tipo en varias dimensiones, y funciones muy eficientes para su manipulación.\nLa clase de objetos array Un array es una estructura de datos de un mismo tipo organizada en forma de tabla o cuadrícula de distintas dimensiones.\nLas dimensiones de un array también se conocen como ejes.\nCreación de arrays Para crear un array se utiliza la siguiente función de NumPy\nnp.array(secuencia) : Crea un array a partir de la lista o tupla lista y devuelve una referencia a él. El número de dimensiones del array dependerá de las listas o tuplas anidadas en lista:\nPara una lista de valores se crea un array de una dimensión, también conocido como vector. Para una lista de listas de valores se crea un array de dos dimensiones, también conocido como matriz. Para una lista de listas de listas de valores se crea un array de tres dimensiones, también conocido como cubo. Y así sucesivamente. No hay límite en el número de dimensiones del array más allá de la memoria disponible en el sistema. Los elementos de la lista o tupla deben ser del mismo tipo.\nCreación de arrays \u0026gt;\u0026gt;\u0026gt; # Array de una dimensión \u0026gt;\u0026gt;\u0026gt; a1 = np.array([1, 2, 3]) \u0026gt;\u0026gt;\u0026gt; print(a1) [1 2 3] \u0026gt;\u0026gt;\u0026gt; # Array de dos dimensiones \u0026gt;\u0026gt;\u0026gt; a2 = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a2) [[1 2 3] [4 5 6]] \u0026gt;\u0026gt;\u0026gt; # Array de tres dimensiones \u0026gt;\u0026gt;\u0026gt; a3 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) \u0026gt;\u0026gt;\u0026gt; print(a3) [[[ 1 2 3] [ 4 5 6]] [[ 7 8 9] [10 11 12]]] Creación de arrays Otras funciones útiles que permiten generar arrays son:\nnp.empty(dimensiones) : Crea y devuelve una referencia a un array vacío con las dimensiones especificadas en la tupla dimensiones.\nnp.zeros(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos ceros.\nnp.ones(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos unos.\nnp.full(dimensiones, valor) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son todos valor.\nnp.identity(n) : Crea y devuelve una referencia a la matriz identidad de dimensión n.\nnp.arange(inicio, fin, salto) : Crea y devuelve una referencia a un array de una dimensión cuyos elementos son la secuencia desde inicio hasta fin tomando valores cada salto.\nnp.linspace(inicio, fin, n) : Crea y devuelve una referencia a un array de una dimensión cuyos elementos son la secuencia de n valores equidistantes desde inicio hasta fin.\nnp.random.random(dimensiones) : Crea y devuelve una referencia a un array con las dimensiones especificadas en la tupla dimensiones cuyos elementos son aleatorios.\nCreación de arrays \u0026gt;\u0026gt;\u0026gt; print(np.zeros(3,2)) [[0. 0. 0.] [0. 0. 0.]] \u0026gt;\u0026gt;\u0026gt; print(np.idendity(3)) [[1. 0. 0.] [0. 1. 0.] [0. 0. 1.]] \u0026gt;\u0026gt;\u0026gt; print(np.arange(1, 10, 2)) [1 3 5 7 9] \u0026gt;\u0026gt;\u0026gt; print(np.linspace(0, 10, 5)) [ 0. 2.5 5. 7.5 10. ] Atributos de un array Existen varios atributos y funciones que describen las características de un array.\na.ndi : Devuelve el número de dimensiones del array a.\na.shape : Devuelve una tupla con las dimensiones del array a.\na.size : Devuelve el número de elementos del array a.\na.dtype: Devuelve el tipo de datos de los elementos del array a.\nAcceso a los elementos de un array Para acceder a los elementos contenidos en un array se usan índices al igual que para acceder a los ementos de una lista, pero indicando los índices de cada dimensión separados por comas.\nAl igual que para listas, los índices de cada dimensión comienzn en 0.\nTambién es posible obtener subarrays con el operador dos puntos : indicando el índice inicial y el siguiente al final para cada dimensión, de nuevo separados por comas.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a[1, 0]) # Acceso al elemento de la fila 1 columna 0 4 \u0026gt;\u0026gt;\u0026gt; print(a[1][0]) # Otra forma de acceder al mismo elemento 4 \u0026gt;\u0026gt;\u0026gt; print(a[:, 0:2]) [[1 2] [4 5]] Filtrado de elementos de un array Una característica muy útil de los arrays es que es muy fácil obtener otro array con los elementos que cumplen una condición.\na[condicion] : Devuelve una lista con los elementos del array a que cumplen la condición condicion.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; print(a[(a % 2 == 0)]) [2 4 6] \u0026gt;\u0026gt;\u0026gt; print(a[(a % 2 == 0) \u0026amp; (a \u0026gt; 2)]) [2 4] Operaciones matemáticas con arrays Existen dos formas de realizar operaciones matemáticas con arrays: a nivel de elemento y a nivel de array.\nLas operaciones a nivel de elemento operan los elementos que ocupan la misma posición en dos arrays. Se necesitan, por tanto, dos arrays con las mismas dimensiones y el resultado es una array de la misma dimensión.\nLos operadores mamemáticos +, -, *, /, %, ** se utilizan para la realizar suma, resta, producto, cociente, resto y potencia a nivel de elemento.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; b = np.array([[1, 1, 1], [2, 2, 2]]) \u0026gt;\u0026gt;\u0026gt; print(a + b ) [[2 3 4] [6 7 8]] \u0026gt;\u0026gt;\u0026gt; print(a / b) [[1. 2. 3. ] [2. 2.5 3. ]] \u0026gt;\u0026gt;\u0026gt; print(a ** 2) [[ 1 4 9] [16 25 36]] Operaciones matemáticas a nivel de array Para realizar el producto matricial se utiliza el método\na.dot(b) : Devuelve el array resultado del producto matricial de los arrays a y b siempre y cuando sus dimensiones sean compatibles.\nY para trasponer una matriz se utiliza el método\na.T : Devuelve el array resultado de trasponer el array a.\n\u0026gt;\u0026gt;\u0026gt; a = np.array([[1, 2, 3], [4, 5, 6]]) \u0026gt;\u0026gt;\u0026gt; b = np.array([[1, 1], [2, 2], [3, 3]]) \u0026gt;\u0026gt;\u0026gt; print(a.dot(b)) [[14 14] [32 32]] \u0026gt;\u0026gt;\u0026gt; print(a.T) [[1 4] [2 5] [3 6]] La librería Pandas Pandas es una librería de Python especializada en el manejo y análisis de estructuras de datos.\nLas principales características de esta librería son:\nDefine el tipo de objetosDataFrame para manejar conjuntos de datos. Permite leer y escribir facilmente ficheros en formato CSV, Excel y bases de datos SQL. Ofrece métodos para reordenar, dividir y combinar conjuntos de datos. Permite trabajar con series temporales. Ofrece un rendimiento muy eficiente. La clase de objetos DataFrame Un objeto del tipo DataFrame define un conjunto de datos estructurado en forma de tabla donde las columnas suelen contener datos de variables, es decir, todos los datos de una misma columna son del mismo tipo, y las filas de individuos que pueden contender datos de distintos tipos.\nNombre Edad Grado Correo \u0026lsquo;María\u0026rsquo; 18 \u0026lsquo;Economía\u0026rsquo; \u0026lsquo; [email protected]\u0026rsquo; \u0026lsquo;Luis 22 \u0026lsquo;Medicina\u0026rsquo; \u0026rsquo; [email protected]\u0026rsquo; \u0026lsquo;Carmen\u0026rsquo; 20 \u0026lsquo;Arquitectura\u0026rsquo; \u0026lsquo; [email protected]\u0026rsquo; \u0026lsquo;Antonio\u0026rsquo; 21 \u0026lsquo;Economía\u0026rsquo; \u0026lsquo; [email protected]\u0026rsquo; Creación de un DataFrame a partir de un diccionario DataFrame(diccionario) : Crea un objeto del tipo DataFrame con los datos del diccionario diccionario. Las claves del diccionario serán los nombres de las columnas, mientras que los valores asociados a las claves serán listas con los valores de las columnas.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; datos = {'nombre':['María', 'Luis', 'Carmen', 'Antonio'], ... 'edad':[18, 22, 20, 21], ... 'grado':['Economía', 'Medicina', 'Arquitectura', 'Economía'], ... 'correo':['[email protected]', '[email protected]', '[email protected]', '[email protected]'] ... } \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame(datos) \u0026gt;\u0026gt;\u0026gt; print(df) nombre edad grado correo 0 María 18 Economía [email protected] 1 Luis 22 Medicina [email protected] 2 Carmen 20 Arquitectura [email protected] 3 Antonio 21 Economía [email protected] Importación de ficheros Dependiendo del tipo de fichero, existen distintas funciones para importar un DataFrame desde un fichero.\nread_csv(fichero.csv, delimitador) : Devuelve un objeto del tipo DataFrame con los datos del fichero CSV fichero.csv usando como separador de los datos la cadena delimitador.\nread_excel(fichero.xlsx, hoja) : Devuelve un objeto del tipo DataFrame con los datos de la hoja de cálculo hoja del fichero Excel fichero.xlx.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; # Importación del fichero datos-colesterol.csv \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.head()) nombre edad sexo peso altura colesterol 0 José Luis Martínez Izquierdo 18 H 85 179 182 1 Rosa Díaz Díaz 32 M 65 173 232 2 Javier García Sánchez 24 H 71 181 191 3 Carmen López Pinzón 35 M 65 170 200 4 Marisa López Collado 46 M 51 158 148 Exportación de ficheros También existen funciones para exportar un DataFrame a un fichero con diferentes formatos.\ndf.to_csv(fichero.csv, delimitador) : Exporta el DataFrame df al fichero fichero.csv en formato CSV usando como separador de los datos la cadena delimitador.\ndf.to_excel(fichero.xlsx, sheet_name = hoja) : Exporta el DataFrame df a la hoja de cálculo hoja del fichero fichero.xlsx en formato Excel.\nAtributos de un DataFrame Existen varias propiedades o métodos para ver las características de un DataFrame.\ndf.info() : Devuelve información (número de filas, número de columnas, nombre y tipo de las columnas y memoria usado) sobre el DataFrame df.\ndf.shape : Devuelve una tupla con el número de filas y columnas del DataFrame df.\ndf.columns : Devuelve el nombre de las columnas del DataFrame df.\ndf.head() : Devuelve las 5 primeras filas del DataFrame df.\ndf.tails() : Devuelve las 5 últimas filas del DataFrame df.\nAcceso a los elementos de un DataFrame mediante índices El acceso a los datos de un DataFrame se puede hacer a través de índices o través de los nombres de las filas y columnas. Para acceder a los elementos de un DataFrame mediante índices se utiliza un método similar al de las listas o arrays.\ndf.iloc[i, j] : Devuelve el elemento que se encuentra en la fila i y la columna j del DataFrame df. Puede indicarse secuencias de índices para obtener partes del DataFrame.\ndf.iloc[i] : Devuelve la fila i del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.iloc[1, 3]) 65 \u0026gt;\u0026gt;\u0026gt; print(df.iloc[1, :2]) nombre Rosa Díaz Díaz edad 32 Acceso a los elementos de un DataFrame mediante nombres df.loc[fila, columna] : Devuelve el elemento que se encuentra en la fila de nombre fila y la columna de nombre columna del DataFrame df.\ndf[columna] : Devuelve los elementos de la columna de nombre columna del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.loc[2, 'colesterol'] 191 \u0026gt;\u0026gt;\u0026gt; print(df.loc[:3, ('colesterol','peso')]) colesterol peso 1 232 65 2 191 71 3 200 65 \u0026gt;\u0026gt;\u0026gt; print(df['colesterol']) 0 182 1 232 2 191 3 200 ... Operaciones sobre columnas Puesto que los datos de una misma columna de un DataFrame tienen que ser del mismo tipo, es fácil aplicar la misma operación a todos los elementos de la columna.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df['altura']/100) 0 1.79 1 1.73 2 1.81 ... \u0026gt;\u0026gt;\u0026gt; print(df['sexo']=='M') 0 False 1 True 2 False ... Aplicar funciones a columnas Para aplicar funciones a todos los elementos de una columna se utiliza el método\ndf[columna].apply(f) : Devuelve una secuencia con los valores que resulta de aplicar la función f a los elementos de la columna de nombre columna del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; from math import log \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df['altura'].apply(log)) 0 5.187386 1 5.153292 2 5.198497 ... Filtrado de un DataFrame Una operación bastante común con un DataFrame es obtener las filas que cumplen una determinada condición.\ndf[condicion] : Devuelve un DataFrame con las filas del DataFrame df que se corresponden con el valor True de la secuencia booleana condicion. condicion debe ser una secuencia de valores booleanos de la misma longitud que el número de filas del DataFrame.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df[(df['sexo']=='H') \u0026amp; (df['colesterol'] \u0026gt; 260)]) nombre edad sexo peso altura colesterol 6 Antonio Fernández Ocaña 51 H 62 172 276 9 Santiago Reillo Manzano 46 H 75 185 280 Eliminar filas y columnas de un DataFrame Para eliminar filas y columnas de un DataFrame se utiliza el método\ndf.drop(filas) : Devuelve el DataFrame que resulta de eliminar las filas con los nombres indicados en la secuencia filas del DataFrame df.\ndf.drop(columnas, axis=1) : Devuelve el DataFrame que resulta de eliminar las columnas con los nombres indicados en la secuencia columnas del DataFrame df.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') \u0026gt;\u0026gt;\u0026gt; print(df.drop([1, 3])) 0 José Luis Martínez Izquierdo 18 H 85 179 182 2 Javier García Sánchez 24 H 71 181 191 4 Marisa López Collado 46 M 51 158 148 ... \u0026gt;\u0026gt;\u0026gt; print(df.drop(['peso', 'altura'], axis=1)) 0 José Luis Martínez Izquierdo 18 H 182 1 Rosa Díaz Díaz 32 M 232 2 Javier García Sánchez 24 H 191 ... Ordenar un DataFrame Para ordenar un DataFrame de acuedo a los valores de una determinada columna se utiliza el método\ndf.sort_values(columna) : Devuelve el DataFrame que resulta de ordenar ascendentemente el DataFrame df según los valores del la columna columna.\ndf.sort_values(columna, ascending=False) : Devuelve el DataFrame que resulta de ordenar descendentemente el DataFrame df según los valores del la columna columna.\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; df = pd.read_csv( 'https://raw.githubusercontent.com/asalber/manual-python/master/datos/colesterol.csv') print(df.sort_values('colesterol')) nombre edad sexo peso altura colesterol 4 Marisa López Collado 46 M 51 158 148 0 José Luis Martínez Izquierdo 18 H 85 179 182 2 Javier García Sánchez 24 H 71 181 191 13 Carolina Rubio Moreno 20 M 61 177 194 ... Reestructurar un DataFrame: Convertir columnas en filas A menudo la disposición de los datos en un DataFrame no es la adecuada para su tratamiento y es necesario reestructurar el DataFrame.\nPara convertir columnas en filas se utiliza el método\ndf.melt(id_vars, var_name, var_value)\n\u0026gt;\u0026gt;\u0026gt; import pandas as pd \u0026gt;\u0026gt;\u0026gt; datos = {'nombre':['María', 'Luis', 'Carmen'], ... 'edad':[18, 22, 20], ... 'Matemáticas':[8.5, 7, 3.5], ... 'Física':[8, 6.5, 5], ... 'Química':[6.5, 4, 9]} \u0026gt;\u0026gt;\u0026gt; df = pd.DataFrame(datos) \u0026gt;\u0026gt;\u0026gt; df1 = df.melt(id_vars=['nombre', 'edad'], var_name='asignatura', value_name='nota') \u0026gt;\u0026gt;\u0026gt; print(df1) nombre edad asignatura nota 0 María 18 Matemáticas 8.5 1 Luis 22 Matemáticas 7.0 2 Carmen 20 Matemáticas 3.5 3 María 18 Física 8.0 4 Luis 22 Física 6.5 5 Carmen 20 Física 5.0 6 María 18 Química 6.5 7 Luis 22 Química 4.0 8 Carmen 20 Química 9.0 Reestructurar un DataFrame: Convertir filas en columnas Para convertir columnas en filas se utiliza el método\ndf.pivot(index, columns, values)\n# Continuación del código anterior \u0026gt;\u0026gt;\u0026gt; print(df1.pivot(index='nombre', columns='asignatura', values='nota')) asignatura Física Matemáticas Química nombre Carmen 5.0 3.5 9.0 Luis 6.5 7.0 4.0 María 8.0 8.5 6.5 La librería Matplotlib Matplotlib es una librería de Python especializada en la creación de gráficos en dos dimensiones.\nTipos de gráficos Permite crear y personalizar los tipos de gráficos más comunes, entre ellos:\nDiagramas de barras Histograma Diagramas de sectores Diagramas de caja y bigotes Diagramas de violín Diagramas de dispersión o puntos Diagramas de lineas Diagramas de areas Diagramas de contorno Mapas de color y combinaciones de todos ellos.\nEn la siguiente galería de gráficos pueden apreciarse todos los tipos de gráficos que pueden crearse con esta librería.\nCreación de gráficos con matplotlib Para crear un gráfico con matplotlib es habitual seguir los siguientes pasos:\nImportar el módulo pyplot.\nDefinir la figura que contendrá el gráfico, que es la region (ventana o página) donde se dibujará. Para ello se utiliza la función figure().\nDefinir los ejes sobre los que se dibujarán los datos. Para ello se utiliza la función add_axes() o bien add_subplot().\nDibujar los datos sobre los ejes. Para ello se utilizan distintas funciones dependiendo del tipo de gráfico que se quiera.\nPersonalizar el gráfico. Para ello existen multitud de funciones que permiten añadir un título, una leyenda, una rejilla, cambiar colores o personalizar los ejes.\nGuardar el gráfico. Para ello se utiliza la función savefig().\nMostrar el gráfico. Para ello se utiliza la función show().\nCreación de gráficos con matplotlib # Importar el módulo pyplot con el alias plt import matplotlib.pyplot as plt # Crear la figura fig = plt.figure() # Crear los ejes ax = fig.add_subplot(111) # Dibujar puntos ax.scatter(x = [1, 2, 3], y = [3, 2, 1]) # Guardar el gráfico en formato png plt.savefig('diagrama-dispersion.png') # Mostrar el gráfico plt.show() Diagramas de dispersión o puntos scatter(x, y): Dibuja un diagrama de puntos con las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.scatter([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de líneas plot(x, y): Dibuja un polígono con los vértices dados por las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.plot([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de areas fill_between(x, y): Dibuja el area bajo el polígono con los vértices dados por las coordenadas de la lista x en el eje X y las coordenadas de la lista y en el eje Y. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.fill_between([1, 2, 3, 4], [1, 2, 0, 0.5]) plt.show() Diagramas de barras verticales bar(x, y): Dibuja un diagrama de barras verticales donde x es una lista con la posición de las barras en el eje X, e y es una lista con la altura de las barras en el eje Y. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.bar([1, 2, 3], [3, 2, 1]) plt.show() Diagramas de barras horizontales barh(x, y): Dibuja un diagrama de barras horizontales donde x es una lista con la posición de las barras en el eje Y, y x es una lista con la longitud de las barras en el eje X. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.barh([1, 2, 3], [3, 2, 1]) plt.show() Histogramas hist(x, bins): Dibuja un histograma con las frecuencias resultantes de agrupar los datos de la lista x en las clases definidas por la lista bins. import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x = np.random.normal(5, 1.5, size=1000) ax.hist(x, np.arange(0, 11)) plt.savefig('histograma.png') plt.show() Diagramas de sectores pie(x): Dibuja un diagrama de sectores con las frecuencias de la lista x. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.pie([5, 4, 3, 2, 1] plt.savefig('diagrama-sectores.png') plt.show() Diagramas de caja y bigotes boxplot(x): Dibuja un diagrama de caja y bigotes con los datos de la lista x. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.boxplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.savefig('diagrama-sectores.png') plt.show() Diagramas de violín violinplot(x): Dibuja un diagrama de violín con los datos de la lista x. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.violinplot([1, 2, 1, 2, 3, 4, 3, 3, 5, 7]) plt.savefig('diagrama-sectores.png') plt.show() Diagramas de contorno contourf(x, y, z): Dibuja un diagrama de contorno con las curvas de nivel de la superficie dada por los puntos con las coordenadas de las listas x, y y z en los ejes X, Y y Z respectivamente. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x = np.linspace(-3.0, 3.0, 100) y = np.linspace(-3.0, 3.0, 100) x, y = np.meshgrid(x, y) z = np.sqrt(x**2 + 2*y**2) ax.contourf(x, y, z) plt.show() Mapas de color imshow(x): Dibuja un mapa de color a partir de una matriz (array bidimensiona) x. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x = np.random.random((16, 16)) ax.imshow(x) plt.show() Mapas de color hist2d(x, y): Dibuja un mapa de color que simula un histograma bidimensional, donde los colores de los cuadrados dependen de las frecuencias de las clases de la muestra dada por las listas x e y. import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) x, y = np.random.multivariate_normal(mean=[0.0, 0.0], cov=[[1.0, 0.4], [0.4, 0.5]], size=1000).T ax.hist2d(x, y) plt.show() Colores Líneas Títulos Ejes Leyenda Regilla Texto Márgenes Referencias Webs:\nPython Sitio web de Python. Repl.it Entorno de desarrollo web para varios lenguajes, incluido Python. Python tutor Sitio web que permite visualizar la ejecución el código Python. Referencias Libros y manuales:\nTutorial de Python Tutorial rápido de python. Python para todos Libro de introducción a Python con muchos ejemplos. Es de licencia libre. Python para principiantes Libro de introducción Python que abarca orientación a objetos. Es de licencia libre. Python crash course Libro de introducción a Python gratuito. Think python 2e. Libro de introducción a Python que abarca también algoritmos, estructuras de datos y gráficos. Es de licencia libre. Learning Python Libro de introducción a Python con enfoque de programación orientada a objetos. Referencias Vídeos:\nCurso \u0026ldquo;Python para todos\u0026rdquo;. ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"aae65e403c301ed119f601a8c297a72a","permalink":"/docencia/python/manual/book/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/book/","section":"docencia","summary":"Python ¿Qué es Python? Python es un lenguaje de programación de alto nivel multiparadigma que permite:\nProgramación imperativa Programación funcional Programación orientada a objetos Fue creado por Guido van Rossum en 1990 aunque actualmente es desarrollado y mantenido por la Python Software Foundation","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"La librería datetime ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"7e885c89fd39ae02cde8a30a947a722b","permalink":"/docencia/python/manual/capitulo-datetime/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-datetime/","section":"docencia","summary":"La librería datetime ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Apéndice: Depuración de código ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1d4cdf04f1207ed111cd56d786c52fd1","permalink":"/docencia/python/manual/capitulo-depuracion/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-depuracion/","section":"docencia","summary":"Apéndice: Depuración de código ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Estructuras de control ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"fe78b8976d458ca236521df7817d47a7","permalink":"/docencia/python/manual/capitulo-estructuras-control/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-estructuras-control/","section":"docencia","summary":"Estructuras de control ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Excepciones ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"09e402072fb27344e8e157cf595cd601","permalink":"/docencia/python/manual/capitulo-excepciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-excepciones/","section":"docencia","summary":"Excepciones ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Ficheros ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"786256e89749ce2e138c84f0beff66a6","permalink":"/docencia/python/manual/capitulo-ficheros/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-ficheros/","section":"docencia","summary":"Ficheros ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Funciones ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"295db6c4db065f014b8988559b903a03","permalink":"/docencia/python/manual/capitulo-funciones/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-funciones/","section":"docencia","summary":"Funciones ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Introducción a Python ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"1b4e7a3b79efcd415db21101de0dfd56","permalink":"/docencia/python/manual/capitulo-introduccion/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-introduccion/","section":"docencia","summary":"Introducción a Python ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"La librería Matplotlib ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"2877c625db9a858635335fbe1147b0e5","permalink":"/docencia/python/manual/capitulo-matplotlib/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-matplotlib/","section":"docencia","summary":"La librería Matplotlib ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Módulos ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631521328,"objectID":"2b62e67722dc346046100c99067b02c2","permalink":"/docencia/python/manual/capitulo-modulos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-modulos/","section":"docencia","summary":"Módulos ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"La librería Numpy ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"587cbfd450e6ea1682e745313f23f73e","permalink":"/docencia/python/manual/capitulo-numpy/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-numpy/","section":"docencia","summary":"La librería Numpy ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Programación Orientada a Objetos ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1631521328,"objectID":"4456c462257a6d433a9f228a2a97321d","permalink":"/docencia/python/manual/capitulo-objetos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-objetos/","section":"docencia","summary":"Programación Orientada a Objetos ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"La librería Pandas ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"5ccf0eb88a579e76f44ed59c948a35b4","permalink":"/docencia/python/manual/capitulo-pandas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-pandas/","section":"docencia","summary":"La librería Pandas ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Bibliografía ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"2d14d6413530ca594d1709793578ea29","permalink":"/docencia/python/manual/capitulo-referencias/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-referencias/","section":"docencia","summary":"Bibliografía ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Tipos de datos estructurados ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"830dc71636e36a019bda6c05a1301def","permalink":"/docencia/python/manual/capitulo-tipos-datos-estructurados/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-tipos-datos-estructurados/","section":"docencia","summary":"Tipos de datos estructurados ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":null,"content":"Tipos de datos simples ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"d4b1f3861160ed102d40a3d19127a4ec","permalink":"/docencia/python/manual/capitulo-tipos-datos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/capitulo-tipos-datos/","section":"docencia","summary":"Tipos de datos simples ","tags":null,"title":"","type":"docencia"},{"authors":null,"categories":["Cálculo","Derive"],"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"61508c83ad4b31b1e342f44f9ee212fd","permalink":"/docencia/derive/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/derive/","section":"docencia","summary":"","tags":["Ejercicios"],"title":"Cálculo con Derive","type":"docencia"},{"authors":null,"categories":["Cálculo","Geogebra"],"content":"Geogebra GeoGebra es un software interactivo libre para el aprendizaje de Matemáticas en educación secundaria y superior. A continuación os presentamos un manual de Cálculo con Geogegra que se centra, sobre todo, en la resolución analítica de problemas de cálculo en una y varias variables con la vista CAS (cálculo simbólico) de Geogegra.\nDescargar\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"b198475417d0034765480bd3b8c5b44c","permalink":"/docencia/geogebra/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/geogebra/","section":"docencia","summary":"Geogebra GeoGebra es un software interactivo libre para el aprendizaje de Matemáticas en educación secundaria y superior. A continuación os presentamos un manual de Cálculo con Geogegra que se centra, sobre todo, en la resolución analítica de problemas de cálculo en una y varias variables con la vista CAS (cálculo simbólico) de Geogegra.","tags":["Ejercicios"],"title":"Cálculo con Geogebra","type":"docencia"},{"authors":null,"categories":["Cálculo"],"content":"Fórmulas de Cálculo Fórmulas de Cálculo\nTabla de derivadas\nTabla de integrales\nFórmulas de trigonometría\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1642926199,"objectID":"ca45e4ec8157e3114642db8b0158a8ae","permalink":"/docencia/calculo/formulas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/calculo/formulas/","section":"docencia","summary":"Todo lo que necesitas saber de un vistazo.","tags":["Hoja de fórmulas"],"title":"Hoja de Fórmulas de Cálculo","type":"book"},{"authors":null,"categories":["Estadística"],"content":"Fórmulas de Estadística Fórmulas de Estadística y Probabilidad Excel formulas Tabla de la distribución Normal estándar Tabla de la distribución Chi-cuadrado Tabla de la distribución T de student Tabla de la distribución F de Fisher Tabla de Intervalos de Confianza Tabla de Contrastes de Hipótesis ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"df3e76d55261dd9559119328a1a945cc","permalink":"/docencia/estadistica/formulas/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/estadistica/formulas/","section":"docencia","summary":"Todo lo que necesitas saber de un vistazo.","tags":["Hoja de fórmulas"],"title":"Hoja de Fórmulas de Estadística","type":"book"},{"authors":null,"categories":["Estadística","Bioestadística","SPSS"],"content":"\nResumen El análisis de datos en cualquier Ciencia Experimental o de la Salud es imprescindible para la compresión de los fenómenos biológicos, físicos o químicos. Las nuevas tecnologías han hecho posible el desarrollo de programas capaces de recopilar, organizar y analizar enormes cantidades de datos con poco esfuerzo. SPSS es uno de los programas de análisis estadísticos más utilizados, sobre todo en el ámbito de las ciencias biosanitarias. Este libro presenta las principales técnicas Estadísticas, tanto de Estadística Descriptiva como de Inferencia Estadística, aplicadas con SPSS a multitud de ejemplos del ámbito de las Ciencias de la Salud, desarrollados paso a paso.\nTabla de contenidos 1 Introducción a SPSS\n1.1 Introducción\n1.2 Funciones básicas\n1.2.1 Arranque\n1.2.2 Introducción de datos\n1.2.3 Guardar datos\n1.2.4 Recuperar datos\n1.2.5 Modificación de datos\n1.2.6 Transformación y generación de datos\n1.2.7 Recodificación de datos\n1.2.8 Impresión\n1.2.9 Salir del programa\n1.2.10 Ayuda\n1.3 Ejercicios resueltos\n2 Distribuciones de Frecuencias y Gráficas\n2.1 Fundamentos teóricos\n2.1.1 Cálculo de frecuencias\n2.1.2 Representaciones gráficas\nDiagrama de barras y polígono de frecuencias Histogramas Diagrama de sectores Diagrama de caja y datos atípicos 2.2 Ejercicios resueltos\n2.3 Ejercicios propuestos\n3 Estadísticos Muestrales\n3.1 Fundamentos teóricos\n3.1.1 Medidas de posición\nMedia aritmética Mediana Moda Cuantiles 3.1.2 Medidas de dispersión\nRango o Recorrido Rango intercuartílico Varianza Desviación típic Coeficiente de variación de Pearson Medidas de forma Coeficiente de asimetría de Fisher Coeficiente de apuntamiento o curtosis 3.1.4 Estadísticos por grupos\n3.2 Ejercicios resueltos\n3.3 Ejercicios propuestos\n4 Regresión Lineal Simple y Correlación\n4.1 Fundamentos teóricos\n4.1.1 Regresión\nRectas de regresión 4.1.2 Correlación\nVarianza residual Coeficiente de determinación Coeficiente de determinación lineal Coeficiente de correlación Fiabilidad de las predicciones 4.2 Ejercicios resueltos\n4.3 Ejercicios propuestos\n5 Regresión No Lineal\n5.1 Fundamentos teóricos\n5.2 Ejercicios resueltos\n5.3 Ejercicios propuestos\n6 Variables Aleatorias Discretas\n6.1 Fundamentos teóricos\n6.1.1 Variables aleatorias\n6.1.2 Variables aleatorias discretas\nFunción de probabilidad Función de distribución Estadísticos poblacionales 6.1.3 Variable Binomial\n6.1.4 Variable de Poisson\n6.2 Ejercicios resueltos\n6.3 Ejercicios propuestos\n7 Variables Aleatorias Continuas\n7.1 Fundamentos teóricos\n7.1.1 Variables aleatorias\n7.1.2 Variables aleatorias continuas\nFunción de densidad Función de distribución Estadísticos poblacionales 7.1.3 Distribución Uniforme Continua\n7.1.4 Distribución Normal\nDistribución Chi-cuadrado 7.1.5 Distribución T de Student\n7.1.6 Distribución F de Fisher-Snedecor\n7.2 Ejercicios resueltos\n7.3 Ejercicios propuestos\n8 Intervalos de Confianza para Medias y Proporciones\n8.1 Fundamentos teóricos\n8.1.1 Inferencia estadística y estimación de parámetros\n8.1.2 Intervalos de confianza\n8.1.3 Intervalos de confianza para la media\nIntervalo de confianza para la media de una población normal con varianza conocida en muestras de cualquier tamaño Intervalo de confianza para la media de una población normal con varianza desconocida en muestras de cualquier tamaño Intervalo de confianza para la media de una población no normal, varianza conocida y muestras grandes Intervalo de confianza para la media de una población no normal, varianza desconocida y muestras grandes 8.1.4 Intervalos de confianza para una proporción poblacional\n8.2 Ejercicios resueltos\n8.3 Ejercicios propuestos\n9 Intervalos de Confianza para Comparar Poblaciones\n9.1 Fundamentos teóricos\n9.1.1 Inferencia estadística aplicada a la comparación de poblaciones\n9.1.2 Intervalos de confianza para la diferencia de medias de poblaciones independientes\nIntervalo de confianza para la diferencia de medias en poblaciones normales, con varianzas poblacionales conocidas, independientemente del tamaño de la muestra Intervalo de confianza para la diferencia de medias en poblaciones normales, con varianzas poblacionales desconocidas, independientemente del tamaño de la muestra Intervalo de confianza para la diferencia de medias en poblaciones no normales y muestras grandes 9.1.3 Intervalos de confianza para la media de la diferencia en poblaciones emparejadas\n9.1.4 Intervalos de confianza para la diferencia de proporciones\nIntervalo de confianza para la razón de dos varianzas de poblaciones normales 9.2 Ejercicios resueltos\n9.3 Ejercicios propuestos\n10 Contraste de Hipótesis\n10.1 Fundamentos teóricos\n10.1.1Inferencia estadística y contrastes de hipótesis\n10.1.2 Tipos de contrastes de hipótesis\n10.1.3 Elementos de un contraste\nHipótesis nula e hipótesis alternativa Errores en un contraste. Nivel de significación y potencia Estadístico del contraste y regiones de aceptación y rechazo El p-valor de un contraste 10.1.4 Contrastes para la media de una población\nContraste para la media de una población normal con varianza conocida Contraste para la media de una población normal con varianza desconocida 10.1.5 Contrastes para una proporción de una población\nContraste para la proporción en muestras grandes y distribuciones simétricas 10.1.6Contrastes para la varianza de una población\nContraste para la varianza de una población normal 10.1.7 Contrastes para la comparación de medias poblacionales\nContraste para la comparación de medias de poblaciones normales con varianzas conocidas Contraste para la comparación de medias de poblaciones normales con varianzas desconocidas 10.1.8 Contrastes para la comparación de proporciones poblacionales\nContraste para la comparación de proporciones en muestras grandes y distribuciones simétricas 10.1.9Contrastes para la comparación de varianzas poblacionales\nContraste para la comparación de varianzas de poblaciones normales 10.2 Ejercicios resueltos\n10.3 Ejercicios propuestos\n11 Análisis de la Varianza de un Factor\n11.1 Fundamentos teóricos\n11.1.1 El contraste de ANOVA\nTabla de ANOVA 11.1.2 Test de comparaciones múltiples y por parejas\n11.2 Ejercicios resueltos\n11.3 Ejercicios propuestos\n12 Contrastes de Hipótesis No Paramétricos\n12.1 Fundamentos teóricos\n12.1.1 Contrastes no paramétricos más habituales\n12.1.2 Aleatoriedad de una muestra: Contraste de rachas\n12.1.3 Contrastes de normalidad\nEstadísticos de asimetría y curtosis Contraste de Kolmogorov-Smirnov y corrección de Lilliefors Contraste de Shapiro-Wilk Gráficos Q-Q y P-P de comparación con la distribución normal 12.1.4 Contraste de la U de Mann-Whitney para la comparación de dos poblaciones independientes\n12.1.5 Contraste de Wilcoxon para la comparación de dos poblaciones emparejadas\n12.1.6 Contraste de Kruskal-Wallis para la comparación de varias poblaciones independientes\n12.1.7 Contraste de Friedman para la comparación de medidas repetidas\n12.1.8 Contraste de Levene para la comparación de varianzas\n12.1.9 El coeficiente de correlación de Spearman\n12.2 Ejercicios resueltos\n12.3 Ejercicios propuestos\n13 Contrastes Basados en el Estadístico Chi-cuadrado\n13.1 Fundamentos teóricos\n13.1.1 Contraste Chi-cuadrado de Pearson para ajuste de distribuciones\n13.1.2 Contraste Chi-cuadrado en tablas de contingencia\n13.1.3 Contraste exacto de Fisher\n13.1.4 Contraste de McNemar para datos emparejados\n13.2 Ejercicios Resueltos\n13.3 Ejercicios propuestos\n14 Análisis de Concordancia\n14.1 Fundamentos teóricos\n14.1.1 Introducción\n14.1.2 Concordancia entre dos variables cuantitativas: Coeficiente de correlación intraclase\n14.1.3 Concordancia entre dos variables cualitativas: Kappa de Cohen\n14.1.4 Concordancia entre dos variables cualitativas ordinales: Kappa ponderado\n14.2 Ejercicios resueltos\n14.3 Ejercicios propuestos\nAutores Santiago Angulo Díaz Parreño\nJosé Miguel Cárdenas Rebollo\nAnselomo Romero Limón\nAlfredo Sánchez Alberca\nLos autores son profesores del Departamento de Matemática Aplicada y Estadística de la Universidad CEU San Pablo. Imparten las asignaturas de Matemáticas y Estadística en las facultades de Farmacia y Medicina. Son miembros de la Unidad de Bioestadística de esta universidad en la que han realizado multitud de trabajos de investigación aplicados a las Ciencias de la Salud.\nCapítulo de muestra Descarga el siguiente capítulo de muestra para tener una idea del contenido del libro.\nRegresión Lineal Simple y Correlación ¿Dónde adquirirlo? El libro puede adquirirse en la página web de CEU Ediciones.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"c421df922ab4c8b788a856202685c0ac","permalink":"/docencia/spss/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/spss/","section":"docencia","summary":"Resumen El análisis de datos en cualquier Ciencia Experimental o de la Salud es imprescindible para la compresión de los fenómenos biológicos, físicos o químicos. Las nuevas tecnologías han hecho posible el desarrollo de programas capaces de recopilar, organizar y analizar enormes cantidades de datos con poco esfuerzo.","tags":["Ejercicios","Libro"],"title":"Libro de Bioestadística Aplicada con SPSS","type":"docencia"},{"authors":null,"categories":null,"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1600206500,"objectID":"fa257eb317d30ee83eba5936751b97c4","permalink":"/docencia/python/manual/title-page/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/manual/title-page/","section":"docencia","summary":"","tags":null,"title":"Manual de Python","type":"docencia"},{"authors":null,"categories":["Programación","Python"],"content":"El sistema de archivos del sistema operativo MacOs es muy parecida a la de los sistemas Linux y organiza el contenido de todos los discos duros y sistemas de almacenamiento siguiendo una estructura de árbol cuya raíz es siempre el directorio principal que se representa como la barra diagonal /. El directorio principal contiene todos los archivos del sistema.\nPor otro lado, cada usuario del sistema tiene asignado un directorio principal de usuario que está dentro del directorio /Users y se representa con el carácter ~. Cualquier usuario puede hacer los cambios que quiera en su directorio de usuario pero no podrá acceder los directorios de otros usuarios ni del resto del sistema de archivos salvo que tenga permiso de administrador del sistema (root).\nRutas absolutas y relativas La ubicación de un archivo o un directorio en la estructura de árbol de la unidad se puede determinar mediante una ruta absoluta o una ruta relativa.\nLa ruta absoluta de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio raíz. La ruta se expresa separando los directorios con la barra diagonal /.\nLa ruta relativa de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio activo. Para referirse al directorio madre se utiliza el alias .., mientras que para referirse al propio directorio activo se utiliza el alias ..\nMientras que la ruta absoluta de un archivo o directorio es única, la ruta relativa depende del directorio activo.\nEjemplo. Supongamos el siguiente árbol de directorios.\nLa ruta absoluta al directorio Programación sería /Users/Alumno/Grado/Primero/Programación, mientras que la ruta relativa, asumiendo que el directorio activo es Primero, es ./Programación. Del mismo modo, la ruta relativa hasta el directorio Segundo sería ../Segundo.\nLa terminal de los sistemas MacOs La terminal de los sistemas MacOs proporciona una interfaz de línea de comando (CLI) para acceder a los archivos y dar instrucciones al sistema.\nLa aplicación Terminal viene instalada por defecto en los sistemas MacOs y puede ejecutarse como cualquier otra aplicación desde el Launchpad. Cuando se ejecuta abre una ventana de texto muestra la fecha de la última conexión y el prompt, que es una cadena de texto que incluye el nombre del usuario, el nombre del ordenador y la ruta del directorio actual (inicialmente el directorio principal del usuario ~) terminada con el carácter %. A partir de aquí el usuario puede dar ordenes al sistema tecleando comandos.\nEl programa encargado de interpretar los comandos que el usuario introduce en la terminal se denomina shell y en las últimas versiones de MacOs por defecto se utiliza la shell zsh.\nComandos básicos de la shell zsh Un comando es una instrucción a ejecutar por el sistema operativo. Los comandos suelen llevar asociados parámetros y argumentos. Los parámetros modifican la manera de realizar la instrucción y van precedidos de un guión - o un doble guión --, mientras que los argumentos indican sobre qué objeto se realiza la acción de indica la instrucción (un archivo, un directorio, etc.)\nComando Acción ls Muestra un listado con el contenido del directorio actual. ls -l Muestra un listado detallado con el contenido del directorio actual. ls -la Muestra un listado detallado con el contenido del directorio actual, incluyendo os archivos ocultos. ls \u0026lt;dir\u0026gt; Muestra un listado del directorio \u0026lt;dir\u0026gt;. cd \u0026lt;dir\u0026gt; Cambia al directorio \u0026lt;dir\u0026gt; convirtiéndolo en el directorio activo. mkdir \u0026lt;dir\u0026gt; Crea el directorio \u0026lt;dir\u0026gt;. mv \u0026lt;origen\u0026gt; \u0026lt;destino\u0026gt; Mueve el archivo o directorio \u0026lt;origen\u0026gt; al directorio \u0026lt;destino\u0026gt;. rm \u0026lt;f\u0026gt; Elimina el archivo \u0026lt;f\u0026gt;. rm -r \u0026lt;dir\u0026gt; Elimina el directorio \u0026lt;dir\u0026gt; y todo su contenido. Trucos de la terminal Para manejar con soltura la terminal conviene utilizar algunos trucos que facilitan su uso.\nTabulador. La tecla tabulador (⇥) permite completar la entrada del usuario automáticamente, es decir, el usuario comienza a teclear un comando o ruta de archivo y, sin necesidad de escribirla por completo, cuando se pulsa la tecla tabulador el sistema intenta completarla siempre y cuando no haya más de un comando o ruta que comiencen por esos caracteres.\nTeclas de desplazamiento. Las teclas con las flechas de desplazamiento arriba (↑) y abajo (↓) permiten reutilizar comandos que se han usado previamente en la misma sesión de la terminal.\nLimpiar la terminal. La combinación de las teclas Ctr + l limpia la terminal.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1644918677,"objectID":"8bf637ee8623140d1c413dde52605e06","permalink":"/docencia/python/herramientas/terminal-macos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/herramientas/terminal-macos/","section":"docencia","summary":"Comandos más habituales para la shell zsh","tags":["Herramientas"],"title":"Terminal de sistemas MacOs","type":"book"},{"authors":null,"categories":["Programación","Python"],"content":"Sistema de archivos de los sistemas Windows El sistema de archivos del sistema operativo Windows organiza el contenido de los discos duros en unidades. El disco duro principal es la unidad C:. En cada unidad, los archivos se organizan en directorios (carpetas) siguiendo una estructura de árbol cuya raíz es siempre el directorio principal que se representa como la barra invertida \\. El directorio principal contiene todos los archivos del disco duro.\nPor otro lado, cada usuario del sistema tiene asignado un directorio principal de usuario que está dentro del directorio /Usuarios y se representa con el carácter ~. Cualquier usuario puede hacer los cambios que quiera en su directorio de usuario pero no podrá acceder los directorios de otros usuarios ni del resto del sistema de archivos salvo que tenga permiso de administrador del sistema.\nRutas absolutas y relativas La ubicación de un archivo o un directorio en la estructura de árbol de la unidad se puede determinar mediante una ruta absoluta o una ruta relativa.\nLa ruta absoluta de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio raíz. La ruta se expresa separando los directorios con la barra \\.\nLa ruta relativa de un archivo o directorio es la secuencia de directorios que hay que atravesar para llegar al archivo o directorio en cuestión desde el directorio activo. Para referirse al directorio madre se utiliza el alias .., mientras que para referirse al propio directorio activo se utiliza el alias ..\nMientras que la ruta absoluta de un archivo o directorio es única, la ruta relativa depende del directorio activo.\nEjemplo. Supongamos el siguiente árbol de directorios.\nLa ruta absoluta al directorio Programación sería C:\\Usuarios\\Alumno\\Grado\\Primero\\Programación, mientras que la ruta relativa, asumiendo que el directorio activo es Primero, es .\\Programación. Del mismo modo, la ruta relativa hasta el directorio Segundo sería ..\\Segundo.\nLa terminal de los sistemas Windows La terminal de los sistemas Windows proporciona una interfaz de línea de comando (CLI) para acceder a los archivos y dar instrucciones al sistema.\nLa aplicación Cmd viene instalada por defecto en los sistemas Windows y puede ejecutarse como cualquier otra aplicación desde el menú de inicio. Cuando se ejecuta abre una ventana de texto que muestra un mensaje de bienvenida y el prompt, que es una cadena de texto con la ruta del directorio actual (inicialmente el directorio principal del usuario ~) terminada con el carácter \u0026gt;. A partir de aquí el usuario puede dar ordenes al sistema tecleando comandos.\nEl programa encargado de interpretar los comandos que el usuario introduce en la terminal se denomina shell. La shell de Cmd es muy básica y conviene instalar la shell PowerShell que es mucho más potente. La aplicación PowerShell no viene instalada en los sistemas Windows por defecto pero puede instalarse siguiendo las instrucciones de instalación de PowerShell\nAl igual que para la aplicación Cmd, cuando se ejecuta PowerShell se abre la ventana de la terminal con un mensaje de bienvenida y el prompt.\nComandos básicos de PowerShell Un comando es una instrucción a ejecutar por el sistema operativo. Los comandos suelen llevar asociados parámetros y argumentos. Los parámetros modifican la manera de realizar la instrucción y van precedidos de un guión -, mientras que los argumentos indican sobre qué objeto se realiza la acción de indica la instrucción (un archivo, un directorio, etc.)\nComando Acción ls Muestra un listado con el contenido del directorio actual. ls -l Muestra un listado detallado con el contenido del directorio actual. ls -la Muestra un listado detallado con el contenido del directorio actual, incluyendo os archivos ocultos. ls \u0026lt;dir\u0026gt; Muestra un listado del directorio \u0026lt;dir\u0026gt;. cd \u0026lt;dir\u0026gt; Cambia al directorio \u0026lt;dir\u0026gt; convirtiéndolo en el directorio activo. mkdir \u0026lt;dir\u0026gt; Crea el directorio \u0026lt;dir\u0026gt;. mv \u0026lt;origen\u0026gt; \u0026lt;destino\u0026gt; Mueve el archivo o directorio \u0026lt;origen\u0026gt; al directorio \u0026lt;destino\u0026gt;. rm \u0026lt;f\u0026gt; Elimina el archivo \u0026lt;f\u0026gt;. rmdir \u0026lt;dir\u0026gt; Elimina el directorio \u0026lt;dir\u0026gt; y todo su contenido. Trucos de la terminal Para manejar con soltura la terminal conviene utilizar algunos trucos que facilitan su uso.\nTabulador. La tecla tabulador (⇥) permite completar la entrada del usuario automáticamente, es decir, el usuario comienza a teclear un comando o ruta de archivo y, sin necesidad de escribirla por completo, cuando se pulsa la tecla tabulador el sistema intenta completarla siempre y cuando no haya más de un comando o ruta que comiencen por esos caracteres.\nTeclas de desplazamiento. Las teclas con las flechas de desplazamiento arriba (↑) y abajo (↓) permiten reutilizar comandos que se han usado previamente en la misma sesión de la terminal.\nLimpiar la terminal. El comando cls limpia la terminal.\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1644918677,"objectID":"6593b7f30b08a0282978542ccd47fd19","permalink":"/docencia/python/herramientas/terminal-windows/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/python/herramientas/terminal-windows/","section":"docencia","summary":"Comandos más habituales para powershell","tags":["Herramientas"],"title":"Terminal de sistemas Windows","type":"book"},{"authors":null,"categories":["Estadística","R"],"content":"El tipo de estudio estadístico más apropiado en cada caso depende de varios factores:\nEl objetivo del estudio. El número de variables que intervienen. El tipo de las variables dependientes e independientes. La naturaleza de las observaciones (independientes o emparejadas). A continuación se presentan los estudios estadísticos más habituales en función de estos factores. La siguiente tabla puede ayudar a identificar el más apropiado en cada caso.\nVariables independientes\nVariable dependiente\nObjetivo\nEjemplo\nContraste\nNinguna\n(Una poblaci\u0026oacute;n)\nCuantitativa\nContrastar la normalidad de una variable\nComprobar si la nota de un examen tiene distribuci\u0026oacute;n normal (forma de campana de Gauss)\nKomogorov-Smirnov\n(requiere muestras grandes)\nShapiro-Willks\nCuantitativa normal\nContrastar si la media poblacional de una variable tiene un valor determinado\nComprobar si la nota media de un examen es 5\nTest T para la media de una poblaci\u0026oacute;n\nCuantitativa o cualitativa ordinal\nContrastar si la mediana poblacional de una variable tiene un valor determinado\nComprobar si la calificaci\u0026oacute;n mediana de un examen es Aprobado\nTest para la mediana de una poblaci\u0026oacute;n\nCualitativa (2 categor\u0026iacute;as)\nContrastar si la proporci\u0026oacute;n poblacional de una de las categor\u0026iacute;as tiene un valor determinado\nComprobar si la proporci\u0026oacute;n de aprobados es de la mitad (o que el porcentaje es 50%)\nTest Binomial\nCualitativa\nContrastar si las proporciones de cada una de las categor\u0026iacute;as tienen un valor determinado\nComprobar si las proporciones de alumnos matriculados en ciencias, letras o mixtas son 0.5, 0.2 y 0.3 respectivamente\nTest Chi-cuadrado de bondad de ajuste\nUna cualitativa con dos categor\u0026iacute;as independientes (Dos poblaciones independientes)\nCuantitativa normal\nContrastar si hay diferencias entre las medias la variable dependiente en dos poblaciones independientes\nComprobar si el grupo de ma\u0026ntilde;ana y el grupo de tarde han tenido notas medias diferentes\nTest T para la comparaci\u0026oacute;n de medias de poblaciones independientes\nContrastar si hay diferencias entre las varianzas de la variable dependiente en dos poblaciones independientes\nComprobar si hay diferencias entre la variabilidad de las notas del grupo de ma\u0026ntilde;ana y el de tarde\nTest F de Fisher\nContrastar si hay concordancia o acuerdo entre las dos variables\nComprobar si hay concordancia o acuerdo entre las notas que ponen dos profesores distintos para los mismos ex\u0026aacute;menes\nCorrelaci\u0026oacute;n intraclase\nCuantitativa o cualitativa ordinal\nContrastar si hay diferencias entre las distribuciones de la variable dependiente en dos poblaciones independientes\nComprobar si el grupo de ma\u0026ntilde;ana y el grupo de tarde han tenido calificaciones diferentes\nTest de la U de Mann-Whitney\nContrastar si hay concordancia o acuerdo entre las dos variables\nComprobar si hay concordancia o acuerdo entre las calificaciones que ponen dos profesores distintos para los mismos ex\u0026aacute;menes\nKappa de Cohen\nCualitativa\nContrastar si hay relaci\u0026oacute;n entre las dos variables o bien si hay diferencias entre las proporciones de las categor\u0026iacute;as de la variable dependiente en las dos poblaciones definidas por las categor\u0026iacute;as de la variable independiente\nComprobar si existe relaci\u0026oacute;n entre los aprobados en una asignatura y el grupo al que pertenecen los alumnos, es decir, si la proporci\u0026oacute;n de aprobados es diferente en dos grupos distintos.\nTest Chi-cuadrado (si no ha m\u0026aacute;s del 20% de frecuencias esperadas menores que 5)\nTest exacto de Fisher\nContrastar si hay concordancia o acuerdo entre las dos variables\nComprobar si hay concordancia o acuerdo entre la valoraci\u0026oacute;n (aprobado o suspenso) que hacen dos profesores distintos para los mismos ex\u0026aacute;menes\nKappa de Cohen\nUna cualitativa con dos categor\u0026iacute;as relacionadas o pareadas\n(Dos poblaciones relacionadas o pareadas)\nCuantitativa normal\nContrastar si hay diferencias entre las medias de la variable dependiente en dos poblaciones relacionadas o pareadas\nComprobar si las notas medias de dos asignaturas cursadas por los mismos alumnos han sido diferentes o si las notas medias de un examen realizado al comienzo del curso (antes) y otro al final (despu\u0026eacute;s) de una misma asignatura han sido diferentes\nTest T para la comparaci\u0026oacute;n de medias de poblaciones relacionadas o pareadas\nCuantitativa o cualitativa ordinal\nContrastar si hay diferencias entre las distribuciones de la variable dependiente en dos poblaciones relacionadas o pareadas\nComprobar si las calificaciones de dos asignaturas cursadas por los mismos alumnos han sido diferentes\nTest de Wilcoxon\nCualitativa con dos categor\u0026iacute;as\nContrastar si hay diferencias entre las proporciones de las categor\u0026iacute;as de la variable dependiente en dos poblaciones relacionadas o pareadas\nComprobar si la proporci\u0026oacute;n o el porcentaje de aprobados en un examen es distinta al comienzo y al final del curso\nTest de McNemar\nUna cualitativa con dos o m\u0026aacute;s categor\u0026iacute;as\nindependientes\n(Dos o m\u0026aacute;s poblaciones independientes)\nCuantitativa normal y homogeneidad de varianzas\nContrastar si hay diferencias entre las medias la variable dependiente en cada una de las poblaciones definidas por las categor\u0026iacute;as de la variable independiente\nComprobar si existen diferencias entre las notas medias de tres grupos distintos de clase.\nAn\u0026aacute;lisis de la Varianza de un factor (ANOVA)\nSi hay diferencias \u0026gt; Test de Tukey o Bonferroni para la diferencia por pares\nCuantitativa normal\nContrastar si hay diferencias entre las varianzas de la variable dependiente en cada una de las poblaciones definidas por las categor\u0026iacute;as de la variable independiente\nComprobar si la variabilidad de las notas de una asignatura es distinta en tres grupos diferentes de clase\nPrueba de Levene para la homogeneidad de varianzas\nCuantitativa o cualitativa ordinal\nContrastar si hay diferencias entre las distribuciones de la variable dependiente en cada una de las poblaciones definidas por las categor\u0026iacute;as de la variable independiente\nComprobar si existen diferencias entre las calificaciones de tres grupos distintos de clase\nTest de Kruskal Wallis\nCualitativa\nContrastar si hay relaci\u0026oacute;n entre las dos variables o bien si hay diferencias entre las proporciones de las categor\u0026iacute;as de la variable dependiente en cada una de las poblaciones definidas por las categor\u0026iacute;as de la variable independiente\nComprobar si existe relaci\u0026oacute;n entre los aprobados en una asignatura y el grupo al que pertenecen los alumnos, es decir, si la proporci\u0026oacute;n de aprobados es diferente en los distintos grupos.\nTest Chi-cuadrado (si no ha m\u0026aacute;s del 20% de frecuencias esperadas menores que 5)\nTest exacto de Fisher\nUna cualitativa con dos o m\u0026aacute;s categor\u0026iacute;as relacionadas (medidas repetidas)\nCuantitativa normal\nContrastar si hay diferencias entre las medias repetidas de la variable dependiente\nComprobar si hay diferencias entre las notas que otorgan varios profesores a un mismo examen\nAn\u0026aacute;lisis de la Varianza (ANOVA) de medidas repetidas de un factor\nCuantitativa o cualitativa ordinal\nContrastar si hay diferencias entre las medidas repetidas de la variable dependiente\nComprobar si hay diferencias entre las calificaciones que otorgan varios profesores a un mismo examen\nTest de Friedman\nCualitativa\nContrastar si hay diferencias entre las valoraciones repetidas de la variable dependiente\nComprobar si hay diferencias entre la valoraci\u0026oacute;n (aprobado o suspenso) que hacen varios profesores de un mismo examen\nRegresi\u0026oacute;n log\u0026iacute;stica de medidas repetidas\nUna cuantitativa normal\nCuantitativa normal\nContrastar si existe relaci\u0026oacute;n lineal entre las dos variables\nComprobar si existe relaci\u0026oacute;n entre las notas de dos asignaturas\nCorrelaci\u0026oacute;n de Pearson\nConstruir un modelo predictivo que explique la variable dependiente en funci\u0026oacute;n de la independiente\nConstruir el modelo (funci\u0026oacute;n de regresi\u0026oacute;n) que mejor explique la relaci\u0026oacute;n entre la nota de un examen y las horas dedicadas a su estudio\nRegresi\u0026oacute;n simple (lineal o no lineal)\nCuantitativa o cualitativa ordinal\nContrastar si existe relaci\u0026oacute;n lineal entre las dos variables\nComprobar si existe relaci\u0026oacute;n entre las calificaciones de dos asignaturas\nCorrelaci\u0026oacute;n de Spearman\nCualitativa\nConstruir un modelo predictivo que explique la variable dependiente en funci\u0026oacute;n de la independiente\nConstruir el modelo (funci\u0026oacute;n log\u0026iacute;stica) que mejor explique la relaci\u0026oacute;n entre el resultado de un examen (aprobado o suspenso) y las horas dedicadas a su estudio\nRegresi\u0026oacute;n log\u0026iacute;stica simple\nLos ejemplos de los distintos test que se presentan a continuación se han realizado a partir del siguiente conjunto de datos que contiene las notas y calificaciones de un curso. El fichero con los datos puede descargarse aquí para reproducir los estudios: datos-curso.csv\nlibrary(tidyverse) Una variable cuantitativa Estudios descriptivos Estadísticos Tamaño muestral Media Desviación típica Mínimo, Máximo Cuartiles Coeficiente de asimetría Coeficiente de apuntamiento # Tamaño muestral nrow(df) ## [1] 120 # Media mean(df$notaA, na.rm = TRUE) ## [1] 6.028333 # Desviación típica sd(df$notaA, na.rm = TRUE) ## [1] 1.340524 # Min, max min(df$notaA, na.rm = TRUE) ## [1] 2.5 max(df$notaA, na.rm = TRUE) ## [1] 9.3 # Cuartiles quantile(df$notaA, c(0.25, 0.5, 0.75), na.rm = TRUE) ## 25% 50% 75% ## 5.100 5.900 6.825 # Coef. asimetría library(moments) skewness(df$notaA, na.rm = TRUE) ## [1] 0.1373915 # Coef. apuntamiento kurtosis(df$notaA, na.rm = TRUE) - 3 ## [1] -0.102287 Gráficos Diagrama de barras (variables discretas) df %\u0026gt;% ggplot(aes(x = asinaturas.aprobadas)) + geom_bar(fill=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_discrete(limits=0:5) Histograma library(ggplot2) # Límites de los intervalos breaks = 0:10 # Histograma de las notasA df %\u0026gt;% ggplot(aes(x = notaA)) + geom_histogram(breaks = breaks, fill=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_continuous(limits=c(0, 10), breaks = 0:10) # Histograma de notasE df %\u0026gt;% ggplot(aes(x = notaE)) + geom_histogram(breaks = breaks, fill=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_continuous(limits=c(0, 10), breaks = 0:10) Diagrama de líneas # Variables discretas df %\u0026gt;% count(asinaturas.aprobadas) %\u0026gt;% ggplot(aes(x = asinaturas.aprobadas, y = n)) + geom_line(col=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_discrete(limits=0:5) # Agrupación de datos en intervalos df %\u0026gt;% ggplot(aes(x = notaA)) + geom_freqpoly(breaks = breaks, col=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_continuous(limits=c(0, 10), breaks = 0:10) Diagrama de caja y bigotes df %\u0026gt;% ggplot(aes(x = notaA)) + geom_boxplot(fill=\u0026quot;#00BFC4\u0026quot;) + # Cambio de escala del eje X scale_x_continuous(limits=c(0, 10), breaks = 0:10) Estudios inferenciales Test de normalidad de Shapiro-Wilk Objetivo: Comprobar la normalidad de la distribución.\nHipótesis nula: La distribución es normal.\nshapiro.test(df$notaA) ## ## Shapiro-Wilk normality test ## ## data: df$notaA ## W = 0.99424, p-value = 0.907 shapiro.test(df$notaE) ## ## Shapiro-Wilk normality test ## ## data: df$notaE ## W = 0.92264, p-value = 4.065e-06 Test t para la media de una población Objetivo: Estimar la media de una variable o compararla con un valor dado μ0.\nRequisitos:\nUna variable cuantitativa. Distribución normal o tamaño muestral ≥ 30. Hipótesis nula: La media de la población es igual a μ0.\nEjemplo: Comprobar si la nota media de un examen es diferente de 5.\nt.test(df$notaA, mu = 5, alternative = \u0026quot;two.sided\u0026quot;) ## ## One Sample t-test ## ## data: df$notaA ## t = 8.4033, df = 119, p-value = 1.08e-13 ## alternative hypothesis: true mean is not equal to 5 ## 95 percent confidence interval: ## 5.786023 6.270643 ## sample estimates: ## mean of x ## 6.028333 Una variable cualitativa Estudios descriptivos Estadísticos Tamaños muestral Frecuencias muestrales Proporciones/porcentajes muestrales # Tamaño muestral sin datos perdidos length(na.omit(df$calificacionB)) ## [1] 115 # Frecuencias table(df$calificacionB) ## ## Aprobado Suspenso ## 98 17 # Proporciones table(df$calificacionB) / length(na.omit(df$calificacionB)) ## ## Aprobado Suspenso ## 0.8521739 0.1478261 # Porcentajes table(df$calificacionB) / length(na.omit(df$calificacionB)) * 100 ## ## Aprobado Suspenso ## 85.21739 14.78261 Gráficos Diagrama de sectores df %\u0026gt;% ggplot(aes(x = \u0026quot;\u0026quot;, fill = calificacionA)) + geom_bar() + # Cambiar a coordenadas polares coord_polar(theta = \u0026quot;y\u0026quot;) + # Eliminar ejes theme_void() Estudios inferenciales Test binomial para una proporción de una población Objetivo: Estimar la propoción de una categoría en una población o compararla con un valor p0.\nRequisitos:\nOne variable cualitativa Hipótesis nula: La proporción poblacional es igual a p0.\nEjemplo: Comprobar si la proporción de aprobados es mayor de 0.5.\nfreq \u0026lt;- table(df$calificacionA)[\u0026quot;Aprobado\u0026quot;] binom.test(freq, n, p = 0.7, alternative = \u0026quot;greater\u0026quot;) ## ## Exact binomial test ## ## data: freq and n ## number of successes = 94, number of trials = 120, p-value = 0.02657 ## alternative hypothesis: true probability of success is greater than 0.7 ## 95 percent confidence interval: ## 0.7123183 1.0000000 ## sample estimates: ## probability of success ## 0.7833333 Test Z para la proporción de una población Objetivo: Estimar la propoción de una categoría en una población o compararla con un valor p0.\nRequisitos:\nUna variable cualitativa Tamaño muestral \u0026gt;= 30 Observación: Utiliza la aproximación normal de la distribución Binomal.\nEjemplo: Comprobar si la proporción de aprobados es mayor de 0.5.\nfreq \u0026lt;- table(df$calificacionA)[\u0026quot;Aprobado\u0026quot;] prop.test(freq, n, p = 0.7, alternative = \u0026quot;greater\u0026quot;) ## ## 1-sample proportions test with continuity correction ## ## data: freq out of n, null probability 0.7 ## X-squared = 3.5813, df = 1, p-value = 0.02922 ## alternative hypothesis: true p is greater than 0.7 ## 95 percent confidence interval: ## 0.7111099 1.0000000 ## sample estimates: ## p ## 0.7833333 Dos variables: Variable dependiente cuantitativa y variable independiente culitativa con dos categorías o grupos Estudios descriptivos Estadísticos Tamaño muestral de cada grupo Media de cada grupo Desviación típica de cada grupo Mínimo, Máximo de cada grupo Cuartiles de cada grupo Coeficiente de asimetría de cada grupo Coeficiente de apuntamiento de cada grupo # Tamaño muestral de notaA según el sexo df %\u0026gt;% group_by(sexo) %\u0026gt;% group_size() ## [1] 71 49 # Media, Desviación típica, Mín, Máx, Cuartiles, Coef. Asimetría y Coef. Apuntamiento library(moments) df %\u0026gt;% group_by(sexo) %\u0026gt;% summarize(Media = mean(notaA, na.rm=TRUE), Des.Tip = sd(notaA, na.rm = TRUE), Mín = min(notaA), Máx = max(notaA), C1 = quantile(notaA, 0.25, na.rm = TRUE), C2 = quantile(notaA, 0.5, na.rm = TRUE), C3 = quantile(notaA, 0.75, na.rm = TRUE), Coef.Asimetría = skewness(notaA, na.rm = TRUE), Coef.Apuntamiento = kurtosis(notaA, na.rm = TRUE) - 3) ## # A tibble: 2 x 10 ## sexo Media Des.Tip Mín Máx C1 C2 C3 Coef.Asimetría ## \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 Hombre 6.12 1.23 3.5 9.3 5.3 6.1 6.85 0.249 ## 2 Mujer 5.89 1.49 2.5 9.3 5 5.7 6.8 0.135 ## # … with 1 more variable: Coef.Apuntamiento \u0026lt;dbl\u0026gt; Gráficos Diagrama de cajas y bigotes df %\u0026gt;% ggplot(aes(x = sexo, y = notaA, fill = sexo)) + geom_boxplot() + # Cambio de escala del eje X scale_y_continuous(limits=c(0, 10), breaks = 0:10) Diagrama de violín df %\u0026gt;% ggplot(aes(x = sexo, y = notaA, fill = sexo)) + geom_violin() + # Cambio de escala del eje X scale_y_continuous(limits=c(0, 10), breaks = 0:10) Estudios inferenciales Test de normalidad de Shapiro-Wilks Objetivo: Comprobar la normalidad de la distribución de cada población.\nHipótesis nula: La distribución es normal.\ndf %\u0026gt;% group_by(sexo) %\u0026gt;% summarise(`Estadístico W` = shapiro.test(notaA)$statistic, `p-valor` = shapiro.test(notaA)$p.value) ## # A tibble: 2 x 3 ## sexo `Estadístico W` `p-valor` ## \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 Hombre 0.990 0.872 ## 2 Mujer 0.990 0.942 Test F de Fisher de comparación de varianzas de dos poblaciones independientes Objetivo: Comparar las varianzas de dos poblaciones independientes.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos categorías (poblaciones) Distribución normal de la variable dependiente en ambas poblaciones o tamaños de las muestras de cada población ≥ 30. Hipótesis nula: La varianzas poblacionales son iguales (no existe una diferencia significativa entre las medias poblacionales).\nEjemplo: Comprobar si diferencias signicativas entre las notas medias de hombres y mujeres.\n# Test de comparación de varianzas var.test(notaA ~ sexo, data = df) ## ## F test to compare two variances ## ## data: notaA by sexo ## F = 0.6769, num df = 70, denom df = 48, p-value = 0.1347 ## alternative hypothesis: true ratio of variances is not equal to 1 ## 95 percent confidence interval: ## 0.3953421 1.1293155 ## sample estimates: ## ratio of variances ## 0.6769032 Test t de comparación de medias de dos poblaciones independientes Objetivo: Estimar la diferencia de medias en las dos poblaciones o comprobar si hay diferencias significativas entre ellas.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos categorías (poblaciones) Distribución normal de la variable dependiente en ambas poblaciones o tamaños de las muestras de cada población ≥ 30. Hipótesis nula: La medias poblacionales son iguales (no existe una diferencia significativa entre las medias poblacionales).\nObservación: El resultado del test depende de si las varianzas poblacionales son iguales o no.\nEjemplo: Comprobar si diferencias signicativas entre las notas medias de hombres y mujeres.\n# Test de comparación de varianzas var.test(notaA ~ sexo, data = df) ## ## F test to compare two variances ## ## data: notaA by sexo ## F = 0.6769, num df = 70, denom df = 48, p-value = 0.1347 ## alternative hypothesis: true ratio of variances is not equal to 1 ## 95 percent confidence interval: ## 0.3953421 1.1293155 ## sample estimates: ## ratio of variances ## 0.6769032 # Test de comparación de medias asumiendo varianzas iguales t.test (notaA ~ sexo, data = df, alternative = \u0026quot;two.sided\u0026quot;, var.equal = FALSE) ## ## Welch Two Sample t-test ## ## data: notaA by sexo ## t = 0.89364, df = 89.873, p-value = 0.3739 ## alternative hypothesis: true difference in means between group Hombre and group Mujer is not equal to 0 ## 95 percent confidence interval: ## -0.2821809 0.7435779 ## sample estimates: ## mean in group Hombre mean in group Mujer ## 6.122535 5.891837 # Test de comparación de medias asumiendo varianzas iguales t.test (notaA ~ sexo, data = df, alternative = \u0026quot;two.sided\u0026quot;, var.equal = TRUE) ## ## Two Sample t-test ## ## data: notaA by sexo ## t = 0.92608, df = 118, p-value = 0.3563 ## alternative hypothesis: true difference in means between group Hombre and group Mujer is not equal to 0 ## 95 percent confidence interval: ## -0.262615 0.724012 ## sample estimates: ## mean in group Hombre mean in group Mujer ## 6.122535 5.891837 Diagrama de medias df %\u0026gt;% ggplot(aes(x = sexo, y = notaA, colour = sexo)) + # Puntos de medias stat_summary(fun=\u0026quot;mean\u0026quot;, size=3, geom=\u0026quot;point\u0026quot;, position=position_dodge(width=0.25)) + # Intervalos de confianza para la media stat_summary(fun.data = function(x) mean_cl_normal(x, conf.int=0.95), geom = \u0026quot;pointrange\u0026quot;, position=position_dodge(width=0.25)) Test U de Mann-Whitney de comparación de dos poblaciones independientes (no paramétrico) Objetivo: Comprobar si hay diferencias significativas entre entre dos poblaciones independientes.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos categorías (poblaciones) Hipótesis nula: La medianas poblacionales son iguales (no existe una diferencia significativa entre las medianas poblacionales).\nEjemplo: Comprobar si diferencias signicativas entre las notas de hombres y mujeres.\n# Test de rangos U the Mann-Whitney wilcox.test(notaA ~ sexo, data = df, alternative = \u0026quot;two.sided\u0026quot;) ## ## Wilcoxon rank sum test with continuity correction ## ## data: notaA by sexo ## W = 1917, p-value = 0.3445 ## alternative hypothesis: true location shift is not equal to 0 Dos variables: Variable dependiente cuantitativa y variable independiente culitativa con dos categorías o grupos pareados Dos grupos o poblaciones están pareadas o emparejadas cuando los dos poblaciones contienen los mismos individuos, es decir, se trata en realidadad de una única población, pero la variable dependiente se mide dos veces en cada individuo (normalmente antes y después de la algún suceso) y por tanto cada individuo tiene asociado un par de valores.\nEste estudio puede realizarse también creando una nueva variable a partir de la resta de las dos mediciones y planteando un estudio de una sola variable cuantitativa.\nEjemplo: Creación de la diferencia de notas de las asignaturas A y B.\n# Creamos la variable diferencia = notaA - notaB df \u0026lt;- df %\u0026gt;% mutate(diferencia = notaA - notaB) Estudios descriptivos Estadísticos Tamaño muestral del grupo Media de la diferencia Desviación típica de la diferencia Mínimo, Máximo de la diferencia Cuartiles de la diferencia Coeficiente de asimetría de la diferencia Coeficiente de apuntamiento de la diferencia Ejemplo: Estadísticos descriptivos de la diferencia entre las notas de las asignaturas A y B de un mismo grupo de alumnos.\n# Tamaño muestral de sin contar los datos perdidos length(na.omit(df$diferencia)) ## [1] 115 # Media, Desviación típica, Mín, Máx, Cuartiles, Coef. Asimetría y Coef. Apuntamiento library(moments) df %\u0026gt;% summarize(Media = mean(diferencia, na.rm=TRUE), Des.Tip = sd(diferencia, na.rm = TRUE), Mín = min(diferencia, na.rm = TRUE), Máx = max(diferencia, na.rm = TRUE), C1 = quantile(diferencia, 0.25, na.rm = TRUE), C2 = quantile(diferencia, 0.5, na.rm = TRUE), C3 = quantile(diferencia, 0.75, na.rm = TRUE), Coef.Asimetría = skewness(diferencia, na.rm = TRUE), Coef.Apuntamiento = kurtosis(diferencia, na.rm = TRUE) - 3) ## # A tibble: 1 x 9 ## Media Des.Tip Mín Máx C1 C2 C3 Coef.Asimetría Coef.Apuntamiento ## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 -0.882 0.900 -3.2 1.10 -1.5 -0.8 -0.300 -0.430 -0.137 Gráficos Diagrama de cajas y bigotes df %\u0026gt;% ggplot(aes(x = diferencia)) + geom_boxplot(fill=\u0026quot;#00BFC4\u0026quot;) Estudios inferenciales Test de normalidad de Shapiro-Wilks Objetivo: Comprobar la normalidad de la distribución de la diferencia.\nHipótesis nula: La distribución es normal.\nEjemplo: Comprobar la normalidad de la diferencia entre las notas de las asignaturas A y B de un mismo grupo de alumnos.\ndf %\u0026gt;% summarise(`Estadístico W` = shapiro.test(diferencia)$statistic, `p-valor` = shapiro.test(diferencia)$p.value) ## # A tibble: 1 x 2 ## `Estadístico W` `p-valor` ## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 0.979 0.0737 Test t de comparación de medias de dos poblaciones pareadas Objetivo: Estimar la media de la diferencia o compararla con un valor dado μ0.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos categorías (poblaciones) pareadas Distribución normal de la variable diferencia o tamaño muestral ≥ 30. Hipótesis nula: La medias poblacionales son iguales (no existe una diferencia significativa entre las medias poblacionales).\nEjemplo: Comprobar si hay una diferencia signicativa entre las notas medias de las asinaturas A y B, o lo que es lo mismo, comprobar si la media de la diferencia de las notas de A y B es distinta de 0.\nt.test (notaA, notaB, data = df, alternative = \u0026quot;two.sided\u0026quot;, paired = TRUE) ## ## Paired t-test ## ## data: notaA and notaB ## t = -10.618, df = 114, p-value \u0026lt; 2.2e-16 ## alternative hypothesis: true difference in means is not equal to 0 ## 95 percent confidence interval: ## -1.0515337 -0.7208695 ## sample estimates: ## mean of the differences ## -0.8862016 Diagrama de medias df %\u0026gt;% ggplot(aes(x=\u0026quot;\u0026quot;, y = diferencia)) + # Puntos de medias stat_summary(fun=\u0026quot;mean\u0026quot;, size=3, geom=\u0026quot;point\u0026quot;) + # Intervalos de confianza para la media stat_summary(fun.data = function(x) mean_cl_normal(x, conf.int=0.95), geom = \u0026quot;pointrange\u0026quot;, position=position_dodge(width=0.25)) Test Wilcoxon de comparación de dos poblaciones pareadas (no paramétrico) Objetivo: Comparar las medianas de las dos poblaciones.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos categorías (poblaciones) pareadas. Hipótesis nula: La medianas poblacionales son iguales (no existe una diferencia significativa entre las medianas poblacionales).\nEjemplo: Comprobar si hay una diferencia signicativa entre las notas de las asignaturas A y B.\nwilcox.test(notaA, notaB, data = df, alternative = \u0026quot;two.sided\u0026quot;, paired = TRUE) ## ## Wilcoxon signed rank test with continuity correction ## ## data: notaA and notaB ## V = 466, p-value = 1.192e-15 ## alternative hypothesis: true location shift is not equal to 0 Dos variables: Variable dependiente cuantitativa y variable independiente culitativa con más de dos categorías o grupos Estudios descriptivos Estadísticos Tamaño muestral de cada grupo Media de cada grupo Desviación típica de cada grupo Mínimo, Máximo de cada grupo Cuartiles de cada grupo Coeficiente de asimetría de cada grupo Coeficiente de apuntamiento de cada grupo # Tamaño muestral de notaA según el grupo df %\u0026gt;% group_by(grupo) %\u0026gt;% group_size() ## [1] 38 35 47 # Media, Desviación típica, Mín, Máx, Cuartiles, Coef. Asimetría y Coef. Apuntamiento library(moments) df %\u0026gt;% group_by(grupo) %\u0026gt;% summarize(Media = mean(notaA, na.rm=TRUE), Des.Tip = sd(notaA, na.rm = TRUE), Mín = min(notaA, na.rm = TRUE), Máx = max(notaA, na.rm = TRUE), C1 = quantile(notaA, 0.25, na.rm = TRUE), C2 = quantile(notaA, 0.5, na.rm = TRUE), C3 = quantile(notaA, 0.75, na.rm = TRUE), Coef.Asimetría = skewness(notaA, na.rm = TRUE), Coef.Apuntamiento = kurtosis(notaA, na.rm = TRUE) - 3) ## # A tibble: 3 x 10 ## grupo Media Des.Tip Mín Máx C1 C2 C3 Coef.Asimetría ## \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 A 6.54 0.998 4.3 8.6 5.93 6.6 7.15 -0.250 ## 2 B 6.96 1.23 3.5 9.3 6.2 6.8 7.7 -0.141 ## 3 C 4.92 0.771 2.5 5.9 4.5 5.1 5.5 -1.06 ## # … with 1 more variable: Coef.Apuntamiento \u0026lt;dbl\u0026gt; Gráficos Diagrama de cajas y bigotes df %\u0026gt;% ggplot(aes(x = grupo, y = notaA, fill = grupo)) + geom_boxplot() + # Cambio de escala del eje X scale_y_continuous(limits=c(0, 10), breaks = 0:10) Diagrama de violín df %\u0026gt;% ggplot(aes(x = grupo, y = notaA, fill = grupo)) + geom_violin() + # Cambio de escala del eje X scale_y_continuous(limits=c(0, 10), breaks = 0:10) Estudios inferenciales Test de normalidad de Shapiro-Wilks Objetivo: Comprobar la normalidad de la distribución de cada población.\nHipótesis nula: La distribución es normal.\nEjemplo: Comprobar la normalidad de las distribuciones de la nota A en los grupos A, B y C.\ndf %\u0026gt;% group_by(grupo) %\u0026gt;% summarise(`Estadístico W` = shapiro.test(notaA)$statistic, `p-valor` = shapiro.test(notaA)$p.value) ## # A tibble: 3 x 3 ## grupo `Estadístico W` `p-valor` ## \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 A 0.984 0.840 ## 2 B 0.963 0.277 ## 3 C 0.918 0.00280 Interpretación: La distribución de la nota A en los grupos A y B es normal (p-valores \u0026gt; 0.05) pero no en el grupo C (p-valor \u0026lt; 0.05)\nEjemplo: Comprobar la normalidad de las distribuciones de la nota A en los grupos A, B y C.\ndf %\u0026gt;% group_by(grupo) %\u0026gt;% summarise(`Estadístico W` = shapiro.test(notaC)$statistic, `p-valor` = shapiro.test(notaC)$p.value) ## # A tibble: 3 x 3 ## grupo `Estadístico W` `p-valor` ## \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; ## 1 A 0.989 0.961 ## 2 B 0.965 0.343 ## 3 C 0.976 0.442 Interpretación: La distribución de la nota C en los tres grupos es normal (p-valores \u0026gt; 0.05).\nTest de Levene de comparación de varianzas de dos o más poblaciones independientes Objetivo: Comparar las varianzas de dos o más poblaciones independientes.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con dos o más categorías (poblaciones) Distribución normal de la variable dependiente en todas las poblaciones o tamaños de las muestras de cada población ≥ 30. Hipótesis nula: La varianzas poblacionales son iguales (no existe una diferencia significativa entre las medias poblacionales).\nEjemplo: Comprobar si diferencias signicativas entre las varianzas de las notas de la asignatura C de los grupos A, B y C.\n# El test de Levene está disponible en el paquete car library(car) # Test de comparación de varianzas leveneTest(notaC ~ grupo, data = df) ## Levene's Test for Homogeneity of Variance (center = median) ## Df F value Pr(\u0026gt;F) ## group 2 0.3186 0.7278 ## 116 Interpretación: No existe diferencia significativa entre las varianzas de la nota C en los grupos A, B y C (p-valor \u0026gt; 0.05).\nANOVA de un factor para la comparación medias de más de dos poblaciones independientes Objetivo: Comprobar si hay diferencias significativas entre las medias de más de dos poblaciones independientes.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con más de dos categorías (poblaciones)- Distribución normal de la variable dependiente en todas las poblaciones o tamaños de las muestras de cada población ≥ 30. Homogeneidad de varianzas en las poblaciones. Hipótesis nula: La medias poblacionales son iguales (no existe una diferencia significativa entre las medias poblacionales).\nEjemplo: Comprobar si diferencias signicativas entre las notas medias de la asignatura C de los grupos A, B y C.\n# Análisis de la varianza de un factor summary(aov(notaC ~ grupo, data = df)) ## Df Sum Sq Mean Sq F value Pr(\u0026gt;F) ## grupo 2 80.69 40.34 20.05 3.32e-08 *** ## Residuals 116 233.41 2.01 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## 1 observation deleted due to missingness Interpretación: Existen diferencias significativas entre las medias de la nota C entre al menos dos grupos (p-valor=3.32e-08 \u0026lt; 0.05).\nObservación: Cuando se detectan diferencias significativas entre las medias de al menos dos grupos conviene realizar un test de comparación múltiple por pares para ver entre qué poblaciones hay diferencias y entre cuáles no. Los test más habituales de comparación por pares son el de Tukey y el de Bonferroni.\n# Test de comparación múltiple de Tukey TukeyHSD(aov(notaC ~ grupo, data = df)) ## Tukey multiple comparisons of means ## 95% family-wise confidence level ## ## Fit: aov(formula = notaC ~ grupo, data = df) ## ## $grupo ## diff lwr upr p adj ## B-A 0.4312693 -0.3637573 1.2262960 0.4048482 ## C-A -1.4455767 -2.1802858 -0.7108676 0.0000241 ## C-B -1.8768461 -2.6350758 -1.1186163 0.0000001 Interpretación: No existe una diferencia significativa entre las notas medias de la asignatura C de los grupos A y B (p-valor=0.4048 \u0026gt; 0.05), pero si existe una diferencia significativa entre las notas medias de los grupos A y C (p-valor=0.00002 \u0026lt; 0.05) y también entre las notas medias de los grupos B y C (p-valor=0.0000001 \u0026lt; 0.05).\nDiagrama de medias df %\u0026gt;% ggplot(aes(x = grupo, y = notaC, colour = grupo)) + # Puntos de medias stat_summary(fun=\u0026quot;mean\u0026quot;, size=3, geom=\u0026quot;point\u0026quot;, position=position_dodge(width=0.25)) + # Intervalos de confianza para la media stat_summary(fun.data = function(x) mean_cl_normal(x, conf.int=0.95), geom = \u0026quot;pointrange\u0026quot;, position=position_dodge(width=0.25)) Test Kruskal-Wallis de comparación de más de dos poblaciones independientes (no paramétrico) Objetivo: Comprobar si hay diferencias significativas entre entre más de dos poblaciones independientes.\nRequisitos:\nVariable dependiente cuantitativa. Una variable independiente cualitativa con más de dos categorías (poblaciones) Hipótesis nula: La medianas poblacionales son iguales (no existe una diferencia significativa entre las medianas poblacionales).\nEjemplo: Comprobar si diferencias signicativas entre las notas de la asignatura A de los grupos A, B y C.\n# Test de Kruskal-Wallis kruskal.test(notaA ~ grupo, data = df) ## ## Kruskal-Wallis rank sum test ## ## data: notaA by grupo ## Kruskal-Wallis chi-squared = 62.218, df = 2, p-value = 3.087e-14 Interpretación: Existen diferencias significativas entre las notas de la asignatura A de al menos dos de los grupos.\nObservación: Cuando se detectan diferencias significativas entre al menos dos grupos conviene realizar un test de comparación múltiple por pares para ver entre qué poblaciones hay diferencias y entre cuáles no. El test más habitual es el de Wilcoxon.\n# Test de comparación múltiple de Wilcoxon pairwise.wilcox.test(df$notaA, df$grupo, p.adjust.method = \u0026quot;BH\u0026quot;) ## ## Pairwise comparisons using Wilcoxon rank sum test with continuity correction ## ## data: df$notaA and df$grupo ## ## A B ## B 0.19 - ## C 4.2e-10 1.3e-11 ## ## P value adjustment method: BH Interpretación: No existe una diferencia significativa entre las notas de la asignatura A de los grupos A y B (p-valor=0.19 \u0026gt; 0.05), pero si existe una diferencia significativa entre las notas de los grupos A y C (p-valor=4.2e-10 \u0026lt; 0.05) y también entre las notas de los grupos B y C (p-valor=1.3e-11 \u0026lt; 0.05).\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"es","lastmod":1647167175,"objectID":"210b2103e50b322f0502259c550839b7","permalink":"/docencia/r/estudios-estadisticos/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/docencia/r/estudios-estadisticos/","section":"docencia","summary":"Tipos de estudios estadísticos más habituales con ejemplos implementados en R.","tags":null,"title":"Tipos de estudios estadísticos","type":"book"}]