Python에서 SciPy, NumPy 및 Pandas를 사용하여 데이터 비닝

Zeeshan Afridi 2023년6월21일
  1. Python의 비닝
  2. 데이터 비닝의 중요성
  3. 파이썬에서 데이터를 비닝하는 다양한 방법
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 라이브러리를 사용하는 것이 가장 효율적입니다.

SciPyNumPy를 사용하여 Python에서 데이터 비닝

SciPyNumPy로 시작하려면 비닝할 데이터 포인트 목록이 있다고 가정해 보겠습니다. 첫 번째 단계는 SciPyNumPy 라이브러리를 가져오는 것입니다.

import numpy as np
import scipy as sp

다음으로 저장소의 가장자리를 정의해야 합니다. linspace 기능을 사용하여 수행할 수 있습니다.

bin_edges = np.linspace(start, stop, num=num_bins)

여기서 startstop은 각각 데이터의 최소값 및 최대값이고 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 Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn