Está en la página 1de 11

PROGRAMACION 2

CLASE 1 – 18/08

 Parciales suelen ser en 3 instancias: teórico, practico y a la semana siguiente defender lo que
hicimos
o Primer parcial  Unidad 1 y 2  paradigma orientado a objetos
o Segundo parcial  Unidad 3 y 4  paradigma funcional
 Trabajo de investigación  Unidad 5  Elegir entre estos temas de investigación para
presentarlo y defenderlo en la semana 15: Introducción al machine learning. Introducción al Deep
learning. Algoritmos de redes neuronales. Práctica de generación de red neuronal sobre placa
microbit y/o simulación. Framework Anaconda y miniconda, descripción y uso práctico.
 Final va a ser presencial. Si vamos a coloquio, el final es una presentación sobre el trabajo de
investigación.

Un paradigma es un estilo de programación documentado y adecuado como buena práctica. Existen


varios paradigmas. El que duro más tiempo es el Paradigma Estructurado que se caracteriza por
trabajar con bloques o módulos. Se define el flujo del programa mediante bucles, condiciones y rutinas. El
Paradigma Orientado a Objetos es otro de los paradigmas más utilizados. Se construyen modelos
abstractos, las clases. En este paradigma se utilizan las detecciones de abstracciones, observaciones del
mundo real. Dentro de estas abstracciones se deben identificar 3 características: identidad, estado y
comportamiento. Dos elementos iguales (ya instanciados) tienen direcciones de memoria diferentes.
Desde el punto de vista de la práctica, la identidad se representa por el nombre del elemento. El estado
varía según el comportamiento, tiene que ser privado, está dentro de la encapsulación. Debo tener un
método get y un método set para acceder al estado. En el lenguaje C se utiliza únicamente el paradigma
estructurado. En C# se utiliza el paradigma orientado a objetos. El Paradigma Funcional es un nuevo
paradigma donde el insumo no es ni una estructura ni una clase, sino que es una función. Trabaja en el
concepto de entradas, salidas y transformaciones. Se le puede pasar a una función como parámetro otra
función y puedo trabajar dentro de una función con otra función como si fuese una variable. Programación
declarativa, las funciones son el elemento importante.

Python es un lenguaje multiparadigma (estructurado, orientado a objetos, funcional). Sin embargo, hay
ciertas características del POO que no las respeta, por ejemplo: no se puede tener métodos y estados
privados. Este lenguaje permite hacer todo tipo de programas: programas comunes, videojuegos,
Inteligencia Artificial, Machine Learning, programa de un sistema de gestión, páginas web, etc.

Python tiene un tipado dinámico: no es necesario declarar el tipo de dato para crear una variable. Si no
soy prolijo programando puedo hacer un desastre. Una variable tipo int puede cambiar a string. Los tipos
de datos pueden ser simples o complejos. Dentro de los tipos de datos simples: int, string, float y bool.

Acuerdos/normas específicas: todas las variables se van a tener que escribir siempre en minúscula.
Si la variable tiene mas de una palabra, se debe colocar guion bajo (ej.: “edad_del_perro”). Python no
tiene constantes (un espacio en memoria que mantiene siempre el mismo valor), son todas variables. Sin
embargo, las constantes las vamos a declarar como variables en mayúscula.

Estructuras de decisión: Python no tiene swich, solo tenemos el if. Instrucciones simples y
compuestas. Instrucción compuesta: conjunto de instrucciones simples, en C# se escriben entre “{ }”.
Sirven para que se ejecuten un bloque de instrucciones. En Python se escriben con tabulaciones
(seleccionándolo, asegurarse de que se tabulo mirando
los “….” que representan 4 espacios). En Python, “else if”
pasa a ser “elif”. Si tengo 3 opciones/condiciones por lo
menos necesito 2 if. Siempre es 1 if menos a la
cantidad de condiciones que hay.

Estructuras de repetición en Python: solo for y while.


El for en Python es como el foreach en c#.
En Python todas las funciones comienzan con “def”. En una función ya no necesito indicar el valor de
retorno porque es de tipado dinámico. En la declaración de parámetros tampoco tengo que declarar
el tipo. También se permite devolver más de un valor (igual devuelve uno solo, pero hace parecer que
son dos).

Un algoritmo debe respetar: ser preciso (orden), ser definido (resultado) y ser finito. Un algoritmo
debe describirse en tres partes: entrada, proceso y salida.

Una variable es un espacio en memoria. Es una manera de identificar un dato que no conocemos y vamos
a usarlo en el algoritmo. Definen un tipo de dato: entero, decimales, texto. Cada variable guarda solo un
dato a la vez.

CLASE 2 – 25/08

Una forma de abrir una carpeta en VSCode es ir a la ventana de comandos (Windows+GIT), luego
ingresar la dirección de la carpeta a la que se quiere acceder (C:\Users\Natasha Belen Luna\OneDrive\
Escritorio\JUEVES-PROG.2\PYTHON + ENTER), y por ultimo escribir “code .”.

En caso de estar trabajando con muchas versiones de Python, o con distintas aplicaciones, o de querer
armar espacios distintos, la librería “virtualenv” permite crear una carpeta virtual. Se puede tener
espacios con distinta configuración de librerías dependiendo el proyecto que se esté haciendo. Ingresando
por la terminal “Python -m virtualenv” + un nuevo nombre, se genera una carpeta con un montón de
librerías. Dentro de “Lib”, se cargan todos los comandos y la configuración de Python como si tuviese una
sola versión, quedando una especie de maquina virtual con esa configuración. En la parte de “Scripts”, se
puede deshabilitar y habilitar esa maquina virtual. Colocando en la terminal “.\JUEVES\Scripts\activate” se
crea una especie de espacio virtual. La diferencia con el espacio por default: cuando coloco “pip list”, se
ve que el espacio es distinto, si se instalan librerías, aplicaciones, etc., va a quedar todo configurado en esa
máquina virtual. No se instalarán todas las librerías en máquina de forma global.
En Python, “import” es como el “using” de C#. Si coloco la instrucción “os.system(“cls”)”, se limpia la
pantalla de la terminal. Se pueden renombrar las librerías colocando “as”.
https://docs.python.org/3/library/math.html

Python tiene una ejecución secuencial. A su vez, tiene muchas permisiones que otros lenguajes no tienen,
por ejemplo: la primera función no necesariamente tiene que ser “def main():”, arriba de ella puedo
escribir otras instrucciones. Se desordena bastante el código. Es por
eso que al final del código ponemos: if __name__=="__main__":

Cuando arranca el código, comienza por la función main(). main()

Para ver formas de imprimir variables mirar el archivo “C2-25-


08_1.py”

ULTRA  RYB  C2  Actividad06.pdf (C2-25-08_2.py)

Librería Math  https://docs.python.org/3/library/math.html

Al trabajar con funciones trigonométricas Python trabaja con radianes, por lo tanto, hay que hacer la
conversión de radianes (3*pi/4) a grados.

En Python podemos crear “módulos” (librerías) de funciones e importarlos a cualquier archivo para poder
reutilizar esas funciones. Para poder lograrlo se crea una carpeta llamada “lib” con los siguientes archivos:
“funciones.py” (que será el archivo con las funciones), “__ini__.py” (un archivo vacío). Para luego
importarla: “import lib0610.funciones as fun” (importas de la carpeta un archivo de funciones y luego
llamamos a esas funciones a través del punto)

TP GRUPAL: elegir un dataset (https://www.datos.gob.ar/dataset) y leer la información que contiene,


hacer una depuración de los datos (sacar datos repetidos, valores nulos, errores en el formato), es decir,
hacer un análisis de los datos para normalizar los datos de contenido y luego cruzar información (buscar
algún tipo de información, tabularla y mostrarla. ej.: cuales son las terminales donde se usan más
bicicletas).

var = "par" if (num % 2 == 0) else "impar"

CLASE 3 – 01/09
Python solo maneja 2 instrucciones de repetición. El for tiene vueltas finitas (en Python, es parecido al
foreach). El while tiene una cantidad de vueltas desconocida.

Python es de tipado dinámico. Las comillas simples y dobles las toma como semejantes.

Cuando escribimos una función, el tabulador sirve para indicar que la instrucción está dentro del bloque
de la función.

El if es una construcción rudimentaria, genera mucha carga. En vez de trabajar con if, debería trabajar
con tipos. La complejidad siplomatica define el grado de complejidad que tiene un código. Si cuento
la cantidad de regiones y le resto 1, me devuelve el grado de complejidad. Si la cantidad esta cerca del 10
es muy complejo y del 1 es muy bajo. Otra forma es contando la cantidad de if y restarle 1. Cuantos
mas if hay dentro de un código, el código es menos mantenible ya que el grado de complejidad va
aumentando. Es por eso que se debe evitar el uso del if.

Si en C# quiero recorrer una lista con distintos tipos de objetos podría realizarse usando el tipo de dato
“object”. En Python es más fácil, no tan rudimentario.

En Python tenemos los tipos de datos simples (int, float, string, bool) y los complejos. Dentro de los
complejos tenemos 3 elementos que se conforman como cadenas de nodos que tienen valores: las tuplas,
las listas y los diccionarios. La tupla es inmutable, funciona como una constante de c#, le asigno valores
que luego no los puedo cambiar. Los caracteres que representa la tupla son (). Las listas son mutables, le
puedo cambiar valores, las modifico libremente, son dinámicas. Los caracteres que las representa son [].
Los diccionarios tienen en cada nodo una dupla de clave (key, números o strings) y valor (lo que quiera).
Los caracteres que los representa son {}.

Los caracteres son los constructores que le dicen a Python como lo tiene que construir (tupla, lista o
diccionario). En caso de querer agregar un solo nodo dentro de una tupla siempre tengo que acompañarlo
de una “,”. Una tupla se ejecuta más rápido que una lista.

ULTRA  RYB  C3  Actividad07.pdf (C3-01-09_3.py) y Actividad08.pdf (C3-01-09_5.py)

Dentro de un diccionario puedo guardar listas como valores.

CLASE 4 – 08/09

Los argumentos son los valores que estoy pasando al llamar a una función y van a ser recibidos como
parámetros.

En una tupla, el constructor es la coma. “Las properties en C# no/si son parte del estado” pregunta
tramposa de examen.

Python hace parecer que dentro de una función se permite devolver más de un valor de retorno. Pero en
realidad, lo que se está devolviendo es una tupla.

En vez de importar una librería completa, Python permite importar una librería en forma parcial. Por
ejemplo, una sola función (y la puedo renombrar tambien).

A una función recursiva se le debe poner una marca para decir en qué momento termina. Si no tiene un
corte de control, estoy saturando el stack de llamadas que tiene el lenguaje y en un momento me da
overflow.

Los parámetros pueden tener un valor por defecto. Esto se hace poniendo al lado del parámetro “=” + el
valor que se le quiere asignar.

En Python no tenemos sobrecarga, es decir, en la misma clase 2 métodos iguales con distinta firma. Esto
no es lo mismo que una sobreescritura. Si queremos hacer sobrecarga, tenemos que importar una librería
que nos permita hacerlo. La librería dispatch me permite hacer una sobrecarga. (Ejemplo en
lib0809/mislib.py).
Los try – except van de lo mas particular a lo más general. También se puede tener un else, que se
ejecuta cuando hay un error y un finally, que se ejecuta siempre.

El estado es el conjunto de propiedades generalmente estáticas y valores generalmente dinámicos. En


POO, el estado se declara como un atributo privado. La única manera de poder modificar el estado era a
través de los métodos. Métodos getter y setter para modificar el estado.

Pero en Python, el concepto de privado no existe. No puedo tener métodos que no tengan parámetros.
Como mínimo, el parámetro que deben tener es “self”. El “self” representa lo que en C# es el “this”. El
“self” permite poder tener acceso a todos los valores internos.

En C# el constructor debe tener el mismo nombre que la clase. En Python, el constructor tiene un
nombre especifico: “def __init__(self):” y el destructor: “def __del__(self):”

alt+Z  se acomoda el texto al tamaño de la pantalla

En Python puedo declarar variables globales. Estas pueden estar fuera de una función (por ejemplo de
la función main()) declaradas arriba de todo el código. Pero también pueden estar dentro de una función
acompañadas de la palabra “global”.

ULTRA  RYB  C4  Actividad09.pdf (C4-08-09_2.py)

CLASE 5 – 15/09 (REPASO)


CLASE 6 – 22/09 (PARCIAL)

CLASE 7 – 29/09 (CIITI)

CLASE 8 – 06/10

Python, además de tener los tipos de datos simples (int, float, string) y complejos (colecciones: listas,
tuplas, diccionarios), tiene un tipo de dato que es un conjunto, un “set”. Este tiene las mismas
características que una tupla (es inmutable) pero se declara como un diccionario (con llaves), pero sin
darle valores a las llaves. Dentro de un set, no se reconocen valores repetidos, no los muestra. Si son de
distinto tipo los toma diferentes (por ejemplo, si tiene un 4 y un “4” se mostrarán ambos). El boleano no lo
toma en cuenta si no se encuentra al principio del set.

Guía de ejercicios 11 en (C8-06-10_1.py).

La librería “numpy” nos permite trabajar con vectores multidimensionales (matrices), que sería lo
mismo que trabajar con listas, pero los vectores son más livianos, por lo tanto, más rápidos.

La librería “pandas” nos permite manipular los datos de un dataset o de distintos archivos como las
fuentes de orígenes. Es la herramienta con la que vamos a poder traccionar (tratar) con esos datos.
Proceso de TL (bases de datos aplicada): extraer los datos y transformarlos para poder utilizarlos.
La librería “scipy” extiende las funciones de numpy agregando características más particulares con
funciones matemáticas o algorítmicas. Probablemente se necesite importar la librería math.

La librería “matplotlib” nos permite hacer gráficos. Transforma los datos que leemos y los muestra en
un entorno gráfico.

La librería “sklearn” es más cercana al machine learning. Nos permite trabajar con algoritmos
supervisados (bases de datos aplicada 1 y 2). Tratamiento con respecto a los datos.

Con Python no se puede respetar fielmente la teoría de objetos. En POO, todas las clases tienen un estado
(siempre privado) y un comportamiento (privado o público). La única manera de modificar el estado es
utilizando los métodos. Python no tiene el concepto de privado, pero vamos a hacer convenciones para
simular un privado comenzando las variables con “_”. Python si tiene el concepto de herencia. El
constructor se declara como una función siempre con la palabra reservada “__init__” (def __init__():).
También se puede poner el destructor con la palabra reservada “__del__” (def __del__(self):).

 Segundo parcial  Programación Orientada a Objetos


 Final  Programación Funcional
 TP Grupal  Librerías

Big data es la ciencia que evalúa la transferencia de datos. Importar y exportar gran cantidad de datos. El
concepto nació con Youtube (no podía mover tanta información). Bases de datos en SQL son bases de
datos en archivos planos. Motor de datos.

Data Warehouse es un esquema de modelo que tiene como fin algo diferente a la base de datos
relacional. Esta ultima tiene como fortaleza poder manejar muchas transacciones diarias y guardar la
información completa que necesito para alimentar mi sistema de información en ese movimiento de
transacciones cotidianas. En cambio, el Data Warehouse tiene como fin guardar gran cantidad de datos. Se
tiene una base de datos con información actual y otra con información vieja. Fuente de datos para que
alguien los pueda tomar, analizarlos y encontrar patrones de comportamiento para poder predecir datos
que no tengo.

Data Mining, extracción de datos de una fuente de origen (generalmente un Data Warehouse). En esta
materia estamos a esta altura. Base de datos aplicada 2.

Una vez que hago la extracción de datos, voy a tener dos variantes del análisis. Primero, una
transformación del Data Mining que se da cuando se trata de buscarle sentido a los datos pero expresados
dentro de un entorno controlado de un área de negocios. Cuando el análisis de los datos lo hago en
función de un área de negocios (área particular de una empresa) se denomina Business Intelligence
(BI).

El Machine Learning se produce cuando se trata de hacer un análisis por medio de un conjunto de
patrones/algoritmos supervisados y no supervisados. Intento de encontrar un patrón que todavía no
conozco. En cambio, en el BI, mientras se produce el análisis de los datos buscando un patrón, el patrón
que estoy buscando lo conozco.

Data Science. El técnico de datos es una persona que conoce todas estas temáticas y puede aplicar esa
experiencia en el análisis de los datos. Cuando se hacen esas comparaciones/análisis de los datos,
buscamos estadísticas. La estadística es una disciplina científica que se ocupa de redactar datos y
manipularlos. Existen dos tipos de estadísticas: la descriptiva y la inferencial. La estadística descriptiva
tiene como propósito describir y analizar un determinado conjunto de datos sin sacar conclusiones. Esto es
lo que vamos a hacer en el trabajo practico grupal: buscar cierta información y mostrarla en un gráfico. La
estadística inferencial se refiere a los métodos que usamos para poder hacer predicciones. Obtener
conclusiones en función del análisis de los datos.

El conjunto de datos representa una muestra de un conjunto de datos que puede tomar una variable en
toda una población. Una vez que tengo los datos parciales de la muestra, debo analizar algunas variables.
Existen distintos tipos de variables: algunas van a ser cuantificables, es decir, poder medirlas en valores y
otras cualitativas, las voy a poder representar en forma comparativa (no numérica).

Dentro de las variables cuantitativas, están las variables cuantitativas discretas que son aquellas
que toman valores fijos (no pueden tomar valores con decimales). Ejemplo: cantidad de hijos. También
están las variables cuantitativas continuas, que son aquellas que pueden tomar un numero infinito no
numerable de valores. Ejemplo: temperatura máxima. La diferencia entre estos dos tipos de variables está
en los decimales: las discretas son números enteros mientras que las continuas pueden ser números con
decimales.

Dentro de las variables cualitativas, están las variables cualitativas nominales, que son aquellas que
no se pueden ordenar. Ejemplo: nacionalidad. Y también están las variables cualitativas ordinales, que
si se pueden ordenar, pero que no tienen una clasificación numérica. Ejemplo: grado de satisfacción
(malo/bueno/excelente).

Puedo mostrar la información en informes, tablas y gráficos. La tabla de frecuencias muestra los datos
ordenados, con columnas como: la puntuación (la variable), la absoluta, absoluta acumulada, relativa,
relativa acumulada. Paradoja de Simpson. Hay que tener mucho cuidado con el análisis de los datos. A
veces conviene hacer el análisis por totales y otras veces por sectores.

Hay distintos tipos de gráficos. Los gráficos de barras son representaciones entre dos variables (una en
el eje x y otra en el y). Cuando las columnas se representan con las frecuencias ordenadas de mayor a
menor se lo conoce como diagrama Pareto. También existe el diagrama de sectores, el pictograma
(se usan dibujos) y los histogramas (para variables continuas). Para cada tipo de variable conviene usar
gráficos determinados. Variable cuantitativa discreta: histograma/barras. Variable cuantitativa continua:
torta/líneas. Variable cualitativa nominal: pictograma. Variable cualitativa ordinal: barra/tortas. Variable
cualitativa discreta: barras acumuladas/dispersión.

CLASE 9 – 13/10 (POO)

En POO tenemos la creación de la clase y de la instancia de la clase. Con Python tenemos muchas
limitaciones en comparación con C#. El estado privado de una clase se debe modificar solamente por
medio de los métodos. En C# construimos “properties” con doble tabulación, mientras que en Python
tenemos que construir “a mano” los getters y setters y luego la property (C9-13-10_1.py). Dentro de
los métodos de las clases siempre debemos agregar el parámetro/atributo “self” que es una
pseudoclase que hace referencia a si mismo (“this” de C#). Podemos definir herencias. En Python
tenemos herencia múltiple pero no es una buena práctica. No tenemos la opción de sobrecarga. El
“super()” es una pseudoclase como el “self” que sirve para llamar al método de la clase base. El
constructor no se hereda. Para agregar clases abstractas e interfaces se deben agregar determinadas
librerías. Se puede importar librerías que contengan archivos con conjunto de clases. Incluso se puede
importar esas librerías de forma parcial de modo que se importen clases específicas. Existe el
polimorfismo por sobreescritura (tener un método que se sobrescribe) o polimorfismo paramétrico
(le paso un parámetro y tengo un if dentro del método).

Al diseñar un programa orientado a objetos, es recomendable colocar una clase que tenga que ver con el
negocio. Por ejemplo, si se está diseñando un sistema para bancos, la primera clase a crear será “Banco”.

El constructor solo lo pongo si quiero que haga algo especifico. Si quiero el constructor vacío no lo
declaro, no hago nada.

Cuando en un ejercicio una variable tiene un tipo de dato especifico, como estamos trabajando con Python,
no hace falta ponerle tipo de dato. Pero con la librería Pandas, vamos a tener que empezar a indicar tipos
de datos.
Consulta, la clase cuenta, en este caso, sería abstracta. ¿Existe en Python?  Sí, pero el conceto no es el
mismo. La podrían instanciar si el programador no entiende el modelo. Referencia para crear una clase
abstracta  docs.python.org/es/dev/library/abc.html

Guía de ejercicios POO.pdf en (C9-13-10_3.py)

Property:

Valor null  None

Seudoclase  Self y Super

TP6.pdf

1. ¿Cuál podría ser el enunciado de este diagrama de clases? El enunciado del diagrama de clases
presentado podría ser el siguiente: …

2. ¿Dónde se usa agregación y por qué? Se usa agregación en la clase …

3. ¿Por qué no se usa composición? No se usa composicion porque …

4. ¿Cuál es el root object? El root objet es …

5. ¿Se puede obtener una carpeta desde un objeto imagen? Justifique Si/No, ya que …

6. ¿Dónde se aplica una herencia y por qué? Se aplica herencia en … porque …

7. ¿Por qué contacto no hereda de adjunto? Justifique Contacto no hereda de Adjunto porque …

TP7.pdf + TP8.pdf

ABRIR C9-13-10_4.py

CLASE 10 – 20/10 (NO HUBO CLASES)

CLASE 11 – 27/10

Trabajo practico: descargar un archivo de algún repositorio de archivos. En español: nación, provincia,
capital. https://datos.gob.ar/dataset. Va a premiar el ingenio del trabajo.

Tres librerías que vamos a trabajar: pandas, numpy y matplotlib.pyplot. Con numpy tenemos la
posibilidad de crear vectores (estructuras multidimensionales). Con pandas tenemos la posibilidad de
trabajar con 2 tipos de datos específicos: series y dataframes. Con matplotlib podemos generar
gráficos tomando esos insumos.

Puedo trabajar con pandas traccionando cualquier insumo de datos. Las series están numeradas por
número de fila. Los dataframes automáticamente genera una tabla y lo trabaja como una matriz
dimensional.

Los dataframes son un conjunto de datos organizados en tablas. Tienen un índice formado por la fila y la
columna. Se puede crear desde otras estructuras. Se puede crear de archivos externos.
Recorrer un dataframe:

Acceso al valor:

Gráficos. Con los ylabel y xlabel me pone las leyendas en los costados del gráfico. En un gráfico de
barras, coloco kind='bar' para que se muestren las barras en vertical y 'barh' en horizontal. kind='pie'
para generar un grafico circular. kind='scatter' para generar un grafico de dispersión. También puedo
generar gráficos con datos mas específicos directamente desde la librería matplotlib. Por ejemplo puedo
directamente escribir mp.pie() indicando el dataframe respectivo.

Distintas formas de hacer gráficos: https://matplotlib.org/stable/plot_types/basic/index.html#

CLASE 12 – 03/11(sin anotaciones-trabajamos en el TP)

CLASE 13 – 10/11(sin anotaciones-trabajamos en el TP)


ToDo:

 Terminar Actividad 08 (C3-01-09_5.py) y 09 (en C4-08-09_2.py)


 Resolver ejercicio 2 de repaso (C5-…_2.py), ver la resolución en la grabación y terminar
ejercicio 2 del parcial (C6…_2.py)
 Pedirle al profe que explique el ejercicio de la clase tablero (C9-13-10_3.py) (Guía de Ejercicios
POO.pdf)
 Terminar TP6.pdf, TP7.pdf y TP8.pdf (si lo hago me sube nota en el parcial)
 Terminar de leer 2021-Python-5-Intro a Objetos.pdf y hacer las guías de ejercicios 14 y 15
 Terminar tp suicidios y tp poo

Notes:

 17/11/2022 entrega TP
 24/11/2022 segundo parcial
 01/12/2022 recuperatorios

También podría gustarte