1
Fork 0
mirror of https://github.com/Steffo99/unimore-bda-5.git synced 2024-11-21 23:54:24 +00:00
bda-5-steffo/README.md

97 lines
6.5 KiB
Markdown
Raw Normal View History

\[ Stefano Pigozzi | Grafo "creato da zero" | Tema Graph Analytics | Big Data Analytics | A.A. 2022/2023 | Unimore \]
2023-02-16 16:41:57 +00:00
2023-05-09 00:49:23 +00:00
# Analisi su grafo Neo4J relativo alle dipendenze delle crates del linguaggio Rust
2023-02-16 16:41:57 +00:00
> ### Graph analytics
>
> Obiettivo dellattività è analizzare il data graph di una Sandbox di Neo4j (esclusa quella vista a lezione) attraverso la definizione di almeno due research question che possano essere risolte attraverso le tecniche di graph analytics viste a lezione.
>
2023-02-16 16:41:57 +00:00
> Lattività consisterà nello studio delle research question attraverso la progettazione, limplementazione e lesecuzione di almeno 4 tecniche distinte e una loro interpretazione nel contesto della Sandbox scelta.
>
2023-02-16 16:41:57 +00:00
> Alcune precisazioni riguardo lattività richiesta:
>
2023-02-16 16:41:57 +00:00
> * Le Sandbox di Neo4J che possono essere usate a questo scopo sono quelle che hanno installato la Graph Data Science (GDS) Library.
> * Lattività di progettazione consisterà
> 1. nella definizione delle proiezioni che saranno memorizzate in named graph, Almeno una proiezione dovrà essere una Cypher Projection;
> 2. nella scelta degli algoritmi. In questa fase, si farà uso delle funzioni di memory estimation.
>
2023-02-16 16:41:57 +00:00
> * Le tecniche potranno essere implementate sia usando gli algoritmi di GDS messi a disposizione da Neo4J sia attraverso lesecuzione di query Cypher. Le tecniche implementate non dovranno essere già presenti nella Sandbox.
>
2023-02-16 16:41:57 +00:00
> Il risultato dellattività sarà un documento contenente
>
2023-02-16 16:41:57 +00:00
> * una breve descrizione della Sandbox scelta, dello schema del grafo analizzato e delle principali caratteristiche;
> * una descrizione delle research question e della soluzione proposta inclusa la progettazione delle tecniche proposte che dovrà essere adeguatamente giustificata;
> * il codice delle query eseguite sulla Sandbox, i risultati ottenuti e linterpretazione dei risultati ottenuti che rappresenteranno le risposte alle research question.
>
2023-02-16 16:41:57 +00:00
> Le attività verranno valutate sulla base dei seguenti criteri:
>
2023-02-16 16:41:57 +00:00
> * storytelling: la Sandbox è ben descritta? le research question proposte sono adeguate alle caratteristiche del grafo analizzato?
> * progettazione della graph analytics e analisi dei risultati:
> * Le proiezioni e gli algoritmi individuati sono adeguati in termini di correttezza e completezza a rispondere alle research question?
> * Linterpretazione dei risultati risponde alle research quesion?
2023-02-16 16:41:57 +00:00
> * complessità dellimplementazione
>
> #### Corrispondenza
>
> > \[...\] Ho installato la Graph Data Science library sul grafo che ho realizzato per la precedente attività, ed adesso sarei interessato a svolgere l'attività di Graph Analytics su di esso.
> >
> > È un'opzione prevista dalla consegna, oppure non è consentita?
>
> > Si è consentita ma la dimensione del grafo deve essere sufficiente per fare Graph Analytics. 
2023-05-08 23:25:33 +00:00
## Sinossi
2023-05-09 00:49:23 +00:00
Si sono effettuate ricerche di Graph Analytics sul database a grafo dell'indice [Crates.io], realizzato per il progetto a tema Neo4J, determinando le crate più importanti all'ecosistema attraverso gli algoritmi di *Degree Centrality*, *Betweenness Centrality*, e *PageRank*, e ricercando cluster di tag per migliorare la classificazione delle crate nell'indice attraverso gli algoritmi di *Louvain*, *Label Propagation*, e *Leiden*.
## Introduzione
> Per informazioni su cosa è una crate in Rust, come è formata, o come è stato costruito il dataset utilizzato, si veda l'[introduzione della relazione del progetto a tema Neo4J].
### 1⃣ Quali sono le crates più importanti dell'ecosistema Rust?
Un'informazione utile da sapere per gli sviluppatori del linguaggio Rust e per i manutentori dell'indice [Crates.io] sono i nomi delle crate più importanti nell'indice.
Alcuni esempi di casi in cui il dato di importanza delle crate potrebbe essere utile sono:
- selezionare anticipatamente le crate su cui effettuare caching più aggressivo
- determinare le crate più a rischio di supply chain attack
- prioritizzare determinate crate nell'esecuzione di esperimenti con [crater]
Lo scopo di questa ricerca è quello di determinare, attraverso indagini sulla rete di dipendenze, un valore di importanza per ciascuna crate, e una classifica delle 25 crate più importanti dell'indice.
### 2⃣ Quali potrebbero essere altre *categories* utilizzabili per classificare crate?
Affinchè le crate pubblicate possano essere utilizzate, non è sufficiente che esse vengano indicizzate: è necessario anche che gli sviluppatori che potrebbero farne uso vengano al corrente della loro esistenza.
Nasce così il problema della *discoverability*, ovvero di rendere più facile possibile per gli sviluppatori le migliori crate con le funzionalità a loro necessarie.
A tale fine, [Crates.io] permette agli autori di ciascuna crate di specificare fino a 5 *keyword* (brevi stringhe arbitrarie alfanumeriche, come `logging` o `serialization`) per essa, attraverso le quali è possibile trovare la crate tramite funzionalità di ricerca del sito, e fino a 5 *category* (chiavi predefinite in un apposito [thesaurus], come `Aerospace :: Unmanned aerial vehicles`), che inseriscono la crate in raccolte tematiche sfogliabili.
Lo scopo di questa ricerca è quello di determinare, attraverso indagini sulle *keyword*, nuove possibili *category* da eventualmente introdurre nell'indice, ed eventualmente sperimentare un metodo innovativo per effettuare classificazione automatica delle crate.
2023-05-08 23:25:33 +00:00
2023-05-09 01:02:13 +00:00
## Struttura del progetto
Il progetto è organizzato nelle seguenti directory:
- `README.md`: questo stesso file
- `scripts/`: le query presenti in questa relazione come file separati, per una più facile esecuzione
2023-05-09 01:10:26 +00:00
## Prerequisiti
Si è scelto di utilizzare un clone del DBMS Neo4J gestito da Neo4J Desktop del progetto precedente.
### Neo4J Desktop (1.5.7)
Per effettuare il clone del DBMS, è stato sufficiente aprire il menu <kbd>···</kbd> del DBMS originale e cliccare l'opzione <kbd>Clone</kbd> presente al suo interno.
### Graph Data Science Library (2.3.3)
Per installare la [Graph Data Science Library], si è cliccato sul nome del database clonato, si ha selezionato la scheda <kbd>Plugins</kbd>, aperto la sezione <kbd>Graph Data Science Library</kbd>, e infine premuto su <kbd>Install</kbd>.
2023-05-08 23:25:33 +00:00
<!-- Collegamenti -->
2023-05-09 00:49:23 +00:00
[Crates.io]: https://crates.io/
[introduzione della relazione del progetto a tema Neo4J]: https://github.com/Steffo99/unimore-bda-4#introduzione
[thesaurus]: https://github.com/rust-lang/crates.io/blob/master/src/boot/categories.toml
2023-05-09 01:10:26 +00:00
[crater]: https://github.com/rust-lang/crater
[Graph Data Science Library]: https://neo4j.com/docs/graph-data-science/current/