<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ análisis de datos - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ análisis de datos - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Thu, 14 May 2026 19:58:40 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/tag/analisis-de-datos/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo extraer datos de archivos PDF con Python ]]>
                </title>
                <description>
                    <![CDATA[ Los datos están presentes en todas las áreas del mundo digital moderno, y toma diferente formas. Uno de los formatos más comunes es PDF. Facturas, reportes y otras formas frecuentemente almacenados en archivo Formato de Documento Portátil (PDF) por organizaciones e instituciones. Puede ser laborioso y lleva mucho tiempo extraer ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-extraer-datos-de-archivos-en-pdf/</link>
                <guid isPermaLink="false">670008413d481269b58a0d3a</guid>
                
                    <category>
                        <![CDATA[ análisis de datos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Diego Lopez ]]>
                </dc:creator>
                <pubDate>Sun, 06 Oct 2024 23:50:20 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2024/10/Shittu-Olumide-Extract-Data-from-PDF-Files-with-Python-1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/extract-data-from-pdf-files-with-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Extract Data from PDF Files with Python</a>
      </p><p>Los datos están presentes en todas las áreas del mundo digital moderno, y toma diferente formas.</p><p>Uno de los formatos más comunes es PDF. Facturas, reportes y otras formas frecuentemente almacenados en archivo Formato de Documento Portátil (PDF) por organizaciones e instituciones.</p><p>Puede ser laborioso y lleva mucho tiempo extraer datos archivos PDF. Afortunadamente, para fácil extracción de datos de archivos PDF, Python brinda una variedad de librerías.</p><p>Este tutorial explicará como extraer datos de archivos PDF usando Python. Aprenderás a instalar las librerías necesarias y te proporcionaré ejemplos de como hacerlo.</p><p>Hay muchas librerías de Python que puedes usar para leer y extraer texto de archivos PDF. Estos incluyen PDFMiner, PyPDF2, PDFQuery y PyMuPDF. Aquí, usaremos PDFQuery para leer y extraer datos de múltiples archivos PDF.</p><h2 id="c-mo-usar-pdfquery">Cómo usar PDFQuery</h2><p>PDFQuery es una biblioteca de Python que proporciona una manera fácil de extraer datos de archivos PDF mediante el uso de selectores similares a CSS para ubicar elementos en el documento.</p><p>Lee un archivo PDF como un objeto, convierte el objeto PDF a un archivo XML, y accede a la información deseada por su ubicación especifica dentro del documento PDF.</p><p>Consideremos un ejemplo corto para ver como funciona.</p><pre><code class="language-py">from pdfquery import PDFQuery

pdf = PDFQuery('example.pdf')
pdf.load()

# Use CSS-like selectors to locate the elements
text_elements = pdf.pq('LTTextLineHorizontal')

# Extract the text from the elements
text = [t.text for t in text_elements]

print(text)</code></pre><p>En este código, primero creamos un objeto PDFQuery pasando el nombre del archivo del documento PDF al cual queremos extraer el texto. Luego cargamos el documento en el objeto llamando al método load().</p><p>A continuación, utilizamos selectores similares a CSS para localizar los elementos de texto en el documento PDF. El método pq() es usado para localizar los elementos, el cual regresa un objeto PyQuery que representa los elementos seleccionados.</p><p>Por último, extraemos el texto de los elementos accediendo al atributo text de cada elemento y almacenamos el texto extraído en una lista llamada texto.</p><p>Consideremos otro método que podemos usar para leer archivos PDF, extraer algunos elementos de los datos y crear un set de datos estructurados usando PDFQuery. Seguiremos los siguientes pasos:</p><ul><li>Instalación del paquete.</li><li>Importar las librerías.</li><li>Leer y convertir archivos PDF.</li><li>Acceder y extraer los datos.</li></ul><h3 id="instalaci-n-del-paquete">Instalación del Paquete</h3><p>Primero, necesitamos instalar PDFQuery y también Pandas para un poco de análisis y presentación de datos.</p><pre><code class="language-bash">pip install pdfquery
pip install pandas</code></pre><h2 id="importar-las-librer-as">Importar las librerías</h2><pre><code class="language-py">import pandas as pd
import pdfquery</code></pre><p>Importamos dos librerías para poder usarlas en nuestro proyecto.</p><h2 id="leer-y-convertir-los-archivos-pdf">Leer y convertir los archivos PDF</h2><pre><code class="language-py">#read the PDF
pdf = pdfquery.PDFQuery('customers.pdf')
pdf.load()


#convert the pdf to XML
pdf.tree.write('customers.xml', pretty_print = True)
pdf</code></pre><p>Leeremos el archivo PDF en nuestro proyecto como un objeto de elemento y lo cargamos. Convertir el objeto pdf en un archivo de Lenguage de Marcado Extensible (XML). Este archivo contiene los datos y los metadatos del archivo PDF anteriormente brindado.</p><p>El XML define un grupo de reglas para codificar archivos PDF en un formato que es leíble por humanos y máquinas. Mirando al archivo XML usando un editor de texto, podemos ver dónde están los datos que queremos extraer.</p><h2 id="acceder-y-extraer-los-datos">Acceder y extraer los Datos</h2><p>Podemos obtener la información que estamos tratando de extraer dentro de LTTextBoxHorizontal, y podemos ver la metadata asociada con el archivo.</p><p>Los valores adentro de la caja de texto, [68.0, 231.57, 101.990, 234.893] en el fragmento de XML hace referencia a las coordenadas Izquierda, Fondo, Derecha, Arriba de la caja de texto. Puedes pensar &nbsp;en esto como los límites alrededor de los datos que queremos extraer.</p><p>Accedamos y extraigamos el nombre del cliente usando las coordenadas de la caja de texto:</p><pre><code class="language-py"># access the data using coordinates
customer_name = pdf.pq('LTTextLineHorizontal:in_bbox("68.0, 231.57, 101.990, 234.893")').text()

print(customer_name)

#output: Brandon James</code></pre><p>Y eso es todo, ¡hemos terminado!</p><p>Nota: a veces el dato que queremos extraer no está exactamente en la misma ubicación en cada archivo, podemos causar problemas. Afortunadamente, PDFQuery también puede consultar etiquetas que contengan una cadena determinada.</p><h2 id="conclusi-n">Conclusión</h2><p>La extracción de datos de archivos PDF es una tarea crucial porque estos archivos se utilizan con frecuencia para el almacenamiento y el uso compartido de documentos.</p><p> La librería PDFQuery de Python es una herramienta potente para extraer datos de archivos PDF. Cualquier persona buscando extraer datos de archivos PDF encontrará PDFQuery &nbsp;una gran opción gracias a su fácil sintaxis y documentación comprensible. Es también código abierto y puede ser modificado para adaptarse a casos de uso específicos.</p><p> Conectémonos en <a href="https://x.com/Shittu_Olumide_">Twitter</a> y en <a href="https://www.linkedin.com/in/olumide-shittu">LinkedIn</a>. También puedes suscribirte a mí canal de <a href="https://www.youtube.com/channel/UCNhFxpk6hGt5uMCKXq0Jl8A">YouTube</a>.</p><p>¡Feliz codificación!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo empezar en el campo del análisis de datos: Guía para principiantes ]]>
                </title>
                <description>
                    <![CDATA[ ¡Hola y bienvenidos al mundo del Análisis de Datos! Si estás pensando en una carrera dentro de este campo, estás en buenas manos. El Análisis de Datos es un campo emocionante y en constante crecimiento, que últimamente está cobrando importancia en nuestro mundo actual impulsado por datos. Seamos sinceros,  actualmente ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-empezar-en-analisis-de-datos-guia-para-principiantes/</link>
                <guid isPermaLink="false">65ecde44e41e0704006c192c</guid>
                
                    <category>
                        <![CDATA[ análisis de datos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Constanza Areal ]]>
                </dc:creator>
                <pubDate>Tue, 16 Apr 2024 20:37:33 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2024/04/dataa.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/data-analytics-roadmap/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Get Started in Data Analytics – A Roadmap for Beginners</a>
      </p><p>¡Hola y bienvenidos al mundo del Análisis de Datos! Si estás pensando en una carrera dentro de este campo, estás en buenas manos. El Análisis de Datos es un campo emocionante y en constante crecimiento, que últimamente está cobrando importancia en nuestro mundo actual impulsado por datos.</p><p>Seamos sinceros, &nbsp;actualmente nos estamos ahogando en información. Desde publicaciones de redes sociales a transacciones financieras, pasando hasta por historias clínicas, no hay nada que nos permita hacer un filtro.</p><p>Aquí es donde aparecen los analistas de datos. Ellos son quienes nos ayudan a entender los datos y convertirlos en conocimiento valioso.<br><br>Y ese conocimiento puede ser innovador. Puede ayudar a las empresas a mejorar sus productos y servicios, a los Estados a tomar decisiones informadas sobre políticas, y a las personas a hacer mejores elecciones para su vida personal y profesional.</p><p>Pero no es solamente sobre el impacto. El Análisis de Datos también puede ser bastante lucrativo. De acuerdo con estudios recientes, el sueldo promedio en E.E.U.U es de alrededor de USD 70.000 al año. Y puede ser aún mayor de acuerdo si tenemos en cuenta la experiencia de la persona.</p><p>Por supuesto, como cualquier profesión, el Análisis de Datos tiene sus desafíos. Existe ese conjunto de datos que nos produce dolor de cabeza, la amenaza siempre latente del síndrome del impostor, y los debates infinitos sobre cuál es el mejor lenguaje de programación o herramienta de visualización de datos. Pero, si te gustan los desafíos, este podría ser campo para tí. </p><p>Entonces, si estás tratando de convertirte en un analista de datos, este artículo es para tí. Con suerte, te ahorrará mucho tiempo y esfuerzo para que no desperdicies tu tiempo en aprender cosas irrelevantes como me pasó a mí. </p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/tenor-1.gif" class="kg-image" alt="tenor-1" width="600" height="400" loading="lazy"></figure><h2 id="paso-1-investiga-el-rol-de-analista-de-datos"><strong>Paso 1: Investiga el rol de Analista de Datos</strong></h2><p>¿Estás pensando en convertirte en analista de datos? ¡Fantástico! Empecemos por comprender de qué se trata el rol antes de continuar. </p><p>Verás, el trabajo de un analista es mucho más que hacer cuentas y crear cuadros (aunque eso también puede ser bastante interesante). El trabajo implica aprovechar la información para encontrar ideas y resolver problemas. Esto significa hacer las preguntas correctas, organizar y evaluar la información y explicar tus conclusiones a otros.</p><p>Algunas de las habilidades básicas y actividades que un analista de datos realiza incluyen:</p><ul><li>Recolectar y analizar grandes grupos de datos para identificar patrones, tendencias, o cualquier otro conocimiento que pueda ayudar a tomar decisiones de negocios informadas.</li><li>Usar herramientas y técnicas de estadística para obtener conocimiento de los datos.</li><li>Desarrollar e implementar de sistemas de recolección de datos y otras estrategias para optimizar la eficiencia y la calidad de los datos.</li><li>Colaborar con otros equipos para identificar necesidades de negocios y desarrollar soluciones usando datos para resolverlas.</li><li>Comunicar las conclusiones a las partes interesadas, de una manera clara y accionable.</li></ul><p>Así que si no eres un prodigio de la matemática o un genio de la computación, no te preocupes. La estadística, la informática y los negocios son sólo algunas de las numerosas disciplinas que se incorporan al tema multidisciplinar del análisis de datos. A quien le guste aprender, resolver problemas y hacer una diferencia puede disfrutar de esta disciplina.</p><p>Entonces, ¿dónde puedes encontrar información adicional sobre lo que hace un analista de datos? Puede empezar por consultar los numerosos recursos gratuitos disponibles en internet.</p><p>Muchos blogs, podcasts y canales de YouTube ofrecen contenido informativo y entretenido sobre el análisis de datos. Voy a dejar abajo algunos canales de YouTube que me han ayudado a lo largo de los años.</p><p>Para obtener una idea de las habilidades y cualidades que requiere el rol, puedes conectar con otros analistas de datos, ir a reuniones o seminarios, y hasta mirar descripciones del puesto.</p><p> No te olvides de tener cuenta si trabajar con datos es algo que disfrutas. ¿Te gusta encontrar patrones y resolver acertijos? ¿Quieres hacer del mundo un lugar mejor? Si la respuesta es sí, entonces el análisis de datos puede ser tu carrera ideal.</p><p>El primer paso en tu camino es entender lo que hace un analista de datos. Disfruta el camino, tomate tu tiempo y no dudes preguntar.</p><h2 id="paso-2-explora-los-requisitos-para-el-rol-de-analista-de-datos"><strong>Paso 2: Explora los requisitos para el rol de Analista de Datos</strong></h2><p>Ahora que ya sabes de qué se trata el rol de analista de datos, es momento de empezar a mirar qué es lo que buscan los empleadores. Al fin y al cabo, querrás asegurarte de que tus habilidades y conocimientos son lo que se necesita en el mercado laboral.</p><p>Pero antes de que empieces a asustarte por no tener demasiada experiencia, tienes que saber que cada empresa es distinta. Algunas priorizan las habilidades de programación, mientras que otras valoran la comunicación y la perspicacia empresarial. Por eso es importante que hagas tu propia investigación para saber qué habilidades y conocimientos específicos están en demanda dentro de tu industria o empresa soñada. </p><p>¿Cómo puedes encontrar esta información? Por ejemplo, un buen lugar es mirar ofertas de empleo y descripciones de puesto en sitios como LinkedIn, Indeed, o Glassdoor. Esto puede ayudarte a darte una idea de los requisitos y conocimientos para distintos roles de analista de datos.</p><p>Algunos ejemplos de lo que una oferta laboral puede incluir son:</p><ul><li>Conocimiento en SQL y experiencia &nbsp;trabajando con grandes conjunto de datos.</li><li>Experiencia en Python y herramientas de visualización de datos como Tableau o Power BI.</li><li>Fuertes habilidades analíticas y capacidad de sacar conclusiones a partir de datos complejos.</li><li>Experiencia en análisis estadístico y técnicas de modelado de datos.</li><li>Excelente habilidad para comunicar conclusiones complejas a audiencias técnicas y no técnicas.</li></ul><p>¡Pero no te detengas ahí! También puedes contactar a personas que estén trabajando en el sector o que tengan puestos que te interesen. Pregúntales sobre su experiencia y qué habilidades, ellos consideran que son las más importantes para ser exitoso en su rol. Quizás hasta quieras tener alguna entrevista para informarte más sobre la industria u obtener consejos sobre cómo empezar.</p><p>Y hablando de empezar, es importante recordar que no hay ningún sustituto para la experiencia práctica. Si bien es tentador pasar horas mirando tutoriales, aprenderás mucho más rápido y de forma efectiva creando cosas y trabajando con proyectos de análisis de datos reales.</p><p>Por eso, tomate tu tiempo para analizar los requisitos de un puesto, pero no te olvides de seguir perfeccionando tus habilidades y obtener experiencia práctica. Con poco esfuerzo, pero mucha curiosidad, estarás en camino de convertirte un analista de datos exitoso.</p><h2 id="paso-3-sentirse-c-modo-con-las-matem-ticas-y-las-estad-sticas"><strong>Paso 3: </strong>Sentirse cómodo con las matemáticas y las estadísticas</h2><p>Ok, sé lo que estás pensando ¿Matemática y Estadística? ¡Oh, no!</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/im-out-gif-11-1.gif" class="kg-image" alt="im-out-gif-11-1" width="600" height="400" loading="lazy"></figure><p>Pero escúchame antes de que te vayas corriendo. Para que un analista de datos pueda entender los datos y obtener conclusiones valiosas de ellos, es esencial que tenga un conocimiento básico de estos conceptos.</p><p>¿Qué conceptos básicos y fórmulas estadísticas debes saber?</p><p>Para empezar, hay medidas de tendencia central conocidas como media, mediana y moda, que pueden darte una idea del valor típico en un conjunto de datos. Debes saber cómo calcularlas.</p><p>La desviación típica es una medida que se utiliza para saber cuánto difiere la distribución de los datos de la media, y debes saber cómo calcularla.</p><p>Para poder encontrar relaciones entre variables y generar predicciones basadas en esas asociaciones, también debes estar familiarizado con correlación y regresión.</p><p>Pero no es solamente saber sobre números. También debes tener un conocimiento básico de álgebra lineal, ya que se utiliza en distintas formas de análisis de datos. <a href="https://www.freecodecamp.org/news/linear-algebra-full-course/">Aquí tiene un curso para estudiar a fondo y su libro de texto ,en inglés</a>, para que puedas empezar.</p><p>Quizás necesites matrices para modificar y manipular datos o quizás necesites usar <a href="https://www.freecodecamp.org/news/data-science-with-python-8-ways-to-do-linear-regression-and-measure-their-speed-b5577d75f8b/">regresión lineal (en inglés) </a>para predecir valores futuros basados en tendencias históricas.</p><p>Si no tienes un conocimiento sólido en Matemática, esto puede parecer difícil. ¡Pero no te preocupes! Hay muchos recursos disponibles para ayudarte a aprender.</p><p>Por ejemplo, la Academia Khan ofrece lecciones y ejercicios de práctica de Matemática y Estadística. Si prefieres libros, "Ciencia de Datos para principiantes" ("Data Science for Beginners", en inglés) de Andrew Park es un recurso excelente que explica principios matemáticos y estadísticos de manera accesible.</p><p>freeCodeCamp está desarrollando un programa de Matemática <a href="https://www.freecodecamp.org/news/freecodecamp-foundational-math-curriculum/">sobre el cual puedes leer aquí ,en inglés</a>.</p><p>Y aquí tienes <a href="https://www.freecodecamp.org/news/statistics-for-data-science/">una guía ,en inglés, sobre los conocimientos de Estadística que necesitas saber </a>para entrar al campo de la ciencia de datos y desarrollarte en disciplinas como Machine Learning.</p><p>La clave es empezar de a poco y gradualmente ir ampliando tus conocimientos. No tengas miedo de hacer preguntas o de buscar ayuda cuando lo necesites. Con un poco de práctica y perseverancia, descubrirás que la Matemática y la Estadística son realmente divertidas (¡de en serio!).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/raw.gif" class="kg-image" alt="raw" width="600" height="400" loading="lazy"></figure><h2 id="paso-4-domina-excel-para-analizar-datos"><strong>Paso 4: &nbsp;Domina Excel para analizar datos</strong></h2><p>Excel es una herramienta esencial dentro del arsenal de un analista de datos. Es prácticamente usado por todas las empresas que existen y dominarlo te ayudará a limpiar, manipular y analizar datos fácilmente.</p><p>Con Excel puedes crear fórmulas y funciones que hagan cálculos, tablas dinámicas y cuadros para visualizar datos, y usar herramientas de análisis de datos para hacer predicciones e identificar patrones. Excel es bastante útil para hacer análisis de regresión, predicciones y análisis de escenarios. </p><p>Si realmente quieres convertirte en un analista de datos, es esencial que domines Excel. Por suerte, hay muchos recursos disponibles en línea, en inglés, para que aprendas: <a href="https://www.youtube.com/@excelisfun">ExcelIsFun</a>, <a href="https://www.youtube.com/playlist?list=PLmejDGrsgFyCZ4YC5s8mgdQztj7zt5to5">Excel Chandoo</a>, <a href="https://www.youtube.com/playlist?list=PLWPirh4EWFpEpO6NjjWLbKSCb-wx3hMql">Tutorials Point,</a> <a href="https://www.youtube.com/@AshutoshKumaryt">Ashutosh Kumar</a> , y <a href="https://www.youtube.com/@MyOnlineTrainingHub">MyOnlineTrainingHub</a> en YouTube.</p><p>También estos cursos, en inglés, te ayudarán a sacarle provecho a Excel.</p><ol><li> <a href="https://www.coursera.org/learn/excel-data-analysis?irclickid=WskXxw2EKxyNRBjSCewfUQQZUkARwUz2LzeJ2A0&amp;irgwc=1&amp;utm_medium=partners&amp;utm_source=impact&amp;utm_campaign=1359419&amp;utm_content=b2c">Introducción al Análisis de Datos usando Excel </a>, por Coursera</li><li> <a href="https://www.freecodecamp.org/news/data-analysis-with-python-for-excel-users-course/">Análisis de Datos con Python para usuarios de Excel</a>, en el canal de YouTube de freeCodeCamp</li><li><a href="https://www.coursera.org/specializations/excel?irclickid=WskXxw2EKxyNRBjSCewfUQQZUkARwUQvLzeJ2A0&amp;irgwc=1&amp;utm_medium=partners&amp;utm_source=impact&amp;utm_campaign=1359419&amp;utm_content=b2c">Desarrollo de habilidades en Excel para especialización en negocios</a> ,por Coursera</li><li><a href="https://www.edx.org/course/analyzing-and-visualizing-data-with-excel-2?irclickid=RrSQ3tWpyxyNTDdSXVVnIRUdUkARwR0WLzeJ2A0&amp;utm_source=affiliate&amp;utm_medium=guru99&amp;utm_campaign=Online%20Tracking%20Link_&amp;utm_content=ONLINE_TRACKING_LINK&amp;irgwc=1">Analizando y mostrando datos con Excel</a> por EdX</li></ol><p>Recuerda, Excel es solo una herramienta dentro de tu caja de herramientas para el análisis de datos. Pero es la más importante y la cual usaras diariamente como analista de datos. Al dominar Excel, estarás más que preparado para realizar cualquier tarea relacionada con datos que llegue a tus manos.</p><p>Pasemos a la siguiente habilidad, que también es la más importante que necesitarás como analista de datos.</p><h2 id="paso-5-domina-sql-para-extracci-n-de-datos"><strong>Paso 5: Domina SQL para extracción de datos</strong></h2><p>SQL (por sus siglas en inglés <em>Structured Query Language) </em>es una herramienta importante en el análisis de datos. Como analista de datos, una de tus principales tareas será la de extraer datos de bases de datos y SQL es el lenguaje que se utiliza para hacerlo.</p><p>SQL es más que hacer queries básicas como <em>SELECT, FROM </em>y<em> WHERE</em>. <br>Es un lenguaje complejo que te permite manipular y transformar datos en numerosas maneras. SQL se usa para juntar datos de varias tables, filtrado y agregado de información, además de para crear nuevas tablas y visualizaciones.</p><p>Para ser un analista de datos eficaz, es esencial que domines SQL. Debes poder escribir queries, crear tablas y entender cómo optimizar el desempeño de tus queries. </p><p>Por suerte, hay muchos recursos disponibles para que aprendas SQL. Algunos de los mejores recursos para empezar son <a href="https://www.khanacademy.org/computing/computer-programming/sql/">Khan Academy SQL</a>, W3Schools, <a href="https://sqlzoo.net/wiki/SQL_Tutorial">SQLZoo</a>, <a href="https://sqlbolt.com/">SQLbolt</a>, <a href="https://www.youtube.com/@LukeBarousse">Luke Barousse</a>, <a href="https://www.youtube.com/@AlexTheAnalyst">Alex the Analyst</a>, <a href="https://www.youtube.com/@TheOyinbooke">Microsoft Power Tools</a> y juegos basados en SQL como SQL Island (<a href="https://sql-island.informatik.uni-kl.de/">en alemán, pero está traducido al inglés</a>) y SQL Murder (<a href="https://mystery.knightlab.com/">en inglés</a>)</p><p>Además, hay muchos cursos en línea, en inglés, y libros disponibles para que puedas aprender SQL en detalle. Aquí tienes algunos para que empieces:</p><ol><li><a href="https://www.freecodecamp.org/news/sql-and-databases-full-course/">Aprende SQL y Bases de Datos- Curso completo para principiantes</a></li><li> <a href="https://www.freecodecamp.org/news/learn-sql-free-relational-database-courses-for-beginners/#relational-database-freecodecamp-curriculum">Plan de Estudios sobre Base de Datos Relacionales de freeCodeCamp</a></li><li><a href="https://www.freecodecamp.org/news/learn-sql-free-relational-database-courses-for-beginners/">Colección de cursos gratuitos sobre base de datos relacionales</a></li></ol><p>Al dominar SQL, podrás obtener conocimientos valiosos de bases de datos y manipular datos de manera que ofrezcan valiosos conocimientos de negocio.</p><h2 id="paso-6-aprende-python-para-an-lisis-de-datos"><strong>Paso 6: Aprende Python para Análisis de Datos</strong></h2><p>Es sabido que hay mucha especulación sobre si es necesario que un analista de datos necesita Python -algunos dicen que si mientras otros dicen que no.</p><p>En mi opinión, me gustaría decir que depende de la empresa en la que trabajes - pero saber Python es una ventaja ya que es uno de los lenguajes de programación más usado en el mundo de la ciencia de datos. Python es conocido por su simplicidad, facilidad para leerse y versatilidad, convirtiéndolo en una elección popular entre los analistas de datos.</p><p>Python tiene <a href="https://www.freecodecamp.org/news/python-data-science-course-matplotlib-pandas-numpy/">una gran cantidad de librerías y herramientas</a> que hacen que el Análisis de Datos sea más fácil, como Panda para manipulación de datos y análisis, NumPy para trabajar con arrays, y Matplotlib para visualización de datos. También permite l<a href="https://www.freecodecamp.org/news/python-automation-scripts/">a automatización de tareas</a>, lo que hace al análisis de datos más eficiente y eficaz.Aprender Python para Análisis de Datos es una gran inversión para tu carrera como analista de datos. No solo te permitirá trabajar con librerías poderosas, sino que también te abrirá muchas más oportunidades para trabajar con grandes conjuntos de datos y análisis más complejos.</p><p>Hay muchos recursos disponibles para que aprendas Python, desde cursos gratuitos hasta programas en línea pagos y libros. Algunos recursos disponibles en inglés son <a href="https://www.youtube.com/@freecodecamp">freeCodeCamp</a>, DataCamp, <a href="https://www.youtube.com/@codebasics">CodeBasis</a>, <a href="https://www.youtube.com/@programmingwithmosh">Programming with Mosh</a> and <a href="https://learn.microsoft.com/?wt.mc_id=studentamb_207021">Microsoft Learn.</a></p><p>Al aprender Python, podrás realizar análisis de datos más complejos, automatizar tareas y trabajar con un mayor rango de conjuntos de datos, convirtiéndote en un recurso valioso dentro de cualquier empresa orientada a datos.</p><h2 id="paso-7-domina-una-herramienta-de-visualizaci-n-de-datos"><strong>Paso 7: Domina una herramienta de visualización de datos</strong></h2><p>Como analista de datos, es esencial que puedas comunicar tus conclusiones de manera clara y concisa. Una forma de hacer esto es a través de la visualización de datos. Herramientas de visualización de datos como <a href="https://www.freecodecamp.org/news/python-in-powerbi/">PowerBI </a>y Tableau pueden ayudarte a crear cuadros interactivos, gráficos y tableros de control para que otros entiendan tus conclusiones de manera fácil. Hablaremos sobre ellas dentro de un momento.</p><p>Aquí tienes <a href="https://www.freecodecamp.org/news/tableau-for-data-science-and-data-visualization-crash-course/">un curso, en inglés, de Tableau para análisis de datos y visualización de datos</a> para darle un vistazo.</p><p>Mientras que SQL es bueno para peticionar y manipular datos, no sirve para mostrar completamente tus datos. Y aquí es donde una herramienta de visualización de datos entra en juego. Estas herramientas permiten transformar tus datos en visualizaciones valiosas y fácil de entender que puedes compartir con aquellos interesados. </p><p>Puedes aprender lo básico de la visualización de datos en detalle con<a href="https://www.freecodecamp.org/news/learn-data-visualization-in-this-free-17-hour-course/"> este curso gratuito y en inglés,</a> disponible en el canal de YouTube de freeCodeCamp.</p><p>PowerBI es una gran elección para visualización de datos ya que es fácil de aprender e integrar con otros productos de Microsoft. Esto la convierte en una herramienta ideal para aquellas empresas que usan Microsoft Office. Tableau también es otra elección popular que tiene una gran comunidad de usuarios y con un gran abanico de opciones.</p><p>Aprender un herramienta de visualización de datos como PowerBI o Tableau te permitirá crear visualizaciones atrapantes que te ayudarán a entender mejor tus datos y comunicar las conclusiones a otros. Hay muchos cursos en línea y tutoriales disponibles que te ayudarán a aprender estas herramientas, como el curso de capacitación oficial de <a href="https://learn.microsoft.com/es-es/training/powerplatform/power-bi">Microsoft PowerBI</a> y los <a href="https://trailheadacademy.salesforce.com/es-mx/classes/TVA101-Tableau-Visual-Analytics">cursos de capacitación de Tableau</a></p><p>Al dominar una herramienta de visualización de datos, podrás aprender a crear visualizaciones atrapante e interactivas que te permitan entender mejor tus datos y comunicar las conclusiones a otros, convirtiéndote en un recurso valioso para cualquier empresa orientada a datos.</p><p>También puedes sumergirte en aprender otras herramientas de visualización de datos como D3.js- <a href="https://www.freecodecamp.org/news/data-visualization-using-d3-course/">Aquí tienes un curso para empezar</a>, en inglés.</p><h2 id="paso-8-conecta-con-otros-analistas-de-datos-y-desarrolladores-"><strong>Paso 8: Conecta con otros Analistas de Datos y Desarrolladores.</strong></h2><p>Relacionarse con otros es una parte esencial de cualquier profesión y el campo del Análisis de Datos no es la excepción. Al conectar con otros analistas de datos y desarrolladores, podrás aprender de sus experiencias, obtener información clave sobre las últimas tecnologías y tendencias dentro de la industria y hasta quizás encontrar oportunidades de trabajo.</p><p>Aquí tienes distintas formas de conectar con otros dentro de este campo:</p><p> 1. Asiste a eventos de la industria: Busca conferencias, encuentros y cualquier otro evento relacionado con el análisis de datos y asiste a ellos. Es una gran forma de conocer a otras personas dentro del campo y aprender sobre nuevos avances y tecnologías.</p><p> 2. Únete a comunidades online: Existen muchas comunidades online para analista de datos y desarrolladores como foros, grupos de LinkedIn y en redes sociales. Únete a ellos y participa en las conversaciones para conectar con otros profesionales.</p><p>3. Habla con otros profesionales: No temas contactar a otros analistas de datos y desarrolladores a través de sus redes sociales, correo electrónico o en persona si los ves en algún evento. Preséntate, pide consejos y construye amistades.</p><p>Recuerda que al conectar con otros, tú también debes estar abierto a ofrecer ayuda o dar consejos. Al crear una red de contactos fuerte dentro del campo del Análisis de Datos, puedes potenciar tus oportunidades laborales, además de estar al día con las últimas tecnologías y tendencias dentro de la industria.</p><h2 id="paso-9-no-te-olvides-de-las-habilidades-blandas"><strong>Paso 9: No te olvides de las "habilidades blandas"</strong></h2><p>Una habilidad final que creo que debes trabajar antes de convertirte en un gran analista de datos son tus habilidades blandas. Esto incluye tus habilidades para comunicarte, resolver problemas, etc.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2023/03/Analyst.jpeg" class="kg-image" alt="Analyst" width="600" height="400" loading="lazy"></figure><p>Una vez que lo hagas, haz proyectos y no dejes de practicar.</p><h2 id="conclusi-n-"><strong>Conclusión.</strong></h2><p>Convertirte en un analista de datos, requiere dedicación, trabajo duro y ser apasionado por el Análisis de Datos. Si sigues los pasos que fui detallando en esta guía, conseguirás el conocimiento y las habilidades necesarias para convertirte en un analista de datos exitoso.</p><p>Desde entender el rol de analista de datos, hasta dominar SQL y Python, pasando por conectar con otros desarrolladores, cada paso es esencial para alcanzar el éxito en este campo.</p><p>Recuerda ser curioso, no dejar de aprender y siempre ser flexible para adaptarse a nuevas tecnologías y metodologías. Con determinación y persistencia, podrás convertirte en un analista de datos competente y desbloquear un mundo de excitantes oportunidades laborales.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Cómo automatizar tareas de Excel con Python ]]>
                </title>
                <description>
                    <![CDATA[ Excel es una herramienta sorprendentemente común para el análisis de datos. Los analistas de datos pueden modificar, examinar y mostrar grandes cantidades de datos con facilidad utilizando Excel, lo que facilita la obtención de perspectivas y la toma de decisiones acertadas. La versatilidad de Excel permite a los usuarios llevar ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/como-automatizar-tareas-de-excel-con-python/</link>
                <guid isPermaLink="false">65f603bffef4be04135ccba4</guid>
                
                    <category>
                        <![CDATA[ Python ]]>
                    </category>
                
                    <category>
                        <![CDATA[ análisis de datos ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Excel ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrés  Torres ]]>
                </dc:creator>
                <pubDate>Fri, 22 Mar 2024 18:00:00 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2024/03/FreecodeCamp-data-analysis.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/automate-excel-tasks-with-python/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Automate Excel Tasks with Python</a>
      </p><p><strong>Excel es una herramienta sorprendentemente común para el análisis de datos.</strong></p><p>Los analistas de datos pueden modificar, examinar y mostrar grandes cantidades de datos con facilidad utilizando Excel, lo que facilita la obtención de perspectivas y la toma de decisiones acertadas.</p><p>La versatilidad de Excel permite a los usuarios llevar a cabo una variedad de actividades de análisis de datos, desde operaciones matemáticas sencillas hasta análisis estadísticos complejos. Además, Excel ofrece automatización mediante el uso de programas de terceros como Python o el lenguaje de programación integrado VBA.</p><p>Excel se utiliza con frecuencia para el análisis de datos en una variedad de industrias, incluyendo la banca, la atención médica y el marketing, gracias a su versatilidad y facilidad de uso.</p><p>Pero como analista de datos, es posible que te encuentres repitiendo tareas mundanas a diario cuando trabajas con Excel.</p><p>Estas tareas pueden incluir copiar y pegar datos, dar formato a celdas y crear gráficos, entre otras. Con el tiempo, esto puede volverse monótono y consumir mucho tiempo, dejándote con menos tiempo para concentrarte en aspectos más importantes del análisis de datos, como identificar tendencias, valores atípicos y perspectivas.</p><p>Por eso, automatizar Excel utilizando Python puede cambiar el juego, ayudándote a optimizar tus flujos de trabajo y liberar tiempo para un análisis más significativo.</p><p>En este tutorial, te mostraré algunas formas útiles de crear, actualizar y analizar hojas de cálculo de Excel utilizando programación en Python. ¡Vamos a sumergirnos! </p><h2 id="-c-mo-fusionar-dos-hojas-de-c-lculo-separadas-con-python"><strong>¿Cómo fusionar dos hojas de cálculo separadas con Python?</strong></h2><p>Los analistas de datos a menudo tienen que trabajar con muchas hojas de cálculo, lo que puede volverse agobiante cuando tienes que fusionar esos archivos juntos.</p><p>El código a continuación te ayuda a fusionar dos archivos separados juntos.</p><pre><code class="language-python">import pandas as pd

# Read in the two Excel files

file1 = pd.read_excel('file1.xlsx')file2 = pd.read_excel('file2.xlsx')

# Merge the two files using the concat() method
merged_file = pd.concat([file1, file2], ignore_index=True)

# Write the merged file to a new Excel file
merged_file.to_excel('merged_file.xlsx', index=False)</code></pre><p>En este código, primero importamos la biblioteca Pandas, que utilizaremos para leer y manipular los archivos de Excel.</p><p>Primero usamos el método <code>read_excel()</code> para leer tanto en <code>file1.xlsx</code> como en <code>file2.xlsx</code>. </p><p>Luego, empleamos el método <code>concat()</code> para unir los dos archivos juntos. El argumento<code>ignore_index=True</code> garantiza que los valores de índice de ambos archivos se reinicien, de modo que no terminemos con valores de índice duplicados en el archivo fusionado.</p><p>Finalmente recurrimos al método <code>to_excel()</code> para escribir el archivo fusionado en un nuevo archivo de Excel llamado <code>merged_file.xlsx</code>. También establecemos <code>index=False</code> para asegurarnos de que la columna de índice no se incluya en el archivo de salida.</p><h2 id="c-mo-importar-y-exportar-datos-con-python">Cómo Importar y Exportar Datos con Python</h2><p>Esta tarea implica el uso de bibliotecas de Python como Pandas para leer archivos de Excel en un objeto DataFrame. Luego puedes manipularlo y analizarlo utilizando Python.</p><p>También puedes exportar datos desde Python de vuelta a un archivo de Excel utilizando las mismas bibliotecas.</p><pre><code class="language-python">import pandas as pd
# Import Excel file

df = pd.read_excel('filename.xlsx', sheet_name='Sheet1')

# Export to Excel file
df.to_excel('new_filename.xlsx', index=False)</code></pre><p>El código dado importa la biblioteca Pandas y lee un archivo de Excel llamado "filename.xlsx" desde la Hoja1 del libro de trabajo, almacenando los datos en un marco de datos de Pandas llamado "df". Luego, el marco de datos se exporta a un nuevo archivo de Excel llamado "new_filename.xlsx" utilizando el método "to_excel". El parámetro "index=False" se utiliza para excluir la indexación de filas en el archivo de salida.</p><p>Esencialmente, el código copia el contenido del archivo de Excel original a un nuevo archivo utilizando Pandas.</p><h2 id="c-mo-limpiar-y-transformar-datos-usando-python">Cómo Limpiar y Transformar Datos usando Python</h2><p>Esta tarea implica el uso de bibliotecas de Python como Pandas para limpiar y transformar datos en Excel.</p><p>Esto puede incluir la eliminación de duplicados, filtrado de datos según criterios específicos y realización de cálculos sobre los datos.</p><pre><code class="language-python">import pandas as pd

# Remove duplicates
df = df.drop_duplicates()

# Filter data
df = df[df['column_name'] &gt; 10]

# Perform calculations
df['new_column'] = df['column1'] + df['column2']</code></pre><p>El fragmento de código anterior realiza tareas de limpieza y manipulación de datos en un marco de datos de Pandas llamado 'df' utilizando la biblioteca Pandas.</p><p>En primer lugar, elimina filas duplicadas de 'df' utilizando el método "drop_duplicates". En segundo lugar, filtra el marco de datos 'df' seleccionando las filas donde el valor en la columna 'column_name' es mayor que 10 y asigna el resultado filtrado a un nuevo marco de datos llamado 'data_df'.</p><p>Por último, se añade una nueva columna llamada 'new_column' a 'df' que contiene la suma de los valores de 'column1' y 'column2'.</p><p>En general, el código limpia y manipula eficazmente los datos eliminando duplicados, filtrando filas específicas y añadiendo una nueva columna calculada al marco de datos original.</p><h2 id="c-mo-realizar-an-lisis-de-datos-con-python">Cómo Realizar Análisis de Datos con Python</h2><p>Este proceso implica utilizar bibliotecas de Python como Pandas y NumPy para llevar a cabo análisis de datos en datos de Excel.</p><p>Esto podría abarcar desde calcular estadísticas resumidas, como la media y la desviación estándar, hasta crear informes personalizados mediante la agrupación de datos según criterios específicos.</p><pre><code class="language-python">import pandas as pd
import numpy as np

# Calculate summary statistics
df.describe()
# Create custom reports
df.pivot_table(values='column_name', index='category_name', columns='date')</code></pre><p>El código utiliza las bibliotecas Pandas y NumPy y realiza tareas de análisis de datos e informes en un marco de datos de Pandas llamado "df".</p><p>En primer lugar, calcula estadísticas resumidas para los datos numéricos en el marco de datos utilizando el método "describe". Este método genera información valiosa sobre la distribución, tendencia central y dispersión de los datos.</p><p>En segundo lugar, el código utiliza el método "pivot_table" para crear informes personalizados a partir del marco de datos. Este método resume y agrega los datos en el dataframe y puede producir tablas en varios formatos.</p><p>En este código, genera un nuevo marco de datos donde los valores de 'column_name' están agrupados por las columnas 'category_name' y 'date'.</p><p>En resumen, el código realiza tareas de análisis estadístico e informes en el marco de datos para obtener información de los datos.</p><h2 id="c-mo-crear-gr-ficos-con-python">Cómo Crear Gráficos con Python</h2><p>Esta tarea implica utilizar bibliotecas de Python como matplotlib o seaborn para crear gráficos y diagramas a partir de datos de Excel.</p><p>Puedes personalizar estos gráficos para mostrar datos específicos y darles formato para cumplir con requisitos particulares.</p><pre><code class="language-python">import pandas as pd
import matplotlib.pyplot as plt
# Create a bar chart
df.plot(kind='bar', x='category_name', y='sales')
plt.show()
# Create a scatter plot
df.plot(kind='scatter', x='column1', y='column2')plt.show()</code></pre><p>El código importa dos bibliotecas, Pandas y matplotlib.pyplot, utilizando los alias 'pd' y 'plt', respectivamente.</p><p>Luego, se utiliza el método "plot" de Pandas para crear dos tipos de gráficos. El primer tipo de gráfico es un gráfico de barras que muestra la relación entre las columnas 'category_name' y 'sales' en el dataframe "df".</p><p>El segundo tipo de gráfico es un gráfico de dispersión que muestra la relación entre las columnas 'column1' y 'column2' en el mismo marco de datos. El código utiliza los parámetros "kind='bar'" para el gráfico de barras y "kind='scatter'" para el gráfico de dispersión para crear los respectivos gráficos.</p><p>Por último, se llama al método "show" para mostrar los gráficos en la pantalla. En resumen, el código utiliza Pandas y matplotlib para crear un gráfico de barras y un gráfico de dispersión para visualizar los datos en el marco de datos "df".</p><h2 id="c-mo-realizar-visualizaci-n-de-datos-en-python">Cómo Realizar Visualización de Datos en Python</h2><p>Esta tarea implica utilizar bibliotecas de Python como Plotly y Bokeh para crear visualizaciones de datos interactivas a partir de datos de Excel.</p><p>Estas visualizaciones permiten a los usuarios explorar los datos de nuevas formas, como mediante el zoom en puntos de datos específicos o el filtrado de datos según criterios específicos.</p><pre><code class="language-python">import pandas as pd
import plotly.express as px
# Create a heatmap
fig = px.imshow(df.corr())
fig.show()
# Create a line chart
fig = px.line(df, x='date', y='sales', color='category')
fig.show()</code></pre><p>El código utiliza las bibliotecas Pandas y plotly.express para crear dos tipos de visualizaciones. Primero, se crea un gráfico de mapa de calor utilizando el método "imshow" de plotly.express que visualiza la correlación entre las columnas en el marco de datos "df".</p><p>En segundo lugar, se crea un gráfico de líneas utilizando el método "line" de plotly.express que muestra la relación entre las columnas 'date' y 'sales' mientras diferencia entre las categorías basadas en la columna 'category' del dataframe. Ambos gráficos se muestran utilizando el método "show".</p><h2 id="c-mo-automatizar-la-generaci-n-de-informes-con-python">Cómo Automatizar la Generación de Informes con Python</h2><p>Esta tarea implica utilizar scripts de Python para automatizar el proceso de generación de informes a partir de datos de Excel.</p><p>Puedes configurar estos scripts para que se ejecuten según un horario regular, como diario o semanal. También pueden actualizarse automáticamente a medida que haya nuevos datos disponibles.</p><pre><code class="language-python">import pandas as pd
# Create daily report
df_daily = df[df['date'] == '2022-01-01']
df_daily.to_excel('daily_report.xlsx', index=False)
# Create weekly report
df_weekly = df.groupby('category').sum()
df_weekly.to_excel('weekly_report.xlsx', index=False)</code></pre><p>El código crea un informe diario mediante la creación de un nuevo marco de datos "df_daily" que incluye solo las filas donde la columna 'date' es igual a '2022-01-01'. Esto se logra utilizando la función de indexación booleana de Pandas.</p><p>Posteriormente, se utiliza el método "to_excel" para exportar los datos filtrados a un archivo de Excel llamado "daily_report.xlsx", sin incluir la columna de índice.</p><p>A continuación, el código crea un informe semanal agrupando el marco de datos "df" por la columna 'category' y sumando los valores de todas las demás columnas. Esto se logra utilizando los métodos "groupby" y "sum" de Pandas.</p><p>El resultado se guarda en un nuevo marco de datos llamado "df_weekly". Por último, se utiliza el método "to_excel" para exportar los datos agregados a un archivo de Excel llamado "weekly_report.xlsx", sin incluir la columna de índice.</p><p>En resumen, el código crea dos informes utilizando la biblioteca Pandas. El primer informe es un informe diario que incluye solo datos de una fecha específica, y el segundo informe es un informe semanal que agrupa los datos por categoría. Ambos informes se exportan a archivos de Excel utilizando el método "to_excel".</p><h2 id="c-mo-automatizar-tareas-repetitivas-con-macros-y-scripts-en-python">Cómo Automatizar Tareas Repetitivas con Macros y Scripts en Python</h2><p>Esta tarea implica utilizar Python para automatizar tareas repetitivas en Excel, como la entrada de datos o el formato. </p><p>Puedes hacer esto creando macros o scripts que se ejecuten automáticamente, o utilizando Python para interactuar directamente con la aplicación de Excel.</p><pre><code class="language-python">import win32com.client as win32
# Open Excel file
excel = win32.gencache.EnsureDispatch('Excel.Application')
workbook = excel.Workbooks.Open(r'filename.xlsx')
# Run macro
excel.Application.Run('macro_name')
# Save and close Excel
 fileworkbook.Save()workbook.Close()excel.Quit()</code></pre><p>El código utiliza el módulo win32com.client para interactuar con Microsoft Excel a través de la API de Windows.</p><p>Primero, se abre una instancia de la aplicación Excel utilizando el método <code>EnsureDispatch()</code>, y el archivo de Excel especificado se abre utilizando el método <code>Workbooks.Open()</code>.</p><p>A continuación, se ejecuta una macro utilizando el método <code>Application.Run()</code>, pasando el nombre de la macro como argumento.</p><p>Finalmente, los cambios realizados en el archivo de Excel se guardan utilizando el método <code>Save()</code>, el libro de trabajo se cierra utilizando el método <code>Close()</code>, y la aplicación de Excel se termina utilizando el método <code>Quit()</code>.</p><p><strong>Cómo Extraer Datos con Python</strong></p><p>Esta tarea implica utilizar bibliotecas de Python como requests y Beautiful Soup para extraer datos de páginas web u otras fuentes e importarlos a Excel.</p><p>Luego, puedes analizar y manipular estos datos utilizando bibliotecas de Python como Pandas.</p><pre><code class="language-python">import pandas as pd
import requests
from bs4 import BeautifulSoup
# Scrape data from web page
url = 'https://www.website.com/data'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table')
df = pd.read_html(str(table))[0]
# Export to Excel file
df.to_excel('scraped_data.xlsx', index=False)</code></pre><p>Este código utiliza la biblioteca requests para enviar una solicitud GET HTTP a la URL '<a href="https://www.example.com">https://www.example.com</a>'. Luego utiliza la biblioteca BeautifulSoup para analizar el contenido HTML de la respuesta en un objeto BeautifulSoup nombrado 'soup'.</p><p>Puedes luego utilizar métodos de BeautifulSoup como <strong><code>find_all()</code></strong> para extraer datos específicos del HTML:</p><p><code>links = []for link in soup.find_all('a'): &nbsp; &nbsp;href = link.get('href') &nbsp; &nbsp;links.append(href)</code></p><p>Este código encuentra todas las etiquetas de anclaje en el HTML y extrae el valor del atributo 'href' para cada una, agregándolos a una lista nombrada 'links'.</p><h2 id="c-mo-utilizar-python-para-integrar-excel-con-otras-aplicaciones">Cómo Utilizar Python para Integrar Excel con Otras Aplicaciones</h2><p>Esta tarea implica utilizar Python para integrar Excel con otras aplicaciones, como bases de datos o servicios web.</p><p>Puedes hacer esto utilizando bibliotecas de Python como pyodbc para conectarte a bases de datos o mediante el uso de APIs para conectarte a servicios web. Esto permite una transferencia y análisis de datos sin problemas entre diferentes aplicaciones.</p><pre><code class="language-python">import pandas as pd
import pyodbc
# Connect to database
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=server_name;DATABASE=db_name;UID=user_id;PWD=password')
# Read data from database
query = 'SELECT * FROM table_name'
df = pd.read_sql(query, cnxn)
# Export to Excel file
df.to_excel('database_data.xlsx', index=False)</code></pre><p>El código establece una conexión a una base de datos SQL Server utilizando el método <code>pyodbc.connect()</code>, donde el controlador, el nombre del servidor, el nombre de la base de datos, el ID de usuario y la contraseña se proporcionan como argumentos.</p><p>Luego, se define y ejecuta una consulta SQL para recuperar datos de una tabla en la base de datos utilizando el método <code>pd.read_sql()</code>, donde la consulta SQL y el objeto de conexión se proporcionan como argumentos. Los datos recuperados se almacenan en un marco de datos de pandas.</p><p>Finalmente, los datos en el Marco de Datos se exportan a un archivo de Excel llamado "database_data.xlsx" utilizando el método <code>to_excel()</code>, excluyendo la columna de índice de la exportación al establecer el parámetro <code>index</code> en <code>False</code>.</p><h2 id="conclusi-n">Conclusión</h2><p>Python es un lenguaje versátil que puedes utilizar para automatizar muchas tareas de Excel. También puedes utilizar diversas bibliotecas como Pandas, openpyxl, xlwings y pyautogui para manipular datos, extraer información, generar informes y automatizar tareas repetitivas.</p><p>La automatización puede ahorrar tiempo y esfuerzo, reducir errores y aumentar la productividad. La competencia en Python puede ser una habilidad valiosa para cualquier profesional que trabaje con Excel, ya sea un analista de datos o financiero. Al aprender Python, puedes llevar tu trabajo a nuevos niveles.</p><p>¡Conéctate en <a href="https://twitter.com/Olujerry19">Twitter </a>y <a href="https://www.linkedin.com/in/jeremiah-oluseye-58457719a/">LinkedIn</a>. ¡Gracias por leer!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Análisis de datos con pandas: Como eliminar una lista de filas de un DataFrame de pandas ]]>
                </title>
                <description>
                    <![CDATA[ Un DataFrame (marco de datos) de pandas es una estructura de datos bidimensional que permite almacenar información en forma de filas y columnas. Es una estructura muy útil para realizar análisis de datos. Dependiendo del modelo o del objetivo de tu estudio, es posible que necesites eliminar un grupo específico ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/eliminar-la-lista-de-filas-del-dataframe-de-pandas/</link>
                <guid isPermaLink="false">6357dcd92b42f608ea5efe9c</guid>
                
                    <category>
                        <![CDATA[ análisis de datos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Felipe Navarro ]]>
                </dc:creator>
                <pubDate>Wed, 30 Nov 2022 18:34:15 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/10/cut_lemons--1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/drop-list-of-rows-from-pandas-dataframe/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Data Analytics with Pandas – How to Drop a List of Rows from a Pandas Dataframe</a>
      </p><p>Un DataFrame <em>(marco de datos)</em> de pandas es una estructura de datos bidimensional que permite almacenar información en forma de filas y columnas. Es una estructura muy útil para realizar análisis de datos.</p><p>Dependiendo del modelo o del objetivo de tu estudio, es posible que necesites eliminar un grupo específico de filas del DataFrame.</p><p>En este tutorial veremos como eliminar una lista de filas de un DataFrame de pandas.</p><h2 id="como-eliminar-una-fila-o-una-columna-de-un-dataframe-de-pandas">Como eliminar una fila o una columna de un DataFrame de pandas</h2><p>Para eliminar una fila o una columna de un DataFrame, necesitas el método <code>drop()</code> del DataFrame. Puedes leer más acerca del método <code>drop()</code> en la &nbsp;<a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html">documentación</a>.</p><p><strong>Ejes del DataFrame</strong></p><ul><li>Las filas se denotan mediante <code>axis=0</code></li><li>Las columnas se denotan mediante <code>axis=1</code></li></ul><p><strong>Etiquetas del DataFrame</strong></p><ul><li>Las filas se etiquetan, por defecto, mediante un índice numérico, comenzando por el 0.</li><li>Las columnas se etiquetan por nombre.</li></ul><p><strong>Parámetros del método drop()</strong></p><ul><li><code>index</code> - la lista de filas a eliminar</li><li><code>axis=0</code> - indica que son filas, y no columnas, lo que hay que eliminar</li><li><code>inplace=True</code> - realiza la operación sobre el mismo DataFrame, en lugar de crear y devolver uno nuevo.</li></ul><h3 id="dataframe-de-muestra">DataFrame de muestra</h3><p>Nuestro DataFrame de muestra contiene las columnas, <em>nombre_producto</em>, <em>precio_unitario, num_de_unidades, cantidad_disponible</em> y d<em>isponible_desde_fecha</em>. El valor NaN se usa para denotar valores nulos.</p><pre><code class="language-python">import pandas as pd

data = {"nombre_producto":["Teclado","Raton", "Monitor", "CPU","CPU", "Altavoces",pd.NaT],
        "precio_unitario":[500, 200, 5000.235, 10000.550, 10000.550, 250.50,None],
        "num_de_unidades":[5, 5, 10, 20, 20, 8, pd.NaT],
        "cantidad disponible":[5, 6, 10, "no disponible", "no disponible", pd.NaT, pd.NaT],
        "disponible_desde_fecha":['5/11/2021', '23/4/2021', '21/08/2021', '18/09/2021', '18/09/2021', '05/01/2021', pd.NaT]
       }

df = pd.DataFrame(data)

df
</code></pre><p>El DataFrame tendrá el siguiente aspecto:</p><!--kg-card-begin: html--><table class="dataframe" border="1">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>nombre_producto</th>
      <th>precio_unitario</th>
      <th>num_de_unidades</th>
      <th>cantidad_disponible</th>
      <th>disponible_desde_fecha</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>Teclado</td>
      <td>500.000</td>
      <td>5</td>
      <td>5</td>
      <td>5/11/2021</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Raton</td>
      <td>200.000</td>
      <td>5</td>
      <td>6</td>
      <td>23/4/2021</td>
    </tr>
    <tr>
      <th>2</th>
      <td>Monitor</td>
      <td>5000.235</td>
      <td>10</td>
      <td>10</td>
      <td>21/08/2021</td>
    </tr>
    <tr>
      <th>3</th>
      <td>CPU</td>
      <td>10000.550</td>
      <td>20</td>
      <td>no disponible</td>
      <td>18/09/2021</td>
    </tr>
    <tr>
      <th>4</th>
      <td>CPU</td>
      <td>10000.550</td>
      <td>20</td>
      <td>no disponible</td>
      <td>18/09/2021</td>
    </tr>
    <tr>
      <th>5</th>
      <td>Altavoces</td>
      <td>250.500</td>
      <td>8</td>
      <td>NaT</td>
      <td>05/01/2021</td>
    </tr>
    <tr>
      <th>6</th>
      <td>NaT</td>
      <td>NaN</td>
      <td>NaT</td>
      <td>NaT</td>
      <td>NaT</td>
    </tr>
  </tbody>
</table><!--kg-card-end: html--><p>Después de cada operación de eliminación, imprimiremos el DataFrame médiate <code>df</code> con el formato de tabla de <code>HTML</code>.</p><p>A continuación veremos distintas formas de seleccionar las filas a eliminar.</p><h2 id="como-eliminar-una-lista-de-filas-mediante-ndice">Como eliminar una lista de filas mediante índice</h2><p>Se puede eliminar una serie de filas pasándole al método<code>drop()</code> una lista con los índices.</p><pre><code class="language-python">df.drop([5,6], axis=0, inplace=True)

df
</code></pre><p>En este fragmento,</p><ul><li><code>[5,6]</code> son los índices de las filas a eliminar.</li><li><code>axis=0</code> denota que son filas lo que hay que eliminar</li><li><code>inplace=True</code> realiza la operación sobre el mismo DataFrame</li></ul><p>Tras eliminar las filas con índices 5 y 6, los datos en el DataFrame serán:</p><!--kg-card-begin: html--><table class="dataframe" border="1">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>nombre_producto</th>
      <th>precio_unitario</th>
      <th>num_de_unidades</th>
      <th>cantidad_disponible</th>
      <th>disponible_desde_fecha</th>
    </tr>
  </thead>
  <tbody>
     <tr>
      <th>0</th>
      <td>Teclado</td>
      <td>500.000</td>
      <td>5</td>
      <td>5</td>
      <td>5/11/2021</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Raton</td>
      <td>200.000</td>
      <td>5</td>
      <td>6</td>
      <td>23/4/2021</td>
    </tr>
    <tr>
      <th>2</th>
      <td>Monitor</td>
      <td>5000.235</td>
      <td>10</td>
      <td>10</td>
      <td>21/08/2021</td>
    </tr>
    <tr>
      <th>3</th>
      <td>CPU</td>
      <td>10000.550</td>
      <td>20</td>
      <td>no disponible</td>
      <td>18/09/2021</td>
    </tr>
    <tr>
      <th>4</th>
      <td>CPU</td>
      <td>10000.550</td>
      <td>20</td>
      <td>no disponible</td>
      <td>18/09/2021</td>
    </tr>
  </tbody>
</table><!--kg-card-end: html--><h2 id="como-eliminar-filas-mediante-un-intervalo-de-ndices">Como eliminar filas mediante un intervalo de índices</h2><p>También se puede eliminar una serie de filas en un intervalo específico.</p><p>Esto puede ser útil para crear una muestra de nuestro conjunto de datos excluyendo intervalos específicos de datos.</p><p>Se puede crear un intervalo de filas en un DataFrame mediante el método <code>df.index()</code>, pasándolo luego al método <code>drop()</code> para eliminar esas filas, como se muestra a continuación:</p><pre><code class="language-python">df.drop(df.index[2:4], inplace=True)

df
</code></pre><p>Qué está haciendo este código:</p><ul><li><code>df.index[2:4]</code> genera un intervalo de filas desde la 2ª hasta la 3ª. El límite inferior es inclusivo, mientras que el superior es exclusivo. Es decir, que serán eliminadas las filas 2 y 3, mientras que la 4ª <em>no </em>será eliminada.</li><li><code>inplace=True</code> realiza la operación de eliminación sobre el mismo DataFrame.</li></ul><p>Después de eliminar filas en el intervalo 2-4, el DataFrame queda de la siguiente manera:</p><!--kg-card-begin: html--><table class="dataframe" border="1">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>nombre_producto</th>
      <th>precio_unitario</th>
      <th>num_de_unidades</th>
      <th>cantidad_disponible</th>
      <th>disponible_desde_fecha</th>
    </tr>
  </thead>
  <tbody>
     <tr>
      <th>0</th>
      <td>Teclado</td>
      <td>500.00</td>
      <td>5</td>
      <td>5</td>
      <td>5/11/2021</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Raton</td>
      <td>200.00</td>
      <td>5</td>
      <td>6</td>
      <td>23/4/2021</td>
    </tr>
    <tr>
      <th>4</th>
      <td>CPU</td>
      <td>10000.55</td>
      <td>20</td>
      <td>no disponible</td>
      <td>18/09/2021</td>
    </tr>
  </tbody>
</table><!--kg-card-end: html--><h2 id="como-eliminar-todas-las-filas-despu-s-de-un-ndice">Como eliminar todas las filas después de un índice</h2><p>Es posible eliminar todas las filas posteriores a un índice determinado mediante <code>iloc[]</code>.</p><p>Con el método <code>iloc[]</code> se seleccionan las filas mediante índices, especificando las posiciones inicial y final separadas por <code>:</code>. Por ejemplo, ya hemos usado <code>2:4</code> para seleccionar las filas 2 y 3. Si las queremos seleccionar todas, simplemente pasamos <code>:</code> a <code>iloc[]</code>.</p><p>Esto resulta útil en los casos en los que se quiera dividir el conjunto de datos con propósitos de prueba.</p><p>El siguiente fragmento selecciona las filas con índices 0 y 1 y lo asigna a la misma variable. El resultado final es la eliminación de todas las filas a partir del índice 2.</p><pre><code class="language-python">df = df.iloc[:2]

df
</code></pre><p>Con <code>:2</code> se seleccionan las filas hasta el índice 2 (exclusivo).</p><p>Después de esta operación, nuestro DataFrame tendrá el siguiente aspecto:</p><!--kg-card-begin: html--><table class="dataframe" border="1">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>nombre_producto</th>
      <th>precio_unitario</th>
      <th>num_de_unidades</th>
      <th>cantidad_disponible</th>
      <th>disponible_desde_fecha</th>
    </tr>
  </thead>
  <tbody>
     <tr>
      <th>0</th>
      <td>Teclado</td>
      <td>500.0</td>
      <td>5</td>
      <td>5</td>
      <td>5/11/2021</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Raton</td>
      <td>200.0</td>
      <td>5</td>
      <td>6</td>
      <td>23/4/2021</td>
    </tr>
  </tbody>
</table><!--kg-card-end: html--><h2 id="com-eliminar-filas-usando-m-ltiples-condiciones">Com eliminar filas usando múltiples condiciones</h2><p>En lugar de especificar unas filas concretas mediante índices, es posible seleccionar las filas que cumplan unas determinadas condiciones.</p><p>Por ejemplo, podrías eliminar filas cuyo valor en alguna de las columnas fuera mayor que <em>X</em> y menor que <em>Y</em>.</p><p>Esto puede ser útil en el caso de que quieras crear un conjunto de datos que ignore unos valores específicos en ciertas columnas.</p><p>Para eliminar filas condicionalmente, selecciona los índices de las filas que cumplan la condición, pasándolos luego al método <code>drop()</code>.</p><pre><code class="language-python">df.drop(df[(df['precio_unitario'] &gt;400) &amp; (df['precio_unitario'] &lt; 600)].index, inplace=True)

df
</code></pre><p>En el código anterior,</p><ul><li><code>(df['Unit_Price'] &gt;400) &amp; (df['Unit_Price'] &lt; 600)</code> es la condición para eliminar las filas.</li><li><code>df[].index</code> selecciona los índices de las filas que cumplen la condición.</li><li><code>inplace=True</code> realiza la operación de eliminado sobre el mismo DataFrame, en lugar de crear y devolver uno nuevo.</li></ul><p>Después de eliminar las filas que cumplen la condición de tener <code>precio_unitario</code> mayor que 400 y menor que 600, nuestro DataFrame quedará con los siguientes datos:</p><!--kg-card-begin: html--><table class="dataframe" border="1">
   <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>nombre_producto</th>
      <th>precio_unitario</th>
      <th>num_de_unidades</th>
      <th>cantidad_disponible</th>
      <th>disponible_desde_fecha</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>1</th>
      <td>Raton</td>
      <td>200.0</td>
      <td>5</td>
      <td>6</td>
      <td>23/4/2021</td>
    </tr>
  </tbody>
</table><!--kg-card-end: html--><h2 id="conclusi-n">Conclusión</h2><p>En resumen, en este artículo nos hemos familiarizado con el método <code>drop()</code> de los DataFrame de pandas. También hemos visto como se etiquetan las filas y columnas de los DataFrame. Y finalmente hemos aprendido a eliminar filas mediante índices, un intervalo de índices y basándose en condiciones.</p><p>Si te ha gustado este artículo, no dudes en compartirlo.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Tutorial: ¿Qué es el Análisis de Datos? Cómo visualizar datos con Python, Numpy, Pandas, Matplotlib y Seaborn ]]>
                </title>
                <description>
                    <![CDATA[ El análisis de datos es el proceso de explorar, investigar y recopilar información de los datos utilizando medidas y visualizaciones estadísticas. El objetivo del análisis de datos es desarrollar una comprensión de los datos al descubrir tendencias, relaciones y patrones. El análisis de datos es tanto una ciencia como un ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/tutorial-que-es-analisis-de-datos-como-visualizar-datos-con-python-numpy-pandas-matplotlib-y-seaborn/</link>
                <guid isPermaLink="false">62760d99519d4008c3f7426f</guid>
                
                    <category>
                        <![CDATA[ análisis de datos ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Andrés  Torres ]]>
                </dc:creator>
                <pubDate>Sun, 17 Jul 2022 19:13:56 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/05/data-analysis.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/exploratory-data-analysis-with-numpy-pandas-matplotlib-seaborn/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">What is Data Analysis? How to Visualize Data with Python, Numpy, Pandas, Matplotlib &amp; Seaborn Tutorial</a>
      </p><p>El análisis de datos es el proceso de explorar, investigar y recopilar información de los datos utilizando medidas y visualizaciones estadísticas.</p><p>El objetivo del análisis de datos es desarrollar una comprensión de los datos al descubrir tendencias, relaciones y patrones. El análisis de datos es tanto una ciencia como un arte. Por un lado, requiere el conocimiento de estadística, técnicas de visualización y paquetes de Python como Numpy, Pandas y Seaborn. </p><p>Por otro lado, requiere que hagas preguntas interesantes para guiar la investigación y luego interpretes los números y cifras para generar ideas útiles. En este tutorial sobre análisis de datos se cubren los siguientes temas:</p><p>1.¿Qué es el cálculo numérico? Python y Numpy para principiantes &nbsp; &nbsp; </p><p>2. Cómo analizar datos tabulares usando Python y Pandas &nbsp; &nbsp; </p><p>3. Visualización de datos usando Python, Matplotlib y Seaborn</p><h2 id="-qu-es-el-c-lculo-num-rico-python-y-numpy-para-principiantes">¿Qué es el cálculo numérico? Python y Numpy para principiantes</h2><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/05/image-7.png" class="kg-image" alt="image-7" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/05/image-7.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/05/image-7.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2022/05/image-7.png 1385w" sizes="(min-width: 720px) 720px" width="1385" height="480" loading="lazy"><figcaption>Fuente: <a href="https://github.com/elegant-scipy/elegant-scipy/blob/master/figures/NumPy_ndarrays_v2.png">Elegant Scipy</a></figcaption></figure><p>Puedes seguir el tutorial y ejecutar el código aquí: <a href="https://jovian.ai/aakashns/python-numerical-computing-with-numpy">https://jovian.ai/aakashns/python-numerical-computing-with-numpy </a></p><p>Esta sección cubre los siguientes temas: &nbsp;</p><ol><li>Cómo trabajar con datos numéricos en Python &nbsp; &nbsp; </li></ol><p>2. Cómo convertir listas de Python en arreglos Numpy &nbsp; &nbsp; </p><p>3. Arreglos Numpy multidimensionales y sus beneficios &nbsp; &nbsp; </p><p>4. Operaciones con arreglos; transmisión, indexación y división &nbsp; &nbsp;</p><p>5. Cómo trabajar con archivos de datos CSV usando Numpy</p><h3 id="c-mo-trabajar-con-datos-num-ricos-en-python">Cómo trabajar con datos numéricos en Python</h3><p>Los "datos" en el análisis de datos, generalmente se refieren a datos numéricos; como precios de acciones, cifras de ventas, mediciones de sensores, puntajes deportivos, tablas de bases de datos, etc. </p><p>La biblioteca Numpy proporciona estructuras de datos especializadas, funciones y otras herramientas para la computación numérica en Python. Analicemos un ejemplo para ver por qué y cómo usar Numpy para trabajar con datos numéricos. </p><p>Supongamos que queremos usar datos climáticos como la temperatura, la lluvia y la humedad para determinar si una región es adecuada para el cultivo de manzanas. </p><p>Un enfoque simple para hacer esto sería formular la relación entre el rendimiento anual de manzanas (toneladas por hectárea) y las condiciones climáticas como la temperatura promedio (en grados Fahrenheit), la lluvia (en milímetros) y la humedad relativa promedio (en porcentaje) como una ecuación lineal.</p><p><code>Rendimiento_manzanas = w1 * temperatura + w2 * lluvia + w3 * humedad</code></p><p>Estamos expresando el rendimiento de las manzanas como una suma ponderada de la temperatura, la lluvia y la humedad. Esta ecuación es una aproximación, ya que la relación real puede no ser necesariamente lineal y puede haber otros factores involucrados. </p><p>Pero un modelo lineal simple como este suele funcionar bien en la práctica. Con base en algunos análisis estadísticos de datos históricos, podríamos encontrar valores razonables para los <strong>pesos w1, w2 y w3</strong>. He aquí un ejemplo de conjunto de valores:</p><pre><code class="language-python">w1, w2, w3 = 0.3, 0.2, 0.5</code></pre><p>Dados algunos datos climáticos para una región, ahora podemos predecir el rendimiento de las manzanas. Aquí hay algunos datos de muestra:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/image.png" class="kg-image" alt="image" width="579" height="228" loading="lazy"></figure><p>Para comenzar, podemos definir algunas variables para registrar los datos climáticos de la región de Kanto.</p><pre><code class="language-python">kanto_temperatura = 73
kanto_lluvia = 67
kanto_humedad = 43</code></pre><p>Ahora podemos sustituir los valores de estas variables en la ecuación para obtener el rendimiento de las manzanas:</p><pre><code class="language-python">kanto_yield_apples = kanto_temp * w1 + kanto_rainfall * w2 + kanto_humidity * w3
kanto_yield_apples
print("The expected yield of apples in Kanto region is {} tons per hectare.".format(kanto_yield_apples))</code></pre><p>Para que sea un poco más fácil realizar el cálculo anterior para varias regiones, podemos representar los datos climáticos de cada región como un vector, es decir, una lista de números.</p><pre><code class="language-python">kanto = [73, 67, 43]
johto = [91, 88, 64]
hoenn = [87, 134, 58]
sinnoh = [102, 43, 37]
unova = [69, 96, 70]</code></pre><p>Los tres números en cada vector representan los datos de temperatura, lluvia y humedad, respectivamente. También podemos representar el conjunto de pesos utilizados en la fórmula como un vector. </p><pre><code class="language-python">pesos=[w1,w2,w3]</code></pre><p>Ahora podemos escribir una función crop_yield para calcular el rendimiento de las manzanas (o cualquier otro cultivo) dados los datos climáticos y los respectivos pesos.</p><pre><code class="language-python">def crop_yield(region, weights):
    result = 0
    for x, w in zip(region, weights):
        result += x * w
    return result
    
crop_yield(kanto, weights)
*# 56.8

crop_yield(johto, weights)
*# 76.9

crop_yield(unova, weights)
*# 74.9</code></pre><h2 id="c-mo-convertir-listas-de-python-en-arreglos-numpy">Cómo convertir listas de Python en arreglos Numpy</h2><p>El cálculo realizado en la variable crop_yield, implica la multiplicación por elementos de dos vectores y la suma de los resultados. A este proceso matemático se le denomina producto escalar. Puedes obtener mayor información sobre los productos punto <a href="https://www.khanacademy.org/math/linear-algebra/vectors-and-spaces/dot-cross-products/v/vector-dot-product-and-vector-length">aquí</a>.</p><p>La biblioteca Numpy proporciona una función integrada para calcular el producto escalar de dos vectores. Sin embargo, primero debemos convertir las listas en arreglos Numpy.</p><p>Instalemos la biblioteca Numpy usando el administrador de paquetes pip.</p><pre><code class="language-terminal">!pip install numpy --upgrade --quiet</code></pre><p>Ahora, importemos el módulo numpy. Es una práctica común importar numpy con el alias np.</p><pre><code class="language-py">import numpy as np</code></pre><p>Ahora podemos usar la función <code>np.array</code> para crear arreglos en Numpy.</p><pre><code class="language-py">kanto = np.array([73, 67, 43])

kanto
# array([73, 67, 43])

weights = np.array([w1, w2, w3])

weights
# array([0.3, 0.2, 0.5])</code></pre><p>Los arreglos de Numpy poseen la clase <code>ndarray</code>.<br></p><pre><code class="language-py">type(kanto)
# numpy.ndarray

type(weights)
# numpy.ndarray</code></pre><p>Al igual que las listas, los arrelgos Numpy admiten la notación de indexación [].</p><pre><code class="language-py">weights[0]
# 0.3

kanto[2]
#43</code></pre><p><strong>Operaciones con Arreglos de Numpy</strong></p><p>Ahora podemos calcular el producto de dos vectores usando la función <code>np.dot</code>.</p><pre><code class="language-py">np.dot(kanto, weights)
# 56.8</code></pre><p>El operador * realiza una multiplicación por elementos de dos arreglos si tienen el mismo tamaño. El método sum calcula la suma de números en una matriz.</p><pre><code class="language-py">arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

arr1 * arr2
# array([ 4, 10, 18])

arr2.sum()
# 15</code></pre><h2 id="los-beneficios-de-usar-arreglos-en-numpy">Los beneficios de usar arreglos en Numpy</h2><p>Los arreglos en Numpy ofrecen los siguientes beneficios sobre las listas simples de Python. Esto sobre todo en cuanto a operaciones con datos numéricos: </p><ul><li><strong>Son fáciles de usar</strong>: Puedes escribir operaciones matemáticas, simples, concisas e intuitivas, como la sumatoria del producto de dos variables<code>(kanto * weights).sum()</code> en lugar de usar un complejo bucle con la variable <code>crop_yield</code>.</li><li><strong>Rendimiento</strong>: <strong>Las operaciones y funciones de Numpy son implementadas internamente en C++,</strong> &nbsp;lo que las vuelve mucho más rápidas que las declaraciones en Python, y por supuesto, que el tiempo de ejecución de sus bucles.</li></ul><p>He aquí una comparación del producto de vectores, realizado en un bucle de Python, vs la ejecución en un arreglo de Numpy. Lo interesante de este experimento, es que, cada vector posee un millón de elementos. Muestra más que suficiente para comparar la velocidad entre las dos operaciones. </p><pre><code class="language-py"># Python lists
arr1 = list(range(1000000))
arr2 = list(range(1000000, 2000000))

# Numpy arrays
arr1_np = np.array(arr1)
arr2_np = np.array(arr2)

%%time
result = 0
for x1, x2 in zip(arr1, arr2):
    result += x1*x2
result

# CPU times: user 300 ms, sys: 3.26 ms, total: 303 ms
# Wall time: 302 ms
# 833332333333500000

%%time
np.dot(arr1_np, arr2_np)

# CPU times: user 2.11 ms, sys: 951 µs, total: 3.07 ms
# Wall time: 1.58 ms
# 833332333333500000</code></pre><p>Como puedes ver; al usar <code>np.dot</code> obtenemos una velocidad 100 veces mayor a emplear el bucle <code>for</code> . Esto hace a Numpy muy útil cuando se trabaja con bases de datos de gran tamaño; es decir, de miles o incluso millones de unidades de datos. </p><h3 id="arreglos-multidimensionales-con-numpy">Arreglos multidimensionales con Numpy</h3><p>Ahora podemos ir un paso más allá y representar los datos climáticos de todas las regiones utilizando una sola matriz Numpy bidimensional.</p><pre><code class="language-py">climate_data = np.array([[73, 67, 43],
                         [91, 88, 64],
                         [87, 134, 58],
                         [102, 43, 37],
                         [69, 96, 70]])
                         
climate_data
# array([[ 73,  67,  43],
#        [ 91,  88,  64],
#        [ 87, 134,  58],
#        [102,  43,  37],
#        [ 69,  96,  70]])</code></pre><p>Si tienes alguna familiaridad con el álgebra lineal, puedes comprobar el proceso reconociendo la matriz bidimensional anterior como una matriz con cinco filas y tres columnas. Cada fila representa una región y las columnas representan temperatura, lluvia y humedad, respectivamente.</p><p>Las arreglos Numpy pueden tener cualquier número de dimensiones y diferentes longitudes a lo largo de cada dimensión. Podemos inspeccionar la longitud a lo largo de cada dimensión. Para esto usamos la propiedad <code>.shape</code> de un arreglo.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/arrays.png" class="kg-image" alt="arrays" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/06/arrays.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/06/arrays.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/2022/06/arrays.png 1440w" sizes="(min-width: 720px) 720px" width="1440" height="805" loading="lazy"><figcaption>Fuente: <a href="https://github.com/elegant-scipy/elegant-scipy/blob/master/figures/NumPy_ndarrays_v2.png">Elegant Scipy</a></figcaption></figure><pre><code class="language-py"># 2D array (matrix)
climate_data.shape
# (5, 3)

weights
# array([0.3, 0.2, 0.5])

# 1D array (vector)
weights.shape
# (3,)

# 3D array 
arr3 = np.array([
    [[11, 12, 13], 
     [13, 14, 15]], 
    [[15, 16, 17], 
     [17, 18, 19.5]]])

arr3.shape
# (2, 2, 3)</code></pre><p>Todos los elementos en un arreglo de Numpy poseen el mismo tipo de datos. Puedes verificar el tipo de datos, usando la propiedad <code>.dtype</code>.</p><pre><code class="language-py">weights.dtype
# dtype('float64')

climate_data.dtype
# dtype('int64')</code></pre><p>Si una matriz contiene incluso un solo número en formato flotante (<em>float</em>), todos los demás elementos también se convierten en flotantes.</p><pre><code class="language-py">arr3.dtype
# dtype('float64')</code></pre><p>Ahora podemos calcular una predicción con las manzanas en todas las regiones. Esto mediante una simple multiplicación matricial entre <code>climate_data</code> (una matriz 5x3) y <code>weights</code> (un vector de 3 elementos). Observemos este proceso de una forma visual:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/matriz.png" class="kg-image" alt="matriz" width="578" height="334" loading="lazy"></figure><p>Puede aprender sobre arreglos y multiplicación de arreglos mirando los primeros 3 o 4 videos de esta <a href="https://www.youtube.com/watch?v=xyAuNHPsq-g&amp;list=PLFD0EB975BA0CC1E0&amp;index=1">lista de reproducción de YouTube.</a> </p><p>Para efectuar la operación en Numpy, simplemente empleamos la función <code>np.matmul</code> . También puede usarse el operador <code>@</code> para realizar la multiplicación de arreglos.</p><pre><code class="language-py">np.matmul(climate_data, weights)
# array([56.8, 76.9, 81.9, 57.7, 74.9])

climate_data @ weights
# array([56.8, 76.9, 81.9, 57.7, 74.9])</code></pre><h3 id="c-mo-trabajar-con-archivos-csv">Cómo trabajar con archivos CSV</h3><p>Numpy también nos provee de funciones auxiliares para a lectura de archivos de texto. En este ejemplo, descarguemos un archivo <code>climate.txt</code>, el cual contiene 10,000 mediciones del clima con tres variables (temperatura, lluvia y humedad) en el siguiente formato:</p><pre><code>temperature,rainfall,humidity
25.00,76.00,99.00
39.00,65.00,70.00
59.00,45.00,77.00
84.00,63.00,38.00
66.00,50.00,52.00
41.00,94.00,77.00
91.00,57.00,96.00
49.00,96.00,99.00
67.00,20.00,28.00
...</code></pre><p>Este formato de almacenamiento de datos se conoce como valores separados por comas o CSV.</p><blockquote><em>CSV: un archivo de valores separados por comas (CSV) es un archivo de texto delimitado que utiliza una coma para separar los valores. Cada línea del archivo es un registro de datos. Cada registro consta de uno o más campos, separados por comas. Un archivo CSV generalmente almacena datos tabulares (números y texto) en texto sin formato, en cuyo caso cada línea tendrá la misma cantidad de campos. (Wikipedia)</em></blockquote><p>Para leer este archivo en un arreglo de Numpy, podemos usar la función <code>genfromtxt</code> .</p><pre><code class="language-py">import urllib.request

urllib.request.urlretrieve(
    'https://hub.jovian.ml/wp-content/uploads/2020/08/climate.csv', 
    'climate.txt')
    
climate_data = np.genfromtxt('climate.txt', delimiter=',', skip_header=1)

climate_data
# array([[25., 76., 99.],
#        [39., 65., 70.],
#        [59., 45., 77.],
#        ...,
#        [99., 62., 58.],
#        [70., 71., 91.],
#        [92., 39., 76.]])

climate_data.shape
# (10000, 3)</code></pre><p>Ahora podemos realizar una multiplicación de arreglos usando el operador @ para predecir el rendimiento de las manzanas para todo el conjunto de datos usando un conjunto de pesos asignados a las variables.</p><pre><code class="language-py">weights = np.array([0.3, 0.2, 0.5])

yields = climate_data @ weights
yields
# array([72.2, 59.7, 65.2, ..., 71.1, 80.7, 73.4])

yields.shape
# (10000,)</code></pre><p>Añadamos <code>yields</code> a <code>climate_data</code> como una cuarta columna (después de las 3 columnas de temperatura, lluvia y humedad) usando la función <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fnumpy.org%2Fdoc%2Fstable%2Freference%2Fgenerated%2Fnumpy.concatenate.html" rel="noopener noreferrer"><code>np.concatenate</code></a> .</p><pre><code class="language-py">climate_results = np.concatenate((climate_data, yields.reshape(10000, 1)), axis=1)

climate_results
# array([[25. , 76. , 99. , 72.2],
#        [39. , 65. , 70. , 59.7],
#        [59. , 45. , 77. , 65.2],
#        ...,
#        [99. , 62. , 58. , 71.1],
#        [70. , 71. , 91. , 80.7],
#        [92. , 39. , 76. , 73.4]])</code></pre><p>Aquí se presentan un par de sutilezas:</p><ul><li>Ya que deseamos añadir una nueva columna, usamos el argumento <code>axis=1</code> para <code>np.concatenate</code>. El argumento <code>axis</code> especifica la <em>dimensión</em> de la concatenación.</li><li>Los arreglos deben tener el mismo número de dimensiones, a la vez que la misma extensión. La única excepción es la dimensión empleada para la concatenación. Usamos la función <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fnumpy.org%2Fdoc%2Fstable%2Freference%2Fgenerated%2Fnumpy.reshape.html" rel="noopener noreferrer"><code>np.reshape</code></a> para cambiar la forma de <code>yields</code> de <code>(10000,)</code> a <code>(10000,1)</code>.</li></ul><p>He aquí una explicación visual de la forma en que funciona <code>np.concatenate</code> junto con <code>axis=1</code> (A propósito: ¿Puedes adivinar que resultado traería <code>axis=0</code>?):</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/python-numpy-image-exercise-58.png" class="kg-image" alt="python-numpy-image-exercise-58" width="576" height="536" loading="lazy"></figure><p>La mejor manera de comprender lo que hace una función Numpy es experimentar con ella y leer la documentación para conocer sus argumentos y valores devueltos. Usa las celdas de arriba para experimentar con <code>np.concatenate</code> y <code>np.reshape</code>.</p><p>Escribamos los resultados finales de nuestro calco realizado &nbsp;usando la función <code>np.savetxt</code>.</p><pre><code class="language-py">np.savetxt('climate_results.txt', 
           climate_results, 
           fmt='%.2f', 
           delimiter=',',
           header='temperature,rainfall,humidity,yeild_apples', 
           comments='')</code></pre><p>Los resultados están escritos de vuelta en el formato CSV en la fila <code>climate_results.txt</code>.</p><pre><code>temperature,rainfall,humidity,yeild_apples
25.00,76.00,99.00,72.20
39.00,65.00,70.00,59.70
59.00,45.00,77.00,65.20
84.00,63.00,38.00,56.80
...</code></pre><p>Numpy provee cientos de funciones para ejecutar operaciones en arreglos, he aquí algunas de las funciones más utilizadas:</p><ul><li>Matemáticas: <code>np.sum</code>, <code>np.exp</code>, <code>np.round</code>, operadores aritméticos.</li><li>Manipulación de Arreglos: <code>np.reshape</code>, <code>np.stack</code>, <code>np.concatenate</code>, <code>np.split</code></li><li>Álgebra Lineal: <code>np.matmul</code>, <code>np.dot</code>, <code>np.transpose</code>, <code>np.eigvals</code></li><li>Estadística: <code>np.mean</code>, <code>np.median</code>, <code>np.std</code>, <code>np.max</code></li></ul><p>Entonces, ¿cómo encuentras la función que necesitas? La forma más fácil de encontrar la función correcta para una operación o caso de uso específico es realizar una búsqueda en la web. Por ejemplo, la búsqueda de "Cómo unir arreglos numpy" lleva a este <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fcmdlinetips.com%2F2018%2F04%2Fhow-to-concatenate-arrays-in-numpy%2F" rel="noopener noreferrer"> tutorial de concatenation</a>.</p><p>También puedes encontrar una lista completa de arreglos en la <a href="https://numpy.org/doc/stable/reference/routines.html">documentación de Numpy</a>.</p><h3 id="operaciones-aritm-ticas-num-ricas-transmisi-n-y-comparaci-n">Operaciones aritméticas numéricas, transmisión y comparación<br></h3><p>Los arreglos en Numpy soportan operadores aritméticos como &nbsp;<code>+</code>, <code>-</code>, <code>*</code>, etc. Lo mejor de todos es que puedes realizar una operación con un simple número (también llamado escalar) o con otro arreglo del mismo tipo.</p><p>Estos operadores facilitan la escritura de expresiones matemáticas con arrglos multidimensionales.</p><pre><code class="language-py">arr2 = np.array([[1, 2, 3, 4], 
                 [5, 6, 7, 8], 
                 [9, 1, 2, 3]])
                 
arr3 = np.array([[11, 12, 13, 14], 
                 [15, 16, 17, 18], 
                 [19, 11, 12, 13]])
                 
# Adding a scalar
arr2 + 3

# array([[ 4,  5,  6,  7],
#        [ 8,  9, 10, 11],
#        [12,  4,  5,  6]])

# Element-wise subtraction
arr3 - arr2

# array([[10, 10, 10, 10],
#        [10, 10, 10, 10],
#        [10, 10, 10, 10]])

# Division by scalar
arr2 / 2

# array([[0.5, 1. , 1.5, 2. ],
#        [2.5, 3. , 3.5, 4. ],
#        [4.5, 0.5, 1. , 1.5]])

# Element-wise multiplication
arr2 * arr3

# array([[ 11,  24,  39,  56],
#        [ 75,  96, 119, 144],
#        [171,  11,  24,  39]])

# Modulus with scalar
arr2 % 4

# array([[1, 2, 3, 0],
#        [1, 2, 3, 0],
#        [1, 1, 2, 3]])</code></pre><p><strong>Broadcasting en un array de Numpy</strong></p><p>Las arreglos Numpy también admiten una acción llamada <em>broadcasting</em>, lo que permite operaciones aritméticas entre dos arreglos con diferentes números de dimensiones pero formas compatibles. Veamos un ejemplo para ver cómo funciona.</p><pre><code class="language-py">arr2 = np.array([[1, 2, 3, 4], 
                 [5, 6, 7, 8], 
                 [9, 1, 2, 3]])               
