GiriÅŸ

Veri Bilimi Nedir?

  • Disiplinler arası bir alan
  • Programlama
  • Ä°statistik
  • Alan uzmanlığı - analiz

— .class #id

Veri Bilimi Nedir?

Veri Bilimi Venn Şeması

— .class #id

New York Uçuş Verisi

     library(data.table)
## -------------------------------------------------------------------------
## data.table + dplyr code now lives in dtplyr.
## Please library(dtplyr)!
## -------------------------------------------------------------------------
## 
## Attaching package: 'data.table'
## The following objects are masked from 'package:dplyr':
## 
##     between, last
     flights = fread("flights.csv")
     airports = fread("airports.csv")
     planes = fread("planes.csv")
     weather = fread("weather.csv")
## Warning in fread("weather.csv"): Bumped column 14 to type character on
## data row 73, field contains '""'. Coercing previously read values in this
## column from logical, integer or numeric back to character which may not
## be lossless; e.g., if '00' and '000' occurred before they will now be just
## '0', and there may be inconsistencies with treatment of ',,' and ',NA,' too
## (if they occurred in this column before the bump). If this matters please
## rerun and set 'colClasses' to 'character' for this column. Please note
## that column type detection uses the first 5 rows, the middle 5 rows and the
## last 5 rows, so hopefully this message should be very rare. If reporting to
## datatable-help, please rerun and include the output from verbose=TRUE.

— .class #id

Verileri Gözden Geçirme

     str(flights)
## Classes 'data.table' and 'data.frame':   227496 obs. of  14 variables:
##  $ date     : chr  "2011-01-01 12:00:00" "2011-01-02 12:00:00" "2011-01-03 12:00:00" "2011-01-04 12:00:00" ...
##  $ hour     : int  14 14 13 14 14 13 13 13 14 14 ...
##  $ minute   : int  0 1 52 3 5 59 59 55 43 43 ...
##  $ dep      : int  1400 1401 1352 1403 1405 1359 1359 1355 1443 1443 ...
##  $ arr      : int  1500 1501 1502 1513 1507 1503 1509 1454 1554 1553 ...
##  $ dep_delay: int  0 1 -8 3 5 -1 -1 -5 43 43 ...
##  $ arr_delay: int  -10 -9 -8 3 -3 -7 -1 -16 44 43 ...
##  $ carrier  : chr  "AA" "AA" "AA" "AA" ...
##  $ flight   : int  428 428 428 428 428 428 428 428 428 428 ...
##  $ dest     : chr  "DFW" "DFW" "DFW" "DFW" ...
##  $ plane    : chr  "N576AA" "N557AA" "N541AA" "N403AA" ...
##  $ cancelled: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ time     : int  40 45 48 39 44 45 43 40 41 45 ...
##  $ dist     : int  224 224 224 224 224 224 224 224 224 224 ...
##  - attr(*, ".internal.selfref")=<externalptr>

— .class #id

Verileri Gözden Geçirme (Alt.)

     library(dplyr)
     tbl_df(flights)
## # A tibble: 227,496 x 14
##                   date  hour minute   dep   arr dep_delay arr_delay
##                  <chr> <int>  <int> <int> <int>     <int>     <int>
## 1  2011-01-01 12:00:00    14      0  1400  1500         0       -10
## 2  2011-01-02 12:00:00    14      1  1401  1501         1        -9
## 3  2011-01-03 12:00:00    13     52  1352  1502        -8        -8
## 4  2011-01-04 12:00:00    14      3  1403  1513         3         3
## 5  2011-01-05 12:00:00    14      5  1405  1507         5        -3
## 6  2011-01-06 12:00:00    13     59  1359  1503        -1        -7
## 7  2011-01-07 12:00:00    13     59  1359  1509        -1        -1
## 8  2011-01-08 12:00:00    13     55  1355  1454        -5       -16
## 9  2011-01-09 12:00:00    14     43  1443  1554        43        44
## 10 2011-01-10 12:00:00    14     43  1443  1553        43        43
## # ... with 227,486 more rows, and 7 more variables: carrier <chr>,
## #   flight <int>, dest <chr>, plane <chr>, cancelled <int>, time <int>,
## #   dist <int>

— .class #id

DiÄŸer Veriler

     tbl_df(weather)
## # A tibble: 8,723 x 14
##          date  hour  temp dew_point humidity pressure visibility wind_dir
##         <chr> <int> <dbl>     <dbl>    <int>    <dbl>      <dbl>    <chr>
## 1  2011-01-01     0  59.0      28.9       32    29.86         10      NNE
## 2  2011-01-01     1  57.2      28.4       33    29.88         10      NNE
## 3  2011-01-01     2  55.4      28.4       36    29.93         10      NNW
## 4  2011-01-01     3  53.6      28.4       38    29.94         10    North
## 5  2011-01-01     4    NA        NA       NA    29.99         10      NNW
## 6  2011-01-01     5    NA        NA       NA    30.02         10    North
## 7  2011-01-01     6  53.1      17.1       24    30.05         10    North
## 8  2011-01-01     7  53.1      16.0       23    30.07         10    North
## 9  2011-01-01     8  54.0      18.0       24    30.09         10    North
## 10 2011-01-01     9  55.4      17.6       23    30.09         10      NNE
## # ... with 8,713 more rows, and 6 more variables: wind_dir2 <int>,
## #   wind_speed <dbl>, gust_speed <dbl>, precip <dbl>, conditions <chr>,
## #   events <chr>

— .class #id

DiÄŸer Veriler

     tbl_df(planes)
## # A tibble: 2,853 x 9
##     plane  year               mfr          model no.eng no.seats speed
##     <chr> <int>             <chr>          <chr>  <int>    <int> <int>
## 1  N576AA  1991 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 2  N557AA  1993        MARZ BARRY      KITFOX IV      1        2    NA
## 3  N403AA  1974             RAVEN           S55A     NA        1    60
## 4  N492AA  1989 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 5  N262AA  1985 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 6  N493AA  1989 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 7  N477AA  1988 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 8  N476AA  1988 MCDONNELL DOUGLAS DC-9-82(MD-82)      2      172    NA
## 9  N504AA    NA AUTHIER ANTHONY P      TIERRA II      1        2    NA
## 10 N565AA  1987 MCDONNELL DOUGLAS DC-9-83(MD-83)      2      172    NA
## # ... with 2,843 more rows, and 2 more variables: engine <chr>, type <chr>

— .class #id

DiÄŸer Veriler

     tbl_df(airports)
## # A tibble: 3,376 x 7
##     iata              airport             city state country      lat
##    <chr>                <chr>            <chr> <chr>   <chr>    <dbl>
## 1    00M             Thigpen       Bay Springs    MS     USA 31.95376
## 2    00R Livingston Municipal       Livingston    TX     USA 30.68586
## 3    00V          Meadow Lake Colorado Springs    CO     USA 38.94575
## 4    01G         Perry-Warsaw            Perry    NY     USA 42.74135
## 5    01J     Hilliard Airpark         Hilliard    FL     USA 30.68801
## 6    01M    Tishomingo County          Belmont    MS     USA 34.49167
## 7    02A          Gragg-Wade           Clanton    AL     USA 32.85049
## 8    02C              Capitol       Brookfield    WI     USA 43.08751
## 9    02G    Columbiana County   East Liverpool    OH     USA 40.67331
## 10   03D     Memphis Memorial          Memphis    MO     USA 40.44726
## # ... with 3,366 more rows, and 1 more variables: long <dbl>

— .class #id

