Home [ML] Basics of Machine Learning
Post
Cancel

[ML] Basics of Machine Learning

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

This post is licensed under CC BY 4.0 by the author.

[Python] 예외처리(Exception Handling)

[ML] Machine Learning Toolkit