arr2.shape
# (3, 4)

arr4 = np.array([4, 5, 6, 7])
arr4.shape
# (4,)

arr2 + arr4
# array([[ 5,  7,  9, 11],
#        [ 9, 11, 13, 15],
#        [13,  6,  8, 10]])</code></pre><p>Cuando la expresión <code>arr2 + arr4</code> es evaluada, <code>arr4</code> (que tiene dimensiones <code>(4,)</code>) es replicada tres veces para lograr las dimensiones <code>(3, 4)</code> de <code>arr2</code>. Numpy ejecuta la replicación sin crear tres copias de la dimensión más pequeña del arreglo. Lo que facilita la eficiencia y usa mucha menos memoria.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/02.05-broadcasting.png" class="kg-image" alt="02.05-broadcasting" width="432" height="324" loading="lazy"><figcaption>Fuente: <a href="https://jakevdp.github.io/PythonDataScienceHandbook/02.05-computation-on-arrays-broadcasting.html">Python Data Science Handbook</a></figcaption></figure><p>Esto solo funciona si solo funciona si una de los arrelgos se puede replicar para que coincida con la forma de la otra matriz.</p><pre><code class="language-py">arr5 = np.array([7, 8])
arr5.shape
# (2,)

arr2 + arr5
# ValueError: operands could not be broadcast together with shapes (3,4) (2,) </code></pre><p>En el ejemplo precedente, incluso si <code>arr5</code> es replicado tres veces, no logrará tener las dimensiones de <code>arr2</code>. Por lo tanto <code>arr2 + arr5</code> no puede ser evaluado exitosamente. Puedes aprender más aquí acerca de<a href="https://numpy.org/doc/stable/user/basics.broadcasting.html"> broadcasting</a>.</p><p><strong>Comparación de arreglos en Numpy</strong></p><p>Numpy también soporta operadores como <code>==</code>, <code>!=</code>, <code>&gt;</code> . El resultado será un arreglo de booleanos.</p><pre><code class="language-py">arr1 = np.array([[1, 2, 3], [3, 4, 5]])
arr2 = np.array([[2, 2, 3], [1, 2, 5]])

