1. Hollywood
Laurea Magistrale in Teoria e Tecnologia della Comunicazione
Corso di Intelligenza Artificiale
A.A. 2019/2020
Beatrice Ballabio, Jacopo Marcolini
bffs
2. QUANTO SONO IN RELAZIONE TRA LORO GLI ATTORI CINEMATOGRAFICI?
Raccolta dati:
Query SPARQL al
Knowledge
Graph di Wikidata
1 2
Grafo e clustering:
Rappresentazione con
Gephi e calcolo
modularità
Visualizzazione:
Infografica interattiva
delle relazioni con
JavaScript
3
IL PROGETTO
Abbiamo analizzato la rete sociale degli attori attraverso i seguenti approcci:
3. QUANTO SONO IN RELAZIONE TRA LORO GLI ATTORI CINEMATOGRAFICI?
Raccolta dati:
Query SPARQL al
Knowledge
Graph di Wikidata
1 2
Grafo e clustering:
Rappresentazione con
Gephi e calcolo
modularità
Visualizzazione:
Infografica interattiva
delle relazioni con
JavaScript
3
IL PROGETTO
Abbiamo analizzato la rete sociale degli attori attraverso i seguenti approcci:
Raccolta dati:
Query SPARQL al
Knowledge
Graph di Wikidata
1
Scrivere ed
eseguire
queries
Download dati
CSV e JSON
Preparare
manualmente
i dati
4. QUANTO SONO IN RELAZIONE TRA LORO GLI ATTORI CINEMATOGRAFICI?
Raccolta dati:
Query SPARQL al
Knowledge
Graph di Wikidata
1 2
Grafo e clustering:
Rappresentazione con
Gephi e calcolo
modularità
Visualizzazione:
Infografica interattiva
delle relazioni con
JavaScript
3
IL PROGETTO
Abbiamo analizzato la rete sociale degli attori attraverso i seguenti approcci:
2
Grafo e clustering:
Rappresentazione con
Gephi e calcolo
modularità
Importare CSV
per creare
nodi
Importare CSV
per collegare
nodi (edges)
Calcolare
modularità
grafo
Applicare
algoritmo per
layout grafo
Definire
grafica (colore,
dimensioni,
labels)
5. QUANTO SONO IN RELAZIONE TRA LORO GLI ATTORI CINEMATOGRAFICI?
Raccolta dati:
Query SPARQL al
Knowledge
Graph di Wikidata
1 2
Grafo e clustering:
Rappresentazione con
Gephi e calcolo
modularità
Visualizzazione:
Infografica interattiva
delle relazioni con
JavaScript
3
IL PROGETTO
Abbiamo analizzato la rete sociale degli attori attraverso i seguenti approcci:
Importare
JSON per lista
attori, relazioni
e immagini
Convertire dati
in matrice
simmetrica
ordinata
Calcolare
archi, fiocchi e
labels del
chord diagram
Calcolare
colori,
gradiente e
trasparenza
Aggiungere
tooltip con
somme dati e
immagini
Visualizzazione:
Infografica interattiva
delle relazioni con
JavaScript
3
6. Knowledge Base di linked data con triple formate da:
Wikidata is a free, collaborative, multilingual, secondary database, collecting structured data to provide support
for Wikipedia, Wikimedia Commons, the other wikis of the Wikimedia movement, and to anyone in the world.
(Source: Wikidata)
WIKIDATA
Item (Q) - Property (P) - Value
Item Property Value
Q42 P69 Q691283
Douglas Adams educated at St John's CollegeLabel
Id
Wikidata is published under the Creative
Commons Public Domain Dedication 1.0
1 RACCOLTA DATI
7. Dati acquisiti il 20/11/2019
935.731 film
160.844 attori
• Multiple queries SPARQL effettuate all’endpoint di
Wikidata
• Queries effettuate con divisione per genere
cinematografico per limiti computazionali:
- Tempo massimo di esecuzione consentito: 60s
- Aggiunta di labels molto onerosa in termini di tempo
• I risultati sono stati poi combinati per ottenere dati
da elaborare con Gephi e D3
Generi cinematografici Cast completo per film
Paese d’origine per
attore
Anno di pubblicazione
del film
No film realizzati per
attore con immagine
No di apparizioni in un
film per coppia di attori
QUERIES:
1 RACCOLTA DATI
Codice queries:
Download progetto > folder query > folder sparql
8. Generi cinematograficiQUERY:
# Ricerca dei generi cinematografici presenti su Wikidata. I risultati
# sono stati esaminati per valutare quali siano i più rilevanti per
# numero di film.
SELECT ?genre (COUNT(DISTINCT ?movie) AS ?movieNumber)
WHERE {
{ SELECT ?genre ?movie
WHERE {
?genre wdt:P31 wd:Q201658.
?movie wdt:P136 ?genre.
}
}
}
GROUP BY ?genre
ORDER BY DESC(?movieNumber)
9. # PARTE 1A: query per ottenere i nodi rappresentanti i film del grafo
# Gephi. I risultati ottenuti vanno collegati tramite ID per creare
# gli edges(PARTE 3).
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT ?movie ?movieLabel
WHERE {
{ SELECT DISTINCT ?movie
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
FILTER EXISTS {
?movie wdt:P161 ?actor.
}
}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
QUERY: Cast completo per film
10. # PARTE 2A: query per ottenere i nodi rappresentanti gli attori del
# grafo Gephi. I risultati ottenuti vanno collegati tramite ID per
# creare gli edges (PARTE 3).
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT ?actor ?actorLabel
WHERE {
{ SELECT DISTINCT ?actor
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
?movie wdt:P161 ?actor.
}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
QUERY: Cast completo per film
11. # PARTE 3A: query per ottenere gli edges rappresentanti il cast
# completo di un film nel grafo Gephi. I risultati ottenuti collegano
# tramite ID i nodi film e attore (PARTE 1 e PARTE 2).
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT ?actor ?movie
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
?movie wdt:P161 ?actor.
}
QUERY: Cast completo per film
12. # PARTE 1B: query per ottenere i nodi rappresentanti i Paesi di
# cittadinanza del grafo Gephi. I risultati ottenuti vanno collegati
# tramite ID per creare gli edges (PARTE 2).
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT ?country ?countryLabel
WHERE {
{ SELECT DISTINCT ?country
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
?movie wdt:P161 ?actor.
?actor wdt:P27 ?country.
FILTER EXISTS {
?actor wdt:P27 ?country.
}
}
}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
QUERY: Paese d’origine per
attore
13. # PARTE 2B: query per ottenere gli edges rappresentanti la
# cittadinanza di un attore nel grafo Gephi. I risultati ottenuti
# collegano tramite ID i nodi attore e Paese (PARTE 1B e PARTE 2A).
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT ?actor ?country
WHERE {
{ SELECT ?actor ?country
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
?movie wdt:P161 ?actor.
?actor wdt:P27 ?country.
}
}
}
QUERY: Paese d’origine per
attore
14. # Query per ottenere gli edges di collegamento fra i film e l’anno di
# pubblicazione. I risultati ottenuti collegano tramite ID i nodi film
#(PARTE 1A)e i nodi rappresentanti gli anni. Per ottenerli abbiamo
# semplicemente creato un CSV in Excel con le date da 1890 a 2020.
# I dati sono stati salvati in CSV e manipolati per l’import in Gephi.
SELECT DISTINCT ?movie ?year
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui il genere
?movie wdt:P577 ?year.
}
QUERY: Anno di pubblicazione
del film
15. # Query per ottenere i top 10 attori per numero di film.
# Dati utilizzati in JSON per creare il cerchio esterno del chord
# diagram in D3.
# E’ possibile rimuovere la variabile ?img per ottenere attori anche
# privi di immagine disponibile.
SELECT ?actor ?actorLabel (COUNT(DISTINCT ?movie) AS ?movieNumb) ?img
WHERE {
{ SELECT ?img ?actor ?movie
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui genere
?movie wdt:P161 ?actor.
?actor wdt:P18 ?img.
}
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
GROUP BY ?actor ?actorLabel ?img
ORDER BY DESC(?movieNumb)
LIMIT 10
QUERY: No film realizzati per
attore con immagine
16. # Numero di apparizioni in un film per coppia di attori.
# Dati utilizzati in JSON per creare i collegamenti interni
# del chord diagram in D3.
# E’ possibile decommentare le variabili ?movieBFFS e
# ?movieBFFSLabel per ottenere elenco completo dei film.
SELECT ?actor ?actorLabel ?actor2 ?actor2Label
(COUNT(DISTINCT ?movieBFFS) AS ?movieNumberBFFS)
# ?movieBFFS ?movieBFFSLabel
WHERE {
# SELECT top 10 ripetuto due volte per valutare le coppie
{ SELECT ?actor (COUNT(DISTINCT ?movie) AS ?movieNumber)
WHERE {
{ SELECT ?actor ?movie
WHERE {
?movie wdt:P136 wd:Q471839. # Inserisci qui genere
?movie wdt:P161 ?actor.
}
}
}
GROUP BY ?actor
ORDER BY DESC(?movieNumber)
LIMIT 10
}
# SELECT end
# continua ...
# ... segue
# SELECT top 10 ripetuto due volte per valutare le coppie
{ SELECT ?actor2 (COUNT(DISTINCT ?movie2) AS ?movieNumber2)
WHERE {
...
}
# SELECT end
?movieBFFS wdt:P136 wd:Q471839. # Inserisci qui genere
?movieBFFS wdt:P161 ?actor.
?movieBFFS wdt:P161 ?actor2.
FILTER (?actor != ?actor2).
SERVICE wikibase:label { bd:serviceParam wikibase:language
"[AUTO_LANGUAGE],en". }
}
GROUP BY ?actor ?actor2 ?actorLabel ?actor2Label #?movieBFFS
?movieBFFSLabel
ORDER BY DESC(?movieNumberBFFS)
QUERY: No di apparizioni in un
film per coppia di attori
17. Pre-processing dati manuale:
• Modifica nome colonne per
preparazione input Gephi (es.
Id, Label, Source, Target)
• Aggiunta colonna Type per
colorazione nodi
• Conversione codifica UTF-8
per caratteri speciali
• Rimozione nodi non collegati
(es. voci incomplete, film di
animazione senza attori, ecc)
Query
CSV JSON
Gephi
• Correzione manuale caso
particolare: immagine
duplicata attore
• Conversione dati con scrittura
codice JavaScript per
ottenere matrice simmetrica
ordinata
1 RACCOLTA DATI
Preparazione dati
D3
19. GEPHI
Gephi is the leading visualization and exploration software for all kinds of graphs and networks. Gephi is
open-source and free.
(Source: Gephi)
Importare CSV
per creare
nodi
Importare CSV
per collegare
nodi (edges)
Calcolare
modularità
grafo
Applicare
algoritmo per
layout grafo
Definire
grafica (colore,
dimensioni,
labels)
OpenOrd:
Algoritmo interno a Gephi in 5 fasi che distribuisce i nodi
secondo il numero di collegamenti e il peso degli edge.
Parametri usati:
Liquid = 35%; Expansion = 45%; Cooldown = 10%;
Crunch = 0%; Simmer = 10%; Num Iterations = 1000.
GRAFO E CLUSTERING2
20. • Visualizzazione della rete formata da attori e
film da loro interpretati
• La vicinanza tra i nodi rappresenta la forza
della relazione tra attori e/o film
• Individuazione di nodi HUB: attori che hanno
partecipato ad un numero elevato di film e
sono molto collegati nella rete
• La periferia del grafo è popolata da attori
che hanno partecipato ad un unico film e
che non fanno parte della componente
connessa centrale
Genere: Sci-Fi
Film
Attore
GRAFO E CLUSTERING2
24. GRAFO E CLUSTERING2
CLUSTERING
Clustering is a technique for finding similarity groups in data, called clusters. I.e., it groups data instances that are similar to
(near) each other in one cluster and data instances that are very different (far away) from each other into different clusters.
(Source: Bing Liu, UIC)
Per valutare l’esistenza di comunità all’interno del dataset abbiamo scelto di utilizzare
l’algoritmo Modularity con l’implementazione fornita da Gephi.
(Source: Neo4j)
• L’algoritmo è basato sul punteggio di modularità (M)
che misura il grado di connessione interna fra i
punti di una stessa comunità e di connessione
esterna fra le diverse comunità.
• L’obiettivo è individuare comunità con connessioni
dense fra gli elementi di uno stesso cluster e
connessioni sparse tra elementi di diversi cluster.
25. K-MEANS DBSCAN MODULARITY
REQUISITI
- Attributi dei punti
- Valore di K definito dall’utente
- Attributi dei punti
- Determinazione parametri
raggio intorno (ε) e numero
minimo oggetti intorno
(MinPts)
- Connessioni dei nodi in un grafo
PRO
- Facile implementazione
- Molto utilizzato
- Efficiente: tempo di
esecuzione lineare O(n)
- Resistente al rumore
- Resistente agli outliers
- Individua clusters di varie
forme e dimensioni
- Assenza di parametri
- Efficiente: tempo di
esecuzione linearitmico
O(n log n)
CONTRO
- Ottimo locale (con SSE)
- Necessita media/moda degli
attributi
- Valore di K definito dall’utente
- Sensibile agli outliers
- Sensibile a inizializzazione
casuale/con euristiche
- Individua solo clusters
iperellittici/ipersferici
- Non gestisce variazioni di
densità
- Sensibile alla determinazione
dei parametri
- Ottimo locale
- Ignora attributi dei punti
- Necessita punti connessi in un
grafo
- Difficoltà ad individuare
piccole comunità in grafi molto
grandi
GRAFO E CLUSTERING2
26. (Images source: Neo4j)
GRAFO E CLUSTERING2
ALGORITMO MODULARITY (GEPHI)
• Step 1: Formazione di comunità ottime
- Valutazione del punteggio di modularità fra ciascun nodo ed i
suoi vicini
- Individuazione delle comunità con punteggio di modularità
massimo
- Assegnazione di ciascun nodo alle nuove comunità individuate
• Step 2: Aggregazione comunità e formazione nuovo network
- Ogni comunità viene trattata come un nodo di una nuova rete
- Vengono create comunità di comunità
• Step 3: Iterazione step 1 e 2 fino a risultato non più migliorabile
• Step 0: Inizializzazione
- Assegnazione di ogni nodo ad una comunità formata
esclusivamente dal nodo stesso
Inizializzazione Formazione comunità Aggregazione comunità
Iterazione:
Formazione comunità
Iterazione:
Aggregazione comunità
27. 1920 - 1940
Supereroi
1970 - 1980
Giappone
• Individuazione di 400+ comunità
• Clustering troppo granulare migliorabile con
l’aggiunta di nuove connessioni a tipi di
dati diversi (es. informazioni su nazionalità
degli attori, anno di pubblicazione dei film)
• Raggruppamenti per varie semantiche,
spesso confuse
Genere: Sci-Fi
DATI UTILIZZATI:
ATTORE - FILM
GRAFO E CLUSTERING2
28. GRAFO E CLUSTERING2
Giappone: Haruo Nakajima Supereroi: Samuel L. Jackson
Una delle comunità meglio definite è il Giappone, grazie ai numerosi film di Godzilla. Il recente trend Marvel definisce un’altra comunità di attori e film strettamente collegati.
29. GRAFO E CLUSTERING2
Giappone: Haruo Nakajima
Una delle comunità meglio definite è il Giappone, grazie ai numerosi film di Godzilla.
Id,Label,Type
http://www.wikidata.org/entity/Q1315977,Haruo Nakajima,actor
...
Id,Label,Type
http://www.wikidata.org/entity/Q200432,Godzilla vs. Hedorah,film
http://www.wikidata.org/entity/Q127430,King Kong Escapes,film
http://www.wikidata.org/entity/Q2622991,Space Amoeba,film
...
Source,Target
http://www.wikidata.org/entity/Q200432,http://www.wikidata.org/entity/Q1315977
http://www.wikidata.org/entity/Q127430,http://www.wikidata.org/entity/Q1315977
http://www.wikidata.org/entity/Q2622991,http://www.wikidata.org/entity/Q1315977
...
30. • Aggiunta dei dati relativi all’anno di
pubblicazione dei film (nuovi HUB)
• Individuazione di 36 comunità
• Clustering ben definito per epoche con
progressione lineare del tempo
• Alcuni raggruppamenti geografici isolati nei
casi di forte identità cinematografica
nazionale
1900 - 1980
1980 - 2000
2000 - 2020
Ex Jugoslavia
Giappone
Francia
Genere: Sci-Fi
DATI UTILIZZATI:
ATTORE – FILM – ANNO
GRAFO E CLUSTERING2
31. GRAFO E CLUSTERING2
Giappone: Ichirō Nagai
Gli HUB principali di questo grafo sono gli anni di pubblicazione, che sovrastano quelle regionali… … ma le comunità strettamente collegate mantengono la loro autonomia!
2011
32. GRAFO E CLUSTERING2
2011
Gli HUB principali di questo grafo sono gli anni di pubblicazione, che sovrastano quelle regionali…
Id,Label,Type
http://www.wikidata.org/entity/Q28262,Joel Kinnaman,actor
http://www.wikidata.org/entity/Q773355,Timothy Omundson,actor
...
Id,Label,Type
http://www.wikidata.org/entity/Q964657,The Darkest Hour,film
http://www.wikidata.org/entity/Q7940811,Voltron: The End,film
...
Id,Label,Type
2011,2011,year
...
Source,Target
http://www.wikidata.org/entity/Q964657,http://www.wikidata.org/entity/Q28262
http://www.wikidata.org/entity/Q7940811,http://www.wikidata.org/entity/Q773355
...
Source,Target
http://www.wikidata.org/entity/Q964657,2011
http://www.wikidata.org/entity/Q7940811,2011
...
33. • Aggiunta dei dati relativi al Paese di
cittadinanza degli attori
• Individuazione di 44 comunità
• Clustering ben definito per Paesi con
centralità degli USA, centro di gravità per le
relazioni tra clusters
• Vicinanza tra clusters rispecchia prossimità
geografica e/o linguistica
DATI UTILIZZATI:
ATTORE – FILM – ANNO – PAESE
USA
Giappone
Canada
UK
Francia
Italia
Germania
Russia
Genere: Sci-Fi
GRAFO E CLUSTERING2
34. GRAFO E CLUSTERING2
USA Italia: Nirvana (1997)
Gli attori con cittadinanza americana sono distribuiti in tutto il grafo, classificati
nei cluster delle nazioni in cui hanno lavorato maggiormente.
Haruhiko Yamanouchi è un attore giapponese che è stato molto attivo nel cinema
italiano, pertanto appartiene alla comunità «Italia» invece che «Giappone».
36. È POSSIBILE ELABORARE QUESTI DATI PER RENDERLI A MISURA D’UOMO?
GRAFICO UTILIZZATO:
CHORD DIAGRAM
• HTML
• CSS + Bootstrap
• JavaScript + D3
• Server locale (plugin Visual Studio)
3 VISUALIZZAZIONE
Abbiamo realizzato con JavaScript una serie di infografiche interattive per esplorare i dati.
Codice completo JavaScript:
Download progetto > folder js
37. WORKFLOW
Assemblare
pagina HTML
Ⅵ
Aggiungere
tooltip con
somme dati e
immagini
Ⅴ
Calcolare
colori,
gradiente e
trasparenza
Ⅳ
Calcolare
archi, fiocchi e
labels del
chord diagram
Ⅲ
Convertire dati
in matrice
simmetrica
ordinata
Ⅱ
Importare
JSON per lista
attori, relazioni
e immagini
Ⅰ
3 VISUALIZZAZIONE
Posizionando il cursore sopra gli archi verrà visualizzato il numero dei film rappresentati, mentre posizionandolo sopra il
nome dell’attore verrà visualizzata la sua immagine da Wikidata o un placeholder nel caso questa non fosse disponibile.
38. VISUALIZZAZIONE3
WORKFLOW
Attori che spesso appaiono nello stesso film
saranno molto collegati nel chord diagram.
Assemblare
pagina HTML
Ⅵ
Aggiungere
tooltip con
somme dati e
immagini
Ⅴ
Calcolare
colori,
gradiente e
trasparenza
Ⅳ
Calcolare
archi, fiocchi e
labels del
chord diagram
Ⅲ
Convertire dati
in matrice
simmetrica
ordinata
Ⅱ
Importare
JSON per lista
attori, relazioni
e immagini
Ⅰ
Convertire dati
in matrice
simmetrica
ordinata
Ⅱ
["Mack Sennett",
"Arthur V. Johnson",
"Owen Moore",
"Kate Bruce",
"George Nichols",
"Mary Pickford",
"Henry B. Walthall",
"Lionel Barrymore",
"Harry Carey",
"Lon Chaney"]
[0, 113, 89, 69, 65, 56, 36, 1, 0, 0]
[113, 0, 79, 41, 42, 40, 27, 0, 0, 0]
[89, 79, 0, 40, 43, 41, 23, 0, 0, 1]
[69, 41, 40, 0, 53, 48, 34, 11, 8, 0]
[65, 42, 43, 53, 0, 39, 30, 1, 2, 1]
[56, 40, 41, 48, 39, 0, 23, 5, 4, 0]
[36, 27, 23, 34, 30, 23, 0, 13, 13, 2]
[1, 0, 0, 11, 1, 5, 13, 0, 21, 1]
[0, 0, 0, 8, 2, 4, 13, 21, 0, 0]
[0, 0, 1, 0, 1, 0, 2, 1, 0, 0]
39. POSSIBILI MIGLIORAMENTI
CONCLUSIONI E SVILUPPI FUTURI
E’ stato possibile analizzare in modo soddisfacente la rete sociale degli attori:
• Scoperta di HUB: attori, Paesi ed anni molto collegati nella rete e centrali nella
definizione delle comunità
• Individuazione di comunità basate su caratteristiche esplicitamente rappresentate nel
grafo (cittadinanza degli attori, periodo di attività)
• Individuazione di comunità basate su caratteristiche non esplicitamente
rappresentate nel grafo (es. tema dei film, saghe cinematografiche)
• Rappresentazione dei risultati ottenuti in formato interattivo di più facile consultazione
RISULTATI OTTENUTI
• Aggiungere nuovi tipi di dato nei grafi per migliorare il clustering, ad esempio l’incasso
dei film per considerarne la popolarità (PROBLEMA: time-out 60s query Wikidata)
• Rimuovere la suddivisione per generi e considerare le comunità di attori nella loro
interezza (PROBLEMA: memoria richiesta da Gephi)
40. BIBLIOGRAFIA
• d3Vienno
https://www.youtube.com/channel/UCNYL0ZF2j8-
OSGZ4iHBLNPA
• Chord diagram in d3
https://www.d3-graph-gallery.com/chord
• Data-based orientations for gradients in a d3.js chord
diagram
https://www.visualcinnamon.com/2016/06/orientation-
gradient-d3-chord-diagram.html
• Chord diagram with color gradient and opacity
https://bl.ocks.org/JulienAssouline
• How to show data on mouseover in d3.js
https://chartio.com/resources/tutorials/how-to-show-data-on-
mouseover-in-d3js/
GEPHI D3
• Learn how to use Gephi
https://gephi.org/users/
• Visualising Twitter Friend Connections Using Gephi
https://blog.ouseful.info/2011/07/07/
• Fast unfolding of communities in large networks
https://arxiv.org/abs/0803.0476
• Louvain Modularity
https://neo4j.com/blog/graph-algorithms-neo4j-louvain-
modularity/