Manual Introduccion Python 2024
Manual Introduccion Python 2024
PRIMERA EDICIÓN
2
PRÓLOGO PRIMERA EDICIÓN
INTRODUCCION A LA PROGRAMACION CON PYTHON
Es un honor compartir este pequeño manual a lo largo de todo este tiempo, fruto
de muchas jornadas laborales en diferentes instituciones públicas y privadas en los
últimos cinco años y de compartir mis conocimientos a la gran comunidad de ingeniería,
interesados en conocer y aprender un software libre tan versátil y potente, como es el
Python.
Es muy gratificante saber que son muchas las personas a las que he llegado a
enseñar de forma presencial e virtual en los temas de Geomática, que se encuentran
muy satisfechas por la enseñanza personalizada; y no es para más, mencionar que me
siento muy a gusto de lo compartido mis enseñanzas en este mundo muy competitivo.
Es así, que este texto nació bajo el nombre de: INTRODUCCION A LA
PROGRAMACION CON PYTHON, que impartí en la empresa GEOMATICA
AMBIENTAL S.R.L, que dio a disponibilidad de alcanzar a muchos estudiantes y
profesionales ligados a la ingeniería, por medio de las diferentes enseñanzas de forma
directa e indirecta.
Agradecer primeramente a Dios por darme la vida, por acompañarme siempre en
las circunstancias duras de la vida, también a mis padres BRAVO TRUJILLO
INOCENCIO Y MORALES BALTAZAR GENOVEBA, por el amor que me tienen, por
siempre aconsejarme y mostrarme las cosas duras de la vida, valorar su abnegado
sacrificio por hacer de mí una persona de bien y ser mis guías en la formación de mi
carrera profesional. A mi esposa JULY CLARIBEL CRUZ MONZON, hijos (Ghiro, Moddy,
Ariana, Lian, Ian y Kian), hermanas (Maritza y Jessica), tíos, y demás familiares por su
cariño y gratitud, pensar en ello represento estimulo indeclinable de superación.
Agradecer a todos los autores de los módulos de Python que hacen posible el
desarrollo de la programación más sencilla y generar procesos automatizados por su
tiempo y creación de los módulos de forma libre acceso en Python.
Esperando que sea de su total agrado y con ánimos de buscar siempre la mejora
continua, me despido, no sin antes, agradecer cualquier sugerencia y aporte para la
prosperidad del presente.
Atentamente:
Ing. Nino Frank Bravo Morales
Especialista Geomática
3
Curso virtual que se realizó para aprender conjuntamente con el manual
https://www.geomatica.pe/cursos/introduccion-la-programacion-con-python
4
ÍNDICE GENERAL
I. Introducción e Instalación Python .................................................................... 12
2.2.3.4. Logaritmos.................................................................. 32
5
2.2.3.5. Funciones trigonométricas ......................................... 32
2.4. Boleanos................................................................................................. 36
6
2.7.4. Concatenación y Repetición ....................................................... 41
2.8. Conjunto................................................................................................. 42
7
2.11.1. Módulo pandas ........................................................................... 53
8
5.1. Matplotlib............................................................................................... 76
5.2.4.1. Relacionales................................................................ 89
9
5.2.4.2. Distribuciones ............................................................. 95
10
7.2.2. shutil.move ................................................................................. 121
11
I. Introducción e Instalación Python
1.1. Antecedentes generales Python
Es un lenguaje de programación de alto nivel, interpretado y de propósito general,
creado por Guido van Rossum y lanzado por primera vez en 1991. Es conocido por
su sintaxis clara y legible, lo que lo convierte en una excelente opción para
principiantes y expertos por igual.
Python es un lenguaje multipropósito que se puede utilizar para una amplia variedad
de tareas, incluyendo:
• Desarrollo web: Con frameworks como Django y Flask, Python es una opción
popular para construir aplicaciones web dinámicas y escalables.
• Análisis de datos: Bibliotecas como NumPy, Pandas y Matplotlib hacen que
Python sea una opción líder para el análisis y visualización de datos.
• Aprendizaje automático y inteligencia artificial: Con bibliotecas como
TensorFlow, PyTorch y scikit-learn, Python es ampliamente utilizado en el
campo del aprendizaje automático y la inteligencia artificial.
• Automatización de tareas: Python es ideal para escribir scripts que automatizan
tareas repetitivas y simplifican procesos.
• Desarrollo de aplicaciones de escritorio y juegos: Con bibliotecas como
Tkinter y Pygame, Python se puede utilizar para desarrollar una amplia variedad
de aplicaciones de escritorio y juegos.
•
1.2. Plataformas de Python
1.2.1. Entornos de Desarrollo Integrado – IDE
Es una aplicación de software que ayuda a los programadores a desarrollar
código de software de manera eficiente. Aumenta la productividad de los
desarrolladores al combinar capacidades como editar, crear, probar y
empaquetar software en una aplicación fácil de usar.
➢ PyCharm:
• Desarrollado por JetBrains.
• Ofrece autocompletado de código, depuración avanzada y gestión
de entornos virtuales.
• Disponible en versiones Community (gratuita) y Professional (de
pago).
12
➢ Visual Studio Code:
• Editor de código fuente ligero y potente.
• Soporta extensiones, incluyendo soporte para Python.
• Integración con Git, depurador y terminal incorporados.
➢ Spyder:
• IDE orientado a la ciencia de datos.
• Incluye un entorno interactivo, editor de scripts y herramientas de
depuración.
• Integración con bibliotecas como NumPy y Matplotlib.
➢ Thonny:
• IDE simple y fácil de usar, ideal para principiantes.
• Incluye un depurador visual y soporte para gestión de paquetes.
1.2.3. Notebooks
➢ Jupyter Notebook:
• Herramienta interactiva para crear y compartir documentos que
contienen código, ecuaciones y visualizaciones.
• Muy popular en la comunidad de ciencia de datos y aprendizaje
automático.
➢ Google Colab:
• Servicio basado en la nube que permite ejecutar Jupyter
Notebooks.
13
• Ofrece acceso a GPUs gratuitas para ejecutar código que requiere
mucho procesamiento.
➢ Zeppelin:
• Notebook web para el análisis de datos que permite ejecutar código
en varios lenguajes, incluyendo Python.
• Soporta visualizaciones y colaboraciones en tiempo real.
1.3.1. Ventajas
• Gratuito y accesible: Puedes acceder y usar Google Colab de forma gratuita,
lo que lo hace ideal para estudiantes, investigadores y profesionales que
necesitan un entorno potente sin costo.
• Colaboración en tiempo real: Permite trabajar de manera colaborativa en
proyectos, compartiendo cuadernos con colegas y editando en tiempo real.
• Acceso a GPUs y TPUs: Proporciona acceso a GPUs y TPUs, facilitando el
desarrollo y entrenamiento de modelos de machine learning sin necesidad
de hardware costoso.
• Integración con Google Drive: Facilita la conexión con Google Drive,
permitiendo guardar y acceder a archivos directamente desde tus cuadernos.
• Versatilidad y compatibilidad: Aunque he probado otras plataformas como
Deepnote y Kaggle, la versatilidad y compatibilidad de Google Colab lo
hacen mi opción preferida para la mayoría de los proyectos.
14
1.3.2. Introducción: ¿qué son las CPUs, GPUs y TPUs
A. CPUs (Unidades Centrales de Procesamiento)
Es el componente principal de un ordenador que realiza la mayoría de
los cálculos. Es responsable de ejecutar instrucciones de programas y
gestionar tareas generales.
Características:
✓ Generalmente tiene unos pocos núcleos (de 2 a 16 en muchos
casos).
✓ Es versátil y puede manejar diversas tareas, desde procesamiento
de texto hasta juegos.
✓ Se enfoca en la latencia, realizando tareas secuenciales de manera
eficiente.
B. GPUs (Unidades de Procesamiento Gráfico)
Originalmente diseñadas para renderizar gráficos en videojuegos, las
GPUs se utilizan cada vez más para tareas de computación paralela,
como el aprendizaje automático.
Características:
✓ Tienen cientos o miles de núcleos, lo que les permite procesar
muchas operaciones simultáneamente.
✓ Son especialmente eficaces en tareas que requieren el
procesamiento de grandes volúmenes de datos en paralelo, como el
entrenamiento de modelos de redes neuronales.
C. TPUs (Unidades de Procesamiento Tensorial)
Diseñadas por Google específicamente para acelerar el aprendizaje
profundo, las TPUs son hardware especializado optimizado para
operaciones de matrices, que son fundamentales en las redes
neuronales.
Características:
✓ Están diseñadas para ser altamente eficientes en operaciones
tensoriales, lo que las hace más rápidas que las GPUs en tareas de
aprendizaje profundo.
✓ Se utilizan en entornos de nube y están integradas en plataformas
como Google Cloud para facilitar el desarrollo y entrenamiento de
modelos de IA.
15
1.3.3. Primeros Pasos en Google Colab
a) Accede a Google Colab:
✓ Ve a Google Colab.
✓ Si no has iniciado sesión, hazlo con tu cuenta de Google.
16
Otra opción es ir a Google Drivers, hacer click en Nuevo y elegir Más
en el panel desplegable y luego "Google Collaboratory".
17
Sigue las instrucciones para autenticar y conectar tu cuenta de Google
Drive.
Botón de
Nombre compartir
script
Recursos
disponibles
Celda de
texto
Celda de
código
Archivo de
datos
Espacio
disponible
18
- Ctrl + C: Copiar celda.
- Ctrl + V: Pegar celda.
- Ctrl + Z: Deshacer.
- Ctrl + Y: Rehacer.
✓ Navegación
- Mover hacia arriba/abajo entre celdas: Arriba/Abajo
- Seleccionar celda: Enter (mientras estás en la celda)
- Entrar en modo de edición de celda: Enter
- Salir del modo de edición: Esc
✓ Formato y visualización
- Insertar una celda de texto (Markdown): Ctrl + M luego M
- Convertir celda de código a texto (Markdown): Ctrl + M luego
M
- Convertir celda de texto a código: Ctrl + M luego Y
- Ejecutar todas las celdas: Ctrl + F9
- Reiniciar entorno de ejecución: Ctrl + M luego . (punto)
✓ Otros atajos útiles
- Mostrar ayuda: Ctrl + H
- Abrir la paleta de comandos: Ctrl + Shift + P
- Abrir el menú de herramientas: Ctrl + Shift + I
g) Módulos en Google colab
Consultas que módulos tiene instalado por defecto
!pip list
19
Consultar sobre un módulo ya instalado
!pip show tensorflow
Actualizar un módulo
20
Figura 2. Instalación Python 3.11.9
Paso 3. En la siguiente secuencia activar todas las opciones Features.
21
Figura 4. Crear una carpeta en C y install.
Paso 5. Ahora verificamos en inicio abrimos Símbolo del sistema buscando
CMD. Escribimos python --version donde nos responderá la versión de Python.
22
Figura 5. Ventana de Simbología del sistema ponemos Python –version.
Paso 6. Ahora vamos a instalar la librería de pandas con el comando: pip
install pandas y es muy importante estar conectado a internet para que
automáticamente se descargue e instale.
23
Paso 9. Luego de instalar las librerías básicas vamos a iniciar JupyterLab:
jupyter-lab.exe.
24
1.5. Introducción de Jupyter notebook
1.5.1. Introducción al uso Jupyter Lab
El Jupyter Notebook (Cuaderno Jupyter) es un Software libre, estándares
abiertos y servicios web para computación interactiva en todos los lenguajes
de programación
25
b) Creación de carpeta
Para una forma ordenada de los archivos de los scripts, documentos,
datos espaciales, es recomendable acomodar en carpetas.
Clic en Python 3
Ubicación de la
de Notebook para
carpeta script
generar el primer
script
26
El trabajo en Jupyter se desarrolla a través de celdas pueden estar en
distintos modos: Código o Markdown. Mientras en el modo código se
escribirán las instrucciones para que Jupyter ejecute, en el modo
Markdown se incluirán el texto, el formato, las imágenes o el video de
acompañamiento.
27
II. Variables en Python
Es un nombre que se refiere a un objeto que reside en la memoria. El objeto puede
ser de alguno de los tipos vistos (número o cadena de texto), o alguno de los otros
tipos existentes en Python.
import keyword
print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class',
'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if',
'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try',
'while', 'with', 'yield']
28
Comentarios #
Dado un bloque de código, a veces puede ser útil explicar qué hace o en qué
consiste, o bien hacer que una línea no se ejecute por algún motivo, pero que siga
presente en dicho código. Si queremos hacer un comentario en una línea, utilizamos
#.
Observación. Los comentarios, como ya se ha dicho, pueden ser muy útiles a la
hora de entender nuestro código. Sin embargo, no conviene abusar de estos.
3.141592653589793
3.141592653589793
3.141592653589793
29
Ingresar en ayuda en el módulo
import math
print(help(math))
Help on built-in module math:
NAME
math
DESCRIPTION
This module provides access to the mathematical functions
defined by the C standard.
Suma + 2+2 4
Resta - 4-2 2
Multiplicación * 2*3 6
División / 4/2 2
Exponente ** 2**3 8
Residuo % 7%3 1
30
2.2.2. Operaciones Compuestas
Resultado (si a =
Operador Descripción Ejemplo Notas
10 y b = 3)
Multiplicación y
*= a *= b 30 a se multiplica por b.
asignación
a se asigna el residuo de
%= Módulo y asignación a %= b 1
a / b.
2.2.3.1. Constantes
math.pi: Valor de pi (π ≈ 3.14159).
math.e: Base del logaritmo natural (e ≈ 2.71828).
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
31
math.floor(x): Redondea x hacia abajo, al entero más cercano.
math.trunc(x): Trunca x, eliminando la parte decimal.
print(math.ceil(3.2)) # 4
print(math.floor(3.8)) # 3
print(math.trunc(3.9)) # 3
print(math.sqrt(16)) # 4.0
print(math.pow(2, 3)) # 8.0
print(math.exp(1)) # 2.718281828459045
2.2.3.4. Logaritmos
math.log(x): Calcula el logaritmo natural de x (en base e).
32
math.degrees(x): Convierte x de radianes a grados.
angulo = 90
radianes = math.radians(angulo)
print(math.sin(radianes)) # 1.0
print(math.cos(radianes)) # 0.0
print(math.degrees(math.asin(1))) # 90.0
2.3. String
Al ser una secuencia ordenada de elementos, significa que podemos usar
la indexación y seccionar la cadena de carácteres. La indexación se realiza
con corchetes [ ] luego del nombre de la variable.
String C U R S O P Y T H O N
Índice 0 1 2 3 4 5 6 7 8 9 10 11
Obtener la cantidad
Longitud de caracteres en una len("Hola") 4 Retorna un entero.
cadena
Acceder a un
Los índices comienzan
Indexación carácter específico "Python"[0] 'P'
en 0.
por su índice
33
2.3.2. Substrings
34
Verifica si la cadena comienza con sub,
.startswith(sub) "python".startswith("py") True
devuelve True o False
35
2.3.7. Métodos para Verificar Propiedades
2.4. Boleanos
El tipo booleano sólo puede tener dos valores: True (verdadero) y False
(falso).
2.3.3.1. Creación de valores booleanos
Puedes crear valores booleanos directamente:
a = True
b = False
36
Mayor o igual que: verifica si el operando de la
>= izquierda es mayor o igual que el de la 5 >= 5 True
derecha.
Elementos
Colección Tipo Mutabilidad Ordenada Uso Común
Únicos
Almacenar secuencias
Lista list Mutable Sí No
de elementos.
Almacenar datos que
Tupla tuple Inmutable Sí No
no deben cambiar.
37
Eliminación de
duplicados y
Conjunto set Mutable No Sí
operaciones
matemáticas.
Claves Almacenar pares
Diccionario dict Mutable No
únicas clave-valor.
Procesamiento
Array numpy.array Mutable Sí No
numérico eficiente.
Análisis de datos
DataFrame pandas.DataFrame Mutable Sí No
tabulares.
2.6. Listas
Las listas son colecciones ordenadas y mutables que permiten almacenar
elementos de diferentes tipos.
2.6.1. Tamaño de una lista
Para saber la longitud o el tamaño de una lista, podemos hacer uso de
la función len()
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
len(a) # 9
lista1 = [1, 2, 3]
lista2 = [4, 5]
print(lista1 + lista2) # [1, 2, 3, 4, 5]
print(lista1 * 2) # [1, 2, 3, 1, 2, 3]
38
2.6.4. Bucles con listas¶
Si quisiéramos imprimir por pantalla todos los elementos de una lista,
lo podríamos hacer mediante los índices.
for x in names:
print(x)
# Maria
# Juan
# Claudia
# Jorge
# Avelina
39
especifica, elimina el último
elemento
Devuelve el índice de la
index(x) primera aparición del lista.index(3) Índice del primer 3
elemento x en la lista
2.7. Tuplas
Es una variable que permite almacenar varios datos inmutables (no pueden
ser modificados una vez creados).
2.7.1. Tamaño de una tupla
Para saber la longitud o el tamaño de una tupla, podemos hacer uso de
la función len()
a = (1, 2, 3, 4, 5, 6, 7, 8, 9)
len(a) # 9
40
2.7.2. Elementos de una tupla
Podemos acceder a los elementos de una tupla mediante el índice que
ocupan con la sintaxis de claudator, []
tupla = (1, 2, 3)
a, b, c = tupla
print(a, b, c) # 1 2 3
tupla1 = (1, 2, 3)
tupla2 = (4, 5)
print(tupla1 + tupla2) # (1, 2, 3, 4, 5)
print(tupla1 * 2) # (1, 2, 3, 1, 2, 3)
41
2.8. Conjunto
Es una estructura de datos que almacena elementos únicos y sin orden
específico. Los conjuntos se utilizan principalmente cuando se necesita
trabajar con elementos únicos y realizar operaciones como unión,
intersección y diferencia.
2.8.1. Creación de Conjuntos
Para crear un conjunto, se utiliza la función set() o llaves {}. Para crear un
conjunto vacío, es necesario usar set() en lugar de {}, ya que las llaves vacías
crean un diccionario.
# Conjunto vacío
conjunto_vacio = set()
42
2.8.4. Operaciones de conjuntos
Método Descripción Ejemplo Resultado
Devuelve un nuevo
conjunto con todos
.union(otro) los elementos de a.union(b) {1, 2, 3, 4}
ambos conjuntos
(unión).
Devuelve un nuevo
conjunto con solo los
.intersection(otro) elementos presentes a.intersection(b) {2, 3}
en ambos conjuntos
(intersección).
Devuelve un nuevo
conjunto con los
elementos presentes
.difference(otro) a.difference(b) {1}
en el conjunto actual,
pero no en el otro
(diferencia).
Devuelve un nuevo
conjunto con
elementos que están
.symmetric_difference(otro) a.symmetric_difference(b) {1, 4}
en uno u otro
conjunto, pero no en
ambos.
2.9. Diccionario
Mientras que a las listas y tuplas se accede solo y únicamente por un número
de índice, los diccionarios permiten utilizar una clave para declarar y
acceder a un valor.
43
✓ Hetereogéneos: los elementos pueden ser de distinto tipo en un mismo
diccionario.
✓ Mutables: los elementos pueden ser modificados.
✓ Claves únicas: Las claves deben ser únicas; si se repite una clave, el
último valor asociado a la clave será el que permanezca.
# Diccionario vacío
mi_diccionario = {}
# Diccionario con valores
mi_diccionario = {
"nombre": "Juan",
"edad": [10,15,20,21],
"ciudad": "Madrid"
}
mi_diccionario["nombre"] = ["Nino","Frank","Bravo"]
mi_diccionario["edad"] [2] = 36 # Salida: [10,15,36,21]
44
2.9.4. Tamaño de un diccionario en clave
Para saber cuántos elementos contiene un diccionario, podemos usar
la función len()del siguiente modo:
45
2.10. Array
Es una estructura de datos que almacena una colección de elementos del mismo
tipo. Aunque Python no tiene un tipo de datos array incorporado en su núcleo (como
lo tienen otros lenguajes como C o Java), se pueden utilizar arrays a través de la
biblioteca estándar array o, más comúnmente, con NumPy, una biblioteca externa
que permite manejar y operar con arrays de forma mucho más eficiente.
46
2.10.1.2. Importación del Módulo
import numpy as np
tipo de
Descripción GeoTIFF
datos
np.bool_/bool Boolean (True or False) stored as a byte
np.int_/int Default integer type, normally int64
np.int8 Integer a single byte (-128–127)
np.int16 Integer 16 bits (-32768–32767) +
np.int32 Integer 32 bits (-2147483648–2147483647) +
Integer 64 bits (-9223372036854775808–
np.int64
9223372036854775807)
np.uint8 Unsigned integer 8 bits (0–255) +
np.uint16 Unsigned integer 16 bits (0–65535) +
np.uint32 Unsigned integer 32 bits (0–4294967295) +
np.uint64 Unsigned integer 64 bits (0–18446744073709551615)
np.float_/float Default float type, normally float64
np.float16 Half-precision (16 bit) float (-65504–65504)
np.float32 Single-precision (32 bit) float (1e-38–1e38) +
np.float64 Double-precision (64 bit) float (1e-308–1e308) +
47
b. Array multidimensional
48
2.10.1.6. Acceso y modificación de elementos
# Acceder a un elemento
elemento = array_2d[1, 2] # Elemento en la segunda fila, tercera
columna
print(elemento) # Salida: 6
# Modificar un elemento
array_2d[0, 1] = 10
print(array_2d)
# Salida:
# [[ 1 10 3]
# [ 4 5 6]]
array_2d.itemsize # 4
# Redimensionar un array
array_reshaped = array_1d.reshape((5, 1)) # Redimensionar a 5
filas y 1 columna
print(array_reshaped)
# Salida:
# [[1]
# [2]
# [3]
# [4]
# [5]]
49
2.10.1.9. Operaciones matemáticas con array
50
Cómputo de Calcula un percentil específico
np.nanpercentile(array,
percentil del array ignorando los valores
percentil)
ignorando NaN NaN.
Aplicar una función en cada fila o columna, de una matriz numpy bidimensional
51
2.10.1.10. Guardar y Cargar Arrays
2.11. Dataframe
Es una estructura de datos bidimensional, similar a una tabla en una base de datos
o a una hoja de cálculo en Excel, que forma parte de la biblioteca Pandas en Python.
Pandas es una biblioteca esencial para la manipulación y análisis de datos, y los
DataFrames son una de sus características más poderosas. La estructura puede
compararse con los diccionarios de Python. Efectivamente, las claves son los
nombres de las columnas y los valores son las Series.
52
2.11.1. Módulo pandas
Es una librería de Python especializada en el manejo y análisis de estructuras
de datos.
Las principales características de esta librería son:
53
2.11.1.3. Importación del Módulo
import pandas as pd
lista = [[1, 2], [2, 4], [3, 6], [4, 8], [5, 10]]
df2 = pd.DataFrame(data = lista,
columns = ["x", "y"])
print(df2)
x y
0 1 2
1 2 4
2 3 6
3 4 8
4 5 10
54
✓ Crear dataframe según formato CSV
df = pd.read_excel(r"Ruta\Datos_Excel.xlsx")
df.head(3)
Temperatura Pais Precipitacion Altitud
0 25 Bolivia 300 1500
1 20 Brasil 325 1800
2 30 Ecuador 400 2500
55
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8 entries, 0 to 7
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Temperatura 8 non-null int64
1 Pais 8 non-null object
2 Precipitacion 8 non-null int64
3 Altitud 8 non-null int64
dtypes: int64(3), object(1)
memory usage: 388.0+ bytes
df.describe()
Temperatura Precipitacion Altitud
count 8.000000 8.000000 8.000000
mean 24.250000 361.500000 2637.500000
std 4.949747 48.983962 738.603895
min 15.000000 300.000000 1500.000000
25% 23.000000 323.750000 2325.000000
50% 25.000000 356.000000 2600.000000
75% 26.250000 388.750000 3125.000000
max 30.000000 450.000000 3600.000000
df.shape
(8, 4)
df.columns
Index(['Temp', 'Pais', 'Prep', 'Altitud'], dtype='object')
56
df.columns = ["TEMP", "PAIS","PREP","ALT"]
df.dtypes
Temperatura int64
Pais object
Precipitacion int64
Altitud int64
dtype: object
loc[]
Selecciona filas y columnas por etiquetas o nombres.
iloc[]
Selecciona filas y columnas por posición (índices).
df.iloc[0]
TEMP 25
PAIS Bolivia
PREP 300
ALT 1500
Name: 0, dtype: object
at[]
Accede a un único valor utilizando etiquetas.
iat[]
Accede a un único valor utilizando índices.
57
dato = df.iat[1, 2]
print(dato)
325
filter()
Filtra el DataFrame por nombres de columnas o
índices específicos.
sort_values(by, ascending=True):
Ordena los datos por una o varias columnas.
sort_index():
Ordena por el índice.
dato = df.sort_index(ascending=False)
dato.head(5)
TEMP PAIS PREP ALT
7 25 Peru 385 2600
6 24 Ecuador 360 3500
5 15 Peru 352 3600
4 30 Chile 320 2600
3 25 Colombia 450 3000
58
dropna():
Elimina filas (por defecto) o columnas con valores
nulos (NaN).
base.dropna()
A B C
Feb 5 4.0 2.0
Mar 4 1.0 2.0
fillna(valor):
Rellena los valores nulos con un valor específico, como
0, media, etc.
base.fillna(0)
A B C
Ene 1 3.0 0
Feb 5 4.0 2.0
Mar 4 1.0 2.0
Abr 7 0 3.0
drop(columns=['col1', 'col2']):
Elimina columnas específicas.
base.drop(columns=[“A”,“C”])
B
Ene 3.0
Feb 4.0
Mar 1.0
Abr 0
59
drop_duplicates():
Elimina filas duplicadas.
subset: Etiqueta de columna o secuencia de etiquetas,
opcional Considere solo ciertas columnas para
identificar duplicados, por defecto utiliza todas las
columnas.
Keep: Si queremos conservar la primera o última
aparición de cada valor duplicado con el parámetro keep,
defecto es first.
'first': Elimina duplicados excepto la primera aparición.
'last': Elimina duplicados excepto la última aparición.
`False`: Elimina todos los duplicados.
replace():
reemplaza valores específicos en el DataFrame.
df_sin['B'] = df_sin.rename({“B”:“N”})
A N C
Ene 1 10 0
Mar 4 1.0 2.0
Abr 7 0 3.0
60
2.11.1.8. Operaciones Estadísticas
df["TEMP"].mean() # 24.25
df["TEMP"].sum() # 194
df["TEMP"].min() # 15
df["TEMP"].max() # 30
value_counts()
df.value_counts("PAIS")
PAIS
Ecuador 2
Peru 2
Bolivia 1
Brasil 1
Chile 1
Colombia 1
Name: count, dtype: int64
61
count()
base.count()
A 4
B 3
C 3
dtype: int64
corr()
Calcula la correlación entre columnas numéricas.
df[["TEMP","ALT","PREP"]].corr()
TEMP ALT PREP
TEMP 1.000000 -0.280369 0.155550
ALT -0.280369 1.000000 0.464151
PREP 0.155550 0.464151 1.000000
std(), var()
Calcula la desviación estándar y la varianza,
respectivamente.
df[["TEMP","ALT","PREP"]].std()
TEMP 4.949747
ALT 738.603895
PREP 48.983962
dtype: float64
df[["TEMP","ALT","PREP"]].var()
TEMP 24.500000
ALT 545535.714286
PREP 2399.428571
dtype: float64
62
2.11.1.9. Agrupamiento y manipulación avanzada
groupby('columna')
agrupa el DataFrame por una o varias columnas.
pivot_table()
Crea una tabla pivote o tabla dinámica.
aggfunc puede tomar varias funciones de agregación
como sum, mean, count, min, max, entre otras.
63
# Crea tabla dinámica con función personalizada
tabla_pivot = df.pivot_table(values='TEMP', index='PAIS',
columns='ALT', aggfunc=rango)
melt()
Convierte un DataFrame ancho en uno largo.
64
merge()
# DataFrame de productos
productos = pd.DataFrame({'ProductoID': [1, 2, 3],
'Nombre': ['P-A', 'P-B', 'P-C']})
ProductoID Nombre
0 1 P-A
1 2 P-B
2 3 P-C
# DataFrame de ventas
ventas = pd.DataFrame({
'VentaID': [101, 102, 103, 104],
'ProductoID': [1, 2, 2, 3],
'Cantidad': [5, 10, 15, 20]
})
VentaID ProductoID Cantidad
0 101 1 5
1 102 2 10
2 103 2 15
3 104 3 20
65
concat():
2.11.1.10.Funciones de aplicación
apply(funcion)
Aplica una función a lo largo de un eje (columnas o
filas).
66
applymap(funcion)
aplica una función a cada elemento del DataFrame.
map()
Aplica una función a cada elemento de una serie.
67
# Aplicar map() a la columna 'Edad'
df['Clasificación'] = df['Edad'].map(clasificar_edad)
print(df)
Nombre Edad Clasificación
0 Alice 25 Joven
1 Bob 30 Adulto
2 Charlie 35 Adulto
agg(funcion)
Aplica una o varias funciones de agregación.
# Crear un DataFrame
data = { 'Grupo': ['A', 'A', 'B', 'B', 'C', 'C'],
'Valor': [10, 20, 30, 40, 50, 60],
'Cantidad': [1, 2, 1, 2, 1, 2]}
df = pd.DataFrame(data)
print(df)
Grupo Valor Cantidad
0 A 10 1
1 A 20 2
2 B 30 1
3 B 40 2
4 C 50 1
5 C 60 2
68
2.11.1.11.Manejo de fechas y tiempos
to_datetime()
convierte una columna en formato de fecha.
# Crear un DataFrame
data = {'Fecha': ['2024-01-01', '2024-02-15', '2024-03-10', '2024-04-22'],
'Valor': [100, 200, 300, 400]}
df = pd.DataFrame(data)
print(df)
Fecha Valor
0 2024-01-01 100
1 2024-02-15 200
2 2024-03-10 300
3 2024-04-22 400
dt()
Permite acceder a atributos de fechas, como año, mes,
día, hora, etc.
69
2.11.1.12.Guardar un DataFrame
70
III. Estructuras de control de flujo e interacción
3.1. Estructuras de Control de Decisión
Las estructuras de control de decisión (if, elif, else) permiten tomar decisiones en el
flujo de ejecución del programa.
3.1.1. Decisión if
Temp = 21
if (Temp >= 16 and Temp <= 31):
print("Es una temperatura adecuado")
Temp = 14
if (Temp >= 16 and Temp <= 30):
print("Es una temperatura adecuado")
else:
print("No es una temperatura adecuada")
71
Temp = 26
else:
Se utiliza para iterar sobre una secuencia (como una lista, una cadena o
un rango) y ejecutar un bloque de código por cada elemento en esa
secuencia. Este tipo de iteración se denomina iteración definida, ya que
el número de iteraciones está determinado por la longitud de la secuencia.
72
frutas = ["manzana", "banana", "cereza"]
print(fruta)
for i in range(5):
contador = 0
print(contador)
contador += 1
73
IV. Funciones en Python
def nombre_funcion(parametros):
# Código de la función
return resultado # Opcional
Características:
def: Es la palabra clave para definir una función.
nombre_funcion: El nombre que le das a la función.
parametros: Los valores de entrada que la función recibe (opcional).
return: Palabra clave para devolver un valor (opcional).
def saludar():
print("¡Hola! Bienvenido a Python.")
saludar()
74
4.3. Función con valores por defecto
Puedes dar valores predeterminados a los parámetros para que, si no
se pasa un valor, use el predeterminado.
def saludar(nombre="invitado"):
print("Hola", nombre)
saludar() # Salida: Hola, invitado!
saludar("Juan") # Salida: Hola, Juan!
a, p = calcular_rectangulo(5, 3)
print("Área:", a) # Salida: Área: 15
print("Perímetro:", p) # Salida: Perímetro: 16
75
V. Visualización de datos
5.1. Matplotlib
Creada en 2003 por John Hunter, nace como una alternativa a MATLAB. Se ha
convertido en una de las librerías de visualización más antiguas, pero sobre todo,
es sin duda la más popular.
5.1.1. Instalación
Para empezar a usar Matplotlib, primero necesitas instalarla. Puedes hacerlo
utilizando pip:
5.1.2. Importación
Una vez que hayas instalado Matplotlib, puedes importarla en tu script de
Python. Es común importar el módulo pyplot, que proporciona una interfaz
similar a MATLAB para la creación de gráficos:
"." Punto
"," Pixel
"o" Círculo
76
"1" Triángulo inferior
"8" Octagonal
"s" Cuadrado
"p" Pentágono
"*" Estrella
"h" Hexágono 1
"H" Hexágono 2
"D" Diamante
77
5.1.3.3. Estilo de temas
Matplotlib tiene una lista de estilos de presentaciones de gráficos ya
diseñados.
print(list(plt.style.available))
['Solarize_Light2', '_classic_test_patch', '_mpl-gallery', '_mpl-
gallery-nogrid', 'bmh', 'classic', 'dark_background', 'fast',
'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-v0_8', 'seaborn-v0_8-
bright', 'seaborn-v0_8-colorblind', 'seaborn-v0_8-dark', 'seaborn-
v0_8-dark-palette', 'seaborn-v0_8-darkgrid', 'seaborn-v0_8-deep',
'seaborn-v0_8-muted', 'seaborn-v0_8-notebook', 'seaborn-v0_8-
paper', 'seaborn-v0_8-pastel', 'seaborn-v0_8-poster', 'seaborn-v0_8-
talk', 'seaborn-v0_8-ticks', 'seaborn-v0_8-white', 'seaborn-v0_8-
whitegrid', 'tableau-colorblind10']
# Aplicar un estilo
plt.style.use('seaborn-v0_8-ticks')
78
5.1.4. Gráfico en matplotlib
5.1.3.4. plt.plot() lineal
Muestra la relación entre dos variables, típicamente con una variable
independiente en el eje X y una dependiente en el eje Y, método
lineal.
# Crear un DataFrame
datos = {'Tiempo': ['10:00', '11:00', '12:00', '13:00', '14:00'],
'Temperatura': [19, 22, 27, 29, 26]}
df = pd.DataFrame(datos)
x = df['Tiempo']
y = df['Temperatura']
# Grafico tipo lineal
plt.plot(x, y, # lista X y Y
label='Temperatura', # Etiqueta leyenda
marker='o', # tipo marcador
markersize=6, # tamaño marcador
markerfacecolor='red', # color marcador
color='blue', # Color linea
linewidth=1, # ancho linea
linestyle='--') # Tipo de linea
plt.xlabel("Hora del día", # Etiqueta x
fontsize=12, # Tamaño de fuente 12
fontname='Comic Sans MS')
plt.ylim(16, 32) # Rango de limite Y
plt.xlim(-0.5, 4.5) # Rango de limite X
plt.ylabel("Temperatura (°C)", # Etiqueta y
fontsize=12, # Tamaño de fuente 12
fontname='Comic Sans MS')
plt.title("Temperatura a lo largo del día", fontsize=16, color='red',
fontname='Comic Sans MS',# tipo letra
fontweight="bold") # Negrita
plt.grid(True, # Activa la cuadrícula
axis='y', # Mostrar linea y
color='gray', # color linea
linestyle='-.', # tipo linea
linewidth=0.5, # ancho linea
alpha=0.5) # transparencia
plt.legend(prop={'family': 'Comic Sans MS', 'size': 10}) # activar leyenda
# Añadir etiquetas en cada punto
for i in range(len(x)):
plt.text(x[i], y[i]+0.3, # Ubicacion etiqueta
y[i], fontsize=11, ha='center', # 'left','right' y 'center'
va='bottom') # 'bottom','top','center' y 'baseline'
plt.tight_layout() # Ajustar el diseño
plt.savefig("grafico_plot.jpg", dpi=300)
plt.show() # Mostrar grafico
79
5.1.3.5. plt.bar() – barra
Muestra categorías en el eje X y su frecuencia o valor en el eje Y.
Ideal para comparar diferentes categorías. Y barh es en horizontal.
80
5.1.3.6. plt.scatter() – dispersión
Útil para identificar correlaciones y patrones.
x = [1, 2, 3, 4, 5]
y = [7, 5, 2, 4, 3]
plt.figure(figsize=(8, 6))
plt.scatter(x, y, edgecolor='black',color="red", marker='s') # tipo marcador
plt.title('Relación entre Variable X e Y', fontsize=14, fontweight='bold')
plt.xlabel('Variable X', fontsize=12)
plt.ylabel('Variable Y', fontsize=12)
plt.grid(True, which='both', linestyle='--', linewidth=0.5, alpha=0.7)
for i in range(len(x)):
plt.text(x[i], y[i]+0.15,
f'({x[i]}, {y[i]})', # forma etiqueta
fontsize=10, ha='center', # 'left','right' y 'center'
va='bottom') # 'bottom','top','center' y 'baseline'
plt.tight_layout() # Ajustar el diseño
plt.savefig("grafico_dispersion.jpg", dpi=300)
plt.show()
81
5.1.3.7. plt.hist() – histograma
Visualización de la distribución de un conjunto de datos
cuantitativos, Muestra cómo los datos se agrupan en intervalos
(bins).
bins: Controla la cantidad de barras en el histograma.
import numpy as np
datos = [1, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5]
mean = np.mean(datos)
82
5.1.3.8. plt.pie() – circular
Representación de datos cualitativos para mostrar la proporción de
cada categoría. Visualiza la contribución de cada categoría al total.
83
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,10,20,21,22]
mean_d = np.mean(data)
box = plt.boxplot(data,
patch_artist=True,
widths=0.5,
boxprops=dict(facecolor='lightblue', color='blue'),
capprops=dict(color='magenta'),
medianprops=dict(color='red')) # mediana
plt.title('Boxplot', fontsize=16, fontweight='bold',fontname='Comic Sans
MS')
plt.xlabel('Grupos', fontsize=14)
plt.ylabel('Valores', fontsize=14)
plt.ylim(0, 23)
# Añadir líneas de referencia opcionales para resaltar rangos
plt.axhline(y=np.mean(data), color='green', linestyle='--',
linewidth=1, label='Media: '+ str(round(mean_d,2)))
plt.legend(prop={'family': 'Comic Sans MS', 'size': 10})
plt.grid(axis='y', linestyle='--', linewidth=0.5, alpha=0.7)
plt.tight_layout()
plt.savefig("grafico_boxplot.jpg", dpi=300)
plt.show()
84
5.1.5. plt.subplots() – ajuste figura
Un subplot es una parcela dentro de una figura de Matplotlib en la que se
puede dibujar un gráfico independiente. Al combinar varios subplots, se
puede crear una cuadrícula de gráficos, cada uno con su propio eje, título y
contenido.
# Generar datos
x = ['A', 'B', 'C', 'D']
y = [10, 15, 7, 20]
data = np.random.randn(1000)
# Crear la figura y subplots 2x2
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
fig.suptitle('Diferentes Tipos de Gráficos',
fontsize=16,fontweight='bold',fontname='Comi
c Sans MS')
# Gráfico de barras
axes[0, 0].bar(x, y, color='skyblue')
axes[0, 0].set_title('Gráfico de Barras',fontname='Comic Sans MS')
axes[0, 0].set_xlabel('Categorías')
axes[0, 0].set_ylabel('Valores')
axes[0, 0].set_ylim(0,23)
axes[0, 0].set_xlim(-0.5,3.5)
axes[0, 0].grid(axis='y', linestyle='--', linewidth=0.5)
# Histograma
axes[0, 1].hist(data, bins=20, color='lightgreen', edgecolor='black')
axes[0, 1].set_title('Histograma',fontname='Comic Sans MS')
axes[0, 1].set_xlabel('Valores')
axes[0, 1].set_ylabel('Frecuencia')
# Boxplot
axes[1, 0].boxplot(data, patch_artist=True,
boxprops=dict(facecolor='lightyellow'))
axes[1, 0].set_title('Boxplot',fontname='Comic Sans MS')
axes[1, 0].set_xlabel('Conjunto de Datos')
axes[1, 0].set_ylabel('Valores')
# Gráfico de pastel
sizes = [60, 20, 35, 45]
labels = ['A', 'B', 'C', 'D']
axes[1, 1].pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140,
colors=['lightcoral', 'lightblue', 'lightgreen',
'lightgray'])
axes[1, 1].set_title('Gráfico de Pastel',fontname='Comic Sans MS')
plt.tight_layout(rect=[0, 0, 1, 0.96])
plt.savefig("grafico_subplots.jpg", dpi=300)
plt.show()
85
5.2. Seaborn – visualización datos estadísticos:
En 2012 nace de la mano de Michael Waskom, Seaborn se centra en crear
visualizaciones estadísticas avanzadas, con un mayor nivel de elaboración,
incluyendo diagramas de violín, de caja y bigotes o mapas de calor.
Seaborn es una librería de visualización de datos para Python desarrollada sobre
matplotlib. Ofrece una interfaz de alto nivel para la creación de atractivas gráficas.
Además, está íntimamente integrada con las estructuras de datos de pandas, lo que
permite utilizar el nombre de los DataFrames y campos directamente como
argumentos de las funciones de visualización.
5.2.1. Instalación
Para empezar a usar Seaborn, primero necesitas instalarla. Puedes hacerlo
utilizando pip:
86
5.2.2. Importación
Una vez que hayas instalado seaborn, puedes importarla en tu script de
Python.
sns.set_theme(style="darkgrid")
sns.set_theme(palette="pastel")
87
• "paper": Tamaño más pequeño, ideal para gráficos en documentos
impresos.
• "notebook": Tamaño moderado, adecuado para mostrar en
pantallas de computadoras.
• "talk": Tamaño más grande, útil para presentaciones.
• "poster": Tamaño muy grande, ideal para gráficos en pósters y
presentaciones de gran formato.
sns.set_theme(context="talk")
sns.set_theme(font_scale=1.5)
88
# Configurar el tema de seaborn para un artículo científico
sns.set_theme(style="whitegrid",
palette="muted",
context="paper",
font="Comic Sans MS",
font_scale=1.2,
rc={"axes.titlesize": 16, "axes.labelsize": 14,
"legend.title_fontsize": 12, "legend.fontsize": 10})
5.2.4.1. Relacionales
El vínculo estadístico entre los puntos de datos se visualiza mediante
gráficos relacionales. Dado que la visualización ayuda a los seres
humanos a detectar tendencias y patrones en los datos, es
fundamental. El análisis estadístico es el proceso de determinar
cómo se relacionan entre sí las variables de un conjunto de datos y
sus relaciones.
89
a. Relplot
Es una herramienta versátil para crear gráficos relacionales, lo que
significa que se usa para visualizar la relación entre múltiples
variables en un conjunto de datos. Esta función permite crear
gráficos de dispersión (scatter plots) y gráficos de líneas (line plots),
y es particularmente útil para explorar cómo una variable de
respuesta se relaciona con una o más variables explicativas.
90
# Crear un gráfico de líneas
rela = sns.relplot(x='Especie',
y='Masa_g',
data=pinguinos,
kind='line', # tipo de gráfico línea
hue='Sexo', # Colorea los línea continuo o categoría
style='Sexo', # formas o tipos Línea
errorbar=("ci", 95), # Intervalo de confianza
markers=True, # Añade marcador línea
)
# Cambiar titulos y ejes
for ax in rela.axes.flat:
ax.set_xlabel('Especies', fontname='Comic Sans MS', fontsize=10)
ax.set_ylabel('Masa corporal (g)', fontname='Comic Sans MS', fontsize=10)
ax.set_title("Análisis de los Pinguinos", fontweight='bold',
fontname='Comic Sans MS', fontsize=13,color = "blue")
# Personalizar la fuente de la leyenda
plt.setp(rela._legend.get_texts(), fontname='Comic Sans MS')
plt.savefig("grafico_dispersion_linea.jpg", dpi=300, bbox_inches='tight')
plt.show()
91
b. Scatterplot
Esta función permite crear gráficos de dispersión
92
c. Lineplot
Permite generar grafico de líneas.
93
fig, axes = plt.subplots(1,2, figsize=(15,5))
fig.suptitle('Diferentes Tipos de Gráficos', fontsize=16,fontweight='bold',fontname='Comic Sans
MS')
# Crear un gráfico de dispersión scatterplot
sns.scatterplot(x='Longitud_pico_mm', # variable x
y='Masa_g', # variable y
data=pinguinos, # dato
hue='Especie', # Colorea los puntos continuo o categoria
style='Sexo', # formas o tipos Puntos
legend = "auto", # auto, brief, full, o False
#s = 50, # size Tamaño del punto
ax=axes[0]
)
# Personalizar las etiquetas de los ejes y el título utilizando Seaborn
axes[0].set_xlabel('Longitud del pico (mm)', fontsize=11, fontname='Comic Sans MS')
axes[0].set_ylabel('Masa corporal (g)', fontsize=11, fontname='Comic Sans MS')
axes[0].set_title('Relación entre Longitud del Pico y Masa Corporal', fontsize=13,
fontweight='bold', fontname='Comic Sans MS')
# Personalizar la leyenda
for text in axes[0].legend_.get_texts():
text.set_fontsize(9)
text.set_fontname('Comic Sans MS')
94
5.2.4.2. Distribuciones
Es una función muy versátil que combina la funcionalidad de varios
gráficos de distribución, como histogramas, gráficos de densidad y
gráficos de rug. Es útil para visualizar la distribución de una variable
numérica de manera sencilla y eficaz. Esta función es parte del módulo
seaborn y proporciona una manera moderna y flexible de crear gráficos
de distribución
a) Histplot
- Multiple:
Layer: Superpone los histogramas, es decir, los coloca uno
sobre otro con transparencia para comparar las distribuciones.
Stack: Apila los histogramas, mostrándolos uno encima del otro
para que la altura total refleje la suma de los conteos de ambas
distribuciones.
Dodge: Coloca los histogramas uno al lado del otro en cada bin
para facilitar la comparación directa.
Fill: Muestra los histogramas de forma normalizada para que la
altura de cada bin sume a 1, facilitando la comparación de
proporciones.
95
sns.displot(data=consumos, x='Total', # si cambias en vez x a y se mostrará horizontal
kde=True, # añade una línea de estimación de densidad de kernel (KDE)
hue= "Genero", #Permite agregar una variable categórica colore
kind='hist', # hist (defecto),kde y ecdf
bins=10, # Número de intervalos en el histograma
#col="Fumador", #Permite crear múltiples gráficos
#fill=True, # Relleno
#cumulative= True, # Acumulativo
multiple="stack", # Ajusta cómo se superponen. layer, "fill", dodge, stack
ec="green", # Color borde black
#color="blue",
#palette=["red","blue"], # Asigna el color para hue ["red","blue"], Spectral
stat="count", # density probability count
)
plt.ylabel('Recuento')
plt.savefig("Grafico_histplot.jpg", dpi=300, bbox_inches='tight')
plt.show()
línea de estimación de
densidad de kernel (KDE)
Bins: 10
96
b) kdeplot
Se utiliza para trazar gráficos de estimación de densidad de kernel
(KDE). Esta función es especialmente útil para representar de
manera visual la densidad de una distribución de datos de forma
suave y continua. A diferencia de los histogramas, que agrupan los
datos en intervalos discretos, kdeplot proporciona una
representación más precisa y continua de cómo se distribuyen los
datos.
Univariado: La curva KDE muestra qué tan probable es encontrar
valores de datos en diferentes partes del rango. La altura de la curva
en un punto específico refleja la densidad de los datos en esa región.
Bivariado: Los contornos y áreas sombreadas indican las regiones
donde los datos se concentran más. Las zonas más oscuras
representan áreas de mayor densidad de puntos.
97
# Gráfico KDE binaria
sns.kdeplot(data=consumos, x='Total',
y='Propina',
fill=True, # relleno sino contorno
cmap='Blues' # color densidad raster
)
plt.title('Distribución Binaria de Total factura y Propina')
plt.xlabel('Total Factura')
plt.ylabel('Propina')
plt.savefig("Grafico_kde_binaria.jpg", dpi=300, bbox_inches='tight')
plt.show()
c) Ecdfplot
Es una función que representa la proporción de puntos de datos que
son menores o iguales a un valor dado en un conjunto de datos. Es
particularmente útil para:
• Mostrar la distribución de los datos de forma acumulada.
• Identificar la mediana y percentiles.
• Comparar distribuciones de diferentes grupos.
- Stat controla cómo se representan los valores en el eje y:
proportion: Úsalo cuando quieras una representación general de
la distribución en términos de fracción del total. Es útil para
entender qué parte del total está contenida en un intervalo
específico.
98
percent: Úsalo cuando quieras mostrar los resultados en un
formato más intuitivo para la audiencia, ya que los porcentajes
son fáciles de interpretar.
count: Es ideal cuando necesitas conocer el número absoluto de
observaciones acumuladas a lo largo del rango de valores.
99
d) Rugplot
Se representa como pequeñas marcas (o "alfombras") en la base de
un gráfico, donde cada marca indica la posición de un punto de datos.
Esto es útil para observar cómo se distribuyen los datos de forma
discreta y puede complementar otros gráficos, como histogramas,
KDEs y ECDFs, proporcionando un contexto adicional.
# Gráfico KDE con Rugplot
plt.figure(figsize=(8, 6))
sns.kdeplot(data=consumos, x='Total', fill=True, color='lightblue')
sns.rugplot(data=consumos, x='Total', height=0.1, color='blue') # Rugplot
# Personalización del gráfico
plt.title('Distribución de Total factura con Rugplot y KDE')
plt.xlabel('Total factura')
plt.ylabel('Densidad')
plt.savefig("Grafico_ecdfplot_factura_genero.jpg", dpi=300,
bbox_inches='tight')
plt.show()
100
Nota: Complemento de un KDE o histograma: Añadir un rugplot a
un kdeplot o histograma puede ayudar a mostrar los datos
subyacentes y dar más contexto sobre la distribución.
5.2.4.3. Categóricos
son herramientas útiles para explorar la relación entre variables
categóricas y numéricas. Los gráficos categóricos permiten
visualizar distribuciones y comparaciones entre diferentes categorías
de datos.
Se va dividir en 3 funciones principales: dispersión, distribución y
estimación.
Para realizar los ejemplos se va trabajar con datos de consumos
(tips).
consumos = sns.load_dataset("tips")
consumos.columns = ["Total", "Propina", "Genero", "Fumador", "Dia", "Tipo", "Comensales"]
# cambiar nombre datos
consumos["Genero"] = consumos["Genero"].cat.rename_categories({'Male': 'Masculino', 'Female': 'Femenino'})
consumos["Dia"] = consumos["Dia"].cat.rename_categories({'Sun': 'Domingo',
'Sat': 'Sábado',
'Thur': 'Jueves',
'Fri': 'Viernes'})
consumos["Tipo"] = consumos["Tipo"].cat.rename_categories({'Dinner': 'Cena', 'Lunch': 'Almuerzo'})
A. Dispersión
- Stripplot
Es un gráfico en el que los puntos se colocan a lo largo de
una línea correspondiente a una categoría en el eje x o y. Es
similar a un gráfico de violín o un boxplot, pero en lugar de
mostrar un resumen estadístico, muestra cada punto de
datos individualmente, proporcionando una visión más
detallada de la dispersión.
101
sns.catplot(x="Dia",y="Total",
data=consumos,
hue='Comensales',
kind='strip',
col="Fumador",
s=35
)
# Personalizar el gráfico
#plt.title('Distribución de Total de Facturas por Día de la Semana', fontsize=13, fontweight='bold',
fontname='Comic Sans MS')
plt.xlabel('Día', fontsize=11, fontname='Comic Sans MS')
plt.ylabel('Total de Factura ($)', fontsize=11, fontname='Comic Sans MS')
# Cambiar el tamaño y tipo de fuente de los números en los ejes x e y
plt.xticks(fontsize=10, fontname='Comic Sans MS') # Personalizar los números del eje x
plt.yticks(fontsize=10, fontname='Comic Sans MS') # Personalizar los números del eje y
plt.grid(True, # Activa la cuadrícula
axis='y', # Mostrar linea y
color='gray', # color linea
linestyle='-.', # tipo linea
linewidth=0.5, # ancho linea
alpha=0.5)
plt.savefig("grafico_stripplot.jpg", dpi=300, bbox_inches='tight')
plt.show()
- Swarmplot
Es un tipo de gráfico de visualización de datos utilizado
principalmente para mostrar la distribución de un conjunto
de datos y resaltar la densidad de puntos en una dimensión.
Es especialmente útil cuando se desea observar la
distribución de puntos de datos individuales de una
categoría en particular.
102
sns.catplot(x="Dia",y="Total",
data=consumos,
hue='Comensales',
kind='swarm',
col="Fumador",
s=35
)
# Personalizar el gráfico
#plt.title('Distribución de Total de Facturas por Día de la Semana', fontsize=13, fontweight='bold',
fontname='Comic Sans MS')
plt.xlabel('Día', fontsize=11, fontname='Comic Sans MS')
plt.ylabel('Total de Factura ($)', fontsize=11, fontname='Comic Sans MS')
B. Distribución
- Boxplot
El boxplot (diagrama de caja) es un gráfico estadístico
estándar utilizado para mostrar la distribución de los datos
a través de sus cuartiles, destacando los valores atípicos.
Este gráfico muestra:
La caja: Representa el rango intercuartílico (IQR) que
abarca entre el primer cuartil (Q1) y el tercer cuartil (Q3).
103
La línea en la caja (mediana): Muestra la mediana de los
datos.
Bigotes: Se extienden desde los cuartiles hasta el valor más
lejano que no se considera un valor atípico (normalmente,
un valor dentro de 1.5 veces el IQR).
Puntos fuera de los bigotes: Representan los valores
atípicos o outliers, que se encuentran fuera de los bigotes.
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='box',
col="Fumador",
hue="Dia",
#color="red"
)
#plt.title('Distribución de Total de Facturas por Día de la Semana', fontsize=13,
fontweight='bold', fontname='Comic Sans MS')
plt.xlabel('Día', fontsize=11, fontname='Comic Sans MS')
plt.ylabel('Total de Factura ($)', fontsize=11, fontname='Comic Sans MS')
104
- Boxenplot
El boxenplot (diagrama de caja "mejorado" o "más
detallado") es una versión más avanzada del boxplot. Se
introdujo en Seaborn para manejar conjuntos de datos
grandes o distribuciones con muchos valores atípicos de
manera más efectiva.
El boxenplot ajusta dinámicamente el número de "cajas"
que se dibujan, dependiendo de la cantidad de datos y de la
distribución. De esta manera, es mejor para detectar la
variabilidad en las colas de la distribución, donde pueden
existir muchos valores atípicos.
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='boxen',
col="Fumador",
hue="Dia",
#color="red"
)
#plt.title('Distribución de Total de Facturas por Día de la Semana', fontsize=13,
fontweight='bold', fontname='Comic Sans MS')
plt.xlabel('Día', fontsize=11, fontname='Comic Sans MS')
plt.ylabel('Total de Factura ($)', fontsize=11, fontname='Comic Sans MS')
105
- Violínplot
Es una herramienta visual poderosa que combina
características de un boxplot y un kernel density plot (KDE)
para representar la distribución de un conjunto de datos. Es
muy útil para observar tanto la distribución de los datos
como su densidad, lo que permite identificar patrones como
la asimetría, la multimodalidad, la presencia de valores
atípicos y otros detalles que no son fácilmente visibles en
un boxplot clásico.
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='violin',
hue="Dia",
#color="red"
)
plt.savefig("grafico_violinplot1.jpg", dpi=300, bbox_inches='tight')
plt.show()
106
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='violin',
hue="Fumador",
#split=True
#color="red"
)
plt.savefig("grafico_violinplot2.jpg", dpi=300, bbox_inches='tight')
plt.show()
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='violin',
hue="Fumador",
split=True # Division
#color="red"
)
plt.savefig("grafico_violinplot3.jpg", dpi=300, bbox_inches='tight')
plt.show()
107
C. Estimación
- Pointplot
Es una visualización útil en Seaborn que se utiliza para
mostrar las relaciones entre variables categóricas y
numéricas. Este tipo de gráfico dibuja puntos que
representan medidas estadísticas (por ejemplo, medias,
medianas) de una variable numérica agrupada por
categorías de otra variable, y conecta estos puntos con
líneas para ayudar a visualizar las tendencias.
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='violin',
hue="Fumador",
split=True # Division
#color="red"
)
plt.savefig("grafico_violinplot3.jpg", dpi=300, bbox_inches='tight')
plt.show()
- Barplot
Es una herramienta visual muy útil para representar datos
categóricos mediante barras. Muestra la relación entre una
variable categórica y una numérica, lo que permite
visualizar y comparar las medias (o los valores agregados)
de los grupos definidos por la variable categórica.
108
sns.catplot(x="Dia",y="Total",
data=consumos,
kind='bar',
hue="Comensales",
#col="Fumador",
errorbar=("ci", 99),
palette='pastel' # 'deep', 'muted', 'bright', 'dark', 'colorblind',
'pastel'
)
plt.savefig("grafico_barplot.jpg", dpi=300, bbox_inches='tight')
plt.show()
- countplot
Es una visualización útil para contar y representar la
frecuencia de observaciones en una variable categórica. A
diferencia de un barplot, que muestra un resumen de datos
numéricos, el countplot se centra en contar cuántas veces
aparece cada categoría en el conjunto de datos.
ax=sns.catplot(x="Dia",
data=consumos,
kind='count',
hue="Comensales",
#col="Fumador",
palette='Spectral' # 'deep', 'muted', 'bright', 'dark', 'colorblind',
'pastel' viridis
)
# Mostrar el gráfico
plt.title('Distribución de visitas por día')
plt.xlabel('Día de la semana')
plt.ylabel('Recuento')
plt.savefig("grafico_count.jpg", dpi=300, bbox_inches='tight')
plt.show()
109
110
VI. Variables estadísticas y gráficos
Es elementos de una población o muestra que queremos describir. Puede tomar una serie
de valores.
6.1. Variable cualitativa (Categórico)
6.1.1. Nominales
Son variables que representan categorías sin un orden específico, como
colores, géneros o tipos de productos.
✓ Gráfico de Barras: Para mostrar la frecuencia o el conteo de cada
categoría.
111
6.1.2. Ordinales
Son variables que representan categorías con un orden implícito, como
niveles de satisfacción (bajo, medio, alto) o clasificación de rango.
✓ Gráfico de Barras Ordenado: Similar al gráfico de barras, pero con un
orden lógico en las categorías.
112
6.2. Variable cuantitativa (Cantidad)
6.2.1. Discretas
Representan valores numéricos contables (números enteros), como el número
de hijos o la cantidad de productos vendidos.
✓ Gráfico de Barras: Útil para mostrar la frecuencia de cada valor
numérico.
6.2.2. Continuas
Son variables que pueden tomar cualquier valor dentro de un rango, como
peso, altura o temperatura.
✓ Histograma: Ideal para mostrar la distribución de la variable continua.
113
import numpy as np
data = np.random.normal(0, 1, 1000) # Simulación de datos
plt.hist(data, bins=50, color="red")
plt.title("Histograma para Variable Cuantitativa Continua")
plt.savefig("grafico_6.jpg", dpi=300)
plt.show()
114
✓ Gráfico de Dispersión: Si se quiere mostrar la relación entre dos
variables continuas.
x = np.random.rand(50)
y = np.random.rand(50)
plt.scatter(x, y)
plt.title("Gráfico de Dispersión para Variables Cuantitativas Continuas")
plt.savefig("grafico_8.jpg", dpi=300)
plt.show()
115
✓ Gráfico de Barras Apilado o Agrupado: Para mostrar los totales y
subtotales de cada categoría.
116
✓ Series de Tiempo (Variable Temporal)
Si tu variable es temporal (como fecha u hora), puedes utilizar gráficos
de líneas o de áreas para mostrar cómo cambian las variables
cuantitativas a lo largo del tiempo.
Gráfico de Líneas para Series de Tiempo
117
Gráfico de Área para Resaltar Cambios
plt.fill_between(dates, values)
plt.title("Gráfico de Área para Series de Tiempo")
plt.xlabel("Fecha")
plt.ylabel("Valor")
plt.savefig("grafico_12.jpg", dpi=300)
plt.show()
118
VII. Operaciones de sistema de archivo
7.1.2. chdir(path)
Cambia el directorio actual de trabajo al especificado en path.
import os
os.chdir("/ruta/del/nuevo/directorio")
7.1.3. listdir(path)
Lista todos los archivos y carpetas en el directorio especificado (path). Si no
especificas un path, se utiliza el directorio actual.
files = os.listdir()
print(files)
7.1.4. mkdir(path)
Crea un nuevo directorio en la ruta especificada.
import os
os.mkdir("nueva_carpeta")
7.1.5. makedirs(path)
Crea un directorio con todas las carpetas intermedias necesarias.
import os
os.makedirs("carpeta1/carpeta2")
119
7.1.6. rename
Cambiar el nombre del directorio
import os
os.rename(“Carpeta1”, "Nuevo_nombre")
7.1.7. remove(path)
Elimina un archivo en la ruta especificada.
import os
os.remove("archivo.txt")
7.1.8. rmdir(path)
import os
os.rmdir("nueva_carpeta")
7.1.9. removedirs(path)
import os
os.removedirs("carpeta1/carpeta2")
7.1.10. path.join(path1, path2, ...)
Une varios componentes de una ruta en una sola ruta.
import os
ruta_completa = os.path.join(os.getcwd(),"archivo.txt")
'C:\\Users\\GEOMATICA\\01_Geo_Python\\Script \\archivo.txt'
7.1.11. path.exists(path)
Verifica si existe el archivo o directorio especificado.
import os
existe = os.path.exists("archivo.txt")
120
7.2. Módulo sutil - Operaciones de archivos de alto nivel
Ofrece varias operaciones de alto nivel en archivos y colecciones de archivos. En
particular, provee funciones que dan soporte a la copia y remoción de archivos.
7.2.1. shutil.copy
Crear una copia de un archivo
import shutil
shutil.copy("archivo_original.txt", "copia.txt")
7.2.2. shutil.move
Mover un archivo
import shutil
shutil.move("copia.txt", "nueva_ubicacion/copia.txt")
7.2.3. shutil.rmtree
Eliminar un directorio y su contenido
import shutil
shutil.rmtree("carpeta_a_eliminar")
import glob
# Buscar todos los archivos .txt en el directorio actual
archivos_txt = glob.glob("*.txt")
print(archivos_txt)
121
Uso de comodines
• *: representa cualquier número de caracteres, incluidos ninguno.
• ?: representa un único carácter.
• []: define un conjunto de caracteres.
Por ejemplo:
# Buscar archivos .txt y .md en el directorio actual
archivos_texto = glob.glob("*.{txt,md}")
print(archivos_texto)
122
7.3.4. Combinar glob y os
El módulo glob se usa comúnmente junto con os.path para gestionar rutas
de archivos:
# Obtener archivos .txt y mostrar su ruta completa
archivos_txt = glob.glob("*.txt")
rutas_completas = [os.path.abspath(archivo) for archivo in archivos_txt]
print(rutas_completas)
123