arr1 == arr2
# array([[False,  True,  True],
#        [False, False,  True]])

arr1 != arr2
# array([[ True, False, False],
#        [ True,  True, False]])

arr1 &gt;= arr2
# array([[False,  True,  True],
#        [ True,  True,  True]])

arr1 &lt; arr2
# array([[ True, False, False],
#        [False, False, False]])</code></pre><p>Las comparaciones de arreglos son generalmente utilizadas para contar el número de elementos iguales en dos arreglos, mediante el método <code>sum</code> . Recuerda que <code>True</code> evalúa en <code>1</code> y <code>False</code> evalúa en <code>0</code>. Esto es así por convención, siempre y cuando trabajes con booleanos.</p><pre><code class="language-py">(arr1 == arr2).sum()
# 3</code></pre><p><strong><em>Indexing</em> y <em>slicing</em> en Numpy </strong></p><p>Numpy extiende la notación de indexación de listas de Python <strong>usando corchetes </strong>en múltiples dimensiones de una manera intuitiva. Puede proporcionar una lista de índices o rangos separados por comas para seleccionar un elemento específico o un subarreglo (también llamado segmento) de un arreglo Numpy.</p><pre><code class="language-py">arr3 = np.array([
    [[11, 12, 13, 14], 
     [13, 14, 15, 19]], 
    
    [[15, 16, 17, 21], 
     [63, 92, 36, 18]], 
    
    [[98, 32, 81, 23],      
     [17, 18, 19.5, 43]]])
     
