Python에서 SciPy, NumPy 및 Pandas를 사용하여 데이터 비닝
데이터 및 사용 사례가 기하급수적으로 증가함에 따라 이 데이터를 이해하기 위해 데이터 비닝 또는 분류가 필요합니다.
데이터 비닝과 관련하여 데이터 클러스터링 또는 회귀 분석과 같은 보다 고전적인 통계 기술과 같은 다양한 기술을 사용할 수 있습니다.
데이터 비닝이 필요한 이유와 어떤 기술이 어떤 상황에 가장 적합한지 알아볼 것입니다.
Python의 비닝
Binning은 서로 다른 변수의 관계를 추론하는 가장 강력한 분석 기술 중 하나입니다.
비닝은 패턴과 추세를 나타내기 위해 변수를 서로 다른 세트로 분류하는 비모수적이고 매우 유연한 기술입니다. 다양한 데이터 세트와 작은 샘플 크기에 광범위하게 적용할 수 있습니다.
비닝은 데이터를 빈으로 그룹화하는 프로세스입니다. 데이터 포인트를 범위별로 그룹화하거나 데이터 포인트를 밀도별로 그룹화하거나 데이터 포인트를 유사성별로 그룹화하는 등 다양한 목적으로 수행할 수 있습니다.
numpy.digitize()
함수, pandas.cut()
함수 사용 및 scipy.stats.binned_statistic()
함수 사용과 같이 파이썬에서 데이터를 비닝하는 다양한 방법이 있습니다.
모든 방법에는 장단점이 있으므로 작업에 적합한 방법을 선택하는 것이 필수적입니다.
데이터 비닝의 중요성
데이터 비닝은 보다 간단한 분석을 위해 데이터를 분류하는 단순한 개념입니다. 예를 들어 CSV에 여러 개의 큰 데이터 테이블이 있고 데이터를 더 작은 청크로 나누고 싶을 수 있습니다.
데이터 비닝을 사용하면 데이터를 다른 그룹에 넣어 더 잘 분석할 수 있으며 이를 사용하여 멋진 시각화를 만들 수도 있습니다.
그렇다면 데이터 비닝이 필요한 이유는 무엇일까요? 첫째, 데이터 비닝은 데이터를 더 잘 분석하는 데 도움이 되기 때문에 필수적입니다. 예를 들어 전체 데이터 테이블을 이해하거나 시각화하기 쉬운 더 작은 청크로 분할할 수 있습니다.
데이터 범주화를 사용하면 데이터에서 패턴을 찾고 이상값을 쉽게 식별할 수 있습니다. 이를 통해 방대한 데이터 세트를 가져오고 문제의 핵심에 도달하기 위해 더 관리하기 쉽게 만들 수 있습니다.
데이터 비닝은 연속 변수를 불연속 빈으로 세분하는 프로세스입니다. 대략적인 예로, 환자의 온도 변수가 있는 경우 온도를 5개의 빈으로 분류할 수 있습니다(예: < 36.5, 36.5–37.5, 37.5–38.5, 38.5–39.5 및 > 39.5
).
이 장점은 빈 범위를 사용하여 히스토그램 또는 박스 플롯에서 변수를 시각화할 수 있다는 것입니다.
파이썬에서 데이터를 비닝하는 다양한 방법
Python에서 데이터를 비닝하는 방법에는 여러 가지가 있지만 SciPy
및 NumPy
라이브러리를 사용하는 것이 가장 효율적입니다.
SciPy
및 NumPy
를 사용하여 Python에서 데이터 비닝
SciPy
및 NumPy
로 시작하려면 비닝할 데이터 포인트 목록이 있다고 가정해 보겠습니다. 첫 번째 단계는 SciPy
및 NumPy
라이브러리를 가져오는 것입니다.
import numpy as np
import scipy as sp
다음으로 저장소의 가장자리를 정의해야 합니다. linspace
기능을 사용하여 수행할 수 있습니다.
bin_edges = np.linspace(start, stop, num=num_bins)
여기서 start
및 stop
은 각각 데이터의 최소값 및 최대값이고 num_bins
는 만들려는 bin의 수입니다. 마지막으로 SciPy
히스토그램 기능을 사용하여 데이터를 비닝할 수 있습니다.
binned_data = sp.histogram(data, bin_edges)
binned_data
변수는 이제 두 개의 요소가 있는 튜플을 포함합니다. 첫 번째 요소는 비닝된 데이터의 배열이고 두 번째 요소는 빈 가장자리의 배열입니다.
Python에서 Numpy
를 사용하여 데이터를 Bin으로 지정
코드 예:
# import Numpy library
import numpy
# define the edges of bin
data = numpy.random.random(100)
bins = numpy.linspace(0, 1, 10)
# finally, bin the data using numpy
digitized = numpy.digitize(data, bins)
bin_means = [data[digitized == i].mean() for i in range(1, len(bins))]
bins = numpy.linspace(0, 1, 10)
digitized = numpy.digitize(data, bins)
[data[digitized == i].mean() for i in range(1, len(bins))]
출력:
[0.05308461260140375,
0.16559348769870028,
0.28950800899648155,
0.3874228665181473,
0.5046647094141071,
0.6254841134474202,
0.7216935463408317,
0.8374773268113803,
0.9421576008815353]
Pandas
를 사용하여 Python에서 데이터 비닝
코드 예:
# import libraries
import numpy as np
import pandas
df = pandas.DataFrame({"a": np.random.random(100), "b": np.random.random(100) + 10})
# will Bin the data frame by "a" in 10 bins
bins = np.linspace(df.a.min(), df.a.max(), 10)
groups = df.groupby(pandas.cut(df.a, bins))
# Get the b mean that the values will bin
print(groups.mean().b)
출력:
a
(0.00762, 0.117] 10.576639
(0.117, 0.226] 10.319629
(0.226, 0.335] 10.633805
(0.335, 0.444] 10.404979
(0.444, 0.553] 10.551616
(0.553, 0.662] 10.420306
(0.662, 0.771] 10.434091
(0.771, 0.88] 10.402038
(0.88, 0.989] 10.537547
Name: b, dtype: float64
SciPy
를 사용하여 Python에서 데이터 비닝
코드 예:
# import libraries
import numpy as np
from scipy import stats
# define array
arr = [20, 2, 7, 1, 34]
print("\narr : \n", arr)
# start binning
print(
"\nbinned_statistic for median : \n",
stats.binned_statistic(arr, np.arange(5), statistic="median", bins=4),
)
출력:
Array = [20, 2, 7, 1, 34]
Binned statistics for median
BinnedStatisticResult(statistic=array([ 2., nan, 0., 4.]), bin_edges=array([ 1. , 9.25, 17.5 , 25.75, 34. ]), binnumber=array([3, 1, 1, 1, 4], dtype=int64))
Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn