Автор оригинала: 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 . Не стесняйтесь участвовать и делиться с нами своими успехами!