arr3.shape
# (3, 2, 4)

# Single element
arr3[1, 1, 2]

# 36.0

# Subarray using ranges
arr3[1:, 0:1, :2]

# array([[[15., 16.]],
# 
#        [[98., 32.]]])

# Mixing indices and ranges
arr3[1:, 1, 3]

# array([18., 43.])

arr3[1:, 1, :3]
# array([[63. , 92. , 36. ],
#        [17. , 18. , 19.5]])

# Using fewer indices
arr3[1]

# array([[15., 16., 17., 21.],
#        [63., 92., 36., 18.]])

arr3[:2, 1]
# array([[13., 14., 15., 19.],
#        [63., 92., 36., 18.]])

# Using too many indices
arr3[1,3,2,1]

# IndexError: too many indices for array: array is 3-dimensional, but 4 were indexed</code></pre><p>La notación y sus resultados pueden parecer confusos al principio, así que reserva un tiempo para experimentar y familiarizarse con ella.</p><p>Usa las celdas a continuación para probar algunos ejemplos de indexación y división de arreglos, con diferentes combinaciones de índices y rangos. Aquí hay algunos ejemplos más demostrados visualmente:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/numpy_indexing.png" class="kg-image" alt="numpy_indexing" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/06/numpy_indexing.png 600w, https://www.freecodecamp.org/espanol/news/content/images/2022/06/numpy_indexing.png 772w" sizes="(min-width: 720px) 720px" width="772" height="383" loading="lazy"><figcaption>Fuente:<a href="https://scipy-lectures.org/intro/numpy/array_object.html">Scipy Lectures</a>.</figcaption></figure><p><strong>Otros métodos para crear arreglos en Numpy</strong><br>Numpy también proporciona algunas funciones útiles para crear arreglos de formas deseadas con valores fijos o aleatorios. Consulta la <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fnumpy.org%2Fdoc%2Fstable%2Freference%2Froutines.array-creation.html">documentación oficial </a>o utiliza la función de ayuda <code>help</code> para obtener más información.</p><pre><code># All zeros
np.zeros((3, 2))

# array([[0., 0.],
#        [0., 0.],
#        [0., 0.]])

# All ones
np.ones([2, 2, 3])

# array([[[1., 1., 1.],
#         [1., 1., 1.]],
#
#        [[1., 1., 1.],
#         [1., 1., 1.]]])

# Identity matrix
np.eye(3)

# array([[1., 0., 0.],
#        [0., 1., 0.],
#        [0., 0., 1.]])

# Random vector
np.random.rand(5)

# array([0.92929562, 0.11301864, 0.64213555, 0.8600434 , 0.53738656])

# Random matrix
np.random.randn(2, 3) # rand vs. randn - what's the difference?

# array([[ 0.09906435, -1.64668094,  0.08073528],
#        [ 0.1437016 ,  0.80715712,  1.27285476]])

# Fixed value
np.full([2, 3], 42)

# array([[42, 42, 42],
#        [42, 42, 42]])

# Range with start, end and step
np.arange(10, 90, 3)

# array([10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58,
#        61, 64, 67, 70, 73, 76, 79, 82, 85, 88])

# Equally spaced numbers in a range
np.linspace(3, 27, 9)

# array([ 3.,  6.,  9., 12., 15., 18., 21., 24., 27.])</code></pre><p><strong>Ejercicios</strong><br>Prueba los siguientes ejercicios para familiarizarse con los arreglos Numpy y practicar sus habilidades:</p><p>Asignación de funciones de matriz Numpy: <a href="https://jovian.ml/aakashns/numpy-array-operations">https://jovian.ml/aakashns/numpy-array-operations</a><br>(Opcional) 100 ejercicios numpy: <a href="https://jovian.ml/aakashns/100-numpy-exercises">https://jovian.ml/aakashns/100-numpy-exercises</a></p><p>Resumen y lecturas adicionales<br>Con esto, completamos nuestra discusión sobre computación numérica con Numpy. Hemos cubierto los siguientes temas en esta parte del tutorial:</p><p>1.Cómo pasar de listas de Python a arreglos Numpy<br>2.Cómo operar en arreglos Numpy<br>3.Los beneficios de usar arreglos Numpy sobre listas<br>4.Arrelgtos Numpy multidimensionales<br>5.Cómo trabajar con archivos de datos CSV<br>6.Operaciones aritméticas y radiodifusión<br>7.Arreglos de indexación y rebanado<br>8.Otras formas de crear arrelgos Numpy</p><p>Consulta los siguientes recursos para obtener más información sobre Numpy:</p><ul><li><a href="https://numpy.org/devdocs/user/quickstart.html">Tutorial oficial </a></li><li><a href="https://www.freecodecamp.org/news/the-ultimate-guide-to-the-numpy-scientific-computing-library-for-python/">Numpy curso en freeCodeCamp</a></li><li><a href="http://scipy-lectures.org/advanced/advanced_numpy/index.html">Numpy avanzado (explorando los detalles)</a></li></ul><h3 id="preguntas-de-revisi-n-para-verificar-su-comprensi-n">Preguntas de revisión para verificar su comprensión<br></h3><p>Trata de responder las siguientes preguntas para evaluar su comprensión de los temas tratados en este cuaderno:</p><ol><li>¿Qué es un vector?</li><li>¿Cómo representas vectores usando una lista de Python? Dar un ejemplo.</li><li>¿Qué es un producto escalar de dos vectores?</li><li>Escribe una función para calcular el producto escalar de dos vectores.</li><li>¿Qué es Numpy?</li><li>¿Cómo se instala Numpy?</li><li>¿Cómo se importa el módulo numpy?</li><li>¿Qué significa importar un módulo con un alias? Dar un ejemplo.</li><li>¿Cuál es el alias de uso común para numpy?</li><li>¿Qué es una matriz Numpy?</li><li>¿Cómo se crea una matriz Numpy? Dar un ejemplo.</li><li>¿Cuál es el tipo de arreglos Numpy?</li><li>¿Cómo se accede a los elementos de una matriz Numpy?</li><li>¿Cómo calculas el producto escalar de dos vectores usando Numpy?</li><li>¿Qué sucede si tratas de calcular el producto escalar de dos vectores que tienen diferentes tamaños?</li><li>¿Cómo se calcula el producto de elementos de dos arreglos Numpy?</li><li>¿Cómo se calcula la suma de todos los elementos en una matriz Numpy?</li><li>¿Cuáles son los beneficios de usar arreglos Numpy sobre listas de Python para operar con datos numéricos?</li><li>¿Por qué las operaciones de matriz de Numpy tienen un mejor rendimiento en comparación con las funciones y los bucles de Python?</li><li>Ilustre la diferencia de rendimiento entre las operaciones de arreglos de Numpy y los bucles de Python mediante un ejemplo.</li><li>¿Qué son los arreglos Numpy multidimensionales?</li><li>Ilustre cómo crearía arreglos Numpy con 2, 3 y 4 dimensiones.</li><li>¿Cómo inspecciona la cantidad de dimensiones y la longitud a lo largo de cada dimensión en una arreglo Numpy?</li><li>¿Pueden los elementos de una matriz Numpy tener diferentes tipos de datos?</li><li>¿Cómo verifica los tipos de datos de los elementos de un arreglo Numpy?</li><li>¿Cuál es el tipo de datos de una matriz Numpy?</li><li>¿Cuál es la diferencia entre una matriz y una matriz Numpy 2D?</li><li>¿Cómo se realiza la multiplicación de arreglos usando Numpy?</li><li>¿Para qué se usa el operador @ en Numpy?</li><li>¿Qué es el formato de archivo CSV?</li><li>¿Cómo se leen los datos de un archivo CSV usando Numpy?</li><li>¿Cómo se concatenan dos arreglos Numpy?</li><li>¿Cuál es el propósito del argumento del eje de np.concatenate?</li><li>¿Cuándo son compatibles dos arreglos Numpy para la concatenación?</li><li>Dé un ejemplo de dos arreglos Numpy que se pueden concatenar.</li><li>Dé un ejemplo de dos arreglos Numpy que no se pueden concatenar.</li><li>¿Cuál es el propósito de la función np.reshape?</li><li>¿Qué significa "remodelar" una matriz Numpy?</li><li>¿Cómo se escribe una arreglo numpy en un archivo CSV?</li><li>Dé algunos ejemplos de funciones Numpy para realizar operaciones matemáticas.</li><li>Proporcione algunos ejemplos de funciones Numpy para realizar la manipulación de arreglos.</li><li>Dé algunos ejemplos de funciones Numpy para realizar álgebra lineal.</li><li>Dé algunos ejemplos de funciones Numpy para realizar operaciones estadísticas.</li><li>¿Cómo encuentra la función Numpy correcta para una operación o caso de uso específico?</li><li>¿Dónde puede ver una lista de todas las funciones y operaciones de la matriz Numpy?</li><li>¿Cuáles son los operadores aritméticos compatibles con las arreglos Numpy? Ilustrar con ejemplos.</li><li>¿Qué es la radiodifusión de matriz? ¿Cómo es útil? Ilustre con un ejemplo.</li><li>Proporciona algunos ejemplos de arreglos que sean compatibles para la transmisión.</li><li>Dé algunos ejemplos de arreglos que no son compatibles para la transmisión.</li><li>¿Cuáles son los operadores de comparación admitidos por las arreglos Numpy? Ilustrar con ejemplos.</li><li>¿Cómo accede a un subarreglo o segmento específico de un arreglo Numpy?</li><li>Ilustra la indexación y el corte de arreglos en arreglos Numpy multidimensionales con algunos ejemplos.</li><li>¿Cómo se crea una matriz Numpy con una forma dada que contiene todos los ceros?</li><li>¿Cómo se crea una matriz Numpy con una forma dada que contiene todos unos?</li><li>¿Cómo se crea una matriz de identidad de una forma dada?</li><li>¿Cómo se crea un vector aleatorio de una longitud dada?</li><li>¿Cómo se crea una matriz Numpy con una forma dada con un valor fijo para cada elemento?</li><li>¿Cómo se crea una matriz Numpy con una forma dada que contiene elementos inicializados aleatoriamente?</li><li>¿Cuál es la diferencia entre <code>np.random.rand</code> y <code>np.random.randn</code>? Ilustrar con ejemplos.</li><li>¿Cuál es la diferencia entre <code>np.arange</code> y <code>np.linspace</code>? Ilustrar con ejemplos.</li></ol><p><br>Está listo para pasar a la siguiente sección de este tutorial.</p><h2 id="c-mo-analizar-datos-tabulares-usando-python-y-pandas">Cómo analizar datos tabulares usando Python y Pandas</h2><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/zfxLzEv.png" class="kg-image" alt="zfxLzEv" srcset="https://www.freecodecamp.org/espanol/news/content/images/size/w600/2022/06/zfxLzEv.png 600w, https://www.freecodecamp.org/espanol/news/content/images/size/w1000/2022/06/zfxLzEv.png 1000w, https://www.freecodecamp.org/espanol/news/content/images/size/w1600/2022/06/zfxLzEv.png 1600w, https://www.freecodecamp.org/espanol/news/content/images/size/w2400/2022/06/zfxLzEv.png 2400w" sizes="(min-width: 720px) 720px" width="3175" height="1414" loading="lazy"></figure><p>Sigue y ejecuta el código aquí: <a href="https://jovian.ai/aakashns/python-pandas-data-analysis">https://jovian.ai/aakashns/python-pandas-data-analysis</a>.</p><p>Esta sección cubre los siguientes temas:</p><ol><li>Cómo leer un archivo CSV en un marco de datos de Pandas</li><li>Cómo recuperar datos de marcos de datos de Pandas</li><li>Cómo consultar, clasificar y analizar datos</li><li>Cómo fusionar, agrupar y agregar datos</li><li>Cómo extraer información útil de las fechas</li><li>Trazado básico usando gráficos de líneas y barras</li><li>Cómo escribir marcos de datos en archivos CSV</li></ol><p><strong>Cómo leer un archivo CSV usando Pandas</strong></p><p><a href="https://jovian.ai/outlink?url=https%3A%2F%2Fpandas.pydata.org%2F" rel="noopener noreferrer">Pandas</a> es una biblioteca popular de Python que se utiliza para trabajar con datos tabulares (similares a los datos almacenados en una hoja de cálculo). Proporciona funciones auxiliares para leer datos de varios formatos de archivo como CSV, hojas de cálculo de Excel, tablas HTML, JSON, SQL y más.</p><p>Descarguemos el archivo <code>italy-covid-daywise.txt</code> que contiene una gama de datos sobre el Covid-19 en Italia en el siguiente formato:</p><pre><code>date,new_cases,new_deaths,new_tests
2020-04-21,2256.0,454.0,28095.0
2020-04-22,2729.0,534.0,44248.0
2020-04-23,3370.0,437.0,37083.0
2020-04-24,2646.0,464.0,95273.0
2020-04-25,3021.0,420.0,38676.0
2020-04-26,2357.0,415.0,24113.0
2020-04-27,2324.0,260.0,26678.0
2020-04-28,1739.0,333.0,37554.0
...</code></pre><p>Este formato de almacenamiento de datos se conoce como<em> valores separados por comas</em> o CSV. Aquí hay un recordatorio en caso de que necesites una definición de lo que es el formato CSV:</p><p>CSV: un archivo de valores separados por comas (CSV) es un archivo de texto delimitado que utiliza una coma para separar los valores. Cada línea del archivo es un registro de datos. Cada registro consta de uno o más campos, separados por comas. Un archivo CSV generalmente almacena datos tabulares (números y texto) en texto sin formato, en cuyo caso cada línea tendrá la misma cantidad de campos. (Wikipedia)</p><p>Descargaremos este archivo usando la función <code>urlretrieve</code> que proviene del módulo <code>urllib.request</code>.</p><pre><code class="language-py">from urllib.request import urlretrieve

urlretrieve('https://hub.jovian.ml/wp-content/uploads/2020/09/italy-covid-daywise.csv', 'italy-covid-daywise.csv')</code></pre><p>Para leer el archivo, podemos usar el método de Pandas <code>read_csv</code> . Pero primero, instalemos la librería de Pandas. </p><pre><code class="language-py">!pip install pandas --upgrade --quiet</code></pre><p>Ahora podemos importar nuestro módulo <code>pandas</code>, el cual por convención es importado como <code>pd</code>.</p><pre><code class="language-py">import pandas as pd

covid_df = pd.read_csv('italy-covid-daywise.csv')</code></pre><p>Los datos del archivos se almacenan en un objeto <code>DataFrame</code> – una de las estructuras principales en Pandas para almacenar y trabajar con datos tabulares. En el particular caso de los DataFrames; típicamente empleamos el sufijo <code>_df</code> en el nombre de las variables.</p><pre><code class="language-py">type(covid_df)
# pandas.core.frame.DataFrame

covid_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/espanol/news/content/images/2022/06/dataframe.png" class="kg-image" alt="dataframe" width="519" height="444" loading="lazy"></figure><p>Esto es lo que podemos decir al mirar el marco de datos:</p><p>El archivo proporciona recuentos de cuatro días para COVID-19 en Italia<br>Las métricas reportadas son casos nuevos, muertes y pruebas.</p><p>Los datos se proporcionan durante 248 días: del 12 de diciembre de 2019 al 3 de septiembre de 2020<br>Ten en cuenta que estos son números informados oficialmente. El número real de casos y muertes puede ser mayor, ya que no todos los casos se diagnostican.</p><p>Podemos observar alguna información básica usando el método <code>.info</code>.</p><pre><code class="language-py">covid_df.info()</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-109.png" class="kg-image" alt="image-109" width="600" height="400" loading="lazy"></figure><p>Parece que cada columna contiene valores de un tipo de datos específico. Puedes ver información estadística para columnas numéricas (media, desviación estándar, valores mínimos/máximos y el número de valores no vacíos) usando el método <code>.describe</code>.</p><pre><code class="language-py">covid_df.describe()</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-110.png" class="kg-image" alt="image-110" width="600" height="400" loading="lazy"></figure><p>La propiedad <code>columns</code> contiene la lista de las columnas dentro del DataFrame.</p><pre><code class="language-py">covid_df.columns
# Index(['date', 'new_cases', 'new_deaths', 'new_tests'], dtype='object')</code></pre><p>También puedes obtener el número de filas y columnas en el DataFrame usando el método <code>.shape</code>.</p><pre><code class="language-py">covid_df.shape
# (248, 4)</code></pre><p>He aquí un resumen de las funciones y métodos que hemos visto hasta ahora:</p><ul><li><code>pd.read_csv</code> – Lee (y transforma) los datos de un archivo CSV a un objeto de Pandas <code>DataFrame</code>.</li><li><code>.info()</code> – Visualiza información básica acerca de filas columnas y tipo de datos.</li><li><code>.describe()</code> – Visualiza información estadística acerca de los datos almacenados en las columnas.</li><li><code>.columns</code> – Retorna la lista de los nombres de las columnas.</li><li><code>.shape</code> – Obtiene el número de filas y columnas en forma de Tupla.</li></ul><p><strong><strong>Re</strong>cuperar datos de un DataFrame en Pandas</strong></p><p>La primera cosa que querrás hacer será recuperar datos almacenados en un DataFrame, como el conteo de días específicos, o la lista de valores en una columna particular.</p><p>Para hacer esto, debes comprender la representación interna de los datos en un marco de datos. Conceptualmente, puedes pensar en un marco de datos como un diccionario de listas: las claves son nombres de columna y los valores son listas/arreglos que contienen datos para las columnas respectivas.</p><pre><code class="language-py"># El formato de Pandas SÍ es similar a esto:
covid_data_dict = {
    'date':       ['2020-08-30', '2020-08-31', '2020-09-01', '2020-09-02', '2020-09-03'],
    'new_cases':  [1444, 1365, 996, 975, 1326],
    'new_deaths': [1, 4, 6, 8, 6],
    'new_tests': [53541, 42583, 54395, None, None]
}</code></pre><p>Representar los datos en el formato de arriba tiene varios beneficios:</p><ul><li>Todos los valores de una columna suelen tener el mismo tipo de valor, por lo que es más eficiente almacenarlos en un único arreglo.</li><li>Recuperar los valores de una fila en particular simplemente requiere extraer los elementos en un índice determinado de columnas.</li><li>La representación es más compacta (los nombres de las columnas se registran solo una vez) en comparación con otros formatos que usan un diccionario para cada fila de datos (por favor mirar el ejemplo a continuación).</li></ul><pre><code class="language-py"># El formato de Pandas NO es similar a esto
covid_data_list = [
    {'date': '2020-08-30', 'new_cases': 1444, 'new_deaths': 1, 'new_tests': 53541},
    {'date': '2020-08-31', 'new_cases': 1365, 'new_deaths': 4, 'new_tests': 42583},
    {'date': '2020-09-01', 'new_cases': 996, 'new_deaths': 6, 'new_tests': 54395},
    {'date': '2020-09-02', 'new_cases': 975, 'new_deaths': 8 },
    {'date': '2020-09-03', 'new_cases': 1326, 'new_deaths': 6},
]</code></pre><p>Con la analogía del diccionario de listas en mente, ahora puedes adivinar cómo recuperar datos de un DataFrame. Por ejemplo, podemos obtener una lista de valores de una columna específica utilizando la notación de indexación [].</p><pre><code class="language-py">covid_data_dict['new_cases']
# [1444, 1365, 996, 975, 1326]

covid_df['new_cases']
# 0         0.0
# 1         0.0
# 2         0.0
# 3         0.0
# 4         0.0
#         ...  
# 243    1444.0
# 244    1365.0
# 245     996.0
# 246     975.0
# 247    1326.0
# Name: new_cases, Length: 248, dtype: float64</code></pre><p>Cada columna está representada por una estructura de datos llamada &nbsp;<code>Series</code>, l<strong>a cual es esencialmente un arreglo de Numpy con algunos métodos y propiedades adicionales</strong>.</p><pre><code class="language-py">type(covid_df['new_cases'])
# pandas.core.series.Series</code></pre><p>Como en los arreglos; puedes recuperar un valor específico con una Series, usando la notación index <code>[]</code>.</p><pre><code class="language-py">covid_df['new_cases'][246]
# 975.0

covid_df['new_tests'][240]
57640.0</code></pre><p>Pandas también nos provee del método <code>.at</code> para recuperar el elemento en una fila y columna específica de forma directa.</p><pre><code class="language-py">covid_df.at[246, 'new_cases']
# 975.0

covid_df.at[240, 'new_tests']
# 57640.0</code></pre><p>En vez de usar la notación de <code>[]</code>, Pandas también nos permite acceder a las columnas como propiedades del DataFrame, usando otro tipo de notación, la notación <code>.</code> . Sin embargo, este método solo funciona para columnas cuyos nombres no contienen espacios o carácteres especiales.</p><pre><code class="language-py">covid_df.new_cases
# 0         0.0
# 1         0.0
# 2         0.0
# 3         0.0
# 4         0.0
#         ...  
# 243    1444.0
# 244    1365.0
# 245     996.0
# 246     975.0
# 247    1326.0
# Name: new_cases, Length: 248, dtype: float64</code></pre><p>Además, &nbsp;también puedes pasar una lista de columnas dentro de la notación index &nbsp;<code>[]</code> para acceder a un subconjunto del DataFrame con solo las columnas ya presentes.</p><pre><code class="language-py">cases_df = covid_df[['date', 'new_cases']]
cases_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-111.png" class="kg-image" alt="image-111" width="600" height="400" loading="lazy"></figure><p>El nuevo DataFrame <code>cases_df</code> es simplemente un "primer acercamiento" del DataFrame original <code>covid_df</code>. Ambos apuntan a los mismos datos en la memoria de la computadora. Cambiar cualquier valor dentro de uno de ellos también cambiará los valores respectivos en el otro.</p><p>Compartir datos entre DataFrames hace que la manipulación de datos en Pandas sea increíblemente rápida. No necesitas preocuparte por la sobrecarga de copiar miles o millones de filas cada vez que desee crear un nuevo marco de datos al operar en uno existente.</p><p>A veces, puede que necesites una copia completa del DataFrame, en este caso puedes usar el método <code>copy</code>.</p><pre><code class="language-py">covid_df_copy = covid_df.copy()</code></pre><p>Los datos dentro de <code>covid_df_copy</code> <strong>están ahora completamente separados <code>covid_df</code>, por lo que a partir de ahora, el cambiar los valores al interior de uno, no afectará los valores del otro.</strong> </p><p>Para acceder a esta lista específica de datos, Pandas nos brinda el método <code>.loc</code>.</p><pre><code class="language-py">covid_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-112.png" class="kg-image" alt="image-112" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">covid_df.loc[243]
# date          2020-08-30
# new_cases         1444.0
# new_deaths           1.0
# new_tests        53541.0
# Name: 243, dtype: object</code></pre><p>Cada columna recuperada es un objeto de una <code>Series</code>.</p><pre><code class="language-py">type(covid_df.loc[243])
# pandas.core.series.Series</code></pre><p>Podemos emplear los métodos <code>.head</code> y <code>.tail</code> para ver los primeros o últimos datos, respectivamente.</p><pre><code class="language-py">covid_df.head(5)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-113.png" class="kg-image" alt="image-113" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">covid_df.tail(4)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-114.png" class="kg-image" alt="image-114" width="600" height="400" loading="lazy"></figure><p>Nótese que en los resultados de arriba, que pese a que los primeros valores en &nbsp;<code>new_cases</code> y <code>new_deaths</code> sus columnas son <code>0</code>, los valores correspondientes dentro de las columnas <code>new_tests</code> son <code>NaN</code>. Esto es debido a que el archivo CSV no contiene ningún dato en la columa <code>new_tests</code> respecto a fechas específicas (puedes verificar esto mirando al interior del archivo CSV). Estos valores constituyen <em>Missing Data</em>.</p><pre><code class="language-py">covid_df.at[0, 'new_tests']
# nan

type(covid_df.at[0, 'new_tests'])
# numpy.float64</code></pre><p><strong>La diferencia entre <code>0</code> y <code>NaN</code> es sutil pero importante</strong>. En este conjunto de datos, representa que los números de prueba diarios no se informaron en fechas específicas. Italia comenzó a informar pruebas diarias el 19 de abril de 2020. Ya habían realizado 935,310 pruebas antes del 19 de abril.</p><p>Podemos confirmar que el primer índice (Index) no contiene un valor <code>NaN</code> usando el método<code>first_valid_index</code>.</p><pre><code class="language-py">covid_df.new_tests.first_valid_index()
# 111</code></pre><p>Ahora echemos un vistazo a unas cuantas filas antes y después del índice <strong>para verificar que los valores <code>NaN</code> han sido cambiados a números reales</strong>. Podemos hacer esto definiendo un rango luego de aplicar <code>loc</code><strong>.</strong></p><pre><code class="language-py">covid_df.loc[108:113]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-115.png" class="kg-image" alt="image-115" width="600" height="400" loading="lazy"></figure><p>Podemos usar el método <code>.sample</code> para recuperar una muestra aleatoria de filas, provenientes de nuestro DataFrame.</p><pre><code class="language-py">covid_df.sample(10)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-116.png" class="kg-image" alt="image-116" width="600" height="400" loading="lazy"></figure><p>Ten en cuenta que aunque hemos tomado una muestra aleatoria, se conserva el índice original de cada fila. Esta es una propiedad útil de los DataFrame.</p><p>He aquí un resumen de las funciones y métodos vistos en esta sección:</p><ul><li><code>covid_df['new_cases']</code> – Recupera las columnas como <code>Series</code> usando el nombre de la columna.</li><li><code>new_cases[243]</code> – Recupera valores de una <code>Series</code> usando la notación index</li><li><code>covid_df.at[243, 'new_cases']</code> – Recupera un solo valor de un DataFrame específico.</li><li><code>covid_df.copy()</code> – Crea una copia de un DataFrame.</li><li><code>covid_df.loc[243]</code> - Recupera una fila o rango de filas de datos, provenientes de un DataFrame específico.</li><li><code>head</code>, <code>tail</code>, and <code>sample</code> – Recupera múltiples filas de datos de un DataFrame.</li><li><code>covid_df.new_tests.first_valid_index</code> – Encuentra el primer índice no nulo en una Series.</li></ul><h3 id="an-lisis-de-datos-de-un-dataframe-en-pandas-">Análisis de Datos de un DataFrame en Pandas.</h3><p>Let's try to answer some questions about our data.</p><p><strong><strong><strong><strong>Q:</strong></strong></strong> Cuál es el número total de casos y muertes reportadas por <strong><strong><strong>Covid-19 </strong></strong></strong>en Italia<strong><strong><strong>?</strong></strong></strong></strong></p><p>Similar a los arreglos de Numpy, una Series de Pandas soporta el método <code>sum</code> para dar respuesta a estas preguntas.</p><pre><code class="language-py">total_cases = covid_df.new_cases.sum()
total_deaths = covid_df.new_deaths.sum()

