Elaborare statistiche di riepilogo in R (esercitazione su SQL Server e RevoScaleR)
Si applica a: SQL Server 2016 (13.x) e versioni successive
Questa è l'esercitazione 5 della serie di esercitazioni per RevoScaleR dedicate all'uso delle funzioni di RevoScaleR con SQL Server.
In questa esercitazione vengono usati le origini dati prestabilite e i contesti di calcolo creati nelle esercitazioni precedenti per eseguire script R ad alta potenza. In questa esercitazione si useranno contesti di calcolo di server locali e remoti per le attività seguenti:
- Impostare il contesto di calcolo su SQL Server
- Ottenere statistiche di riepilogo sui Remote Data Object
- Elaborare un riepilogo locale
Se sono state completate le esercitazioni precedenti, dovrebbero essere disponibili i contesti di calcolo remoti seguenti: sqlCompute e sqlComputeTrace. Il contesto di calcolo sqlCompute e il contesto di calcolo locale verranno usati nelle esercitazioni successive.
In questa esercitazione usare un'IDE R o Rgui per eseguire lo script R.
Calcolare statistiche di riepilogo sui dati remoti
Prima di eseguire qualsiasi codice R in remoto, è necessario specificare il contesto di calcolo remoto. Tutti i calcoli successivi si svolgono nel computer SQL Server indicato nel parametro sqlCompute.
Un contesto di calcolo resta attivo fino a quando non lo si modifica. Tuttavia, qualsiasi script R non eseguibile in un contesto server remoto verrà automaticamente eseguito in locale.
Per vedere come funziona un contesto di calcolo, generare statistiche di riepilogo sull'origine dati sqlFraudDS nell'istanza remota di SQL Server. Questo oggetto origine dati è stato creato nell'esercitazione 2 e rappresenta la tabella ccFraudSmall del database RevoDeepDive.
Impostare il contesto di calcolo sul contesto sqlCompute creato nell'esercitazione precedente:
rxSetComputeContext(sqlCompute)
Chiamare la funzione rxSummary e passare gli argomenti obbligatori, ad esempio la formula e l'origine dati, e assegnare i risultati alla variabile
sumOut
.sumOut <- rxSummary(formula = ~gender + balance + numTrans + numIntlTrans + creditLine, data = sqlFraudDS)
Con il linguaggio R sono disponibili molte funzioni di riepilogo. La funzione rxSummary in RevoScaleR supporta tuttavia l'esecuzione in diversi contesti remoti, tra cui SQL Server. Per informazioni sulle funzioni simili, vedere Come riepilogare i dati tramite RevoScaleR.
Stampare il contenuto di sumOut nella console.
sumOut
Nota
Se si riceve un errore, attendere alcuni minuti per essere certi che l'esecuzione sia completata prima di riprovare a eseguire il comando.
Risultati
Summary Statistics Results for: ~gender + balance + numTrans + numIntlTrans + creditLine
Data: sqlFraudDS (RxSqlServerData Data Source)
Number of valid observations: 10000
Name Mean StdDev Min Max ValidObs MissingObs
balance 4075.0318 3926.558714 0 25626 100000
numTrans 29.1061 26.619923 0 100 10000 0 100000
numIntlTrans 4.0868 8.726757 0 60 10000 0 100000
creditLine 9.1856 9.870364 1 75 10000 0 100000
Category Counts for gender
Number of categories: 2
Number of valid observations: 10000
Number of missing observations: 0
gender Counts
Male 6154
Female 3846
Creare un riepilogo locale
Modificare il contesto di calcolo per eseguire il lavoro localmente .
rxSetComputeContext ("local")
Quando si estraggono dati da SQL Server, per ottenere prestazioni migliori è possibile aumentare il numero di righe estratte per ogni lettura, supponendo che la maggiore dimensione del blocco possa essere adattata in memoria. Eseguire il comando seguente per aumentare il valore del parametro rowsPerRead nell'origine dati. In precedenza, il valore di rowsPerRead era impostato su 5000.
sqlServerDS1 <- RxSqlServerData( connectionString = sqlConnString, table = sqlFraudTable, colInfo = ccColInfo, rowsPerRead = 10000)
Chiamare rxSummary nella nuova origine dati.
rxSummary(formula = ~gender + balance + numTrans + numIntlTrans + creditLine, data = sqlServerDS1)
I risultati effettivi devono corrispondere a quelli ottenuti con l'esecuzione di rxSummary nel contesto del computer con SQL Server. L'operazione potrebbe tuttavia essere più veloce o più lenta a seconda del tipo di connessione al database. Per essere analizzati, i dati vengono infatti trasferiti nel computer locale.
Tornare al contesto di calcolo remoto per affrontare le esercitazioni successive.
rxSetComputeContext(sqlCompute)