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
Nowa wersja
Poprzednia wersja
ewdprocedury_bazaszkol_ludnosc [2014/10/31 09:12]
zozlak
ewdprocedury_bazaszkol_ludnosc [2019/09/07 16:16]
zozlak
Linia 9: Linia 9:
 Ponieważ dane w BDL publikowane są z systematycznym opóźnieniem,​ przyjęto, że informacja o liczbie mieszkańców:​ Ponieważ dane w BDL publikowane są z systematycznym opóźnieniem,​ przyjęto, że informacja o liczbie mieszkańców:​
   * w bieżącym roku pobierana jest dla danych, które są dostępne w BDL, czyli dla poprzedniego roku (mówiąc inaczej wg stanu w momencie rozpoczęcia roku szkolnego, którego to roku szkolnego dotyczą dane teleadresowe szkoły);   * w bieżącym roku pobierana jest dla danych, które są dostępne w BDL, czyli dla poprzedniego roku (mówiąc inaczej wg stanu w momencie rozpoczęcia roku szkolnego, którego to roku szkolnego dotyczą dane teleadresowe szkoły);
-  * jednocześnie dla wcześniejszych ​lata przypisywana jest informacja z BDL dla odpowiadającego im roku.+  * jednocześnie dla wcześniejszych ​latach ​przypisywana jest informacja z BDL dla odpowiadającego im roku.
  
 ===== Algorytm ===== ===== Algorytm =====
Linia 15: Linia 15:
 Pobranie z BDL informacji o liczbie mieszkańców **jedynie** w gminach miejskich oraz miastach w gminach miejsko-wiejskich (będzie to istotne dla gmin miejsko-wiejskich i wiejskich). Pobranie z BDL informacji o liczbie mieszkańców **jedynie** w gminach miejskich oraz miastach w gminach miejsko-wiejskich (będzie to istotne dla gmin miejsko-wiejskich i wiejskich).
  
-  * **Dzielnice ​Warszawy** - złączenie po kodzie TERYT Warszawy (146501 / 143101) +  * **dzielnice ​Warszawy** - złączenie po kodzie TERYT Warszawy (146501 / 143101) 
-  * **Gminy miejskie** - złączenie z danymi z BDL po kodzie TERYT gminy +  * **gminy miejskie** - złączenie z danymi z BDL po kodzie TERYT gminy 
-  * **Gminy miejsko-wiejskie**+  * **gminy miejsko-wiejskie**
     * złączenie z danymi z BDL po parze {TERYT gminy, miejscowość}     * złączenie z danymi z BDL po parze {TERYT gminy, miejscowość}
     * przypisanie 0 szkołom, które nie połączyły się z danymi BDL     * przypisanie 0 szkołom, które nie połączyły się z danymi BDL
     * przypisanie braku danych szkołom, które nie posiadają kodu pocztowego     * przypisanie braku danych szkołom, które nie posiadają kodu pocztowego
-  * **Gminy wiejskie**+  * **gminy wiejskie**
     * złączenie z danymi z BDL po parze {TERYT powiatu, miejscowość}     * złączenie z danymi z BDL po parze {TERYT powiatu, miejscowość}
       * ponieważ z BDL pobrano tylko informacje o gminach miejskich i miastach w gminach miejsko-wiejskich,​ dołączyć w ten sposób może się tylko informacja o odpowiadającej danej gminie wiejskiej gminie miejskiej       * ponieważ z BDL pobrano tylko informacje o gminach miejskich i miastach w gminach miejsko-wiejskich,​ dołączyć w ten sposób może się tylko informacja o odpowiadającej danej gminie wiejskiej gminie miejskiej
Linia 31: Linia 31:
  
 http://​stat.gov.pl/​bdl http://​stat.gov.pl/​bdl
-  * dane roczne ​-> ludność -> stan ludności ​i prognozy ​-> ludność wg grup wieku i płci +  * dane wg dziedzin ​-> ludność -> stan ludności -> ludność wg grup wieku i płci 
-  * //wybór jednostek terytorialnych ​wg poziomu NTS//: //gminy miejskiemiasta w gminach miejsko-wiejskich//​ +  * lata wg uznania, wiek //​ogółem//​płeć //​ogółem//​ 
-  * //wiek//: //​ogółem//​ +  * jednostki - wszystkie z poziomu ogólnopolskiego w podziale ​//układ administracyjny// (który jest domyślny) 
-  * //płeć//: //​ogółem//​ +  * wyeksportować jako //CSV - tablica relacyjna//
-  * //dodatkowe agregaty//: brak +
- +
-I zapisać jako CSV.+
  
 ====== Import do bazy ====== ====== Import do bazy ======
  
 <​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) 
  
-dane = read.csv2(plikDanych,​ stringsAsFactors=F) +# aby upewnić się, że baza jest spójna z naszymi oczekiwaniami 
-dane$teryt = as.numeric(paste0(substring(dane$teryt2, 3), substring(dane$teryt, ​69))) +sqlQuery(P, "​UPDATE szkoly_dane SET miejscowosc = poczta WHERE miejscowosc = ''​ or miejscowosc is null"​) 
-dane$miasto = sub('​[*]',​ '', ​dane$miasto) + 
-dane$miasto = sub('​[(][0-9][)]',​ '', ​dane$miasto) +dane = read.csv2(plikDanych,​ stringsAsFactors=F) ​%>% 
-dane$miasto = tolower(str_trim(sub('​- miasto',​ '', ​dane$miasto))) +  as.tbl() %>% 
-dane$miasto = tolower(str_trim(dane$miasto)) +  filter(Rok == rokBdl & grepl('​([(][148][)]|Powiat m. st. Warszawa)$'Nazwa& !is.na(Wartosc)) %>% 
-dane[, kolumnaLudnosc] = as.numeric(dane[,​ kolumnaLudnosc]# jeśli dane z kilku lat i zmieniała się liczba gmin +  select(KodNazwa, Wartosc) %>% 
-dane = dane[!is.na(dane[,​ kolumnaLudnosc]),​ ]+  dplyr::​rename(teryt ​= Kodmiasto = Nazwaludnosc = Wartosc%>% 
 +  mutate(teryt = as.integer(teryt / 10)) %>% 
 +  ​mutate(miasto = sub('​[*]',​ '',​ miasto)) %>% 
 +  ​mutate(miasto = sub('​[(][0-9][)]',​ '',​ miasto)) %>% 
 +  ​mutate(miasto = tolower(str_trim(sub('​- miasto',​ '',​ miasto)))) %>% 
 +  ​mutate(miasto = tolower(str_trim(miasto)))
  
 szkoly = sqlExecute( szkoly = sqlExecute(
Linia 74: 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 98: 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