Python

Heber Esteban Bermúdez G.

Notas Basicas

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible. Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, de tipado fuerte, dinámico y multiplataforma.

Caracteristicas.

  • Lenguaje de alto nivel.
  • Tipado dinamico y fuerte.
  • Orientado a objetos.
  • Open source.
  • Interpretado.
  • Multiplataforma.

Historia

Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informatica), en los Países Bajos, como un sucesor del lenguaje de programación ABC.

Que es pip

PiP es un acrónimo recursivo de " Pip Installs Packages ". Es esencialmente un sistema de administración de paquetes utilizado para instalar y administrar paquetes de software escritos en Python py -m pip install pandas

Donde programar ?

  • Consola (.py)
  • Bloc de notas
  • ipython (Interactive python)
  • jupyter notebook (.ipynb)
  • jupyter.org (nube)
  • Colaboratory (google)
  • IDLE
  • Spyder (Distribución anaconda navigator)

Librerias mas usadas en python

  • NumPy (soporte para vectores y matrices)
  • scipy (computacion cientifica)
  • pandas (estadistica, data frame)
  • scikit learn (machine learning)
  • tensorflow (redes neuronales)
  • astropy (para astronomia)
  • matplotlib (graficacion)
  • pytorch

Tipos de datos en Python (lo veremos en detalle mas adelante)

  • Enteros (int)
  • Booleanos (bool) (compatibles con opeaciones booleanas and, or, not.)
  • Cadenas (str)
  • Listas: Son un grupo o array de datos (mutables)
  • Diccionarios: Son un grupo de valores o datos que se acceden a travéz de una clave
  • Tuplas: también son un grupo de datos igual que una lista (pero inmutables)

Etapas del Análisis de datos

1) Enmarcar el problema

¿Cual es el objetivo del análisis?

2) Adquirir y preparar los datos

3) Explorar los datos

Estadística descriptiva

4) Modelamiento y evaluacion de resultados

5) Comunicar los resultados/ poner en producción

Usa la estadística como un borracho usa las farolas, para el apoyo en lugar de la iluminacion - Andrew Lang

Operadores comunes

longitud de una cadena, tupla, lista, diccionario, etc.

In [0]:
len("hola")
Out[0]:
4

Para observar el tipo de dato usamos la función type()

In [0]:
type(8.5)
Out[0]:
float

Redondear.

In [0]:
# redondeando a 3 cifras decimales
round(8.12345678, 3 ) 
Out[0]:
8.123

Organizar un conjunto

In [0]:
sorted([1,8,9,6,4,])
Out[0]:
[1, 4, 6, 8, 9]

funciones o metodos que se pueden aplicar a un tipo de datos

In [0]:
a = "hola mundo"
dir(a)

Nuestro primer programa

In [0]:
import turtle
window = turtle.Screen()
esteban = turtle.Turtle()
esteban.fordwar(50)
esteban.left(90)
esteban.fordwar(50)
esteban.left(90)
esteban.fordwar(50)
esteban.left(90)
esteban.fordwar(50)
esteban.left(90)
turtle.mainloop()

Imprimir

En Python existe una amplia manera de imprimir resultados en pantalla, aquí mostraremos algunas de ellas.

In [0]:
# Primero definamos algunas variables para trabajar.
a = 8
b = 8.8
c = "Unalytics"
In [0]:
# Forma 1.
print("hola mundo")

# Forma 2.
print(a, b, c)
print("a:", a, "b:", b, "c:", c)
print("resultado", a*b)
print("Escribir algo entre \"comillas\"")

# Forma 3. (Especificadores de formato)
print("numero1: %d numero2: %.2f caracteres: %s" %(a,b,c))

# Forma 4. (triple comilla)
print("""para que podamos 
incluir saltos 
de linea""")
hola mundo
8 8.8 Unalytics
a: 8 b: 8.8 c: Unalytics
resultado 70.4
Escribir algo entre "comillas"
numero1: 8 numero2: 8.80 caracteres: Unalytics
para que podamos 
incluir saltos 
de linea

Nota:

print("hola mundo")  en  py 3.x  (forma funcional)
print "hola mundo"   en  py 2.x

Entrada

In [0]:
input()
Esteban
Out[0]:
'Esteban'

Estructuras de control

