Ch6 ~7 데이터 로딩, 정제 및 준비

Ch6. 데이터 로딩과 저장, 파일 형식

데이터 읽기 read 함수 사용. 아래와 같은 옵션을 취할 수 있다. -색인 : DataFrame에서 하나 이상의 컬럼을 색인으로 지정 가능. -자료형

추론과 데이터 변환 -날짜 분석 -반복 -정제되지 않은 데이터 처리

계층적 색인을 지정하고 싶담녀 컬럼 번호나 이름의 리스트를 넘기면 된다 csv를 불러올 때 sep=',' 를 사용하여 , 를 구분자로 구분할 수 있다 read_pickle : 피클 포맷으로 저장된 객체를 읽어온다 pickle은 하나의 모듈로, 텍스트가 아닌 자료형(리스트, 클래스)은 일반적인 파일 입출력 방법으로 데이터를 저장하거나 불러올 수 없다. 이 문제를 해결할 때 사용하는 형식으로, 파이썬의 모든 자료들을 저장/읽을 수 있다. 오래 보관할 필요가 없는 데이터일 경우에만 추천. 장기간 보관된다는 보장이 없음 pickle 로 데이터를 저장하거나 불러올 때 파일을 바이트 형식으로 읽거나 써야한다(wb/rb) pickle.load(파일)을 통해서 파일 내용을 읽어오려면 pickle.dump 를 사용해서 데이터를 입력한 파일어야한다.

Ch7. 데이터 정제 및 준비

누락된 데이터 골라내기 null 인 데이터는 추출하지 않는 함수 : dropna() , notnull () (두 함수 결과 똑같다) 만일 null이 하나라도 포함하고 있는 로우가 있으면 제외 how= 'all' 옵션을 넘기면 모두 NA값인 로우만 제외. NaN이 몇개 이상 값이 들어 있는 로우만 제하려면 tresh 인자에 기준 입력 (ex) tresh =2) (실습했을때는 오류가 나서 책에 있는것을 가져왔다)

from numpy import nan as NA
data=pd.Series ([1, 6, 3] , [1, NA, NA], [NA, NA, NA] , [NA, 6, 3] )
cleaned = data.dropna()

data 
>> 0    	1    	2
0  1	    6    	3
1  1    	NaN	  NaN
2  NaN  	NaN	  NaN
3  NaN 	  6   	3 


cleaned 
>> 0	 1	 2
0  1	 6   3

data.dropna(how='all')
>>  0    	1    	2
0   1	    6    	3
1   1	    NaN   NaN
3   NaN   6    	3

결측치 채우기 fillna () : 넣고 싶은 값을 넘겨주면 된다. 사전값을 넘겨서 각 컬럼마다 다른 값을 채울 수 있다 data.fillna({1:0.5, 2:0} ) (1 칼럼에는 null 값에 0.5, 2칼람에는 0이 채워진다) 재색인에서 빈 공간에 null을 넣을수도 있다.

data = pd.DataFrame ({'k1' :['one', 'two'] * 3 +['two'], 
                      'k2' : [1,1,2,3,3,4,4] })

data 
>> k1    k2
0  one   1
1  two   1
2  one   2
3  two   3
4  one   3
5  two   4
6  two   4

data.duplicated()
>> 0    False
   1    False
   2    False
   3    False
   4    False
   5    False
   6     True
   
#one, two 를 * 3으로 중복한것이기 때문에 각 로우가 중복이다.
#마지막에 two만 중복없이 따로 입력한것이기 때문에 중복이 아니다  

매핑 map () 사용해서 DataFrame의 컬럼이나 Series, 배열 내의 값을 기반으로 데이터 매핑할 수 있다 map 매서드는 딕셔너리 자료형태 사용 ! mapping 할 때 DataFrame에는 map 매서드가 적용되지 않으므로, Series로 바꿔주는 작업을 꼭! 해야한다

data=pd.DataFrame ({'food': ['bacon', 'pulled pork', 'bacon', 'ham','chicken','corned beef'],
                   'ounces' : [1, 4, 2, 3, 8,6] })
meat_to_animal={'bacon' : 'pig' , 'pulled pork' : 'pig', 'bacon' : 'pig' , 'ham' : 'pig', 'chicken' : 'chicken' , 'corned beef' : 'beef'}

lowercased= data ['food'].str.lower()
data['animal']=lowercased.map(meat_to_animal)
data
>>  food         ounces    animal
0   bacon         1         pig
1   pulled pork   4         pig
2   bacon         2         pig
3   ham           3         pig
4   chicken       8         chicken
5   corned beef   6         beef

개별화와 양자화 분석을 위해 그룹별로 나누기. 라벨링 할수도 있다

ages = [20,22,25,27,34,47,72,45,32]
bins=[18,25,35,60,100]
cats = pd.cut(ages,bins)
cats
>>
[(18, 25], (18, 25], (18, 25], (25, 35], (25, 35], (35, 60], (60, 100], (35, 60], (25, 35]]
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]

# ages의 인자들이 bins의 기준으로 재표현 되었다


group_names=['youth','youthadult',',middleaged','senior']
pd.cut(ages,bins,labels=group_names)

>>
[youth, youth, youth, youthadult, youthadult, ,middleaged, senior, ,middleaged, youthadult]
Categories (4, object): [youth < youthadult < ,middleaged < senior]

#group_names 딕셔너리로 라벨링했

repalce ( [치환될 값], [치한할 값]) : 치환될 값이 여러개면 치한될 값을 여러개 적어도 된다. 리스트 대신 사전 이용해도 된다

문자열 객체 메서드 : split, strip , join, in, count 등 파이썬 기본 문법을 응용할 수 있다

정규표현식 : 텍스트에서 문자열 패턴을 찾는 유연한 방법을 제공 regex (단일 표현식) - 정규 표현 언어로 구성된 문자열 re 모듈 함수는 패턴 매칭, 치환, 분리 세가지로 나눌 수 있다

Last updated

Was this helpful?