SlideShare a Scribd company logo
1 of 18
Download to read offline
R jako osobisty GPS
Współpraca R z serwerem danych przestrzennych
Dawid 'Gonzo' Kałędkowski
• Język R został stworzony do obliczeń statystycznych i wizualizacji danych w Bell Laboratories przez
Johna Chambersa i kolegów na bazie wcześniejszego języka S
• R to język stworzony przez statystyków dla statystyków
• Cechuje go prostota
• Dla zaawansowanych użytkowników także bardzo szybki – zastosowanie kodów C++ bezpośrednio na
obiektach R
• Możliwość pracy na danych wszelkiego typu i formatu
• Nieskomplikowany menedżer pakietów
Język i środowisko
Język i środowisko
• Użytkownicy rozszerzają możliwości R o nowe integracje:
• Bazy danych (ODBC, MySQL, postgreSQL, sqlite3, mongolite, …)
• Pliki znanych programów statystycznych (SPSS, Stata, SAS, …)
• Web (curl, Selenium, ...)
• Dane geoprzestrzenne (GDAL, OGR)
• Poprawianie efektywności obliczeń (Hadoop, GPU, Spark, C++, ...)
• R na serwerze (shiny, Rapache, opencpu, …)
1. Wymagany serwer PostgreSQL wraz z dodatkowymi rozszerzeniami:
PostGIS http://wiki.openstreetmap.org/wiki/PostGIS/Installation
pgRouting http://pgrouting.org/download.html
2. Dane OSM dla Polski we dwóch formatach
http://download.geofabrik.de/europe/poland-latest.osm.pbf
http://download.geofabrik.de/europe/poland-latest.osm.bz2
Dane z OSM
3. Utworzenie bazy na podstawie danych z OSM osm2pgsql
http://wiki.openstreetmap.org/wiki/Osm2pgsql
OSM – import do pgSQL
$> createdb poland_osm
$> psql poland_osm
poland_osm=# create extension postgis;
poland_osm=# create exiention hstore;
poland_osm=# create exiention pgrouting;
poland_osm=# q
$> osm2pgsql -c -d poland_osm -C 5000 -S default.style --number-processes 3 poland-latest.osm.pbf
Alternatywy: osmosis, shp2pgsql
OSM – trasowanie
$ psql poland_pgr
poland_osm=# create extension postgis;
poland_osm=# create exiention pgrouting;
> osm2pgrouting -file "poland-latest.osm" -conf "mapconfig.xml" -dbname poland_osm
-user <user_name> -host <host> -passwd <passwd>
4. Stworzenie topologii ulic w formie sieci z użyciem osm2pgrouting
http://pgrouting.org/docs/tools/osm2pgrouting.html
5. Po zakończeniu importowania uruchom serwer PostgreSQL
OSM – struktura bazy
osm2pgsql
1. planet_osm_line – linie dróg, granice, trasy komunikacji miejskiej, trasy kolei, linie wysokiego napięcia
2. planet_osm_points – obiekty takie jak restauracje, przystanki, stacje, wieże energetyczne
3. planet_osm_polygon – obszary jednostek administracyjnych, przedsiębiorstw, parków, rezerwatów
4. planet_osm_roads – podzbiór planet_osm_line służący do renderowania map na dużym oddaleniu
osm2pgrouting
5. ways – relacje sieci ulic
6. ways_vertices_pgr – węzły (w tablicy ways source i target)
OSM – struktura bazy
Zaimportowane dane mają te same właściwości co oryginalna baza z openstreetmap.com.
Lista tagów dostępna na http://wiki.openstreetmap.org/wiki/Category:Tag_descriptions_by_group
SELECT *
FROM planet_osm_polygon
WHERE osm_id = 239280436
Nawiązanie połączenia
R> install.packages(c("rgdal“,”RPostgreSQL”,”rgeos”,”ggplot2”,”ggmap”,”ggrepel”))
R> devtools:::install_github("elo2zero/oddsandsods")
R> library(oddsandsods);library(rgeos);library(ggplot2);library(magrittr)
# sprawdź czy w bibliotece rgdal są sterowniki do PostgreSQL
R> rgdal:::ogrDrivers()
R> sqlConnect(“poland_osm”)
UWAGA! W przypadku braku sterowników do PostgreSQL w rgdal należy zainstalować pakiet z
http://www.kyngchaos.com/files/software/frameworks/rgdal-1.0.7-1.dmg a następnie
zainstalować przy pomocy devtools:::install(“ścieżka do folderu z pakietem”)
Pobieraanie danych
R> województwa <- pgisRead({"SELECT
name, st_transform(way, 4326) geom
FROM
planet_osm_polygon
WHERE
admin_level = '4'"}, data.frame=T)
R> miasta <- customQuery({“SELECT
name, place,
st_x(st_transform(way, 4326)) long,
st_y(st_transform(way,4326)) lat
FROM
planet_osm_point
WHERE place='city'
ORDER BY name”})
pgisRead() - funkcja pobiera dane z bazy danych zwraca obiekt typu spatial {sp} lub
data.frame gdy argument data.frame=T.
customQuery() - uniwersalna funkcja do wyciągania danych z baz
Mapa województw
R> theme <-
theme(axis.line = element_blank(), axis.ticks = element_blank(),
axis.ticks.length = unit( 0 ,"null"),
axis.ticks.margin = unit( 0, "null"),
axis.text.x = element_blank(), axis.text.y = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank(),
legend.position="none",
panel.background = element_blank(),
panel.border = element_blank(),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
plot.background = element_rect(fill = "white", colour=NA),
plot.margin = unit(c(0,0,0,0), "null"),
panel.margin = unit(c(0,0,0,0), "null"),
legend.margin = unit(0, "null"),
plot.background = element_rect(fill = "transparent",colour = NA))
R> ggplot(woj) +
geom_polygon(aes(x=long, y=lat, group=group),fill="transparent", col="blue") +
geom_point(data=miasta, aes(x=long, y=lat), color="red") +
geom_text(data=miasta, aes(label = name,x=long+0.05,y=lat+0.05), size=3)+
coord_map() +
theme
Mapa okolicy Startera
biuro <- pgisRead({"
SELECT
way
FROM planet_osm_polygon
WHERE name SIMILAR TO '(Gdański Inkubator Przedsiębiorczości|Arkońska)
%';"})
okolica_biura <- pgisRead({"
SELECT
ST_Intersection(
ST_Transform(ST_MakeEnvelope(18.57285, 54.40688, 18.57997,
54.40391, 4326),900913),
way
)
FROM planet_osm_line
WHERE
ST_Intersects(
ST_MakeEnvelope(18.57285, 54.40688, 18.57997, 54.40391, 4326),
ST_Transform(way,4326)
) and
highway in ('motorway','trunk','primary','secondary','tertiary','residential') ;"})
ggplot(biuro) +
geom_polygon(aes(x=long, y=lat, group=group), color="red") +
geom_path(data=okolica_biura,aes(x=long, y=lat, group=group))+
coord_fixed() +
theme
gda <- pgisRead({"SELECT st_transform(way, 4326)
FROM planet_osm_polygon
WHERE
name = 'Gdańsk'"})
ulice <- pgisRead({"SELECT st_transform(r.way, 4326)
FROM planet_osm_line r, planet_osm_polygon p
WHERE
p.name = 'Gdańsk' AND
ST_Intersects(p.way, r.way) and
r.highway in ('motorway','trunk','primary','secondary','tertiary','residential')"})
wody <- pgisRead({"SELECT st_transform(r.way, 4326)
FROM planet_osm_polygon r, planet_osm_polygon p
WHERE
ST_intersects(r.way,ST_Envelope(p.way)) AND
r.waterway IS NOT NULL AND
p.name = 'Gdańsk'"})
mapa_gda <-
ggplot(gda) +
geom_polygon(aes(x=long, y=lat, group=group),
color="blue", fill=NA, size =.4) +
geom_polygon(data = wody, aes(x = long, y = lat, group = group),
fill = "skyblue", color = NA) +
geom_path(data = ulice, aes( x= long, y = lat, group = group), size = .1) +
coord_map(ylim = bbox(gda)[ c(2,4) ], xlim = bbox(gda)[ c(1,3) ]) +
theme
Mapa ulic Gdańska
library(ggmap)
bbox <- bbox(gda)
img <- get_map(bbox, source =”osm”)
mapa_gda <-
ggmap(img) +
geom_polygon(data=gda, aes(x=long, y=lat, group=group),
color=”blue”, fill=NA, size=.4) +
geom_polygon(data=wody,aes(x=long, y=lat, group=group),
fill=”skyblue”, color=NA) +
geom_path(data=ulice, aes(x=long, y=lat, group=group), size=.1) +
coord_map(ylim=bbox(gda)[c(2,4)], xlim=bbox(gda)[c(1,3)]) +
theme
Pobieranie rastrów
library(ggrepel)
trasa <- pgrGetShortestPath(x1=18.7088469, y1=54.3602994, x2=18.5758874, y2=54.4050216)
mapa_gda +
geom_path(data=trasa, aes(x=long, y=lat), color = "red")
ulice <-
trasa@data %>%
mutate(distance = cumsum(length)) %>%
dplyr:::filter( ! duplicated(name))
mapa_gda +
geom_path(data=trasa, aes(x=long, y=lat), color = "red") +
geom_point(data=ulice,aes(x=x1, y=y1), color="red")+
geom_label_repel(data=ulice,aes(x=x1, y=y1, label=name),
size=2,
fill="red", color="white",
box.padding = unit(0.35, "lines"),
point.padding = unit(0.3, "lines"))
Trasowanie
Wizualizacja trasy
Dodatkowo

Jakub Nowosad – Geostatystyka w R
https://bookdown.org/nowosad/Geostatystyka/

Working with postGis from R https://rpubs.com/dgolicher/6373

David Kahle, Hadley Wigham – ggmap: Spatial Visualization with
ggplot2
https://journal.r-project.org/archive/2013-1/kahle-wickham.pdf

Skrypt z prezentacji
https://gist.github.com/elo2zero/e4f05d5f44f47546e67abfa6e5400
02b
Dawid Kałędkowski
Business Analyst
+48 728 403 323
dkaledkowski@clickmeeting.com
Dziękuję za uwagę!

More Related Content

Viewers also liked

Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for IT
Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for ITDenny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for IT
Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for ITBala Subra
 
OpenRefine Class Tutorial
OpenRefine Class TutorialOpenRefine Class Tutorial
OpenRefine Class TutorialAshwin Dinoriya
 
Subqueries, Backups, Users and Privileges
Subqueries, Backups, Users and PrivilegesSubqueries, Backups, Users and Privileges
Subqueries, Backups, Users and PrivilegesAshwin Dinoriya
 
Data Visualization-Ashwin
Data Visualization-AshwinData Visualization-Ashwin
Data Visualization-AshwinAshwin Dinoriya
 
Sql Server 2012 Reporting-Services is Now a SharePoint Service Application
Sql Server 2012   Reporting-Services is Now a SharePoint Service ApplicationSql Server 2012   Reporting-Services is Now a SharePoint Service Application
Sql Server 2012 Reporting-Services is Now a SharePoint Service ApplicationInnoTech
 
Welcome to PowerBI and Tableau
Welcome to PowerBI and TableauWelcome to PowerBI and Tableau
Welcome to PowerBI and TableauAshwin Dinoriya
 
Rafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud ApplicationsRafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud ApplicationsAnalyticsConf
 
Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1AnalyticsConf
 
SQL Server Reporting Services (SSRS) 101
 SQL Server Reporting Services (SSRS) 101 SQL Server Reporting Services (SSRS) 101
SQL Server Reporting Services (SSRS) 101Sparkhound Inc.
 
SQL Server Reporting Services
SQL Server Reporting ServicesSQL Server Reporting Services
SQL Server Reporting ServicesAhmed Elbaz
 
Ssrs introduction session 1
Ssrs introduction session 1Ssrs introduction session 1
Ssrs introduction session 1Muthuvel P
 
What is Power BI
What is Power BIWhat is Power BI
What is Power BIDries Vyvey
 
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA Luc Vanrobays
 
Microsoft Power BI Overview
Microsoft Power BI OverviewMicrosoft Power BI Overview
Microsoft Power BI OverviewNetwoven Inc.
 

Viewers also liked (17)

Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for IT
Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for ITDenny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for IT
Denny Lee\'s Data Camp v1.0 talk on SSRS Best Practices for IT
 
Banking Database
Banking DatabaseBanking Database
Banking Database
 
OpenRefine Class Tutorial
OpenRefine Class TutorialOpenRefine Class Tutorial
OpenRefine Class Tutorial
 
Subqueries, Backups, Users and Privileges
Subqueries, Backups, Users and PrivilegesSubqueries, Backups, Users and Privileges
Subqueries, Backups, Users and Privileges
 
Data Visualization-Ashwin
Data Visualization-AshwinData Visualization-Ashwin
Data Visualization-Ashwin
 
Sql Server 2012 Reporting-Services is Now a SharePoint Service Application
Sql Server 2012   Reporting-Services is Now a SharePoint Service ApplicationSql Server 2012   Reporting-Services is Now a SharePoint Service Application
Sql Server 2012 Reporting-Services is Now a SharePoint Service Application
 
Welcome to PowerBI and Tableau
Welcome to PowerBI and TableauWelcome to PowerBI and Tableau
Welcome to PowerBI and Tableau
 
Rafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud ApplicationsRafał Korszuń: Security in Design of Cloud Applications
Rafał Korszuń: Security in Design of Cloud Applications
 
Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1Paweł Ciepły: PowerBI part1
Paweł Ciepły: PowerBI part1
 
SQL Server Reporting Services (SSRS) 101
 SQL Server Reporting Services (SSRS) 101 SQL Server Reporting Services (SSRS) 101
SQL Server Reporting Services (SSRS) 101
 
SQL Server Reporting Services
SQL Server Reporting ServicesSQL Server Reporting Services
SQL Server Reporting Services
 
Ssrs introduction session 1
Ssrs introduction session 1Ssrs introduction session 1
Ssrs introduction session 1
 
What is Power BI
What is Power BIWhat is Power BI
What is Power BI
 
Power bi vs tableau
Power bi vs tableauPower bi vs tableau
Power bi vs tableau
 
MSBI-SSRS PPT
MSBI-SSRS PPTMSBI-SSRS PPT
MSBI-SSRS PPT
 
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA
Dmm302 - Sap Hana Data Warehousing: Models for Sap Bw and SQL DW on SAP HANA
 
Microsoft Power BI Overview
Microsoft Power BI OverviewMicrosoft Power BI Overview
Microsoft Power BI Overview
 

Similar to Dawid Gonzo Kałędowski: R jako osobisty GPS

Beginning to Spatial Data in SQL Server 2008
Beginning to Spatial Data in SQL Server 2008Beginning to Spatial Data in SQL Server 2008
Beginning to Spatial Data in SQL Server 2008Tobias Koprowski
 
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaBartlomiej Zass
 
Sieciowe serwery danych
Sieciowe serwery danychSieciowe serwery danych
Sieciowe serwery danychWGUG
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPPiotr Gabryjeluk
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Spjarorcon
 
GRASS a R
GRASS a RGRASS a R
GRASS a RWGUG
 
Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop
Paweł Kucharski: Oswajamy Słonia czyli po co nam HadoopPaweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop
Paweł Kucharski: Oswajamy Słonia czyli po co nam HadoopAnalyticsConf
 
Tristar eye - status 03.02.2016
Tristar eye -  status 03.02.2016Tristar eye -  status 03.02.2016
Tristar eye - status 03.02.2016Fundacja ePaństwo
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Filip Rembialkowski
 
System GRASS
System GRASSSystem GRASS
System GRASSWGUG
 
wprowadzenie do grass
wprowadzenie do grasswprowadzenie do grass
wprowadzenie do grassWGUG
 

Similar to Dawid Gonzo Kałędowski: R jako osobisty GPS (12)

Beginning to Spatial Data in SQL Server 2008
Beginning to Spatial Data in SQL Server 2008Beginning to Spatial Data in SQL Server 2008
Beginning to Spatial Data in SQL Server 2008
 
ASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założeniaASP.NET MVC - najważniejsze założenia
ASP.NET MVC - najważniejsze założenia
 
Sieciowe serwery danych
Sieciowe serwery danychSieciowe serwery danych
Sieciowe serwery danych
 
TWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHPTWIG - niezłe widoki dla PHP
TWIG - niezłe widoki dla PHP
 
Jarorcon Sp
Jarorcon SpJarorcon Sp
Jarorcon Sp
 
GRASS a R
GRASS a RGRASS a R
GRASS a R
 
Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop
Paweł Kucharski: Oswajamy Słonia czyli po co nam HadoopPaweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop
Paweł Kucharski: Oswajamy Słonia czyli po co nam Hadoop
 
test
testtest
test
 
Tristar eye - status 03.02.2016
Tristar eye -  status 03.02.2016Tristar eye -  status 03.02.2016
Tristar eye - status 03.02.2016
 
Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014Skalowanie PostgreSQL @ DBConf.PL 2014
Skalowanie PostgreSQL @ DBConf.PL 2014
 
System GRASS
System GRASSSystem GRASS
System GRASS
 
wprowadzenie do grass
wprowadzenie do grasswprowadzenie do grass
wprowadzenie do grass
 

More from AnalyticsConf

Wiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingWiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingAnalyticsConf
 
Grzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacjeGrzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacjeAnalyticsConf
 
Przemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBAPrzemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBAAnalyticsConf
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychAnalyticsConf
 
Shannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performanceShannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performanceAnalyticsConf
 
Tomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in GdańskTomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in GdańskAnalyticsConf
 
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktykaWłodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktykaAnalyticsConf
 
Piotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientówPiotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientówAnalyticsConf
 
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...AnalyticsConf
 

More from AnalyticsConf (9)

Wiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programmingWiesław Kałkus: C# functional programming
Wiesław Kałkus: C# functional programming
 
Grzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacjeGrzegorz Rycaj: Zdebuguj swoja prezentacje
Grzegorz Rycaj: Zdebuguj swoja prezentacje
 
Przemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBAPrzemysław Dzierżak: Hurtownie dla DBA
Przemysław Dzierżak: Hurtownie dla DBA
 
Michał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonychMichał Żyliński: Cortana dla niewtajemniczonych
Michał Żyliński: Cortana dla niewtajemniczonych
 
Shannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performanceShannon Holgate: Bending non-splittable data to harness distributed performance
Shannon Holgate: Bending non-splittable data to harness distributed performance
 
Tomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in GdańskTomasz Nadolny: Open Data in Gdańsk
Tomasz Nadolny: Open Data in Gdańsk
 
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktykaWłodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
Włodek Bielski: Efektywne wdrożenie BI - z notatnika praktyka
 
Piotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientówPiotr Janczyk: Modele zachowań klientów
Piotr Janczyk: Modele zachowań klientów
 
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
Alex Kornilov: Building Big Data Company in Sports-Betting Industry - BETEGY ...
 

Dawid Gonzo Kałędowski: R jako osobisty GPS

  • 1. R jako osobisty GPS Współpraca R z serwerem danych przestrzennych Dawid 'Gonzo' Kałędkowski
  • 2. • Język R został stworzony do obliczeń statystycznych i wizualizacji danych w Bell Laboratories przez Johna Chambersa i kolegów na bazie wcześniejszego języka S • R to język stworzony przez statystyków dla statystyków • Cechuje go prostota • Dla zaawansowanych użytkowników także bardzo szybki – zastosowanie kodów C++ bezpośrednio na obiektach R • Możliwość pracy na danych wszelkiego typu i formatu • Nieskomplikowany menedżer pakietów Język i środowisko
  • 3. Język i środowisko • Użytkownicy rozszerzają możliwości R o nowe integracje: • Bazy danych (ODBC, MySQL, postgreSQL, sqlite3, mongolite, …) • Pliki znanych programów statystycznych (SPSS, Stata, SAS, …) • Web (curl, Selenium, ...) • Dane geoprzestrzenne (GDAL, OGR) • Poprawianie efektywności obliczeń (Hadoop, GPU, Spark, C++, ...) • R na serwerze (shiny, Rapache, opencpu, …)
  • 4. 1. Wymagany serwer PostgreSQL wraz z dodatkowymi rozszerzeniami: PostGIS http://wiki.openstreetmap.org/wiki/PostGIS/Installation pgRouting http://pgrouting.org/download.html 2. Dane OSM dla Polski we dwóch formatach http://download.geofabrik.de/europe/poland-latest.osm.pbf http://download.geofabrik.de/europe/poland-latest.osm.bz2 Dane z OSM
  • 5. 3. Utworzenie bazy na podstawie danych z OSM osm2pgsql http://wiki.openstreetmap.org/wiki/Osm2pgsql OSM – import do pgSQL $> createdb poland_osm $> psql poland_osm poland_osm=# create extension postgis; poland_osm=# create exiention hstore; poland_osm=# create exiention pgrouting; poland_osm=# q $> osm2pgsql -c -d poland_osm -C 5000 -S default.style --number-processes 3 poland-latest.osm.pbf Alternatywy: osmosis, shp2pgsql
  • 6. OSM – trasowanie $ psql poland_pgr poland_osm=# create extension postgis; poland_osm=# create exiention pgrouting; > osm2pgrouting -file "poland-latest.osm" -conf "mapconfig.xml" -dbname poland_osm -user <user_name> -host <host> -passwd <passwd> 4. Stworzenie topologii ulic w formie sieci z użyciem osm2pgrouting http://pgrouting.org/docs/tools/osm2pgrouting.html 5. Po zakończeniu importowania uruchom serwer PostgreSQL
  • 7. OSM – struktura bazy osm2pgsql 1. planet_osm_line – linie dróg, granice, trasy komunikacji miejskiej, trasy kolei, linie wysokiego napięcia 2. planet_osm_points – obiekty takie jak restauracje, przystanki, stacje, wieże energetyczne 3. planet_osm_polygon – obszary jednostek administracyjnych, przedsiębiorstw, parków, rezerwatów 4. planet_osm_roads – podzbiór planet_osm_line służący do renderowania map na dużym oddaleniu osm2pgrouting 5. ways – relacje sieci ulic 6. ways_vertices_pgr – węzły (w tablicy ways source i target)
  • 8. OSM – struktura bazy Zaimportowane dane mają te same właściwości co oryginalna baza z openstreetmap.com. Lista tagów dostępna na http://wiki.openstreetmap.org/wiki/Category:Tag_descriptions_by_group SELECT * FROM planet_osm_polygon WHERE osm_id = 239280436
  • 9. Nawiązanie połączenia R> install.packages(c("rgdal“,”RPostgreSQL”,”rgeos”,”ggplot2”,”ggmap”,”ggrepel”)) R> devtools:::install_github("elo2zero/oddsandsods") R> library(oddsandsods);library(rgeos);library(ggplot2);library(magrittr) # sprawdź czy w bibliotece rgdal są sterowniki do PostgreSQL R> rgdal:::ogrDrivers() R> sqlConnect(“poland_osm”) UWAGA! W przypadku braku sterowników do PostgreSQL w rgdal należy zainstalować pakiet z http://www.kyngchaos.com/files/software/frameworks/rgdal-1.0.7-1.dmg a następnie zainstalować przy pomocy devtools:::install(“ścieżka do folderu z pakietem”)
  • 10. Pobieraanie danych R> województwa <- pgisRead({"SELECT name, st_transform(way, 4326) geom FROM planet_osm_polygon WHERE admin_level = '4'"}, data.frame=T) R> miasta <- customQuery({“SELECT name, place, st_x(st_transform(way, 4326)) long, st_y(st_transform(way,4326)) lat FROM planet_osm_point WHERE place='city' ORDER BY name”}) pgisRead() - funkcja pobiera dane z bazy danych zwraca obiekt typu spatial {sp} lub data.frame gdy argument data.frame=T. customQuery() - uniwersalna funkcja do wyciągania danych z baz
  • 11. Mapa województw R> theme <- theme(axis.line = element_blank(), axis.ticks = element_blank(), axis.ticks.length = unit( 0 ,"null"), axis.ticks.margin = unit( 0, "null"), axis.text.x = element_blank(), axis.text.y = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), legend.position="none", panel.background = element_blank(), panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), plot.background = element_rect(fill = "white", colour=NA), plot.margin = unit(c(0,0,0,0), "null"), panel.margin = unit(c(0,0,0,0), "null"), legend.margin = unit(0, "null"), plot.background = element_rect(fill = "transparent",colour = NA)) R> ggplot(woj) + geom_polygon(aes(x=long, y=lat, group=group),fill="transparent", col="blue") + geom_point(data=miasta, aes(x=long, y=lat), color="red") + geom_text(data=miasta, aes(label = name,x=long+0.05,y=lat+0.05), size=3)+ coord_map() + theme
  • 12. Mapa okolicy Startera biuro <- pgisRead({" SELECT way FROM planet_osm_polygon WHERE name SIMILAR TO '(Gdański Inkubator Przedsiębiorczości|Arkońska) %';"}) okolica_biura <- pgisRead({" SELECT ST_Intersection( ST_Transform(ST_MakeEnvelope(18.57285, 54.40688, 18.57997, 54.40391, 4326),900913), way ) FROM planet_osm_line WHERE ST_Intersects( ST_MakeEnvelope(18.57285, 54.40688, 18.57997, 54.40391, 4326), ST_Transform(way,4326) ) and highway in ('motorway','trunk','primary','secondary','tertiary','residential') ;"}) ggplot(biuro) + geom_polygon(aes(x=long, y=lat, group=group), color="red") + geom_path(data=okolica_biura,aes(x=long, y=lat, group=group))+ coord_fixed() + theme
  • 13. gda <- pgisRead({"SELECT st_transform(way, 4326) FROM planet_osm_polygon WHERE name = 'Gdańsk'"}) ulice <- pgisRead({"SELECT st_transform(r.way, 4326) FROM planet_osm_line r, planet_osm_polygon p WHERE p.name = 'Gdańsk' AND ST_Intersects(p.way, r.way) and r.highway in ('motorway','trunk','primary','secondary','tertiary','residential')"}) wody <- pgisRead({"SELECT st_transform(r.way, 4326) FROM planet_osm_polygon r, planet_osm_polygon p WHERE ST_intersects(r.way,ST_Envelope(p.way)) AND r.waterway IS NOT NULL AND p.name = 'Gdańsk'"}) mapa_gda <- ggplot(gda) + geom_polygon(aes(x=long, y=lat, group=group), color="blue", fill=NA, size =.4) + geom_polygon(data = wody, aes(x = long, y = lat, group = group), fill = "skyblue", color = NA) + geom_path(data = ulice, aes( x= long, y = lat, group = group), size = .1) + coord_map(ylim = bbox(gda)[ c(2,4) ], xlim = bbox(gda)[ c(1,3) ]) + theme Mapa ulic Gdańska
  • 14. library(ggmap) bbox <- bbox(gda) img <- get_map(bbox, source =”osm”) mapa_gda <- ggmap(img) + geom_polygon(data=gda, aes(x=long, y=lat, group=group), color=”blue”, fill=NA, size=.4) + geom_polygon(data=wody,aes(x=long, y=lat, group=group), fill=”skyblue”, color=NA) + geom_path(data=ulice, aes(x=long, y=lat, group=group), size=.1) + coord_map(ylim=bbox(gda)[c(2,4)], xlim=bbox(gda)[c(1,3)]) + theme Pobieranie rastrów
  • 15. library(ggrepel) trasa <- pgrGetShortestPath(x1=18.7088469, y1=54.3602994, x2=18.5758874, y2=54.4050216) mapa_gda + geom_path(data=trasa, aes(x=long, y=lat), color = "red") ulice <- trasa@data %>% mutate(distance = cumsum(length)) %>% dplyr:::filter( ! duplicated(name)) mapa_gda + geom_path(data=trasa, aes(x=long, y=lat), color = "red") + geom_point(data=ulice,aes(x=x1, y=y1), color="red")+ geom_label_repel(data=ulice,aes(x=x1, y=y1, label=name), size=2, fill="red", color="white", box.padding = unit(0.35, "lines"), point.padding = unit(0.3, "lines")) Trasowanie
  • 17. Dodatkowo  Jakub Nowosad – Geostatystyka w R https://bookdown.org/nowosad/Geostatystyka/  Working with postGis from R https://rpubs.com/dgolicher/6373  David Kahle, Hadley Wigham – ggmap: Spatial Visualization with ggplot2 https://journal.r-project.org/archive/2013-1/kahle-wickham.pdf  Skrypt z prezentacji https://gist.github.com/elo2zero/e4f05d5f44f47546e67abfa6e5400 02b
  • 18. Dawid Kałędkowski Business Analyst +48 728 403 323 dkaledkowski@clickmeeting.com Dziękuję za uwagę!