print('The number of reported cases is {} and the number of reported deaths is {}.'.format(int(total_cases), int(total_deaths)))
# The number of reported cases is 271515 and the number of reported deaths is 35497.</code></pre><p><strong><strong><strong><strong>Q:</strong></strong></strong> ¿Cuál es la tasa de mortalidad general (proporción de muertes notificadas a casos notificados)</strong></p><pre><code class="language-py">death_rate = covid_df.new_deaths.sum() / covid_df.new_cases.sum()

print("The overall reported death rate in Italy is {:.2f} %.".format(death_rate*100))
# The overall reported death rate in Italy is 13.07 %.</code></pre><p><strong><strong><strong><strong>Q:</strong></strong></strong> ¿Cuál es el número total de pruebas realizadas? Se realizaron un total de 935,310 pruebas antes de que se informaran los números de pruebas diarias.</strong></p><pre><code class="language-py">initial_tests = 935310
total_tests = initial_tests + covid_df.new_tests.sum()

total_tests
# 5214766.0</code></pre><p><strong><strong><strong><strong>Q: </strong></strong></strong>Qué proporción de los test nos dió un resultado positivo<strong><strong><strong>?</strong></strong></strong></strong></p><pre><code class="language-py">positive_rate = total_cases / total_tests

print('{:.2f}% of tests in Italy led to a positive diagnosis.'.format(positive_rate*100))
# 5.21% of tests in Italy led to a positive diagnosis.</code></pre><p>Estas preguntas son solo una muestra; puedes continuar realizando preguntas y respondiéndolas con el código.</p><h3 id="c-mo-consultar-y-ordenar-filas-en-pandas">Cómo consultar y ordenar filas en Pandas</h3><p>Supongamos que solo queremos dar un vistazo a los días en los que hubieron más de 1000 casos reportados. Podemos emplear una expresión booleana para averiguar cuales filas satisfacen este criterio.</p><pre><code class="language-py">high_new_cases = covid_df.new_cases &gt; 1000

high_new_cases
# 0      False
# 1      False
# 2      False
# 3      False
# 4      False
#        ...  
# 243     True
# 244     True
# 245    False
# 246    False
# 247     True
# Name: new_cases, Length: 248, dtype: bool</code></pre><p>La expresión booleana retorna valores enmarcados en los criterios "verdadero" y "falso" <code>True</code> y <code>False</code> , estos representan<em> valores booleanos</em>. Puedes usar esta series para seleccionar un subconjunto de filas del DataFrame original, correspondientes al valor <code>True</code> en las Series.</p><pre><code class="language-py">covid_df[high_new_cases]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-117.png" class="kg-image" alt="image-117" width="600" height="400" loading="lazy"></figure><p>El DataFrame contiene 72 filas, pero solo la primera y las últimas cinco filas se muestran de forma predeterminada con Jupyter por razones de brevedad. Podemos cambiar algunas opciones de visualización para ver todas las filas.</p><pre><code class="language-py">high_cases_df = covid_df[covid_df.new_cases &gt; 1000]

high_cases_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-118.png" class="kg-image" alt="image-118" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">from IPython.display import display
with pd.option_context('display.max_rows', 100):
    display(covid_df[covid_df.new_cases &gt; 1000])</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-119.png" class="kg-image" alt="image-119" width="600" height="400" loading="lazy"><figcaption>This is just part of the data frame. Check out the rest <a href="https://jovian.ai/embed?url=https://jovian.ai/aakashns/python-pandas-data-analysis" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">here</a>.</figcaption></figure><p>También podemos formular consultas más complejas que involucren varias columnas. Como ejemplo, tratemos de determinar los días en que la proporción de casos informados a las pruebas realizadas es más alta que el total. <code>positive_rate</code>.</p><pre><code class="language-py">positive_rate
# 0.05206657403227681

high_ratio_df = covid_df[covid_df.new_cases / covid_df.new_tests &gt; positive_rate]

high_ratio_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-120.png" class="kg-image" alt="image-120" width="600" height="400" loading="lazy"></figure><p>El resultado de realizar una operación en dos columnas es una nueva serie.</p><pre><code class="language-py">covid_df.new_cases / covid_df.new_tests
# 0           NaN
# 1           NaN
# 2           NaN
# 3           NaN
# 4           NaN
#          ...   
# 243    0.026970
# 244    0.032055
# 245    0.018311
# 246         NaN
# 247         NaN
# Length: 248, dtype: float64</code></pre><p>Podemos usar esta nueva series en el DataFrame</p><pre><code class="language-py">covid_df['positive_rate'] = covid_df.new_cases / covid_df.new_tests

covid_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-121.png" class="kg-image" alt="image-121" width="600" height="400" loading="lazy"></figure><p>Sin embargo, ten en cuenta que a veces puede tomar unos días obtener los resultados de una prueba, por lo que no podemos comparar la cantidad de casos nuevos con la cantidad de pruebas realizadas el mismo día. Cualquier inferencia basada en la columna <code>positive_rate</code> sería probablemente incorrecta.</p><p>Es esencial tener cuidado con estas relaciones sutiles que a menudo no se transmiten dentro del archivo CSV y requieren algún contexto externo. Siempre es una buena idea leer la documentación provista con el conjunto de datos o solicitar más información.</p><p>Por ahora removamos la columna <code>positive_rate</code> usando el método <code>drop</code>.</p><pre><code class="language-py">covid_df.drop(columns=['positive_rate'], inplace=True)</code></pre><p>Puedes deducir el significado del argumento <code>inplace</code>?</p><h3 id="c-mo-ordenar-filas-usando-valores-de-columnas-en-pandas">Cómo ordenar filas usando valores de columnas en Pandas</h3><p>También puedes <a href="https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.sort_values.html">ordenar las filas</a> por una columna específica usando <code>.sort_values</code>. Ordenemos para identificar los días con el mayor número de casos, luego encadenémoslo con el método <code>head</code> para presentar los primeros 10 resultados.</p><pre><code class="language-py">covid_df.sort_values('new_cases', ascending=False).head(10)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-122.png" class="kg-image" alt="image-122" width="600" height="400" loading="lazy"></figure><p>Parece que las últimas dos semanas de marzo tuvieron el mayor número de casos diarios. Comparemos esto con los días en los que se registró el mayor número de muertes.</p><pre><code class="language-py">covid_df.sort_values('new_deaths', ascending=False).head(10)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-123.png" class="kg-image" alt="image-123" width="600" height="400" loading="lazy"></figure><p>Parece que las muertes diarias alcanzan un pico casi una semana después del pico de nuevos casos diarios.<br>Veamos también los días con el menor número de casos. Podríamos esperar ver los primeros días del año en esta lista.</p><pre><code class="language-py">covid_df.sort_values('new_cases').head(10)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-124.png" class="kg-image" alt="image-124" width="600" height="400" loading="lazy"></figure><p>Parece que el recuento de casos nuevos el 20 de junio de 2020 fue <code>-148</code>, ¡un número negativo! No es algo que podríamos haber esperado, pero esa es la naturaleza de los datos del mundo real. Podría ser un error de ingreso de datos, o el gobierno puede haber emitido una corrección para dar cuenta de errores de conteo en el pasado.</p><p>¿Puedes buscar artículos de noticias en línea y averiguar por qué el número fue negativo?</p><p>Veamos algunos días antes y después del 20 de junio de 2020.</p><pre><code class="language-py">covid_df.loc[169:175]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-125.png" class="kg-image" alt="image-125" width="600" height="400" loading="lazy"></figure><p>Por ahora, supongamos que esto fue realmente un error de entrada de datos. Podemos usar uno de los siguientes enfoques para tratar con el valor faltante o defectuoso:</p><ol><li>Reemplazarlo con <code>0</code>.</li><li>Reemplazarlo con el promedio de la columna entera.</li><li>Reemplazarlo con el promedio de los dos valores de la fecha previa y la siguiente (el punto medio entre su diferencia).</li><li>Descartar la columna entera.</li></ol><p>Cada enfoque requiere cierto contexto acerca del origen de los datos y la naturaleza del problema. &nbsp;En este caso, dado que estamos tratando con datos ordenados por fecha; podemos usar el tercer enfoque. </p><p>Puedes usar el método <code>.at</code> para modificar un valor específico dentro del DataFrame. </p><pre><code class="language-py">covid_df.at[172, 'new_cases'] = (covid_df.at[171, 'new_cases'] + covid_df.at[173, 'new_cases'])/2</code></pre><p>He aquí un resumen de las funciones y métodos que utilizamos en esta sección:</p><ul><li><code>covid_df.new_cases.sum()</code> – Calcula la suma de todos los valores en una columna o series.</li><li><code>covid_df[covid_df.new_cases &gt; 1000]</code> – Realiza una consulta que filtra un subconjunto de filas. Todas estas filas tienen en común el que satisfacen la condición establecida en las expresiones booleanas (&gt; 1000) en este caso.</li><li><code>df['pos_rate'] = df.new_cases/df.new_tests</code> – Añade nuevas columnas mediante la combinación de datos de columnas ya existentes. (como el ratio entre casos y test presentado en este ejemplo).</li><li><code>covid_df.drop('positive_rate')</code> – Remueve una o más columnas del DataFrame.</li><li><code>sort_values</code> – Ordena las filas de un DataFrame usando valores de columnas.</li><li><code>covid_df.at[172, 'new_cases'] = ...</code> – Reemplaza un valor dentro de un DataFrame.</li></ul><h3 id="c-mo-trabajar-con-fechas-en-pandas"><strong>Cómo trabajar con fechas en <strong>Pandas</strong></strong></h3><p>Si bien hemos analizado los números generales de los casos, las pruebas, la tasa positiva y más, también sería útil estudiar estos números mes a mes.</p><p> <code>date</code> &nbsp;en Pandas provee varias facilidades a la hora de trabajar con fechas. </p><pre><code class="language-py">covid_df.date
# 0      2019-12-31
# 1      2020-01-01
# 2      2020-01-02
# 3      2020-01-03
# 4      2020-01-04
#           ...    
# 243    2020-08-30
# 244    2020-08-31
# 245    2020-09-01
# 246    2020-09-02
# 247    2020-09-03
# Name: date, Length: 248, dtype: object</code></pre><p>El tipo de datos es actualmente un objeto, <code>object</code>, por lo que Pandas "no sabe" que esta columna es una fecha. Hay que convertirlo a una columna <code>datetime</code> usando el método <code>pd.to_datetime</code>.</p><pre><code class="language-py">covid_df['date'] = pd.to_datetime(covid_df.date)

covid_df['date']
# 0     2019-12-31
# 1     2020-01-01
# 2     2020-01-02
# 3     2020-01-03
# 4     2020-01-04
#          ...    
# 243   2020-08-30
# 244   2020-08-31
# 245   2020-09-01
# 246   2020-09-02
# 247   2020-09-03
# Name: date, Length: 248, dtype: datetime64[ns]</code></pre><p>Puedes confirmar que ahora tiene el tipo de dato <code>datetime64</code>. Ahora podemos extraer diferentes partes de los datos en columnas separadas, usando la claseWe can now extract different parts of the data into separate columns, using the <code>DatetimeIndex</code> (<a href="https://jovian.ai/outlink?url=https%3A%2F%2Fpandas.pydata.org%2Fpandas-docs%2Fversion%2F0.23.4%2Fgenerated%2Fpandas.DatetimeIndex.html" rel="noopener noreferrer">ver doc</a>).</p><pre><code class="language-py">covid_df['year'] = pd.DatetimeIndex(covid_df.date).year
covid_df['month'] = pd.DatetimeIndex(covid_df.date).month
covid_df['day'] = pd.DatetimeIndex(covid_df.date).day
covid_df['weekday'] = pd.DatetimeIndex(covid_df.date).weekday

covid_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-126.png" class="kg-image" alt="image-126" width="600" height="400" loading="lazy"></figure><p>Revisemos las métricas generales de mayo. Podemos consultar las filas de mayo, elegir un subconjunto de columnas y usar el método <code>sum</code> para agregar cada uno de los valores de columna seleccionados.</p><pre><code class="language-py"># Query the rows for May
covid_df_may = covid_df[covid_df.month == 5]

# Extract the subset of columns to be aggregated
covid_df_may_metrics = covid_df_may[['new_cases', 'new_deaths', 'new_tests']]

# Get the column-wise sum
covid_may_totals = covid_df_may_metrics.sum()

covid_may_totals
# new_cases       29073.0
# new_deaths       5658.0
# new_tests     1078720.0
# dtype: float64

type(covid_may_totals)
# pandas.core.series.Series</code></pre><p>También podemos combinar las operaciones antes mencionadas en una declaración simple:</p><pre><code class="language-py">covid_df[covid_df.month == 5][['new_cases', 'new_deaths', 'new_tests']].sum()
# new_cases       29073.0
# new_deaths       5658.0
# new_tests     1078720.0
# dtype: float64</code></pre><p>Como otro ejemplo, comprobemos si el número de casos notificados los domingos es superior a la media de casos notificados todos los días. Esta vez, podríamos querer agregar columnas usando el método <code>.mean</code></p><pre><code class="language-py"># Overall average
covid_df.new_cases.mean()

# 1096.6149193548388

# Average for Sundays
covid_df[covid_df.weekday == 6].new_cases.mean()

# 1247.2571428571428</code></pre><p>Parece que se informaron más casos los domingos en comparación con otros días.<br>Intenta hacer y responder algunas preguntas adicionales relacionadas datos y fechas.</p><h3 id="c-mo-agrupar-y-agregar-datos-en-pandas">Cómo Agrupar y Agregar Datos en Pandas</h3><p>Como siguiente paso, es posible que deseemos resumir los datos diarios y crear un nuevo DataFrame con datos mensuales. Podemos usar la función <code>groupby</code> para agrupar por mes, seleccionando las columnas que deseamos agrupar (en este caso new_cases, new_deaths y new_tests).</p><p>Esto sería la agrupación. Finalmente agregamos todos estos datos usando el método <code>sum</code> .</p><pre><code class="language-py">covid_month_df = covid_df.groupby('month')[['new_cases', 'new_deaths', 'new_tests']].sum()

covid_month_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-127.png" class="kg-image" alt="image-127" width="600" height="400" loading="lazy"></figure><p>El resultado es un nuevo DataFrame que contiene valores únicos de las columnas seleccionadas con <code>groupby</code> nótese que este último también ha funcionado como index. La agrupación y agregación son <strong>métodos poderosos para resumir progresivamente los datos en DataFrames más pequeños.</strong></p><p>En lugar de agregar por suma, también podemos agregar por otras medidas como la media (mean). Calculemos el número promedio de casos nuevos diarios, muertes y pruebas para cada mes.</p><pre><code class="language-py">covid_month_mean_df = covid_df.groupby('month')[['new_cases', 'new_deaths', 'new_tests']].mean()

covid_month_mean_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-128.png" class="kg-image" alt="image-128" width="600" height="400" loading="lazy"></figure><p>Además de la agrupación, otra forma de agregación es la suma acumulada. En este caso; la suma acumulada de casos, pruebas o muertes hasta la fecha de cada fila. Podemos usar el método <code>cumsum</code> para calcular la <strong>suma acumulada</strong> de una columna. </p><p>Añadamos tres columnas: <code>total_cases</code>, <code>total_deaths</code>, and <code>total_tests</code>.</p><pre><code class="language-py">covid_df['total_cases'] = covid_df.new_cases.cumsum()
covid_df['total_deaths'] = covid_df.new_deaths.cumsum()
covid_df['total_tests'] = covid_df.new_tests.cumsum() + initial_tests</code></pre><p>También hemos incluído el el conteo inicial en &nbsp;<code>total_test</code> para contar los test realizados antes de que empezara el reporte diario por parte de las autoridades.</p><pre><code class="language-py">covid_df</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-129.png" class="kg-image" alt="image-129" width="600" height="400" loading="lazy"></figure><p>Nótese como los valores <code>NaN</code> en la columna <code>total_tests</code> permanecen inafectados.</p><h3 id="c-mo-unir-datos-desde-diferentes-fuentes-en-pandas"><strong>Cómo unir datos desde diferentes fuentes en Pandas</strong></h3><p>Para determinar otras métricas como pruebas por millón, casos por millón, etc., necesitamos más información sobre el país, es decir, su población.</p><p>Descarguemos otro archivo <code>locations.csv</code> que contiene información relacionada con la salud de muchos países, incluida Italia.</p><pre><code class="language-py">urlretrieve('https://gist.githubusercontent.com/aakashns/8684589ef4f266116cdce023377fc9c8/raw/99ce3826b2a9d1e6d0bde7e9e559fc8b6e9ac88b/locations.csv', 'locations.csv')

locations_df = pd.read_csv('locations.csv')
locations_df</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-130.png" class="kg-image" alt="image-130" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">locations_df[locations_df.location == "Italy"]</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-131.png" class="kg-image" alt="image-131" width="600" height="400" loading="lazy"></figure><p>Podemos fusionar estos datos en nuestro marco de datos existente agregando más columnas. Sin embargo, para fusionar dos DataFrames, necesitamos al menos una columna común. Insertemos una columna <code>location</code> en el DataFrame <code>covid_df</code> seleccionando únicamente los valores de Italia, <code>"Italy"</code>.</p><pre><code class="language-py">covid_df['location'] = "Italy"

covid_df</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-132.png" class="kg-image" alt="image-132" width="600" height="400" loading="lazy"></figure><p>Ahora podemos añadir las columnas de <code>locations_df</code> en <code>covid_df</code> usando el método <code>.merge</code> .</p><pre><code class="language-py">merged_df = covid_df.merge(locations_df, on="location")

merged_df</code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-133.png" class="kg-image" alt="image-133" width="600" height="400" loading="lazy"><figcaption>Check out the full data frame <a href="https://jovian.ai/embed?url=https://jovian.ai/aakashns/python-pandas-data-analysis" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">here</a>.</figcaption></figure><p>Los datos de ubicación de Italia se adjuntan a cada fila dentro de <code>covid_df</code>. Si el DataFrame <code>covid_df</code> contenía datos para varias ubicaciones, entonces se agregarían los datos de ubicación del país respectivo para cada fila.</p><p>Ahora podemos calcular métricas como casos por millón, muertes por millón y pruebas por millón.</p><pre><code class="language-py">merged_df['cases_per_million'] = merged_df.total_cases * 1e6 / merged_df.population
merged_df['deaths_per_million'] = merged_df.total_deaths * 1e6 / merged_df.population
merged_df['tests_per_million'] = merged_df.total_tests * 1e6 / merged_df.population

merged_df</code></pre><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-134.png" class="kg-image" alt="image-134" width="600" height="400" loading="lazy"><figcaption>Check out the full data frame <a href="https://jovian.ai/embed?url=https://jovian.ai/aakashns/python-pandas-data-analysis" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">here</a>.</figcaption></figure><h3 id="c-mo-volver-a-escribir-datos-en-archivos-de-pandas">Cómo volver a escribir datos en archivos de Pandas</h3><p>Después de completar el análisis y agregar nuevas columnas, debes volver a escribir los resultados en un archivo. De lo contrario, los datos se perderán cuando el portátil Jupyter se apague.<br>Antes de escribir en el archivo, primero creemos un DataFrame que contenga solo las columnas que deseamos registrar.</p><pre><code class="language-py">result_df = merged_df[['date',
                       'new_cases', 
                       'total_cases', 
                       'new_deaths', 
                       'total_deaths', 
                       'new_tests', 
                       'total_tests', 
                       'cases_per_million', 
                       'deaths_per_million', 
                       'tests_per_million']]
                       
result_df</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-135.png" class="kg-image" alt="image-135" width="600" height="400" loading="lazy"></figure><p>Para escribir los datos del DataFrame en un archivo, podemos usar la función <code>to_csv</code> .</p><pre><code class="language-py">result_df.to_csv('results.csv', index=None)</code></pre><p>La función <code>to_csv</code> también incluye una columna adicional para guardar el Index del DataFrame. Esta columna está por defecto. Si pasamos el código <code>index=None</code> eliminaremos esta columna por defecto.Puedes verificar que &nbsp;<code>results.csv</code> ha sido creada con los datos del DataFrame en el formato CSV:</p><pre><code class="language-py">date,new_cases,total_cases,new_deaths,total_deaths,new_tests,total_tests,cases_per_million,deaths_per_million,tests_per_million
2020-02-27,78.0,400.0,1.0,12.0,,,6.61574439992122,0.1984723319976366,
2020-02-28,250.0,650.0,5.0,17.0,,,10.750584649871982,0.28116913699665186,
2020-02-29,238.0,888.0,4.0,21.0,,,14.686952567825108,0.34732658099586405,
2020-03-01,240.0,1128.0,8.0,29.0,,,18.656399207777838,0.47964146899428844,
2020-03-02,561.0,1689.0,6.0,35.0,,,27.93498072866735,0.5788776349931067,
2020-03-03,347.0,2036.0,17.0,52.0,,,33.67413899559901,0.8600467719897585,
...</code></pre><h3 id="bonus-visualizaci-n-de-datos-b-sica-con-pandas"><strong><strong>Bonus:</strong> Visualización de Datos básica con <strong>Pandas</strong></strong></h3><p>Generalmente usamos bibliotecas como <code>matplotlib</code> o <code>seaborn</code> para graficar en un notebook de Jupyter. Sin embargo, pandas también provee un método sencillo,<code>.plot</code> para graficar de forma rápida y conveniente.</p><p>Hagamos un gráfico lineal que muestre cómo varía el número de casos diarios con el tiempo.</p><pre><code class="language-py">result_df.new_cases.plot();</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-137.png" class="kg-image" alt="image-137" width="600" height="400" loading="lazy"></figure><p>Si bien este gráfico muestra la tendencia general, es difícil saber dónde se produjo el pico, ya que no hay fechas en el eje X. Podemos usar la columna <code>date</code> como el index para el DataFrame. </p><pre><code class="language-py">result_df.set_index('date', inplace=True)

result_df</code></pre><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-138.png" class="kg-image" alt="image-138" width="600" height="400" loading="lazy"></figure><p>Ten en cuenta que el índice de un DataFrame no tiene que ser numérico. Usar la fecha como índice también nos permite obtener los dato usando <code>.loc</code>.</p><pre><code class="language-py">result_df.loc['2020-09-01']
# new_cases             9.960000e+02
# total_cases           2.696595e+05
# new_deaths            6.000000e+00
# total_deaths          3.548300e+04
# new_tests             5.439500e+04
# total_tests           5.214766e+06
# cases_per_million     4.459996e+03
# deaths_per_million    5.868661e+02
# tests_per_million     8.624890e+04
# Name: 2020-09-01 00:00:00, dtype: float64</code></pre><p>Tracemos los nuevos casos y las nuevas muertes por día como gráficos de líneas.</p><pre><code class="language-py">result_df.new_cases.plot()
result_df.new_deaths.plot();</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-139.png" class="kg-image" alt="image-139" width="600" height="400" loading="lazy"></figure><p>También podemos comparar el total de casos vs. el total de muertes.</p><pre><code class="language-py">result_df.total_cases.plot()
result_df.total_deaths.plot();</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-140.png" class="kg-image" alt="image-140" width="600" height="400" loading="lazy"></figure><p>Veamos cómo la tasa de mortalidad y las tasas de pruebas positivas varían con el tiempo.</p><pre><code class="language-py">death_rate = result_df.total_deaths / result_df.total_cases

