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.

Grafico a dispersione in R

  • 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 di base

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:

Grafico a dispersione con gruppi

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:

Cambia asse

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:

Grafico a dispersione con valori adattati

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

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 titolo con un nome dinamico

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:

Aggiungi un sottotitolo

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:

Rinominare Asse x e Asse y

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:

Controlla la bilancia

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:

Tema

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:

Salva trame

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")