np.random.choice
함수를 사용하여 Categorical data를 랜덤으로 생성합니다.
np.random.choice
random_data = np.random.choice(
a=['a', 'b', 'c', 'd'],
size=687,
p=[0.1, 0.2, 0.3, 0.4] # 합이 1이 아닌 경우 오류
)
unique, counts = np.unique(random_data, return_counts=True)
counts = (counts / len(random_data) * 100).round(2)
for _class, _count in zip(unique, counts):
print(_class, _count)
output
a 9.9
b 19.51
c 31.88
d 38.72
Titanic Cabin data 예시
위의 비율을 갖는 Cabin 변수에 대해 결측치도 동일한 비율로 구성해보겠습니다.
랜덤 데이터 생성을 위해 numpy에서 제공하는 np.random.choice
를 사용합니다.
(이 때, 비율의 합이 1이 되지 않아 오류가 나는 경우, 마지막 클래스를 1을 맞추기 위한 차를 더해줍니다.)
정상 데이터 비율
ratio
C 28.921569
B 23.039216
D 16.176471
E 15.686275
A 7.352941
F 6.372549
G 1.960784
T 0.490196
Name: Cabin, dtype: float64
비율 데이터를 갖고 있는 Series
를 전달하여 해당 비율만큼 랜덤 범주형 데이터를 생성합니다.
def generate_cat_random(ratio, size):
if type(ratio) != pd.core.series.Series:
return None
return np.random.choice(
a=ratio.index,
size=size,
p=ratio / 100
)
data = generate_cat_random(ratio, size=684)
v, c = np.unique(data, return_counts=True)
random_s = pd.Series((c / sum(c) * 100).round(2), index=v)
random_s.sort_values(ascending=False)
C 28.22
B 24.42
D 17.25
E 13.60
A 7.46
F 6.73
G 2.05
T 0.29
dtype: float64
- 정상 데이터 비율과 비슷한 비율로 랜덤 데이터가 생성됐습니다.
반응형
'python' 카테고리의 다른 글
Python with mysql8 - 데이터베이스 연결 및 예제 (0) | 2022.09.03 |
---|---|
Python - 가상환경, Virtualenv란? 사용법과 스탠다드 라이브러리(venv)와의 차이 설명 (0) | 2022.07.20 |
python - 웹 크롤링 예제 ( Requests & BeautifulSoup ) (0) | 2022.04.22 |
Python - pip 라이브러리 의존관계 트리로 확인하기 (0) | 2022.02.07 |
Python - XML 생성/선택, 쉬운 예제( Element, SubElement, insert ) (0) | 2021.10.17 |