0% encontró este documento útil (0 votos)
12 vistas38 páginas

Apuntes Data Scien

notas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
12 vistas38 páginas

Apuntes Data Scien

notas
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 38

Data science

La ciencia de datos o conocida comúnmente como Data Science es una


ciencia multidisciplinaria que involucra conocimientos de matemáticas,
estadística y ciencias de la computación.

La persona que aplica la Data Science es conocida como científico de


datos. El científico de datos utiliza diversas herramientas a su alcance, así
como análisis estadísticos de datos, modelos predictivos y visualización de
datos, para poder encaminar de manera efectiva la toma de decisiones.

Entre las principales actividades para un científico de datos se encuentra la


creación de modelos predictivos y la visualización de datos. Nosotros
como científicos de datos utilizaremos el software Python, el cual nos
permite leer datos y crear a partir de ellos modelos predictivos y gráficas
de gran calidad.

Python se ha convertido en un lenguaje de programación masivo en el cual


se puede hacer casi cualquier proyecto de software. Además, Python
cuenta con una gran comunidad que la respalda que se especializa en
crear y compartir su propio software especializado con el mundo.

Para nuestro curso no es necesario que aprendas todos los detalles de


este lenguaje, pero eventualmente te irás familiarizando con sus funciones
más comunes.

¿Por qué Python? ¿Cuáles son las razones para aprender este lenguaje?

¿Qué es Python? 'Python' es un


Lenguaje de Programación de Propósito General que enfatiza la limpieza del
código, esto refiere a la claridad con la cual se puede leer el código que está
estructurado con Instrucciones: 'Limpias' y 'Cortas'. Si has tenido con anterioridad
algún curso de programación es muy probable que te parezca incluso que es
Pseudo-Código. 'Python' es multi paradigma, lo cual indica
que se puede utilizar: 'Programación Orientada a Objetos', 'Programación
Imperativa' y 'Programación Funcional'. Es Software Libre, lo cual indica que el
Código Fuente puede ser regido por quien quiera, a sí mismo es un Código Gratuito.
Además 'Python' cuenta con una gran comunidad que la respalda, esa misma
comunidad aporta creando paquetes descargables para realizar proyectos.
A lo largo del tiempo, la comunidad de Data Science ha creado impresionantes
paquetes, gracias a esto Python se ha convertido en una alternativa robusta y
popular en la comunidad de Data Science. Para nuestro uso, no es necesario que
aprendas todos los detalles del Lenguaje pero, eventualmente las iras
descubriendo con el uso frecuente. En nuestro siguiente vídeo, instalaremos
'Python' en cada uno de nuestros sistemas.

Es momento de introducirnos en el mundo de la programación en Python,


por lo que empezaremos a estudiar los elementos básicos e
indispensables que un programador debe tener.

Empezaremos definiendo de forma sencilla los tipos de datos que se


pueden utilizar en Python, las cadenas de texto y las listas. Además, te
presentaremos las estructuras de control básicas. Todos los aprendizajes
desarrollados en esta parte de tu curso serán reforzados con ejemplos de
programación para que te familiarices más rápidamente con Python.

Antes de adentrarnos al Manejo de Datos debemos de


familiarizarnos con algunos términos básicos del área. La palabra "Data" dentro
de nuestro contexto de 'Data Science' representa una colección de medidas.
Un 'Data Point', también conocido como 'Observación', hace referencia a las
instancias individuales de datos, mientras que, un 'Dataset' es un conjunto
estructurado de 'Data Points'. Cada Data Point puede contener múltiples tipos
de información o 'Data Types', números, textos. fechas. Cuando agrupamos
los Data Points según estas características, obtenemos
las variables del 'Data Pool'. Ilustraremos esos conceptos apoyándonos en el
Siguiente Ejemplo: Imaginemos que queremos encontrar si existe una
relación entre 'Las Horas de Sueño de un Conjunto de Alumnos 'y sus 'Calificaciones'.
Entre los datos que tenemos a nuestra disposición para realizar nuestra
investigación, resaltan 'La edad', 'Las horas de sueño', 'Las horas de estudio' y 'Las
calificaciones finales' obtenidas por múltiples alumnos. Como se observan en la
siguiente imagen. Nuestra Data en este caso, se refiere a
toda la información recolectada, los alumnos en el estudio son los diferentes
'Data Points', cada tributo de los Data Points son las variables y el Data Frame
es toda la Data Organizada de manera Tabular. Si observamos cada una de las
columnas, tiene información referente a los alumnos, tenemos valores numéricos
como lo es 'la edad', 'las horas de sueño' y sus 'calificaciones' pero, además tenemos
'nombres de personas', que son representados por cadenas de caracteres.
Continuemos analizando un Segundo Ejemplo: Ahora imaginemos que trabajamos
en un banco, y quisiéramos determinar si una persona es 'Apta' o 'No' para Recibir un
Préstamo. Las variables que podríamos conocer acerca de la persona son datos
como: 'Su edad', 'Su género', 'El historial crediticio' que esta persona tiene, 'Su
antigüedad como nuestro cliente', entre otras de posible relevancia. Todas estas
variables así como las utilizadas en el ejemplo de los alumnos
en ser clasificadas en los siguientes cuatro tipos básicos las variables
numéricas categóricas ordinales y las de texto primero hablaremos de los datos
numéricos es decir todos aquellos datos que pueden ser representados por un
número estos datos se subdividen en dos tipos los discretos y los continuos los
datos discretos son aquellos que se pueden cuantificar con valores enteros
por ejemplo el número de alumnos las unidades vendidas por un vendedor el
número de compra de un usuario e incluso el resultado de tirar un dado. Por otro
lado existen: Los Datos 'Continuos', los cuales utilizan números con punto
flotante. Por Ejemplo: La Estatura de una Persona, La Temperatura, El Tiempo de
Espera para Pasar a la Ventanilla de un banco, Los Salarios, Entre Otros. Una
manera sencilla de distinguir entre 'Variables Discretas' y 'Continuas' es
preguntarnos si la variable se puede 'Contar' o se puede 'Medir'. En caso de que
sea contada, es una 'Variable Discreta' y en caso de que se pueda medir es una
'Variable Continua'. Los datos categóricos son aquellos que
están asociados a las cualidades del objeto de estudio. Por Ejemplo: El género
de una persona, El color de un objeto, La raza, El estado de residencia, Entre
otros. A los elementos de una lista de datos categóricos se les puede asignar
un valor entero para manipularlo de una manera sencilla pero esta numeración, no
debe representar un orden jerárquico, es decir, ningún elemento tiene más
importancia que otro. Un ejemplo que ilustra lo anterior es una lista donde a
cada color le asignamos un número de forma aleatoria, " 1 " para el color 'Rojo', " 2 "
para el color 'Azul', " 3 " para el color 'Verde' y así sucesivamente para otros colores.
Recordemos que la numeración no indica que un color sea más importante que otro
solamente nos ayuda a distinguir que hay elementos diferentes entre ellos. Los
Datos Ordinales son Datos categóricos ordenados jerárquicamente, esto sucede
cuando evaluamos a los conductores de un Uber, la asignación de una calificación
de una película o la calificación de los productos que compramos por Internet.
Donde uno evalúa los productos utilizando palabras como Bueno
o Malo.Eel usuario sabe que un producto es Bueno y que es superior a un producto
evaluado como Regular o como Malo. Por último, los datos de Tipo Texto son los
datos que podemos observar usualmente en 'Comentarios', 'Publicaciones' o 'Tweets'. Como
su nombre lo indica, son campos de texto sin una estructura establecida. Este tipo
de datos los veremos en un vídeo posterior.

