버킷이 무엇인지 계속 궁금했는데 결론이 나와서 이렇게 포스팅을 한다.

버킷은 히스토그램에서 사용되는 용어로 쉽게 말하자면 "히스토그램에서 동일한 크기의 구간을 몇 개로 잡을 것이냐" 를 결정하는 요소이다.

==================================================================
Histograms are most commonly used as visual representations of data. However, database systems use histograms to summarize data internally and provide size estimates for queries. These histograms are not presented to users or displayed visually, so a wider range of options are available for their construction. Simple or exotic histograms are defined by four parameters, Sort Value, Source Value, Partition Class and Partition Rule. The most basic histogram is the equi-width histogram, where each bucket represents the same range of values. That histogram would be defined as having a Sort Value of Value, a Source Value of Frequency, be in the Serial Partition Class and have a Partition Rule stating that all buckets have the same range.

히스토그램은 데이터의 시각적 표현으로 가장 일반적으로 사용됩니다. 그러나 데이터베이스 시스템은 히스토그램을 사용하여 내부적으로 데이터를 요약하고 쿼리에 대한 크기 추정을 제공합니다. 이러한 히스토그램은 사용자에게 표시되거나 시각적으로 표시되지 않으므로보다 다양한 옵션을 사용할 수 있습니다. 단순하거나 이국적인 히스토그램은 정렬 값, 소스 값, 파티션 클래스 및 파티션 규칙의 네 가지 매개 변수로 정의됩니다. 
가장 기본적인 히스토그램은 등 폭 막대 그래프이며, 각 버킷은 동일한 값 범위를 나타냅니다. 그 히스토그램은 값의 정렬 값, 빈도의 소스 값을 가지며 직렬 파티션 클래스에 있고 모든 버킷이 같은 범위를 갖는다는 파티션 규칙을 갖는 것으로 정의됩니다. - 구글 번역
==================================================================
ref. 
wikipedia / V-optimal histograms
https://en.wikipedia.org/wiki/V-optimal_histograms



가령 x값의 범위가 0~10 인 히스토그램을 상상해보자.

히스토그램의 버킷이 1이면 버킷의 구간은 0-10, 버킷이 2면  버킷의 구간이 0-5, 6-10이 된다는 것이다.

따라서 위의 히스토그램의 버킷이 10이라면 한 버킷의 구간은 1의 크기를 가지게 될 것이다.

이는 한 버킷당 0-1, 1-2, 2-3, ... , 9-10 이 된다는 것을 뜻한다.

이것을 파이썬 코딩으로 이해해보자.



============================ Python ============================

import pylab

import random


SAMPLE_SIZE = 100


# 시드값 랜덤 생성기

random.seed()


# 생성된 랜덤값들을 여기에 저장

real_rand_var = []


# 랜덤값 일부를 선택

real_rand_vars = [random.randint(0, 10) for val in range(SAMPLE_SIZE)]

# 10개의 버켓으로 히스토그램 생성. pylab.hist(데이터 리스트, 버켓 갯수)

pylab.hist(real_rand_vars, 10)


# x, y 레이블 정의

pylab.xlabel("Number range")

pylab.ylabel("Count")  


# 그래프 그리기

pylab.show()

============================ Python ============================


fig 1. 코딩 결과(버킷 = 10개)



결과를 보면 총 막대기가 10개가 생긴 것을 볼 수 있다. 그리고 각 구간의 넓이는 1인 것 또한 볼 수 있다.


만약 버킷을 5개로 바꾼다면 막대기가 5개가 된 것을 볼 수 있을 것이다.




fig 2. 코딩 결과(버킷 = 5개)




버킷을 5로 바꾸니 막대기가 5개, 구간의 크기가 2인 것을 볼 수 있다.



정리하자면 "버킷 설정 = 막대기 갯수"이고 "버킷 구간의 크기는 (버킷 갯수)/(구간)"이다.











+ Recent posts