Row Index (Satır No)

     flights[3]
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-01-03 12:00:00   13     52 1352 1502        -8        -8      AA
##    flight dest  plane cancelled time dist
## 1:    428  DFW N541AA         0   48  224
     flights[5]
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-01-05 12:00:00   14      5 1405 1507         5        -3      AA
##    flight dest  plane cancelled time dist
## 1:    428  DFW N492AA         0   44  224

— .class #id

Head (Baş Kısım)

     head(flights)
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-01-01 12:00:00   14      0 1400 1500         0       -10      AA
## 2: 2011-01-02 12:00:00   14      1 1401 1501         1        -9      AA
## 3: 2011-01-03 12:00:00   13     52 1352 1502        -8        -8      AA
## 4: 2011-01-04 12:00:00   14      3 1403 1513         3         3      AA
## 5: 2011-01-05 12:00:00   14      5 1405 1507         5        -3      AA
## 6: 2011-01-06 12:00:00   13     59 1359 1503        -1        -7      AA
##    flight dest  plane cancelled time dist
## 1:    428  DFW N576AA         0   40  224
## 2:    428  DFW N557AA         0   45  224
## 3:    428  DFW N541AA         0   48  224
## 4:    428  DFW N403AA         0   39  224
## 5:    428  DFW N492AA         0   44  224
## 6:    428  DFW N262AA         0   45  224

— .class #id

Head (Baş Kısım) (Alt.)

     flights[1:5]
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-01-01 12:00:00   14      0 1400 1500         0       -10      AA
## 2: 2011-01-02 12:00:00   14      1 1401 1501         1        -9      AA
## 3: 2011-01-03 12:00:00   13     52 1352 1502        -8        -8      AA
## 4: 2011-01-04 12:00:00   14      3 1403 1513         3         3      AA
## 5: 2011-01-05 12:00:00   14      5 1405 1507         5        -3      AA
##    flight dest  plane cancelled time dist
## 1:    428  DFW N576AA         0   40  224
## 2:    428  DFW N557AA         0   45  224
## 3:    428  DFW N541AA         0   48  224
## 4:    428  DFW N403AA         0   39  224
## 5:    428  DFW N492AA         0   44  224

— .class #id

Range (Aralık)

     flights[30:32]
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-01-30 12:00:00   13     59 1359 1456        -1       -14      AA
## 2: 2011-01-31 12:00:00   14     41 1441 1553        41        43      AA
## 3: 2011-01-01 12:00:00    7     28  728  840         8         5      AA
##    flight dest  plane cancelled time dist
## 1:    428  DFW N561AA         0   39  224
## 2:    428  DFW N505AA         0   39  224
## 3:    460  DFW N520AA         0   41  224

— .class #id

Tail (Son Kısım)

     tail(flights)
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1: 2011-12-06 12:00:00   13      7 1307 1600         7         0      WN
## 2: 2011-12-06 12:00:00   18     18 1818 2111         8        -9      WN
## 3: 2011-12-06 12:00:00   20     47 2047 2334         7         4      WN
## 4: 2011-12-06 12:00:00    9     12  912 1031        -3        -4      WN
## 5: 2011-12-06 12:00:00    6     56  656  812        -4       -13      WN
## 6: 2011-12-06 12:00:00   16      0 1600 1713         0       -12      WN
##    flight dest  plane cancelled time dist
## 1:    471  TPA N632SW         0   98  781
## 2:   1191  TPA N284WN         0   97  781
## 3:   1674  TPA N366SW         0   94  781
## 4:    127  TUL N777QC         0   61  453
## 5:    621  TUL N727SW         0   64  453
## 6:   1597  TUL N745SW         0   59  453

— .class #id

RStudio

    setwd("/Users/mertnuhoglu/projects/dewey/r_verigazeteciligi")
    library(data.table)
    flights = fread("flights.csv")
    View(flights)

— .class #id

RStudio

RStudio CSV tablosu

— .class #id

Columns (Kolonlar)

     names(flights)
##  [1] "date"      "hour"      "minute"    "dep"       "arr"      
##  [6] "dep_delay" "arr_delay" "carrier"   "flight"    "dest"     
## [11] "plane"     "cancelled" "time"      "dist"
     str(flights)
## Classes 'data.table' and 'data.frame':   227496 obs. of  14 variables:
##  $ date     : chr  "2011-01-01 12:00:00" "2011-01-02 12:00:00" "2011-01-03 12:00:00" "2011-01-04 12:00:00" ...
##  $ hour     : int  14 14 13 14 14 13 13 13 14 14 ...
##  $ minute   : int  0 1 52 3 5 59 59 55 43 43 ...
##  $ dep      : int  1400 1401 1352 1403 1405 1359 1359 1355 1443 1443 ...
##  $ arr      : int  1500 1501 1502 1513 1507 1503 1509 1454 1554 1553 ...
##  $ dep_delay: int  0 1 -8 3 5 -1 -1 -5 43 43 ...
##  $ arr_delay: int  -10 -9 -8 3 -3 -7 -1 -16 44 43 ...
##  $ carrier  : chr  "AA" "AA" "AA" "AA" ...
##  $ flight   : int  428 428 428 428 428 428 428 428 428 428 ...
##  $ dest     : chr  "DFW" "DFW" "DFW" "DFW" ...
##  $ plane    : chr  "N576AA" "N557AA" "N541AA" "N403AA" ...
##  $ cancelled: int  0 0 0 0 0 0 0 0 0 0 ...
##  $ time     : int  40 45 48 39 44 45 43 40 41 45 ...
##  $ dist     : int  224 224 224 224 224 224 224 224 224 224 ...
##  - attr(*, ".internal.selfref")=<externalptr>

— .class #id

Satır ve Kolon

     flights[5]$flight
## [1] 428
     flights[5][['flight']]
## [1] 428

— .class #id

Filter (Sorgulama)

     filter(flights, dest == "SFO")
##                     date hour minute  dep  arr dep_delay arr_delay carrier
## 1    2011-01-31 12:00:00    8     51  851 1052         1       -27      CO
## 2    2011-01-31 12:00:00   11     29 1129 1351         4         1      CO
## 3    2011-01-31 12:00:00   14     32 1432 1656         7         5      CO
## 4    2011-01-31 12:00:00   17     48 1748 2001         3        -4      CO
## 5    2011-01-31 12:00:00   21     43 2143 2338        50        24      CO
## 6    2011-01-31 12:00:00    7     29  729 1002        -1         2      CO
## 7    2011-01-31 12:00:00   15     58 1558 1812        -2        -8      CO
##      flight dest  plane cancelled time dist
## 1       170  SFO N35407         0  225 1635
## 2       270  SFO N37420         0  228 1635
## 3       370  SFO N27213         0  229 1635
## 4       570  SFO N75436         0  236 1635
## 5       770  SFO N37281         0  224 1635
## 6       771  SFO N26226         0  237 1635
## 7      1070  SFO N73406         0  231 1635
##  [ reached getOption("max.print") -- omitted 2811 rows ]

— .class #id

Filter (Sorgulama) (Alt.)

     flights %>%
            filter(dest == "SFO") 
##                     date hour minute  dep  arr dep_delay arr_delay carrier
## 1    2011-01-31 12:00:00    8     51  851 1052         1       -27      CO
## 2    2011-01-31 12:00:00   11     29 1129 1351         4         1      CO
## 3    2011-01-31 12:00:00   14     32 1432 1656         7         5      CO
## 4    2011-01-31 12:00:00   17     48 1748 2001         3        -4      CO
## 5    2011-01-31 12:00:00   21     43 2143 2338        50        24      CO
## 6    2011-01-31 12:00:00    7     29  729 1002        -1         2      CO
## 7    2011-01-31 12:00:00   15     58 1558 1812        -2        -8      CO
##      flight dest  plane cancelled time dist
## 1       170  SFO N35407         0  225 1635
## 2       270  SFO N37420         0  228 1635
## 3       370  SFO N27213         0  229 1635
## 4       570  SFO N75436         0  236 1635
## 5       770  SFO N37281         0  224 1635
## 6       771  SFO N26226         0  237 1635
## 7      1070  SFO N73406         0  231 1635
##  [ reached getOption("max.print") -- omitted 2811 rows ]

— .class #id

Filter (Sorgulama) (Alt.)

     flights %>%
            filter(dest == "SFO") %>%
            filter(time <= 220)
##                     date hour minute  dep  arr dep_delay arr_delay carrier
## 1    2011-01-29 12:00:00   18      9 1809 2021        14        11      CO
## 2    2011-01-28 12:00:00   14     29 1429 1640         4       -11      CO
## 3    2011-01-28 12:00:00   21      0 2100 2301       129       102      CO
## 4    2011-01-28 12:00:00   16      4 1604 1830         4        10      CO
## 5    2011-01-27 12:00:00    8     57  857 1053         7       -26      CO
## 6    2011-01-27 12:00:00   11     38 1138 1335        13       -15      CO
## 7    2011-01-27 12:00:00   15      0 1500 1645        35        -6      CO
##      flight dest  plane cancelled time dist
## 1       570  SFO N73406         0  217 1635
## 2       370  SFO N12238         0  212 1635
## 3       670  SFO N39418         0  220 1635
## 4      1070  SFO N35407         0  217 1635
## 5       170  SFO N71411         0  212 1635
## 6       270  SFO N75432         0  214 1635
## 7       370  SFO N33284         0  208 1635
##  [ reached getOption("max.print") -- omitted 1246 rows ]

— .class #id

Filter (Sorgulama) (Alt.)

     flights %>%
            filter(dest == "SFO") %>%
            filter(time <= 220) %>%
            filter(date > "2011-12-23") %>%
            filter(date < "2011-12-26")
##                   date hour minute  dep  arr dep_delay arr_delay carrier
## 1  2011-12-25 12:00:00   18     40 1840 2027        65        22      CO
## 2  2011-12-25 12:00:00   12     53 1253 1442        98        53      CO
## 3  2011-12-25 12:00:00   21      4 2104 2256         4       -24      CO
## 4  2011-12-25 12:00:00   14     29 1429 1628        -1       -29      CO
## 5  2011-12-24 12:00:00   17     49 1749 1945        12       -26      CO
## 6  2011-12-24 12:00:00   16     33 1633 1834        23       -10      CO
## 7  2011-12-24 12:00:00   12      9 1209 1346        54        -3      CO
##    flight dest  plane cancelled time dist
## 1    1181  SFO N75435         0  206 1635
## 2    1669  SFO N37408         0  207 1635
## 3    1712  SFO N57864         0  213 1635
## 4    1737  SFO N35271         0  217 1635
## 5    1181  SFO N14231         0  214 1635
## 6    1240  SFO N24202         0  213 1635
## 7    1669  SFO N73406         0  201 1635
##  [ reached getOption("max.print") -- omitted 12 rows ]

— .class #id

Group By (Gruplama)

     flights %>%
            group_by(date) %>%
            summarize(
                 dep = mean(dep_delay, na.rm = T),
                 arr = mean(arr_delay, na.rm = T)
            )
## # A tibble: 365 x 3
##                   date       dep       arr
##                  <chr>     <dbl>     <dbl>
## 1  2011-01-01 12:00:00 10.708029 10.067642
## 2  2011-01-02 12:00:00 15.661169 10.509745
## 3  2011-01-03 12:00:00 13.414286  6.038627
## 4  2011-01-04 12:00:00 11.903614  7.970740
## 5  2011-01-05 12:00:00  6.325383  4.172650
## 6  2011-01-06 12:00:00  5.283333  6.069909
## 7  2011-01-07 12:00:00  5.365152  3.907295
## 8  2011-01-08 12:00:00  7.655311  3.070140
## 9  2011-01-09 12:00:00 20.748709 17.254325
## 10 2011-01-10 12:00:00 12.322061 11.040388
## # ... with 355 more rows

— .class #id

NA (Not Available) Veriler

     x = c(4, 5, 7)
     sum(x)
## [1] 16
     x = c(4, 5, 7, NA)
     sum(x)
## [1] NA
     x = c(4, 5, 7, NA)
     sum(x, na.rm = T)
## [1] 16

— .class #id

sum (toplama) (Alt: Pipe kullanarak)

     x = c(4, 5, 7)
     x %>% 
            sum()
## [1] 16
     x = c(4, 5, 7)
     x %>% 
            sum
## [1] 16
     x = c(4, 5, 7, NA)
     x %>% 
            sum(na.rm = T)
## [1] 16

— .class #id

sum (toplama) (Alt: Pipe kullanarak)

     x = c(4, 5, 7, NA)
     x %>% 
            is.na
## [1] FALSE FALSE FALSE  TRUE
     x = c(4, 5, 7, NA)
     x %>% 
            is.na(.)
## [1] FALSE FALSE FALSE  TRUE

— .class #id

Help (Yardım)

     ?is.na
     ?sum

— .class #id

Subsetting

     x = c(4, 5, 7)
     x > 5
## [1] FALSE FALSE  TRUE
     x[ c(F, F, T) ]
## [1] 7
     x[ x > 5 ]
## [1] 7

— .class #id

Subsetting ve logical operatörler

     x = c(4, 5, 7, 9, 11)
     x > 5 & x < 10
## [1] FALSE FALSE  TRUE  TRUE FALSE
     x[ c(F, F, T, T, F) ]
## [1] 7 9
     x[ x > 5 & x < 10 ]
## [1] 7 9

— .class #id

is.na ile subsetting

  • Kaç tane NA deÄŸer var?
     x = c(4, 5, 7, NA)
     is.na(x)
## [1] FALSE FALSE FALSE  TRUE
     sum( c(F, F, F, T) )
## [1] 1
     sum( is.na( x ) )
## [1] 1

— .class #id

is.na + pipes

     sum( is.na( x ) )
## [1] 1
     x %>% 
            is.na %>%
            sum
## [1] 1

— .class #id

is.na ile subsetting

  • NA'leri nasıl filtreleriz?
     library("magrittr")
     x = c(4, 5, 7, NA)
     x %>% 
            is.na(.) %>%
            not
## [1]  TRUE  TRUE  TRUE FALSE
     !is.na(x)
## [1]  TRUE  TRUE  TRUE FALSE
     not(is.na(x))
## [1]  TRUE  TRUE  TRUE FALSE

— .class #id

is.na ile subsetting

  • NA'leri nasıl filtreleriz?
     x = c(4, 5, 7, NA)
     !is.na(x)
## [1]  TRUE  TRUE  TRUE FALSE
     x[!is.na(x)]
## [1] 4 5 7
     x[c(T, T, T, F)]
## [1] 4 5 7

— .class #id

Fonksiyonları nereden bulacağız?

  • Let me google that for you
     http://lmgtfy.com/?q=r+mean+of+numbers

— .class #id

Library'lerin (kütüphane) kapsamları

Operatörlerle ilgili yardım?

  • Her ÅŸey bir fonksiyon
     ?"if"
     ?"%>%"

— .class #id

