Grafico a dispersione in R utilizzando ggplot2 (con esempio)
I grafici sono la terza parte del processo di analisi dei dati. La prima parte riguarda estrazione dei dati, la seconda parte tratta pulizia e manipolazione dei dati. Alla fine, potrebbe essere necessario per lo scienziato dei dati comunicare graficamente i suoi risultati.
Il lavoro dello scienziato dei dati può essere riassunto nella seguente immagine
- Il primo compito di un data scientist è definire una domanda di ricerca. Questa domanda di ricerca dipende dagli obiettivi e dagli scopi del progetto.
- Successivamente, uno dei compiti più importanti è l'ingegneria delle funzionalità. Il data scientist deve raccogliere, manipolare e pulire i dati
- Una volta completato questo passaggio, può iniziare a esplorare il set di dati. A volte è necessario affinare e modificare l'ipotesi originale a causa di una nuova scoperta.
- Quando il esplicativo una volta raggiunta l'analisi, il data scientist deve considerare la capacità del lettore di farlo comprendere i concetti e i modelli sottostanti.
- I suoi risultati dovrebbero essere presentati in un formato comprensibile a tutte le parti interessate. Uno dei metodi migliori per comunicare i risultati sono attraverso a grafico.
- I grafici sono uno strumento incredibile per semplificare analisi complesse.
pacchetto ggplot2
Questa parte del tutorial si concentra su come creare grafici/grafici con R.
In questo tutorial utilizzerai il pacchetto ggplot2. Questo pacchetto è costruito sulla base coerente del libro Grammatica della grafica scritto da Wilkinson, 2005. ggplot2 è molto flessibile, incorpora molti temi e specifiche della trama ad un alto livello di astrazione. Con ggplot2, non puoi tracciare grafica tridimensionale e creare grafica interattiva.
In ggplot2, un grafico è composto dai seguenti argomenti:
- dati
- mappatura estetica
- oggetto geometrico
- trasformazioni statistiche
- bilancia
- sistema di coordinate
- aggiustamenti di posizione
- sfaccettatura
Imparerai come controllare questi argomenti nel tutorial.
La sintassi di base di ggplot2 è:
ggplot(data, mapping=aes()) + geometric object arguments: data: Dataset used to plot the graph mapping: Control the x and y-axis geometric object: The type of plot you want to show. The most common object are: - Point: `geom_point()` - Bar: `geom_bar()` - Line: `geom_line()` - Histogram: `geom_histogram()`
Grafico a dispersione
Vediamo come funziona ggplot con il set di dati mtcars. Si inizia tracciando un grafico a dispersione della variabile mpg e della variabile drat.
Grafico a dispersione di base
library(ggplot2) ggplot(mtcars, aes(x = drat, y = mpg)) + geom_point()
Spiegazione del codice
- Per prima cosa passi il set di dati mtcars a ggplot.
- All'interno dell'argomento aes() aggiungi l'asse x e l'asse y.
- Il segno + significa che vuoi che R continui a leggere il codice. Rende il codice più leggibile rompendolo.
- Utilizzare geom_point() per l'oggetto geometrico.
Produzione:
Grafico a dispersione con gruppi
A volte può essere interessante distinguere i valori in base a un gruppo di dati (ad esempio dati a livello di fattore).
ggplot(mtcars, aes(x = mpg, y = drat)) + geom_point(aes(color = factor(gear)))
Spiegazione del codice
- Aes() all'interno di geom_point() controlla il colore del gruppo. Il gruppo dovrebbe essere un fattore variabile. Pertanto, converti la marcia variabile in un fattore.
- Complessivamente, hai il codice aes(color = factor(gear)) che cambia il colore dei punti.
Produzione:
Cambia asse
Ridimensionare i dati è una parte importante del lavoro del data scientist. In rare occasioni i dati si presentano sotto una bella forma a campana. Una soluzione per rendere i dati meno sensibili ai valori anomali è ridimensionarli.
ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear)))
Spiegazione del codice
- Trasformi le variabili xey in log() direttamente all'interno della mappatura aes().
Si noti che è possibile applicare qualsiasi altra trasformazione come la standardizzazione o la normalizzazione.
Produzione:
Grafico a dispersione con valori adattati
È possibile aggiungere un altro livello di informazioni al grafico. È possibile tracciare il valore adattato di una regressione lineare.
my_graph <- ggplot(mtcars, aes(x = log(mpg), y = log(drat))) + geom_point(aes(color = factor(gear))) + stat_smooth(method = "lm", col = "#C42126", se = FALSE, size = 1) my_graph
Spiegazione del codice
- grafico: Memorizzi il tuo grafico nella variabile grafico. È utile per un uso futuro o per evitare linee di codice troppo complesse
- L'argomento stat_smooth() controlla il metodo di smoothing
- metodo = “lm”: Regressione lineare
- col = “#C42126”: Codice per il colore rosso della linea
- se = FALSE: non visualizzare l'errore standard
- dimensione = 1: la dimensione della linea è 1
Produzione:
Tieni presente che sono disponibili altri metodi di livellamento
- glm
- gam
- perdita: valore predefinito
- cerchione
Aggiungi informazioni al grafico
Finora non abbiamo aggiunto informazioni nei grafici. I grafici devono essere informativi. Il lettore dovrebbe vedere la storia dietro l'analisi dei dati semplicemente guardando il grafico senza fare riferimento a documentazione aggiuntiva. Quindi, i grafici hanno bisogno di buone etichette. Puoi aggiungere etichette con la funzione labs().
La sintassi di base per lab() è:
lab(title = "Hello Guru99") argument: - title: Control the title. It is possible to change or add title with: - subtitle: Add subtitle below title - caption: Add caption below the graph - x: rename x-axis - y: rename y-axis Example:lab(title = "Hello Guru99", subtitle = "My first plot")
Aggiungi un titolo
Un'informazione obbligatoria da aggiungere è ovviamente il titolo.
my_graph + labs( title = "Plot Mile per hours and drat, in log" )
Spiegazione del codice
- my_graph: usi il grafico che hai memorizzato. Evita di riscrivere tutti i codici ogni volta che aggiungi nuove informazioni al grafico.
- Avvolgi il titolo all'interno di lab().
- Codice per il colore rosso della linea
- se = FALSE: non visualizzare l'errore standard
- dimensione = 1: la dimensione della linea è 1
Produzione:
Aggiungi un titolo con un nome dinamico
Un titolo dinamico è utile per aggiungere informazioni più precise nel titolo.
È possibile utilizzare la funzione paste() per stampare testo statico e testo dinamico. La sintassi di base di paste() è:
paste("This is a text", A) arguments - " ": Text inside the quotation marks are the static text - A: Display the variable stored in A - Note you can add as much static text and variable as you want. You need to separate them with a comma
Esempio:
A <-2010 paste("The first year is", A)
Produzione:
## [1] "The first year is 2010"
B <-2018 paste("The first year is", A, "and the last year is", B)
Produzione:
## [1] "The first year is 2010 and the last year is 2018"
Puoi aggiungere un nome dinamico al nostro grafico, ovvero la media di mpg.
mean_mpg <- mean(mtcars$mpg) my_graph + labs( title = paste("Plot Mile per hours and drat, in log. Average mpg is", mean_mpg) )
Spiegazione del codice
- Crei la media di mpg con mean(mtcars$mpg) memorizzata nella variabile mean_mpg
- Utilizzi paste() con mean_mpg per creare un titolo dinamico che restituisca il valore medio di mpg
Produzione:
Aggiungi un sottotitolo
Due dettagli aggiuntivi possono rendere il tuo grafico più esplicito. Stai parlando del sottotitolo e della didascalia. Il sottotitolo va proprio sotto il titolo. La didascalia può informare su chi ha eseguito il calcolo e la fonte dei dati.
my_graph + labs( title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Spiegazione del codice
- All'interno del lab(), hai aggiunto:
- title = “Rapporto tra miglia orarie e drat”: aggiungi titolo
- sottotitolo = “Relazione suddivisa per classe di ingranaggio”: aggiungi sottotitolo
- caption = “Calcolo dell'autore: aggiungi didascalia
- Separa ogni nuova informazione con una virgola, ,
- Tieni presente che interrompi le righe di codice. Non è obbligatorio e aiuta solo a leggere più facilmente il codice
Produzione:
Rinominare asse x e asse y
Le variabili stesse nel dataset potrebbero non essere sempre esplicite o per convenzione utilizzare _ quando ci sono più parole (ad esempio GDP_CAP). Non vuoi che tale nome appaia nel tuo grafico. È importante cambiare il nome o aggiungere altri dettagli, come le unità.
my_graph + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Spiegazione del codice
- All'interno del lab(), hai aggiunto:
- x = “Definizione Drat”: cambia il nome dell'asse x
- y = “Miglia all'ora”: cambia il nome dell'asse y
Produzione:
Controlla la bilancia
È possibile controllare la scala dell'asse.
La funzione seq() è utile quando è necessario creare una sequenza di numeri. La sintassi di base è:
seq(begin, last, by = x) arguments: - begin: First number of the sequence - last: Last number of the sequence - by= x: The step. For instance, if x is 2, the code adds 2 to `begin-1` until it reaches `last`
Ad esempio, se vuoi creare un intervallo da 0 a 12 con un passo di 3, avrai quattro numeri, 0 4 8 12
seq(0, 12,4)
Produzione:
## [1] 0 4 8 12
È possibile controllare la scala dell'asse x e dell'asse y come di seguito
my_graph + scale_x_continuous(breaks = seq(1, 3.6, by = 0.2)) + scale_y_continuous(breaks = seq(1, 1.6, by = 0.1)) + labs( x = "Drat definition", y = "Mile per hours", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Spiegazione del codice
- La funzione scale_y_continuous() controlla il asse y
- La funzione scale_x_continuous() controlla il asse x.
- Il parametro break controlla la divisione dell'asse. Puoi aggiungere manualmente la sequenza di numeri o utilizzare la funzione seq():
- seq(1, 3.6, by = 0.2): crea sei numeri da 2.4 a 3.4 con un passo di 3
- seq(1, 1.6, by = 0.1): crea sette numeri da 1 a 1.6 con un passo di 1
Produzione:
Tema
Infine, R ci consente di personalizzare la trama con temi diversi. La libreria ggplot2 include otto temi:
- tema_bw()
- tema_luce()
- tema_classis()
- tema_linedraw()
- tema_scuro()
- tema_minimo()
- tema_grigio()
- tema_void()
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Produzione:
Salva trame
Dopo tutti questi passaggi, è il momento di salvare e condividere il tuo grafico. Aggiungi ggsave('NAME OF THE FILE) subito dopo aver tracciato il grafico e verrà archiviato sul disco rigido.
Il grafico viene salvato nella directory di lavoro. Per controllare la directory di lavoro, puoi eseguire questo codice:
directory <-getwd() directory
Tracciamo il tuo fantastico grafico, lo salviamo e controlliamo la posizione
my_graph + theme_dark() + labs( x = "Drat definition, in log", y = "Mile per hours, in log", color = "Gear", title = "Relation between Mile per hours and drat", subtitle = "Relationship break down by gear class", caption = "Authors own computation" )
Produzione:
ggsave("my_fantastic_plot.png")
Produzione:
## Saving 5 x 4 in image
Note:: Solo a scopo pedagogico, abbiamo creato una funzione chiamata open_folder() per aprire la cartella della directory per te. Devi solo eseguire il codice seguente e vedere dove è archiviata l'immagine. Dovresti vedere un file chiamato my_fantastic_plot.png.
# Run this code to create the function open_folder <- function(dir) { if (.Platform['OS.type'] == "windows") { shell.exec(dir) } else { system(paste(Sys.getenv("R_BROWSER"), dir)) } } # Call the function to open the folder open_folder(directory)
Sommario
È possibile riassumere gli argomenti per creare un grafico a dispersione nella tabella seguente:
Obiettivo | Code |
---|---|
Grafico a dispersione di base |
ggplot(df, aes(x = x1, y = y)) + geom_point() |
Grafico a dispersione con gruppo di colori |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) + stat_smooth(method = "lm") |
Aggiungi valori adattati |
ggplot(df, aes(x = x1, y = y)) + geom_point(aes(color = factor(x1)) |
Aggiungi titolo |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(title = paste("Hello Guru99")) |
Aggiungi sottotitoli |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(subtitle = paste("Hello Guru99")) |
Rinomina X |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(x = "X1") |
Rinomina Y |
ggplot(df, aes(x = x1, y = y)) + geom_point() + labs(y = "y1") |
Controlla la scala |
ggplot(df, aes(x = x1, y = y)) + geom_point() + scale_y_continuous(breaks = seq(10, 35, by = 10)) + scale_x_continuous(breaks = seq(2, 5, by = 1) |
Crea log |
ggplot(df, aes(x =log(x1), y = log(y))) + geom_point() |
Tema |
ggplot(df, aes(x = x1, y = y)) + geom_point() + theme_classic() |
Risparmi |
ggsave("my_fantastic_plot.png") |