Zdobycie nowych danych (tutorial SQL Server i RevoScaleR)

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje

To jest ósmy samouczek z serii RevoScaleR, jak korzystać z funkcji RevoScaleR z SQL Server.

W tym samouczku wykorzystasz model regresji logistycznej, który stworzyłeś w poprzednim tutorialu, aby ocenić inny zbiór danych, który używa tych samych zmiennych niezależnych jako danych wejściowych.

  • Oceń nowe dane
  • Stwórz histogram wyników

Note

Do niektórych z tych kroków potrzebujesz uprawnień administratora DDL.

Generuj i zapisuj wyniki

  1. Zaktualizuj źródło danych sqlScoreDS (utworzone w drugim samouczku), aby korzystać z informacji o kolumnach utworzonych w poprzednim samouczku.

    sqlScoreDS <- RxSqlServerData(
        connectionString = sqlConnString,
        table = sqlScoreTable,
        colInfo = ccColInfo,
        rowsPerRead = sqlRowsPerRead)
    
  2. Aby nie stracić wyników, stwórz nowy obiekt źródła danych. Następnie użyj nowego obiektu źródła danych, aby wypełnić nową tabelę w bazie danych RevoDeepDive.

    sqlServerOutDS <- RxSqlServerData(table = "ccScoreOutput",
        connectionString = sqlConnString,
        rowsPerRead = sqlRowsPerRead )
    

    Na ten moment tabela nie została jeszcze utworzona. To stwierdzenie po prostu definiuje kontener dla danych.

  3. Sprawdź aktualny kontekst obliczeniowy za pomocą rxGetComputeContext() i w razie potrzeby ustaw kontekst obliczeniowy na serwerze.

    rxSetComputeContext(sqlCompute)
    
  4. Na wszelki wypadek sprawdź istnienie tabeli wyjściowej. Jeśli już istnieje tabela o tej samej nazwie, otrzymasz błąd podczas próby zapisania nowej tabeli.

    Aby to zrobić, wywołaj funkcje rxSqlServerTableExists i rxSqlServerDropTable, przekazując nazwę tabeli jako wejście.

    if (rxSqlServerTableExists("ccScoreOutput"))     rxSqlServerDropTable("ccScoreOutput")
    
    • rxSqlServerTableExists zapytuje sterownik ODBC i zwraca TRUE jeśli tabela istnieje, w przeciwnym razie FALS.
    • rxSqlServerDropTable wykonuje DDL i zwraca TRUE, jeśli tabela zostanie pomyślnie usunięta, w przeciwnym razie FALS.
  5. Wykonaj rxPredict , aby utworzyć wyniki i zapisać je w nowej tabeli zdefiniowanej w danych sqlScoreDS.

    rxPredict(modelObject = logitObj,
        data = sqlScoreDS,
        outData = sqlServerOutDS,
        predVarNames = "ccFraudLogitScore",
          type = "link",
        writeModelVars = TRUE,
        overwrite = TRUE)
    

    Funkcja rxPredict to kolejna funkcja obsługująca działanie w zdalnych kontekstach obliczeniowych. Możesz użyć funkcji rxPredict , aby tworzyć wyniki z modeli opartych na rxLinMod, rxLogit lub rxGlm.

    • Parametr writeModelVars jest tutaj ustawiony na TRUE . Oznacza to, że zmienne użyte do estymacji zostaną uwzględnione w nowej tabeli.

    • Parametr predVarNames określa zmienną, w której będą przechowywane wyniki. Tutaj przekazujesz nową zmienną, ccFraudLogitScore.

    • Parametr typudla rxPredict definiuje, jak chcesz obliczać przewidywania. Określ odpowiedź na słowo kluczowe, aby generować oceny oparte na skali zmiennej odpowiedzi. Lub użyj słowa kluczowego link, aby wygenerować wyniki na podstawie bazowej funkcji łącza; wówczas predykcje są generowane w skali logistycznej.

  6. Po pewnym czasie możesz odświeżyć listę tabel w Management Studio, aby zobaczyć nową tabelę i jej dane.

  7. Aby dodać dodatkowe zmienne do przewidywań wyjściowych, użyj argumentu extraVarsToWrite . Na przykład w następnym kodzie zmienna custID jest dodawana z tabeli danych punktacji do tabeli wyjściowej przewidywań.

    rxPredict(modelObject = logitObj,
            data = sqlScoreDS,
            outData = sqlServerOutDS,
            predVarNames = "ccFraudLogitScore",
              type = "link",
            writeModelVars = TRUE,
            extraVarsToWrite = "custID",
            overwrite = TRUE)
    

Wyświetlanie wyników w histogramie

Po utworzeniu nowej tabeli oblicz i wyświetl histogram 10 000 przewidywanych wyników. Obliczenia są szybsze, jeśli określisz wartości niskie i wysokie, więc pobierz je z bazy danych i dodaj do danych roboczych.

  1. Stwórz nowe źródło danych, sqlMinMax, które zapytuje bazę danych, aby uzyskać wartości niskie i wysokie.

    sqlMinMax <- RxSqlServerData(
        sqlQuery = paste("SELECT MIN(ccFraudLogitScore) AS minVal,",
        "MAX(ccFraudLogitScore) AS maxVal FROM ccScoreOutput"),
        connectionString = sqlConnString)
    

    Z tego przykładu widać, jak łatwo jest użyć obiektów źródłowych RxSqlServerData do definiowania dowolnych zbiorów danych na podstawie zapytań, funkcji lub procedur przechowywanych, a następnie wykorzystać je w kodzie R. Zmienna nie przechowuje rzeczywistych wartości, a jedynie definicję źródła danych; Zapytanie jest wykonywane tak, aby wygenerować wartości tylko wtedy, gdy używasz go w funkcji takiej jak rxImport.

  2. Wywołaj funkcję rxImport , aby umieścić wartości w ramce danych, którą można udostępniać między kontekstami obliczeniowymi.

    minMaxVals <- rxImport(sqlMinMax)
    minMaxVals <- as.vector(unlist(minMaxVals))
    

    Results

    > minMaxVals
    
    [1] -23.970256   9.786345
    
  3. Teraz, gdy dostępne są wartości maksymalne i minimalne, użyj ich do stworzenia kolejnego źródła danych dla wygenerowanych wyników.

    sqlOutScoreDS <- RxSqlServerData(sqlQuery = "SELECT ccFraudLogitScore FROM ccScoreOutput",
        connectionString = sqlConnString,
        rowsPerRead = sqlRowsPerRead,
            colInfo = list(ccFraudLogitScore = list(
                low = floor(minMaxVals[1]),
                        high = ceiling(minMaxVals[2]) ) ) )
    
  4. Użyj obiektu źródłowego sqlOutScoreDS, aby uzyskać wyniki, a następnie oblicz i wyświetl histogram. Dodaj kod, aby ustawić kontekst obliczeniowy, jeśli zajdzie taka potrzeba.

    # rxSetComputeContext(sqlCompute)
    rxHistogram(~ccFraudLogitScore, data = sqlOutScoreDS)
    

    Results

    złożony histogram stworzony przez R

Następny krok