<style> .reveal section img { background:none; border:none; box-shadow:none; } .reveal { font-size: 30px; } .reveal p { text-align: left; } .reveal ul { display: block; } .reveal ol { display: block; } </style> # Elements de Python avançats ## Taller Nous Usos de la Informàtica <h1><img width="150" src="https://i.imgur.com/vvZMy0I.png"></h1> --- ### List Comprehensions ```python= text = ‘Una gallina xica, tica, mica’ first_chars = [] for word in text.split(): first_chars.append(word[0]) # [’U’, ’g’, ’x’, ’t’, ’m’] first_chars = [word[0] for word in text.split()] # [’U’, ’g’, ’x’, ’t’, ’m’] ``` --- ```python= text = ‘Una gallina xica, tica, mica’ first_chars = [] for word in text.split(): if word[0].lower() in ‘aeiou’: first_chars.append(word[0]) first_chars = [word[0] for word in text.split() \ if word[0].lower() in ‘aeiou’] ``` --- ### Dict Comprehensions ```python= a = {n: n*n for n in range(7)} # a -> {0:0, 1:1, 2:4, 3:9, 4:16, 5:25, 6:36} b = {val: key for key,val in a.items()} # {0: 0, 1: 1, 4: 2, 9: 3, 16: 4, 25: 5, 36: 6} ``` --- ### Set Comprehensions ```python= s = {(x,y) for x in range(1,3) for y in range(1,3)} # {(1, 2), (1, 1), (2, 1), (2, 2)} prime = {x for x in range(2, 12) \ if all(x % y != 0 for y in \ range(2, int(math.floor(math.sqrt(x))) + 1))} # {2,3,5,7,11} ``` --- ### Programació OO & Python A Python, tot són objectes. Per definir nous objectes, farem servir la paraula `class`. `class` defineix una classe en el mateix sentit que `def` defineix una funció. Què és una classe? És una agrupació lògica de dades i funcions (que en aquest context anomenem *mètodes*). --- ### Programació OO & Python Les classes són els "motlles" per crear *objectes*. Quan definim la classe `Client` amb la paraula `class` no hem creat un nou client, només hem definit la recepta per crear objectes de tipus `client`. --- ### Programació OO & Python <h1><img width="650" src="https://i.imgur.com/YiPFMf2.png"></h1> --- ### Programació OO & Python El mètode `__init__` és el que pròpiament defineix la recepta de creació d'un objecte. Si volem crear l'objcte podem fer això: ```python= jeff = Customer('Jeff Knupp', 1000.0) ``` Podem crear tants objectes com vulguem (*instàncies*). Els mètodes de la classe tenen accés a totes les dades contingudes a una instància d'un objecte. --- ### Programació OO & Python Els atributs de classe són atributs definits a nivell de classe: ```python= class Car(object): wheels = 4 def __init__(self, make, model): self.make = make self.model = model mustang = Car('Ford', 'Mustang') print mustang.wheels # 4 print Car.wheels # 4 ``` Aquests atributs no es defineixen dins de ``__init__``, sinó fora. --- ### Numpy El mòdul `numpy` afegeix a Python una nova estructura de dades: el *numpy array*. ```python= import numpy as np a = np.array([0,1,2,3]) a # array([0,1,2,3]) ``` :::info <i class="fa fa-eye fa-fw"></i> **Tutorial**: [numpy](https://numpy.org/devdocs/user/quickstart.html) ::: --- ### Pandas El mòdul `pandas` afegeix a Python una nova estructura de dades: el *DataFrame*: estructura matricial amb columnes de tipus homogeni, indexada per noms de files i columnes. <h1><img width="450" src="https://i.imgur.com/dzpKIYg.png"></h1> :::info <i class="fa fa-eye fa-fw"></i> **Tutorial**: [pandas](https://pandas.pydata.org/docs/) ::: --- ### Pandas ```python= import pandas as pd df = pd.DataFrame( { "Name": [ "Braund, Mr. Owen Harris", "Allen, Mr. William Henry", "Bonnell, Miss. Elizabeth", ], "Age": [22, 35, 58], "Sex": ["male", "male", "female"], } ) # Name Age Sex # 0 Braund, Mr. Owen Harris 22 male # 1 Allen, Mr. William Henry 35 male # 2 Bonnell, Miss. Elizabeth 58 female ``` --- ### Pandas Cada columna d'un DataFrame s'anomena `Series`, i és comporta bàsicament com un `numpy array` d'un cert `type`. ```python= df["Age"] # 0 22 # 1 35 # 2 58 # Name: Age, dtype: int64 ``` --- ### Pandas ```python= ages = pd.Series([22, 35, 58], name="Age") ages # 0 22 # 1 35 # 2 58 # Name: Age, dtype: int64 df["Age"].max() # 58 ``` --- ### Pandas Podem llegir dades tabulars de qualsevol format: <h1><img width="650" src="https://i.imgur.com/8Y2ICUb.png"></h1> --- ### Pandas: Com seleccionem un subconjunt de columnes? ```python= titanic = pd.read_csv("titanic.csv") titanic.head() # PassengerId Survived Pclass Name #0 1 0 3 Braund, Mr. Owen Harris ... #1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... ... #2 3 1 3 Heikkinen, Miss. Laina ... #3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) ... 113803 53.1000 C123 S #4 5 0 3 Allen, Mr. William Henry ... #[5 rows x 12 columns] age_sex = titanic[["Age", "Sex"]] age_sex.head() # Age Sex #0 22.0 male #1 38.0 female #2 26.0 female #3 35.0 female #4 35.0 male ``` --- ### Pandas: Com seleccionem un subconjunt de files (filtrem)? ```python= above_35 = titanic[titanic["Age"] > 35] above_35.head() # PassengerId Survived Pclass Name #1 2 1 1 Cumings, Mrs. John Bradley #6 7 0 1 McCarthy, Mr. Timothy J #11 12 1 1 Bonnell, Miss. Elizabeth #13 14 0 3 Andersson, Mr. Anders Johan #15 16 1 2 Hewlett, Mrs. (Mary D Kingcome) #[5 rows x 12 columns] ``` --- ### Pandas: Com seleccionem un subconjunt de files (filtrem)? ```python= class_23 = titanic[titanic["Pclass"].isin([2, 3])] class_23.head() # PassengerId Survived Pclass Name Sex #0 1 0 3 Braund, Mr. Owen Harris male #2 3 1 3 Heikkinen, Miss. Laina female #4 5 0 3 Allen, Mr. William Henry male #5 6 0 3 Moran, Mr. James male #7 8 0 3 Palsson, Master. Gosta Leonard male #[5 rows x 12 columns] ``` --- ### Pandas: Com selecciono una subtaula (files i columnes)? ```python= adult_names = titanic.loc[titanic["Age"] > 35, "Name"] adult_names.head() #1 Cumings, Mrs. John Bradley #6 McCarthy, Mr. Timothy J #11 Bonnell, Miss. Elizabeth #13 Andersson, Mr. Anders Johan #15 Hewlett, Mrs. (Mary D Kingcome) #Name: Name, dtype: object ``` --- ### Pandas: Com selecciono files i columnes? ```python= a = titanic.iloc[9:25, 2:5] a # Pclass Name Sex #9 2 Nasser, Mrs. Nicholas (Adele Achem) female #10 3 Sandstrom, Miss. Marguerite Rut female #11 1 Bonnell, Miss. Elizabeth female #12 3 Saundercock, Mr. William Henry male #13 3 Andersson, Mr. Anders Johan male #.. ... ... ... #20 2 Fynney, Mr. Joseph J male #21 2 Beesley, Mr. Lawrence male #22 3 McGowan, Miss. Anna "Annie" female #23 1 Sloper, Mr. William Thompson male #24 3 Palsson, Miss. Torborg Danira female #[16 rows x 3 columns] ``` --- ### Pandas: Com assigno valors? Quan selecciono cel·les amb `loc` i `iloc` puc assignar nous valors: ```python= titanic.iloc[0:3, 3] = "anonymous" titanic.head() # PassengerId Survived Pclass Name #0 1 0 3 anonymous #1 2 1 1 anonymous #2 3 1 3 anonymous #3 4 1 1 Futrelle, Mrs. Jacques Heath #4 5 0 3 Allen, Mr. William Henry #[5 rows x 12 columns] ```
{"metaMigratedAt":"2023-06-16T09:54:33.983Z","metaMigratedFrom":"YAML","breaks":true,"slideOptions":"{\"theme\":\"white\",\"transition\":\"fade\"}","description":"A Python, tot són objectes.","title":"Elements de Python avançats","contributors":"[{\"id\":\"27c1cf26-ef2c-44cb-8ae1-2edc488d3f8e\",\"add\":9930,\"del\":1554}]"}
    667 views