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
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
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