Ya que conocemos como funcionan las variables en el mundo real, vamos a ver
¿Cómo funcionan en el mundo de Python? Entonces una vez que tengamos abierta
nuestra aplicación Jupyter vamos a ir a los cuadernos del material del curso.
Estos, en nuestro caso, los tenemos en el escritorio en la carpeta de cuadernos y
vamos a abrir lo que se llama tipos de variables. Esto lo vamos a hacer en
Jupyter donde vamos a buscar: La carpeta
Escritorio/Cuadernos/Tipos de Variables Una vez abierto
podemos ver que ya el cuaderno está preparado, entonces lo vamos a ir
analizando poco a poco. Entonces Python es un lenguaje de tipeado dinámico (Dynamic
Typing)
eso implica que no hay que decirle, de que tipo son las variables, Python es
lo suficientemente inteligente para deducir de qué tipo son. Esto lo hace
viendo que hay a la parte de la derecha del igual,
analizándolo y guardandolo en la variable. Entonces aquí hay un Ejemplo:
' x = 12 ' en otros lenguajes como en Java tendríamos algo similar a esto
" int x = 12 " en Python simplemente lo ponemos
"x = 12" y lo podemos empezar a utilizar esa variable llamada 'x' y le
imprime sin ningún problema. Ahora, ¿Cómo sabemos que Python dedujo correctamente
el tipo de variable? Bueno, podemos imprimir el tipo, utilizamos la función
'print' seguida de una función llamada 'type' y ponemos la variable elemento,
ejecutamos y nos dice: "Clase Tipo Entera" Ahora en Python
a diferencia de otros lenguajes, podemos utilizar números enteros tan largos como
queramos, solamente limitados por la Memoria RAM de nuestra máquina. Por ejemplo,
tenemos un número increíblemente grande aquí. Incluso le hacemos una operación
le sumamos un '+ 1' y Python lo ejecuta sin ningún problema. Ahora, aparte del entero
utilizamos variables de tipo 'flotante'. Por ejemplo, tenemos aquí ' f = 5.26 '
La podemos imprimir al igual que al entero y nos va a imprimir de que tipo
es, sin ningún problema. Nos va a decir " Clase Tipo Float " y el flotante nos lo va a
poder que es ' 5.26 ' De forma similar podemos utilizar
Notación Científica, tenemos ' 12.2e4 ' esto implica que a partir del 12.2 el
punto lo va a dejar recorrer ¿Cuántas veces? pues el número de veces que le
indiquemos. Entonces nos da este valor. A parte de los enteros y los flotantes
podemos utilizar números imaginarios esto lo hace con una notación semejante
a esta, donde tenemos el valor de la parte entera y seguido de la parte imaginaria
separados por un operador (+) Entonces tenemos: " 2 + 4 "
Lo que comúnmente sería ' 4 ' y aquí lo manejamos como ' 4j ' y podemos
imprimir el tipo de variable. Esto nos indica que la variable " i " es de tipo
Compleja y podemos hacer operaciones con números
imaginarios, de forma como lo haríamos con cualquier 'entero' o 'flotante'. Otro tipo
de dato muy interesante Python, son las 'Cadenas de Texto' en este ejemplo tenemos
una 's' que es igual a " Hola Mundo " (s = Hola Mundo) si nosotros imprimimos el tipo de esa
variable nos lo imprime correctamente, que es de clase
' str ' siendo una abreviación de la palabra " String "
Además podemos hacer uso de valores 'Booleanos' Tenemos 'b = True'
donde 'True' la primera letra tiene que llevar Mayúscula, de forma similar puede
ser 'False', donde la 'F' tiene que ser Mayúscula. Son los únicos 2 valores que
pueden contener un valor booleano y los procesa sin ningún problema
Entonces, los invito a hacer el siguiente Reto. Determinar el tipo de variable de
los siguientes elementos e imprimirlos en pantalla, si alguno no es posible
indicar ¿Por qué no es posible? Una vez concluido el reto los esperaré en el
Tipos de variables en python

