Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för: SQL Server 2016 (13.x) och senare versioner
I denna del av genomgången lär du dig tekniker för att generera diagram och kartor med R och SQL Server-data. Du skapar ett enkelt histogram och utvecklar sedan en mer komplex kartplan.
Förutsättningar
Det här steget förutsätter en pågående R-session baserat på tidigare steg i den här genomgången. Den använder anslutningssträngar och datakällans objekt som skapats i dessa steg. Följande verktyg och paket används för att köra skriptet.
- Rgui.exe för att köra R-kommandon
- Management Studio för att köra T-SQL
- googMap
- ggmap-paket
- mapproj-paketet
Skapa ett histogram
Generera den första plotten med hjälp av rxHistogram-funktionen . Funktionen rxHistogram erbjuder funktionalitet liknande den i öppna källkodspaket R, men kan köras i en fjärrexekveringskontext.
# 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=""))Avbilden returneras i R-grafikenheten för din utvecklingsmiljö. Till exempel, i RStudio, klicka på Plot-fönstret. I R Tools för Visual Studio öppnas ett separat grafikfönster.
Note
Ser din graf annorlunda ut?
Det beror på att inDataSource bara använder de översta 1000 raderna. Ordningen på rader med TOP är icke-deterministisk i avsaknad av en ORDER BY-klausul, så det förväntas att datan och den resulterande grafen kan variera. Denna särskilda bild genererades med cirka 10 000 rader data. Vi rekommenderar att du experimenterar med olika antal rader för att få olika grafer, och noterar hur lång tid det tar att returnera resultaten i din miljö.
Skapa en kartkarta
Vanligtvis blockerar databasservrar internetåtkomst. Detta kan vara besvärligt när man använder R-paket som behöver ladda ner kartor eller andra bilder för att generera diagram. Det finns dock en lösning som du kan ha användbart när du utvecklar dina egna applikationer. I princip genererar du kartrepresentationen på klienten och lägger sedan över kartan de punkter som lagras som attribut i SQL Server-tabellen.
Definiera funktionen som skapar R-plotobjektet. Den anpassade funktionen mapPlot skapar en spridningsdiagram som använder taxiupphämtningsplatserna och visar antalet resor som startade från varje plats. Den använder ggplot2 - och ggmap-paketen , som redan borde vara installerade och laddade.
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)) }- mapPlot-funktionen tar två argument: ett befintligt dataobjekt, som du definierade tidigare med RxSqlServerData, och kartrepresentationen som skickas från klienten.
- I raden som börjar med ds-variabeln används rxImport för att ladda in data från den tidigare skapade datakällan, inDataSource, i minnet. (Den datakällan innehåller bara 1000 rader; om du vill skapa en karta med fler datapunkter kan du ersätta med en annan datakälla.)
- När du använder öppna R-funktioner måste data laddas in i dataframes i lokalt minne. Genom att anropa rxImport-funktionen kan du dock köra i minnet hos den fjärrberäkningskontexten.
Byt beräkningskontexten till lokal och ladda de bibliotek som krävs för att skapa kartorna.
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');Variabeln
gclagrar en uppsättning koordinater för Times Square, NY.Linjen som börjar med
googmapgenererar en karta med de angivna koordinaterna i mitten.
Byt till SQL Server-beräkningskontexten och rendera resultaten genom att wrappa plotfunktionen i rxExec som visas här. rxExec-funktionen är en del av RevoScaleR-paketet och stödjer exekvering av godtyckliga R-funktioner i en fjärrberäkningskontext.
rxSetComputeContext(sqlcc) myplots <- rxExec(mapPlot, inDataSource, googMap, timesToRun = 1) plot(myplots[[1]][["myplot"]]);Kartdata i
googMapskickas som ett argument till den fjärrkörda funktionen mapPlot. Eftersom kartorna genererades i din lokala miljö måste de skickas till funktionen för att skapa plotten i SQL Server-kontexten.När raden som börjar med
plotkörs serialiseras den renderade datan tillbaka till den lokala R-miljön så att du kan se den i din R-klient.
Note
Om du använder SQL Server i en virtuell Azure-maskin kan du få ett felmeddelande vid det här laget. Ett fel uppstår när standardbrandväggsregeln i Azure blockerar nätverksåtkomst med R-kod. För detaljer om hur du åtgärdar detta fel, se Installing strojové učenie (R) Services on an Azure VM.
Följande bild visar utdataplotten. Taxiupphämtningsplatserna läggs till på kartan som röda prickar. Din bild kan se annorlunda ut beroende på hur många platser som finns i den datakälla du använde.