Feature Engineering
: 통계분석, 머신러닝, 딥러닝을 위해 도메인 지식과 창의성을 바탕으로 feature를 재조합하여 새로운 feature를 생성
ex) bmi 지수
→ 데이터에 따라 결과에 영향을 많이 미치기 때문에 시간과 비용이 많이 소요됨
<과제>
1. Feature Engineering
- 각 분기별 영업 이익률 계산
- PDR 계산
1. 데이터 불러오기
- 데이터 불러온 후 데이터 타입 확인
import pandas as pd
df = pd.read_csv('url.csv')
df.dtypes
2. str to int / 영업이익률 계싼
- 영업이익률 계산을 위해 str을 int로 변환하는 함수를 생성
- 영업이익, 매출액에 적용하여 영업이익률 구함
#str을 int로 바꾸는 함수
def toint(string):
return int(string.replace(',', ''))
df['영업이익'] = df['영업이익'].apply(toint)
df['매출액'] = df['매출액'].apply(toint)
#영업이익률 계산
df['영업이익률_new'] = df['영업이익'] / df['매출액'] * 100
3. PDR(Price Dream Ratio) 계산
- PDR = 시가총액 / (TAM * 시장점유율)
- PDR을 구하는 함수를 생성한 뒤 2018년 kt&g 데이터에 적용
#PDR을 구하는 함수
def pdr(a,b,c):
print("PDR :", c/(a*b))
#2018년 kt&g PDR
market_share_2018 = 0.62
TAM_2018 = 1500000000
Market_capitalization_2018 = 1318010000
pdr(market_share_2018, TAM_2018, Market_capitalization_2018)
2. String Manipulation
- replace가 아닌 다른 방법으로 str 데이터 int로 변환
df['매출액'] = df['매출액'].astype(int)
df.iloc[0, 1]
3. Apply
- describe를 통해 summary statistics 확인
- 결측치 0 처리
1. str to int
#str to int
df['영업이익(발표기준)']=df['영업이익(발표기준)'].apply(toint)
df['세전계속사업이익']=df['세전계속사업이익'].apply(toint)
df['당기순이익(지배)']=df['당기순이익(지배)'].apply(toint) .....
2. 결측치 0처리 후 describe
df.isnull()
df = df.fillna(0)
df.describe()
<도전 과제>
1. NA Value Handling
- 19년도 4분기의 당기순이익(비지배) 부분을 NA로 대체
- 이후 해당 결측치를 mean imptation 방법을 사용하여 처리
#결측값으로 대체
import numpy as np
df.iloc[2, 7] = np.nan #19년도 4분기 당기순이익
#결측값을 평균 값으로 대체
df = df.fillna(df.mean())
2. Feature Engineering
- Relative Perfomance 라는 새로운 feature를 계산하세요. 이는 최근 1년치 매출액의 평균값을 기준으로
- 10% 이상 -> S
- 5% 이상 -> A
- -5 ~ 5% -> B
- -5%이하 -> C
- 10%이하 -> D
1. 매출액 평균 값 구한 후 매출액 점수와 등급 점수 column 생성
- 더 간단하게 할 수 있는 방법이 있을 것 같긴한뎁,, 우선 매출액의 평균 값을 구한 후
(매출액 - 평균값) / 평균값 * 100을 하여 등급점수를 생성했다.
#매출액 평균 값
df["매출액"].mean()
> 12550.8
df['등급점수'] = (df['매출액'] - 12550.8) / 12550.8*100
2. 등급 구하기 위한 함수 생성
- 위에서 구한 등급 점수에 따라 등급을 매긴후 "Relative Perfomance" 컬럼에 데이터를 삽입
def func(df):
if df['등급점수'] >= 10:
return 'S'
elif df['등급점수'] < 10 and df['등급점수'] >= 5:
return 'A'
elif df['등급점수'] < 5 and df['등급점수'] >= -5:
return 'B'
elif df['등급점수'] < -5 and df['등급점수'] > -10:
return 'C'
else:
return 'D'
#Relative Perfomance 컬럼 추가
df['Relative Perfomance'] = df.apply(func, axis=1)
df[['분기', 'Relative Perfomance']]
'AI > Data Analysis, Statistics' 카테고리의 다른 글
Sprint2_t-test (0) | 2021.01.05 |
---|---|
Sprint1_Sprint challenge (0) | 2021.01.05 |
Section1_Data Visualize (0) | 2021.01.02 |
Section1_Data Manipulation (0) | 2020.12.31 |
EDA(Exploratory Data Analysis) (0) | 2020.12.28 |