후.. 일주일간 아파서 죽는 줄 알았다 ㅠㅠ 이번년도 들어 왜케 자주 아픈지..여튼! 이번에는 ES로 특정필드의 실데이터 표본 100개랑 최대값이랑 중간값, 평균,추출해야할 일이 생겼다. 그래서 구해봄!
먼저, 통계집계를 구했다.
Request :
https://{es_url}/{index}/_search
{
"size": 0,
"aggs": {
"{노출할 field명}": {
"stats": {
"field": "{통계집계할 field명}"
}
}
}
}
Response :
{
"took": 112,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": null,
"hits": []
},
"aggregations": {
"{노출할 필드명}": {
"count": 4406927, // 전체수
"min": 0.0, // 해당 인덱스의 필드값중 가장 작은 수
"max": 208941.0, // 해당 인덱스의 필드값중 가장 큰 수
"avg": 8.764550899073209, // 해당 인덱스의 필드값의 평균
"sum": 3.8624736E7 // 해당 인덱스의 필드값의 합
}
}
}
여기까진 어떻게 했는데, 표본?!! 🤯 표본.. 배운지가 몇년전이지.. 기억을 더듬고 있는데 다른 분께서 도와줬다. 표본이란 모집단의 부분집합, 즉, 여러 통계 자료를 포함하는 집단 속에서 그 일부를 뽑아내어 조사한 결과라고 한다. 따라서, ES로 표현해보면 아래와 같다.
Request :
{
"query": {
"bool": {
"must": []
}
}, // 전체 데이터들
"aggregations": {
"group": {
"terms": {
"field": "{표본을 구할 필드명}",
"size": 100, // 표본 100개
"order": [
{
"_count": "desc"
},
{
"_key": "asc" // 필드값 정렬
}
]
}
}
}
}
Response :
{
"took": 128,
"timed_out": false,
"_shards": {
"total": 3,
"successful": 3,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 10000,
"relation": "gte"
},
"max_score": 1.0,
"hits": [
{
"_index": "{인덱스명}",
"_type": "_doc",
"_id": "{id값}",
"_score": 1.0,
"_source": {
"{표본을 구할 필드명}": 0,
"{field1}": "http://afasfd.com/asdfadsf",
"{field2}": null,
"{field3}": false,
"{field3}": [
{
"values": [
"ababa"
],
"option_name": "a"
},
{
"option_values": [
"asdfas"
],
"option_name": "b"
}
],
"{field4}": "2019-05-08T13:45:12+09:00"
}
}....
]
},
"aggregations": {
"group": {
"doc_count_error_upper_bound": 167,
"sum_other_doc_count": 46654,
"buckets": [
{
"key": 0, // 필드값
"doc_count": 2512339
},
{
"key": 1,
"doc_count": 203237
},
{
"key": 2,
"doc_count": 118079
},
{
"key": 3,
"doc_count": 61211
},
{
"key": 4,
"doc_count": 35823
},
{
"key": 5,
"doc_count": 22819
},
{
"key": 6,
"doc_count": 15780
},
{
"key": 7,
"doc_count": 10590
},
{
"key": 8,
"doc_count": 6563
},
{
"key": 10,
"doc_count": 4540
},
{
"key": 9,
"doc_count": 3493
},
{
"key": 11,
"doc_count": 1830
},
{
"key": 12,
"doc_count": 9920
},
{
"key": 13,
"doc_count": 9578
},
{
"key": 14,
"doc_count": 8574
},
{
"key": 15,
"doc_count": 7728
},
{
"key": 16,
"doc_count": 7109
},
{
"key": 17,
"doc_count": 6245
},
{
"key": 18,
"doc_count": 5743
},
{
"key": 19,
"doc_count": 5336
},
{
"key": 20,
"doc_count": 5312
},
{
"key": 21,
"doc_count": 4654
},
{
"key": 22,
"doc_count": 4221
},
{
"key": 23,
"doc_count": 4009
},
{
"key": 24,
"doc_count": 3676
},
{
"key": 25,
"doc_count": 3545
},
{
"key": 26,
"doc_count": 3156
},
{
"key": 27,
"doc_count": 2893
},
{
"key": 28,
"doc_count": 2781
},
{
"key": 30,
"doc_count": 2711
},
{
"key": 29,
"doc_count": 2639
},
{
"key": 31,
"doc_count": 2442
},
{
"key": 32,
"doc_count": 2305
},
{
"key": 33,
"doc_count": 2219
},
{
"key": 34,
"doc_count": 2112
},
{
"key": 35,
"doc_count": 1945
},
{
"key": 36,
"doc_count": 1880
},
{
"key": 37,
"doc_count": 1762
},
{
"key": 38,
"doc_count": 1739
},
{
"key": 40,
"doc_count": 1710
},
{
"key": 39,
"doc_count": 1648
},
{
"key": 41,
"doc_count": 1482
},
{
"key": 42,
"doc_count": 1475
},
{
"key": 43,
"doc_count": 1452
},
{
"key": 44,
"doc_count": 1393
},
{
"key": 45,
"doc_count": 1320
},
{
"key": 46,
"doc_count": 1239
},
{
"key": 47,
"doc_count": 1175
},
{
"key": 49,
"doc_count": 1153
},
{
"key": 48,
"doc_count": 1150
},
{
"key": 50,
"doc_count": 1135
},
{
"key": 52,
"doc_count": 1083
},
{
"key": 51,
"doc_count": 1064
},
{
"key": 53,
"doc_count": 1014
},
{
"key": 54,
"doc_count": 965
},
{
"key": 55,
"doc_count": 932
},
{
"key": 56,
"doc_count": 930
},
{
"key": 60,
"doc_count": 860
},
{
"key": 58,
"doc_count": 856
},
{
"key": 57,
"doc_count": 844
},
{
"key": 61,
"doc_count": 835
},
{
"key": 62,
"doc_count": 832
},
{
"key": 59,
"doc_count": 820
},
{
"key": 63,
"doc_count": 766
},
{
"key": 64,
"doc_count": 740
},
{
"key": 65,
"doc_count": 728
},
{
"key": 66,
"doc_count": 686
},
{
"key": 68,
"doc_count": 661
},
{
"key": 67,
"doc_count": 651
},
{
"key": 69,
"doc_count": 644
},
{
"key": 72,
"doc_count": 643
},
{
"key": 70,
"doc_count": 638
},
{
"key": 71,
"doc_count": 616
},
{
"key": 73,
"doc_count": 589
},
{
"key": 74,
"doc_count": 586
},
{
"key": 76,
"doc_count": 577
},
{
"key": 75,
"doc_count": 563
},
{
"key": 78,
"doc_count": 555
},
{
"key": 82,
"doc_count": 554
},
{
"key": 79,
"doc_count": 538
},
{
"key": 77,
"doc_count": 529
},
{
"key": 81,
"doc_count": 522
},
{
"key": 80,
"doc_count": 508
},
{
"key": 84,
"doc_count": 501
},
{
"key": 85,
"doc_count": 489
},
{
"key": 83,
"doc_count": 487
},
{
"key": 86,
"doc_count": 466
},
{
"key": 87,
"doc_count": 445
},
{
"key": 88,
"doc_count": 444
},
{
"key": 92,
"doc_count": 417
},
{
"key": 90,
"doc_count": 411
},
{
"key": 91,
"doc_count": 403
},
{
"key": 93,
"doc_count": 403
},
{
"key": 89,
"doc_count": 391
},
{
"key": 94,
"doc_count": 391
},
{
"key": 95,
"doc_count": 383
},
{
"key": 96,
"doc_count": 370
},
{
"key": 100,
"doc_count": 359
},
{
"key": 97,
"doc_count": 357
},
{
"key": 104,
"doc_count": 357
}
]
}
}
}
⇒ 위가 표본값이 되고, 중앙값은 N이 짝수이면 중앙값은 N/2번째 표본의 값과 N/2+1번째 표본의 값의 평균이므로 n/2번째 표본 값 : 49, n/2+1번째 표본 값: 48 이므로 48.5가 된다.