Esame Lun 28, Giu 2021 B¶
Seminari Python - Triennale Sociologia @Università di Trento
B1 Game of Thrones¶
Apri con Pandas il file game-of-thrones.csv che contiene gli episodi in varie annate.
usa l’encoding
UTF-8
B1.1) Ti viene fornito un dizionario preferiti con gli episodi preferiti di un gruppo di persone, che però non si ricordano esattamente i vari titoli che sono quindi spesso incompleti: Seleziona gli episodi preferiti da Paolo e Chiara
assumi che la capitalizzazione in
preferitisia quella correttaNOTA: il dataset contiene insidiose doppie virgolette
"attorno ai titoli, ma se scrivi il codice nel modo giusto questo non dovrebbe essere un problema
[2]:
import pandas as pd
import numpy as np # importiamo numpy e per comodità lo rinominiamo in 'np'
preferiti = {
"Paolo" : 'Winter Is',
"Chiara" : 'Wolf and the Lion',
"Anselmo" : 'Fire and',
"Letizia" : 'Garden of'
}
# scrivi qui
B1.2) Seleziona tutti gli episodi che sono stati mandati per la prima volta in onda in un certo anno (colonna Original air date)
NOTA:
annoti viene fornito comeint
[3]:
anno = 17
# scrivi qui
B2 Punti di interesse universiadi¶
Scrivi una funzione che dato il file punti-interesse.csv dei punti di interesse di Trento individuati per le Universiadi 2013, RITORNA una lista ordinata e senza duplicati con tutti i nomi che trovi nella colonna CATEGORIA.
Sorgente dati: dati.trentino.it
USA un csv.reader e l’encoding
latin-1non includere categorie vuote nel risultato
alcune categorie sono in realtà più di una divise da trattino, separale in categorie distinte:
Esempi:
Banca- Bancomat-CambiovalutaCentro commerciale-Grande magazzino
[4]:
import csv
def cercat(file_csv):
raise Exception('TODO IMPLEMENT ME !')
risultato = cercat('punti-interesse.csv')
print(risultato)
atteso = ['Affitta Camere', 'Agriturismo', 'Alimentari', 'Appartamento Vacanze',
'Autostazione', 'Banca', 'Bancomat', 'Bar', 'Bed & Breakfast', 'Biblioteca',
'Birreria', 'Bus Navetta', 'Cambiovaluta', 'Camping', 'Centro Wellness',
'Centro commerciale', 'Corrieri', 'Discoteca', 'Editoria', 'Farmacia', 'Funivia',
'Gelateria', 'Grande magazzino', 'Hotel', 'Istituzioni', 'Mercatini', 'Mercato',
'Monumento', 'Museo', 'Noleggio Sci', 'Numeri utili', 'Parcheggio', 'Pasticceria',
'Piscina', 'Posta', 'Prodotti tipici', 'Pub', 'Residence', 'Rifugio', 'Ristorante',
'Scuola Sci', 'Sede Trentino Trasporti', 'Snow Park', 'Souvenir', 'Sport', 'Stadio',
'Stadio del ghiaccio', 'Stazione dei Treni', 'Taxi', 'Teatro', 'Ufficio informazioni turistiche']
#TEST
print()
for i in range(len(atteso)):
if risultato[i] != atteso[i]:
print("ERRORE ALL'ELEMENTO %s:" % i)
print(' ATTESO:', atteso[i])
print(' TROVATO:', risultato[i])
break
['Affitta Camere', 'Agriturismo', 'Alimentari', 'Appartamento Vacanze', 'Autostazione', 'Banca', 'Bancomat', 'Bar', 'Bed & Breakfast', 'Biblioteca', 'Birreria', 'Bus Navetta', 'Cambiovaluta', 'Camping', 'Centro Wellness', 'Centro commerciale', 'Corrieri', 'Discoteca', 'Editoria', 'Farmacia', 'Funivia', 'Gelateria', 'Grande magazzino', 'Hotel', 'Istituzioni', 'Mercatini', 'Mercato', 'Monumento', 'Museo', 'Noleggio Sci', 'Numeri utili', 'Parcheggio', 'Pasticceria', 'Piscina', 'Posta', 'Prodotti tipici', 'Pub', 'Residence', 'Rifugio', 'Ristorante', 'Scuola Sci', 'Sede Trentino Trasporti', 'Snow Park', 'Souvenir', 'Sport', 'Stadio', 'Stadio del ghiaccio', 'Stazione dei Treni', 'Taxi', 'Teatro', 'Ufficio informazioni turistiche']
B3 gratt¶
Il profilo di una città può essere rappresentato come una lista 2D dove gli 1 rappredentano gli edifici. Nell’esempio sotto, l’altezza dell’edificio più alto è 4 (la seconda colonna da destra)
[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1]]
Scrivi una funzione che prende un profilo come lista 2-D di 0 e 1 e RITORNA l’altezza del grattacielo più alto, per altri esempi vedere gli assert.
Credits: esercizio preso da Edabit Tallest Skyscraper
Mostra soluzione[5]:
def gratt(mat):
raise Exception('TODO IMPLEMENT ME !')
assert gratt([[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 1, 0, 1, 0],
[0, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1]]) == 4
assert gratt([
[0, 0, 0, 0],
[0, 1, 0, 0],
[0, 1, 1, 0],
[1, 1, 1, 1]
]) == 3
assert gratt([
[0, 1, 0, 0],
[0, 1, 0, 0],
[0, 1, 1, 0],
[1, 1, 1, 1]
]) == 4
assert gratt([
[0, 0, 0, 0],
[0, 0, 0, 0],
[1, 1, 1, 0],
[1, 1, 1, 1]
]) == 2
B4 scendisali¶
Scrivi una funzione che date le dimensioni di n righe e m colonne RITORNA una NUOVA matrice numpy n x m con sequenze che scendono e salgono a righe alterne come negli esempi
se
mè dispari, lanciaValueError
>>> scendisali(6,10)
array([[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.]])
[6]:
import numpy as np
def scendisali(n,m):
raise Exception('TODO IMPLEMENT ME !')
assert np.allclose(scendisali(1,2), np.array([[0., 0.],
[0., 0.]]))
assert type(scendisali(1,2)) == np.ndarray
assert np.allclose(scendisali(2,6), np.array([[0., 0., 0., 2., 1., 0.],
[0., 1., 2., 0., 0., 0.]]))
assert np.allclose(scendisali(6,10), np.array([[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 4., 3., 2., 1., 0.],
[0., 1., 2., 3., 4., 0., 0., 0., 0., 0.]]))
try:
scendisali(2,3)
raise Exception("Avrei dovuto fallire prima!")
except ValueError:
pass
[ ]: