파이썬에서 데이터프레임은 자체적으로 지원하지 않기 때문에, 데이터를 분석하는 분석가 입장에서는 판다스 객체를 따로 배워야한다. 판다스 객체를 핸들링하는 방법이 여러가지 있는데, 어떤 메소드들이 있고, R과 SQL에 익숙한 사용자들이 비교하기 쉽게 이해하는게 기억에 쉬울 것 같아 아래의 컨텐츠를 작성했다.



Pandas Series 객체

Pandas Series는 인덱싱된 1차원의 배열이다. 

리스트나 배열로 부터 만들 수 있다. 앞에 인덱싱이 있기 때문에, 데이터프레임처럼 생겼는데 사실은 1차원이다. 


1
2
3
4
5
6
7
8
9
10
import pandas as pd
data = pd.Series([1,5,4,3,2])
data

--출력결과--
0    1
1    5
2    4
3    3
4    2
dtype: int64
cs


pd.Series.values : 이 시리즈에서 인덱싱을 제외하고 value값만 찾고싶으면 pd.Series.values 함수를 사용한다.

pd.Series.index : 마찬가지로, 시리즈에서 인덱싱을 출력하고 싶으면 pd.Series.index을 이용한다.

Indexing and Slicing: NumPy 배열, 리스트처럼 인덱싱이 가능하다.




판다스 데이터프레임 조작을 위한 코드 정리 (SQL과 R과의 비교)


SELECT

Dataframe.column :시리즈로 출력

Dataframe['columns']

Dataframe[['columns']]: 출력하고자 하는 컬럼이 2개 이상일 때는, 2개 이상의 컬럼을 리스트로 묶어줘서 파라미터로 넣어주어야한다. 이는 데이터프레임 형식으로 출력된다.


select 문에서의 출력컬럼의 정의

예를 들어, SELECT Age, Multiple, Age * Multiple as Age_Multi FROM Demographic 이라는 SQL식이 있다고하자. 이런것과 마찬가지로 파이썬에서 바로 연산이 가능하다. 즉, 행별로 곱한 출력한 값이 나타난다

1
2
3
dataset['Age*Class'= dataset.Age * dataset.Pclass
 
 
cs




WHERE (equiv 조건)

df[df['찾는칼럼명']== 찾고자하는 변수]

2개 이상의 조건절

df[(df['찾는 칼럼명'] == 찾고자하는 변수) & or | (df['찾는 칼럼명'] == 찾고자하는 변수)) 


위의 조건절을 non-equivalent하게 찾고자한다면, ==대신에 ><등 의 부등식을 사용하면된다


pd.where(condition, other, inplace)

inplace: 매개변수를 True을 설정하면 호출된 데이터프레임 자체를 수정하고, 아무런 값도 반환하지 않는다.



loc을 이용한 데이터 조건활용

df.loc[데이터 조건절, '출력하고자하는 데이터 컬럼명']



GROUP BY

df.groupby('칼럼명', as_index=False)

as_index: 그룹으로 출력된 행들을 인덱스를 붙이고자할 때, as_index = False 인경우는, SQL style 처럼 그룹화된 결과를 출력하고자 할 때


GROUP BY value count

month_users.groupby(['serviceId']).size()


ORDER BY

df.sort_values(by='정렬할 칼럼명', ascending = True/False)



Pandas describe function


example

df.describe()

include = 'all' : 결과내 낼 수 있는 모든 변수들을 출력


Count(distinct): 

pd['column'].value_counts() : 카테고리 변수의 각 변수값이 몇 개가 있는지 확인할 수 있음


WHERE 

ex)

df[df.컬럼 == '벨류']


Delete

df.drop('삭제하고자하는 칼럼명, axis=1)

axis=0으로 지정하면 인덱스를 날리는거고, axis는 컬럼을 날리는 것






R과 비교

1. R: colnames(df)

Python: print(df.columns.values)


2. R: head(df)

Python: df.head(숫자)

숫자: head출력시, 앞에서부터 출력되는 행의 수


3. 데이터 구조 

데이터프레임의 구조, 데이터타입을 볼 때

R: str(df)

Python: df.info()


4. 데이터 요약 (통계량의 요약)

R: summary(df)

Python: df.describe(parameter)

1) include= All

2) include = ['O'] : 카테고리 변수에대한 빈도를 포함해서 보여줌


5. 히스토그램

R: hist(칼럼명, breaks=나눌 조각수)


Python


import seaborn as sns

graph = sns.FacetGrid(dataframe, col = '컬럼명') : 여러개의 플롯을 동시에 표현할 때 사용, col = 컬럼별 데이터를 서브셋하여 나눠서 플로팅할 경우

2) Map

graph.map(function, *'플롯할 데이터의 컬럼명', bins= '숫자)

3) add_legend()

graph.add_leggend(): 레전드 추가


참고로 '*' asterisk은 인자를 입력할 때, 임의의 숫자대로 입력이 가능한 상태이다. 예를 들어 def save_rank(*arg): print(args)에 인자를 save_rank('a','b','c')이렇게 넣으면 하나씩 맞춰서 출력한다. 이 기능을 unpacking이라고 한다. 리스트에 있는 값들을 하나씩, 두개씩, 또는 임의의 개수 대로 입력하고자할 때 사용한다.






Pandas 기타 함수

pd.cut() : 정렬된 데이터들을 X개의 구간으로 나누고자할 때 해당함수를 사용한다. 데이터가 연속형 데이터일 때, 사용하기 좋다. 순서일 때도 사용할수는 있기는 하다. 사용을 pd.cut(array-like data, bins=자르고자 하는 구간 수)


Pandas_series.mode(): 범주형 변수인 경우에 시리즈로 나타낸다음, '.mode()' 속성을 입력하면, 해당 리턴은 범주형 변수의 카테고리가 리턴이 된다.

반응형

'Data science' 카테고리의 다른 글

Reshape and Pivot table  (0) 2019.03.08
SVM (Support Vector machine)  (0) 2019.02.23
Decision Tree (의사결정나무)  (2) 2019.02.15
Category data handling  (0) 2019.02.14
kNN model (k-Nearest neighbor model)  (0) 2019.02.13

+ Recent posts