【R】【基本の前処理】しんぷるなサンプル抽出を考える
いい感じに韻を踏めたので大満足。
最近ggplot2系の派手めな記事が多かったんですが、
私の中でもっと大事にしたいことは山ほどあって
今日は今更地味なことを書きます。
卵が先か、サンプル抽出が先か
データは全数取れるに越したことはないのですが、
世の中のデータの全てがcsvやらスクレイピングで取れるなんてことは無くって。
しばしば母集団からのサンプル抽出なるものを行う羽目になります。
「15万世帯のばらばらのデータをひとつひとつ集めてくるなんて個人では無理ゲー」
「じゃあランダムに抽出した5000世帯ぶんにしよっか」
とかとか。
このサンプルサイズの設定も奥が深くて苦しみも深くてもう言いたいことは山ほどあるのですが、
あとrandomにしないでpairdするとかもあったりするのですが、ていうかpairdってやっry
...余計なことを言うのはやめます。
抽出方法も系統やら多段やらいろいろですが
今日はさくっとシンプルにrandom抽出したいねって時のScriptをメモ程度に。
Excelでの無作為抽出
よく見かけるのがExcelでやる方法です。
n個のサンプルが欲しかったら
RAND関数で乱数を発生→小さい順にソートして上からn個取ろう!みたいな。
(ExcelのRAND関数も奥が深い...一様分布かつ、いかに重複しないかみたいな。仕様読むのたのしい。)
Rでやってみる
Rにも乱数の発生はいろいろあって、
一様分布ならrunif()
正規分布ならrnorm()
などなど
dplyr::manute()とかで乱数の列足してsortして~みたいな感じでやったら先述したExcelと同じ動きもできたりする
が。
RにSample関数なるものがあります。
これは1から200の連番からランダムに20個取ってきてね!みたいなことが出来る関数になります。
好きな関数のひとつなので、今日はそれで。
テーマ
上場企業1894社のIDから500社抽出したい
#データを用意 > head(data,10) ID 1 1301 2 1332 3 1333 4 1352 5 1377 6 1379 7 1414 8 1417 9 1419 10 1420 > tail(data,10) ID 1885 9984 1886 9986 1887 9987 1888 9989 1889 9990 1890 9991 1891 9993 1892 9994 1893 9995 1894 9997 #1894社のIDリストです。しかも昇順。 #このまま上から500社取っちゃうと業種が偏っちゃうよね~ #まず1から1894の連番を作る > n<-1:1894 #その連番から500個ランダムに数を取得します。 > index<-sample(n,500);index [1] 1868 78 502 380 1170 148 510 71 1499 1363 247 1344 1736 988 1782 1706 1208 123 165 44 1713 [22] 185 589 1610 1387 1202 776 1220 1802 65 16 1615 979 919 434 654 1173 726 963 1559 1756 1467 [43] 208 1545 923 1772 556 1693 1578 569 1765 387 426 4 178 1676 1280 26 1080 1669 1252 1808 130 [64] 223 1256 1075 168 1889 539 1140 1402 617 1497 1634 1856 580 1627 271 1828 1101 576 483 581 1227 [85] 491 1458 1152 1046 1131 1111 1775 1416 958 1247 249 1519 1484 1640 823 770 1614 1562 476 1838 454 [106] 652 1287 1163 1264 306 1404 1755 995 1586 1281 615 412 1103 1371 1892 1212 1059 182 423 1133 626 [127] 1268 925 1320 452 137 1514 336 1321 777 458 1463 1415 670 486 1027 1047 1068 1093 234 1481 1657 [148] 904 666 50 1623 1166 1377 1594 72 889 63 933 1366 1183 1023 728 1717 233 1611 1150 1010 408 [169] 926 1389 1688 1588 64 1253 1804 1500 744 893 821 942 273 45 787 1660 1169 467 511 1606 546 [190] 687 161 536 1277 103 1365 1025 621 890 1724 1665 1201 886 526 195 1272 342 81 1198 1102 1063 [211] 1155 12 1846 445 396 36 614 1124 950 1097 1223 503 1728 1721 515 1324 253 1205 95 849 1052 [232] 532 623 232 256 1153 1345 1584 1407 1376 419 939 221 1296 535 817 1275 354 319 1650 1476 283 [253] 573 1686 61 409 1442 339 829 1245 825 23 596 1894 561 39 151 1289 635 242 1720 606 1630 [274] 422 343 519 1830 119 406 30 82 472 390 240 1086 417 507 461 1333 28 1718 244 1644 216 [295] 320 210 713 854 672 497 802 693 1391 1125 1840 947 1290 166 921 743 987 796 633 549 1792 [316] 562 895 863 658 1674 816 1666 463 956 619 41 577 1000 1478 717 170 1524 994 525 102 1793 [337] 1791 344 1591 913 594 366 1842 1122 378 738 1477 109 1878 183 610 646 1043 1821 425 1766 32 [358] 608 1073 1525 752 235 1704 118 1196 891 348 250 1486 146 1279 1188 812 851 588 83 309 258 [379] 1848 605 1866 835 1271 1123 822 162 656 814 1331 792 847 1024 698 1241 448 141 1790 346 1329 [400] 1826 259 1482 1864 181 1430 57 1857 1457 3 735 1553 1727 285 1 512 383 1116 144 613 313 [421] 56 469 1194 1743 618 1816 827 418 1110 749 715 1156 918 528 523 1613 978 704 1739 625 564 [442] 873 498 1029 783 341 1883 1118 1157 1239 1211 1136 66 1694 788 1572 21 1647 1332 667 1831 1378 [463] 932 1642 1515 1168 872 251 1394 1570 1004 1327 1579 583 462 1603 661 1436 837 394 1249 986 1531 [484] 1367 159 1705 364 520 953 1703 1479 362 1013 1099 275 1632 1061 864 1278 1180 #この500個の整数をインデックスにして部分集合を作る > data_sample[index,] %>>% as.data.frame() ->data_sample500 > colnames(data_sample500)<-"ID" #ちゃんと500社に絞れてるかしら > str(data_sample500) 'data.frame': 500 obs. of 1 variable: $ ID: int 8001 4549 8609 7874 6914 3371 4828 7864 1301 7251 ... #完成 > tail(data_sample500,10) ID 491 3202 492 9504 493 8270 494 9997 495 6973 496 7989 497 5440 498 4826 499 2198 500 3222
この部分集合を元にデータマージしたり前処理したり色々です。
サンプルサイズ決めて
どうやって抽出するのが妥当なのか考えて
データ構造見てどうやって分析するのがいいのか考えて
みたいな
この分析の前部分が本当は一番好きだったりはする。かも。
おわり
短いけどおわり。
Tokyo.Rへの初参戦が決まったので
休日出勤を回避すべく馬車馬のようにはたらく!!!
11月はSapporo.Rもあるらしいよ、たのしみ。