Commit d3fcd807 authored by cbanchoff's avatar cbanchoff
Browse files

Agregué las teroías

parent 91dc1ca0
......@@ -6,6 +6,7 @@ ser las prácticas, guías, explicaciones o algunos ejemplos.
## Índice
- [Prácticas](./practicas)
- [Teorías](./teorias)
- [Guías](./guias)
- [Instalación de Python](./guias/instalacion_python.ipynb)
- [Git](./guias/guia_git.ipynb)
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
%% Cell type:markdown id:younger-ready tags:
# Seminario de Lenguajes - Python
## Cursada 2021
### Clase 5
%% Cell type:markdown id:first-satisfaction tags:
## Comentamos el ejemplo que dejé en el video: ¿algo está mal?
%% Cell type:code id:extensive-printing tags:
``` python
def leo_caracteres():
f = open("imagine.txt","r")
for x in f.read():
print(x)
f.close()
```
%% Cell type:markdown id:gorgeous-force tags:
# CSV: ¿más formatos?
- CSV (Comma Separated Values).
- Es un formato muy común para importar/exportar desde/hacia hojas de cálculo y bases de datos.
- Ejemplo:
```
nombre,ciudad,ref
William Campbell,La Plata,www.instagram.com/williamcampbellok
Buendia,La Plata,https://buendia.bandcamp.com/
Lúmine,La Plata,https://www.instagram.com/luminelp/
```
- +Info: https://docs.python.org/3/library/csv.html
- [PEP 305](https://www.python.org/dev/peps/pep-0305/)
%% Cell type:markdown id:advanced-offering tags:
# Datasets
- Hay muchos datasets disponibles de muchas temáticas:
- En nuestro país:
- Datos de [Argentina](https://datos.gob.ar/dataset)
- Datos de [CABA](https://data.buenosaires.gob.ar/)
- Datos de [La Plata](https://catalogodatos.laplata.gob.ar/dataset)
- Otros:
- https://data.world/
- https://www.kaggle.com/
- https://www.imdb.com/interfaces/
- Y muchos más...
%% Cell type:markdown id:southwest-minister tags:
## Muchos son datos abiertos, pero otros... no tanto...
### ¡PRESTAR ATENCIÓN a la licencias y requisitos para su uso!
%% Cell type:markdown id:returning-pioneer tags:
# ¿Qué vemos en netflix?
Vamos a trabajar con el archivo: [netflix_titles.csv](https://www.kaggle.com/shivamb/netflix-shows)
%% Cell type:code id:robust-reynolds tags:
``` python
import csv
archivo = open("ejemplos/clase5/netflix_titles.csv", "r")
csvreader = csv.reader(archivo, delimiter=',')
#encabezado = csvreader.__next__()
encabezado = next(csvreader)
print(encabezado)
print("Titulo"+" "*35+"Director")
for linea in csvreader:
if linea[1] == "TV Show" and linea[5] == "Argentina":
print(f"{linea[2]:<40} {linea[3]}")
archivo.close()
```
%% Cell type:markdown id:existing-dating tags:
# El módulo cvs
- Hay que importarlo.
- **csv.reader**: cea un objeto "iterador" que nos permite recorrer las líneas del archivo.
- ¿De qué tipo es línea?
- ¿Por qué incluimos el paŕametro **delimiter**? ¿Dialectos?
%% Cell type:markdown id:palestinian-batch tags:
# Otra solución ...
%% Cell type:code id:pending-jamaica tags:
``` python
import csv
archivo = open("ejemplos/clase5/netflix_titles.csv", "r")
csvreader = csv.reader(archivo, delimiter=',')
shows_ar = filter(lambda x: x[5] == "Argentina" and x[1] == "TV Show", csvreader)
for elem in shows_ar:
print(f"{elem[2]:<40} {elem[3]}")
#print(shows_ar)
archivo.close()
```
%% Cell type:markdown id:stunning-morgan tags:
# Creamos nuestro archivo csv de bandas de música
%% Cell type:markdown id:sustained-assist tags:
- **csv.writer:** retorna un objeto que convierte los datos con los que trabajamos en el prorgrama en cadenas con el formato delimitadas con el separador correspondiente.
%% Cell type:code id:flexible-threshold tags:
``` python
import csv
import json
archivo = open("bandas.txt")
archivo_csv = open("bandas.csv", "w")
bandas = json.load(archivo)
datos_a_mostrar = json.dumps(bandas, indent=4)
print(datos_a_mostrar)
writer = csv.writer(archivo_csv)
writer.writerow(["Nombre", "Ciudad de procedencia", "Refencias"])
for banda in bandas:
writer.writerow([banda["nombre"], banda["ciudad"], banda["ref"]])
archivo.close()
archivo_csv.close()
```
%% Cell type:markdown id:removed-praise tags:
# Lo leemos
%% Cell type:code id:different-format tags:
``` python
archivo_cvs = open("bandas.csv", "r")
csvreader = csv.reader(archivo_cvs, delimiter=',')
for linea in csvreader:
print(linea)
archivo_csv.close()
```
%% Cell type:markdown id:pregnant-europe tags:
# Primer desafío
- Dado el conjunto de datos con series y películas de Netflix, queremos:
1- guardar en otro archivo las peliculas agregadas en el año 2020.
2- los cinco (5) países con más producciones en Netflix.
%% Cell type:code id:military-draft tags:
``` python
# Solución.....
```
%% Cell type:markdown id:incorrect-apparatus tags:
## Los que quieran, compartir solución con @clauBanchoff
- Recuerden mandarme mensaje para revisar.
%% Cell type:markdown id:apparent-asset tags:
# ¿Saben qué son las GUI?
%% Cell type:markdown id:advance-direction tags:
## GUI: Graphical User Interface
%% Cell type:markdown id:further-chase tags:
<img src="imagenes/SimpleGUI_todo.png" alt="nos vemos el martes" style="width:550px;"/>
%% Cell type:markdown id:changed-toner tags:
# GUI en Python
- Vamos a usar [PySimpleGUI](https://pysimplegui.readthedocs.io/en/latest/)
- Es un **framework** bastante simple para desarrollar interfaces gráficas en Python.
- Es software libre: https://github.com/PySimpleGUI/PySimpleGUI
- Se instala con pip: **pip install pysimplegui**
- Vamos a ir de a poco...
- Más info en: https://pysimplegui.readthedocs.io/en/latest/cookbook/
- También en https://realpython.com/pysimplegui-python/
%% Cell type:markdown id:spoken-fiction tags:
# ¿Con qué elementos podemos trabajar?
<img src="imagenes/SimpleGUI_todoElementos.png" alt="nos vemos el martes" style="width:1050px;"/>
%% Cell type:markdown id:scenic-paintball tags:
# Popups: las ventanas más sencillas
%% Cell type:code id:sound-desire tags:
``` python
import PySimpleGUI as sg
sg.Popup('Mi primera ventanita')
```
%% Cell type:markdown id:combined-sapphire tags:
- **import PySimpleGUI as sg**, permite acceder a los recursos por el nombre **sg**.
%% Cell type:code id:lucky-resort tags:
``` python
import PySimpleGUI as sg
sg.Popup('Mi primera ventanita', button_color=('black', 'red'))
sg.PopupYesNo('Mi primera ventanita', button_color=('black', 'green'))
sg.PopupOKCancel('Mi primera ventanita', button_color=('black', 'grey'))
texto = sg.PopupGetText('Titulo', 'Ingresá algo')
sg.Popup('Resultados', 'Ingresaste el siguiente texto: ', texto)
```
%% Cell type:markdown id:informational-hamburg tags:
# Creamos una ventana en PySimpleGUI
%% Cell type:code id:concrete-console tags:
``` python
import PySimpleGUI as sg
sg.Window(title="Hola Mundo!", layout=[[]], margins=(100, 50)).read()
```
%% Cell type:markdown id:descending-kidney tags:
- **margins**: tamaño de la ventana en pixeles.
- **read()**: devuelve los eventos que se produzca al activar la ventana.
%% Cell type:markdown id:rolled-fisher tags:
# Sobre los eventos
%% Cell type:code id:naval-violence tags:
``` python
import PySimpleGUI as sg
layout = [[sg.Text("Hola Mundo!")], [sg.Button("OK")]]
window = sg.Window("Primer Demo", layout, margins=(200, 150))
while True:
event, values = window.read()
if event == "OK" or event == sg.WIN_CLOSED:
break
window.close()
```
%% Cell type:markdown id:compact-bandwidth tags:
# ¿Cómo recuperamos los valores ingresados desde la UI?
%% Cell type:code id:demanding-account tags:
``` python
import PySimpleGUI as sg
layout = [ [sg.Text('Ingresá primer valor'), sg.InputText()],
[sg.Text('Ingresá segundo valor'), sg.InputText()],
[sg.Button('Ok'), sg.Button('Cancel')] ]
window = sg.Window("Segundo Demo", layout, margins=(200, 150))
while True:
event, values = window.read()
if event == "Cancel" or event == sg.WIN_CLOSED:
break
print('Datos ingresados: ', values)
window.close()
```
%% Cell type:markdown id:occupied-calculation tags:
# Layout: ¿cómo organizamos la UI?
Representa al esquema o diseño de nuestra UI: **cómo se distribuyen los elementos en la UI**.
%% Cell type:code id:committed-penetration tags:
``` python
layout = [ [sg.Text('Ingresá primer valor'), sg.InputText()],
[sg.Text('Ingresá segundo valor'), sg.InputText()],
[sg.Button('Ok'), sg.Button('Cancel')] ]
```
%% Cell type:markdown id:bulgarian-doctor tags:
- ¿De qué tipo es la variable layout?
- ¿Qué elementos estamos incluyendo?
%% Cell type:markdown id:through-kinase tags:
# Elementos de la UI
- Acá van algunos disponibles en PySimpleGUI
- Buttons: File Browse, Folder Browse, Color chooser, Date picker, etc.
- Checkbox, Radio Button, Listbox
- Slider, Progress Bar
- Multi-line Text Input, Scroll-able Output
- Image, Menu, Frame, Column, Graph, Table
- Referencias: https://pysimplegui.readthedocs.io/en/latest/call%20reference/#element-and-function-call-reference
%% Cell type:markdown id:certain-battle tags:
# Agreguemos elementos
%% Cell type:code id:appreciated-hindu tags:
``` python
import PySimpleGUI as sg
layout = [[sg.Input('Ingresa algo')],
[sg.Listbox(values=('Item 1', 'Item 2', 'Item 3'))],
[sg.OK()]]
window = sg.Window("Elementos básicos", layout, margins=(200, 150))
event, values = window.read()
sg.Popup(event, values, line_width=200)
```
%% Cell type:code id:dental-praise tags:
``` python
sg.ChangeLookAndFeel('DarkAmber')
layout = [[sg.Listbox(values=('Item 1', 'Item 2', 'Item 3'), background_color='yellow', size=(20,3)),
[sg.Input('Last input')],
[sg.ColorChooserButton(" Elegi color")],
[sg.OK()]] ]
```
%% Cell type:markdown id:varying-number tags:
# PySimpleGUI en GitHub
* En [PySimpleGUI.py](https://github.com/PySimpleGUI) hay mucha información y referencias útiles.
* Por ejemplo, hay [varios ejemplos](https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms) que pueden servir de base para nuestros desarrollos:
%% Cell type:markdown id:internal-serve tags:
# ¡¡Las ventajas del software libre!!
%% Cell type:markdown id:occupied-instrumentation tags:
# Hablemos del trabajo integrador
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
def calcular_promedio(lista):
""" Calcula el promedio de los valores dentro de la lista dada como argumento"""
cant_elementos = len(lista)
return 0 if cant_elementos == 0 else sum(lista)/cant_elementos
def calcular_promedio_descuidada(valores):
""" Calcula el promedio de los valores dentro de la lista dada como argumento"""
return sum(valores) / len(valores)
import unittest
from mis_funciones import calcular_promedio
class TestMiFuncion(unittest.TestCase):
def test_case1(self):
""" Testea que el promedio de una lista vacía de 0"""
self.assertEqual(calcular_promedio([]), 0)
def test_case2(self):
""" Testea que el promedio de una lista con un único valor es el mismo valor """
valor = 1
self.assertEqual(calcular_promedio([valor]), valor)
def test_case3(self):
""" testea que el promedio de los valores 1, 2 y 3 sea 2"""
self.assertEqual(calcular_promedio([1, 2, 3]), 2)
if __name__ == '__main__':
unittest.main()
import unittest
from mis_funciones import calcular_promedio_descuidada
class TestFuncionDescuidada(unittest.TestCase):
def test_case1(self):
""" Testea que el promedio de los valores 20, 50 y 70 sea 40.0 """
self.assertEqual(calcular_promedio_descuidada([20, 30, 70]), 40.0)
def test_case2(self):
""" Testea que se levante la excepciónn ZeroDivisionError cuando la lista está vacía """
self.assertRaises(ZeroDivisionError, calcular_promedio_descuidada, [])
def test_case3(self):
""" Testea que el argumento de la función sea una secuencia"""
self.assertRaises(TypeError, calcular_promedio_descuidada, 20, 30, 70)
if __name__ == '__main__':
unittest.main()
This diff is collapsed.
# Default ignored files
/shelf/
/workspace.xml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Nosetests" />
</component>
</module>
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment