2019. 4. 5. 10:56ㆍProgramming Tutorial/Python
앞서서 posting한 numpy와 같이 pandas 라이브러리는 data를 다루는데 필수적인 라이브러리라고 볼수 있습니다.
오늘은 그 첫번째로 간단하게 raw data를 파악하고 정리?? /청소?? 하는 방법에 대해서 알아보고자 합니다.
일단 pandas를 불러봅시다.
import pandas as pd
앞서 numpy 포스팅에서 설명했던 내용으로 계속적으로 pandas라는 full name을 type하기 귀찮기 때문에 위와같이
선언하는게 일반적입니다.
요리도구를 가져왔으니 이제 손질할 재료를 불러와야겠지오.
kaggle에서 유명한 dataset인 Titanic Data set을 다운받아서 진행해보겠습니다.
data_raw = pd.read_csv('E:/Titanic/input/train.csv')
일단 해당 dataset에서 트레이닝 용으로 재공되는 csv파일을 data_raw라는 변수에 읽어들였습니다.
이렇듯 pandas는 csv파일형식에 대해서 아주 손쉽게 자료를 읽어올수 있지요.
(다른 방법으로도 csv파일을 list같은 자료형으로 읽어올수 있으나... 저것보다 많이 불편합니다.)
자 이제 요리도구랑 재료가 도마위에 올라왔습니다.
콩나물 다듬듯이 정리를 해야 국거리로 쓰든 나물로 무쳐먹든 할수 있습니다.
그렇게해야 혹시나 다듬다가 돌맹이를 발견해서 이빨이 불어지는 불상사를 막을수도 있는 거니까..
군소리 없이 이번에는 딱 3가지 메소드만 정리하겠습니다.
1. info()
- info는 pandas dataframe 변수의 정보를 정리해서 출력해줍니다.
- data 형식과 수량 등 전체적인 그림이 나오게 됩니다.
data_raw.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
PassengerId 891 non-null int64
Survived 891 non-null int64
Pclass 891 non-null int64
Name 891 non-null object
Sex 891 non-null object
Age 714 non-null float64
SibSp 891 non-null int64
Parch 891 non-null int64
Ticket 891 non-null object
Fare 891 non-null float64
Cabin 204 non-null object
Embarked 889 non-null object
dtypes: float64(2), int64(5), object(5)
>> 각 열의 이름과 자료형. 각 자료형에 해당하는 값의 갯수가 잘정리되어 출력되는 것을 볼수 있습니다.
그런데 먼가 이상하지 않은가? Age와 Cabin , Embarked 열은 Data가 몇개 없다...
(콩나물 머리가 이미 잘려나간건가?...)
non-null이라는 표현으로 참고해봤을때 null 상태가 상기 3개열의 몇몇 data에 존재하는 것으로 유추 해볼수 있겠네요.
값이 없으면 ... 통계 내기 곤란합니다. 처리를 해야겠지요. 뒤에서 좀 더 알아보도록 하겠습니다.
2. isnull() 과 sum() 메소드 복합 사용.
- null 상태값을 가지는 데이터가 얼마나 될까에 대해서 이야기를 계속 이어가고 있습니다.
- null값인지 아닌지 판단하는 isnull 메소드와 , sum() 합계 메소드를 같이 사용해서
얼마나 data missing이 있는지 그 값을 딱 더해주면 모자란 놈들이 전부 891개의 data를 갖는지.. 확인할수 있습니다.
아래를 보시죠.
data_raw.isnull().sum()
PassengerId 0
Survived 0
Pclass 0
Name 0
Sex 0
Age 177
SibSp 0
Parch 0
Ticket 0
Fare 0
Cabin 687
Embarked 2
dtype: int64
Age 714+177 = 891, Cabin 204+687=891, Embarked 889+2=891
info 메소드를 설명할때 생각했던 null값의 존재를 다시 한번 확인하는 순간입니다.
위의 메소드로 몇가지 응용 조치도 가능할 거라는 것은 조금 생각해보면 알수 있습니다.
3. describe() 메소드
- numerical 즉 숫자기반으로 이루어진 data들은 갯수, 평균,표준편차, 최대,최소, 각 %분위별 값 등 일반적인
통계값들이 의미를 가지는 경우가 대부분입니다.
- Categorical한 data도 데이터 갯수 각항목의 빈도, 유니크한 분류의 수 등이 의미를 가지겠지요.
- 우리는 pandas를 이용하면 아래 한줄이면 한번에 살펴볼수 있습니다.
- 단, null값이 있는 열은 당연히 알수 없겠지요.
아래 예시를 한번 보겠습니다.
data_raw.describe(include='all')
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
count 891.000000 891.000000 891.000000 891 891 714.000000 891.000000 891.000000 891 891.000000 204 889
unique NaN NaN NaN 891 2 NaN NaN NaN 681 NaN 147 3
top NaN NaN NaN Kantor, Mr. Sinai male NaN NaN NaN CA. 2343 NaN G6 S
freq NaN NaN NaN 1 577 NaN NaN NaN 7 NaN 4 644
mean 446.000000 0.383838 2.308642 NaN NaN 29.699118 0.523008 0.381594 NaN 32.204208 NaN NaN
std 257.353842 0.486592 0.836071 NaN NaN 14.526497 1.102743 0.806057 NaN 49.693429 NaN NaN
min 1.000000 0.000000 1.000000 NaN NaN 0.420000 0.000000 0.000000 NaN 0.000000 NaN NaN
25% 223.500000 0.000000 2.000000 NaN NaN 20.125000 0.000000 0.000000 NaN 7.910400 NaN NaN
50% 446.000000 0.000000 3.000000 NaN NaN 28.000000 0.000000 0.000000 NaN 14.454200 NaN NaN
75% 668.500000 1.000000 3.000000 NaN NaN 38.000000 1.000000 0.000000 NaN 31.000000 NaN NaN
max 891.000000 1.000000 3.000000 NaN NaN 80.000000 8.000000 6.000000 NaN 512.329200 NaN NaN
include='all' 을 써주지 않으면 numerical value 수치값에 해당하는 열만 나오고 해당 정보만 출력된다.
오늘도 카페인의 신에게 제 하루를 맡겨야 겠습니다. 모두들 건강지키시고 파이팅 !!하시기 바랍니다.
'Programming Tutorial > Python' 카테고리의 다른 글
[numpy #5] 열벡터를 만들어 봅시다. Making column vector (0) | 2019.06.05 |
---|---|
[파이썬] string 자료형의 Punctuation 없애는 방법 (0) | 2019.05.15 |
[numpy #3] Broad casting에 대해서 알아보자 (0) | 2019.04.17 |
[numpy #2] numpy의 기초에 대해서 알아보자! (0) | 2019.04.04 |
[numpy #1] "numpy.newaxis"는 무엇이고 언제사용하는가 (4) | 2019.04.02 |