Group By (Gruplama)

     flights %>%
            group_by(date) %>%
            summarize(
                 dep = mean(dep_delay, na.rm = T),
                 arr = mean(arr_delay, na.rm = T),
                 over_15 = mean(dep_delay > 15),
                 over_15_total = sum(dep_delay > 15)
            )
## # A tibble: 365 x 5
##                   date       dep       arr   over_15 over_15_total
##                  <chr>     <dbl>     <dbl>     <dbl>         <int>
## 1  2011-01-01 12:00:00 10.708029 10.067642        NA            NA
## 2  2011-01-02 12:00:00 15.661169 10.509745        NA            NA
## 3  2011-01-03 12:00:00 13.414286  6.038627        NA            NA
## 4  2011-01-04 12:00:00 11.903614  7.970740        NA            NA
## 5  2011-01-05 12:00:00  6.325383  4.172650        NA            NA
## 6  2011-01-06 12:00:00  5.283333  6.069909 0.1257576            83
## 7  2011-01-07 12:00:00  5.365152  3.907295        NA            NA
## 8  2011-01-08 12:00:00  7.655311  3.070140        NA            NA
## 9  2011-01-09 12:00:00 20.748709 17.254325        NA            NA
## 10 2011-01-10 12:00:00 12.322061 11.040388        NA            NA
## # ... with 355 more rows

— .class #id

BoÅŸ verileri (NA) filtreleme

     flights %>%
            group_by(date) %>%
            filter(!is.na(dep_delay)) %>%
            filter(!is.na(arr_delay)) %>%
            summarize(
                 dep = mean(dep_delay),
                 arr = mean(arr_delay),
                 over_15 = mean(dep_delay > 15),
                 over_15_total = sum(dep_delay > 15)
            )
## # A tibble: 365 x 5
##                   date       dep       arr   over_15 over_15_total
##                  <chr>     <dbl>     <dbl>     <dbl>         <int>
## 1  2011-01-01 12:00:00 10.667276 10.067642 0.2431444           133
## 2  2011-01-02 12:00:00 15.661169 10.509745 0.3178411           212
## 3  2011-01-03 12:00:00 13.442060  6.038627 0.2718169           190
## 4  2011-01-04 12:00:00 11.903614  7.970740 0.2891566           168
## 5  2011-01-05 12:00:00  6.328205  4.172650 0.1521368            89
## 6  2011-01-06 12:00:00  5.293313  6.069909 0.1261398            83
## 7  2011-01-07 12:00:00  5.270517  3.907295 0.1382979            91
## 8  2011-01-08 12:00:00  7.655311  3.070140 0.2004008           100
## 9  2011-01-09 12:00:00 20.814879 17.254325 0.4498270           260
## 10 2011-01-10 12:00:00 12.337641 11.040388 0.2714055           168
## # ... with 355 more rows

— .class #id

Imposter syndrome (Kandırmaca ezikliği)

  • Kimse her ÅŸeyi tam olarak anlayamaz
  • Yetersizlik hissi her zaman burada
    • Ne kadar öğrenirsen, o kadar fazla
  • Dil bocalayarak öğrenilir
  • Biraz kap, dene, hata yap, düzelt
  • Nasıl düzelteceÄŸiz?

— .class #id

Kendi başımıza nasıl düzelteceğiz?

  • http://stackoverflow.com

  • Sorularınıza en fazla 5 dakika içinde yanıt

  • Ne kadar çok sorarsanız, o kadar çok öğrenirsiniz
  • Soruyu yazarken, yanıtı bulursunuz

— .class #id

Nasıl soru sormalı?

  • Minimalist
  • Yanlış:
    • Elimde Gapminder verisi var. Bunun içindeki GSMH verilerini filtreleyip, ortalama yaÅŸam süreleriyle birleÅŸtirmeye çalışıyorum. Ancak olmuyor. Ne yapmam lazım?
  • DoÄŸru:
    • Elimde iki veri kümesi var. Bunları birleÅŸtirmek istiyorum.
    • Örnekleri ÅŸu ÅŸekilde (3-5 satır örnek veri)
    • Bunları nasıl birleÅŸtirebilirim ve ÅŸu çıktıyı elde ederim (istenen çıktının verisi)

— .class #id

Stackoverflow'daki sorular

— .class #id

Karmaşık içiçe işlemler

— .class #id

Pipeline ile sadeleÅŸtirme

— .class #id

Problem

  • Ortalama varış gecikmesi en fazla olan uçuÅŸ destinasyonları nelerdir?

— .class #id

Problem

  • Havalimanı, sefer no ve destinasyona göre, tüm uçuÅŸları grupladığımızda, 365 adet uçuÅŸ olan kombinasyonlar hangileridir?
flights %>% 
  group_by(carrier, flight, dest) %>% 
  tally %>%
  filter(n == 365)
## Source: local data frame [7 x 4]
## Groups: carrier, flight [7]
## 
##   carrier flight  dest     n
##     <chr>  <int> <chr> <int>
## 1      AA   1294   MIA   365
## 2      AS    731   SEA   365
## 3      CO      1   HNL   365
## 4      CO     62   EWR   365
## 5      CO     89   EWR   365
## 6      CO    106   EWR   365
## 7      MQ   3859   ORD   365

— .class #id

Aynı problem alternatif çözüm

flights %>% 
  group_by(carrier, flight, dest) %>% 
  filter(n() == 365)
## Source: local data frame [2,555 x 14]
## Groups: carrier, flight, dest [7]
## 
##                   date  hour minute   dep   arr dep_delay arr_delay
##                  <chr> <int>  <int> <int> <int>     <int>     <int>
## 1  2011-01-01 12:00:00    17     56  1756  2112         1        -3
## 2  2011-01-02 12:00:00    18     23  1823  2132        28        17
## 3  2011-01-03 12:00:00    17     55  1755  2106         0        -9
## 4  2011-01-04 12:00:00    17     57  1757  2122         2         7
## 5  2011-01-05 12:00:00    17     51  1751  2100        -4       -15
## 6  2011-01-06 12:00:00    17     46  1746  2120        -9         5
## 7  2011-01-07 12:00:00    17     57  1757  2108         2        -7
## 8  2011-01-08 12:00:00    17     49  1749  2100        -6       -15
## 9  2011-01-09 12:00:00    18     10  1810  2123        15         8
## 10 2011-01-10 12:00:00    19     34  1934  2235        99        80
## # ... with 2,545 more rows, and 7 more variables: carrier <chr>,
## #   flight <int>, dest <chr>, plane <chr>, cancelled <int>, time <int>,
## #   dist <int>

— .class #id

Uçuş süresine bağlı olarak gecikmeler nasıl?

  • UçuÅŸ sürelerini hesapla. Bunlara göre tüm uçuÅŸları gruplandır. Her gruptaki ortalama gecikmeyi ve toplam uçuÅŸ sayısını göster.
per_hour <- flights %>%
  filter(cancelled == 0) %>%
  mutate(time = hour + minute / 60) %>%
  group_by(time) %>%
  summarise(arr_delay = mean(arr_delay, na.rm = TRUE), n = n())
per_hour
## # A tibble: 1,207 x 3
##          time arr_delay     n
##         <dbl>     <dbl> <int>
## 1  0.01666667  29.71429     7
## 2  0.03333333  64.00000     2
## 3  0.05000000 141.00000     4
## 4  0.06666667  91.71429     7
## 5  0.08333333 114.00000     3
## 6  0.10000000  51.00000     5
## 7  0.11666667  90.33333     6
## 8  0.13333333  91.00000     2
## 9  0.15000000 103.33333     3
## 10 0.16666667 130.66667     3
## # ... with 1,197 more rows

