Рубрики
Без рубрики

Data Science with Python & R: Data Frames II

Это продолжение учебника по изучению науки о данных с помощью Python & R. В этой части вы узнаете о выборе данных и отображении функций.

Автор оригинала: Jose A Dianes.

Мы продолжаем здесь наш учебник по фреймам данных с python и R . В первой части были представлены понятия фрейма данных и объяснено, как их создавать и индексировать в Python и R. Эта часть будет сосредоточена на выборе данных и отображении функций.

Весь исходный код для различных частей этой серии учебных пособий и приложений можно проверить на GitHub . Не стесняйтесь участвовать и делиться с нами своими успехами!

Выбор данных

В этом разделе мы покажем, как выбрать данные из фреймов данных на основе их значений, используя логические выражения.

Питон

С пандами мы можем использовать логическое выражение для выбора только тех данных, которые удовлетворяют определенным условиям. Итак, сначала давайте посмотрим, что происходит, когда мы используем логические операторы с фреймами данных или объектами рядов.

existing_df>10
год
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1990 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1991 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1992 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1993 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1994 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1995 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1996 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1997 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1998 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда
Правда Правда Правда Правда Правда Правда Правда Правда Правда 1999 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2000 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2001 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2002 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2003 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2004 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2005 Правда Правда Правда Правда Правда Правда Правда Правда Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2006 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
Правда Правда Правда Правда Правда Правда Правда Правда Правда 2007 Правда Правда Правда Правда Правда Правда Правда Ложный Правда Правда Ложный
18 строк × 207 столбцов

А если применить к отдельным сериям.

existing_df['United Kingdom'] > 10
    year
    1990    False
    1991    False
    1992    False
    1993    False
    1994    False
    1995    False
    1996    False
    1997    False
    1998    False
    1999    False
    2000    False
    2001    False
    2002    False
    2003    False
    2004    False
    2005     True
    2006     True
    2007     True
    Name: United Kingdom, dtype: bool

