Transformera data med R (SQL Server och RevoScaleR-handledning)

gäller för: SQL Server 2016 (13.x) och senare versioner

Detta är handledning 9 i RevoScaleR-handledningsserien om hur man använder RevoScaleR-funktioner med SQL Server.

I denna handledning kommer du att lära dig om RevoScaleR-funktionerna för att transformera data i olika skeden av din analys.

  • Använd rxDataStep för att skapa och transformera en datamängd
  • Använd rxImport för att transformera data under överföring till eller från en XDF-fil eller en minnesdataram under importen

Även om funktionerna rxSummary, rxCube, rxLinMod och rxLogit inte specifikt är för datarörelse, stödjer de alla datatransformationer.

Använd rxDataStep för att transformera variabler

Funktionen rxDataStep bearbetar data en bit i taget, läser från en datakälla och skriver till en annan. Du kan specificera vilka kolumner som ska transformeras, vilka transformationer som ska laddas och så vidare.

För att göra detta exempel intressant, låt oss använda en funktion från ett annat R-paket för att transformera datan. Startpaketet är ett av de "rekommenderade" paketen, vilket innebär att uppstart ingår i varje distribution av R, men inte laddas automatiskt vid uppstart. Därför bör paketet redan finnas tillgängligt på SQL Server-instansen som är konfigurerad för R-integration.

Från bootpaketet använder du funktionen inv.logit, som beräknar inversen av en logit. Det vill säga, inv.logit-funktionen omvandlar en logit tillbaka till en sannolikhet på [0,1]-skalan.

Tip

Ett annat sätt att få prediktioner i denna skala är att sätta typparametern till svar i det ursprungliga anropet till rxPredict.

  1. Börja med att skapa en datakälla för att hålla den data som är avsedd för tabellen, ccScoreOutput.

    sqlOutScoreDS <- RxSqlServerData( table =  "ccScoreOutput",  connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
    
  2. Lägg till en annan datakälla för att lagra data för tabellen ccScoreOutput2.

    sqlOutScoreDS2 <- RxSqlServerData( table =  "ccScoreOutput2",  connectionString = sqlConnString, rowsPerRead = sqlRowsPerRead )
    

    I den nya tabellen, lagra alla variabler från den föregående ccScoreOutput tabellen, plus den nyskapade variabeln.

  3. Sätt beräkningskontexten till SQL Server-instansen.

    rxSetComputeContext(sqlCompute)
    
  4. Använd funktionen rxSqlServerTableExists för att kontrollera om utdatatabellen ccScoreOutput2 redan finns; och om så är fallet, använd funktionen rxSqlServerDropTable för att ta bort tabellen.

    if (rxSqlServerTableExists("ccScoreOutput2"))     rxSqlServerDropTable("ccScoreOutput2")
    
  5. Anropa funktionen rxDataStep och ange önskade transformationer i en lista.

    rxDataStep(inData = sqlOutScoreDS,
        outFile = sqlOutScoreDS2,
        transforms = list(ccFraudProb = inv.logit(ccFraudLogitScore)),
        transformPackages = "boot",
        overwrite = TRUE)
    

    När du definierar transformationerna som appliceras på varje kolumn kan du också specificera eventuella ytterligare R-paket som behövs för att utföra transformationerna. För mer information om vilka typer av transformationer du kan utföra, se Hur man transformerar och delar data med RevoScaleR.

  6. Ring rxGetVarInfo för att se en sammanfattning av variablerna i den nya datamängden.

rxGetVarInfo(sqlOutScoreDS2)

Results

Var 1: ccFraudLogitScore, Type: numeric
Var 2: state, Type: character
Var 3: gender, Type: character
Var 4: cardholder, Type: character
Var 5: balance, Type: integer
Var 6: numTrans, Type: integer
Var 7: numIntlTrans, Type: integer
Var 8: creditLine, Type: integer
Var 9: ccFraudProb, Type: numeric

De ursprungliga logitpoängen bevaras, men en ny kolumn, ccFraudProb, har lagts till där logitpoängen representeras som värden mellan 0 och 1.

Observera att faktorvariablerna har skrivits till tabellen ccScoreOutput2 som teckendata. För att använda dem som faktorer i efterföljande analyser, använd parametern colInfo för att specificera nivåerna.

Nästa steg