데이터분석을 위한 라이브러리, Pandas
파이썬은 C언어를 기반으로 만든 언어이고, R은 통계언어인 S를 기반으로 만든 언어입니다. 데이터 분석에서 R이 강력한 언어임은 분명하지만, 파이썬이 프로그램언어로 만들어진 점은 간과할 수 없습니다. 접근성이 더 좋고 보다 익숙하며 확장가능성이 매우 크다는 장점이 있습니다. 파이썬도 나날이 빠르게 발전하며 강력해지고있있습니다. 파이썬을 이용해서 데이터분석을 하려면 그에 맞는 라이브러리를 사용해야합니다. 대표적으로 PANDAS, NUMPY, MATPLOTLIB을 많이 사용합니다. 이번 포스팅에서는 이 Pandas에대한 간략한 설명과 이 라이브러리를 사용할 때 빠르게 찾아 쓸 수 있도록 정리하는 것이 그 목적입니다.
1. Series vs Dataframe :
Serires와 Dataframe은 Dict, List, Tuple로 만들 수 있습니다. 쉽게 말해 series는 한줄, Dataframe은 series의 집합입니다. Dataframe에서 한 줄만 가져오면 시리즈가 되겠죠. 딕셔너리로 만들면 key값이 인덱스로 들어가 열(Column)을 추가하고 리스트로 만들면 행(Row)를 추가합니다. Columns는 Feature가 되고 Rows는 Index가 됩니다.
Series와 Dataframe을 구분할 줄 알아야 Doc에서 쓰고싶은 것을 쉽게 찾을 수 있습니다.
2. Wide vs Tidy :
Wide는 흔히 table형태로 주변에서 쉽게 볼 수 있는 형태입니다. 반면 Tidy 형태는 하나의 행에는 하나의 데이터, 하나의 행(Row, Index)에는 하나의 값(feature, observer)를 기반으로 저장하는 방식입니다. 한눈에 들어오지도 않고, 불편해 보이는데 이렇게 하는 이유가 뭘까요? 이유는 다른 라이브러리와의 호환을 위해서입니다.
Dataframe의 형태에따라서 다루는(Manipulation) 방법이 달라집니다.wide는 야생의 형태, tidy는 한번 정리된 형태라고 볼 수 있습니다. tidy는 일관적인 방식으로 나열되어 있기 때문에 라이브러리의 이용이 쉽고, 효율적이며, 더 빠르고 강력합니다.
3.활용하기 :
편의를 위해 앞으로 나오는 모든 판다스는 pd로 기재하겠습니다.
import pandas as pd
1. 읽고 / 쓰기
- pd.read_csv( ) # csv읽기
- pd.read_excel( ) # excel읽기
- pd.read_clipboard( ) # csv읽기
- pd.read_sql( ) # sql읽기
- df.to_csv( ) # df를 csv로 만들기
- df.to_excel( ) # excel로 만들기
- df.to_clipboard( ) # clipboard로 보내기
- pd.read_sql( ) # sql읽기
편의를 위해서 df를 지정하겠습니다.
df = pd.read_csv( url ) # df 는 데이터프레임
2. general function
- df = pd.melt( df , id_vars= , value_vars= ) # tidy형태로 만들기
- df = df.fivot (index= , columns= , values= ) # fivot형태로 만들기
- df = pd.pivot_table( df, values= , index= , columns= ,
aggfunc= 적용할 함수 (보통Numpy 이용) ) # Pivot table 만들기 - df = df1.merge(df2, how='방법', on='붙일 키') # df1와 df2를 merge하기
(merge와 concat참조 exupery-1.tistory.com/50?category=950005 ) - df = pd.conncat((df1,df2), axis = '1은 좌우 0은 위아래') # df1과 df2를 concat
3-1. 결측값찾기 Missing data (general function)
- pd.isna(df) # isna 불리언 값으로 결측값 찾아준다.
- pd.isnull(df) # isnull 위와 동일
- pd.notna(df) # notan 불리언 값으로결측값아닌 것을 찾아준다
- pd.notnull(df) # notnull 위와 동일
3-2. 결측값처리 Missing data (Series & Dataframe 둘 다 사용가능)
- df.dropna([axis, how, thresh, …]) # 결측값 제거
- df.fillna([value, method, axis, …]) # 결측값을 value로 채우기
- df.ffill([axis, inplace, limit, downcast]) # ffill은 이전 값으로 결측값을 채우는 메쏘드
- df.replace([to_replace, value, …]) # value를 to_value로 바꾸기
3. Attributes
- df.index # df의 인덱스
- df.columns # df의 컬럼 라벨
- df.dtypes # df의 자료형
- df.info() # df의 정보 프린트
- df.shape # dimension을 ( , )형태로 표현
- df.T # 행 열 전환
4. Conversion
- series.to_list() # 시리즈를 리스트로
- DataFrame.astype(dtype[, copy, errors]) # df의 형변환
- DataFrame.to_dict([orient, into]) # df를 dict로
5. Indexing/Reindexing / selection / label manipulation
- df[‘열이름’] # 열 고르기
- df.loc # 인덱싱하는 함수
- df.iloc # 넘버로 인덱싱,
- df.align(other[, join, axis, level, …]) # 정렬시키기.
- df.drop([labels, axis, index, columns, …]) # 행 (index='')또는 열(columns='') 제거
- df.head([n]) # 처음 n개행
- df.tail([n]) # 끝 n개행
- df.isin(values) # values를 포함한 element 인지 아닌지
- df.rename(columns={변경전열:변경후 열,a:A,b:B}, inplace=True) # 이름 바꾸기
- df.filter([items, like, regex, axis]) # 인덱싱에 따라서 행or열 빼기
- df.replace([to_replace, value, inplace, …]) # value를 to_value로 바꾸기
- DataFrame.set_index(keys[, drop, append, …]) # index를 기존열 이름으로 지정
- DataFrame.reset_index([level, drop, …]) # index reset
- df.sort_index([axis, level, ascending, …]) # index를 정렬
- df.sort_values([axis, ascending, …]) # values를 정렬
# 열 고르기
df['feature1']
df[['feature1','feature2']] # 여러 열 고르기
df.loc[:, "feature3"] # 3열까지 고르기
df.loc[:, ["feature1", "feature2"]] # 1,2열 고르기
df.loc[:, "feature1" : "feature3"] # 3열까지 고르기
df.iloc[:, 0] # 0열
df.iloc[:, [0, 2]] # 0,2열
df.iloc[:, 0:2] # 0~1열
# 행 슬라이싱
df['index1':'index3'] # 행1부터 3까지
df.loc['index1'] # 1행만
df.loc[['index1','index3']] # 1,3행
df.loc['index1':'index3'] # 행1 ~ 행3
df.iloc[0] # row 0번째
df.iloc[[0, 2]] # 0,2 행
df.iloc[0:2] # 0~1 행
# 원소 선택
df.loc['index','feature']
df.iloc['index number','feature number']
6. Function application
- df.groupby([by, axis, level, as_index, …]) # by에 따라서 grouping을 함
- df.append(to_append[, ignore_index, …]) # row를 추가
- df.aggregate([func, axis])
# Aggregate using one or more operations over the specified axis. - df.apply(func[, axis, raw, …]) # function 적용
# GroupFeature이라는 컬럼으로 Grouping을하고 각 feature별로 평균을 냄
df1 = df.groupby('GroupFeature').feature1.mean()
df2 = df.groupby('GroupFeature').feature2.mean()
df3 = df.groupby('GroupFeature').feature3.mean()
df = pd.concat([df1,df2,df3], axis = 1)
df
# replace를 이용한 숫자로만드는 함수 만들기( 컴마 빼버리기 )
def toInt(string):
return int(string.replace(',',''))
df['feature1'] = df['feature1'].apply(toInt)
7. Computations
- df.sum([axis, skipna, level, …]) # 합
- df.mean([axis, skipna, level, numeric_only]) # 평균값
- df.describe([percentiles, include, …]) # Generate descriptive statistics.
df1 = df.groupby('column').feature1.mean()
df2 = df.groupby('column').feature2.mean()
df3 = df.groupby('column').feature3.mean()
df = pd.concat([df1,df2,df3], axis = 1)
# 컬럼에서 같은 것끼리 묵고 (ex.테마), 같은 것들의 평균을 낸다. (ex. 매출액, 자산총계, EPS등)
# output : 테마에 따른 매출액과 자산과 EPS의 평균
8. Plotting
- df.plot
- dfplot.area
- df.plot.bar
- df.plot.barh
- df.plot.box
- df.plot.density
- df.plot.hexbin
- df.plot.hist
- df.plot.kde
- df.plot.line
- df.plot.pie
- df.plot.scatter
- df.boxplot
'인공지능 > 데이터' 카테고리의 다른 글
SQL Basic (0) | 2021.03.07 |
---|---|
스케일링을 하는 8가지 방법 (0) | 2021.02.03 |
인코딩을 하는 5가지 방법 (0) | 2021.02.03 |
Numpy, 이것만은 알고가자 (0) | 2021.01.26 |
Data Handling Mindmap (0) | 2021.01.25 |
댓글