Результат этих выражений может быть использован в качестве вектора индексации (с [] или `.iloc’) следующим образом.

existing_df.Spain[existing_df['United Kingdom'] > 10]
    year
    2005    24
    2006    24
    2007    23
    Name: Spain, dtype: int64

Интересный случай происходит при индексации нескольких рядов, и некоторые из них имеют False в качестве индекса, а другие True в одной и той же позиции. Например:

existing_df[ existing_df > 10 ]
год
265 514 436 42 45 39 52 35 278 1990 38 365 409 96 46 114 436 42 126 55 16
261 514 456 40 44 37 49 34 268 1991 38 361 417 91 45 105 429 14 352 54 15
263 513 494 41 44 35 51 33 259 1992 37 358 415 86 44 102 422 бабушка 64 54 15
253 512 526 42 43 33 55 32 250 1993 37 354 419 82 43 118 415 18 174 52 14
250 510 556 42 43 32 60 31 242 1994 36 350 426 78 42 116 407 17 172 52 13
244 508 585 43 42 30 68 30 234 1995 35 346 439 74 42 119 397 22 93 50 12
233 512 602 42 43 28 74 28 226 1996 35 312 453 71 41 111 397 бабушка 123 49 12
207 363 626 44 44 23 75 27 218 1997 36 273 481 67 41 122 387 25 213 46 11
194 414 634 43 45 24 74 28 211 1998 36 261 392 63 40 129 374 12 107 44 11
175 384 657 42 46 22 86 28 159 1999 36 253 430 58 39 134 373 бабушка 105 42 бабушка
164 530 658 40 48 20 94 27 143 2000 35 248 479 52 39 139 346 бабушка 103 40 бабушка
154 335 680 34 49 20 99 25 128 2001 35 243 523 51 41 148 326 бабушка 13 39 бабушка
149 307 517 32 50 21 97 27 149 2002 35 235 571 42 41 144 304 бабушка 275 37 бабушка
146 281 478 32 51 18 91 25 128 2003 35 234 632 41 39 152 308 бабушка 147 36 бабушка
138 318 468 29 52 19 85 23 118 2004 35 226 652 39 38 149 283 бабушка 63 35 бабушка
137 331 453 29 53 18 79 24 131 2005 34 227 680 39 38 144 267 11 57 33 бабушка
135 302 422 26 55 17 79 25 104 2006 34 222 699 37 38 134 251 бабушка 60 32 бабушка
130 294 387 22 56 19 81 23 102 2007 34 220 714 35 39 140 238 бабушка 25 31 бабушка
18 строк × 207 столбцов

Те ячейки, где existing_df не имеет более 10 случаев на 100K, дают False для индексации. Результирующий фрейм данных имеет значение NaN для этих ячеек. Способ решения этой проблемы (если нам нужно) заключается в использовании метода where () , который, помимо обеспечения более выразительного способа чтения выборки данных, принимает второй аргумент, который мы можем использовать для вменения значений NaN . Например, если мы хотим иметь 0 в качестве значения.

existing_df.where(existing_df > 10, 0)
год
265 514 436 42 45 39 52 35 278 1990 38 365 409 96 46 114 436 42 126 55 16
261 514 456 40 44 37 49 34 268 1991 38 361 417 91 45 105 429 14 352 54 15
263 513 494 41 44 35 51 33 259 1992 37 358 415 86 44 102 422 0 64 54 15
253 512 526 42 43 33 55 32 250 1993 37 354 419 82 43 118 415 18 174 52 14
250 510 556 42 43 32 60 31 242 1994 36 350 426 78 42 116 407 17 172 52 13
244 508 585 43 42 30 68 30 234 1995 35 346 439 74 42 119 397 22 93 50 12
233 512 602 42 43 28 74 28 226 1996 35 312 453 71 41 111 397 0 123 49 12
207 363 626 44 44 23 75 27 218 1997 36 273 481 67 41 122 387 25 213 46 11
194 414 634 43 45 24 74 28 211 1998 36 261 392 63 40 129 374 12 107 44 11
175 384 657 42 46 22 86 28 159 1999 36 253 430 58 39 134 373 0 105 42 0
164 530 658 40 48 20 94 27 143 2000 35 248 479 52 39 139 346 0 103 40 0
154 335 680 34 49 20 99 25 128 2001 35 243 523 51 41 148 326 0 13 39 0
149 307 517 32 50 21 97 27 149 2002 35 235 571 42 41 144 304 0 275 37 0
146 281 478 32 51 18 91 25 128 2003 35 234 632 41 39 152 308 0 147 36 0
138 318 468 29 52 19 85 23 118 2004 35 226 652 39 38 149 283 0 63 35 0
137 331 453 29 53 18 79 24 131 2005 34 227 680 39 38 144 267 11 57 33 0
135 302 422 26 55 17 79 25 104 2006 34 222 699 37 38 134 251 0 60 32 0
130 294 387 22 56 19 81 23 102 2007 34 220 714 35 39 140 238 0 25 31 0
18 строк × 207 столбцов

R

Как и в случае с Пандами, давайте проверим результат использования data.frame в логическом или логическом выражении.

existing_df_gt10 <- existing_df>10
head(existing_df_gt10,2) # check just a couple of rows
##       Afghanistan Albania Algeria American Samoa Andorra Angola Anguilla
## X1990        TRUE    TRUE    TRUE           TRUE    TRUE   TRUE     TRUE
## X1991        TRUE    TRUE    TRUE           TRUE    TRUE   TRUE     TRUE
##       Antigua and Barbuda Argentina Armenia Australia Austria Azerbaijan
## X1990                TRUE      TRUE    TRUE     FALSE    TRUE       TRUE
## X1991                TRUE      TRUE    TRUE     FALSE    TRUE       TRUE
##       Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin
## X1990    TRUE    TRUE       TRUE    FALSE    TRUE    TRUE   TRUE  TRUE
## X1991    TRUE    TRUE       TRUE    FALSE    TRUE    TRUE   TRUE  TRUE
##       Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Brazil
## X1990   FALSE   TRUE    TRUE                   TRUE     TRUE   TRUE
## X1991   FALSE   TRUE    TRUE                   TRUE     TRUE   TRUE
##       British Virgin Islands Brunei Darussalam Bulgaria Burkina Faso
## X1990                   TRUE              TRUE     TRUE         TRUE
## X1991                   TRUE              TRUE     TRUE         TRUE
##       Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands
## X1990    TRUE     TRUE     TRUE  FALSE       TRUE          FALSE
## X1991    TRUE     TRUE     TRUE  FALSE       TRUE          FALSE
##       Central African Republic Chad Chile China Colombia Comoros
## X1990                     TRUE TRUE  TRUE  TRUE     TRUE    TRUE
## X1991                     TRUE TRUE  TRUE  TRUE     TRUE    TRUE
##       Congo, Rep. Cook Islands Costa Rica Croatia Cuba Cyprus
## X1990        TRUE        FALSE       TRUE    TRUE TRUE   TRUE
## X1991        TRUE        FALSE       TRUE    TRUE TRUE   TRUE
##       Czech Republic Cote d'Ivoire Korea, Dem. Rep. Congo, Dem. Rep.
## X1990           TRUE          TRUE             TRUE             TRUE
## X1991           TRUE          TRUE             TRUE             TRUE
##       Denmark Djibouti Dominica Dominican Republic Ecuador Egypt
## X1990    TRUE     TRUE     TRUE               TRUE    TRUE  TRUE
## X1991    TRUE     TRUE     TRUE               TRUE    TRUE  TRUE
##       El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Fiji Finland
## X1990        TRUE              TRUE    TRUE    TRUE     TRUE TRUE    TRUE
## X1991        TRUE              TRUE    TRUE    TRUE     TRUE TRUE    TRUE
##       France French Polynesia Gabon Gambia Georgia Germany Ghana Greece
## X1990   TRUE             TRUE  TRUE   TRUE    TRUE    TRUE  TRUE   TRUE
## X1991   TRUE             TRUE  TRUE   TRUE    TRUE    TRUE  TRUE   TRUE
##       Grenada Guam Guatemala Guinea Guinea-Bissau Guyana Haiti Honduras
## X1990   FALSE TRUE      TRUE   TRUE          TRUE   TRUE  TRUE     TRUE
## X1991   FALSE TRUE      TRUE   TRUE          TRUE   TRUE  TRUE     TRUE
##       Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy
## X1990    TRUE   FALSE  TRUE      TRUE TRUE TRUE    TRUE   TRUE  TRUE
## X1991    TRUE   FALSE  TRUE      TRUE TRUE TRUE    TRUE  FALSE FALSE
##       Jamaica Japan Jordan Kazakhstan Kenya Kiribati Kuwait Kyrgyzstan
## X1990   FALSE  TRUE   TRUE       TRUE  TRUE     TRUE   TRUE       TRUE
## X1991   FALSE  TRUE   TRUE       TRUE  TRUE     TRUE   TRUE       TRUE
##       Laos Latvia Lebanon Lesotho Liberia Libyan Arab Jamahiriya Lithuania
## X1990 TRUE   TRUE    TRUE    TRUE    TRUE                   TRUE      TRUE
## X1991 TRUE   TRUE    TRUE    TRUE    TRUE                   TRUE      TRUE
##       Luxembourg Madagascar Malawi Malaysia Maldives Mali Malta Mauritania
## X1990       TRUE       TRUE   TRUE     TRUE     TRUE TRUE FALSE       TRUE
## X1991       TRUE       TRUE   TRUE     TRUE     TRUE TRUE FALSE       TRUE
##       Mauritius Mexico Micronesia, Fed. Sts. Monaco Mongolia Montserrat
## X1990      TRUE   TRUE                  TRUE  FALSE     TRUE       TRUE
## X1991      TRUE   TRUE                  TRUE  FALSE     TRUE       TRUE
##       Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands
## X1990    TRUE       TRUE    TRUE    TRUE  TRUE  TRUE        TRUE
## X1991    TRUE       TRUE    TRUE    TRUE  TRUE  TRUE       FALSE
##       Netherlands Antilles New Caledonia New Zealand Nicaragua Niger
## X1990                 TRUE          TRUE       FALSE      TRUE  TRUE
## X1991                 TRUE          TRUE       FALSE      TRUE  TRUE
##       Nigeria Niue Northern Mariana Islands Norway Oman Pakistan Palau
## X1990    TRUE TRUE                     TRUE  FALSE TRUE     TRUE  TRUE
## X1991    TRUE TRUE                     TRUE  FALSE TRUE     TRUE  TRUE
##       Panama Papua New Guinea Paraguay Peru Philippines Poland Portugal
## X1990   TRUE             TRUE     TRUE TRUE        TRUE   TRUE     TRUE
## X1991   TRUE             TRUE     TRUE TRUE        TRUE   TRUE     TRUE
##       Puerto Rico Qatar Korea, Rep. Moldova Romania Russian Federation
## X1990        TRUE  TRUE        TRUE    TRUE    TRUE               TRUE
## X1991        TRUE  TRUE        TRUE    TRUE    TRUE               TRUE
##       Rwanda Saint Kitts and Nevis Saint Lucia
## X1990   TRUE                  TRUE        TRUE
## X1991   TRUE                  TRUE        TRUE
##       Saint Vincent and the Grenadines Samoa San Marino
## X1990                             TRUE  TRUE      FALSE
## X1991                             TRUE  TRUE      FALSE
##       Sao Tome and Principe Saudi Arabia Senegal Seychelles Sierra Leone
## X1990                  TRUE         TRUE    TRUE       TRUE         TRUE
## X1991                  TRUE         TRUE    TRUE       TRUE         TRUE
##       Singapore Slovakia Slovenia Solomon Islands Somalia South Africa
## X1990      TRUE     TRUE     TRUE            TRUE    TRUE         TRUE
## X1991      TRUE     TRUE     TRUE            TRUE    TRUE         TRUE
##       Spain Sri Lanka Sudan Suriname Swaziland Sweden Switzerland
## X1990  TRUE      TRUE  TRUE     TRUE      TRUE  FALSE        TRUE
## X1991  TRUE      TRUE  TRUE     TRUE      TRUE  FALSE        TRUE
##       Syrian Arab Republic Tajikistan Thailand Macedonia, FYR Timor-Leste
## X1990                 TRUE       TRUE     TRUE           TRUE        TRUE
## X1991                 TRUE       TRUE     TRUE           TRUE        TRUE
##       Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan
## X1990 TRUE    TRUE  TRUE                TRUE    TRUE   TRUE         TRUE
## X1991 TRUE    TRUE  TRUE                TRUE    TRUE   TRUE         TRUE
##       Turks and Caicos Islands Tuvalu Uganda Ukraine United Arab Emirates
## X1990                     TRUE   TRUE   TRUE    TRUE                 TRUE
## X1991                     TRUE   TRUE   TRUE    TRUE                 TRUE
##       United Kingdom Tanzania Virgin Islands (U.S.)
## X1990          FALSE     TRUE                  TRUE
## X1991          FALSE     TRUE                  TRUE
##       United States of America Uruguay Uzbekistan Vanuatu Venezuela
## X1990                    FALSE    TRUE       TRUE    TRUE      TRUE
## X1991                    FALSE    TRUE       TRUE    TRUE      TRUE
##       Viet Nam Wallis et Futuna West Bank and Gaza Yemen Zambia Zimbabwe
## X1990     TRUE             TRUE               TRUE  TRUE   TRUE     TRUE
## X1991     TRUE             TRUE               TRUE  TRUE   TRUE     TRUE

В этом случае мы получаем переменную matrix с булевыми значениями. При применении к отдельным столбцам.

existing_df['United Kingdom'] > 10
##       United Kingdom
## X1990          FALSE
## X1991          FALSE
## X1992          FALSE
## X1993          FALSE
## X1994          FALSE
## X1995          FALSE
## X1996          FALSE
## X1997          FALSE
## X1998          FALSE
## X1999          FALSE
## X2000          FALSE
## X2001          FALSE
## X2002          FALSE
## X2003          FALSE
## X2004          FALSE
## X2005           TRUE
## X2006           TRUE
## X2007           TRUE

Результат (и синтаксис) эквивалентен результату Pandas и может быть использован для индексации следующим образом.

existing_df$Spain[existing_df['United Kingdom'] > 10]
## [1] 24 24 23

Как и в Python/Pandas, давайте использовать всю булеву матрицу, которую мы получили раньше.

head(existing_df[ existing_df_gt10 ]) # check first few elements
## [1] 436 429 422 415 407 397

Но эй, результаты сильно отличаются от того, что мы ожидали бы получить от использования панд. Мы получили длинный вектор значений, а не фрейм данных. Проблема заключается в том, что оператор [ ] при передаче матрицы сначала приводит фрейм данных к матрице . В принципе, мы не можем легко работать с R data.frames и булевыми матрицами , как мы это делали с Пандами. Вместо этого мы должны индексировать оба измерения, столбцы и строки, отдельно.

Но все же мы можем использовать матричную индексацию с фреймом данных для замены элементов.

existing_df_2 <- existing_df
existing_df_2[ existing_df_gt10 ] <- -1
head(existing_df_2,2) # check just a couple of rows
##       Afghanistan Albania Algeria American Samoa Andorra Angola Anguilla
## X1990          -1      -1      -1             -1      -1     -1       -1
## X1991          -1      -1      -1             -1      -1     -1       -1
##       Antigua and Barbuda Argentina Armenia Australia Austria Azerbaijan
## X1990                  -1        -1      -1         7      -1         -1
## X1991                  -1        -1      -1         7      -1         -1
##       Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin
## X1990      -1      -1         -1        8      -1      -1     -1    -1
## X1991      -1      -1         -1        8      -1      -1     -1    -1
##       Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Brazil
## X1990      10     -1      -1                     -1       -1     -1
## X1991      10     -1      -1                     -1       -1     -1
##       British Virgin Islands Brunei Darussalam Bulgaria Burkina Faso
## X1990                     -1                -1       -1           -1
## X1991                     -1                -1       -1           -1
##       Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands
## X1990      -1       -1       -1      7         -1             10
## X1991      -1       -1       -1      7         -1             10
##       Central African Republic Chad Chile China Colombia Comoros
## X1990                       -1   -1    -1    -1       -1      -1
## X1991                       -1   -1    -1    -1       -1      -1
##       Congo, Rep. Cook Islands Costa Rica Croatia Cuba Cyprus
## X1990          -1            0         -1      -1   -1     -1
## X1991          -1           10         -1      -1   -1     -1
##       Czech Republic Cote d'Ivoire Korea, Dem. Rep. Congo, Dem. Rep.
## X1990             -1            -1               -1               -1
## X1991             -1            -1               -1               -1
##       Denmark Djibouti Dominica Dominican Republic Ecuador Egypt
## X1990      -1       -1       -1                 -1      -1    -1
## X1991      -1       -1       -1                 -1      -1    -1
##       El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Fiji Finland
## X1990          -1                -1      -1      -1       -1   -1      -1
## X1991          -1                -1      -1      -1       -1   -1      -1
##       France French Polynesia Gabon Gambia Georgia Germany Ghana Greece
## X1990     -1               -1    -1     -1      -1      -1    -1     -1
## X1991     -1               -1    -1     -1      -1      -1    -1     -1
##       Grenada Guam Guatemala Guinea Guinea-Bissau Guyana Haiti Honduras
## X1990       7   -1        -1     -1            -1     -1    -1       -1
## X1991       7   -1        -1     -1            -1     -1    -1       -1
##       Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy
## X1990      -1       5    -1        -1   -1   -1      -1     -1    -1
## X1991      -1       4    -1        -1   -1   -1      -1     10    10
##       Jamaica Japan Jordan Kazakhstan Kenya Kiribati Kuwait Kyrgyzstan
## X1990      10    -1     -1         -1    -1       -1     -1         -1
## X1991      10    -1     -1         -1    -1       -1     -1         -1
##       Laos Latvia Lebanon Lesotho Liberia Libyan Arab Jamahiriya Lithuania
## X1990   -1     -1      -1      -1      -1                     -1        -1
## X1991   -1     -1      -1      -1      -1                     -1        -1
##       Luxembourg Madagascar Malawi Malaysia Maldives Mali Malta Mauritania
## X1990         -1         -1     -1       -1       -1   -1    10         -1
## X1991         -1         -1     -1       -1       -1   -1     9         -1
##       Mauritius Mexico Micronesia, Fed. Sts. Monaco Mongolia Montserrat
## X1990        -1     -1                    -1      3       -1         -1
## X1991        -1     -1                    -1      3       -1         -1
##       Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands
## X1990      -1         -1      -1      -1    -1    -1          -1
## X1991      -1         -1      -1      -1    -1    -1          10
##       Netherlands Antilles New Caledonia New Zealand Nicaragua Niger
## X1990                   -1            -1          10        -1    -1
## X1991                   -1            -1          10        -1    -1
##       Nigeria Niue Northern Mariana Islands Norway Oman Pakistan Palau
## X1990      -1   -1                       -1      8   -1       -1    -1
## X1991      -1   -1                       -1      8   -1       -1    -1
##       Panama Papua New Guinea Paraguay Peru Philippines Poland Portugal
## X1990     -1               -1       -1   -1          -1     -1       -1
## X1991     -1               -1       -1   -1          -1     -1       -1
##       Puerto Rico Qatar Korea, Rep. Moldova Romania Russian Federation
## X1990          -1    -1          -1      -1      -1                 -1
## X1991          -1    -1          -1      -1      -1                 -1
##       Rwanda Saint Kitts and Nevis Saint Lucia
## X1990     -1                    -1          -1
## X1991     -1                    -1          -1
##       Saint Vincent and the Grenadines Samoa San Marino
## X1990                               -1    -1          9
## X1991                               -1    -1          9
##       Sao Tome and Principe Saudi Arabia Senegal Seychelles Sierra Leone
## X1990                    -1           -1      -1         -1           -1
## X1991                    -1           -1      -1         -1           -1
##       Singapore Slovakia Slovenia Solomon Islands Somalia South Africa
## X1990        -1       -1       -1              -1      -1           -1
## X1991        -1       -1       -1              -1      -1           -1
##       Spain Sri Lanka Sudan Suriname Swaziland Sweden Switzerland
## X1990    -1        -1    -1       -1        -1      5          -1
## X1991    -1        -1    -1       -1        -1      5          -1
##       Syrian Arab Republic Tajikistan Thailand Macedonia, FYR Timor-Leste
## X1990                   -1         -1       -1             -1          -1
## X1991                   -1         -1       -1             -1          -1
##       Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan
## X1990   -1      -1    -1                  -1      -1     -1           -1
## X1991   -1      -1    -1                  -1      -1     -1           -1
##       Turks and Caicos Islands Tuvalu Uganda Ukraine United Arab Emirates
## X1990                       -1     -1     -1      -1                   -1
## X1991                       -1     -1     -1      -1                   -1
##       United Kingdom Tanzania Virgin Islands (U.S.)
## X1990              9       -1                    -1
## X1991              9       -1                    -1
##       United States of America Uruguay Uzbekistan Vanuatu Venezuela
## X1990                        7      -1         -1      -1        -1
## X1991                        7      -1         -1      -1        -1
##       Viet Nam Wallis et Futuna West Bank and Gaza Yemen Zambia Zimbabwe
## X1990       -1               -1                 -1    -1     -1       -1
## X1991       -1               -1                 -1    -1     -1       -1

Мы можем видеть, сколько элементов, тех, где у нас было более 10 случаев, где присвоено значение -1.

Наиболее выразительным способом выбора формы a data.frame в R является использование функции subset (введите ?subset в консоли R, чтобы прочитать об этой функции). Функция применяется по строке во фрейме данных. Второй аргумент может включать любое условие, использующее имена столбцов. Третий аргумент может включать список столбцов. Результирующий фрейм данных будет содержать те строки , которые удовлетворяют условиям второго аргумента, включая только те столбцы, которые перечислены в третьем аргументе (все они по умолчанию). Например, если мы хотим выбрать те годы, когда в Соединенном Королевстве было более 10 случаев, и перечислить полученные строки для трех стран (Великобритания, Испания и Колумбия), мы будем использовать:

# If a column name contains blanks, we can have to use ` `
subset(existing_df,  `United Kingdom`>10, c('United Kingdom', 'Spain','Colombia'))
##       United Kingdom Spain Colombia
## X2005             11    24       53
## X2006             11    24       44
## X2007             12    23       43

Мы можем сделать то же самое, используя [ ] следующим образом.

existing_df[existing_df["United Kingdom"]>10, c('United Kingdom', 'Spain','Colombia')]
##       United Kingdom Spain Colombia
## X2005             11    24       53
## X2006             11    24       44
## X2007             12    23       43

Отображение функций и группировка данных

Питон

Панды.Класс DataFrame определяет несколько способов применения функций как индексных, так и элементных. Некоторые из них уже предопределены и являются частью методов описательной статистики, о которых мы будем говорить при проведении исследовательского анализа данных.

existing_df.sum()
    country
    Afghanistan            6360
    Albania                 665
    Algeria                 853
    American Samoa          221
    Andorra                 455
    Angola                 7442
    Anguilla                641
    Antigua and Barbuda     195
    Argentina              1102
    Armenia                1349
    Australia               116
    Austria                 228
    Azerbaijan             1541
    Bahamas                 920
    Bahrain                1375
    ...
    United Arab Emirates         577
    United Kingdom               173
    Tanzania                    5713
    Virgin Islands (U.S.)        367
    United States of America      88
    Uruguay                      505
    Uzbekistan                  2320
    Vanuatu                     3348
    Venezuela                    736
    Viet Nam                    5088
    Wallis et Futuna            2272
    West Bank and Gaza           781
    Yemen                       3498
    Zambia                      9635
    Zimbabwe                    9231
    Length: 207, dtype: int64

Мы только что подсчитали общее число случаев туберкулеза с 1990 по 2007 год для каждой страны. Мы можем сделать то же самое по годам, если передадим axis=1 для использования columns вместо index в качестве оси.

existing_df.sum(axis=1)
    year
    1990    40772
    1991    40669
    1992    39912
    1993    39573
    1994    39066
    1995    38904
    1996    37032
    1997    37462
    1998    36871
    1999    37358
    2000    36747
    2001    36804
    2002    37160
    2003    36516
    2004    36002
    2005    35435
    2006    34987
    2007    34622
    dtype: int64

Похоже, что существующее число случаев туберкулеза на 100 тысяч человек по всему миру сокращается.

Pandas также предоставляет методы для применения других функций к фреймам данных. Их три: apply , apply map и group by .

применить и применить карту

Используя apply () , мы можем применить функцию вдоль входной оси фрейма данных . Объекты, передаваемые применяемым нами функциям, являются объектами Series , имеющими в качестве индекса либо index фрейма данных, либо columns ). Тип возвращаемого значения зависит от того, агрегируется ли переданная функция или аргумент reduce, если фрейм данных пуст. Например, если мы хотим получить количество существующих случаев на миллион (вместо 100 тысяч), мы можем использовать следующее.

from __future__ import division # we need this to have float division without using a cast
existing_df.apply(lambda x: x/10)
год
26.5 51.4 43.6 4.2 4.5 3.9 5.2 3.5 27.8 1990 3.8 36.5 40.9 9.6 4.6 11.4 43.6 4.2 12.6 5.5 1.6
26.1 51.4 45.6 4.0 4.4 3.7 4.9 3.4 26.8 1991 3.8 36.1 41.7 9.1 4.5 10.5 42.9 1.4 35.2 5.4 1.5
26.3 51.3 49.4 4.1 4.4 3.5 5.1 3.3 25.9 1992 3.7 35.8 41.5 8.6 4.4 10.2 42.2 0.4 6.4 5.4 1.5
25.3 51.2 52.6 4.2 4.3 3.3 5.5 3.2 25.0 1993 3.7 35.4 41.9 8.2 4.3 11.8 41.5 1.8 17.4 5.2 1.4
25.0 51.0 55.6 4.2 4.3 3.2 6.0 3.1 24.2 1994 3.6 35.0 42.6 7.8 4.2 11.6 40.7 1.7 17.2 5.2 1.3
24.4 50.8 58.5 4.3 4.2 3.0 6.8 3.0 23.4 1995 3.5 34.6 43.9 7.4 4.2 11.9 39.7 2.2 9.3 5.0 1.2
23.3 51.2 60.2 4.2 4.3 2.8 7.4 2.8 22.6 1996 3.5 31.2 45.3 7.1 4.1 11.1 39.7 0.0 12.3 4.9 1.2
20.7 36.3 62.6 4.4 4.4 2.3 7.5 2.7 21.8 1997 3.6 27.3 48.1 6.7 4.1 12.2 38.7 2.5 21.3 4.6 1.1
19.4 41.4 63.4 4.3 4.5 2.4 7.4 2.8 21.1 1998 3.6 26.1 39.2 6.3 4.0 12.9 37.4 1.2 10.7 4.4 1.1
17.5 38.4 65.7 4.2 4.6 2.2 8.6 2.8 15.9 1999 3.6 25.3 43.0 5.8 3.9 13.4 37.3 0.8 10.5 4.2 0.9
16.4 53.0 65.8 4.0 4.8 2.0 9.4 2.7 14.3 2000 3.5 24.8 47.9 5.2 3.9 13.9 34.6 0.8 10.3 4.0 0.8
15.4 33.5 68.0 3.4 4.9 2.0 9.9 2.5 12.8 2001 3.5 24.3 52.3 5.1 4.1 14.8 32.6 0.6 1.3 3.9 0.9
14.9 30.7 51.7 3.2 5.0 2.1 9.7 2.7 14.9 2002 3.5 23.5 57.1 4.2 4.1 14.4 30.4 0.5 27.5 3.7 0.7
14.6 28.1 47.8 3.2 5.1 1.8 9.1 2.5 12.8 2003 3.5 23.4 63.2 4.1 3.9 15.2 30.8 0.6 14.7 3.6 0.9
13.8 31.8 46.8 2.9 5.2 1.9 8.5 2.3 11.8 2004 3.5 22.6 65.2 3.9 3.8 14.9 28.3 0.9 6.3 3.5 0.8
13.7 33.1 45.3 2.9 5.3 1.8 7.9 2.4 13.1 2005 3.4 22.7 68.0 3.9 3.8 14.4 26.7 1.1 5.7 3.3 0.8
13.5 30.2 42.2 2.6 5.5 1.7 7.9 2.5 10.4 2006 3.4 22.2 69.9 3.7 3.8 13.4 25.1 0.9 6.0 3.2 0.9
13.0 29.4 38.7 2.2 5.6 1.9 8.1 2.3 10.2 2007 3.4 22.0 71.4 3.5 3.9 14.0 23.8 0.5 2.5 3.1 0.9
18 строк × 207 столбцов

Мы видели, как apply работает элементарно. Если функция, которую мы передаем, применима к отдельным элементам (например, деление), панды передадут это каждому отдельному элементу, и мы снова получим серию с функцией, примененной к каждому элементу, и, следовательно, фрейм данных в нашем случае. Однако функция, предназначенная для использования для поэлементных карт, называется applymap .

groupby

Группировка-это мощная и важная операция фрейма данных в исследовательском анализе данных. В Панд мы можем сделать это легко. Например, представьте, что нам нужно среднее число существующих случаев в год в два разных периода, до и после 2000 года. Мы можем сделать следующее.

mean_cases_by_period = existing_df.groupby(lambda x: int(x)>1999).mean()
mean_cases_by_period.index = ['1990-1999', '2000-2007']
mean_cases_by_period
234.500 474.40 557.200 42.1 43.90 30.3 64.400 30.600 234.500 1990-1999 36.400 323.300 428.10 76.6 42.300 117.00 403.700 16.200 152.900 49.800 12.800
144.125 337.25 507.875 30.5 51.75 19.0 88.125 24.875 125.375 2000-2007 34.625 231.875 618.75 42.0 39.125 143.75 290.375 7.375 92.875 35.375 8.375
2 строки × 207 столбцов

Метод groupby принимает различные типы группировки, включая переданную нами функцию отображения, словарь, серию или кортеж/список имен столбцов. Например, функция отображения будет вызываться для каждого элемента объекта .index (строка года в нашем случае) для определения групп. Если передается dict или Series , то значения Series или dict используются для определения групп (например, мы можем передать столбец, содержащий категориальные значения).

Мы можем индексировать результирующий фрейм данных, как обычно.

 mean_cases_by_period[['United Kingdom', 'Spain', 'Colombia']]
35.300 1990-1999 75.10 9.200
24.875 2000-2007 53.25 10.125

R

лапли

R имеет длинную коллекцию функций apply , которые можно использовать для применения функций к элементам в векторах, матрицах, списках и фреймах данных. Тот, который мы представим здесь , – это apply (введите ?apply в вашей консоли R). Это тот, который мы используем со списками, и, поскольку фрейм данных-это список векторов столбцов, он будет работать и с ними.

Например, мы можем повторить сумму по годам, которую мы сделали с Пандами, следующим образом.

existing_df_sum_years <- lapply(existing_df, function(x) { sum(x) })
existing_df_sum_years <- as.data.frame(existing_df_sum_years)
existing_df_sum_years
##   Afghanistan Albania Algeria American.Samoa Andorra Angola Anguilla
## 1        6360     665     853            221     455   7442      641
##   Antigua.and.Barbuda Argentina Armenia Australia Austria Azerbaijan
## 1                 195      1102    1349       116     228       1541
##   Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda
## 1     920    1375       9278       95    1446     229    864  2384     133
##   Bhutan Bolivia Bosnia.and.Herzegovina Botswana Brazil
## 1  10579    4806                   1817     8067   1585
##   British.Virgin.Islands Brunei.Darussalam Bulgaria Burkina.Faso Burundi
## 1                    383              1492      960         5583    8097
##   Cambodia Cameroon Canada Cape.Verde Cayman.Islands
## 1    14015     3787     92       6712            129
##   Central.African.Republic Chad Chile China Colombia Comoros Congo..Rep.
## 1                     7557 7316   452  4854     1177    2310        6755
##   Cook.Islands Costa.Rica Croatia Cuba Cyprus Czech.Republic Cote.d.Ivoire
## 1          357        349    1637  295    163            304          7900
##   Korea..Dem..Rep. Congo..Dem..Rep. Denmark Djibouti Dominica
## 1            12359             9343     151    19155      375
##   Dominican.Republic Ecuador Egypt El.Salvador Equatorial.Guinea Eritrea
## 1               2252    3676   700        1483              5303    3181
##   Estonia Ethiopia Fiji Finland France French.Polynesia Gabon Gambia
## 1    1214     8432  811     153    263              974  5949   6700
##   Georgia Germany Ghana Greece Grenada Guam Guatemala Guinea Guinea.Bissau
## 1    1406     180  7368    380     125 1340      1716   5853          6207
##   Guyana Haiti Honduras Hungary Iceland India Indonesia Iran Iraq Ireland
## 1   1621  7428     1756     930      58  8107      6131  789 1433     233
##   Israel Italy Jamaica Japan Jordan Kazakhstan Kenya Kiribati Kuwait
## 1    138   139     142   822    236       2249  5117    12652    928
##   Kyrgyzstan Laos Latvia Lebanon Lesotho Liberia Libyan.Arab.Jamahiriya
## 1       2354 6460   1351     783    6059    7707                    559
##   Lithuania Luxembourg Madagascar Malawi Malaysia Maldives  Mali Malta
## 1      1579        233       6691   6290     2615     1638 10611   120
##   Mauritania Mauritius Mexico Micronesia..Fed..Sts. Monaco Mongolia
## 1      10698       817    978                  3570     44     6127
##   Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands
## 1        227    1873       7992    5061    9990  2860  7398         138
##   Netherlands.Antilles New.Caledonia New.Zealand Nicaragua Niger Nigeria
## 1                  355          1095         176      1708  5360    7968
##   Niue Northern.Mariana.Islands Norway Oman Pakistan Palau Panama
## 1 1494                     3033    103  337     6889  2258   1073
##   Papua.New.Guinea Paraguay Peru Philippines Poland Portugal Puerto.Rico
## 1             8652     1559 4352       11604   1064      677         206
##   Qatar Korea..Rep. Moldova Romania Russian.Federation Rwanda
## 1  1380        2353    2781    2891               2170   7216
##   Saint.Kitts.and.Nevis Saint.Lucia Saint.Vincent.and.the.Grenadines Samoa
## 1                   259         371                              709   568
##   San.Marino Sao.Tome.and.Principe Saudi.Arabia Senegal Seychelles
## 1        118                  5129         1171    7423       1347
##   Sierra.Leone Singapore Slovakia Slovenia Solomon.Islands Somalia
## 1        11756       751      700      639            6623    8128
##   South.Africa Spain Sri.Lanka Sudan Suriname Swaziland Sweden Switzerland
## 1        10788   552      1695  7062     1975     11460     82         149
##   Syrian.Arab.Republic Tajikistan Thailand Macedonia..FYR Timor.Leste
## 1                  986       3438     4442           1108       10118
##    Togo Tokelau Tonga Trinidad.and.Tobago Tunisia Turkey Turkmenistan
## 1 12111    1283   679                 282     685   1023         1866
##   Turks.and.Caicos.Islands Tuvalu Uganda Ukraine United.Arab.Emirates
## 1                      485   7795   7069    1778                  577
##   United.Kingdom Tanzania Virgin.Islands..U.S.. United.States.of.America
## 1            173     5713                   367                       88
##   Uruguay Uzbekistan Vanuatu Venezuela Viet.Nam Wallis.et.Futuna
## 1     505       2320    3348       736     5088             2272
##   West.Bank.and.Gaza Yemen Zambia Zimbabwe
## 1                781  3498   9635     9231

Что мы там делали? Очень просто. функция lapply получает список и функцию , которые будут применены к каждому элементу. Он возвращает результат в виде списка. Функция определяется в строке (т. Е. как лямбда в Python). Для данного x if суммирует его элементы.

Если мы хотим суммировать по годам для каждой страны, мы можем использовать транспонированный фрейм данных, который мы хранили раньше.

existing_df_sum_countries <- lapply(existing_df_t, function(x) { sum(x) })
existing_df_sum_countries <- as.data.frame(existing_df_sum_countries)
existing_df_sum_countries
##   X1990 X1991 X1992 X1993 X1994 X1995 X1996 X1997 X1998 X1999 X2000 X2001
## 1 40772 40669 39912 39573 39066 38904 37032 37462 36871 37358 36747 36804
##   X2002 X2003 X2004 X2005 X2006 X2007
## 1 37160 36516 36002 35435 34987 34622

совокупный

R обеспечил базовую функциональность группировки с помощью aggregate . Другой вариант – взглянуть на мощную библиотеку dplyr , которую я настоятельно рекомендую.

Но aggregate также довольно мощный. Он принимает фрейм данных, список элементов группировки и функцию для применения к каждой группе. Сначала нам нужно определить вектор группировки.

before_2000 <- c('1990-99','1990-99','1990-99','1990-99','1990-99',
                 '1990-99','1990-99','1990-99','1990-99','1990-99',
                 '2000-07','2000-07','2000-07','2000-07','2000-07',
                 '2000-07','2000-07','2000-07')
before_2000
##  [1] "1990-99" "1990-99" "1990-99" "1990-99" "1990-99" "1990-99" "1990-99"
##  [8] "1990-99" "1990-99" "1990-99" "2000-07" "2000-07" "2000-07" "2000-07"
## [15] "2000-07" "2000-07" "2000-07" "2000-07"

Затем мы можем использовать этот столбец в качестве элемента группировки и использовать функцию mean .

mean_cases_by_period <- aggregate(existing_df, list(Period = before_2000), mean)
mean_cases_by_period
##    Period Afghanistan Albania Algeria American Samoa Andorra Angola
## 1 1990-99     403.700    42.1   43.90         16.200    30.3 474.40
## 2 2000-07     290.375    30.5   51.75          7.375    19.0 337.25
##   Anguilla Antigua and Barbuda Argentina Armenia Australia Austria
## 1   36.400              12.800      76.6  64.400       6.8  14.500
## 2   34.625               8.375      42.0  88.125       6.0  10.375
##   Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize
## 1     75.600  52.700  95.600     571.20    6.400  80.500  14.000  54.60
## 2     98.125  49.125  52.375     445.75    3.875  80.125  11.125  39.75
##     Benin Bermuda  Bhutan Bolivia Bosnia and Herzegovina Botswana  Brazil
## 1 131.300   8.400 699.600   308.2                  132.9  356.400 103.400
## 2 133.875   6.125 447.875   215.5                   61.0  562.875  68.875
##   British Virgin Islands Brunei Darussalam Bulgaria Burkina Faso Burundi
## 1                 24.600             90.60   57.700        239.9  332.30
## 2                 17.125             73.25   47.875        398.0  596.75
##   Cambodia Cameroon Canada Cape Verde Cayman Islands
## 1    835.9  201.400  5.900    409.500          8.400
## 2    707.0  221.625  4.125    327.125          5.625
##   Central African Republic    Chad Chile  China Colombia Comoros
## 1                  360.000 330.300  32.0 300.00    75.10 152.500
## 2                  494.625 501.625  16.5 231.75    53.25  98.125
##   Congo, Rep. Cook Islands Costa Rica Croatia  Cuba Cyprus Czech Republic
## 1     322.200       23.400       24.5 110.000 21.70  10.90           20.8
## 2     441.625       15.375       13.0  67.125  9.75   6.75           12.0
##   Cote d'Ivoire Korea, Dem. Rep. Congo, Dem. Rep. Denmark Djibouti
## 1        331.00          794.400           393.30    9.70 1145.000
## 2        573.75          551.875           676.25    6.75  963.125
##   Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea
## 1   22.000             148.20 236.700  45.6       101.9            206.50
## 2   19.375              96.25 163.625  30.5        58.0            404.75
##   Eritrea Estonia Ethiopia  Fiji Finland France French Polynesia   Gabon
## 1 221.200  77.700  382.900 54.50  10.400  16.90           70.900 330.800
## 2 121.125  54.625  575.375 33.25   6.125  11.75           33.125 330.125
##   Gambia Georgia Germany   Ghana Greece Grenada   Guam Guatemala  Guinea
## 1 352.20    68.2    12.8 450.100 24.300   7.000 100.20   101.500 274.200
## 2 397.25    90.5     6.5 358.375 17.125   6.875  42.25    87.625 388.875
##   Guinea-Bissau  Guyana   Haiti Honduras Hungary Iceland   India Indonesia
## 1        394.10  61.800 438.100  118.900  68.300   3.700 533.200    387.70
## 2        283.25 125.375 380.875   70.875  30.875   2.625 346.875    281.75
##     Iran   Iraq Ireland Israel Italy Jamaica  Japan Jordan Kazakhstan
## 1 52.000 85.800    14.9   8.80 8.800     8.6 53.700 16.300      107.3
## 2 33.625 71.875    10.5   6.25 6.375     7.0 35.625  9.125      147.0
##   Kenya Kiribati Kuwait Kyrgyzstan   Laos Latvia Lebanon Lesotho Liberia
## 1 208.9  874.900  69.40    118.700 393.40 75.400    57.9   271.5   444.7
## 2 378.5  487.875  29.25    145.875 315.75 74.625    25.5   418.0   407.5
##   Libyan Arab Jamahiriya Lithuania Luxembourg Madagascar Malawi Malaysia
## 1                 40.200     94.10      15.10      359.5  355.0   158.90
## 2                 19.625     79.75      10.25      387.0  342.5   128.25
##   Maldives    Mali Malta Mauritania Mauritius Mexico Micronesia, Fed. Sts.
## 1  105.500 595.200  7.80    600.700    50.200  72.40                246.80
## 2   72.875 582.375  5.25    586.375    39.375  31.75                137.75
##   Monaco Mongolia Montserrat Morocco Mozambique Myanmar Namibia   Nauru
## 1    2.8   412.50       13.5 116.600    368.300  352.70 566.900 216.500
## 2    2.0   250.25       11.5  88.375    538.625  191.75 540.125  86.875
##     Nepal Netherlands Netherlands Antilles New Caledonia New Zealand
## 1 523.300        8.80                 22.7          83.1      10.100
## 2 270.625        6.25                 16.0          33.0       9.375
##   Nicaragua  Niger Nigeria  Niue Northern Mariana Islands Norway   Oman
## 1    113.40 308.60 361.500 98.80                  228.200    6.7 23.200
## 2     71.75 284.25 544.125 63.25                   93.875    4.5 13.125
##   Pakistan   Palau Panama Papua New Guinea Paraguay   Peru Philippines
## 1  423.400 164.100 68.800          494.900   89.400 297.40       726.4
## 2  331.875  77.125 48.125          462.875   83.125 172.25       542.5
##   Poland Portugal Puerto Rico Qatar Korea, Rep. Moldova Romania
## 1 77.100    43.90      15.300    78     141.600 140.000   153.1
## 2 36.625    29.75       6.625    75     117.125 172.625   170.0
##   Russian Federation Rwanda Saint Kitts and Nevis Saint Lucia
## 1             107.20 274.20                  15.1       22.50
## 2             137.25 559.25                  13.5       18.25
##   Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe
## 1                            42.30 35.00      7.500                 306.1
## 2                            35.75 27.25      5.375                 258.5
##   Saudi Arabia Senegal Seychelles Sierra Leone Singapore Slovakia Slovenia
## 1       67.000 385.000     91.400      531.900     49.70   49.700   47.800
## 2       62.625 446.625     54.125      804.625     31.75   25.375   20.125
##   Solomon Islands Somalia South Africa  Spain Sri Lanka   Sudan Suriname
## 1         469.600 521.100        569.2 35.300      99.1 401.100     95.1
## 2         240.875 364.625        637.0 24.875      88.0 381.375    128.0
##   Swaziland Sweden Switzerland Syrian Arab Republic Tajikistan Thailand
## 1   527.900  4.900       10.30               72.300     134.00    288.6
## 2   772.625  4.125        5.75               32.875     262.25    194.5
##   Macedonia, FYR Timor-Leste   Togo Tokelau Tonga Trinidad and Tobago
## 1         80.100       662.6 650.10   105.9  39.9              16.100
## 2         38.375       436.5 701.25    28.0  35.0              15.125
##   Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu Uganda
## 1  46.400 68.800      105.900                   32.200 511.30 352.70
## 2  27.625 41.875      100.875                   20.375 335.25 442.75
##   Ukraine United Arab Emirates United Kingdom Tanzania
## 1   81.60               37.400          9.200  279.200
## 2  120.25               25.375         10.125  365.125
##   Virgin Islands (U.S.) United States of America Uruguay Uzbekistan
## 1                23.000                      6.0  30.600     117.00
## 2                17.125                      3.5  24.875     143.75
##   Vanuatu Venezuela Viet Nam Wallis et Futuna West Bank and Gaza   Yemen
## 1 234.500    42.300  323.300          152.900             49.800 234.500
## 2 125.375    39.125  231.875           92.875             35.375 144.125
##    Zambia Zimbabwe
## 1 557.200   428.10
## 2 507.875   618.75

Функция aggregate позволяет подмножествовать фрейм данных, который мы передаем в качестве первого параметра , а также передавать несколько элементов группировки и определять наши собственные функции (либо как лямбда-функции, либо как предопределенные функции). И снова в результате получается фрейм данных , который мы можем индексировать как обычно.

mean_cases_by_period[,c('United Kingdom','Spain','Colombia')]
##   United Kingdom  Spain Colombia
## 1          9.200 35.300    75.10
## 2         10.125 24.875    53.25

Выводы

В этом учебном пособии из двух частей представлена концепция data frame , а также то, как их использовать в двух самых популярных в настоящее время экосистемах Data Science-R и Python. Мы видели, как Pandas вдохновляется R. Мы видим, как в Python/Pandas мы можем использовать очень похожие конструкции,присутствующие в языке R. Python также является языком, широко используемым разработчиками программного обеспечения всех видов. Все это означает, что Pandas предлагает более последовательный программный интерфейс, более эффективный во многих ситуациях. В сообществе также согласны с тем, что, если вы пришли из среды разработки программного обеспечения, вы будете чувствовать себя более комфортно с таким языком, как Python, и как DataFrame определяется как объектно-ориентированная концепция. Если вы пришли вместо этого из математики и статистики, вы по достоинству оцените такой язык, как R, очень интерактивный и полностью функциональный, с библиотеками, созданными статистиками для статистиков. Этот язык не предназначен для использования в сложных программных архитектурах

Кроме того, мы представили несколько наборов данных из Gapminder World, связанных с инфекционным туберкулезом, очень серьезным эпидемическим заболеванием, о котором иногда забывают в развитых странах, но которое в настоящее время является второй причиной смерти такого рода сразу после ВИЧ (и много раз ассоциируется с ВИЧ). В следующем уроке серии мы будем использовать эти наборы данных для проведения некоторого исследовательского анализа как в Python, так и в R, чтобы лучше понять мировую ситуацию, связанную с этой болезнью.

Помните, что весь исходный код для различных частей этой серии учебников и приложений можно проверить на GitHub . Не стесняйтесь участвовать и делиться с нами своими успехами!