Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje
W tej części przejścia poznajesz techniki generowania wykresów i map z użyciem R z danymi SQL Server. Tworzysz prosty histogram, a następnie rozwijasz bardziej złożony wykres mapy.
Wymagania wstępne
W tym kroku założono, że trwa sesja języka R oparta na poprzednich krokach w tym przewodniku. Używa on parametrów połączenia i obiektów źródła danych utworzonych w tych krokach. Następujące narzędzia i pakiety są używane do uruchamiania skryptu.
- Rgui.exe do uruchamiania poleceń języka R
- Narzędzie Management Studio do uruchamiania poleceń T-SQL
- googMap
- Pakiet GGMAP
- Pakiet mapproj
Tworzenie histogramu
Wygeneruj pierwszy wykres, używając funkcji rxHistogram . Funkcja rxHistogram oferuje funkcje podobne do tych w otwartych pakietach R, ale może działać w kontekście zdalnego wykonywania.
# Plot fare amount on SQL Server and return the plot start.time <- proc.time() rxHistogram(~fare_amount, data = inDataSource, title = "Fare Amount Histogram") used.time <- proc.time() - start.time print(paste("It takes CPU Time=", round(used.time[1]+used.time[2],2), " seconds, Elapsed Time=", round(used.time[3],2), " seconds to generate plot.", sep=""))Obraz jest zwracany w urządzeniu graficznym R dla twojego środowiska programistycznego. Na przykład w RStudio kliknij okno Plot . W R Tools for Visual Studio otwiera się osobne okno graficzne.
Note
Czy Twój wykres wygląda inaczej?
To dlatego, że inDataSource używa tylko górnych 1000 wierszy. Kolejność wierszy z użyciem TOP jest niedeterministyczna w przypadku braku klauzuli ORDER BY, więc oczekuje się, że dane i powstały graf mogą się różnić. Ten konkretny obraz został wygenerowany na podstawie około 10 000 wierszy danych. Zalecamy, aby poeksperymentować z różnymi liczbami wierszy, aby otrzymać różne wykresy, oraz zanotować, ile czasu zajmuje uzyskanie wyników w twoim środowisku.
Stwórz wykres mapy
Zazwyczaj serwery baz danych blokują dostęp do Internetu. Może to być niewygodne przy korzystaniu z pakietów R, które muszą pobierać mapy lub inne obrazy do generowania wykresów. Jednak istnieje obejście, które może okazać się przydatne przy tworzeniu własnych aplikacji. W zasadzie generujesz reprezentację mapy na kliencie, a następnie nakładasz na nią punkty zapisane jako atrybuty w tabeli SQL Server.
Zdefiniuj funkcję tworzącą obiekt wykresu R. Niestandardowa funkcja mapPlot tworzy wykres rozrzutowy, który wykorzystuje miejsca odbioru taksówek i pokazuje liczbę przejazdów rozpoczynających się z każdej lokalizacji. Korzysta z pakietów ggplot2 i ggmap , które powinny być już zainstalowane i załadowane.
mapPlot <- function(inDataSource, googMap){ library(ggmap) library(mapproj) ds <- rxImport(inDataSource) p <- ggmap(googMap)+ geom_point(aes(x = pickup_longitude, y =pickup_latitude ), data=ds, alpha =.5, color="darkred", size = 1.5) return(list(myplot=p)) }- Funkcja mapPlot przyjmuje dwa argumenty: istniejący obiekt danych, który wcześniej zdefiniowałeś za pomocą RxSqlServerData, oraz reprezentację map przekazaną przez klienta.
- W linii zaczynającej się od zmiennej ds , rxImport służy do ładowania danych do pamięci z wcześniej utworzonego źródła danych, inDataSource. (To źródło danych zawiera tylko 1000 wierszy; jeśli chcesz stworzyć mapę z większą liczbą punktów danych, możesz zastąpić inne źródło danych.)
- Za każdym razem, gdy używasz otwartych funkcji R, dane muszą być ładowane do ramek danych w pamięci lokalnej. Jednak wywołując funkcję rxImport , możesz działać w pamięci zdalnego kontekstu obliczeniowego.
Zmień kontekst obliczeniowy na lokalny i załaduj biblioteki potrzebne do tworzenia map.
rxSetComputeContext("local") library(ggmap) library(mapproj) gc <- geocode("Times Square", source = "google") googMap <- get_googlemap(center = as.numeric(gc), zoom = 12, maptype = 'roadmap', color = 'color');Zmienna ta
gcprzechowuje zestaw współrzędnych dla Times Square, NY.Linia zaczynająca się od
googmapgeneruje odwzorowanie o określonych współrzędnych w centrum.
Przełącz się na kontekst obliczeniowy SQL Server i renderuj wyniki, opakowując funkcję wykresu w rxExec, jak pokazano tutaj. Funkcja rxExec jest częścią pakietu RevoScaleR i obsługuje wykonywanie dowolnych funkcji R w kontekście zdalnych obliczeń.
rxSetComputeContext(sqlcc) myplots <- rxExec(mapPlot, inDataSource, googMap, timesToRun = 1) plot(myplots[[1]][["myplot"]]);Dane mapy w
googMapsą przekazywane jako argument do funkcji wykonywanej zdalnie mapPlot. Ponieważ mapy zostały wygenerowane w twoim lokalnym środowisku, muszą zostać przekazane do funkcji, aby stworzyć wykres w kontekście SQL Server.Gdy wykonywana jest linia zaczynająca się od
plot, renderowane dane są ponownie serializowane do lokalnego środowiska R, aby można było je wyświetlić w kliencie R.
Note
Jeśli używasz SQL Server w maszynie wirtualnej Azure, możesz wtedy uzyskać błąd. Błąd występuje, gdy domyślna reguła zapory w Azure blokuje dostęp do sieci za pomocą kodu R. Szczegóły dotyczące naprawy tego błędu można znaleźć w artykule Installing Machine Learning (R) Services on an Azure VM.
Poniższy obraz przedstawia wykres wyjściowy. Miejsca odbioru taksówek są dodawane na mapę jako czerwone kropki. Twój obraz może wyglądać inaczej, w zależności od liczby lokalizacji w źródle danych, którego używasz.