— .class #id

Tüm kayıtları csv olarak kaydet

install.packages("readr")
library("readr")
write_csv(per_hour, "per_hour.csv")

— .class #id

30'dan fazla uçuş yapan uçaklar hangileridir?

flights %>%
  filter(!is.na(arr_delay)) %>%
  group_by(plane) %>%
    summarise(n = n()) %>%
  filter(n > 30) 
## # A tibble: 1,376 x 2
##     plane     n
##     <chr> <int>
## 1  N0EGMQ    37
## 2  N10156   311
## 3  N10575    94
## 4  N11106   305
## 5  N11107   341
## 6  N11109   325
## 7  N11113   280
## 8  N11119   126
## 9  N11121   328
## 10 N11127   328
## # ... with 1,366 more rows

— .class #id

30'dan fazla uçuş yapan uçaklara ait uçuşlar hangileridir?

planes = flights %>%
  filter(!is.na(arr_delay)) %>%
  group_by(plane) %>%
  filter(n() > 30) 
planes
## Source: local data frame [205,944 x 14]
## Groups: plane [1,376]
## 
##                   date  hour minute   dep   arr dep_delay arr_delay
##                  <chr> <int>  <int> <int> <int>     <int>     <int>
## 1  2011-01-31 12:00:00     9     24   924  1413        -1        23
## 2  2011-01-31 12:00:00    18     25  1825  1925         0        -9
## 3  2011-01-31 12:00:00    15     54  1554  1650        -1        -5
## 4  2011-01-31 12:00:00    15     22  1522  1632        -3        -2
## 5  2011-01-31 12:00:00    15     36  1536  1635         1         7
## 6  2011-01-31 12:00:00    19     16  1916  2103         6         2
## 7  2011-01-31 12:00:00    18      3  1803  1927        28        15
## 8  2011-01-31 12:00:00    12      6  1206  1631         1        -2
## 9  2011-01-31 12:00:00    14     25  1425  1848         0        -9
## 10 2011-01-31 12:00:00     6      7   607  1022         7         2
## # ... with 205,934 more rows, and 7 more variables: carrier <chr>,
## #   flight <int>, dest <chr>, plane <chr>, cancelled <int>, time <int>,
## #   dist <int>

— .class #id

Bu uçuşların arasında 5 dk'dan daha az varış gecikmesi olanlar hangileri?

planes %>% filter(arr_delay < 5)
## Source: local data frame [128,610 x 14]
## Groups: plane [1,376]
## 
##                   date  hour minute   dep   arr dep_delay arr_delay
##                  <chr> <int>  <int> <int> <int>     <int>     <int>
## 1  2011-01-31 12:00:00    18     25  1825  1925         0        -9
## 2  2011-01-31 12:00:00    15     54  1554  1650        -1        -5
## 3  2011-01-31 12:00:00    15     22  1522  1632        -3        -2
## 4  2011-01-31 12:00:00    19     16  1916  2103         6         2
## 5  2011-01-31 12:00:00    12      6  1206  1631         1        -2
## 6  2011-01-31 12:00:00    14     25  1425  1848         0        -9
## 7  2011-01-31 12:00:00     6      7   607  1022         7         2
## 8  2011-01-31 12:00:00    10     41  1041  1449        -4       -26
## 9  2011-01-31 12:00:00     8     51   851  1052         1       -27
## 10 2011-01-31 12:00:00    19     19  1919  2231        -1       -12
## # ... with 128,600 more rows, and 7 more variables: carrier <chr>,
## #   flight <int>, dest <chr>, plane <chr>, cancelled <int>, time <int>,
## #   dist <int>

— .class #id

select (kolonları seçme)

names(airports)
## [1] "iata"    "airport" "city"    "state"   "country" "lat"     "long"
location <- airports %>% 
  select(dest = iata, name = airport, lat, long)
location
##       dest                      name      lat       long
##    1:  00M                  Thigpen  31.95376  -89.23450
##    2:  00R      Livingston Municipal 30.68586  -95.01793
##    3:  00V               Meadow Lake 38.94575 -104.56989
##    4:  01G              Perry-Warsaw 42.74135  -78.05208
##    5:  01J          Hilliard Airpark 30.68801  -81.90594
##   ---                                                   
## 3372:  ZEF           Elkin Municipal 36.28002  -80.78607
## 3373:  ZER Schuylkill Cty/Joe Zerbey 40.70645  -76.37315
## 3374:  ZPH     Zephyrhills Municipal 28.22806  -82.15592
## 3375:  ZUN                Black Rock 35.08323 -108.79178
## 3376:  ZZV      Zanesville Municipal 39.94446  -81.89211

— .class #id

Destinasyonlara göre en çok varış gecikmeli uçuşlar

flights %>%
  group_by(dest) %>%
  summarise(arr_delay = mean(arr_delay, na.rm = TRUE), n = n()) %>%
  arrange(desc(arr_delay)) 
## # A tibble: 116 x 3
##     dest arr_delay     n
##    <chr>     <dbl> <int>
## 1    ANC  26.08065   125
## 2    CID  17.80049   410
## 3    DSM  15.95110   647
## 4    SFO  14.89036  2818
## 5    BPT  14.33333     3
## 6    GRR  13.71729   677
## 7    DAY  13.67117   451
## 8    VPS  12.45718   880
## 9    ECP  12.42222   729
## 10   SAV  12.33137   863
## # ... with 106 more rows

— .class #id

Bu uçuşların destinasyonlarının lokasyon koordinatları?

delays <- flights %>%
  group_by(dest) %>%
  summarise(arr_delay = mean(arr_delay, na.rm = TRUE), n = n()) %>%
  arrange(desc(arr_delay)) %>%
  inner_join(location, by="dest")
delays
## # A tibble: 114 x 6
##     dest arr_delay     n                                name      lat
##    <chr>     <dbl> <int>                               <chr>    <dbl>
## 1    ANC  26.08065   125 Ted Stevens Anchorage International 61.17432
## 2    CID  17.80049   410                       Eastern Iowa  41.88459
## 3    DSM  15.95110   647            Des Moines International 41.53493
## 4    SFO  14.89036  2818         San Francisco International 37.61900
## 5    BPT  14.33333     3            Southeast Texas Regional 29.95083
## 6    GRR  13.71729   677           Kent County International 42.88082
## 7    DAY  13.67117   451             James M Cox Dayton Intl 39.90238
## 8    VPS  12.45718   880                Eglin Air Force Base 30.48325
## 9    SAV  12.33137   863              Savannah International 32.12758
## 10   RIC  12.30123   900              Richmond International 37.50517
## # ... with 104 more rows, and 1 more variables: long <dbl>

— .class #id

Koordinatları harita üzerinde gösterme

library("ggplot2")
ggplot(delays, aes(long, lat)) + 
  borders("state") + 
  geom_point(aes(colour = arr_delay), size = 5, alpha = 0.9) + 
  scale_colour_gradient2() +
  coord_quickmap()
## 
##  # maps v3.1: updated 'world': all lakes moved to separate new #
##  # 'lakes' database. Type '?world' or 'news(package="maps")'.  #

— .class #id

Bunların arasında erken varan uçuşlar hangileri?

delays %>% filter(arr_delay < 0)
## # A tibble: 3 x 6
##    dest   arr_delay     n              name      lat      long
##   <chr>       <dbl> <int>             <chr>    <dbl>     <dbl>
## 1   MTJ  -0.4506173   164 Montrose Regional 38.50887 -107.8938
## 2   GRK  -8.3000000    42   Robert Gray AAF 31.06490  -97.8278
## 3   BFL -13.1988072   504          Meadows  35.43360 -119.0568