1. Numéricos
Enteros (int): Números sin decimales.
python
Copiar código
edad = 26 # Ejemplo de entero

Flotantes (float): Números con decimales.


python
Copiar código
precio = 19.99 # Ejemplo de flotante


● Números complejos (complex): Números con parte real e imaginaria.
python
Copiar código
numero_complejo = 3 + 4j # Ejemplo de número complejo

int es la abreviatura de "integer", que en inglés significa entero. En programación, int es


un tipo de dato que representa números enteros, es decir, números sin decimales
(positivos, negativos o el cero).

Ejemplos de números enteros (int):


python
Copiar código
a = 10 # Entero positivo
b = -3 # Entero negativo
c = 0 # Cero (también es un entero)

1. float (Flotante)
● Significa: Números con decimales.

Ejemplo:
python
Copiar código
temperatura = 36.5 # Número con decimales
precio = 19.99 # Precio de un producto


● Dato curioso: Aunque no lo veas, los números flotantes tienen más precisión de la
que se muestra (internamente Python guarda más decimales).

2. str (String o Cadena de texto)


● Significa: Texto o cadena de caracteres (letras, palabras, símbolos, números, etc.).

Ejemplo:
python
Copiar código
nombre = "José"
saludo = "Hola, ¿cómo estás?"
numero_como_texto = "1234" # Aunque parece un número, es texto
porque está entre comillas.


● Dato curioso: Las cadenas pueden ser entre comillas simples (') o dobles (").
Ambas funcionan igual.

3. bool (Booleano)

● Significa: Valores lógicos: Verdadero (True) o Falso (False).

Ejemplo:
python
Copiar código
es_mayor_de_edad = True
tiene_licencia = False


● Dato curioso: Los booleanos se usan mucho en decisiones y condiciones (como en
if, while).

4. list (Lista)
● Significa: Una colección ordenada de datos que pueden ser de cualquier tipo
(pueden ser mezclados).

Ejemplo:
python
Copiar código
frutas = ["manzana", "pera", "naranja"] # Lista de cadenas
numeros = [1, 2, 3, 4.5] # Lista de números
combinada = [1, "hola", True] # Lista con datos de
diferentes tipos


● Dato curioso: Las listas son mutables, es decir, puedes modificar sus valores.

5. tuple (Tupla)
● Significa: Una colección ordenada, pero inmutable (no puedes cambiar sus
valores después de crearlas).

Ejemplo:
python
Copiar código
coordenadas = (10, 20) # No puedes cambiar estos valores
colores = ("rojo", "azul", "verde")


● Dato curioso: Se usan cuando los datos deben ser constantes (por ejemplo, las
coordenadas de un mapa).

6. set (Conjunto)
● Significa: Una colección desordenada de elementos únicos (no puede haber
duplicados).

Ejemplo:
python
Copiar código
colores = {"rojo", "azul", "verde"}
numeros = {1, 2, 3, 3, 2} # Automáticamente elimina duplicados → {1, 2,
3}


● Dato curioso: No puedes acceder a elementos por su posición como en una lista,
porque no tienen un orden.

¿Qué es un número complejo en Python?


Un número complejo tiene dos partes:

1. Parte real (número "normal", como los enteros o flotantes).


2. Parte imaginaria, que se representa con la letra j en Python (en matemáticas, se
usa i).

En Python, los números complejos se escriben de esta manera:

python
Copiar código
parte_real + parte_imaginaria*j

Ejemplo básico:
python
Copiar código
numero_complejo = 3 + 4j
print(type(numero_complejo)) # Esto imprimirá: <class 'complex'>

● 3: Es la parte real.
● 4j: Es la parte imaginaria.

Si estás trabajando con una lista y ya la has creado, puedes realizar las siguientes
operaciones sin tener que redefinirla cada vez:

python
Copiar código
# Crear la lista
numeros = [10, 20, 30, 40, 50]

# Imprimir el segundo número


print(numeros[1]) # Imprime 20

# Cambiar el tercer número por 99


numeros[2] = 99
print(numeros) # Imprime [10, 20, 99, 40, 50]

# Agregar el número 60 al final de la lista


numeros.append(60)
print(numeros) # Imprime [10, 20, 99, 40, 50, 60]

# Eliminar el primer número de la lista


numeros.pop(0)
print(numeros) # Imprime [20, 99, 40, 50, 60]

append() y pop() son dos métodos muy comunes para manipular


listas en Python:
append(): Se utiliza para agregar un elemento al final de la lista.
python
Copiar código
lista = [10, 20, 30]
lista.append(40) # Agrega el número 40 al final de la lista
print(lista) # Imprime [10, 20, 30, 40]

1.

pop(): Se utiliza para eliminar y devolver el último elemento de la lista. Si le pasas un


índice, eliminará el elemento en esa posición.
python
Copiar código
lista = [10, 20, 30]
lista.pop() # Elimina el último elemento (30)
print(lista) # Imprime [10, 20]

