[SOD16] Come organizzarsi per l'analisi di rete a FP7

59 views
Skip to first unread message

Alberto

unread,
May 2, 2016, 5:02:28 AM5/2/16
to Spaghetti Open Data
SOD16 si avvicina a grandi passi. L'hackathon su analisi di rete di FP7 ha 8 iscritti, che è ottimo e perfino abbondante. In questo post vorrei fare il punto del lavoro. Ci sono due cose che possiamo fare.

La prima è riprendere e raffinare il lavoro fatto l'anno scorso su FP7. I dati su cui abbiamo lavorato non erano gran che. Stefano Durì aveva fatto un lavoro supplementare di ripulitura di grande valore, ma che non è arrivato troppo tardi per entrare nell'analisi. Se facciamo questa scelta riprendiamo la metodologia dell'anno scorso, ma (1) partiamo da dati più puliti e (2) mettiamo in discussione anche il lavoro metodologico, per vedere se riusciamo a scoprire altre cose rispetto alle dinamiche di potere nei progetti di ricerca finanziati. Il punto di partenza sono le cose scritte nel wiki

La seconda è di tentare un paragone tra la rete FP7 e la rete Horizon2020. Questo è più complicato, perché le differenze tra i programmi quadro rendono la comparabilità dei dati imperfetta, senza contare che FP7 è finito e H2020 è appena cominciato. I dataset su H2020 sono qui. Vedo circa 7000 progetti, ma molti sono attribuibili a call che non danno luogo a consorzi (per esempio SME Instruments ne ha circa 1600). Il problema della comparazione bisogna porselo.

Io propongo di fare così.
  1. Stefano fa una due diligence sui dati. Per quelli FP7 forse basta riprendere le cose fatte l'anno scorso (i suoi dati sono su GitHub). Per quelli Horizon 2020 bisogna guardarci, anche se – udite udite – adesso le organizzazioni sono identificate per codice PIC, il che semplifica molto il lavoro di ripulitura. L'ideale sarebbe che Stefano producesse altri due files riferiti a H2020, con la stessa struttura di quelli già prodotti per FP7.
  2. A Trento, se siamo veramente più di 3, possiamo dividerci in due gruppi che lavorano in parallelo, uno su FP7 e uno su H2020. Alla fine produciamo due reti e le confrontiamo in qualche modo (per esempio: test sulla forma della degree distribution). 
Vi va? Stefano, ci stai?


Stefano Durì

unread,
May 2, 2016, 8:10:14 AM5/2/16
to Spaghetti Open Data
entro stasera dovrei riuscire a guardare i dati e a risponderti

Alberto

unread,
May 2, 2016, 3:29:44 PM5/2/16
to Spaghetti Open Data
Grazie, Stefano.

Una cosa importante. Sto riguardando i tuoi dati dell'anno scorso, e vedo che nella ripulitura generale, hai eliminato tutti i nomi dei partecipanti! Così è troppo pulito, non si riesce più a costruire la rete. Hai una versione intermedia, che li mantiene? Nel mio file c'è un campo "coordinators" e poi c'era originariamente un campo "participants" che ho splittato con OpenRefine (ho fatto 50 colonne: "participant 1", ... "participant 50").

Lo script funziona così:
  1. Carica tutti i progetti e li trasforma in nodi di tipo "progetto".
  2. Carica un'organizzazione; la trasforma in un nodo di tipo "organizzazione"; ne cerca il nome tra i participanti dei vari progetti; per ogni progetto che trova a cui quella organizzazione ha partecipato crea anche un arco che va dall'organizzazione al progetto.
Il risultato è un grafo bipartito, con le organizzazioni connesse ai progetti. Con un altro script proiettiamo questo grafo in uno organizzazioni-organizzazioni. 

Comunque, per fare

Alberto

unread,
May 2, 2016, 3:30:35 PM5/2/16
to Spaghetti Open Data
(scusa, mi è partito il send) ... per fare questo è necessario preservare le identità di tutti partners nel consorzio. :-)

Stefano Durì

