Wikipedia ํ์ด์ง์ ์์ ๋๋๋ก : https://en.wikipedia.org/wiki/Percentile#The_nearest -rank_method
์ด๋ฏธ ์กด์ฌํ๋ค๊ณ ์๊ฐํฉ๋๊น? ์ํค ๋ฐฑ๊ณผ ์์ ์ฌ์ฉ :
>>> np.percentile(15, 20, 35, 40, 50], [5, 30, 40, 50, 100], interpolation='lower')
array([15, 20, 20, 35, 50])
๊ทธ๋ ์ง ์์ต๋๋ค. ์ํค ๋ฐฑ๊ณผ ํ์ด์ง์ ์์ 2๋ฅผ๋ณด์ญ์์ค.
>>> np.percentile([3, 6, 7, 8, 8, 10, 13, 15, 16, 20], [25,50,75,100], interpolation='lower')
array([ 7, 8, 13, 20])
[7,8,15,20]
์ด์ด์ผํ๋ ๊ฒฝ์ฐ
์ธ ๋ฒ์งธ ์์์๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์คํจํฉ๋๋ค.
๊ฐ์ฅ ๊ฐ๊น์ด ์๋ฆฌ๊ฐ "๊ฐ์ฅ ๊ฐ๊น์ด"๊ฒ ๊ฐ๋์? ๊ฒฝ๊ณ๊ฐ ์ ํํ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ๋ ๋ค๋ฅธ ์์ ์ด ํญ์ ์์ง๋ง.
ํธ์ง : ์ฆ, ์ ํํ 0๊ณผ 100์ด ๋ฐ์ดํฐ ํฌ์ธํธ์์ ๋๋ ๋ฐ์ดํฐ ํฌ์ธํธ ์ด์ ์ผ๋ก ๊ฐ์ฃผ๋๋ ๊ณณ์
๋๊น? (๊ทธ๊ฒ์ IIRC์
๋๋ค, ์ด์จ๋ ์ฌ๊ธฐ์๋ ๋ง์ ์ฑ๊ฐ์ ๋ณต์ก์ฑ์ด ์์ต๋๋ค)
์ฝ๊ณ ์ถ์ง ์๋ค๋ฉด, ๊ทธ ์ฐจ์ด๊ฐ ๋ ์๋์์๋ C ๋งค๊ฐ ๋ณ์ ์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋์ ์ด๊ฒ์ ์๋ ์ฌ๋์ด ์ด๊ฒ์ ์ถ๊ฐํ๊ณ ์ถ๋ค๋ฉด ....
์์งํ C ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ฉด ์ ๋ง ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ ๋์ฒด๋ก ๋ ๋์ ๋ฌธ์๊ฐ ์ข์ ๊ฒ์ด๊ณ , ์ด๊ฒ์ ์ ๋ง๋ก ์๋ ์ฌ๋์ด ํ์ํฉ๋๋ค ....
์ด๊ฒ์ด C- ํ๋ผ๋ฏธํฐ์ ๊ด๋ จ์ด ์๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ ํํ๋ ์ต์ ์ด ๋ฐ๋์ง ํ ์ ์๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
์ฐ์ฐํ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐ ํ ๋ค๋ฅธ ์ค๋ ๋ ๋ฅผ ์ฐพ์์ต๋๋ค (2016 ๋ 12 ์). ๋ด๊ฐ ์ฐพ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ (๊ทธ๋ฆฌ๊ณ wikipedia์์ ๊ฐ์ฅ ๊ฐ๊น์ด ์์๋ผ๊ณ ๋ถ๋ฅด๋ ์๊ณ ๋ฆฌ์ฆ)์ Hyndman-Fan (H & F) ์ด ์ผ๋ฐ์ ์ผ๋ก ์ธ์ฉ ํ์ด
๋ค์์ ์ง๊ด์ ์ผ๋ก ์ ์ฌํ ๊ฒ์ ๊ณ์ฐํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ numpy๊ฐ ์ ๊ณตํ๋ ๋ค๋ฅธ ์ต์ (์ : 'lower', 'nearest')๊ณผ ๋น๊ตํ์ฌ ์ด๋ป๊ฒ ๋ณด์ด๋์ง ๋ณด์ฌ์ค๋๋ค.
๋์๊ฒ ๊ทธ๊ฒ์ ์ฒซ๋์ C ๋งค๊ฐ ๋ณ์์ ๋๊ฐ์ด ๋ณด์ ๋๋ค. ๊ฐ์ฅ ๊ฐ๊น์ด ๊ณก์ ์ H & F ๊ณก์ ๋ณด๋ค ๋ ๋์ด๋ฉ๋๋ค .numpy๋ 1์ ์ฌ์ฉํ๊ณ H & F๋ 0์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์์๋ฉ๋๋ค.
์ฆ๊ฑฐ๋ฅผ ์ํ๋ค๋ฉด. ๋์ผํ ๊ฐ์ 1000 ๋ฒ ๋ฐ๋ณตํ์ฌ ์ ์ฒด๋ฅผ ๋ฐ๋ณตํ๋ฉด ์๋ ด ํ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ์ง : ์๋๋ฉด ๊ทธ๋ ์ง ์์ ์๋ ์๊ณ , ์ธ๋ด์ฌ์ด๋ ์๊ฐ์ด ์์ด์ ์๊ฐํ ์๊ฐ์ด ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ์ํคํผ๋์์์ ์ธ๊ธ ํ C ๋งค๊ฐ ๋ณ์๋ผ๊ณ ์๊ฐํ๋ฏ๋ก ํ๋ ธ๋ค๋ ๊ฒ์ ์ฆ๋ช
ํด์ฃผ์ธ์ :)
์ด์ ๊ฐ์ ๊ทธ๋ํ๋ ๋ฐฑ๋ถ์ ์ ๋ฌธ์์ ํฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
ํธ์ง : ๋ฐ๋์งํ๊ฒ๋ ๋ถ์ฐ์์ ๊ฐ๋ฐฉ / ํ์๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ
๋ ์ ์ฐธ๊ณ ์ฌํญ : ์ด ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ์ ์งํ๊ธฐ ์ํด์ด ๊ทธ๋ํ๋ฅผ ๋ฌธ์์ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๋ชจ๋ ํ ๋ก ์ "ํด๊ฒฐ๋จ"์ผ๋ก ํ์ํ์ต๋๋ค. ์ด์ ๊ทธ๋ํ๋ https://numpy.org/devdocs/reference/generated/numpy.percentile.html ์ ํ๋จ์
@ eric-wieser ๋๋ ๊ทธ ๊ทธ๋ํ๋ฅผ ๋ง๋๋ ๋ฐ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ์ค๋ ๋ฆ๊ฒ ๋ค์ ์ฌ๊ฒ์, ์ฌ๊ธฐ์ ์ฌ๋ฆด๊น์?
@seberg ์์งํ ๋งํด์ C- ํ๋ผ๋ฏธํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ณด๊ฐ์ด ์ด๋ป๊ฒ ๊ณ์ฐ๋๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์ด๊ฒ์ด ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํ๊ฒ ๋ง๋๋ ๊ฒ์ C- ํ๋ผ๋ฏธํฐ๊ฐ ์ ํ ๋ณด๊ฐ ์น์ (Wikipedia)์์๋ง ๋ ผ์๋๊ณ Wikipedia์ Hyndmand & Fan ๋ ผ๋ฌธ์์ ๋ด๊ฐ ์์ฒญํ ์๊ณ ๋ฆฌ์ฆ์ ๋ํด ๋ณด๊ฐ๊ณผ๋ ๋ณ๊ฐ์ ์น์ ์์ ๋ ผ์ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ด์ฌ์๋ ์๊ณ ๋ฆฌ์ฆ๊ณผ ํญ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ๋ณด๊ฐ ๋งค๊ฐ ๋ณ์๊ฐ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์กด์ฌํ๋๋ผ๋,์ด ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํด์ผํฉ๋๊น? ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฑ๋ถ์ ์ ์ ์๋ฅผ ์ป๊ธฐ ์ํด '์ด์ํ'๋งค๊ฐ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์์ด๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@ ricardoV94 ์ผ ์๋ ์์ง๋ง ์๋ฌด๋ฆฌ ๋์๋๋ผ๋ ๊ธฐ๋ณธ๊ฐ์ ๋ณ๊ฒฝํ ์๋ ์์ต๋๋ค. method = "H & K"์ ๊ฐ์ ๊ฒ์ ๋ ธ์ถํ์ฌ ๋ ๋งค๊ฐ ๋ณ์๋ฅผ ํ ๋ฒ์ ์ฌ์ ์ ํ ์ ์์ต๋๋ค.
C ๋งค๊ฐ ๋ณ์๋ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํด 0 % ๋ฐ 100 %๋ฅผ ์ ์ํ๋ ๊ณณ์
๋๋ค (๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํ ์ฌ๋ถ ๋ฑ). ์ํคํผ๋์์ ๋งค๊ฐ ๋ณ์ C
๋ก ๋ณด๊ฐ์๋ง ํด๋น ๋ ์ ์์ง๋ง ๋์ผํ ๋ฌธ์ ๋ก ์ธํด ์ฐจ์ด๊ฐ ๋ฐ์ํฉ๋๋ค. C
๋ ๋น์ฐํ ๋ชจํธํฉ๋๋ค. ์ ์ ํ ์ด๋ฆ์ range = 'min-max'๋๋ range = 'extrapolated'๋๋ ์์ ํ ๋ค๋ฅธ ๊ฒ์ผ ์ ์์ต๋๋ค. ๋ด๊ฐ ๋งํ๋ฏ์ด, ๋ง์ ๋ฐ์ดํฐ ํฌ์ธํธ (์๋ง๋ ์์ ๋
ธ์ด์ฆ)๊ฐ์๋ ํ๋กฏ์ ๋ค์ ์คํํ๋ฉด ๋ฒ์ ์ ์๊ฐ ๋ ๋ช
ํ ํด์ง๊ธฐ ๋๋ฌธ์ ์ด๋ค์ด ์๋ ดํ๋ ๊ฒ์ ๋ณผ ์์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
@seberg ๋๋ method = "H & K"๋๋ method = "classic"์ผ๋ก ๊ด์ฐฎ์ต๋๋ค. Interpolation = "none"๋ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ฌธ์์ ์ด๋ฏธ์ง๋ฅผ ํฌํจํ๋ ๋ฉ์ปค๋์ฆ์ด ๋ฌด์์ธ์ง ๋๋์ด๋ฅผ ์ํํ๋ ์ ๋ก๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ฌธ์ ๋ด์์ matplotlib ์ฝ๋๋ฅผ ์คํํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ๊ณณ์์ ์ํํ๋ ๋ฐฉ์์ ๋๋ค. ์ด๋ ๋ํ ํ์ค๊ณผ ๋๊ธฐํ ๋ ์ํ๋ก ์ ์ง๋๋๋กํฉ๋๋ค.
์ข์์,์ด ๊ฒฝ์ฐ ์ต๊ณ ์ ์ฝ๋ ์ด๋ฏธ์ง๋ฅผ ์๊ฐํ๊ฒ ์ต๋๋ค.
๊ฐ์ฅ ๋ฌธ์ ๊ฐ๋๋ ๋ถ๋ถ์ ๋ถ์ฐ์์ฑ์ ๋ํ ๊ฐ๋ฐฉํ, ํ์ ํ ๋ง์ปค์ ๋๋ค. matplotlib์๋ ํด๋น ๊ธฐ๋ฅ (afaik)์ด ๋ด์ฅ๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํ๋ ์ฝ๋ฉ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ง๊ธ์ ๊ฑด๋ ๋ธ ์ ์์ต๋๋ค. matplotlib์ ์๋ ์ง์์ด ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ๋ ๋์ ์ ์์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ๊ทธ๊ฒ์ ๋ถ์ฐ์์ฑ์ ๋ํด ์ฌ์ ํ ์ฐ์ํฉ๋๋ค.
import matplotlib.pyplot as plt
a = [0,1,2,3]
p = np.arange(101)
plt.step(p, np.percentile(a, p, interpolation='linear'), label='linear')
plt.step(p, np.percentile(a, p, interpolation='higher'), label='higher', linestyle='--')
plt.step(p, np.percentile(a, p, interpolation='lower'), label='lower', linestyle='--')
plt.step(p, np.percentile(a, p, interpolation='nearest'), label='nearest', linestyle='-.',)
plt.step(p, np.percentile(a, p, interpolation='midpoint'), label='midpoint', linestyle='-.',)
plt.title('Interpolation methods for list: ' + str(a))
plt.xlabel('Percentile')
plt.ylabel('List item returned')
plt.yticks(a)
plt.legend()
๋๋ interpolation = 'linear'
์ด ๋จ์ฐจ๊ฐ ์๋ ๊ท์น์ ์ธ ์ ์ด์ด์ผํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๋ ์ง ์์ผ๋ฉด ์ข์ ๋ณด์ธ๋ค. ๋ฌธ์์ ์ถ๊ฐํ์ฌ PR์ ํ ์ ์์ต๋๊น?
์ฌ์ค, step
์ ์ผ๋ฐ์ ์ผ๋ก ์คํด์ ์์ง๊ฐ์๋ ์ธ๊ณต๋ฌผ์ ์ ๋ฐํ๋ฏ๋ก ํผํ๊ณ ์ถ์ต๋๋ค. linspace(0, 100, 60)
๋ ๋ ์ ํํ ์ค๊ฐ ์ขํ๋ฅผ ์์ฑํฉ๋๋ค.
PR์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ชจ๋ฆ ๋๋ค.
๊ทํ์ ๊ณ์ ์ผ๋ก ์์ ๋กญ๊ฒ ๋ณ๊ฒฝ ์ ์์ ์ถ๊ฐํ๊ฑฐ๋ ๋ ผ์ํ์ญ์์ค.
๋๋ ๋น์ ์ด C
๋ฅผ ์ด์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค (๋ฌด์ธ๊ฐ์์ ๊ทธ๊ฒ์ ํ
์คํธํ์ญ์์ค). ๋ฐฑ๋ถ์ ์์ ๋ํ ํจ์๋ฅผ ํธ์ถ ํ ๋ค์ numpy ๋ฒ์ ์ ์ฐ๊ฒฐํฉ๋๋ค (C = 1์ ์ฌ์ฉํฉ๋๋ค. ์ง๊ธ์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋ ๋ฐฑ๋ถ์ ์๋ฅผ ์์ ํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์๋ํ์ง ์์ต๋๋ค).
def scale_percentiles(p, num, C=0):
"""
p : float
percentiles to be used (within 0 and 100 inclusive)
num : int
number of data points.
C : float
parameter C, should be 0, 0.5 or 1. Numpy uses 1, matlab 0.5, H&K is 0.
"""
p = np.asarray(p)
fact = (num-1.+2*C)/(num-1)
p *= fact
p -= 0.5 * (fact-1) * 100
p[p < 0] = 0
p[p > 100] = 100
return p
๊ทธ๋ฆฌ๊ณ ์ง์, "๊ฐ๊น์ด"์ผ๋ก "H & F"๋ฅผ ์ป๊ณ ์ ํ์ผ๋ก Wikipedia์์ ํ๋กฏ์ ์ป์ ์ ์์ต๋๋ค. (๋ด๊ฐ ์๋ชป๋ ๊ฒ์ ์ป์์ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ณ ์์ง๋ง ๋ด๊ฐ ์ณ์๋ค ๊ณ ํ์ ํฉ๋๋ค).
์์ ๋งํ๋ฏ์ด ์ฐจ์ด์ ์ ๋ง์ง๋ง ํฌ์ธํธ์ ๋ํด 0-100 (๊ท ๋ฑํ๊ฒ)์ ๋ฐ์ดํฐ ํฌ์ธํธ๋ฅผ ๋ฐฐ์นํ๋ ์์น์ ๋๋ค. C = 1์ ๊ฒฝ์ฐ min (data)์ 0 ๋ฒ์งธ ๋ฐฑ๋ถ์ ์ ๋ฑ์ ๋ฃ์ต๋๋ค. "๋ฌด์์ด ๋ ํ๋นํ ์ง"์ ๋ํ ๋จ์๊ฐ ์์ต๋๋ค. ์๋ง๋ ์ผ๋ฐ์ ์ธ ๊ด์ ์์ ์ฝ๊ฐ ์ค์ ํ ๊ฒ์ ๋๋ค. 1์ ํฌํจํ๊ณ 0์ ์ ์ธํ๋ ์ด๋ฆ์ ์ฝ๊ฐ ์๋ฏธ๊ฐ ์์ต๋๋ค (๋ฐฐํ์ ๊ฐ๋ฅํ ๋ฒ์๊ฐ ๋ฐ์ดํฐ ๋ฒ์ ๋ฐ์ ์๊ธฐ ๋๋ฌธ์ ๋ฐฑ๋ถ์ ์์ ์ ์ฒด ๋ฒ์๋ฅผ ์๊ฐํ ๋). C = 1 / 2๋ ๊ทธ๋ฐ ์๋ฏธ์์ ๋ฐฐํ์ ์ ๋๋ค.
๋๋ C ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐ ํ ๊ฒ์ด์ง๋ง, ๊ฐ๋ฅํ๋ค๋ฉด ๋๊ตฐ๊ฐ๊ฐ ์ค๋ช ์ ์ธ ์ด๋ฆ์ ์ ์ํ๊ธฐ๋ฅผ ์ํฉ๋๋ค. ๋ํ ์ต์ ์ ๊ธฐ๋ณธ๊ฐ์ ๋ช ํํ๊ฒ ๋ง๋ค๊ธฐ ์ํด "๋ฐฉ๋ฒ"๊ณผ ๊ฐ์ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ์์ ๊ฒ์ ๋๋ค (๋ณด๊ฐ + C ์กฐํฉ). ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ถ๋ถ์ ์กฐํฉ์ด ์ฌ์ฉ๋์ง ์๊ณ ์ ์ฉํ์ง ์๋ค๊ณ ๊ฒฐ์ ํฉ๋๋ค.
๊ฒฐ๊ตญ ๋ด ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํต๊ณํ์๊ฐ ์ด๋ค ๋ฐฉ๋ฒ์ ํฉ์๊ฐ ์๋์ง ์๋ ค์ฃผ๊ธฐ๋ฅผ ์ํฉ๋๋ค (R์๋ ๋ช ๊ฐ์ง ๋ด์ฉ์ด ์์ง๋ง ๋ง์ง๋ง์ผ๋ก ๋๊ตฐ๊ฐ๊ฐ ์ฌ๊ธฐ์ ์์ ๋ R ๋ฌธ์ ๋๋ ์ ์ฌํ ๋ด์ฉ์ numpy ์ปจํ ์คํธ๋ก ์ค์ ํ์ง ์๊ณ ๋ณต์ฌ ํ ๊ฒ์ ๋๋ค. ๋งํ ํ์๋์์ด, ์ผ๋ฐ ์ฒญ์ค์๊ฒ๋ ์ธ๋ชจ๊ฐ ์์์ผ๋ฉฐ ๋ ผ๋ฌธ์ ์ธ์ฉํ๋ ๊ฒ์ด ๋ ๋์์ด๋์์ ๊ฒ์ ๋๋ค).
๋๋ ๊ทธ H & F ๋
ผ๋ฌธ์ ์ฝ๊ณ ์ถ์ง ์์ง๋ง (์์งํ ์ฝ๊ธฐ์๋ ๋งค์ฐ ๋งค๋๋ฝ๊ฒ ๋ณด์ด์ง ์๋๋ค), ๋น์ ๋์ง์ง์ ๊ด์ ์์ ๋ณผ ์ ์๋ค๊ณ ์๊ฐํ๋ค. numpy "๊ฐ์ฅ ๊ฐ๊น์ด"(๋๋ ๊ธฐํ) ๋ฒ์ ์ ๊ฐ ๋ฐ์ดํฐ ํฌ์ธํธ์ ๋ํด ๋์ผํ ์ง์ (๋ฐฑ๋ถ์ ์)์ ๊ฐ์ง ์์ผ๋ฉฐ, H & F๋ "๊ฐ์ฅ ๊ฐ๊น์ด"์ ๋ํด ๋์ผํ ์ง์์ ์ ๊ณตํ๋ฉฐ ์ค๊ฐ ํฌ์ธํธ์ ๋ํด C = 1 / 2 ์ผ ์ ์์ต๋๋ค. ํ์คํ์ง ์์ต๋๋ค.
๋๋ ๊ณ์ ๋ฐ๋ณตํ๋ค. ๊ทธ๋ฐ์ง์ง ์ฃผ์ฅ (numpy์ ๊ฐ์ C = 1์ ๋ํ ๋ฐ๋)์ด ์ค์ ๋ก ์ง์ง ์ด์ ์ธ์ง ๋ชจ๋ฅด๊ฒ ๋ค.
ํธ์ง : ์ค๊ฐ ์ ์ numpy์์ ๋์ผํ ์ง์ (๋ฐ์ดํฐ ์ ์์ฒด๊ฐ ์๋ ๋ฐ์ดํฐ ์ ์ฌ์ด์ ์์ญ์ ๋ํด)์ด ์์ผ๋ฏ๋ก "C = 1"
@seberg ๋์ ํจ๊ป ์๋ํ์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํ๋ ์ฝ๋๋ฅผ ๊ฒ์ ํ ์ ์์ต๋๊น?
๊ธ์, ๋๋ ๊ฑฐ๊ธฐ์์๋ ์ฝ๋์์ ์๋ชป๋ ๋ถํธ๋ฅผ ์ป์์ผ๋ฏ๋ก ๋ฐ๋์์ต๋๋ค (C = 0์ด ์๋๋ผ C = 1).
def scale_percentiles(p, num, C=0):
"""
p : float
percentiles to be used (within 0 and 100 inclusive)
num : int
number of data points.
C : float
parameter C, should be 0, 0.5 or 1. Numpy uses 1, matlab 0.5, H&F is 0.
"""
p = np.asarray(p)
fact = (num+1.-2*C)/(num-1)
p *= fact
p -= 0.5 * (fact-1) * 100
p[p < 0] = 0
p[p > 100] = 100
return p
plt.figure()
plt.plot(np.percentile([0, 1, 2, 3], scale_percentiles(np.linspace(0, 100, 101), 5, C=0), interpolation='nearest'))
plt.plot(np.percentile([0, 1, 2, 3], scale_percentiles(np.linspace(0, 100, 101), 5, C=1), interpolation='nearest'))
plt.figure()
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=1), interpolation='linear'))
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=0.5), interpolation='linear'))
plt.plot(np.percentile([15, 20, 35, 40, 50], scale_percentiles(np.linspace(0, 100, 101), 5, C=0), interpolation='linear'))
@seberg ๋ซ์ง ๋ง ์์ง ์์ต๋๋ค. ๋ฅผ ๋ค์ด a = [0,1,2,3]
๋ฐ percentiles = [25, 50, 75, 100]
, np.percentile (a, scale_percentiles(percentiles, len(a), C=0), interpolation='nearest)
๋ฐํ [0, 2, 3, 3]
, ๊ทธ๊ฒ์ ๋ฐํํด์ผํ๋ ๊ฒฝ์ฐ [0,1,2,3]
.
๋ชฉ๋ก ๋ฐฑ๋ถ์ ์๋ฅผ dtype=np.float
๋ก ๋ง๋ค์ด์ผํ์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ํจ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง๋ง ๊ทธ๊ฒ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ณ ์ ์ ์ธ ๋ฐฉ๋ฒ์ ๊ธฐ๋ฅ์ ๊ฐ๋จํฉ๋๋ค.
๋ฐฑ๋ถ์ ์ / 100 * N-> ์ง์ ์ธ ์ ์์ธ ๊ฒฝ์ฐ, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ํ์ ์ ์ง์๋ก ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ C ์ธ์๋ ์์๋๋ก ์๋ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ฏ๋ก ์ฌ๋๋ค์ด ๋ณด๊ฐ์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ๊ตฌํํ ์ ์์ต๋๋ค. ๋๋ ์ฌ์ ํ ์ํคํผ๋์์ฒ๋ผ ์๋ํ๋ method = 'classic'๋๋ interpolation = 'none'์ ์ํฉ๋๋ค.
๋๋ฒ๊น ์ ์ํด ์ด๊ฒ์ ๊ณ ์ ์ ์ธ ๋ฐฉ๋ฒ์ ์ถ์ ํ ๋น numpy ๊ตฌํ์ ๋๋ค.
def percentile (arr, p):
arr = sorted(arr)
index = p /100 * len(arr)
# If index is a whole number, and larger than zero, subtract one unit (due to 0-based indexing)
if index%1 < 0.0001 and index//1 > 0:
index -= 1
return arr[int(index)]
๊ทธ๋ฆฌ๊ณ ๋ numpythonic ํ๋ :
def indexes_classic(percentiles, set_size):
percentiles = np.asarray(percentiles)
indexes = percentiles / 100* set_size
indexes[np.isclose(indexes%1, 0)] -= 1
indexes = np.asarray(indexes, dtype=np.int)
indexes[indexes < 0] = 0
indexes[indexes > 100] = 100
return indexes
์ด๋ฌํ ์ฐจ์ด์ ์ ๋ถ๋ ์์์ / ๋ฐ์ฌ๋ฆผ ๋ฌธ์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค.
์๊ณ ์๋ ๊ฒ ๊ฐ์), ์๋ง๋ C = 0์ ๋ํ ๋ด ์ถ์ธก์ด ์๋ชป๋์๊ณ ๋น์ ์
C = 0.5.
๋ด ์์ ์ ์ฐจ์ด์ ์ด ์ด๋์์ ์ค๋์ง ๋งํ๋ ๊ฒ์ด ์์ต๋๋ค ( "C ๋งค๊ฐ ๋ณ์"
IMO, ๋ง์ ๊ฒ์ ์ซ์ดํ ๋งํ ์ด์ ๊ฐ ์์ง๋ง
์กฐํฉ). ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ ๊ณต / ๊ตฌํํ๊ธฐ์ํ ๊ฒ์ด ์๋๋๋ค.
"๊ณ ์ ์ ์ธ"๋ฐฉ๋ฒ์ ๊ดํด์๋ ์์งํ ์ด๋ค ๊ณ ์ ์ ์ธ
์์ด์ผํฉ๋๋ค. ๋ด๊ฐ ์๋ ๋ชจ๋ ํด๋์์ "์๋นํ
์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. "
์๋ฃจ์
ํ๋ช
ํ ๋ด ์ฒซ์ธ์์ "ํด๋์"๋๋
์ด๋ฆ์ด ๋ช
ํํ์ง ์์ ๋ค๋ฅธ ํผ๋์ค๋ฌ์ด ์ต์
์ ์ถ๊ฐํฉ๋๋ค. ๋๋ ํฌ๋ง
์ด ํ ๋ก ์ ์ค์ ๋ก ๋ชจ๋ ๊ฒ์ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๊นจ๋ํ๊ณ ํฌ๋ช
ํ๊ฒ ์ฌ์ฉํ ์์๋ ์ข์ (๊ณตํต) ์ต์
๋ฐฉ๋ฒ. ์ฌ๋๋ค์ด ์ค์ ๋ก ์ดํดํ ์์๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์
๋๋ค.
๋ฐฉ๋ฒ์ ํ๋ ๋ ์ถ๊ฐ ํ ์ ์์ง๋ง ์์งํ ์ ๋ฐ ์ ๋๋ง ์ข์ํฉ๋๋ค. ์ธ์ ์ฐ๋ฆฌ๊ฐ
๋ง์ง๋ง์ผ๋ก ๋ ๋ง์ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ์ต๋๋ค (์ ํํ๊ฒ ๋ณ๊ฒฝ๋ ๋ด์ฉ์ด ๊ธฐ์ต ๋์ง ์์).
์ด๋ฏธ ์ง์ฐ๋์๊ณ ๋๊ตฐ๊ฐ๊ฐ ๋ฐ์ณ ๋์
์ฐ๋ฆฌ๊ฐ ๊ฐ์ ธ์ผ ํ ๊ฒ. ๋งํ ํ์๋์์ด ๊ทธ๊ฒ์ ์ค์ ๋ก ์ผ์ด๋ ์ ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ
๋๋ ์ฐจ์ด์ ์ ์ง์ ํ๊ณ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ง๋์ง ๋ณด๋ ค๊ณ ๋
ธ๋ ฅํ๊ณ ์์ต๋๋ค.
ํ์ฌ ๊ฐ์ง๊ณ ์๋ ๊ฒ์
๋๋ค.
๊ทธ๋์ ๋ด ์ธ์์ (๋ฐ์ฌ๋ฆผ๊ณผ ์ ํํ
๋ฐฑ๋ถ์ ์ ์ผ์น) ๋ง์ "๋ณด๊ฐ"์ต์
์ด ์์ต๋๋ค (์๋ง๋ ๋๋ฌด).
"C ๋งค๊ฐ ๋ณ์"๋๋์ด๋ฅผ ํธ์ถํ๋ ค๋ ๋ชจ๋ ๊ฒ์ด ํ์ํฉ๋๋ค.
๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ป๊ฒ ๋ชจ๋ ๊ฒ์ ๋งํด ์ค ์ ์๋ค๋ฉด ์ ๋ง ๊ธฐ์ ๊ฒ์
๋๋ค.
(๊ณตํต) "๋ฐฉ๋ฒ"์ ์ด๋ฌํ ๋ฒ์ฃผ์ ์ํฉ๋๋ค.
๊ทธ ์ด์์ผ๋ก C = 0,0.5,1์ ์ฌ์ง์ด ์กด์ฌํ๊ณ ์ด์ฉ๋ฉด ๊ทธ ๋ฐ์ ์ผ๋ถ๋
์ต์
....
์๋ชป๋ ์ฐจ์ ์ผ๋ก ๊ฐ๊ณ ์์ง๋ง "Method1"์
๋๊ตฌ์๊ฒ๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ ๋ค๋ฅธ์ง ๋งํ์ง ์๋ ๋ถ๋ช
ํ ํ ์ด๋ฆ
๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋์์ด๋์ง ์๋ ๊ฒ ๊ฐ์ต๋๋ค (
"Method1"์ด๋ผ๋ ์ด๋ฆ์ ์ด๋ฏธ ์๊ณ ์์ผ๋ฉฐ ์ฐพ๊ณ ์์ต๋๋ค. ๊ณผ
"ํด๋์"์ด ํ๋์ ๋ช
๋ฐฑํ ๊ฒ์ด๋ผ๊ณ ๋งํ์ง ๋ง์ญ์์ค.
๊ตฌํ์ ๋๋ฌด ๋ง์ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ "๋ณด๊ฐ๋ฒ"์ด์ง๋ง ๋ชฉ๋ก์ ๊ฐ๋ ๊ฒ์
๋๋ค.
of methods๋ "์ ํ ๋ณด๊ฐ"์ ์์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ข์ต๋๋ค.
๊ทธ๊ฒ์ ๋จ๊ณ์ ์ธ ํ๋์ด ์๋๋ผ๊ณ ๋งํ๋ ๊ฒ์
๋๋ค ... ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ ๊ฒํ๋ค๋ฉด,
๋๋ ์ฌ์ ํ ํฉ๋ฆฌ์ ์ธ ๊ฐ์๋ฅผ ์ํฉ๋๋ค.
๊ทธ๋ ๊ฒ ํ ํ์๋ ์์ง๋ง ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
๋ ๋ง์ ์ฌ๋๋ค์ ํผ๋์ค๋ฝ๊ฒํ์ง ์๊ณ ๋ช
ํํ๊ฒ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ!
๊ทธ๋ผ ์์ฝํ๊ฒ ์ต๋๋ค.
1) ํ์ฌ numpy๋ ๋ณด๊ฐ = '์ ํ'์ด๋ผ๋ ์ ์ฉํ ๋ฐฉ๋ฒ ํ๋๋ง ์ ๊ณตํ๊ณ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ค์ ๋ก ์๋ฌด๋ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์์ ๋ณํ์ ๋๋ค. ๋ค๋ฅธ ํจํค์ง์๋ ๋ ๋ง์ ๊ด๋ จ ์ต์ ์ด ์์ต๋๋ค.
2) C = 0 ๋๋ C = 0.5์ ๋ํ ๋ค๋ฅธ ๊ฐ์ ์ถ๊ฐํ๋ฉด ์ดํด๊ฐ๋ฉ๋๋ค. ๋ชจ๋ ๋ณด๊ฐ ๋ฐฉ๋ฒ์ ํจ๊ป ์๋ ํ ์ ์์ง๋ง ๋ค์๋ ์ฌ์ฉ๋์ง ์์ ๊ฒ์ ๋๋ค.
3) ๋ณด๊ฐ ๋ฐฉ๋ฒ๊ณผ C ์ธ์ ์ฌ์ด์ ์ฝค๋ณด ์ค ํ๋๊ฐ ๊ณ ์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋ณต์ ํ ์ ์๋ค๋ฉด (์ฐธ์กฐ ๋ฐ ์ํคํผ๋์์ ๋ด ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ด ์ด๊ฒ์ด ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๋ฅด์น๋ ๋ฐฉ๋ฒ์ด๋ผ๋ ๋ฐ ๋์ ํจ), ๋๋ ๊ทธ๊ฒ์ ๋ง์กฑํฉ๋๋ค. ์ด๋ฌํ ์ฝค๋ณด๊ฐ ๊ณ ์ ์ ์ธ ๋น๋ณด ๊ฐ ๋ฐฉ๋ฒ์ ์์ฑํ๋ค๊ณ ๋ฌธ์์ ๋ช ์๋์ด ์์ต๋๋ค. ํ๋กํธ ์ ๋ฐ๋ ๋ฌธ์ ๋๋ฌธ์ธ์ง ํ์คํ์ง ์์ง๋ง๋ณด๋ค ํตํฉ ๋ ๋ฐฉ์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ์ํ ๊ทํ์ ๋ ธ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค!
4) ์ด๋ค ์ฝค๋ณด๋ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํ๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋ง๋ interpolation = 'none'์ด๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด ๋ ํผ๋ ์ค๋ฌ์ธ ๊ฒ์ ๋๋ค.
์์ฝํ๋ฉด, numpy.percentile์ ํ์ฌ ์ต์ ์ ๋ค์ ํผ๋์ค๋ฝ๊ณ ์ ํ์ ์ผ๋ก ๋ณด์ ๋๋ค. ์์์ ์ธ๊ธ ํ ๋ฌธ์๋ ๋ค๋ฅธ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋ํ ์ข์ ๊ฐ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ํค ๋ฐฑ๊ณผ ํ์ด์ง์ ํจ๊ป numpy.percentile์ ๋ํ๋ณด๋ค ํฌ๊ด์ ์ด๊ณ ์ ์ฉํ ์ต์ ์ธํธ๋ฅผ ๋์์ธํ๊ธฐ์ํ ์์์ ์ผ๋ก ์๋ ํ ์ ์์ต๋๋ค. ๋๊ตฐ๊ฐ๊ฐ์ด ์์ ์ ์ํํ๊ณ ์ถ์ดํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ์ฌ์ "๊ฐ์ฅ ๊ฐ๊น์ด"์ด ์ผ๋ถ / ์ด๋ค ๊ฒฝ์ฐ์๋ ์๋ฏธ๊ฐ ์์ต๋๊น? ๊ฐ๊ฒฉ ๋ฐฉ๋ฒ ( "C") ๋๋ ์ด๋ค ๊ฒ์ด ์ ํ ๋ณด๊ฐ / ๋ถ์ ํญ๋ชฉ์ ๋ํด ๊ทธ๋ ๊ฒ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ, ์๋ฌด๋ ๋น ๋ถ์ ๊ทผ์ฌ๋ฅผ ์ํด ๊ทธ๋ ๊ฒํ์ง ์์๋์ง ๋๋์ต๋๊น?! ์์ ์ง์์ด์ด ๋ชจ๋ ๊ฒ์ด ์ค์ํ๊ณ ๋ณด๊ฐ ๋ฐฉ๋ฒ์ ๋ํด CDF ์ญ ์ธ์๋ฅผ ๋คํํ๋ ์ด์ ๊ฐ ์์ต๋๊น?
์ฝค๋ณด๋ ์ดํดํ ์ ์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ฒ์ด ์ฐพ๊ธฐ ์ฌ์ด ๊ฒฝ์ฐ๊ฐ ์๋๋ฉด ์ธ๋ชจ๊ฐ ์์ต๋๋ค. ๋ณด๊ฐ์ ์ํด ๋ง์ ์ต์ ์ด ์กด์ฌํ๋ ๊ฒ ๊ฐ์ต๋๋ค (์ : http://mathworld.wolfram.com/Quantile.html Q4 ~ Q9, R ๋ฌธ์๋ ๊ฑฐ์ ๋์ผํ๋ค๊ณ ์๊ฐํ์ง๋ง matlab๊ณผ ๊ฐ์ด ์์ ํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค ...) ์ค์ ๋ก ๋ชจ๋ ์ดํด๊ฐ๋๋ค๋ฉด ๋จ์๊ฐ ์์ต๋๋ค.).
๋ฌธ์ ๋ ์ ํํ ์ ์ ๋ ํฌ์ธํธ ์ฌ์ด์์ ๋ฌด์์ํด์ผํ๋์ง์ ๋ํ "๋ณด๊ฐ"ํฌ์ธํธ์ ๋๋ค.ํ์ง๋ง ์ต์ํ "์ ํ ๋ณด๊ฐ"์ ์ฌ์ฉํ ๋ ์ด๋ฌํ ํฌ์ธํธ๋ฅผ ๋ฐฐ์นํ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง (์ด์ํ๊ฒ๋ ๋ง์)๊ฐ ์์ผ๋ฏ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ์๋ชป๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ณด์ ๋๋ค. ๋ง์ด ๋ค๋ฆฌ๋ "๊ฐ์ฅ ๊ฐ๊น์ด ์์"๋ณด๊ฐ = "๊ฐ์ฅ ๊ฐ๊น์ด"์ ์ํ์ง๋ง ์ ํํ "ํ๋กํ ์์น"์ ์ ํ์ "๋นํ์ค"์ผ๋ก ๋ณด์ด๋ฏ๋ก ์ถ์ธกํ๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์๋ชป๋ ์ ํ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๋ ๋ชจ๋ ๊ฒ์ ๊ณต๊ฒฉ์ ์ผ๋ก ๋น๋ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค (์๋ง๋ ์ ํ์ ์ ์ธํ๊ณ ).
์ฐ๋ฆฌ๋ ๋ ์ด์ ์ฌ์ฉํ์ง๋ง, ๋๋ ๊ทธ๊ฒ์ 100 %์ ๊ถ๋ฆฌ๋ฅผ ์ป์ผ๋ ค๋ฉด, ๊ทธ๊ฒ์ ์ด๋ค ์กด์ฌํด์ผํ๊ณ ๋ฌด์์ definetly ์กด์ฌํ์ง ์์์ผ ์กด์ฌ ๋ฌด์์ธ์ง์ ์ข ๋ ๋ช ํํด์ผ ํ ์๋ ์์ต๋๋ค.
์ ์ ์ผ๋ก ๋์ํฉ๋๋ค
@ ricardoV94 : # 9211์์ ์ ์ ๋ ๊ฐ์ค ๋ถ์์ ์ผ์ด์ค์ ๋ํ linear
์ ์ ์์ ๋ํ ์๊ฒฌ์ด ์์ต๋๊น? ๊ฐ์ ์คํ์ผ์ ๊ทธ๋ํ๊ฐ ๋ช ๊ฐ ์์ต๋๋ค.
์๋ง๋ @ ricardoV94 ๊ฐ ๊ทธ๊ฒ์ ๋ํด ๋ ผํ ํ ์ ์์์ง๋ ๋ชจ๋ฅด์ง๋ง (
๋ํ ํด๋น PR์ ๋ํด josef-pkt๋ฅผ ํ (ping) ํ ์ ์์ผ๋ฉฐ ๊ทธ๊ฐ ์ข์ ์๊ฐ / ์ณ๋ค๊ณ ์๊ฐํ๋์ง์ ๋ํ ๋น ๋ฅธ ์๊ฒฌ์ ์ ๊ณตํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๊ตฐ๊ฐ ์ฌ๊ธฐ์์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด ๋ค์์ ๊ณ์ฐํ๋ ์ต์ ํ๋์ง ์์ ํจ์๋ฅผ ์์ฑํ์ต๋๋ค.
Hyndman and Fan (1996)์ ์ํด ์ค๋ช
๋๊ณ R ์์๋ ์ฌ์ฉ๋๋ 9 ๋ฐฑ๋ถ์ ์ / ์ฌ ๋ถ์์ ์ถ์ ๋ฐฉ๋ฒ.
๋ฐฉ๋ฒ 1์ Wikipedia ์์ ๋ ผ์ ๋ '๊ณ ์ ์ ์ธ ๊ฐ์ฅ ๊ฐ๊น์ด ์์ ๋ฐฉ๋ฒ'์ ํด๋นํฉ๋๋ค. ๋ฐฉ๋ฒ 7์ ํ์ฌ Numpy ๊ตฌํ๊ณผ ๋์ผํฉ๋๋ค (๋ณด๊ฐ = '์ ํ'). Numpy ๋ณด๊ฐ์ ๋๋จธ์ง ๋ฐฉ๋ฒ์ ํฌํจ๋์ด ์์ง ์์ต๋๋ค (์ด์จ๋ ์ ์ฉํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค).
def percentile(x, p, method=7):
'''
Compute the qth percentile of the data.
Returns the qth percentile(s) of the array elements.
Parameters
----------
x : array_like
Input array or object that can be converted to an array.
p : float in range of [0,100] (or sequence of floats)
Percentile to compute, which must be between 0 and 100 inclusive.
method : integer in range of [1,9]
This optional parameter specifies one of the nine sampling methods
discussed in Hyndman and Fan (1996).
Methods 1 to 3 are discontinuous:
* Method 1: Inverse of empirical distribution function (oldest
and most studied method).
* Method 2: Similar to type 1 but with averaging at discontinuities.
* Method 3: SAS definition: nearest even order statistic.
Methods 4 to 9 are continuous and equivalent to a linear interpolation
between the points (pk,xk) where xk is the kth order statistic.
Specific expressions for pk are given below:
* Method 4: pk=kn. Linear interpolation of the empirical cdf.
* Method 5: pk=(kโ0.5)/n. Piecewise linear function where the knots
are the values midway through the steps of the empirical cdf
(Popular amongst hydrologists, used by Mathematica?).
* Method 6: pk=k/(n+1), thus pk=E[F(xk)]. The sample space is divided
in n+1 regions, each with probability of 1/(n+1) on average
(Used by Minitab and SPSS).
* Method 7: pk=(kโ1)/(nโ1), thus pk=mode[F(xk)]. The sample space
is divided into n-1 regions (This is the default method of
Numpy, R, S, and MS Excell).
* Method 8: pk=(kโ1/3)/(n+1/3), thus pkโmedian[F(xk)]. The resulting
estimates are approximately median-unbiased regardless of the
distribution of x (Recommended by Hyndman and Fan (1996)).
* Method 9: k=(kโ3/8)/(n+1/4), thus pkโF[E(xk)]if x is normal (?).
The resulting estimates are approximately unbiased for the expected
order statistics if x is normally distributed (Used for normal QQ plots).
References:
Hyndman, R. J. and Fan, Y. (1996) Sample quantiles in statistical packages,
American Statistician 50, 361--365.
Schoonjans, F., De Bacquer, D., & Schmid, P. (2011). Estimation of population
percentiles. Epidemiology (Cambridge, Mass.), 22(5), 750.
'''
method = method-1
x = np.asarray(x)
x.sort()
p = np.array(p)/100
n = x.size
m = [0, 0, -0.5, 0, 0.5, p, 1-p, (p+1)/3, p/4+3/8][method]
npm = n*p+m
j = np.floor(npm).astype(np.int)
g = npm-j
# Discontinuous functions
if method < 3:
yg0 = [0, 0.5, 0][method]
y = np.ones(p.size)
if method < 2:
y[g==0] = yg0
else:
y[(g==0) & (j%2 == 0)] = yg0
# Continuous functions
else:
y = g
# Adjust indexes to work with Python
j_ = j.copy()
j[j<=0] = 1
j[j > n] = n
j_[j_ < 0] = 0
j_[j_ >= n] = n-1
return (1-y)* x[j-1] + y*x[j_]
์ฐ์ ๋ฉ์๋๋ ์ด์ ๊ฐ์ด๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์์ต๋๋ค.
def percentile_continuous(x, p, method=7):
'''
Compute the qth percentile of the data.
Returns the qth percentile(s) of the array elements.
Parameters
----------
x : array_like
Input array or object that can be converted to an array.
p : float in range of [0,100] (or sequence of floats)
Percentile to compute, which must be between 0 and 100 inclusive.
method : integer in range of [4,9]
This optional parameter specifies one of the 5 continuous sampling
methods discussed in Hyndman and Fan (1996).
'''
x = np.asarray(x)
x.sort()
p = np.asarray(p)/100
n = x.size
if method == 4:
r = p * n
elif method == 5:
r = p * n + .5
elif method == 6:
r = p * (n+1)
elif method == 7:
r = p * (n-1) + 1
elif method == 8:
r = p * (n+1/3) + 1/3
elif method == 9:
r = p * (n+1/4) + 3/8
index = np.floor(r).astype(np.int)
# Adjust indexes to work with Python
index_ = index.copy()
index[index_ <= 0] = 1
index[index_ > n] = n
index_[index_ < 0] = 0
index_[index_ >= n] = n-1
i = x[index - 1]
j = x[index_]
return i + r%1* (j-i)
๋๊ตฌ๋ ์ง ์ฌ๊ธฐ์์ ๊ฐ์ ธ๊ฐ ์ฌ๋์ด ์์ต๋๊น? ๋๋ ๊ทธ๋ ๊ฒ ํ ์๊ฒฉ์ด ์์ต๋๋ค.
์ด์ ๊ฒ์๋ฌผ์์ ์ธ๊ธํ๋ฏ์ด numpy์ ํ์ฌ ๊ธฐ๋ณธ Quantile ๊ตฌํ์ R
๊ฒ๊ณผ ์ผ์นํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
R
:
> quantile(c(15, 20, 35, 40, 50), probs=c(0.05, 0.3, 0.4, 0.5, 1))
5% 30% 40% 50% 100%
16 23 29 35 50
> quantile(c(3, 6, 7, 8, 8, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1))
25% 50% 75% 100%
7.25 9.00 14.50 20.00
> quantile(c(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1))
25% 50% 75% 100%
7.5 9.0 14.0 20.0
np.quantile
:
>>> np.quantile([15, 20, 35, 40, 50], q=[0.05, 0.3, 0.4, 0.5, 1])
array([16., 23., 29., 35., 50.])
>>> np.quantile([3, 6, 7, 8, 8, 10, 13, 15, 16, 20], q=[0.25, 0.5, 0.75, 1])
array([ 7.25, 9. , 14.5 , 20. ])
>>> np.quantile([3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20], q=[0.25, 0.5, 0.75, 1])
array([ 7.5, 9. , 14. , 20. ])
๋ฌผ๋ก Wikipedia์ ์ ๊ณต๋ ์์ ๋ฅผ ์ฌํํ์ง ์์ต๋๋ค.
https://en.wikipedia.org/wiki/Percentile
์ค์ ๋ก quantile https://www.rdocumentation.org/packages/stats/versions/3.5.0/topics/quantile์ ๋ํ R ๋์๋ง ํ์ด์ง๋ก ์ด๋ํ๋ฉด
R ๊ธฐ๋ณธ ๋ฐฉ๋ฒ (์ ํ 7)์ด np.quantile
์ค์ ๋ฐฉ๋ฒ๊ณผ ๋์ผํ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ์ค์ ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. p_k = (k-1) / (n-1)
, ์ฌ๊ธฐ์ n์ ์ํ ํฌ๊ธฐ์ด๊ณ k = 1์ ๊ฐ์ฅ ์์ ๊ฐ์ ๋ํ๋
๋๋ค. ๊ฐ, k = n์ด ๊ฐ์ฅ ํฝ๋๋ค. ์ฆ, ์ ๋ ฌ ๋ ๋ฐฐ์ด์์ ๊ฐ์ฅ ์์ ๊ฐ์ quantile = 0์ ๊ณ ์ ๋๊ณ ๊ฐ์ฅ ํฐ ๊ฐ์ quantile = 1์ ๊ณ ์ ๋ฉ๋๋ค.
๋ํ ์ด์ ๊ฒ์๋ฌผ์์ ์ธ๊ธํ๋ฏ์ด ์ ํ 1์ ์ฌ์ฉํ์ฌ Wikipedia์ 3 ๊ฐ์ง ์์ ๋ฅผ ์ฌํ ํ ์ ์์ต๋๋ค.
> quantile(c(15, 20, 35, 40, 50), probs=c(0.05, 0.3, 0.4, 0.5, 1), type=1)
5% 30% 40% 50% 100%
15 20 20 35 50
> quantile(c(3, 6, 7, 8, 8, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1), type=1)
25% 50% 75% 100%
7 8 15 20
> quantile(c(3, 6, 7, 8, 8, 9, 10, 13, 15, 16, 20), probs=c(0.25, 0.5, 0.75, 1), type=1)
25% 50% 75% 100%
7 9 15 20
์ด๋ ๋ช ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์ ์ ๊ธฐํฉ๋๋ค.
1.) np.quantile์ ๊ธฐ๋ณธ์ด R.quantile์ ๊ธฐ๋ณธ์ ์ถ์ ํด์ผํฉ๋๊น?
2.) np.quantile์ด ์ ํ 1 ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ ํํด์ผํฉ๋๊น?
Wikipedia ์์ฒด์กฐ์ฐจ๋ ๋ฐฑ๋ถ์ ์์ ๋ํ ํ์ค ์ ์๊ฐ ์๋ค๋ ๋ฐ ๋์ํ๊ธฐ ๋๋ฌธ์ ์๊ณ ๋ฆฌ์ฆ์ด ๊ฑด์ ํ๊ณ ์ฌ์ฉ์๊ฐ ์๋ ๋ฐฉ์์ ์๊ณ ์๋ ํ (1) ๋๋ (2) ๊ทธ๋ค์ง ์ค์ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. Python๊ณผ R์ ๊ฐ์ฅ ์ธ๊ธฐ์๋ ๋ฐ์ดํฐ ๋ถ์ ํ๋ซํผ ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์ (1)์ ๋ ์ ํธํฉ๋๋ค. ์๋ก๋ฅผ ๊ฒ์ฆ ํ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ๊ทธ๋์ (2)๋ ๋ถํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์, R๊ณผ Numpy ๋ชจ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐฉ๋ฒ 7์ ์ฌ์ฉํ๋ฏ๋ก ๊ทธ๋๋ก ์ ์งํด์ผํฉ๋๋ค. ๋ฌธ์ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ถ๊ฐํ๋์ง ์ฌ๋ถ์ ๋๋ค.
๊ด์ฌ์ด์๋ ์ฌ๋์ด ์๋ค๋ฉด ์ฌ๊ธฐ์ 9 ๊ฐ์ ๋ฐฑ๋ถ์ ์ ๋ฐฉ๋ฒ์ด์๋ ๋ ๋ฆฝ ๋ชจ๋์ ์์ฑํ์ต๋๋ค. ๋ฐฉ๋ฒ์ ์๊ณ ์๋ค๋ฉด ์์ ๋กญ๊ฒ ์ฌ์ฉํ๊ฑฐ๋ Numpy์ ์ ์ํ์ญ์์ค.
@ ricardoV94 ๊ฐ์ฌํฉ๋๋ค.
๊ทธ๋์ ๊ทธ๋ฅ ํฅ์ ์ํด R ์ฌ์ฉ์๋ฅผ ๋์์ผ๋ก ์ค๋ฌธ ์กฐ์ฌ๋ฅผ ์ค์ํ์ต๋๋ค. ์๋ต ํ 20 ๋ช
์ค 20 ๋ช
์ quantile
์ ๊ธฐ๋ณธ ๋ฐฉ๋ฒ ๋ง ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋ค์ ๊ณต์ค ๋ณด๊ฑด ์์ฌ ๊ณผ์ ์์ ํต๊ณํ ๋ฐ์ฌ ์ฐ๊ตฌ์๊น์ง ๋ค์ํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก numpy๊ฐ ๋ถ์์๋ฅผ ๊ณ์ฐํ๋ 9 ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ง์ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ ๊ฐ์น๊ฐ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋๋ถ๋ถ์ ์ฌ์ฉ์๋ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋งํ ๊ฐ์น๊ฐ์๋ ๊ฒ์ 9 ๊ฐ์ ๋ฉ์๋ ์ค 6 ๊ฐ (์ฐ์์ ์ธ ๋ฉ์๋)๋ฅผ ์ง์ํ๋ scipy.stats.mstats.mquantiles ํจ์์ด๋ฉฐ ๋ฌธ์๋ R ๊ตฌํ๊ณผ์ ๋งํฌ๋ฅผ ๋งค์ฐ ๋ช ์ ์ ์ผ๋ก ์ค๋ช ํฉ๋๋ค.
@albertcthomas ์, ์ ์๊ณ ์์ต๋๋ค. ๋น๋ก ์ด์์ ์ผ๋ก๋ ์ฐ๋ฆฌ๊ฐ์ด ๋ณต์ก์ฑ์ numpy๋ก ์จ๊ธธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ๋๋ถ๋ถ ์ฐ์๋์ง ์์ IIRC ๋ฒ์ ์ ์์ ํด์ผํฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์, numpy๋ scipy stats ๋ชจ๋์์ ๊ตฌํ ๋ ๊ฒฝ์ฐ ์ด๋ฌํ ๋ฉ์๋๋ฅผ ๋ฐ๋์ ์ง์ํ ํ์๋ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ๋๋ ๋์ ๋ถํฌ ํจ์์ ์ผ๋ฐํ ๋ ์ญ์ผ๋ก๋ถํฐ ๋ถ์์๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ์ ์ ํธํฉ๋๋ค. ๊ทธ๋ฌํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค๋ ์ฌ์ค์ด ๋๋ฅผ์ด ๋ฌธ์ ๋ก ์ด๋์์ต๋๋ค. :).
@albertcthomas์ ๋ํ ํํธ / ์ง์์ด ์์ผ๋ฉด ๊ทธ๋ ๊ฒ ๋ง ํด์ฃผ์ธ์! ์ฐ๋ฆฌ๋ ์ค์ ๋ก ์ข์ ๊ธฐ๋ณธ๊ฐ์ด ๋ฌด์์ธ์ง ๋ช ํํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ ๊ฐํ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ๊ฝค ์ฑ๊ฐ์ ๋ฌธ์ ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๋ช ๊ฐ์ง ์ข์ ๊ธฐ๋ณธ๊ฐ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์๋ง๋ 2-3 ๊ฐ์ ๋ฉ์๋๋ฅผ ๊ตฌํํ๋ ๊ฒ์ ์๋ฏธ ํ ๊ฒ์ ๋๋ค (์ฐ์๋์ง ์์ ๋ฉ์๋๋ฅผ ์์ ํ ์์ ). ์ข ๋ ๋ณต์กํ ๊ฒ์ ์ง์ํ๋ ๊ฒ์ ๊ด์ฐฎ์ง ๋ง "์ ํ์ ์ด๊ณ ์ข์"๊ฒ์ ๋ช ๊ฐ์ง ๊ฒฐ์ ํ ์ ์๋ค๋ฉด ์ข๊ฒ ์ต๋๋ค.
์ ํ ๋ฐฉ๋ฒ (ํ์ฌ ๊ธฐ๋ณธ๊ฐ)๊ณผ ๋์ ๋ถํฌ ํจ์์ ์ญ (์ด ๋ฌธ์ ๋ฅผ ๋ง๋ค ๋ ์ฐพ๋ ์ญ)์ด โโ์ถฉ๋ถ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค . ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด๊ฐ์ ์ํ๋์ง ์ฌ๋ถ๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ตฌํ ๋ ๋ค๋ฅธ ๋์์ ํ์คํ ์ ๊ฑฐ๋์ด์ผํฉ๋๋ค.
๋์ ๋ถํฌ ํจ์์ ์ญํจ์๋ฅผ ํ์คํ ์ถ๊ฐํด์ผํฉ๋๋ค. ํต๊ณ์์ ์ฃผ์ด์ง ๊ด์ธก ์ํ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ๋ถ์์ ์ถ์ ์น ์ค ํ๋์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ตฌํ ๋ ๋ค๋ฅธ ๋์์ ํ์คํ ์ ๊ฑฐ๋์ด์ผํฉ๋๋ค.
@ ricardoV94 ๋ ๋์์ด Wikipedia ๋ Hyndman๊ณผ Fan์ ๋ ผ๋ฌธ์์ ์ธ๊ธ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋งํ๋ ๊ฒ์ ๋๊น?
์, ๋ค๋ฅธ ํจํค์ง์์๋ ๊ตฌํ๋์ง ์์ต๋๋ค.
๋๋ ์ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ณ ์ถ์ดํ๋์ง ์์ง ๋ชปํ๋ฉฐ ๊ทธ๋ค์ ์ด๋ฆ์
๋ํ ์คํด์ ์์ง๊ฐ ์์ต๋๋ค.
Albert Thomas [email protected] escreveu no dia quarta, 2019 ๋
2 ์ 1 ์ผ
ร (s) 14:18 :
๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ตฌํ ๋ ๋ค๋ฅธ ๋์์ ํ์คํ
์ ๊ฑฐ๋์์ต๋๋ค.@ ricardoV94 https://github.com/ricardoV94 ๋น์ ์ด ์ด๊ฒ์ ๋งํ๋ ์ด์ ๋
๋์์ Wikipedia ๋ Hyndman์์ ์ฐธ์กฐ๋์ง ์์ผ๋ฉฐ
ํฌ์ ์ข ์ด?โ
๋น์ ์ด ์ธ๊ธ ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๊ณ ์์ต๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/numpy/numpy/issues/10736#issuecomment-450861068 ๋๋ ์์๊ฑฐ
์ค
https://github.com/notifications/unsubscribe-auth/AbpAmfUoJNk3YHOSHNeVN03Va5wtvkHQks5u_LGugaJpZM4SnVpE
.
๊ฐ์ฌ! np.percentile์์ ์ฌ์ฉํ ์์๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์ ๋ถํฌ์ ์ญ์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ํด PR์ ์ด์ด ๋ณด๋ ๊ฒ์ ์ด๋จ๊น์? ๋์์ ๋ํด ๊ณ์ ๋ ผ์ํ๋ ค๋ ๊ฒฝ์ฐ์ด ๋ฌธ์ ๋ฅผ ์ด์ด ๋๋ ๋์ (๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์งํด์ผํ๋ ํ์ฌ ๊ธฐ๋ณธ๊ฐ ์ ์ธ). numpy์์ ์ง์ ์ค๋จ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋ฉ๋๊น?
์ฌ๊ธฐ์ ๋ ๋ง์ ์ ๋ณด-Python 3.8์์ statistics.quantiles
์ถ๊ฐ- np.quantile
๋๋ฑํ ๋ชจ๋๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ๋ฒ์ ์ดํด ๋ด์ผํฉ๋๋ค.
์ฌ๊ธฐ์ ์์ผ๋ก ๋์๊ฐ๋ ๋ฐฉ๋ฒ์ statistics
ํ๋๋ฅผ ๋ฏธ๋ฌ๋งํ๋ method
kwarg๋ฅผ ์ถ๊ฐํ๊ณ 0-2 ๊ฐ๋ฅผ ๋ ์ถ๊ฐ ํ ์ ์์ต๋๋ค (์ด ๊ฒฝ์ฐ ์๋ ์์ฑ์๋ฅผ python์์ pingํ๋ ๊ฒ์ด ์ข์ต๋๋ค). .
๊ธฐ๋ณธ๊ฐ์ด ์ฐ๋ฆฌ์ ๊ทธ๋ค์ ๊ฒ ์ฌ์ด์ ์ผ์นํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ถ๋๋ฌ ์ธ ๊ฒ์ ๋๋ค.ํ์ง๋ง ์ฌ์ ํ ์ต์ ์ ์์ด๋์ด ์ธ ๊ฒ ๊ฐ์ต๋๋ค (๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๊ฐ ์ผ๋์ ๋์๋ ๊ฑฐ์ ๋๋ถ๋ถ). 0-2 ๊ฐ์ ์๋ก์ด "๋ฐฉ๋ฒ"๋ ์ถ๊ฐ ํ ์ ์์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ ์ค์ ์ด๋ฆ์ ๋ํด ํ์ด์ฌ ํต๊ณ ์ฌ๋๋ค์๊ฒ ํ์ ๋ณด๋ด๋ ๊ฒ์ด ์ข์ต๋๋ค.
PR์ ๋งค์ฐ ํ์ํฉ๋๋ค. ์์ผ๋ก ๋์๊ฐ๊ณ ์ถ์ง๋ง ์กฐ๋ง๊ฐ ๊ทธ๋ ๊ฒํ์ง ์๊ฒ ์ต๋๋ค.
@ eric-wieser ๊ด๋ จ PR์ด ๋ช ๊ฐ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ 1.19๋ก ๋ฐ์ด์ ์ฐจ๋จ์ ๊ฐ ์๋๋๋ค. ํ์ง๋ง ๊ทธ๋ ๋ค๊ณ 1.18์์ ๊ณ ์น ์ ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค. :)
@charris : ์ด๋ค PR์ ์ผ๋์๋๊ณ ๊ณ์ญ๋๊น?
์ํ๊น๊ฒ๋ ์์ง์ด ๋ฐฉํฅ์๋ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.