# Si quieres eliminar un elemento en una posición específica:


lista.pop(0) # Elimina el primer elemento (10)

2. print(lista) # Imprime [20]

Estructuras de
control
Las estructuras de control nos permiten controlar el flujo de ejecución de nuestros
programas. En Python, las estructuras de control más comunes son las estructuras
condicionales y los bucles. Estas estructuras nos permiten tomar decisiones y
repetir bloques de código según ciertas condiciones.
Las estructuras condicionales nos permiten ejecutar diferentes bloques de código
según se cumpla o no una determinada condición. En Python, las estructuras
condicionales más utilizadas son if, if-else y if-elif-else.

● IF
La estructura if se utiliza para ejecutar un bloque de código si una condición es
verdadera. La sintaxis básica es la siguiente:

if condicion:

# Bloque de código a ejecutar si la condición es


verdadera

instrucciones
Ejemplo:

edad = 18

if edad >= 18:

print ("Eres mayor de edad.")

● IF-ELSE
La estructura if-else nos permite especificar un bloque de código alternativo que se
ejecutará si la condición del if es falsa. La sintaxis básica es la siguiente:

edad = 15

if edad >= 18:

print ("Eres mayor de edad.")

else:

print ("eres menor de edad.")

● IF-ELIF-ELSE
La estructura if-elif-else nos permite especificar múltiples condiciones y bloques de
código alternativos. La sintaxis básica es la siguiente:

if condicion1:

# Bloque de código a ejecutar si la condicion1 es


verdadera

instrucciones

elif condicion2:

# Bloque de código a ejecutar si la condicion2 es


verdadera

instrucciones

else:

# Bloque de código a ejecutar si ninguna condición


anterior es verdadera

Ejemplo

calificacion = 75

if calificacion >=90:

print("excelente")

elif calificacion >=80:

print("muy bueno")

elif calificacion >=70:

print("bueno")

else:
print("debe mejorar")
En este ejemplo, se evalúan múltiples condiciones en orden. Si la variable
calificación es mayor o igual a 90, se imprime "Excelente". Si no se cumple la
primera condición, pero calificación es mayor o igual a 80, se imprime "Muy bueno".
Si no se cumplen las condiciones anteriores, pero calificación es mayor o igual a 70,
se imprime "Bueno". Si ninguna de las condiciones anteriores es verdadera, se
ejecuta el bloque else y se imprime "Necesita mejorar".

Bucles /loops

For
El bucle for se utiliza para iterar sobre una secuencia (como una lista, una tupla o
una cadena) o cualquier objeto iterable. La sintaxis básica es la siguiente:

for variable in secuencia:

# Bloque de código a repetir

instrucciones
Ejemplo:

frutas = ["manzana", "banana", "naranja"]

for fruta in frutas:

print(fruta)
En este ejemplo, el bucle for itera sobre la lista frutas. En cada iteración, la variable
fruta toma el valor de un elemento de la lista, y se ejecuta el bloque de código
dentro del bucle. En este caso, se imprime cada fruta en una línea separada.

While
El bucle while se utiliza para repetir un bloque de código mientras una condición sea
verdadera. La sintaxis básica es la siguiente:
while condicion:

# Bloque de código a repetir

instrucciones
Ejemplo:

contador = 0

while contador < 5:

print(contador)

contador += 1
En este ejemplo, el bucle while se ejecuta mientras la variable contador sea menor
que 5. En cada iteración, se imprime el valor de contador y luego se incrementa en 1
mediante la instrucción contador += 1. El bucle se detendrá cuando contador
alcance el valor de 5.

Es importante tener cuidado al usar el bucle while, ya que, si la condición nunca se


vuelve falsa, el bucle se ejecutará indefinidamente, lo que se conoce como un bucle
infinito.

Control de bucles
Python proporciona algunas instrucciones especiales para controlar el flujo de
ejecución dentro de los bucles:

● Break
La instrucción break se utiliza para salir prematuramente de un bucle,
independientemente de la condición. Cuando se encuentra un break, el bucle se
detiene y el flujo de ejecución continúa con la siguiente instrucción fuera del bucle.

contador = 0
while True:

print(contador)

contador += 1

if contador == 5:

break
En este ejemplo, el bucle while se ejecuta indefinidamente debido a la condición
True. Sin embargo, dentro del bucle se utiliza una estructura condicional if para
verificar si contador es igual a 5. Cuando se cumple esta condición, se ejecuta la
instrucción break, lo que hace que el bucle se detenga y el flujo de ejecución
continúe con la siguiente instrucción fuera del bucle.

● Continue

La instrucción continue se utiliza para saltar el resto del bloque de código dentro de
un bucle y pasar a la siguiente iteración.

Ejemplo:

for i in range(10):

if i % 2 == 0:

continue

print(i)
n este ejemplo, el bucle for itera sobre los números del 0 al 9 utilizando la función
range(). Dentro del bucle, se verifica si el número es divisible por 2 utilizando el
operador de módulo %. Si el número es divisible por 2 (es decir, si es par), se
ejecuta la instrucción continue, lo que hace que se salte el resto del bloque de
código y se pase a la siguiente iteración del bucle. Como resultado, solo se
imprimirán los números impares.
● Pass

La instrucción pass es una operación nula que no hace nada. Se utiliza como
marcador de posición cuando se requiere una instrucción sintácticamente, pero no
se desea realizar ninguna acción.

Ejemplo:

for i in range(5):

