강의 홍보
데이터 개요
- German Credit Card를 활용하여 데이터를 가공하도록 한다.
import pandas as pd
print(pd.__version__)
1.0.5
url = 'https://raw.githubusercontent.com/chloevan/kaggle2portpolio/master/datasets/german_credit_data.csv'
german_credit = pd.read_csv(url)
german_credit.head(3)
    
      
        
          |  | Unnamed: 0 | Age | Sex | Job | Housing | Saving accounts | Checking account | Credit amount | Duration | Purpose | 
      
      
        
          | 0 | 0 | 67 | male | 2 | own | NaN | little | 1169 | 6 | radio/TV | 
        
          | 1 | 1 | 22 | female | 2 | own | little | moderate | 5951 | 48 | radio/TV | 
        
          | 2 | 2 | 49 | male | 1 | own | little | NaN | 2096 | 12 | education | 
      
    
     
- Pandas DataFrame은- Index와 나머지 열로 구성이 되어 있다.
- 데이터의 행과 크기를 알아보는 가장 좋은 방법은 DataFrame객체의shape변수를 이용하는 것이다.
print('DataFrame 크기: ', german_credit.shape)
DataFrame 크기:  (1000, 10)
- 생성된 DataFrame객체인german_credit은 10개의 칼럼으로 이루어져 있다.
- 이번에는 describe()함수를 활용하여 개략적인 분포도를 확인한다.
    
          
            
              |  | Unnamed: 0 | Age | Job | Credit amount | Duration | 
          
          
            
              | count | 1000.000000 | 1000.000000 | 1000.000000 | 1000.000000 | 1000.000000 | 
            
              | mean | 499.500000 | 35.546000 | 1.904000 | 3271.258000 | 20.903000 | 
            
              | std | 288.819436 | 11.375469 | 0.653614 | 2822.736876 | 12.058814 | 
            
              | min | 0.000000 | 19.000000 | 0.000000 | 250.000000 | 4.000000 | 
            
              | 25% | 249.750000 | 27.000000 | 2.000000 | 1365.500000 | 12.000000 | 
            
              | 50% | 499.500000 | 33.000000 | 2.000000 | 2319.500000 | 18.000000 | 
            
              | 75% | 749.250000 | 42.000000 | 2.000000 | 3972.250000 | 24.000000 | 
            
              | max | 999.000000 | 75.000000 | 3.000000 | 18424.000000 | 72.000000 | 
          
        
         
german_credit['Sex'].value_counts()
male      690
female    310
Name: Sex, dtype: int64
- Sex의 반환 결과는 1이 700개, 0이 300개로 확인할 수 있다.
- 이 때 value_counts()는 많은 건수 순서로 정렬되어 값을 반환한다.
새로운 변수 추가
- 기존 데이터에서 변수를 추가하고 삭제하는 것을 진행해본다.
- 이러한 과정을 보통 도출변수로 표현되기도 한다.
german_credit['Age+100'] = german_credit['Age'] + 100
german_credit.shape
(1000, 11)
(1) 수치형 조건에 따른 변수 추가
- 수치형 변수의 특성에 따라 새로운 변수를 추가한다.
- Age를 기준으로 크게- ">50"과- <=50이하로 구분한다.
- 그러기 위해서는 각 조건이 맞는지를 확인하는 if조건과 반복 수행을 위한for-loop조건이 필요하다.
# 빈 리스트 객체 생성
age_group = []
for age in german_credit['Age']:
  if age > 50:
    age_group.append('>50')
  else:
    age_group.append('<=50')
(age_group[0:3])
['>50', '<=50', '<=50']
- 출력된 결과물은 위와 같은 형태로 저장된 것을 확인할 수 있다.
- age_group에 저장된 리스트 값을 새로운 변수로 추가한다.
german_credit['Age_group'] = age_group
german_credit['Age_group'].value_counts()
<=50    887
>50     113
Name: Age_group, dtype: int64
(2) 문자형 조건에 따른 변수 추가
- 이번에는 특정문자열의 존재 유무에 따라 새로운 column is_own을 추가한다.
german_credit['Housing'].value_counts()
own     713
rent    179
free    108
Name: Housing, dtype: int64
- 위 데이터에서 own인 경우는True그렇지 않은 경우는False로 저장한다.
- np.where을 사용하면- if처럼 매우 쉽게 사용이 가능하다.
import numpy as np 
german_credit['is_own'] = np.where(german_credit['Housing'] == "own", True, False)
german_credit['is_own'].value_counts()
True     713
False    287
Name: is_own, dtype: int64
변수 삭제
- 이렇게 생성된 변수를 삭제하도록 한다.
- 이 때, 가장 많이 사용되는 함수는 drop()메서드를 이용한다.
- 함수 사용 시, 주의해야 하는 것 중 하나는 axis 0은 행의 방향,axis 1은 열의 방향 축으로 움직인다.
- 즉, drop()함수를 사용 시에는axis 1를 같이 입력한다.
 
german_credit = german_credit.drop('Age+100', axis = 1)
german_credit.shape
(1000, 12)
- 이번에는 두개의 변수를 추가한 뒤, 한꺼번에 삭제하는 예제를 실습해본다.
german_credit['age+10'] = german_credit['Age'] + 10
german_credit['age+20'] = german_credit['Age'] + 20
german_credit.shape
(1000, 14)
german_credit = german_credit.drop(['age+10', 'age+20'], axis = 1)
german_credit.shape
(1000, 12)
- 이렇게 두개 이상의 변수를 삭제할 때는 list를 활용해서 삭제가 가능하다.
정리
- DataFrame에서 간단하게 변수를 추가 및 삭제하는 방법에 대해 배웠다.- 
- 수치형 변수를 활용한 변수 추가, 문자형 변수를 활용한 변수 추가의 기본적인 내용을 숙지한다.
 
- 변수를 삭제할 때는 drop()메서드를 사용하는 데, 행을 삭제할 때는axis = 0, 열을 삭제할 때는axis = 1활용한다.