death_rate.plot(title='Death Rate');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-141.png" class="kg-image" alt="image-141" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">positive_rates = result_df.total_cases / result_df.total_tests

positive_rates.plot(title='Positive Rate');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-142.png" class="kg-image" alt="image-142" width="600" height="400" loading="lazy"></figure><p>Finalmente, tracemos algunos datos mensuales usando un gráfico de barras para visualizar la tendencia a un nivel superior.</p><pre><code class="language-py">covid_month_df.new_cases.plot(kind='bar');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-143.png" class="kg-image" alt="image-143" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">covid_month_df.new_tests.plot(kind='bar')</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-144.png" class="kg-image" alt="image-144" width="600" height="400" loading="lazy"></figure><h3 id="ejercicios-en-pandas"><strong>Ejercicios en <strong>Pandas </strong></strong></h3><p>Prueba los siguientes ejercicios para familiarizarse con los marcos de datos de Pandas y practicar sus habilidades:</p><ul><li><a href="https://jovian.ml/aakashns/pandas-practice-assignment">Evaluación sobre DataFrames</a></li><li>Ejercicios adicionales en<a href="https://github.com/guipsamora/pandas_exercises"> Pandas</a></li><li><a href="https://www.kaggle.com/datasets"> Kaggle</a></li></ul><h3 id="resumen-y-lecturas-adicionales">Resumen y lecturas adicionales</h3><p>Hemos cubierto los siguientes temas en este tutorial:</p><ul><li>Cómo leer un archivo CSV en un marco de datos de Pandas</li><li>Cómo recuperar datos de marcos de datos de Pandas</li><li>Cómo consultar, clasificar y analizar datos</li><li>Cómo fusionar, agrupar y agregar datos</li><li>Cómo extraer información útil de las fechas</li><li>Trazado básico usando gráficos de líneas y barras</li><li>Cómo escribir marcos de datos en archivos CSV</li></ul><p>Consulta los siguientes recursos para obtener más información sobre Pandas:</p><ul><li><a href="https://pandas.pydata.org/docs/user_guide/index.html">Guía de Pandas</a></li><li><a href="https://www.oreilly.com/library/view/python-for-data/9781491957653/">Python for Data Analysis (Libro del creator of Pandas)</a></li></ul><h3 id="preguntas-para-evaluar-tu-comprensi-n">Preguntas para evaluar tu comprensión</h3><p>Intenta responder las siguientes preguntas para evaluar tu comprensión de los temas tratados en este capítulo:</p><p>1.¿Qué es Pandas? ¿Qué lo hace útil?<br>2.¿Cómo se instala la biblioteca Pandas?<br>3.¿Cómo se importa el módulo pandas?<br>4.¿Cuál es el alias común que se usa al importar el módulo pandas?<br>5.¿Cómo se lee un archivo CSV usando Pandas? Dar un ejemplo.<br>6.¿Cuáles son otros formatos de archivo que puede leer con Pandas? Ilustrar con ejemplos.<br>7.¿Qué son los marcos de datos de Pandas?<br>8.¿En qué se diferencian los marcos de datos de Pandas de los arreglos de Numpy?<br>9.¿Cómo encuentra el número de filas y columnas en un marco de datos?<br>10.¿Cómo se obtiene la lista de columnas en un marco de datos?<br>11.¿Cuál es el propósito del método de descripción de un marco de datos?<br>12.¿En qué se diferencian la información y los métodos de marco de datos descritos?<br>13.¿Es un dataframe de Pandas conceptualmente similar a una lista de diccionarios oa un diccionario de listas? Explique con un ejemplo.<br>14.¿Qué es una Serie Pandas? ¿En qué se diferencia de una matriz Numpy?<br>15.¿Cómo accede a una columna desde un marco de datos?<br>16. ¿Cómo accede a una fila desde un marco de datos?<br>17. ¿Cómo accede a un elemento en una fila y columna específicas de un marco de datos?<br>18.¿Cómo se crea un subconjunto de un marco de datos con un conjunto específico de columnas?<br>19.¿Cómo se crea un subconjunto de un marco de datos con un rango específico de filas?<br>20. ¿El cambio de un valor dentro de un DataFrame afecta a otros DataFrames creados usando un subconjunto de filas o columnas? ¿Por que es esto entonces?<br>21.¿Cómo se crea una copia de un DataFrame?<br>22.¿Por qué debería evitar crear demasiadas copias de un DataFrame?<br>23.¿Cómo ve las primeras filas de un DataFrame?<br>24.¿Cómo ve las últimas filas de un DataFrame?<br>25.¿Cómo ve una selección aleatoria de filas de un DataFrame?<br>26.¿Qué es el "índice" en un DataFrame? ¿Cómo es útil?<br>27.¿Qué representa un valor de NaN en un dataframe de Pandas?<br>28.¿En qué se diferencia Nan de 0?<br>29.¿Cómo identifica la primera fila no vacía en una serie o columna de Pandas?<br>30.¿Cuál es la diferencia entre df.loc y df.at?<br>31.¿Dónde puede encontrar una lista completa de los métodos compatibles con los objetos Pandas DataFrame y Series?<br>32. ¿Cómo encuentra la suma de números en una columna de un DataFrame?<br>33. ¿Cómo encuentra la media de los números en una columna de un marco de datos?<br>34. ¿Cómo encuentra la cantidad de números que no están vacíos en una columna de un DataFrame?<br>35.¿Cuál es el resultado obtenido al usar una columna Pandas en una expresión booleana? Ilustre con un ejemplo.<br>36.¿Cómo selecciona un subconjunto de filas donde el valor de una columna específica cumple una condición dada? Ilustre con un ejemplo.<br>37.¿Cuál es el resultado de la expresión df[df.new_cases &gt; 100]?<br>38. ¿Cómo se muestran todas las filas de un marco de datos de pandas en una salida de celda Jupyter?<br>39.¿Cuál es el resultado que se obtiene al realizar una operación aritmética entre dos columnas de un dataframe? Ilustre con un ejemplo.<br>40. ¿Cómo agrega una nueva columna a un marco de datos combinando valores de dos columnas existentes? Ilustre con un ejemplo.<br>41.¿Cómo se elimina una columna de un marco de datos? Ilustre con un ejemplo.<br>42. ¿Cuál es el propósito del argumento in situ en los métodos de marco de datos?<br>43. ¿Cómo se ordenan las filas de un marco de datos en función de los valores de una columna en particular?<br>44. ¿Cómo se ordena un marco de datos de pandas utilizando valores de varias columnas?<br>45. ¿Cómo se especifica si se ordena de forma ascendente o descendente al ordenar un marco de datos de Pandas?<br>46. ​​¿Cómo cambia un valor específico dentro de un marco de datos?<br>47.¿Cómo se convierte una columna de marco de datos al tipo de datos de fecha y hora?<br>48.¿Cuáles son los beneficios de usar el tipo de datos de fecha y hora en lugar del tipo de objeto?<br>49.¿Cómo se extraen diferentes partes de una columna de fecha como el mes, año, mes, día de la semana, etc. en columnas separadas? Ilustre con un ejemplo.<br>50. ¿Cómo se agregan varias columnas de un marco de datos?<br>51.¿Cuál es el propósito del método groupby de un marco de datos? Ilustre con un ejemplo.<br>52.¿Cuáles son las diferentes formas en que puede agregar los grupos creados por groupby?<br>53.¿Qué quiere decir con una suma continua o acumulada?<br>54.¿Cómo se crea una nueva columna que contiene la suma acumulada o acumulada de otra columna?<br>55.¿Qué otras medidas acumulativas admiten los marcos de datos de Pandas?<br>56.¿Qué significa fusionar dos marcos de datos? Dar un ejemplo.<br>57. ¿Cómo especificas las columnas que deben usarse para fusionar dos marcos de datos?<br>58.¿Cómo se escriben datos de un marco de datos de Pandas en un archivo CSV? Dar un ejemplo.<br>59. ¿Cuáles son algunos otros formatos de archivo en los que puede escribir desde un marco de datos de Pandas? Ilustrar con ejemplos.<br>60. ¿Cómo se crea un gráfico de líneas que muestra los valores dentro de una columna de un marco de datos?<br>61.¿Cómo se convierte una columna de un marco de datos en su índice?<br>62. ¿Puede el índice de un marco de datos no ser numérico?<br>63.¿Cuáles son los beneficios de usar un marco de datos no numérico? Ilustre con un ejemplo.<br>64. ¿Cómo se crea un gráfico de barras que muestra los valores dentro de una columna de un marco de datos?<br>65. ¿Cuáles son algunos otros tipos de gráficos compatibles con los marcos de datos y las series de Pandas?</p><p>¡Tienes lo necesario para la siguiente sección del tutorial!</p><h2 id="data-visualization-using-python-matplotlib-and-seaborn"><strong><strong>Data Visualization using Python, Matplotlib, and Seaborn</strong></strong></h2><figure class="kg-card kg-image-card kg-width-wide"><img src="https://i.imgur.com/9i806Rh.png" class="kg-image" alt="9i806Rh" width="2314" height="1092" loading="lazy"></figure><p>Notebook link: <a href="https://jovian.ai/aakashns/python-matplotlib-data-visualization">https://jovian.ai/aakashns/python-matplotlib-data-visualization</a></p><p>La visualización de datos es la representación gráfica de los datos. Implica producir imágenes que comuniquen las relaciones entre los datos representados a los espectadores.</p><p>La visualización de datos es una parte esencial del análisis de datos y el aprendizaje automático. Usaremos bibliotecas de Python como <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org" rel="noopener noreferrer">Matplotlib</a> y <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fseaborn.pydata.org" rel="noopener noreferrer">Seaborn</a> para aprender y aplicar algunas técnicas populares de visualización de datos. </p><p>Para empezar, installemos las bibliotecas en cuestión. Usaremos el módulo <code>matplotlib.pyplot</code> para gáficos sencillos. A menudo se importa con el alias <code>plt</code>.También usaremos el módulo <code>seaborn</code> para gráficos más avanzados. Este a menudo se importa mediante el alias <code>sns</code>.</p><pre><code class="language-py">!pip install matplotlib seaborn --upgrade --quiet

import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline</code></pre><p>Nótese el comando especial <code>%matplotlib inline</code> para garantizar que<strong> nuestros gráficos se muestren e incrusten en el propio cuaderno de Jupyter. </strong>Sin este comando, a veces pueden aparecer gráficos en ventanas emergentes.</p><h3 id="c-mo-crear-una-gr-fica-lineal-en-python"><strong>Cómo crear una gráfica lineal en <strong>Python</strong></strong></h3><p>El gráfico de líneas es una de las técnicas de visualización de datos más simples y más utilizadas. Un gráfico de líneas muestra información como una serie de puntos de datos o marcadores conectados por líneas rectas.<br>Puede personalizar la forma, el tamaño, el color y otros elementos estéticos de las líneas y los marcadores para una mejor claridad visual.<br>Aquí hay una lista de Python que muestra el rendimiento de las manzanas (toneladas por hectárea) durante seis años en un país imaginario llamado Kanto.</p><pre><code class="language-py">yield_apples = [0.895, 0.91, 0.919, 0.926, 0.929, 0.931]</code></pre><p>Podemos visualizar cómo cambia el rendimiento de las manzanas con el tiempo usando un gráfico de líneas. Para dibujar un gráfico de líneas, podemos usar la función <code>plt.plot</code> .</p><pre><code class="language-py">plt.plot(yield_apples)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-145.png" class="kg-image" alt="image-145" width="600" height="400" loading="lazy"></figure><p>Al llamar la función <code>plt.plot</code> &nbsp;se traza la línea como se esperaba. también incluye la especificación de la línea <code>[&lt;matplotlib.lines.Line2D at 0x7ff70aa20760&gt;]</code>. podemos añadir (<code>;</code>) al final de la declaración en la celda para evitar mostrar eso último y así solo representar la gráfica. </p><pre><code class="language-py">plt.plot(yield_apples);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-146.png" class="kg-image" alt="image-146" width="600" height="400" loading="lazy"></figure><p>Mejoremos esta trama paso a paso para que sea más informativa y hermosa.</p><h3 id="c-mo-personalizar-el-eje-x-en-matplotlib">Cómo personalizar el eje X en MatPlotLib</h3><p>El eje X de la gráfica actualmente muestra los índices de los elementos de la lista de 0 a 5. La gráfica sería más informativa si pudiéramos mostrar el año para el cual estamos trazando los datos. Podemos hacer esto con dos argumentos <code>plt.plot</code>.</p><pre><code class="language-py">years = [2010, 2011, 2012, 2013, 2014, 2015]
yield_apples = [0.895, 0.91, 0.919, 0.926, 0.929, 0.931]

plt.plot(years, yield_apples)</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-147.png" class="kg-image" alt="image-147" width="600" height="400" loading="lazy"></figure><h4 id="axis-labels-in-matplotlib"><strong><strong><strong><strong>Axis Labels in MatPlotLib</strong></strong></strong></strong></h4><p>Podemos agregar etiquetas a los ejes para mostrar lo que representa cada eje usando los métodos <code>plt.xlabel</code> y<code>plt.ylabel</code>.</p><pre><code class="language-py">plt.plot(years, yield_apples)
plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-148.png" class="kg-image" alt="image-148" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-trazar-l-neas-m-ltiples-en-matplotlib">Cómo trazar líneas múltiples en MatPlotLib</h3><p>Pueden invocar la función<code>plt.plot</code> en cada variable, para graficar múltiples líneas en la misma gráfica; cómo se muestra a continuación en el ejemplo de manzanas y naranjas en Kanto.</p><pre><code class="language-py">years = range(2000, 2012)
apples = [0.895, 0.91, 0.919, 0.926, 0.929, 0.931, 0.934, 0.936, 0.937, 0.9375, 0.9372, 0.939]
oranges = [0.962, 0.941, 0.930, 0.923, 0.918, 0.908, 0.907, 0.904, 0.901, 0.898, 0.9, 0.896, ]