pass
En este ejemplo, el bucle for itera sobre los números del 0 al 4, pero no se realiza
ninguna acción dentro del bucle debido a la instrucción pass. Esto puede ser útil
cuando se está desarrollando un programa y se desea reservar un bloque de código
para implementarlo más adelante.

Las estructuras de datos nos permiten organizar y almacenar datos de manera


eficiente en nuestros programas. Python proporciona varias estructuras de datos
integradas, como listas, tuplas, diccionarios y conjuntos, cada una con sus propias
características y usos.

Listas
Una lista es una estructura de datos mutable y ordenada que permite almacenar una
colección de elementos. Los elementos de una lista pueden ser de diferentes tipos
de datos y se encierran entre corchetes [], separados por comas.

● Creación y acceso
Para crear una lista, simplemente encierra los elementos entre corchetes:

frutas = ["manzana", "banana", "naranja"]


Para acceder a los elementos de una lista, utiliza el índice del elemento entre
corchetes. Los índices comienzan desde 0.

print(frutas[0]) # Imprime "manzana"

print(frutas[1]) # Imprime "banana"

print(frutas[2]) # Imprime "naranja"


También puedes acceder a los elementos desde el final de la lista utilizando índices
negativos. El índice -1 representa el último elemento, -2 representa el penúltimo, y
así sucesivamente.
print(frutas[-1]) # Imprime "naranja"

print(frutas[-2]) # Imprime "banana"

print(frutas[-3]) # Imprime "manzana"

● Métodos de listas
Las listas en Python tienen varios métodos incorporados que nos permiten
manipular y modificar los elementos de la lista. Algunos métodos comunes son:
● append(elemento): agrega un elemento al final de la lista.
● insert(indice, elemento): inserta un elemento en una posición específica
de la lista.
● remove(elemento): elimina la primera aparición de un elemento en la lista.
● pop(indice): elimina y devuelve el elemento en una posición específica de
la lista.
● sort(): ordena los elementos de la lista en orden ascendente.
● reverse(): invierte el orden de los elementos en la lista.
frutas = ["manzana", "banana", "naranja"]

frutas.append("pera")

print(frutas) # Imprime ["manzana", "banana",


"naranja", "pera"]

frutas.insert(1, "uva")

print(frutas) # Imprime ["manzana", "uva", "banana",


"naranja", "pera"]

frutas.remove("banana")

print(frutas) # Imprime ["manzana", "uva",


"naranja", "pera"]
fruta_eliminada = frutas.pop(2)

print(frutas) # Imprime ["manzana", "uva", "pera"]

print(fruta_eliminada) # Imprime "naranja"

frutas.sort()

print(frutas) # Imprime ["manzana", "pera", "uva"]

frutas.reverse()

print(frutas) # Imprime ["uva", "pera", "manzana"]

● Listas de comprensión
Las listas de comprensión son una forma concisa de crear nuevas listas basadas en
una secuencia existente. Permiten filtrar y transformar los elementos de una lista en
una sola línea de código.

nueva_lista = [expresion for elemento in secuencia if


condicion]

numeros = [1, 2, 3, 4, 5]

cuadrados = [x ** 2 for x in numeros if x % 2 == 0]

print(cuadrados) # Imprime [4, 16]


En este ejemplo, se crea una nueva lista llamada cuadrados, que contiene los
cuadrados de los números pares de la lista numeros. La expresión x ** 2 eleva cada
elemento al cuadrado, y la condición if x % 2 == 0 filtra solo los números pares.

4.1. Tuplas
Una tupla es una estructura de datos inmutable y ordenada que permite almacenar
una colección de elementos. Los elementos de una tupla se encierran entre
paréntesis (), separados por comas.

● Creación y acceso

Para crear una tupla, encierra los elementos entre paréntesis:

punto = (3, 4)
Para acceder a los elementos de una tupla, utiliza el índice del elemento entre
corchetes, similar a las listas:

print(punto[0]) # Imprime 3

print(punto[1]) # Imprime 4
A diferencia de las listas, las tuplas son inmutables, lo que significa que no se
pueden modificar una vez creadas. No se pueden agregar, eliminar o cambiar
elementos en una tupla existente.

Las tuplas son útiles cuando necesitas almacenar una colección de elementos que
no deben modificarse, como coordenadas o datos de configuración.

● Métodos de tuplas

Aunque las tuplas son inmutables, Python proporciona varios métodos útiles para
trabajar con ellas:

● count(elemento): devuelve el número de veces que aparece un elemento


en la tupla.
● index(elemento): devuelve el índice de la primera aparición de un
elemento en la tupla. Opcionalmente, se puede especificar el inicio y fin
de la búsqueda.
● len(tupla): aunque no es un método de tupla propiamente dicho, esta
función incorporada devuelve la longitud de la tupla.

4.2. Diccionarios
Un diccionario es una estructura de datos mutable y no ordenada que permite
almacenar pares de clave-valor. Cada elemento en un diccionario consiste en una
clave única y su valor correspondiente. Los diccionarios se encierran entre llaves {},
y los pares clave-valor se separan por comas.

● Creación y acceso

Para crear un diccionario, utiliza llaves y separa las claves y valores con dos puntos.

persona = {"nombre": "Juan", "edad": 25, "ciudad": "Madrid"}


Para acceder a los valores de un diccionario, utiliza la clave correspondiente entre
corchetes:

print(persona["nombre"]) # Imprime "Juan"

print(persona["edad"]) # Imprime 25

print(persona["ciudad"]) # Imprime "Madrid"

