Machine Learning Process
1
문제정의 > EDA(탐색적 데이터분석) > 데이터 전처리 > 모델학습 > 예측
Data handling(Pandas)
1
import pandas as pd # pandas: 파이썬 기반의 데이터 분석도구
Data Frame and Series
Data Frame?
행과 열이 있는 표 형태구조, *시리즈(Series): 하나의 열 시리즈가 2개이상이면 Data Frame을 의미
Data Frame을 만드는 방법
#### 1. Series로 만든 후, Data Frame으로 만드는 방법
1
2
3
4
5
6
7
8
# 변수에 담긴 리스트를 시리즈로만듬
pd.Series(varCol)
# 하나의 변수에 할당된 두개이상의 시리즈를 Data Frame으로 만듬
pd.DataFrame({
'colName1': varSeries1,
'colName2': varSeries2
})
#### 2. Data Frame형태로 바로 만드는 방법
1
2
3
4
5
6
7
data = {
"메뉴":['후라이드', '양념치킨', '간장치킨', '마늘치킨', '파닭', '닭강정', '양반후반'],
"가격":[12000, 13000, 14000, 14000, 14000, 15000, 13000],
"호수":['10호', '10호', '9호', '9호', '11호', '12호', '10호'],
"칼로리":[1000, 1400, 1600, 1800, 1300, 1500, 1300],
}
pd.DataFrame(data)
메소드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 데이터 불러오기
.read_csv()
# 데이터 샘플 확인: ()안에 숫자입력
.head()
# 데이터 샘플 뒤세서부터 확인: ()안에 숫자입력
.tail()
# 데이터 저장하기
.to_csv('파일명.csv')
# 참고 | 데이터를 저장하는 과정에서 인덱스 박스도 저장되어 'unnamed' 컬럼이 생길 수 있음. 아래 방법으로 해당 컬럼 사라짐
.to_csv('파일명.csv', index=False)
데이터 선택하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Column 선택
# Series 선택
변수명['메뉴'] # []를 사용 / 변수명 = pd.read_csv('name.csv')
변수명.메뉴 # 이름에 공백이 있으면 인식할 수 없음
# Data Frame 선택 (=시리즈 2개이상을 선택)
변수명[['메뉴','가격']] # [[]] 형태로 사용
# Row 선택
변수명['가격'] >= 14000 # 조건이 하나일때 부합하는 행만 출력함
# 조건 두개를 만족하는 값 출력하기
조건1 = 변수명['가격'] >= 14000
조건2 = 변수명['호수'] == 9호
변수명[조건1 & 조건2] # 또는 = |
# .isin()함수 활용
조건 = 변수명['호수'].isin(['9호','10호'])
변수명[조건] # 출력하기
인덱싱/슬라이싱
## loc 인덱서
- 인덱스 명
- 인덱스 명(범위), 컬럼 명(범위)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
df['index'] = ['a','b',c','d','e','f','g']
df = df.set_index(keys=['index'])
df
# 인덱싱
df.loc['a']
# 슬라이싱
df.loc[:,'가격']
# 슬라이싱 특정하기
df.loc['b','가격']
# 슬라이싱
df.loc['c','메뉴':'가격']
# 슬라이싱
df.loc['c',['메뉴','칼로리']] # 원하는 컬럼이 떨어져 있으면 리스트로 묶어줘야함
# 슬라이싱
df.loc['b':'d','메뉴':'가격']
인덱싱/슬라이싱
## iloc 인덱서
1
2
3
4
5
6
7
8
9
10
11
12
13
# 인덱싱
df.iloc[0] # 행 전체
# 슬라이싱 ( 컬럼 전체 )
df.iloc[:,1]
# 슬라이싱
df.iloc[2,0:2] # iloc에서는 원하는 인덱스 +1을 해줘야 함
# 슬라이싱
df.iloc[2,:-1] # 마지막 열을 빼고 싶을 때 -1
컬럼명 변경 및 복구
1
2
3
4
5
6
7
8
9
10
11
12
13
# set_index(keys=[컬럼명])
df.set_index(keys=['메뉴]) # 메뉴명이 인덱스가 됨
df = df.set_index(keys=['메뉴']) # 적용하기위해 변수에 재할당해야함
#reset_index()
df.reset_index() # 원래 인덱스로 돌아옴
# 참고 |
df.reset_index(drop = True) # '메뉴' 컬럼이 사라지고, 기존 인덱스 값이 생김. default: (drop = False)
Column과 Raw 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# Coloumn 추가
# '할인률' 컬럼 추가(값: 0.2)
df['할인률'] = 0.2
df
df['할인가'] = df['가격'] * (1-df['할인률'])
# Raw 추가
# 리스트 형태
aiffel = ['아이펠치킨',16000,'11호', 1200, 0.5, 8000,'국내산']
df.loc['new'] = aiffel # 데이터프레임 맨 아래 행에 추가됨
# 딕셔너리 형태
flip = {'메뉴':'풀잎치킨','가격':10000, '호수':'10호'} # 데이터 매칭 가능
df.loc[10] = flip
결측값 사용
1
2
import numpy as np
df['원산지'] = np.nan
####값 변경
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# loc활용하여 값변경
df.loc[0,'원산지'] = '국내산'
# iloc활요하여 값변경
df.iloc[4,-1] = '브라질'
df.iloc[5,-1] = '브라질'
# replace() 활용하여 값변경
df.replace('양반후반','얄념반후라이드반')
# replace()로 여러개 변경
df.replace('아이펠치킨','[인기]아이펠치킨').replace('풀잎치킨','[베스트]풀잎치킨'
# replace, 딕셔너리 활용
d = {'후라이드':'황금후라이드','양념치킨'}
df.replace(d)
df