plt.plot(years, apples)
plt.plot(years, oranges)
plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-149.png" class="kg-image" alt="image-149" width="600" height="400" loading="lazy"></figure><h4 id="t-tulo-de-gr-fica-y-leyenda-en-matplotlib"><strong>Título de gráfica y leyenda en<strong><strong><strong> MatPlotLib</strong></strong></strong></strong></h4><p>Para diferenciar entre múltiples líneas, podemos incluir una leyenda dentro del gráfico usando la función <code>plt.legend</code> también podemos ajustar el título mediante la función <code>plt.title</code>.</p><pre><code class="language-py">plt.plot(years, apples)
plt.plot(years, oranges)

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-150.png" class="kg-image" alt="image-150" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-usar-marcadores-de-l-nea-en-matplotlib">Cómo usar marcadores de línea en MatPlotLib</h3><p>También podemos mostrar marcadores para los puntos de datos en cada línea usando el argumento marcador de &nbsp;<code>plt.plot</code>.</p><p>Matplotlib proporciona muchos marcadores diferentes, como un círculo, una cruz, un cuadrado, un diamante y más. Puedes encontrar la lista completa de tipos de marcadores aquí: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2F3.1.1%2Fapi%2Fmarkers_api.html" rel="noopener noreferrer">https://matplotlib.org/3.1.1/api/markers_api.html</a> .</p><pre><code class="language-py">plt.plot(years, apples, marker='o')
plt.plot(years, oranges, marker='x')

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-151.png" class="kg-image" alt="image-151" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-dise-ar-l-neas-y-marcadores-en-matplotlib">Cómo diseñar líneas y marcadores en MatPlotLib</h3><p>La función <code>plt.plot</code> soporta varios argumentos para dar estilo a las líneas y marcadores:</p><ul><li><code>color</code> o <code>c</code> – Ajusta el color de la línea (<a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2F3.1.0%2Fgallery%2Fcolor%2Fnamed_colors.html" rel="noopener noreferrer">supported colors</a>)</li><li><code>linestyle</code> o <code>ls</code> – Elije entre una línea sólida o discontinua</li><li><code>linewidth</code> o <code>lw</code> – Establece el ancho de una línea</li><li><code>markersize</code> o <code>ms</code> – Fija el tamaño de los marcadores</li><li><code>markeredgecolor</code> o <code>mec</code> – Establecer el color del borde para los marcadores</li><li><code>markeredgewidth</code> o <code>mew</code> – Establecer el ancho del borde para los marcadores</li><li><code>markerfacecolor</code> o <code>mfc</code> – Establecer el color de relleno para los marcadores</li><li><code>alpha</code> – Opacidad de la gráfica</li></ul><p>Puedes ver mayor documentación acerca de Matplotlip y <code>plt.plot</code> aquí: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2Fapi%2F_as_gen%2Fmatplotlib.pyplot.plot.html%23matplotlib.pyplot.plot" rel="noopener noreferrer">https://matplotlib.org/api/_as_gen/matplotlib.pyplot.plot.html#matplotlib.pyplot.plot</a> .</p><pre><code class="language-py">plt.plot(years, apples, marker='s', c='b', ls='-', lw=2, ms=8, mew=2, mec='navy')
plt.plot(years, oranges, marker='o', c='r', ls='--', lw=3, ms=10, alpha=.5)

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><pre><code class="language-py">fmt = '[marker][line][color]'

plt.plot(years, apples, 's-b')
plt.plot(years, oranges, 'o--r')

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-153.png" class="kg-image" alt="image-153" width="600" height="400" loading="lazy"></figure><p>El argumento <code>fmt</code> proporciona una abreviatura para especificar la forma del marcador, el estilo de línea y el color de línea. Puede proporcionarlo como tercer argumento para plt.plot.</p><p>Puedes usar la función <code>plt.figure</code> para cambiar el tamaño de la figura.</p><pre><code class="language-py">plt.plot(years, oranges, 'or')
plt.title("Yield of Oranges (tons per hectare)");</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-154.png" class="kg-image" alt="image-154" width="600" height="400" loading="lazy"></figure><h4 id="c-mo-cambiar-el-tama-o-en-las-gr-ficas-de-matplotlib"><strong>Cómo cambiar el tamaño en las gráficas de<strong><strong><strong> MatPlotLib</strong></strong></strong></strong></h4><p>Usa la función <code>plt.figure</code> </p><pre><code class="language-py">plt.figure(figsize=(12, 6))

plt.plot(years, oranges, 'or')
plt.title("Yield of Oranges (tons per hectare)");</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-155.png" class="kg-image" alt="image-155" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-mejorar-los-estilos-predeterminados-usando-seaborn">Cómo mejorar los estilos predeterminados usando Seaborn</h3><p>Una manera fácil de hacer que tus gráficos se vean hermosos es usar algunos estilos predeterminados de la biblioteca Seaborn. Puede aplicarlos globalmente usando la función sns.set_style. Puede ver una lista completa de estilos predefinidos aquí: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fseaborn.pydata.org%2Fgenerated%2Fseaborn.set_style.html" rel="noopener noreferrer">https://seaborn.pydata.org/generated/seaborn.set_style.html</a> .</p><pre><code class="language-py">sns.set_style("whitegrid")
plt.plot(years, apples, 's-b')
plt.plot(years, oranges, 'o--r')

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-156.png" class="kg-image" alt="image-156" width="600" height="400" loading="lazy"></figure><pre><code>sns.set_style("darkgrid")

plt.plot(years, apples, 's-b')
plt.plot(years, oranges, 'o--r')

plt.xlabel('Year')
plt.ylabel('Yield (tons per hectare)')

plt.title("Crop Yields in Kanto")
plt.legend(['Apples', 'Oranges']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-157.png" class="kg-image" alt="image-157" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">plt.plot(years, oranges, 'or')
plt.title("Yield of Oranges (tons per hectare)");</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-158.png" class="kg-image" alt="image-158" width="600" height="400" loading="lazy"></figure><p>También puedes editar estilos predeterminados directamente modificando el diccionario matplotlib.rcParams. Aprende más: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2F3.2.1%2Ftutorials%2Fintroductory%2Fcustomizing.html%23matplotlib-rcparams" rel="noopener noreferrer">https://matplotlib.org/3.2.1/tutorials/introductory/customizing.html#matplotlib-rcparams</a> .</p><pre><code class="language-py">import matplotlib

matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'</code></pre><h3 id="gr-ficos-de-dispersi-n-en-matplotlib"><strong>Gráficos de Dispersión en<strong><strong><strong> MatPlotLib</strong></strong></strong></strong></h3><p>En un diagrama de dispersión, los valores de 2 variables se representan como puntos en una cuadrícula bidimensional. Además, también puede utilizar una tercera variable para determinar el tamaño o el color de los puntos. Probemos un ejemplo.</p><p>Usando información de la <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FIris_flower_data_set" rel="noopener noreferrer">Iris flower dataset</a> obtenermos &nbsp;medidas de muestra de sépalos y pétalos para tres especies de flores. El conjunto de datos de Iris se incluye con la biblioteca de Seaborn y puedes cargarlo como un DataFrame de Pandas.</p><pre><code class="language-py"># Load data into a Pandas dataframe
flowers_df = sns.load_dataset("iris")

flowers_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-159.png" class="kg-image" alt="image-159" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">flowers_df.species.unique()
# array(['setosa', 'versicolor', 'virginica'], dtype=object)</code></pre><p>Tratemos de visualizar la relación entre la longitud del sépalo y el ancho del sépalo. Nuestro primer instinto podría ser crear un gráfico de líneas usando <code>plt.plot</code>.</p><pre><code class="language-py">plt.plot(flowers_df.sepal_length, flowers_df.sepal_width);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-160.png" class="kg-image" alt="image-160" width="600" height="400" loading="lazy"></figure><p>El resultado no es muy informativo ya que hay demasiadas combinaciones de las dos propiedades dentro del conjunto de datos. No parece haber una relación simple entre ellos.</p><p>Podemos usar un diagrama de dispersión para visualizar cómo varía la longitud y el ancho del sépalo usando la función <code>scatterplot</code> de <code>seaborn</code> ( <code>sns</code>).</p><pre><code class="language-py">sns.scatterplot(x=flowers_df.sepal_length, y=flowers_df.sepal_width);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-161.png" class="kg-image" alt="image-161" width="600" height="400" loading="lazy"></figure><p>Cómo agregar tonos en MatPlotLib</p><p>Observa cómo los puntos en el gráfico anterior parecen formar grupos distintos con algunos valores atípicos. Podemos colorear los puntos usando la especie de flor como matiz. También podemos agrandar los puntos usando el argumento <code>s</code> .</p><pre><code class="language-py">sns.scatterplot(x=flowers_df.sepal_length, y=flowers_df.sepal_width, hue=flowers_df.species, s=100);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-162.png" class="kg-image" alt="image-162" width="600" height="400" loading="lazy"></figure><p>Agregar matices hace que la trama sea más informativa. Inmediatamente podemos decir que los iris de Setosa tienen una longitud de sépalo más pequeña pero un ancho de sépalo más alto. Por el contrario, lo contrario es cierto para los lirios Virginica.</p><h3 id="c-mo-personalizar-las-gr-ficas-de-seaborn">Cómo personalizar las gráficas de Seaborn</h3><p>Dado que Seaborn usa internamente las funciones de trazado de Matplotlib, podemos usar funciones como <code>plt.figure</code> y <code>plt.title</code> para modificar la gráfica.</p><pre><code class="language-py">plt.figure(figsize=(12, 6))
plt.title('Sepal Dimensions')

sns.scatterplot(x=flowers_df.sepal_length, 
                y=flowers_df.sepal_width, 
                hue=flowers_df.species,
                s=100);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-163.png" class="kg-image" alt="image-163" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-trazar-datos-usando-marcos-de-datos-de-pandas-con-seaborn">Cómo trazar datos usando marcos de datos de Pandas con Seaborn</h3><p>Seaborn tiene soporte integrado para marcos de datos de Pandas. En lugar de pasar cada columna como una serie, puede proporcionar nombres de columna y usar el argumento <code>data</code> para especificar un DataFrame.</p><pre><code class="language-py">plt.title('Sepal Dimensions')
sns.scatterplot(x='sepal_length', 
                y='sepal_width', 
                hue='species',
                s=100,
                data=flowers_df);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-164.png" class="kg-image" alt="image-164" width="600" height="400" loading="lazy"></figure><h3 id="histogramas-en-matplotlib"><strong><strong>Histogram</strong>a<strong>s<strong><strong> </strong></strong></strong>e<strong><strong><strong>n MatPlotLib</strong></strong></strong></strong></h3><p>Un histograma representa la distribución de una variable creando contenedores (intervalos) a lo largo del rango de valores y mostrando barras verticales para indicar el número de observaciones en cada contenedor (bin).</p><p>Por ejemplo, visualicemos la distribución de valores de ancho de sépalo en el conjunto de datos Iris.Podemos usar la función <code>plt.hist</code> para crear un histograma.</p><pre><code class="language-py"># Load data into a Pandas dataframe
flowers_df = sns.load_dataset("iris")

flowers_df.sepal_width
# 0      3.5
# 1      3.0
# 2      3.2
# 3      3.1
# 4      3.6
#       ... 
# 145    3.0
# 146    2.5
# 147    3.0
# 148    3.4
# 149    3.0
# Name: sepal_width, Length: 150, dtype: float64</code></pre><pre><code class="language-py">plt.title("Distribution of Sepal Width")
plt.hist(flowers_df.sepal_width);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-165.png" class="kg-image" alt="image-165" width="600" height="400" loading="lazy"></figure><p>Inmediatamente podemos ver que los anchos de los sépalos se encuentran en el rango de 2,0 a 4,5, y alrededor de 35 valores están en el rango de 2,9 a 3,1, que parece ser el contenedor más poblado.</p><h3 id="c-mo-controlar-el-tama-o-y-la-cantidad-de-contenedores">Cómo controlar el tamaño y la cantidad de contenedores</h3><p>Podemos controlar el número de contenedores (bins), así como el tamaño de cada uno usando el argumento bins.</p><pre><code class="language-py"># Specifying the number of bins
plt.hist(flowers_df.sepal_width, bins=5);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-166.png" class="kg-image" alt="image-166" width="600" height="400" loading="lazy"></figure><pre><code class="language-py">import numpy as np

# Specifying the boundaries of each bin
plt.hist(flowers_df.sepal_width, bins=np.arange(2, 5, 0.25));</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-167.png" class="kg-image" alt="image-167" width="600" height="400" loading="lazy"></figure><pre><code class="language-py"># Bins of unequal sizes
plt.hist(flowers_df.sepal_width, bins=[1, 3, 4, 4.5]);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-168.png" class="kg-image" alt="image-168" width="600" height="400" loading="lazy"></figure><h4 id="c-mo-gestionar-m-ltiples-histogramas-en-matplotlib"><strong>Cómo gestionar múltiples<strong><strong><strong> Histogram</strong></strong></strong>a<strong><strong><strong>s </strong></strong></strong>e<strong><strong><strong>n MatPlotLib</strong></strong></strong></strong></h4><p>Similar a los gráficos de líneas, podemos dibujar varios histogramas en un solo gráfico. Podemos reducir la opacidad de cada histograma para que las barras de un histograma no oculten las de los demás.<br>Dibujemos histogramas separados para cada especie de flores.</p><pre><code class="language-py">setosa_df = flowers_df[flowers_df.species == 'setosa']
versicolor_df = flowers_df[flowers_df.species == 'versicolor']
virginica_df = flowers_df[flowers_df.species == 'virginica']

plt.hist(setosa_df.sepal_width, alpha=0.4, bins=np.arange(2, 5, 0.25));
plt.hist(versicolor_df.sepal_width, alpha=0.4, bins=np.arange(2, 5, 0.25));</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-169.png" class="kg-image" alt="image-169" width="600" height="400" loading="lazy"></figure><p>También podemos apilar varios histogramas uno encima del otro.</p><pre><code class="language-py">plt.title('Distribution of Sepal Width')

plt.hist([setosa_df.sepal_width, versicolor_df.sepal_width, virginica_df.sepal_width], 
         bins=np.arange(2, 5, 0.25), 
         stacked=True);

plt.legend(['Setosa', 'Versicolor', 'Virginica']);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-170.png" class="kg-image" alt="image-170" width="600" height="400" loading="lazy"></figure><h3 id="gr-ficos-de-barra-en-matplotlib"><strong>Gráficos de Barra en<strong><strong><strong> MatPlotLib</strong></strong></strong></strong></h3><p>Los gráficos de barras son bastante similares a los gráficos de líneas, es decir, muestran una secuencia de valores. Sin embargo, se muestra una barra para cada valor, en lugar de puntos conectados por líneas. Podemos usar la función <code>plt.bar</code> para graficarlos.</p><pre><code class="language-py">years = range(2000, 2006)
apples = [0.35, 0.6, 0.9, 0.8, 0.65, 0.8]
oranges = [0.4, 0.8, 0.9, 0.7, 0.6, 0.8]

plt.bar(years, oranges);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-171.png" class="kg-image" alt="image-171" width="600" height="400" loading="lazy"></figure><p>Al igual que en los histogramas; si queremos los resultados de las variables uno encima de otro (color anaranjado y azul). Usamos el argumento <code>bottom</code> de <code>plt.bar</code> para lograrlo.</p><pre><code class="language-py">plt.bar(years, apples)
plt.bar(years, oranges, bottom=apples);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-172.png" class="kg-image" alt="image-172" width="600" height="400" loading="lazy"></figure><h4 id="gr-ficos-de-barra-con-promedios-en-seaborn"><strong>Gráficos de Barra con promedios en<strong><strong><strong> Seaborn</strong></strong></strong></strong></h4><p>Veamos otro conjunto de datos de muestra incluido con Seaborn llamado <code>tips</code>. El conjunto de datos contiene información sobre el sexo, la hora del día, la factura total y el monto de la propina para los clientes que visitan un restaurante durante una semana.</p><pre><code class="language-py">tips_df = sns.load_dataset("tips");

tips_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-173.png" class="kg-image" alt="image-173" width="600" height="400" loading="lazy"></figure><p>Es posible que deseemos dibujar un gráfico de barras para visualizar cómo varía el monto promedio de la factura en los diferentes días de la semana. Una forma de hacer esto sería calcular los promedios diarios y luego usar &nbsp;<code>plt.bar</code> (puedes intentarlo como ejercicio).</p><p>Sin embargo, dado que este es un caso de uso muy común, la biblioteca Seaborn proporciona una función <code>barplot</code> que calcula los promedios automáticamente.</p><pre><code class="language-py">sns.barplot(x='day', y='total_bill', data=tips_df);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-174.png" class="kg-image" alt="image-174" width="600" height="400" loading="lazy"></figure><p>Las líneas que cortan cada barra representan la cantidad de variación en los valores. Por ejemplo, parece que la variación en la factura total es relativamente alta los viernes y baja los sábados.</p><p>Podemos también especificar mediante el argumento <code>hue</code> a fin de realizar comparaciones con una tercera categoría, por ejemplo, por género.</p><pre><code class="language-py">sns.barplot(x='day', y='total_bill', hue='sex', data=tips_df);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-175.png" class="kg-image" alt="image-175" width="600" height="400" loading="lazy"></figure><p>Puede hacer que las barras sean horizontales simplemente cambiando los ejes.</p><pre><code class="language-py">sns.barplot(x='total_bill', y='day', hue='sex', data=tips_df);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-176.png" class="kg-image" alt="image-176" width="600" height="400" loading="lazy"></figure><h3 id="heatmaps-en-seaborn"><strong><strong>Heatmaps </strong>e<strong>n Seaborn</strong></strong></h3><p>Un mapa de calor se usa para visualizar datos bidimensionales como una matriz o una tabla usando colores. La mejor manera de entenderlo es mirando un ejemplo.</p><p>Usaremos otro conjunto de datos de muestra de Seaborn, llamado <code>flights</code>, para visualizar el paso mensual de pasajeros en un aeropuerto durante 12 años.</p><pre><code class="language-py">flights_df = sns.load_dataset("flights").pivot("month", "year", "passengers")

flights_df</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-177.png" class="kg-image" alt="image-177" width="600" height="400" loading="lazy"></figure><p><code>flights_df</code> es una matriz con una fila para cada mes y una columna para cada año. Los valores muestran el número de pasajeros (en miles) que visitaron el aeropuerto en un mes específico del año. Podemos usar la función <code>sns.heatmap</code> para visualizar esto.</p><pre><code class="language-py">plt.title("No. of Passengers (1000s)")
sns.heatmap(flights_df);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-178.png" class="kg-image" alt="image-178" width="600" height="400" loading="lazy"></figure><p>Los colores más brillantes indican una pisada más alta en el aeropuerto. Mirando el gráfico, podemos inferir dos cosas:</p><p>1.La afluencia en el aeropuerto en un año determinado tiende a ser más alta alrededor de julio y agosto.<br>2.La afluencia en el aeropuerto en un mes determinado tiende a crecer año tras año.</p><p>También podemos mostrar los valores actuales especificando <code>annot=True</code> y usando el argumento<code>cmap</code> para cambiar el color.</p><pre><code class="language-py">plt.title("No. of Passengers (1000s)")
sns.heatmap(flights_df, fmt="d", annot=True, cmap='Blues');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-179.png" class="kg-image" alt="image-179" width="600" height="400" loading="lazy"></figure><h3 id="im-genes-in-matplotlib"><strong><strong>Im</strong>á<strong>ge</strong>ne<strong>s<strong><strong> in MatPlotLib</strong></strong></strong></strong></h3><p>También podemos usar Matplotlib para mostrar imágenes. Descarguemos una imagen de internet.</p><pre><code class="language-py">from urllib.request import urlretrieve

urlretrieve('https://i.imgur.com/SkPbq.jpg', 'chart.jpg');</code></pre><p>Antes de mostrar una imagen, debe leerse en la memoria usando el módulo <code>PIL</code>.</p><pre><code class="language-py">from PIL import Image

img = Image.open('chart.jpg')</code></pre><p>Una imagen cargada con PIL es simplemente una matriz numpy tridimensional que contiene intensidades de píxeles para los canales rojo, verde y azul (RGB) de la imagen. Podemos convertir la imagen en una matriz usando <code>np.array</code>.</p><pre><code>img_array = np.array(img)

img_array.shape
# (481, 640, 3)</code></pre><p>Por último, presentamos la imagen usando <code>plt.imshow</code>.</p><pre><code class="language-py">plt.imshow(img);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-180.png" class="kg-image" alt="image-180" width="600" height="400" loading="lazy"></figure><p>Podemos desactivar los ejes y las líneas de cuadrícula y mostrar un título usando las funciones relevantes.</p><pre><code class="language-py">plt.grid(False)
plt.title('A data science meme')
plt.axis('off')
plt.imshow(img);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-181.png" class="kg-image" alt="image-181" width="600" height="400" loading="lazy"></figure><p>Para mostrar una parte de la imagen, simplemente podemos seleccionar un segmento de la matriz numpy.</p><pre><code class="language-py">plt.grid(False)
plt.axis('off')
plt.imshow(img_array[125:325,105:305]);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-182.png" class="kg-image" alt="image-182" width="600" height="400" loading="lazy"></figure><h3 id="c-mo-trazar-gr-ficos-m-ltiples-en-una-cuadr-cula-en-matplotlib-y-seaborn">Cómo trazar gráficos múltiples en una cuadrícula en MatPlotLib y Seaborn</h3><p>Matplotlib y Seaborn también admiten el trazado de múltiples gráficos en una cuadrícula, usando <code>plt.subplots</code>, que devuelve un conjunto de ejes para trazar.</p><p>Aquí hay una cuadrícula unificada que muestra los diferentes tipos de gráficos que hemos cubierto en este tutorial.</p><pre><code class="language-py">fig, axes = plt.subplots(2, 3, figsize=(16, 8))

# Use the axes for plotting
axes[0,0].plot(years, apples, 's-b')
axes[0,0].plot(years, oranges, 'o--r')
axes[0,0].set_xlabel('Year')
axes[0,0].set_ylabel('Yield (tons per hectare)')
axes[0,0].legend(['Apples', 'Oranges']);
axes[0,0].set_title('Crop Yields in Kanto')


# Pass the axes into seaborn
axes[0,1].set_title('Sepal Length vs. Sepal Width')
sns.scatterplot(x=flowers_df.sepal_length, 
                y=flowers_df.sepal_width, 
                hue=flowers_df.species, 
                s=100, 
                ax=axes[0,1]);

# Use the axes for plotting
axes[0,2].set_title('Distribution of Sepal Width')
axes[0,2].hist([setosa_df.sepal_width, versicolor_df.sepal_width, virginica_df.sepal_width], 
         bins=np.arange(2, 5, 0.25), 
         stacked=True);

axes[0,2].legend(['Setosa', 'Versicolor', 'Virginica']);

# Pass the axes into seaborn
axes[1,0].set_title('Restaurant bills')
sns.barplot(x='day', y='total_bill', hue='sex', data=tips_df, ax=axes[1,0]);

# Pass the axes into seaborn
axes[1,1].set_title('Flight traffic')
sns.heatmap(flights_df, cmap='Blues', ax=axes[1,1]);

# Plot an image using the axes
axes[1,2].set_title('Data Science Meme')
axes[1,2].imshow(img)
axes[1,2].grid(False)
axes[1,2].set_xticks([])
axes[1,2].set_yticks([])

plt.tight_layout(pad=2);</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-183.png" class="kg-image" alt="image-183" width="600" height="400" loading="lazy"></figure><p>Para saber más: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2F3.3.1%2Fapi%2Faxes_api.html%23the-axes-class" rel="noopener noreferrer">https://matplotlib.org/3.3.1/api/axes_api.html#the-axes-class</a> .</p><h4 id="gr-ficas-por-pares-de-caracter-sticas-con-seaborn">Gráficas por pares de características con Seaborn</h4><p>Seaborn usa una función de ayuda <code>sns.pairplot</code> para representar múltiples gráficas por pares de características dentro de un DataFrame.</p><pre><code class="language-py">sns.pairplot(flowers_df, hue='species');</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-184.png" class="kg-image" alt="image-184" width="600" height="400" loading="lazy"><figcaption>See the full output <a href="https://jovian.ai/embed?url=https://jovian.ai/aakashns/python-matplotlib-data-visualization/" style="box-sizing: inherit; margin: 0px; padding: 0px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; line-height: inherit; font-family: inherit; font-size: 17.6px; vertical-align: baseline; background-color: transparent; color: var(--gray90); text-decoration: underline; cursor: pointer; word-break: break-word;">here</a>.</figcaption></figure><pre><code class="language-py">sns.pairplot(tips_df, hue='sex');</code></pre><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2021/10/image-185.png" class="kg-image" alt="image-185" width="600" height="400" loading="lazy"></figure><h3 id="resumen-y-lectura-adicional">Resumen y lectura adicional</h3><p>Hemos cubierto los siguientes temas en este tutorial:</p><ul><li>Cómo crear y personalizar gráficos de líneas usando Matplotlib</li><li>Cómo visualizar relaciones entre dos o más variables usando diagramas de dispersión</li><li>Cómo estudiar distribuciones de variables utilizando histogramas y gráficos de barras</li><li>Cómo visualizar datos bidimensionales usando heatmaps</li><li>Cómo mostrar imágenes en Matplotlib mediante <code>plt.imshow</code></li><li>Cómo graficar múltiples gráficas en Matplotlib y Seaborn.</li></ul><p>En este tutorial, cubrimos algunos de los conceptos fundamentales y técnicas populares para la visualización de datos usando Matplotlib y Seaborn. La visualización de datos es un campo muy amplio y apenas hemos arañado la superficie aquí. Consulta estas referencias para aprender y descubrir más:</p><ul><li>Visualización de Datos: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fjovian.ml%2Faakashns%2Fdataviz-cheatsheet" rel="noopener noreferrer">https://jovian.ml/aakashns/dataviz-cheatsheet</a></li><li>Seaborn: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fseaborn.pydata.org%2Fexamples%2Findex.html" rel="noopener noreferrer">https://seaborn.pydata.org/examples/index.html</a></li><li>Matplotlib: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fmatplotlib.org%2F3.1.1%2Fgallery%2Findex.html" rel="noopener noreferrer">https://matplotlib.org/3.1.1/gallery/index.html</a></li><li>Matplotlib tutorial: <a href="https://jovian.ai/outlink?url=https%3A%2F%2Fgithub.com%2Frougier%2Fmatplotlib-tutorial" rel="noopener noreferrer">https://github.com/rougier/matplotlib-tutorial</a></li></ul><h3 id="preguntas-de-revisi-n-para-verificar-tu-comprensi-n">Preguntas de revisión para verificar tu comprensión</h3><p>Intente responder las siguientes preguntas para evaluar su comprensión de los temas tratados en este cuaderno.:</p><ol><li>¿Qué es la visualización de datos?</li><li>¿Qué es Matplotlib?</li><li>¿Qué es Seaborn?</li><li>¿Cómo se instala Matplotlib y Seaborn?</li><li>¿Cómo importas Matplotlib y Seaborn? ¿Cuáles son los alias comunes que se utilizan al importar estos módulos?</li><li>¿Cuál es el propósito de <code>%matplotlib inline</code>?</li><li>¿Qué es un gráfico de líneas?</li><li>¿Cómo se traza un gráfico de líneas en Python? Ilustre con un ejemplo.</li><li>¿Cómo se especifican los valores para el eje X de un gráfico de líneas?</li><li>¿Cómo se especifican las etiquetas para los ejes de un gráfico?</li><li>¿Cómo se trazan gráficos de líneas múltiples en los mismos ejes?</li><li>¿Cómo se muestra una leyenda para un gráfico de líneas con varias líneas</li><li>¿Cómo se establece un título para un gráfico?</li><li>¿Cómo se muestran los marcadores en un gráfico de líneas?</li><li>¿Cuáles son las diferentes opciones para diseñar líneas y marcadores en gráficos de líneas? Ilustrar con ejemplos.</li><li>¿Cuál es el propósito del argumento <code>fmt</code> para <code>plt.plot</code>?</li><li>¿Donde puedes ver una lista de argumentos que se pueden utilizar en <code>plt.plot</code>?</li><li>¿Cómo cambias el tamaño de una figura en Matplotlib?</li><li>¿Cómo aplica los estilos predeterminados de Seaborn globalmente para todos los gráficos?</li><li>¿Cuáles son los estilos predefinidos disponibles en Seaborn? Ilustrar con ejemplos.</li><li>¿Qué es un diagrama de dispersión?</li><li>¿En qué se diferencia un diagrama de dispersión de un gráfico de líneas?</li><li>¿Cómo dibujas un diagrama de dispersión usando Seaborn? Ilustre con un ejemplo.</li><li>¿Cómo decide cuándo usar un gráfico de dispersión frente a un gráfico de líneas?</li><li>¿Cómo se especifican los colores de los puntos en un diagrama de dispersión usando una variable categórica?</li><li>¿Cómo se personaliza el título, el tamaño de la figura, la leyenda y el hijo de las tramas de Seaborn?</li><li>¿Cómo usas <code>sns.scatterplot</code> en un DataFrame de Pandas?</li><li>¿Qué es un Histograma?</li><li>¿Cuándo debes usar un histograma vs un gráfico lineal?</li><li>¿Cómo se dibuja un histograma usando Matplotlib? Ilustre con un ejemplo.</li><li>¿Qué son los "contenedores" en un histograma?</li><li>¿Cómo se cambian los tamaños de los contenedores en un histograma?</li><li>¿Cómo se cambia el número de contenedores en un histograma?</li><li>¿Cómo se muestran varios histogramas en los mismos ejes?</li><li>¿Cómo se apilan varios histogramas uno encima del otro?</li><li>¿Qué es un gráfico de barras?</li><li>¿Cómo se dibuja un gráfico de barras usando Matplotlib? Ilustre con un ejemplo.</li><li>¿Cuál es la diferencia entre un gráfico de barras y un histograma?</li><li>¿Cuál es la diferencia entre un gráfico de barras y un gráfico de líneas?</li><li>¿Cómo se apilan las barras una encima de la otra?</li><li>¿Cuál es la diferencia entre <code>plt.bar</code> y <code>sns.barplot</code>?</li><li>¿Qué representan las líneas en las barras de un gráfico de Seaborn?</li><li>¿Cómo se muestran gráficos de barras uno al lado del otro?</li><li>¿Cómo se dibuja un gráfico de barras horizontales?</li><li>¿Qué es un mapa de calor?</li><li>¿Qué tipo de datos se visualiza mejor con un mapa de calor?</li><li>¿Qué hace el método de pivote de un marco de datos de Pandas?</li><li>¿Cómo se dibuja un mapa de calor usando Seaborn? Ilustre con un ejemplo.</li><li>¿Cómo se cambia el esquema de color de un mapa de calor?</li><li>¿Cómo se muestran los valores originales del conjunto de datos en un mapa de calor?</li><li>¿Cómo se descargan imágenes de una URL en Python?</li><li>¿Cómo abres una imagen para procesarla en Python?</li><li>¿Cuál es el propósito del módulo <code>PIL</code> en Python?</li><li>¿Cómo convierte una imagen cargada usando PIL en una matriz Numpy?</li><li>¿Cuántas dimensiones tiene una matriz Numpy para una imagen? ¿Qué representa cada dimensión?</li><li>¿Qué son los "canales de color" en una imagen?</li><li>¿Qué es RGB?</li><li>¿Cómo se muestra una imagen usando Matplotlib?</li><li>¿Cómo se desactivan los ejes y las líneas de cuadrícula en un gráfico?</li><li>¿Cómo se muestra una parte de una imagen usando Matplotlib?</li><li>¿Cómo traza múltiples gráficos en una cuadrícula usando Matplotlib y Seaborn? Ilustrar con ejemplos.</li><li>¿Cuál es el propósito de la función <code>plt.subplots</code>?</li><li>¿Qué son las parcelas de pares en Seaborn? Ilustra con un ejemplo.</li><li>¿Cómo se exporta un gráfico a un archivo de imagen PNG usando Matplotlib?</li><li>¿Dónde puede obtener información sobre los diferentes tipos de gráficos que puede crear con Matplotlib y Seaborn?</li></ol><p>¡Felicitaciones por llegar al final de este tutorial! Ahora puedes aplicar estas habilidades para analizar conjuntos de datos del mundo real de fuentes como <a href="https://kaggle.com/datasets">Kaggle</a>.</p><p><br></p><p><br></p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
