Guest User

Untitled

a guest
Dec 12th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.74 KB | None | 0 0
  1. ## wczytuje pakiety
  2.  
  3. ```
  4. library(tidyverse) ## dplyr, stringr, tidyr i inne
  5. library(readxl)
  6. library(writexl) ## ewentualny zapis do excela
  7. ```
  8.  
  9. ## nazwy kolumn
  10.  
  11. ```
  12. sex <- rep(c("ogolem","Kobiety","Mezczyzni"),16)
  13. age <- rep(c(rep("ogolem",3),rep("do17",3),rep("18do64",3),rep("powyżej65",3)),4)
  14. quarter <- c(rep("Q1",12),rep("Q2",12),rep("Q3",12),rep("Q4",12))
  15. nazwy <- tolower(paste(quarter, age, sex, sep = '_'))
  16. ```
  17.  
  18. Tak wyglądają nazwy zgodnie z hierarchią danych w ZUS czyli najpierw kwartał, później wiek, a na końcu płeć.
  19.  
  20. ```
  21. > nazwy
  22. [1] "q1_ogolem_ogolem" "q1_ogolem_kobiety" "q1_ogolem_mezczyzni" "q1_do17_ogolem"
  23. [5] "q1_do17_kobiety" "q1_do17_mezczyzni" "q1_18do64_ogolem" "q1_18do64_kobiety"
  24. [9] "q1_18do64_mezczyzni" "q1_powyżej65_ogolem" "q1_powyżej65_kobiety" "q1_powyżej65_mezczyzni"
  25. [13] "q2_ogolem_ogolem" "q2_ogolem_kobiety" "q2_ogolem_mezczyzni" "q2_do17_ogolem"
  26. [17] "q2_do17_kobiety" "q2_do17_mezczyzni" "q2_18do64_ogolem" "q2_18do64_kobiety"
  27. ```
  28.  
  29. ## Nazwy plikow
  30.  
  31. Używam dir (można też list.files)
  32.  
  33. ```
  34. pliki <- dir(pattern = '*.xlsx')
  35. ```
  36.  
  37. Tak wygladaja pliki (miałem kod w tym samym miejscu).
  38.  
  39. ```
  40. > pliki
  41. [1] "CHOROBOWE_działalność gosp.xlsx"
  42. [2] "CHOROBOWE_osoby fizyczne.xlsx"
  43. [3] "CHOROBOWE_pracownicy.xlsx"
  44. [4] "EM.RENT._działalność gosp.xlsx"
  45. [5] "EM.RENT._osoby fizyczne.xlsx"
  46. [6] "EM.RENT._pracownicy.xlsx"
  47. [7] "ZDROWOTNE_pracownicy.xlsx"
  48. [8] "ZDROWOTNE._działalność gosp.xlsx"
  49. [9] "ZDROWOTNE._osoby fizyczne.xlsx"
  50. ```
  51. ## tworze sobie data.frame z nazwami plikow i arkuszami
  52.  
  53. ```
  54. pliki_arkusze <- pliki %>%
  55. set_names() %>%
  56. map_df(~ excel_sheets(.) %>% data.frame(sheet = .),
  57. .id = 'file') %>%
  58. mutate(group = gsub('\\.xlsx', '', file),
  59. year = gsub('03\\,06\\.', '', sheet))
  60. ````
  61.  
  62. Poniżej jak wygląda ten `data.frame`
  63.  
  64. ```
  65. file sheet group year
  66. 1 CHOROBOWE_działalność gosp.xlsx 2016 CHOROBOWE_działalność gosp 2016
  67. 2 CHOROBOWE_działalność gosp.xlsx 2017 CHOROBOWE_działalność gosp 2017
  68. 3 CHOROBOWE_działalność gosp.xlsx 03,06.2018 CHOROBOWE_działalność gosp 2018
  69. 4 CHOROBOWE_osoby fizyczne.xlsx 2016 CHOROBOWE_osoby fizyczne 2016
  70. 5 CHOROBOWE_osoby fizyczne.xlsx 2017 CHOROBOWE_osoby fizyczne 2017
  71. 6 CHOROBOWE_osoby fizyczne.xlsx 03,06.2018 CHOROBOWE_osoby fizyczne 2018
  72. 7 CHOROBOWE_pracownicy.xlsx 2016 CHOROBOWE_pracownicy 2016
  73. 8 CHOROBOWE_pracownicy.xlsx 2017 CHOROBOWE_pracownicy 2017
  74. 9 CHOROBOWE_pracownicy.xlsx 03,06.2018 CHOROBOWE_pracownicy 2018
  75. ```
  76.  
  77. # Kod do wczytania wszystkich plików i wszystkich arkuszy
  78.  
  79. Używam kombinacji funkcji `dplyr::group_by` i `dplyr::do`, a następnie `tidyr::unnest` bo dane wczytane są do list.
  80. Poźniej trochę przetwarzam dane żeby jako tako wyglądały.
  81.  
  82. ```
  83. dane <- pliki_arkusze %>%
  84. group_by(group, year) %>%
  85. do(excel = read_excel(path = .$file[[1]],
  86. sheet = .$sheet[[1]],
  87. skip = 8,
  88. col_names = FALSE) %>%
  89. ## usuwam pusty wiersz po ostatnim rekordzie ("pozostale") i objasnienia zaczynajace się od *
  90. filter(!is.na(X__1), !grepl('^\\*{1,3}\\)', X__1)) %>%
  91. mutate_at(vars(-X__1), as.numeric)) %>%
  92. unnest(excel) %>%
  93. setNames(c('group', 'year', 'country', nazwy)) %>%
  94. gather(stats, number, -group, -year, -country) %>%
  95. separate(stats, c('quarter', 'age', 'sex')) %>%
  96. na.omit() %>%
  97. separate(group, c('type', 'group'), sep = '_') %>%
  98. mutate(type = gsub('\\.$','', type))
  99. ```
  100.  
  101. W wyniku dostaje taką tabelę
  102.  
  103. ```
  104. > dane
  105. # A tibble: 107,316 x 8
  106. type group year country quarter age sex number
  107. <chr> <chr> <chr> <chr> <chr> <chr> <chr> <dbl>
  108. 1 CHOROBOWE działalność gosp 2016 AFGAŃSKIE q1 ogolem ogolem 37
  109. 2 CHOROBOWE działalność gosp 2016 ALBAŃSKIE q1 ogolem ogolem 15
  110. 3 CHOROBOWE działalność gosp 2016 ALGIERSKIE q1 ogolem ogolem 52
  111. 4 CHOROBOWE działalność gosp 2016 AMERYKAŃSKIE q1 ogolem ogolem 152
  112. 5 CHOROBOWE działalność gosp 2016 ANDORSKIE q1 ogolem ogolem 1
  113. 6 CHOROBOWE działalność gosp 2016 ANGOLSKIE q1 ogolem ogolem 4
  114. 7 CHOROBOWE działalność gosp 2016 ARGENTYŃSKIE q1 ogolem ogolem 7
  115. 8 CHOROBOWE działalność gosp 2016 ARMEŃSKIE q1 ogolem ogolem 455
  116. 9 CHOROBOWE działalność gosp 2016 AUSTRALIJSKIE q1 ogolem ogolem 13
  117. 10 CHOROBOWE działalność gosp 2016 AUSTRIACKIE q1 ogolem ogolem 76
  118. # ... with 107,306 more rows
  119. ```
Add Comment
Please, Sign In to add comment