unread,
May 3, 2016, 5:22:11 AM5/3/16
to Spaghetti Open Data
ancora non mi è del tutto chiaro come dovrei ripulire i dati, ma ho cominciato a sistemare il file delle organizzazioni. Attribuisco in automatico lo stesso id a tutte le org con identici nome e codice paese, per gli altri genero un id alfanumerico (hash) basato sempre su nome e paese. Una volta effettuata questa operazione, possiamo 
- lasciare nel file progetti solo gli attributi che servono (eliminando ad es. la descrizione, che è pesante)
- lasciare nel file delle org solo gli attributi che servono (direi: <id>, <nome normalizzato>, <country>)
- estrarre dal file delle org gli archi <org id> - <proj id> 
e a quel punto direi che abbiamo fatto giornata.
Ti torna?
I dati fp7 non so se ho tempo di rivederli, ma sarei per metterli in seconda priorità.

Alberto

unread,
May 3, 2016, 6:57:56 AM5/3/16
to Spaghetti Open Data
Mi torna tutto. Salvo una cosa: nel file delle org non ci sono gli archi. Vanno costruiti a partire dal file dei progetti. Per questo è essenziale che i partecipanti siano tutti contenuti nel file ripulito dei progetti. Mi fa anche comodo mantenere il coordinatore a parte. L'anno scorso avevo un campo "coordinator", uno "coordinator country" e uno "participants" che poi ho dovuto splittare per ripulirlo con OpenRefine. Lo splittaggio non è essenziale, ma risparmia qualche linea di codice. 