— .class #id

Erken varan uçuşların haritadaki destinasyonları

early_ones = delays %>% filter(arr_delay < 0)
ggplot(early_ones, aes(long, lat)) + 
  borders("state") + 
  geom_point(aes(colour = arr_delay), size = 5, alpha = 0.9) + 
  scale_colour_gradient2() +
  coord_quickmap()

— .class #id

Seçim Verilerini Toplamak

Veri nerede?

  • Web sayfasında görünüyor

— .class #id

Sayfanın kaynak kodu

  • Chrome: Inspect element

— .class #id

Veri nerede?

  • Chrome: inspect element

— .class #id

Hangi web sayfalarını indirmeliyiz?

Url'yi indirmek

    i = 1
    url = sprintf( "http://www.memurlar.net/secim/genel/default.aspx?City=tr-%s", 1)
    filename = sprintf("data/memurlarnet/genel/%02s.html", i)
    url
## [1] "http://www.memurlar.net/secim/genel/default.aspx?City=tr-1"
    filename
## [1] "data/memurlarnet/genel/01.html"
    download.file( url, destfile = filename, method="wget" )

— .class #id

İndirilmiş dosyayı inceleyelim

  • "chartResult2011" kelimesini aratalım
  • İçerik boÅŸ

— .class #id

Veriler nerede?

  • Muhtemelen javascript ile veriler gömülüyor
  • Chrome > Inspector > Sources

— .class #id

Javascript dosyasının url'si nedir?

Tüm url'leri oluşturalım

    for (i in 1:81) {
        url = sprintf( "http://www.memurlar.net/secim/data/genel/tr-%02s.js", i)
    }
    url
## [1] "http://www.memurlar.net/secim/data/genel/tr-81.js"

— .class #id

Tüm url'leri indirelim

    for (i in 1:81) {
        url = sprintf( "http://www.memurlar.net/secim/data/genel/tr-%02s.js", i)
        filename = sprintf("data/memurlarnet/genel/raw/%02s.json", i)
        download.file( url, destfile = filename, method="wget" )
    }

— .class #id

Veriyi okuma

    library("rlist")
    filename = sprintf("data/memurlarnet/genel/raw/%02s.json", 1)
    data = list.load(filename)
## Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE): lexical error: invalid char in json text.
##                                        var secimVerisi = [ {     "ilce":
##                      (right here) ------^

— .class #id