Condicionales (if)


In [0]:
# Declarando variables 
numero_1 = 80
numero_2 = 10

# condicional (if)
if numero_1 > numero_2:
  print("numero_1 es mayor")
else:
  print("numero_1 no es mayor")
  
# Nota: Muy importante la identación.
numero_1 es mayor
In [0]:
nota = int(input("Ingrese su nota: "))

if nota < 3:
  print("Perdio")
elif nota <= 4:
  print("gano")
elif nota <= 5:
  print("exelente")
else:
  print("nota incorrecta")
In [0]:
# concatenacion de operadores de condicion

edad = int(input("ingrese edad: \n"))
if 0<edad<100:
  print("edad correcta")
else:
  print("edad incorrecta")

Operadores logicos (and, or, in )

Ciclos - bucle


for

In [0]:
for i in [1,2,5]:
  print(i)
1
2
5

Funciones

Son un bloque de código que realizan una tarea especifica, Las funciones pueden o no devolver valores, pueden tener parámetros o no, las funciones se crean con la palabra reservada def

In [0]:
# creando (declarando) función
def nombre_de_la_funcion(a, b):
  c=a**b
  return(c)
  
# Nota: return es opcional
In [0]:
# llamado a la función
nombre_de_la_funcion(a=2, b=3)

Estructuras de datos

Listas


Estructura de datos que permite alamcenar valores (lista = array en R).

Puede almacenar diferentes tipos de valores

In [0]:
# Creando lista
mi_lista = [8, 8.8, "Unalytics", "UN", 100, True, False]

# tipo
type(mi_lista)
Out[0]:
list

Accediendo a elementos

In [0]:
#Imprimiendo elementos
print(mi_lista[:])
['Medellín', 8, 8.8, 'Unalytics', 'UN', 100, 'Colombia', 'otra lista', 'Sabrina']
In [0]:
# Accediendo a un elemento
mi_lista[-1]
Out[0]:
100
In [0]:
# Accediendo a un elemento
mi_lista[2:]
Out[0]:
['Unalytics', 'UN', 100]

Agregando elementos (appen, insert, extend, index, in)

In [0]:
mi_lista.append("Colombia")
In [0]:
mi_lista.insert(0, "Medellín")
In [0]:
mi_lista.extend(["otra lista", "Sabrina"])
In [0]:
mi_lista.index("Unalytics")
Out[0]:
3
In [0]:
"Unalytics" in mi_lista
Out[0]:
True

Tuplas


Las tuplas son listan inmutable (no podemos modificarlas).

permiten comprobación (in)

Ventajas: Mayor rendimiento

Convertir tupla a lista : list()

Convertir lista a tupla: tuple()

Desempaquetado de tupla.

In [0]:
# Creando tupla
mi_tupla=("1", 2, 3, "Unalytics", True, False)
In [0]:
mi_tupla
Out[0]:
('1', 2, 3, 'Unalytics', True, False)
In [0]:
len(mi_tupla)
Out[0]:
6

Diccionarios


Los datos se almacenan como Clave : Valor

Cualquier tipo de datos (lista, tuplas, otro diccionario)

In [0]:
mi_diccionario = {"Colombia":["Medellín", "Bogotá"], "USA":"New york", "numeros":(1,2,3)}
In [0]:
mi_diccionario["Colombia"][:]
Out[0]:
['Medellín', 'Bogotá']
In [0]:
mi_diccionario["Animales"]=["perro", "gato"]
In [0]:
mi_diccionario
Out[0]:
{'Animales': ['perro', 'gato'],
 'Colombia': ['Medellín', 'Bogotá'],
 'numeros': (1, 2, 3)}
In [0]:
# Eliminando valores
del mi_diccionario["USA"]
In [0]:
mi_diccionario.keys()
Out[0]:
dict_keys(['Colombia', 'numeros', 'Animales'])

Clases

Una clase no es mas que la representación de un objeto.

In [0]:
class Estudiante(object): 
  def __init__(self,nombre_r,edad_r):
    self.nombre = nombre_r
    self.edad = edad_r 

  def hola(self):
    return "Mi nombre es %s y tengo %i" % (self.nombre, self.edad)
In [0]:
e = Estudiante("Arturo", 21) 
print(e.hola())
Mi nombre es Arturo y tengo 21

