검색
검색
공개 노트 검색
회원가입로그인

[이솦] 파이선으로 배우는 AI 기초 24

요약
  • 머신러닝 프로젝트를 위해 데이터를 전처리하는 방법을 설명한다.
  • 판다스 라이브러리의 기능을 사용하여 데이터 프레임을 생성하고 수정, 삭제하는 방법을 배운다.
  • 실제 머신러닝에서는 빅데이터를 처리하기 위해 파일에서 데이터를 읽어와 데이터 프레임을 생성하는 방법이 일반적이다.

이솦 | EBS 소프트웨어·인공지능 교육

전통적인 데이터 분석 방법 중에서 CRISP-DM (Cross Industry Standard Process for DataMining) 이라는 것이 있다. 전세계에서 가장 많이 사용되는 데이터마이닝 표준방법론이다. 머신러닝을 산업에 적용하려는 다양한 프로젝트 들은 이 CRISP-DM의 분석 방법을 참조해서 머신러닝 프로젝트를 진행한다.

머신 러닝 프로젝트 사이클은

문제선정- 데이터 획득-데이터 탐색-모델링-성능평가- 배포및 활용의 일반적인 사이클을 가진다. 그래서 머신 러닝 코드들도 문제 성정과 배포및 활용을 제외한 데이터획득- 데이터탐색-모델링-성능평가 가 코드의 구성 영역이다.

판다스 라이브러리는

데이터를 획득한후 모델을 위해 문자 숫자등 다양한 자료형을 가진 데이터를 가공하기 위해 수정, 재배치, 연산하는데 필요한 라이브러리 이며 주로 데이터 프레임이라는 자료 구조 형태로 되어 있다. 즉 데이터 전처리를 위해서 필수적인 라이브러리이다.

오늘은 머신러닝에 필요한 데이터를 만드는데 필요하지 않은 데이터를 뺴고 새로운 프레임을 만드는 것이다.

pandas

지난 시간에는 데이터 프레임을 만들고 값을 읽어 오는 다양한 방법을 익혔다. 이번에는 데이터 프레임의 값을 변경하고 삭제하는 방법을 배워보자.

데이터 프레임을 만들어보자.

import pandas as pd
dic = {'age': [49, 30, 42, 46, 44],
'weight': [78, 55, 70, 80, 50],
'height': [170, 165, 175, 180, 167],
'familyname': ['Chang', 'Kim', 'Lim', 'Han', 'Kang']}
friends = pd.DataFrame(dic, ['Eddie', 'Linda', 'Liam', 'Elon', 'Jenny'])
friends ['gender'] = ['M', 'F', 'M', 'M', 'F']
friends

라이브러리 임포트 하고, 딕셔너리로 데이터를 넣어 준 다음에 인덱스를 주는 형태이다. 만들어 놓은 데이터에 gender 라는 칼럼을 추가해 주자. 데이터 프레임이 칼럼을 추가 하려면 인덱스 수와 같은 데이터 값이 필요하다.

그런데 이렇게 만들었더니 마지막에 넣은 데이터가 마지막에 들어간다. 그래서 특정위치에 넣어 주려면 insert함수를 쓰면된다.

import pandas as pd
dic = {'age': [49, 30, 42, 46, 44],
'weight': [78, 55, 70, 80, 50],
'height': [170, 165, 175, 180, 167],
'familyname': ['Chang', 'Kim', 'Lim', 'Han', 'Kang']}
friends = pd.DataFrame(dic, ['Eddie', 'Linda', 'Liam', 'Elon', 'Jenny'])
friends.insert[0.'gender',['M', 'F', 'M', 'M', 'F'])
friends

함수 사용은 insert 다음에 순서를 정해 준다. 위 코드처럼 0이라고 하면 제일 처음에 넣어 준다. insert()의 첫번째 옵션이 위치할 인덱스를 주는 것이다.

그런데 여기에서 데이터 프레임을 다시 만든거 볼수 있는가? 앞에거 그대로 쓰면 왜 안될까? 이미 앞에서 gender라는 컬럼을 삽입했기 때문에 두번 삽입되는걸 막고자 데이터 프레임을 새로 만들어서 넣는다. insert() 함수는 inplace옵션없이 원본 데이터를 변형하는 함수이다. 즉 insert를 해주며 원본의 데이터가 바로 변경이 된다.

iloc(), loc()\

iloc(), loc()함수를 사용해서 데이터 프레임 값을 바꿔보자.

friends.loc ['John' 'age'] = 53
friend.iloc[[5, 1]] = 53
friends

이렇게 하면 John이라는 인덱스를 만들고 age에 해당하는 값을 넣어 주고 나머지 데이터는 NaN으로 처리한다. 마찬가지로 iloc를 통해서 위치를 정하고 데이터를 추가 할수 있다.

rename()

칼럼 이름도 바꿀수 있다. rename()함수를 사용하면 이름변경도 가능한다. rename()함수는 칼럼, 인덱스 이름 모두를 변경 가능하다.

friends.rename(columns = {'familyname': 'fa'})
friends

컬럼의 이름을 바꿔 주려면 columns 로 s을 붙어 주고 딕셔너리 형태로 넣어 주면 된다. 이렇게 출력하며 칼럼 이름이 그대로 나온다. rename() 함수가 원본 데이터에 반영되기 위해서는 코드를 수정해 줘야 한다.

friends.rename(columns = {'familyname': 'fa'}, inplace=true)
friends

옵션을 넣어 줘야 된다. inplce() 함수에서 실행되는 데이터 프레엠이 반영하라는 뜻이다. 이렇게 하면 현재 사용하는 데이터 프레임의 이름은 변경하게 된다.

rename() 함수는 inplace=true라고 옵션을 지정해 주어야 원본 데이터가 변경된다.

drop()

행또는 열을 삭제하고 싶을때는 drop() 함수를 사용한다.

friends.drop('John', axis=0, inplace=True)
friends

drop() 함수는 주의점이 있는데 행을 삭제 할때 행을 지정해 주고 그 후에는 axis를 이용해서 축을 지정해 줘야 한다. 행을 삭제 할것인 axis 값을 0으로 지정해줘야 한다.

friends.drop('weight', axis=1, inplace=True)
friends

이렇게 열 삭제도 가능하다. 열이니까 이번에는 axis=1로 넣어준다.

transpose()

행과 열을 바꾸는 기능이다. 이 함수는 원본을 변경하지 않으므로 새로운 변수에 지정해 줘야 한다.

dic 'age': [49, 30, 42, 46, 44],
'weight': [78, 55, 70, 80, 50],
'height': [170, 165, 175, 180, 167],
'familyname': ['Chang', 'Kim', 'Lim', 'Han', 'Kang']}
friends = pd.DataFrame(dic, ['Eddie', 'Linda', 'Liam', 'Elon', 'Jenny'])
friends.transpose()

이렇게 하면 각 행과 열이 변경되게된다.

핵심비법

실제로 머신러닝에서는 데이터 프레임을 만드는 경우보다 파일에서 읽어 오는 경우가 더 많다. 데이터 프레임을 직접 작성하낟면 방대한 작업이 필요한 빅데이터에 어울이지 않는다. 실제오는

read_csv('파일명.csv')로 데이터를 읽고 프레임을 만들어서 사용하는 경우들이 더 많다.

물론 read_excell()을 이용해서 엑셀 데이터를 직접 읽는 것도 가능한다. read_excell() 이용시 칼럼명은 그대로 사용하고 인덱스 명은 없는 경우가 대부분이다. 이런 경우에는 인덱스명은 0번부터 자동으로 입력한다.

두 데이터프레임을 연결하는 concat([df1, df2])를 이욯해서 읽기도 있다. 실제 머신러닝에서는 한 개의 파일만 읽는 경우는 드물다. 그래서 두개 이상의 파일에서 읽어온 데이터 값을 하나로 합하는 경우가 대부분이다.

실습

오늘의 실습은 NaN으로 설정된 데이터를 지우고 새로운 데이터 프레임을 만드는것이다. NaN을 처리하는 방법이 여러개 있지마 이번엔 Nan 데이터를 삭제하는 것이다.

import numpy as np
import pandas as pd
dic{'age: [49, 30, 42, 46, 44],
'weight [78, 55, np.nan, 80, 50],
'height': [170, 165, 175, 180, np.nan],
'familyname': ['Chang', 'Kim', 'Lim', 'Han', 'Kang']}
friends = pd.DataFrame(dic, ['Eddie', 'Linda', 'Liam', 'Elon', 'Jenny'])
friends2 = friends.dropna()
 friends2

NaN이 있는 데이터에서 dropna() 함수로 제거 한 후에 friends 라는 데이터 프레임으로 새로 저장한다.

요약

데이터 프레임에 칼럼을 추가 하고싶을때는 insert()를 사용한다.

데이터 프레임에 행을 추가하고 싶다면 loc()함수, iloc()함수를 사용한다.

칼럼을 삭제하고 싶다면 drop()을 사용한다.

데이터 프레임에 변경된 값을 적용하려면 inplace=True 옵션을 사용한다.

파이썬으로 데이터 전처리를 할때는 판다스를 이용해서 머신러닝 모델을 작성한다.

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 10
heart
T
페이지 기반 대답
AI Chat