Hatanın nedeni?

  • json dosyasının içeriÄŸi:
    var secimVerisi = [
    {
  • json sentaksıyla ilgili bir sorun
  • şöyle olmalıydı:
    { "secimVerisi" = [
    {

— .class #id

Bu tür hataların nedenini nasıl bulacağız?

  • Bu tür hataları stackoverflow'da sorup çözün
  • Bu hatayı sorsanız, en fazla 3 dakika içinde yanıt alırsınız
  • Ancak okunabilirlik açısından tüm dosya içeriÄŸini deÄŸil, küçük bir kısmını koyun
  • Ä°sterseniz, yukarıdaki hatayı sorun ve test edin.

— .class #id

Veri temizleme

  • Tüm dosyaları açın
  • Ä°lk satırı silin
  • Yerine ÅŸunu ekleyin:
{ "secim": [
  • Son satıra da ÅŸunu ekleyin:
}

— .class #id

Bu işlemler nasıl otomatikleştirilir?

  • Seçenekler:
    • R
    • sed
    • perl
    • vim
  • En kolayı: sed
sed '1 d' data/memurlarnet/genel/raw/01.json | sed '1 i\
{ "secim": [
' | sed "$ a\
}
" > data/memurlarnet/genel/clean/01.json

— .class #id

Bu scripti nasıl yazacaksınız?

  • Stackoverflow'dakilere yazdırın
    • Girdiyi ve istenen çıktıyı net ve kısa olarak yazın
    • Yapılacak iÅŸlemleri çok sade bir ÅŸekilde yazın
  • Çayınızı tazeleyin
  • Döndüğünüzde yanıt gelmemiÅŸse, hesap sorun: @mertnuhoglu

— .class #id

shell ve R

  • Terminal = komut satırı = command prompt = shell = kabuk = ?
  • R içinden shell scriptlerini çağırabiliriz
    i = 6
    filename = sprintf("data/memurlarnet/genel/raw/%02s.json", i)
    cmd = sprintf("./clean_memurlarnet_json.sh %s", filename)
    cmd
    system(cmd)

— .class #id

Tüm dosyalar için shell scripti çağrısı

clean_memurlarnet_json_files = function() {
    for (i in 1:81) {
        filename = sprintf("data/memurlarnet/genel/raw/%02s.json", i)
        cmd = sprintf("./clean_memurlarnet_json.sh %s", filename)
        system(cmd)
    }
}

— .class #id

Dosyadaki veriyi yükleme

    filename = sprintf("data/memurlarnet/genel/clean/%02s.json", 1)
    data = list.load(filename)

— .class #id

Verinin yapısı (şekli) nedir?

    str(data)
  • Aşırı uzun bir çıktı verir, çünkü hiyerarÅŸik (list türü) veri yapılarını özetlemek zordur

  • Json dosyasından inceleyebiliriz

— .class #id

2. Kademe

  • yil = 2011 olan kayıtları nasıl çekebiliriz?

— .class #id

Veriyi keÅŸfetmek (data exploration)

    data %>% str
    names(data)
## [1] "secim"
    data$secim %>% names
## NULL
    data$secim %>% length
## [1] 88
    1. seviyede 88 kayıt var:
    • Her biri bir ilçe+seçim yılı içeriyor

— .class #id

Seçim yılına göre verileri çekelim

d2011 = data$secim %>%
    list.filter("2011" %in% yil)
length(d2011)
## [1] 15
  • 2011 yılına ait 15 farklı ilçenin verisi var

— .class #id

İlçe verisi

d2011[[1]] %>% names
## [1] "ilce"       "yil"        "sandik"     "secmen"     "oykullanan"
## [6] "gecerlioy"  "partiler"
  • Bir ilçe verisindeki deÄŸiÅŸkenler (kolonlar)

— .class #id

Hangi ilçeler var?

list.select(d2011, ilce) %>% unlist
##         ilce         ilce         ilce         ilce         ilce 
##     "Seyhan"    "Yüreğir"     "Aladağ"     "Ceyhan"   "Çukurova" 
##         ilce         ilce         ilce         ilce         ilce 
##       "Feke"   "İmamoğlu"  "Karaisalı"    "Karataş"      "Kozan" 
##         ilce         ilce         ilce         ilce         ilce 
##    "Pozantı"  "Saimbeyli"    "Sarıçam" "Tufanbeyli" "Yumurtalık"
  • Türkçe karakterler bozuk çıkıyor
    • Dosyanın encoding'i ne?
      • iso-8859-9

— .class #id

Unicode'a dönüştürme

  • Unicode tüm alfabeleri destekleyen evrensel encoding
  • Nasıl dönüştürülür?
  • Sayısız seçenek var:
    • Vim
    • Shell
    • Notepad2
    • Notepad++
  • Unix shell: iconv
    iconv -f ISO-8859-9 -t UTF-8 01.json > 01u.json
    filename = sprintf("data/memurlarnet/genel/clean/%02su.json", 1)
    data = list.load(filename)
    d2011 = data$secim %>%
        list.filter("2011" %in% yil)
    d2011[[1]] %>% names
## [1] "ilce"       "yil"        "sandik"     "secmen"     "oykullanan"
## [6] "gecerlioy"  "partiler"
    list.select(d2011, ilce) %>% unlist
##         ilce         ilce         ilce         ilce         ilce 
##     "Seyhan"    "Yüreğir"     "Aladağ"     "Ceyhan"   "Çukurova" 
##         ilce         ilce         ilce         ilce         ilce 
##       "Feke"   "İmamoğlu"  "Karaisalı"    "Karataş"      "Kozan" 
##         ilce         ilce         ilce         ilce         ilce 
##    "Pozantı"  "Saimbeyli"    "Sarıçam" "Tufanbeyli" "Yumurtalık"

— .class #id

Tabloya dönüştürme

  • Tüm ilçe verilerini tek bir tabloda birleÅŸtirelim
df = d2011 %>% 
    list.select(ilce, yil, sandik, secmen, oykullanan, gecerlioy) %>%
    rbindlist
df
##           ilce  yil sandik secmen oykullanan gecerlioy
##  1:     Seyhan 2011   1670 482157     407851    397828
##  2:    Yüreğir 2011    961 269449     225279    219153
##  3:     AladaÄŸ 2011     55  11920      10602     10345
##  4:     Ceyhan 2011    422 105790      91781     89820
##  5:   Çukurova 2011    859 249574     216202    212932
##  6:       Feke 2011     69  13064      11006     10578
##  7:   Ä°mamoÄŸlu 2011     82  20518      17770     17360
##  8:  Karaisalı 2011     91  16323      14501     14176
##  9:    KarataÅŸ 2011     74  14989      13165     13026
## 10:      Kozan 2011    346  87173      74856     73144
## 11:    Pozantı 2011     65  14353      12780     12501
## 12:  Saimbeyli 2011     56  11657       9280      8992
## 13:    Sarıçam 2011    295  78749      68975     67401
## 14: Tufanbeyli 2011     68  12971      10506     10240
## 15: Yumurtalık 2011     61  13025      11447     11168

— .class #id

Tüm yıllara ait veriler için yapalım

df = data$secim %>% 
    list.select(ilce, yil, sandik, secmen, oykullanan, gecerlioy) %>%
    rbindlist
head(df)
##      ilce  yil sandik secmen oykullanan gecerlioy
## 1: Seyhan 2011   1670 482157     407851    397828
## 2: Seyhan 2007   1870 570517     440323    428998
## 3: Seyhan 2002   2043 562664     412516    396148
## 4: Seyhan 1999   2736 488810     394815    377190
## 5: Seyhan 1995   1502 436945     355731    342748
## 6: Seyhan 1991   1180 354377     275152    265319

— .class #id

Tüm şehirlere ait dosyaları toplayıp yapalım

    filenames = sprintf("data/memurlarnet/genel/clean/%02s.json", 1:81)
    head(filenames)
## [1] "data/memurlarnet/genel/clean/01.json"
## [2] "data/memurlarnet/genel/clean/02.json"
## [3] "data/memurlarnet/genel/clean/03.json"
## [4] "data/memurlarnet/genel/clean/04.json"
## [5] "data/memurlarnet/genel/clean/05.json"
## [6] "data/memurlarnet/genel/clean/06.json"
## 
  |                                                                       
  |                                                                 |   0%
  |                                                                       
  |=                                                                |   1%
  |                                                                       
  |==                                                               |   2%
  |                                                                       
  |==                                                               |   4%
  |                                                                       
  |===                                                              |   5%
  |                                                                       
  |====                                                             |   6%
  |                                                                       
  |=====                                                            |   7%
  |                                                                       
  |======                                                           |   9%
  |                                                                       
  |======                                                           |  10%
  |                                                                       
  |=======                                                          |  11%
  |                                                                       
  |========                                                         |  12%
  |                                                                       
  |=========                                                        |  14%
  |                                                                       
  |==========                                                       |  15%
  |                                                                       
  |==========                                                       |  16%
  |                                                                       
  |===========                                                      |  17%
  |                                                                       
  |============                                                     |  19%
  |                                                                       
  |=============                                                    |  20%
  |                                                                       
  |==============                                                   |  21%
  |                                                                       
  |==============                                                   |  22%
  |                                                                       
  |===============                                                  |  23%
  |                                                                       
  |================                                                 |  25%
  |                                                                       
  |=================                                                |  26%
  |                                                                       
  |==================                                               |  27%
  |                                                                       
  |==================                                               |  28%
  |                                                                       
  |===================                                              |  30%
  |                                                                       
  |====================                                             |  31%
  |                                                                       
  |=====================                                            |  32%
  |                                                                       
  |======================                                           |  33%
  |                                                                       
  |======================                                           |  35%
  |                                                                       
  |=======================                                          |  36%
  |                                                                       
  |========================                                         |  37%
  |                                                                       
  |=========================                                        |  38%
  |                                                                       
  |==========================                                       |  40%
  |                                                                       
  |==========================                                       |  41%
  |                                                                       
  |===========================                                      |  42%
  |                                                                       
  |============================                                     |  43%
  |                                                                       
  |=============================                                    |  44%
  |                                                                       
  |==============================                                   |  46%
  |                                                                       
  |==============================                                   |  47%
  |                                                                       
  |===============================                                  |  48%
  |                                                                       
  |================================                                 |  49%
  |                                                                       
  |=================================                                |  51%
  |                                                                       
  |==================================                               |  52%
  |                                                                       
  |===================================                              |  53%
  |                                                                       
  |===================================                              |  54%
  |                                                                       
  |====================================                             |  56%
  |                                                                       
  |=====================================                            |  57%
  |                                                                       
  |======================================                           |  58%
  |                                                                       
  |=======================================                          |  59%
  |                                                                       
  |=======================================                          |  60%
  |                                                                       
  |========================================                         |  62%
  |                                                                       
  |=========================================                        |  63%
  |                                                                       
  |==========================================                       |  64%
  |                                                                       
  |===========================================                      |  65%
  |                                                                       
  |===========================================                      |  67%
  |                                                                       
  |============================================                     |  68%
  |                                                                       
  |=============================================                    |  69%
  |                                                                       
  |==============================================                   |  70%
  |                                                                       
  |===============================================                  |  72%
  |                                                                       
  |===============================================                  |  73%
  |                                                                       
  |================================================                 |  74%
  |                                                                       
  |=================================================                |  75%
  |                                                                       
  |==================================================               |  77%
  |                                                                       
  |===================================================              |  78%
  |                                                                       
  |===================================================              |  79%
  |                                                                       
  |====================================================             |  80%
  |                                                                       
  |=====================================================            |  81%
  |                                                                       
  |======================================================           |  83%
  |                                                                       
  |=======================================================          |  84%
  |                                                                       
  |=======================================================          |  85%
  |                                                                       
  |========================================================         |  86%
  |                                                                       
  |=========================================================        |  88%
  |                                                                       
  |==========================================================       |  89%
  |                                                                       
  |===========================================================      |  90%
  |                                                                       
  |===========================================================      |  91%
  |                                                                       
  |============================================================     |  93%
  |                                                                       
  |=============================================================    |  94%
  |                                                                       
  |==============================================================   |  95%
  |                                                                       
  |===============================================================  |  96%
  |                                                                       
  |===============================================================  |  98%
  |                                                                       
  |================================================================ |  99%
  |                                                                       
  |=================================================================| 100%
    length(dl)
## [1] 81

— .class #id

Her bir ile ait listeyi tabloya çevirelim

  • Tek bir ile ait listeyi tabloya çevirmek nasıl?
    dl[[1]][[1]] %>% 
        list.select(ilce, yil, sandik, secmen, oykullanan, gecerlioy) %>%
        rbindlist %>%
        head
##      ilce  yil sandik secmen oykullanan gecerlioy
## 1: Seyhan 2011   1670 482157     407851    397828
## 2: Seyhan 2007   1870 570517     440323    428998
## 3: Seyhan 2002   2043 562664     412516    396148
## 4: Seyhan 1999   2736 488810     394815    377190
## 5: Seyhan 1995   1502 436945     355731    342748
## 6: Seyhan 1991   1180 354377     275152    265319

— .class #id

Tüm iller için bu işlemi uygulama

    dt = dl %>%
        lapply(
            . %>% `[[`('secim') %>%
            list.select(ilce, yil, sandik, secmen, oykullanan, gecerlioy) %>%
            rbindlist
        ) %>%
        rbindlist
    tail(dt)
##        ilce  yil sandik secmen oykullanan gecerlioy
## 1: Kaynaşlı 2011     64  14580      13244     12990
## 2: Kaynaşlı 2007     50  12992      11723     11504
## 3: Kaynaşlı 2002     58  11927      10487     10185
## 4:  Yığılca 2011     64  12202      11169     10897
## 5:  Yığılca 2007     56  13316      12061     11779
## 6:  Yığılca 2002     69  13339      11725     11325

— .class #id

Partilerin oy verilerini nasıl çekeceğiz?

  • Åžu ana deÄŸin hep tek kademeli verileri iÅŸledik
  • Parti oyları bir alt kademede saklı

— .class #id

Partilerin oy verilerini çekme

  • Önce tek bir il için yapalım
    d2011[[1]] %>% names
## [1] "ilce"       "yil"        "sandik"     "secmen"     "oykullanan"
## [6] "gecerlioy"  "partiler"
    pl = d2011 %>% 
        list.select(partiler)
    length(pl)
## [1] 15
  • Adana'nın 15 ilçesi

  • Ä°lk ilçenin parti oyları:

pl[[1]][[1]] %>% str
## List of 39
##  $ :List of 2
##   ..$ Parti: chr "AK Parti"
##   ..$ Oy   : int 130863
##  $ :List of 2
##   ..$ Parti: chr "ANAP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "ATP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "BBP"
##   ..$ Oy   : int 2421
##  $ :List of 2
##   ..$ Parti: chr "BP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "BTP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "CHP"
##   ..$ Oy   : int 137511
##  $ :List of 2
##   ..$ Parti: chr "DBP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "DEHAP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "DEPAR"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "DP"
##   ..$ Oy   : int 1907
##  $ :List of 2
##   ..$ Parti: chr "DSP"
##   ..$ Oy   : int 755
##  $ :List of 2
##   ..$ Parti: chr "DTP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "DYP"
##   ..$ Oy   : int 539
##  $ :List of 2
##   ..$ Parti: chr "EMEP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "FP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "Genç Parti"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "HADEP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "HEPAR"
##   ..$ Oy   : int 699
##  $ :List of 2
##   ..$ Parti: chr "Has Parti"
##   ..$ Oy   : int 1269
##  $ :List of 2
##   ..$ Parti: chr "HYP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "Ä°P"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "LDP"
##   ..$ Oy   : int 114
##  $ :List of 2
##   ..$ Parti: chr "MHP"
##   ..$ Oy   : int 60289
##  $ :List of 2
##   ..$ Parti: chr "MMP"
##   ..$ Oy   : int 250
##  $ :List of 2
##   ..$ Parti: chr "Millet Partisi"
##   ..$ Oy   : int 715
##  $ :List of 2
##   ..$ Parti: chr "ÖDP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "RP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "Saadet Partisi"
##   ..$ Oy   : int 4261
##  $ :List of 2
##   ..$ Parti: chr "SHP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "SÄ°P"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "SP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "TKP"
##   ..$ Oy   : int 517
##  $ :List of 2
##   ..$ Parti: chr "YDH"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "YDP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "Yeni Parti"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "YP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "YTP"
##   ..$ Oy   : int 0
##  $ :List of 2
##   ..$ Parti: chr "BÄžMZ"
##   ..$ Oy   : int 55718

— .class #id

Tek bir ilçedeki verileri tabloya çevirmek

    pt_ilce = pl[[1]][[1]] %>%
        rbindlist
    head(pt_ilce)
##       Parti     Oy
## 1: AK Parti 130863
## 2:     ANAP      0
## 3:      ATP      0
## 4:      BBP   2421
## 5:       BP      0
## 6:      BTP      0

— .class #id

Tüm ilçeler için bunu yapalım

    pt_ilceler = llply(pl, 
            . %>%
            `[[`('partiler') %>%
            rbindlist
        ) 
    length(pt_ilceler)
## [1] 15
    head(pt_ilceler[[1]])
##       Parti     Oy
## 1: AK Parti 130863
## 2:     ANAP      0
## 3:      ATP      0
## 4:      BBP   2421
## 5:       BP      0
## 6:      BTP      0
  • Bu bir list of data.table
  • Tüm list elementlerini birleÅŸtirelim

— .class #id

Tüm ilçelerin tablolarını birleştirme

  • AÅŸağıdaki sorun ne?
    pt = llply(pl, 
            . %>%
            `[[`('partiler') %>%
            rbindlist
        ) %>%
        rbindlist
    nrow(pt)
## [1] 585
    tail(pt)
##         Parti Oy
## 1:        YDH  0
## 2:        YDP  0
## 3: Yeni Parti  0
## 4:         YP  0
## 5:        YTP  0
## 6:       BÄžMZ 40

— .class #id

Sorun: hangi veri hangi ilçeye ait?

    pt_ilceler[[1]]$ilce = 'Saimbeyli'
    head(pt_ilceler[[1]])
##       Parti     Oy      ilce
## 1: AK Parti 130863 Saimbeyli
## 2:     ANAP      0 Saimbeyli
## 3:      ATP      0 Saimbeyli
## 4:      BBP   2421 Saimbeyli
## 5:       BP      0 Saimbeyli
## 6:      BTP      0 Saimbeyli
  • Bunu tüm ilçelerde yapmalıyız

— .class #id

Tüm ilçelerin listelerinin boyutlarına göre veri ekleme

    row_counts = llply(pt_ilceler, nrow)
    ilceler = d2011 %>% 
        list.select(ilce) %>%
        unlist
    rep(ilceler, row_counts) %>% str
##  Named chr [1:585] "Seyhan" "Seyhan" "Seyhan" "Seyhan" ...
##  - attr(*, "names")= chr [1:585] "ilce" "ilce" "ilce" "ilce" ...

— .class #id

İlçe ve yıl verilerini birleştirilmiş tabloya ekleme

    row_counts = llply(pt_ilceler, nrow)
    ilceler = d2011 %>% 
        list.select(ilce) %>%
        unlist
    yillar = d2011 %>% 
        list.select(yil) %>%
        unlist
    pt$ilce = rep(ilceler, row_counts)
    pt$yil = rep(yillar, row_counts)
    head(pt)
##       Parti     Oy   ilce  yil
## 1: AK Parti 130863 Seyhan 2011
## 2:     ANAP      0 Seyhan 2011
## 3:      ATP      0 Seyhan 2011
## 4:      BBP   2421 Seyhan 2011
## 5:       BP      0 Seyhan 2011
## 6:      BTP      0 Seyhan 2011

— .class #id

Linkler