Métodos especiales


cmp(self,otro)

Método llamado cuando utilizas los operadores de comparación para comprobar si tu objeto es menor, mayor o igual al objeto pasado como parámetro.

len(self) Método llamado para comprobar la longitud del objeto. Lo usas, por ejemplo, cuando llamas la función len(obj) sobre nuestro código. Como es de suponer el método te debe devolver la longitud del objeto.

init(self,otro) Es un constructor de nuestra clase, es decir, es un “método especial” que es llamas automáticamente cuando creas un objeto.

Practica

atributo (sin parecentesis) metodo (con parentesis)

In [0]:
# cargando libreria
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [0]:
auto = pd.read_csv("https://raw.githubusercontent.com/unalyticsteam/databases/master/auto-mpg.csv")
In [0]:
auto.head()
Out[0]:
No mpg cylinders displacement horsepower weight acceleration model_year car_name
0 1 28.0 4 140.0 90 2264 15.5 71 chevrolet vega 2300
1 2 19.0 3 70.0 97 2330 13.5 72 mazda rx2 coupe
2 3 36.0 4 107.0 75 2205 14.5 82 honda accord
3 4 28.0 4 97.0 92 2288 17.0 72 datsun 510 (sw)
4 5 21.0 6 199.0 90 2648 15.0 70 amc gremlin
In [0]:
auto.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
No              398 non-null int64
mpg             398 non-null float64
cylinders       398 non-null int64
displacement    398 non-null float64
horsepower      398 non-null int64
weight          398 non-null int64
acceleration    398 non-null float64
model_year      398 non-null int64
car_name        398 non-null object
dtypes: float64(3), int64(5), object(1)
memory usage: 28.1+ KB
In [0]:
# convertir cilindros a variable categorica
#auto['model year']
# objeto serie (analogo a vector en R)
auto.model_year = auto.model_year.astype('category')
auto.cylinders = auto.cylinders.astype('category')

type(auto.model_year)
Out[0]:
pandas.core.series.Series
In [0]:
auto.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 398 entries, 0 to 397
Data columns (total 9 columns):
No              398 non-null int64
mpg             398 non-null float64
cylinders       398 non-null category
displacement    398 non-null float64
horsepower      398 non-null int64
weight          398 non-null int64
acceleration    398 non-null float64
model_year      398 non-null category
car_name        398 non-null object
dtypes: category(2), float64(3), int64(3), object(1)
memory usage: 23.5+ KB
In [0]:
 

Analisis descriptivo


In [0]:
# summary en R
round(auto.describe(), 2)
Out[0]:
No mpg displacement horsepower weight acceleration
count 398.00 398.00 398.00 398.00 398.00 398.00
mean 199.50 23.51 193.43 104.13 2970.42 15.57
std 115.04 7.82 104.27 38.31 846.84 2.76
min 1.00 9.00 68.00 46.00 1613.00 8.00
25% 100.25 17.50 104.25 76.00 2223.75 13.82
50% 199.50 23.00 148.50 92.00 2803.50 15.50
75% 298.75 29.00 262.00 125.00 3608.00 17.17
max 398.00 46.60 455.00 230.00 5140.00 24.80

Filtros

loc & iloc fltros sobre texto y filtro sobre indices

In [0]:
# filtros por indices
auto.iloc[3,]
Out[0]:
No                            4
mpg                          28
cylinders                     4
displacement                 97
horsepower                   92
weight                     2288
acceleration                 17
model_year                   72
car_name        datsun 510 (sw)
Name: 3, dtype: object
In [0]:
# para extraer toda la columa
auto.loc[mpg]
In [0]:
# filtar por carros de 4 y 6 cylindros

auto.loc[auto.cylinders == 4 ].head()
Out[0]:
No mpg cylinders displacement horsepower weight acceleration model_year car_name
0 1 28.0 4 140.0 90 2264 15.5 71 chevrolet vega 2300
2 3 36.0 4 107.0 75 2205 14.5 82 honda accord
3 4 28.0 4 97.0 92 2288 17.0 72 datsun 510 (sw)
5 6 23.0 4 115.0 95 2694 15.0 75 audi 100ls
7 8 32.9 4 119.0 100 2615 14.8 81 datsun 200sx