범주형 데이터 익명화

Python으로 배우는 데이터 프라이버시와 익명화

Rebeca Gonzalez

Instructor

일반화

    Age    Gender    Department    Condition
0    30    F         Finance       Anxiety disorders
1    42    M         Production    Bronchitis
2    35    F         Marketing     Dysthymia
3    39    F         Production    Dysthymia
4    40    M         Marketing     Flu
    Age    Gender    Department    Condition
0    <40   F         Finance       Anxiety disorders
1    >=40  M         Production    Bronquitis
2    <40   F         Finance       Dysthymia
3    <40   F         Production    Dysthymia
4    >=40  M         Marketing     Flu
Python으로 배우는 데이터 프라이버시와 익명화

범주형 데이터의 일반화

# 데이터셋 확인
hr.head()
    Age    BusinessTravel        Department                EducationField    EmployeeNumber
0    41    Travel_Rarely         Sales                     Life Sciences     1
1    49    Travel_Frequently     Research & Development    Life Sciences     2
2    37    Travel_Rarely         Research & Development    Other             4
3    33    Travel_Frequently     Research & Development    Life Sciences     5
4    27    Travel_Rarely         Research & Development    Medical           7
Python으로 배우는 데이터 프라이버시와 익명화

범주형 데이터

가능한 값의 개수가 제한적이거나 고정됨.

  • 인종
  • 성별
  • 출신지
  • 연령대
  • 교육 수준
  • 선호 영화 및 취향
Python으로 배우는 데이터 프라이버시와 익명화

범주형 데이터 익명화

Education Field의 범주 값 히스토그램

Python으로 배우는 데이터 프라이버시와 익명화

범주형 데이터 익명화

     Department                EducationField
0    Sales                     Life Sciences
1    Research & Development    Life Sciences
2    Research & Development    Other
3    Research & Development    Life Sciences
4    Research & Development    Medical

원본 데이터셋

     Department                EducationField
0    Sales                     Medical
1    Research & Development    Marketing
2    Research & Development    Life Sciences
3    Research & Development    Other
4    Research & Development    Life Sciences

원본 데이터셋의 educationField 열 분포에서 샘플링한 결과 데이터셋입니다.

Python으로 배우는 데이터 프라이버시와 익명화

데이터에서 샘플링

미국 인구조사는 시민에 대한 수집 데이터 일부를 공개합니다.

대규모 통계 패턴 계산을 가능하게 함:

  • 평균
  • 분산
  • 클러스터
Python으로 배우는 데이터 프라이버시와 익명화

분포 탐색

# 각 고유값의 절대도수 표시
hr['EducationField'].value_counts()
Life Sciences       606
Medical             464
Marketing           159
Technical Degree    132
Other                82
Human Resources      27
Name: EducationField, dtype: int64
Python으로 배우는 데이터 프라이버시와 익명화

분포 탐색

# 범주의 막대 그래프 생성
df['BusinessTravel'].value_counts().plot(kind='bar')

Business Travel 열의 범주 값 막대그래프

Python으로 배우는 데이터 프라이버시와 익명화

분포 탐색

# 각 고유값의 절대도수 구하기
counts = hr['EducationField'].value_counts()

# 인덱스 목록 출력
print(counts.index)
Index(['Life Sciences', 'Medical', 'Marketing', 
      'Technical Degree', 'Other', 'Human Resources'],
       dtype='object')
Python으로 배우는 데이터 프라이버시와 익명화

분포 탐색

# 각 고유값의 확률분포
counts = df['EducationField'].value_counts(normalize=True)
Life Sciences       0.412245
Medical             0.315646
Marketing           0.108163
Technical Degree    0.089796
Other               0.055782
Human Resources     0.018367
Name: EducationField, dtype: float64
Python으로 배우는 데이터 프라이버시와 익명화

분포 탐색

# 각 고유값의 빈도 값
df['EducationField'].value_counts(normalize=True).values
array([0.4122449 , 0.31564626, 0.10816327, 0.08979592, 0.05578231,
       0.01836735])
Python으로 배우는 데이터 프라이버시와 익명화

동일 분포에서 샘플링

# 확률분포에서 샘플링
hr_sample['EducationField']= np.random.choice(counts.index, 
                                              p=counts.values, 
                                              size=len(hr))


# 결과 데이터셋 확인 hr.head()
    Age    BusinessTravel        Department                EducationField    EmployeeNumber
0    41    Travel_Rarely         Sales                     Life Sciences     1
1    49    Travel_Frequently     Research & Development    Medical           2
2    37    Travel_Rarely         Research & Development    Marketing         4
3    33    Travel_Frequently     Research & Development    Technical Degree  5
4    27    Travel_Rarely         Research & Development    Medical           7
Python으로 배우는 데이터 프라이버시와 익명화

동일 분포에서 샘플링

# 각 범주의 절대도수 표시
hr['EducationField'].value_counts()
Life Sciences       606
Medical             464
Marketing           159
Technical Degree    132
Other                82
Human Resources      27
Name: EducationField, dtype: int64
# 샘플 열의 도수 표시
hr_sample['EducationField'].value_counts()
Life Sciences       604
Medical             493
Marketing           158
Technical Degree    120
Other                61
Human Resources      34
Name: EducationField, dtype: int64
Python으로 배우는 데이터 프라이버시와 익명화

연습해 봅시다!

Python으로 배우는 데이터 프라이버시와 익명화

Preparing Video For Download...