Guglielmo Baum ( wjbaum ), studente laureato in statistica, Università del New Hampshire
Il mio progetto è uno che utilizza JMP Scripting Language per estrarre dati da più siti Web per prevedere le vittorie del calcio professionistico. Lo script automatizza un processo altrimenti laborioso di raccolta, aggregazione e riorganizzazione dei dati per l'analisi. Diverse sezioni dello script includono diverse funzioni, come l'elaborazione delle celle per eliminare i pedici e la concatenazione e l'unione di più set di dati. Un array associativo viene utilizzato per confrontare l'output delle formule di colonna in righe separate. Infine, vengono confrontati i risultati di più modelli predittivi. Lo scopo di questo progetto è principalmente quello di illustrare gli usi di JSL per automatizzare i processi di raccolta, organizzazione e previsione dei dati, in modo ripetibile.
introduzione
Circa due anni fa, ho appreso che JMP poteva estrarre dati dal Web con JMP Scripting Language [JSL]. Come studente laureato in statistica, cerco spesso dati pratici su cui affinare le mie capacità analitiche e migliorare la mia programmazione.Si dà il caso che io sia un appassionato fan del football americano e le statistiche sportive sono prontamente disponibili online da molte fonti diverse.Come esercizio, ho tentato di prevedere le vittorie totali in una stagione per ogni squadra di calcio professionistica, con dati estratti dal web.
Le tecniche di scraping e pulizia dei dati possono essere applicate a qualsiasi dato disponibile sotto forma di tabelle html sul web.Trovo sorprendente che JSL possa essere utilizzato per automatizzare la pulizia dei dati ed eseguire la modellazione all'interno di un singolo script o gruppo composito di script.Inoltre, JMP aiuta coloro che hanno un'esperienza di programmazione limitata, consentendo agli utenti di condurre un'analisi attraverso la sua interfaccia utente grafica [GUI] e, successivamente, di salvare il processo come uno script che può essere riutilizzato. Ciò consente agli utenti di risparmiare molto tempo quando ripetono analisi con dati aggiornati o nuovi.
Impostare
Il primo passo è stato quello di creare delle cartelle in cui archiviare i file che si sarebbero creati durante il processo di aggregazione dei dati.Ho scoperto che la creazione di una cartella per ogni origine dati ha funzionato bene per organizzare i numerosi file prodotti.

