Narzędzia użytkownika

Narzędzia witryny


ewdprocedury_bazaszkol_ludnosc

Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
ewdprocedury_bazaszkol_ludnosc [2019/09/06 12:13]
zozlak [Pobieranie danych z BDL]
ewdprocedury_bazaszkol_ludnosc [2019/09/07 16:16] (aktualna)
zozlak
Linia 39: Linia 39:
  
 <​code>​ <​code>​
-rok = 2013                 # dostosować +rok = 2019                   # dostosować 
-kolumnaLudnosc ​'​X2012' ​  # dostosować +rokBdl ​ ​2018 ​              # dostosować 
-plikDanych = '~/ludnosc.csv' # dostosować,​ plik musi mieć kolumny '​teryt'​ i '​miasto'​ +plikDanych = '~/ludność.csv' # dostosować,​ plik musi mieć kolumny '​teryt'​ i '​miasto'​
-zrodloODBC = '​EWD' ​     # dostosować+
  
 +library(dplyr)
 library(stringr) library(stringr)
-library(plyr) 
-library(RODBCext) 
-P = odbcConnect(zrodloODBC) 
  
 # aby upewnić się, że baza jest spójna z naszymi oczekiwaniami # aby upewnić się, że baza jest spójna z naszymi oczekiwaniami
 sqlQuery(P, "​UPDATE szkoly_dane SET miejscowosc = poczta WHERE miejscowosc = ''​ or miejscowosc is null") sqlQuery(P, "​UPDATE szkoly_dane SET miejscowosc = poczta WHERE miejscowosc = ''​ or miejscowosc is null")
  
-dane = read.csv2(plikDanych,​ stringsAsFactors=F) +dane = read.csv2(plikDanych,​ stringsAsFactors=F) ​%>% 
-#dane$teryt = as.numeric(paste0(substring(dane$teryt23)substring(dane$teryt, ​69))+  as.tbl() %>% 
-dane$teryt = as.integer(substring(dane$teryt, 1, 6)) +  filter(Rok == rokBdl & grepl('​([(][148][)]|Powiat m. st. Warszawa)$'Nazwa) & !is.na(Wartosc)) %>% 
-dane$miasto = sub('​[*]',​ '', ​dane$miasto) +  select(KodNazwaWartosc) %>% 
-dane$miasto = sub('​[(][0-9][)]',​ '', ​dane$miasto) +  dplyr::​rename(teryt ​= Kodmiasto = Nazwaludnosc = Wartosc%>% 
-dane$miasto = tolower(str_trim(sub('​- miasto',​ '', ​dane$miasto))) +  ​mutate(teryt = as.integer(teryt ​/ 10)) %>% 
-dane$miasto = tolower(str_trim(dane$miasto)) +  ​mutate(miasto = sub('​[*]',​ '',​ miasto)) %>% 
-dane[, kolumnaLudnosc] = as.numeric(dane[,​ kolumnaLudnosc]# jeśli dane z kilku lat i zmieniała się liczba gmin +  ​mutate(miasto = sub('​[(][0-9][)]',​ '',​ miasto)) %>% 
-dane = dane[!is.na(dane[,​ kolumnaLudnosc]),​ ]+  ​mutate(miasto = tolower(str_trim(sub('​- miasto',​ '',​ miasto)))) %>% 
 +  ​mutate(miasto = tolower(str_trim(miasto)))
  
 szkoly = sqlExecute( szkoly = sqlExecute(
Linia 75: Linia 73:
 ### Warszawa ### Warszawa
 warszawa = szkoly[szkoly$rodzaj_gminy == '​dzielnica m.st. Warszawy',​ ] warszawa = szkoly[szkoly$rodzaj_gminy == '​dzielnica m.st. Warszawy',​ ]
-warszawa[, kolumnaLudnosc] ​dane[dane$teryt ​%inc(146501, 143101), kolumnaLudnosc]+warszawa = warszawa ​%>left_join(dane)
  
 ### gminy miejskie łączą się wprost po kodzie TERYT ### gminy miejskie łączą się wprost po kodzie TERYT
 miejskie = szkoly[szkoly$rodzaj_gminy == '​miejska',​ ] miejskie = szkoly[szkoly$rodzaj_gminy == '​miejska',​ ]
-miejskie = join(miejskie, dane, type = '​inner'​)+miejskie = left_join(miejskie, dane)
  
 ### gminy miejsko-wiejskie złączamy po kodzie TERYT i nazwie miejscowości równej nazwie gminy ### gminy miejsko-wiejskie złączamy po kodzie TERYT i nazwie miejscowości równej nazwie gminy
 mieszane = szkoly[szkoly$rodzaj_gminy == '​miejsko-wiejska',​ ] mieszane = szkoly[szkoly$rodzaj_gminy == '​miejsko-wiejska',​ ]
 dane$miejscowosc = dane$miasto dane$miejscowosc = dane$miasto
-mieszane = join(mieszane, dane, type = '​left'​+mieszane = left_join(mieszane, dane) 
-mieszane[is.na(mieszane[, kolumnaLudnosc]), kolumnaLudnosc] = 0 +mieszane$ludnosc[is.na(mieszane$ludnosc)] = 0 
-mieszane[is.na(mieszane$pna) | mieszane$pna == ''​, kolumnaLudnosc] = NA+mieszane$ludnosc[is.na(mieszane$pna) | mieszane$pna == ''​] = NA
  
 ### szkoły teoretycznie leżące w gminach wiejskich mogą tak naprawdę leżeć w gminach miejskich o tej samej nazwie - złączamy po terycie powiatu i nazwie miejscowości równej nazwie gminy ### szkoły teoretycznie leżące w gminach wiejskich mogą tak naprawdę leżeć w gminach miejskich o tej samej nazwie - złączamy po terycie powiatu i nazwie miejscowości równej nazwie gminy
Linia 99: Linia 97:
   wiejskie$miejscowosc   wiejskie$miejscowosc
 ) )
-wiejskie = join(wiejskie, dane2, type = '​left',​ by = '​teryt'​+wiejskie = left_join(wiejskie, dane2 %>% select(-miejscowosc)
-wiejskie[is.na(wiejskie[, kolumnaLudnosc]), kolumnaLudnosc] = 0+wiejskie$ludnosc[is.na(wiejskie$ludnosc)] = 0
  
-### zapis do bazy +### generowanie zapytań SQL 
-odbcSetAutoCommit(P,​ F) +d = bind_rows
-sqlExecute+  warszawa ​%>% select('ludnosc', '​id_szkoly',​ '​rok'​),​ 
-  ​P, +  mieszane ​%>% select('​ludnosc'​, '​id_szkoly',​ '​rok'​),​ 
-  "​UPDATE szkoly_dane SET wielkosc_miejscowosci = ? WHERE id_szkoly = ? AND rok = ?", +  wiejskie ​%>% select('​ludnosc'​, '​id_szkoly',​ '​rok'​)
-  rbind( +
-    ​warszawa[, c(kolumnaLudnosc, ​'id_szkoly', '​rok'​)],​ +
-    miejskie[, c(kolumnaLudnosc, '​id_szkoly',​ '​rok'​)]+
-    mieszane[, c(kolumnaLudnosc, '​id_szkoly',​ '​rok'​)]+
-    wiejskie[, c(kolumnaLudnosc, '​id_szkoly',​ '​rok'​)] +
-  ​)+
 ) )
-odbcEndTran(PT) +zap = sprintf("​UPDATE szkoly_dane SET wielkosc_miejscowosci = %s WHERE id_szkoly = %d AND rok = %d;"coalesce(as.character(d$ludnosc),​ '​null'​),​ d$id_szkoly,​ rok)
- +
-odbcClose(P)+
 </​code>​ </​code>​
ewdprocedury_bazaszkol_ludnosc.txt · ostatnio zmienione: 2019/09/07 16:16 przez zozlak