4.3. Conjuntos
(set)
Un conjunto es una estructura de datos mutable y no ordenada que permite
almacenar una colección de elementos únicos. Los conjuntos se encierran entre
llaves {} o se crean utilizando la función set().

● Creación y operaciones básicas

Para crear un conjunto, utiliza llaves o la función set():

Los conjuntos admiten operaciones matemáticas de conjuntos, como la unión (|), la


intersección (&), la diferencia (-) y la diferencia simétrica (^).

conjunto1 = {1, 2, 3}
conjunto2 = {3, 4, 5}

union = conjunto1 | conjunto2

print(union) # Imprime {1, 2, 3, 4, 5}

interseccion = conjunto1 & conjunto2

print(interseccion) # Imprime {3}

diferencia = conjunto1 - conjunto2

print(diferencia) # Imprime {1, 2}

diferencia_simetrica = conjunto1 ^ conjunto2

print(diferencia_simetrica) # Imprime {1, 2, 4, 5}

● Métodos de conjuntos

Los conjuntos en Python tienen varios métodos incorporados para manipular y


acceder a los elementos. Algunos métodos comunes son:

● add(elemento): agrega un elemento al conjunto.


● remove(elemento): elimina un elemento del conjunto. Si el elemento no
existe, genera un error.
● discard(elemento): elimina un elemento del conjunto si está presente. Si el
elemento no existe, no hace nada.
● clear(): elimina todos los elementos del conjunto.
Funciones
Las funciones son bloques de código reutilizables que nos permiten encapsular
tareas específicas y ejecutarlas cuando sea necesario. Las funciones nos ayudan a
organizar nuestro código, evitar la repetición y hacer que nuestros programas sean
más modulares y fáciles de mantener.

Definición y llamada de
funciones
Para definir una función en Python, utilizamos la palabra clave def seguida del
nombre de la función y paréntesis. Opcionalmente, podemos especificar parámetros
dentro de los paréntesis. El bloque de código de la función se indenta después de
los dos puntos.

Para llamar a una función, simplemente escribimos el nombre de la función seguido


de paréntesis:

def saludo():

print("¡Hola, mundo!")

saludo() # Imprime "¡Hola, mundo!"

Parámetros y argumentos
Las funciones pueden aceptar parámetros, que son valores que se pasan a la
función cuando se la llama. Los parámetros se especifican dentro de los paréntesis
en la definición de la función.
def saludo(nombre):

print(f"¡Hola, {nombre}!")
Al llamar a la función, proporcionamos los argumentos correspondientes a los
parámetros:

saludo("Juan") # Imprime "¡Hola, Juan!"

saludo("María") # Imprime "¡Hola, María!"

Valores de retorno
Las funciones pueden devolver valores utilizando la palabra clave return. El valor de
retorno puede ser utilizado por el código que llama a la función.

def suma(a, b):

return a + b

resultado = suma(3, 4)

print(resultado) # Imprime 7

Funciones anónimas (lambda)


Python permite crear funciones anónimas o funciones lambda, que son funciones
sin nombre definidas en una sola línea. Se utilizan comúnmente para funciones
pequeñas y concisas.

cuadrado = lambda x: x ** 2

print(cuadrado(5)) # Imprime 25
Alcance de las variables (local
vs. global)
Las variables definidas dentro de una función tienen un alcance local, lo que
significa que solo son accesibles dentro de la función. Por otro lado, las variables
definidas fuera de cualquier función tienen un alcance global y pueden ser
accedidas desde cualquier parte del programa.

def funcion():

variable_local = 10

print(variable_local) # Accesible dentro de la


función

variable_global = 20

def funcion2():

print(variable_global) # Accesible desde


cualquier lugar

funcion() # Imprime 10

funcion2() # Imprime 20

print(variable_global) # Imprime 20

print(variable_local) # Genera un error, la variable


no está definida en este alcance.
Manejo de
errores y
excepciones
Cuando escribimos programas, es común encontrarnos con situaciones inesperadas
o errores durante la ejecución. Python proporciona un mecanismo para manejar
estos errores de manera controlada utilizando el manejo de excepciones. Esto nos
permite capturar y manejar errores específicos sin que el programa se detenga
abruptamente.

Errores comunes en Python


Error de sintaxis (SyntaxError)
Ocurre cuando el código no sigue las reglas de sintaxis de Python, como olvidar dos
puntos después de una declaración de función o un bucle.

def mi_funcion() # Falta los dos puntos

print("Hola")

Error de nombre (NameError)


ocurre cuando se hace referencia a una variable o función que no ha sido
definida.

print(variable_no_definida)

Error de tipo (TypeError)


Ocurre cuando se realiza una operación con tipos de datos incompatibles,
como intentar sumar un número y una cadena.

resultado = 5 + "10"

Error de índice (IndexError)


Ocurre cuando se intenta acceder a un índice fuera del rango válido de una
lista o secuencia.

lista = [1, 2, 3]

print(lista[3]) # El índice 3 está fuera del rango


El manejo de excepciones nos permite capturar y manejar errores de manera
controlada utilizando las declaraciones try, except y opcionalmente finally.

Try
El bloque try contiene el código que puede generar una excepción. Si ocurre
una excepción dentro del bloque try, el flujo de ejecución se transfiere al
bloque except correspondiente.

try:

# Código que puede generar una excepción

resultado = 10 / 0 # División por cero

print(resultado)

except ZeroDivisionError:

print("Error: División por cero")

Except
El bloque except especifica el tipo de excepción que se desea capturar y
manejar. Puedes tener múltiples bloques except para manejar diferentes tipos
de excepciones.
try:

# Código que puede generar una excepción

resultado = 10 / 0 # División por cero

print(resultado)

except ZeroDivisionError:

print("Error: División por cero")

except ValueError:

print("Error: Valor inválido")

Finally
El bloque finally es opcional y se ejecuta siempre, independientemente de si
ocurrió una excepción o no. Se utiliza comúnmente para realizar tareas de
limpieza o liberación de recursos.

try:

# Código que puede generar una excepción

archivo = open("archivo.txt", "r")

# Realizar operaciones con el archivo

except FileNotFoundError:

print("Error: Archivo no encontrado")

finally:

archivo.close() # Cerrar el archivo siempre,


incluso si ocurre una excepción
Además de las excepciones incorporadas en Python, también puedes crear
tus propias excepciones personalizadas. Esto es útil cuando deseas manejar
situaciones específicas de tu programa.
Para crear una excepción personalizada, debes crear una clase que herede de
la clase base Exception o de una de sus subclases.

def funcion():

# Código que puede generar una excepción


personalizada

if condicion:

raise Exception("Descripción del error")

try:

funcion()

except Exception as e:

print(f"Error: {str(e)}")
En este ejemplo, se define una función llamada funcion(). Dentro de la función,
se verifica una condición y, si se cumple, se genera una excepción utilizando
la declaración raise. En lugar de crear una clase personalizada, se utiliza
directamente la clase base Exception para generar la excepción.

Luego, se utiliza un bloque try-except para capturar y manejar la excepción. La


variable e se utiliza para acceder a la descripción del error proporcionada al
generar la excepción.

El manejo de errores y excepciones es una parte fundamental de la


programación en Python. Te permite manejar situaciones inesperadas de
manera controlada y evitar que tu programa se bloquee o se detenga
abruptamente.

Cuando ocurre un error en tu código, Python genera una excepción. Al utilizar


bloques try-except, puedes capturar y manejar estas excepciones de manera
adecuada. Puedes especificar diferentes bloques except para manejar
distintos tipos de excepciones y realizar acciones específicas en cada caso.

Además, el bloque finally te permite ejecutar código de limpieza o liberación


de recursos, independientemente de si ocurrió una excepción o no. Esto es
útil para garantizar que ciertas acciones se realicen siempre, como cerrar
archivos o conexiones de base de datos.
Entradas/salidas
En Python, la entrada y salida de datos nos permite interactuar con el usuario y
manipular archivos. Podemos solicitar información al usuario, mostrar resultados en
la pantalla y leer o escribir datos en archivos externos.

Entrada de datos del usuario


Para obtener información del usuario durante la ejecución del programa, podemos
utilizar la función input(). Esta función muestra un mensaje en la pantalla y espera a
que el usuario ingrese un valor.

nombre = input("Ingresa tu nombre: ")

edad = input("Ingresa tu edad: ")

print("Hola, " + nombre + "!")

print("Tienes " + edad + " años.")

edad = int(input("Ingresa tu edad: "))


En este ejemplo, se solicita al usuario que ingrese su nombre y edad utilizando la
función input(). Los valores ingresados se almacenan en las variables nombre y
edad, respectivamente. Luego, se utilizan estas variables para mostrar un saludo
personalizado en la pantalla.

if edad >= 18:

print("Eres mayor de edad.")

else:
print("Eres menor de edad.")
En este ejemplo, se solicita al usuario que ingrese su edad y se convierte el valor
ingresado a un número entero utilizando int(). Luego, se utiliza una estructura
condicional para verificar si la edad es mayor o igual a 18 y mostrar un mensaje
correspondiente.

Salida de datos
Para mostrar información en la pantalla, utilizamos la función print(). Esta función
toma uno o más argumentos y los muestra en la consola.

Podemos utilizar la f-string (formateo de cadenas) para incrustar variables


directamente dentro de una cadena de texto.

nombre = "Juan"

edad = 25

print(f"Hola, mi nombre es {nombre} y tengo {edad}


años.")
En este caso, las variables se incrustan dentro de la cadena utilizando llaves {} y se
precede la cadena con la letra f para indicar que es una f-string.
Lectura y
escritura de
archivos
Python nos permite leer y escribir datos en archivos externos. Podemos abrir
archivos en diferentes modos, como lectura ("r"), escritura ("w") o anexar ("a"), y
realizar operaciones de lectura y escritura.

Lectura de archivos
Para leer el contenido de un archivo, primero debemos abrirlo utilizando la función
open() en modo de lectura ("r"). Luego, podemos leer el contenido del archivo
utilizando métodos como read() o readlines().

archivo = open("datos.txt", "r")

contenido = archivo.read()

print(contenido)

archivo.close()
En este ejemplo, se abre el archivo "datos.txt" en modo de lectura utilizando open().
Luego, se lee todo el contenido del archivo utilizando el método read() y se
almacena en la variable contenido. Finalmente, se muestra el contenido en la
pantalla y se cierra el archivo utilizando el método close().
Escritura de archivos
Para escribir datos en un archivo, lo abrimos en modo de escritura ("w") utilizando la
función open(). Si el archivo no existe, se creará automáticamente. Si el archivo ya
existe, su contenido se sobrescribirá.

archivo = open("datos.txt", "w")

archivo.write("Hola, mundo!")

archivo.close()
En este ejemplo, se abre el archivo "datos.txt" en modo de escritura utilizando
open(). Luego, se escribe la cadena "¡Hola, mundo!" en el archivo utilizando el
método write(). Finalmente, se cierra el archivo utilizando el método close().

También puedes utilizar la declaración with para manejar la apertura y cierre de


archivos de manera automática.

with open("datos.txt", "r") as archivo:

contenido = archivo.read()

print(contenido)
En este caso, el archivo se abre utilizando la declaración with y se cierra
automáticamente una vez que se sale del bloque with, incluso si ocurre una
excepción
Importación y
creación de
módulos
En Python, un módulo es un archivo que contiene definiciones de funciones, clases
y variables que se pueden utilizar en otros programas. La importación de módulos
nos permite acceder a la funcionalidad definida en otros archivos y reutilizar código
de manera eficiente. Además, podemos crear nuestros propios módulos para
organizar y modularizar nuestro código.

Importar módulos
Para utilizar un módulo en nuestro programa, debemos importarlo utilizando la
declaración import. Podemos importar un módulo completo o funciones específicas
de un módulo.

import math

resultado = math.sqrt(25)

print(resultado) # Imprime 5.0


En este ejemplo, se importa el módulo math utilizando la declaración import. Luego,
se utiliza la función sqrt() del módulo math para calcular la raíz cuadrada de 25.
También podemos importar funciones específicas de un módulo utilizando la sintaxis
from módulo import función.

from math import sqrt

resultado = sqrt(25)

print(resultado) # Imprime 5.0


En este caso, se importa solo la función sqrt() del módulo math, lo que nos permite
utilizarla directamente sin tener que precederla con el nombre del módulo.

Funciones y clases de
módulos estándar
La biblioteca estándar de Python ofrece una amplia gama de módulos con funciones
y clases útiles. Algunos ejemplos comunes incluyen:

Math:

Proporciona funciones matemáticas, como sqrt() (raíz cuadrada), sin() (seno), cos() (coseno),
entre otras.

Random:

Ofrece funciones para generar números aleatorios, como random() (número aleatorio entre 0 y
1), randint() (número entero aleatorio en un rango), entre otras.

Datetime:

Permite trabajar con fechas y horas, como datetime.now() (fecha y hora actual), datetime.date()
(fecha), datetime.time() (hora), entre otras.

import random

import datetime

numero_aleatorio = random.randint(1, 10)


print(numero_aleatorio) # Imprime un número entero
aleatorio entre 1 y 10

fecha_actual = datetime.datetime.now()

print(fecha_actual) # Imprime la fecha y hora actual

Creación de
módulos propios
Además de utilizar los módulos estándar de Python, también podemos crear
nuestros propios módulos para organizar y reutilizar nuestro código.

Crear y utilizar módulos


personalizados
Para crear un módulo personalizado, simplemente creamos un nuevo archivo
Python con el nombre deseado y definimos las funciones, clases y variables que
queremos incluir en el módulo. Por ejemplo, creamos un archivo (en el mismo
directorio donde estamos ejecutando Python) llamado mi_modulo.py con el
siguiente contenido:

#mi_modulo.py
def saludar(nombre):

print(f"Hola, {nombre}!")

def calcular_suma(a, b):

return a + b
Luego, podemos importar y utilizar las funciones definidas en mi_modulo.py en otro
archivo Python.

import mi_modulo

mi_modulo.saludar("Juan") # Imprime "Hola, Juan!"

resultado = mi_modulo.calcular_suma(5, 3)

print(resultado) # Imprime 8
En este ejemplo, se importa el módulo mi_modulo y se utilizan las funciones
saludar() y calcular_suma() definidas en él.

Organización del código en


módulos
A medida que nuestros programas crecen en tamaño y complejidad, es una buena
práctica organizar nuestro código en módulos separados según su funcionalidad.
Esto nos permite conservar un código más legible, agrupado en módulos y fácil de
mantener.

Por ejemplo, podemos tener un módulo operaciones.py que contenga funciones


relacionadas con operaciones matemáticas, y otro módulo utilidades.py que
contenga funciones de uso general.

# operaciones.py
def sumar(a, b):

return a + b

def restar(a, b):

return a - b

# utilidades.py

def imprimir_mensaje(mensaje):

print(mensaje)

def obtener_nombre_usuario():

return input("Ingresa tu nombre: ")


Luego, podemos importar y utilizar estas funciones en nuestro programa principal.

import operaciones

import utilidades

resultado = operaciones.sumar(5, 3)

utilidades.imprimir_mensaje(f"El resultado de la suma


es: {resultado}")

nombre = utilidades.obtener_nombre_usuario()
utilidades.imprimir_mensaje(f"Hola, {nombre}!")
Al organizar nuestro código en módulos, podemos reutilizar funciones y mantener un
código más estructurado y agrupado en módulos.

Paquetes
Un paquete es una forma de organizar módulos relacionados en una estructura
jerárquica de directorios. Los paquetes nos permiten agrupar módulos relacionados
y evitar conflictos de nombres entre módulos.

Crear y utilizar paquetes


Para crear un paquete, creamos un directorio con el nombre deseado y agregamos
un archivo especial llamado __init__.py dentro del directorio. Este archivo puede
estar vacío o contener código de inicialización del paquete.

Por ejemplo, creamos un directorio llamado mi_paquete con la siguiente estructura:

mi_paquete/

__init__.py

modulo1.py

modulo2.py
Luego, podemos importar y utilizar los módulos del paquete en nuestro programa.

from mi_paquete import modulo1, modulo2

modulo1.funcion1()

modulo2.funcion2()
En este ejemplo, se importan los módulos modulo1 y modulo2 del paquete
mi_paquete y se utilizan las funciones definidas en ellos.

También podría gustarte