오늘은 먼저 파이썬 판다스의 기본 구조인 시리즈와 데이터프레임에 대해 알아보겠습니다.
먼저 파이썬 판다스를 사용하려면, 아래처럼 판다스 라이브러리를 불러와야합니다.
판다스 라이브러리를 불러오고, 코드 중에 계속 써야하니, 약칭(줄임말)으로 pd 라고 지칭하는 코드입니다.
import pandas as pd
파이썬에는 딕셔너리가 있는데, 키값과 밸류값이 있습니다.
예를들어, 내 키가 183cm이고, 몸무게가 85kg, 성별은 남자라고 하면,
내 "신상정보는 키 183, 몸무게 85, 성별 남자" 이렇게 저장될 수 있습니다.
이걸, 딕셔너리라고 하는 방식으로 저장하면,
키와 몸무게, 성별 등 신상정보는 Key 값이고, 실제 정보는 Value 값입니다.
import pandas as pd
dict_data = {'height' : 183, 'weight' : 85, 'sex' : 'male'}
sr = pd.Series(dict_data)
코드로 표현하면 위와 같은데요, 제 신상정보를 만들어놓고, 파이썬 판다스 시리즈로 저장해놓은 것입니다.
시리즈는 위와같이 키값과, 밸류값이 1:1 매칭되는 1차원 구조라고 볼 수 있습니다.
인덱스라는 개념이 있는데요, 데이터의 주소라고 할 수 있습니다. 내가 데이터를 불러올때, 몇번째 있는 값을 가져오라거나, 어떤 이름의 값을 가져오라고 명령할 수 있는데, 이런 데이터의 주소가 되는 것이 바로 인덱스입니다.
위의 신상정보 예시에서는 딕셔너리를 시리즈로 만들었기 때문에, 인덱스가 각각의 이름으로 있는데요, 그렇지 않게 값만 들어있는 데이터를 시리즈로 만들면, 별다른 인덱스를 지정해주지 않으면 정수형 순서대로 인덱스가 자동으로 부여됩니다.
import pandas as pd
list_data = ['2019-06-15', 9.67, '오감자', 100, True]
sr = pd.Series(list_data)
위의 예시를 보면, 다양한 형식의 데이터(날짜, 실수, 텍스트, 참거짓)를 리스트로 만들어 시리즈로 변환하면, 자동적으로 0~4까지의 인덱스가 붙는 것을 볼 수 있습니다. 여기에, 인덱스를 지정해줄 수도 있습니다.
import pandas as pd
list_data = ['2019-06-15', 9.67, '오감자', 100, True]
sr = pd.Series(list_data, index=['날짜','학점','좋아하는과자',점수','학생여부')
위의 파란 부분에, 인덱스 값을 지정해주면, 별도의 정수형 인덱스로 0부터 숫자가 부여되는게 아니라, 지정한 인덱스 값이 설정됩니다.
여기서 sr이라고 만든 시리즈의 원소를 선택하는 방법은, 인덱스 명이나 정수형 인덱스숫자로 선택할 수 있고, 이건 인덱스의 범위도 지정할 수 있습니다. sr[2] 혹은 sr['좋아하는과자'] 이런식으로 시리즈의 원소를 선택할 수 있습니다.
위에까지는 시리즈에 대한 부분이었는데요, 이제 데이터프레임에 대해 알아보겠습니다.
데이터프레임은 2차원배열입니다. 우리가 보통 하는 엑셀과 같은 개념이죠.
import pandas as pd
dict_data = {'facebook':[200,3.4,1100], 'gdn':[150,1.5,1100], 'kakaoad':[89,2.3,2000], 'naverad':[600,1.21,700], 'youtube':[2000,0.6,2000]}
df = pd.DataFrame(dict_data)
위의 예시에서는 예를들어 마케팅 결과 데이터의 예시인데, 키값이 각 매체의 이름 값이고, 그 안에 리스트가 있는 개념입니다. 예를들어 아직 인덱스값을 이름으로 지정해주진 않았지만, 첫 값이 CPC, 두번째는 CTR, 세번째는 CPM 값이라고 하면, 각 매체의 값을 비교할 수 있는 데이터프레임을 만든거죠.
데이터프레임의 인덱스명과 칼럼명은 직접 생성할수도 있고 변경할수도 있습니다.
import pandas as pd
df = pd.DataFrame([[200, 3.4, 1100], [150, 1.5, 1100]],
index=['facebook', 'gdn'],
columns=['CPC', 'CTR', 'CPM'])
위의 예시 데이터를 직접 명칭을 지정해서 만들면 위와 같고,
df.index=['페이스북', '구글광고']
df.columns=['클릭당비용', '클릭율', '노출당비용']
인덱스와 컬럼명을 한글로 바꾸려면 위처럼 입력하면 됩니다.
df.rename(coulmns={'클릭당비용' : '씨피씨}
df.rename(index={'페이스북' : '페북}
이런식으로 컬럼, 인덱스명을 변경할수도 있습니다.
df.drop('페북')
위와 같이 인덱스(행)을 날릴 수도 있고,
아래와 같이 컬럼(열)을 날릴 수도 있습니다.
df.drop('클릭율', axis=1, inplace=True)
행을 선택하는 방법은 loc를 사용하는데요,
인덱스 이름을 사용할 땐 loc를 사용하고, 인덱스 숫자를 사용할 땐 iloc를 사용하면 됩니다.
label1 = df.loc[['페이스북','구글광고']]
position = df.iloc[[0,1]]
컬럼(열)을 선택하는 건 간단한데요,
df['컬럼명'] 또는 df['컬럼명', '컬럼명']
df.컬럼명
이렇게 선택하면 됩니다.
이제 인덱스나 컬럼 전체가 아닌 특정 요소(엘리먼트)를 찾는 방법을 살펴보면,
이것도 loc나 iloc를 사용하는데요, 다시 새롭게 데이터프레임을 만들어보면,
import pandas as pd
exam_data = {'매체명' : [ '페북', '구글', '유투브'],
'CPC' : [ 90, 80, 70],
'CPM' : [ 98, 89, 95],
'CTR' : [ 85, 95, 100],
'ROAS' : [ 100, 90, 90]}
df = pd.DataFrame(exam_data)
이렇게 각 매체별 결과 데이터를 데이터프레임으로 만들고,
매체명을 새로운 인덱스로 지정합니다.
df.set_index('매체명', inplace=True)
페이스북의 ROAS, CPC를 찾아볼까요?
아래 코드의 파란색 첫번째줄들은 ROAS만 찾는거고, 아래 빨간줄은 CPC도 찾는것입니다.
a = df.loc['페북', 'ROAS']
t = df.loc['페북', ['ROAS', 'CPC']]
a = df.iloc[0,3]
t = df.iloc[0,[3,0]
이런식으로 직접 인덱스와 컬럼명을 입력하거나, 순서로 찾는 방법이 있습니다.
컬럼을 더할 수도 있는데, 노출 수치의 컬럼을 더하려면 아래와같이 입력하면,
모든 인덱스 값에 REACH 값이 80으로 전체 적용되는 걸 볼 수 있습니다.
df['REACH'] = 80
새로운 행을 더할수도 있는데,
df.loc[5] = ['카카오', 100, 200, 100]
이런식으로 순서대로 더할 수 있습니다. 그런데 기존 데이터프레임의 컬럼에 맞게 데이터를 입력해야겠군요.
데이터프레임의 특정 원소를 변경하는 법은, 페북의 ROAS 가 100에서 200으로 변경되었다면 아래와 같이 입력하면 됩니다.
df.loc['페북'][ 'ROAS'] = 200
df.iloc[0][3] = 200
엑셀의 행열 변환처럼, 전체의 행열을 바꾸는 건
df = df.transpose()
새로운 인덱스를 지정하는 건 reindex, 리셋하는건 reset 입니다.
ndf = df.reindex(new_index)
ndf2 = df.reindex(new_index, fill_value=0)
ndf = df.reset_index()
인덱스를 내림차순으로 정리하는 코드입니다.
ndf = df.sort_index(ascending=False)
밸류(값) 기준으로 내림차순으로 정리하는 코드입니다.
ndf = df.sort_values(by='c1', ascending=False)
지금까지 기본적인 시리즈와 데이터프레임에 대해 알아봤습니다.
내일은 시리즈와 데이터프레임의 산술연산에 대해 알아보고,
그 뒤에 데이터 입출력에 대해 알아보겠습니다.
감사합니다^^
'데이터분석' 카테고리의 다른 글
퍼포먼스 마케터를 위한 "파이썬 판다스" 학습계획 (0) | 2020.06.12 |
---|---|
[파이썬데이터분석] 네이버 블로그 통계 가져와서 분석하기(1) (0) | 2020.05.05 |
댓글