Lo script alla fine dovrò rifarlo (come faceva a girare l'anno scorso?), ma l'idea è:

create a list of dicts containing all projects 
for project in projects:
    create project node with attributes # programme, subprogramme etc.
    read names of participants in project
    if org node of the same name does not yet exist: 
        create org node 
        read attributes from org file
    create an edge (org, project) 
        
Message has been deleted

Stefano Durì

unread,
May 3, 2016, 8:22:59 AM5/3/16
to Spaghetti Open Data
[edited]

forse non capisco il punto. 
Nel file org ogni riga contiene sia l'id dell'org (corretto come indicato sopra) sia l'id del progetto. Mentre il file dei progetti contiene soltanto item unici (i progetti, appunto), quello delle org contiene 31868 partecipazioni uniche
Gli id unici che si possono individuare dopo la correzione sono invece circa 12300 (sto cercando di rifinire la parte di dedup dei nomi). 
Non deve essere fatto così il file degli archi? Con i due id, intendo?

Alberto

unread,
May 3, 2016, 10:18:56 AM5/3/16
to Spaghetti Open Data
Hai ragione tu, Stefano, stavo giusto smanettando.

Il campo che abbiamo usato per joinare i due files è "rcn". Mi sono lasciato trarre in inganno dal fatto che su GitHub abbiamo lasciato la tua versione dei files dati, che segue una logica diversa. 

Quindi la logica è:
  • creo i nodi-progetto dai files di progetto
  • mi passo le partecipazioni uniche. A ogni riga del file orgs mi creo il nodo di quella organizzazione se già non c'è. Poi creo un arco da quel nodo al nodo-progetto che ha quel codice rcn. 
Ho notato che il file H2020organizations.csv ha un camp che si chiama 'id', che a occhio è il codice PIC. Questo risolve in un colpo solo tutti i problemi di dedup! 

Però tu hai più occhio di me per l'ordine dei dati, quindi è importante che gli dia una guardata. Poi, se mi dici "il file è già abbastanza pulito, scaricatelo così com'è" per me va bene.

Nota a margine: più ci penso più credo che avrebbe senso fare un lavoro comparativo tra FP7 (o meglio, per simmetria, i suoi primi anni) e H2020. Per studiarci FP7 posso partire anche dal grafo progetti-organizzazioni costruito l'anno scorso, e poi filtrare per la proprietà "data" dei nodi-progetto, quindi confermo: priorità a montare dei file dati di H2020. Però una versione pulita dei dati FP7 non sarebbe per niente inutile – tanto più che in quel caso i codici PIC non c'erano. Ho fatto la deduplicazione con OpenRefine e l'aiuto di Matteo Fortini, ma abbiamo lavorato di vanga dove tu lavori di bisturi! 


Stefano Durì

unread,
May 3, 2016, 7:26:47 PM5/3/16
to Spaghetti Open Data
l'unico problema che vedo è quello degli identificativi delle organizzazioni. In molti casi sono nulli e la stessa organizzazione (stesso nome e stesso paese) a volte ha l'id e altre no. Ho attribuito gli id corretti alle organizzazioni doppie con id vuoto e creato degli id alfanumerici (md5) per le altre. In sintesi, tutte hanno un id. Alla fine abbiamo quindi tre file
- organizzazioni uniche con id corretti
- progetti
- archi (record number del progetto - id corretto dell'organizzazione)
Ho tolto qualche attributo che mi sembrava appesantire inutilmente i file.

Stefano Durì

unread,
May 4, 2016, 4:11:03 AM5/4/16
to Spaghetti Open Data
dimenticavo: nel file delle organizzazioni uniche gli ultimi due attributi sono il numero di progetti "partecipati" e il contributo totale ricevuto.

Alberto

unread,
May 4, 2016, 4:50:13 AM5/4/16
to Spaghetti Open Data
Stefano, sei un mito totale. Grazie! 

Due domande.
  1. Nel file dei progetti, cos'è la variabile "subjects", e perché è sempre vuota? 
  2. C'è modo di recuperare l'informazione contenuta nei campi "coordinator" e "coordinator country" del file cordis-h2020projects.csv ? Mi sembra rilevante. Immagino che l'omissione sia dovuta a questo: tu hai fatto la scelta di deduplicare i nomi delle organizzazioni nel file orgs, ma non in quello projects, giusto? Per cui adesso, nel file orgs, abbiamo un'unica organizzazione per il CNR, mentre nel campo "coordinator" del file projects potremmo avere sia "CNR", sia "C.N.R.", sia "Consiglio Nazionale delle Ricerche" etc. 
Comunque, gran bel lavoro. :-)

Alberto

unread,
May 4, 2016, 6:04:37 AM5/4/16
to Spaghetti Open Data
Stefano, scusa, ho un'altra domanda.

Nel file dei progetti ci sono due campi in cui l'unità di misura sono euro: "totalCost" e "ecMaxContribution". Vedo che c'è un uso strano della virgola. La maggior parte dei valori finisce con una virgola (esempio: "75000,". Alcuni, però, hanno una virgola e poi un'altra cifra (esempio: "183454,8"). Sono centesimi quelli dopo la virgola?

Stefano Durì

unread,
May 4, 2016, 6:35:43 AM5/4/16
to Spaghetti Open Data
aspetta ancora un attimo a lavorare sui file, è meglio controllare che tutto funzioni: sbagli un passaggio di Kettle e crei mostri come ridere. 
  1. Il campo subjects risulta vuoto anche a me, per cui lo butto
  2. Ho aggiunto al file delle organizzazioni una colonna con il numero di partecipazioni a progetti per le quali è indicato il contributo ricevuto. Questo è il valore giusto da utilizzare per calcolare un eventuale valore medio
  3. Ho recuperato coordinator e coordinatorCountry. Appena ho un attimo, però, preferirei sostituirli con il coordinatorId generato nelle fasi precedenti
  4. Adesso le ultime versioni dei file sono scaricabili dal folder https://drive.google.com/open?id=0B7UcdTifQwNoM0I4NXc2Q1QzN0E
  5. Nel folder c'è anche questo ss in cui ho riversato il file delle organizzazioni

Stefano Durì

unread,
May 4, 2016, 6:54:36 AM5/4/16
to Spaghetti Open Data
scusa, ho postato prima di notare che non avevo letto questa tua richiesta. Sì, l'uso della virgola è strano già nel file di partenza. Potrei però migliorare la cosa portando tutto a due decimali. Rimetto su il file progetti nel folder condiviso

Alberto

unread,
May 4, 2016, 7:49:35 AM5/4/16
to Spaghetti Open Data
Sì, ma tranquillo. Io intanto uso il tuo dataset di ieri per debuggare lo script. 

Il problema della virgola l'ho risolto scrivendomi una funzione. 

Alberto

unread,
May 4, 2016, 9:46:41 AM5/4/16
to Spaghetti Open Data
Stefano, i miei scripts adesso girano. Posso andare con i dati che hai postato alle 12.35?

Stefano Durì

unread,
May 4, 2016, 1:51:45 PM5/4/16
to Spaghetti Open Data
direi che i file che ho caricato adesso dovrebbero essere a posto. In quello dei progetti ho aggiunto due colonne: numero di organizzazioni partecipanti e somma dei relativi contributi erogati
Ho anche aggiunto lo spreadsheet dei progetti

naturalmente chiunque trovi stranezze nei file è caldamente invitato a segnalarle tempestivamente
buon lavoro
Reply all
Reply to author
Forward
0 new messages