<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Esercizio 2
Considerare il file movies.csv ottenuto estraendo i primi 1000 record del dataset scaricabile all'indirizzo https
Step1:  Per iterare lungo i record del data frame basta invocare il metodo iterrows() che restituisce un oggetto di tipo generator da usare in un ciclo for di scansione.
for (index, record) in df.iterrows()
Step2:  2) Come interpretare letteralmente una stringa
La funzione literal_eval() del modulo ast  prende come argomento una stringa e restituice l'oggetto rappresentato letteralmente dalla stringa.
Step3:  3) Come testare se un valore è NaN (Not a Number)
La funzione isnan() del modulo numpy restituisce il valore True se il valore passato come argomento è NaN.
Step4:  4) Funzioni/Metodi suggeriti
la funzione sorted() prende come argomento un oggetto iterabile e restituisce la lista dei valori ordinati in senso crescente.
Step5:  Il metodo append() degli oggetti di tipo list aggiunge in coda alla lista invocante il valore passato come argomento
Step6:  Il metodo extend() degli oggetti di tipo list estende in coda la lista invocante con i valori contenuti nell'argomento passato
Step7:  il metodo get degli oggetti di tipo dict permette di ottenere il valore relativo alla chiave passata come primo argomento e di restituire il secondo argomento (valore di default) se la chiave non è presente nel dizionario.
<ASSISTANT_TASK:>
Python Code:
import pandas as pd
df = pd.read_csv('movies.csv')
df
Explanation: Esercizio 2
Considerare il file movies.csv ottenuto estraendo i primi 1000 record del dataset scaricabile all'indirizzo https://www.kaggle.com/rounakbanik/the-movies-dataset#movies_metadata.csv.
Tale dataset è in formato csv e contiene, in record di 24 campi separati da virgola, le informazioni su film.
Il file movies.csv contiene solo un subset dei campi del dataset originale.
I campi del file csv che occorrono per risolvere l'esercizio sono:
id: indice progressivo
genres: stringa che rappresenta il letterale di una lista di dizionari con chiavi id e name che forniscono ciascuno un genere
[{'id': 16, 'name': 'Animation'}, {'id': 35, 'name': 'Comedy'}]
original_title: titolo originale
popularity: valore di popolarità
tagline: tagline del film
original_language: lingua originale
production_countries: stringa che rappresenta il letterale di una lista di dizionari con chiavi iso_3166_1 e name che forniscono ciascuno un paese di origine [{'iso_3166_1': 'DE', 'name': 'Germany'}, {'iso_3166_1': 'US', 'name': 'United States of America'}]
Si richiede di:
- elencare i 10 paesi che hanno prodotto più film, ordinandoli per numero decrescente di film prodotti, specificando per ognuno il numero di film prodotti
- fornire per ognuno dei generi cinematografici presenti nel dataset la classifica degli N (parametro in input) film più popolari (per quel genere) ordinandoli per popolarità decrescente e specificando per ognuno di essi il titolo originale e la tagline
- l'insieme delle lingue originali che sono coinvolte nella classifica precedente
Parametri di input:
- dataset dei film
- parametro N
Requisiti generali:
definire una funzione get_items() che prenda in input uno qualsiasi tra i due campi genrese production_countries (indifferentemente) ed estragga
la lista dei generi nel caso si passi come argomento il valore di un campo genres
la lista dei paesi di produzione nel caso si passi come argomento il valore di un campo production_countries
Produrre l'output nelle seguenti variabili:
lista di 10 tuple di due elementi (nome di paese, numero di film prodotti) contenenti i primi 10 paesi che hanno prodotto più film, ordinate per numero decrescente di film prodotti
dizionario delle classifiche per genere dei primi N film ordinati per popolarità decrescente:
chiave: genere di un film
valore: lista di N liste di due elementi [titolo originale, tagline] con i primi N film ordinati per popolarità decrescente
dizionario degli insiemi delle lingue coinvolte in ciascuna delle classifiche precedenti per genere:
chiave: genere di un film
valore: insieme delle lingue originali coinvolte
1) Come leggere un file csv
Il modulo pandas permette di leggere un file in formato csv (anche zippato) tramite la funzione read_csv(), che prende come argomento il nome del file da leggere.
L'oggetto restituito è un oggetto di tipo DataFrame (un data frame), cioé una tabella organizzata in righe (record) e colonne intestate.
Il codice seguente
import pandas as pd
df = pd.read_csv(input_file_name)
legge il file input_file_name e lo restituisce in un oggetto di tipo DataFrame.
End of explanation
for (index, record) in df.iterrows():
    print(record['popularity'])
Explanation: Per iterare lungo i record del data frame basta invocare il metodo iterrows() che restituisce un oggetto di tipo generator da usare in un ciclo for di scansione.
for (index, record) in df.iterrows():
    do_something
Ogni elemento fornito dell'iteratore è una tupla di due elementi:
- index: indice progressivo del record (valore intero)
- record: oggetto di tipo Series che contiene i campi del record
L'accesso al campo relativo alla colonna con nome column_name del record record avviene usando la seguente sintassi:
record[column_name]
NOTA BENE: il valore restituito da record[column_name] rispetta il tipo della colonna column_name nel file csv in input. Ad esempio se il campo nel dataset csv è un valore decimale allora il valore di record[column_name] sarà di tipo float.
End of explanation
import ast
ast.literal_eval("[1,2,3]")
Explanation: 2) Come interpretare letteralmente una stringa
La funzione literal_eval() del modulo ast  prende come argomento una stringa e restituice l'oggetto rappresentato letteralmente dalla stringa.
End of explanation
import numpy
numpy.isnan(10)
Explanation: 3) Come testare se un valore è NaN (Not a Number)
La funzione isnan() del modulo numpy restituisce il valore True se il valore passato come argomento è NaN.
End of explanation
lista = [(11.02, 3), (10.2, 1), (11.02, 2), (2.34, 10)]
sorted(lista)
Explanation: 4) Funzioni/Metodi suggeriti
la funzione sorted() prende come argomento un oggetto iterabile e restituisce la lista dei valori ordinati in senso crescente.
End of explanation
lista = [1,2,3,4]
lista.append([5, 6])
lista
Explanation: Il metodo append() degli oggetti di tipo list aggiunge in coda alla lista invocante il valore passato come argomento
End of explanation
lista = [1,2,3,4]
lista.extend([5, 6])
lista
Explanation: Il metodo extend() degli oggetti di tipo list estende in coda la lista invocante con i valori contenuti nell'argomento passato
End of explanation
my_dict = {'due': 2, 'quattro': 4, 'sei': 6}
my_dict.get('due', -1)
my_dict.get('cinque', -1)
Explanation: il metodo get degli oggetti di tipo dict permette di ottenere il valore relativo alla chiave passata come primo argomento e di restituire il secondo argomento (valore di default) se la chiave non è presente nel dizionario.
End of explanation
<END_TASK>