Successivamente, ho chiesto all'utente dello script di assegnare un percorso locale per l'archiviazione dei file, per creare un codice più pulito: dir = Pick Directory(“Seleziona la directory per l'archiviazione dei file”, mostra i file(0));
Questo percorso locale può anche essere hardcoded.
Una volta selezionato un percorso, i dati sono stati quindi prelevati da più siti Web e salvati in singoli file (uno per ogni tabella HTML).Questi file sono stati referenziati successivamente, durante la fase di aggregazione dei dati.
Raschiare i dati
Con JMP, è sufficiente copiare e incollare i nomi degli URL nel codice JSL dalla barra degli indirizzi di un browser.Si può anche inserire un collegamento al sito Web direttamente in uno script, che aiuta ad aprire il sito Web durante la modifica del codice JSL: Web(" http://nome_url.com ");
Importazione dei dati
JMP dispone di un assortimento di strumenti utili per agevolare l'importazione dei dati.Innanzitutto, si può tentare di salvare direttamente una tabella html come file JMP.Questo metodo funziona meglio quando i dati richiedono una piccola riorganizzazione.Il secondo metodo consiste nel salvare prima la tabella html come file con valori separati da virgola [CSV], che può quindi essere importato in JMP con le impostazioni definite dall'utente disponibili tramite JSL.Dopo aver esaminato la tabella importata, ho notato diverse colonne vuote.Utilizzando il comando "elimina colonne", sono stato in grado di eliminare le colonne vuote dalla mia tabella con un breve script.

JMP estrae automaticamente le informazioni dal Web e salva i file.Non è necessario salvare questi file, ma a volte i dati raccolti dal Web possono essere un po' disordinati.Il salvataggio dei dati in un file semplifica il debug, perché è possibile esaminare le tabelle importate e modificare il codice, se necessario.
Metodo 1
I dati vengono importati e salvati come file CSV, inizialmente:
ObjectName = Open(“http//:url_name1.com”, HTML Table(#))<< Set Name(“TableName1”) << Save(dir||“FileName1.csv”);
Metodo 2
I dati vengono importati direttamente in JMP e salvati:
NomeOggetto = Apri(“ http://nome_url2.com” , HTML Table(#)<< Imposta Nome(“TableName2”) << Save(dir||“FileName2.jmp”);

Elaborazione cellulare
Quando si ordinano i dati dei caratteri in uno script, anche lievi variazioni nelle stringhe importate possono rovinare il codice.In questo caso, i playoff erano vicini e per indicare che il New England aveva conquistato un titolo di divisione, fu inserita una "z" nel loro nome. Per fortuna, JMP offre una varietà di comandi per manipolare le stringhe all'interno delle celle.

Nello script seguente, JMP scorre ogni riga della colonna del nome "Team" ed elimina le lettere specificate, se compaiono all'inizio della stringa.Il comando "For Each Row" facilita il looping, che applica un processo a ciascuna riga.La frase condizionale "if, then" indica a JMP cosa fare quando si applicano le condizioni specifiche. Il comando "Contains" restituisce la posizione di un elemento specificato all'interno della stringa.Il comando “Substr” (sottostringa) restituisce parte della stringa: partendo da una posizione specificata, restituisce il numero di caratteri specificato.

Combinazione di tabelle
La combinazione di tabelle in JMP è semplice tramite il menu "Tabelle".Il menu Tabelle offre più opzioni.In generale, utilizzo "Unisciti" per combinare tabelle con colonne diverse, ma con le stesse etichette di riga. Uso "Concatena" quando combino tabelle con etichette di riga diverse, ma con le stesse colonne.In questo caso, ho concatenato informazioni da più tabelle.Era stato creato un tavolo per ogni divisione di squadre.Successivamente, ho ordinato le righe del file risultante in base al nome della squadra, in ordine alfabetico, per assicurarmi che le righe simili corrispondano durante il processo di unione, in seguito.

Crea una nuova tabella
Trovo utile creare una nuova tabella, prima di unire le tabelle.JMP consente agli utenti di creare una nuova tabella in due modi.Innanzitutto, può essere fatto tramite la GUI.Può anche essere realizzato attraverso uno script.In questo caso ho utilizzato il comando “Nuova tabella” per creare una nuova tabella con il numero appropriato di righe: una per ogni squadra di calcio.Ho poi aggiunto la colonna dei nomi delle squadre con il comando “Nuova Colonna”, impostando i valori con una lista.

Tabelle di unione
Trovo che unire le tabelle sia un compito fastidioso senza JMP.Per fortuna, JMP ha una bella GUI per unire le tabelle nel menu "Tabelle". Sebbene le convenzioni di denominazione siano sempre importanti, JMP rinomina automaticamente le colonne originate da tabelle diverse che condividono lo stesso nome.In questo caso, ho unito le tabelle tramite la GUI, quindi ho semplicemente copiato e incollato lo script della tabella risultante nel mio script personalizzato più grande.Altrimenti, avrei dovuto scrivere molto (rinominare le colonne), prima di unirmi alle tabelle. Ho ripetuto il processo di unione molte volte.

Rinomina e riformatta colonne
Una volta completati i join, avevo molti nomi di colonne dal suono strano.Per eliminare la confusione, ho rinominato quelle colonne. Per fare ciò, ho prima creato un elenco di nomi preferiti.Quindi, ho rinominato le colonne utilizzando la combinazione di un ciclo e la funzione "Imposta nome".

A volte JMP importa i dati come stringa, ma l'utente ha bisogno di un formato di colonna diverso, come l'ora. Questo è facile da modificare nella GUI di JMP, ma può anche essere eseguito in uno script JSL.In questo caso, ho comunicato a JMP che la colonna conteneva informazioni temporali continue, anziché carattere.
Riorganizza colonne
Una volta che i dati sono stati aggregati e sono state create nuove colonne, si potrebbe voler modificare l'ordine delle colonne nella tabella dei dati.È facilmente realizzabile in JSL con il comando "Sposta colonne selezionate".

Vista tabella dati
Ecco una vista parziale della tabella dei dati completata.

Sviluppa un array associativo
Una volta che ho finito di aggregare i dati, è arrivato il momento di fare qualche analisi.La prima cosa che volevo confrontare era la forza relativa delle diverse squadre, in base alla forza del loro programma, fino a quel punto della stagione. Il mio obiettivo era prevedere quanto sarebbe stata forte la prestazione futura di una squadra, non solo in base alle proprie prestazioni passate, ma anche rispetto alle prestazioni passate dei futuri avversari.Per fare ciò, ho dovuto confrontare le informazioni contenute nelle celle situate in diverse righe e colonne della mia tabella.La creazione di un array associativo (noto anche come dizionario o mappa hash) è stata molto utile per questo compito.
In JMP è possibile utilizzare liste, matrici o colonne in un array associativo.In questo caso ho utilizzato due colonne, con un valore predefinito (null). La colonna chiave "TEAM" conteneva i nomi abbreviati delle città per ciascuna squadra.La colonna del valore, chiamata "Forza", era una colonna formula che calcolava un indice, combinando vittorie e punti netti.Ho usato ogni settimana (una colonna) del programma di gioco di 17 settimane come chiavi per fare riferimento ai valori dell'array associativo per quella settimana.
Programma di 17 settimane: Chiavi

Nello script, ho definito l'array associativo, quindi ho creato una colonna formula per farvi riferimento.Ancora una volta, la formula fa riferimento al valore corretto tramite un pedice dell'array associativo, utilizzando l'avversario settimanale come chiave.Se il valore nella colonna chiave non è nell'array associativo, la funzione restituisce un valore nullo (funziona bene con le settimane bye nella pianificazione).

Ho quindi creato una nuova colonna per ogni settimana per confrontare la forza della squadra.Queste due formule avrebbero potuto essere unite, ma ho preferito tenerle separate in modo da poter visualizzare le diverse metriche nella tabella dei dati.

Successivamente, ho contato il numero di vittorie previste per la stagione.Un modo semplice per contare i risultati della colonna consisteva nel creare una nuova colonna formula che contenesse la somma di una serie di condizioni "If-Then" per ciascuna delle 17 colonne.In questo caso, se la differenza di Forza era positiva, la previsione veniva considerata vincente e conteggiata.

Crea modelli di previsione
JMP dispone di una varietà di tecniche di modellazione per la previsione.Molte tecniche sono accessibili tramite il menu "Analizza", comprese le piattaforme "Fit Model" e "Neural".Quando creo uno script personalizzato, consiglio innanzitutto di sviluppare modelli ottimali nelle piattaforme di JMP. Quindi è possibile salvare lo script del modello nella tabella dati (tramite la GUI) e copiare e incollare il codice nello script personalizzato.Si può anche usare JSL per salvare gli script del modello in una tabella di dati.Ciò offre agli utenti la flessibilità di impostare il modello in modo che venga eseguito automaticamente o di renderlo disponibile nell'elenco degli script della tabella di dati della tabella creata dallo script personalizzato.
Ecco un esempio.

Tecniche di modellazione avanzate in JMP Pro
In JMP Pro sono disponibili diverse tecniche di modellazione avanzate, che non sono disponibili nella versione standard di JMP.Due esempi sono la versione potenziata della rete neurale e la tecnica di regressione generalizzata della rete elastica.Un'altra bella qualità di JMP è la sua capacità di eseguire la convalida holdback con una proporzione specificata dall'utente, selezionando automaticamente un campione casuale da un set di dati.Ciò facilita sia la convalida che il confronto dei modelli.
Rete neurale potenziata

Rete elastica

A volte, la media di più previsioni del modello può superare le prestazioni del singolo modello.
Qui ho creato una colonna formula in JSL che calcola la media di due formule di previsione.

JMP Pro dispone di una piattaforma di confronto dei modelli, in cui gli utenti possono confrontare l'efficacia relativa di più modelli, uno accanto all'altro.La piattaforma di confronto dei modelli offre inoltre agli utenti la possibilità di calcolare la media di più modelli insieme, con pochi clic.
Confronti di modelli

In questo caso, la media dei modelli Neural Net e Elastic Net (con holdback validation [HB]) ha ottenuto risultati leggermente migliori rispetto a uno dei due singoli modelli presi singolarmente.Un'altra bella caratteristica della piattaforma di confronto dei modelli sono i grafici "effettivo per previsto" e "residuo per riga".
Grafici di confronto dei modelli

Conclusione
Con JMP Scripting Language [JSL], JMP può estrarre dati da più origini Web, elaborare i dati, eseguire più previsioni, confrontarle e visualizzarle, tutto all'interno di un singolo script.L'uso efficace di JSL può far risparmiare molto tempo, soprattutto quando è necessario ripetere regolarmente un'analisi.