캐글 미니코스에서 판다스를 공부해보았다
UCI 데이터 사이언스 과목 청강할때 그때그때 필요한 내용을 공부하면서 사용해본적은 있지만
개념을 정확히 모르고 사용하니 쓸때마다 알아가는 느낌이 아니라 매번 검색해야해서 답답했다
캐글 코스를 들으면 금방 정리할 수 있을 것 같아 듣고 나중에 보기 위한 내용정리!
판다스는 이렇게 import 해서 사용한다
1
|
import pandas as pd
|
cs |
판다스를 사용하기 위해서는 가장 중요한 두개의 object가 있는데 바로 DataFrame과 Series이다
먼저 DataFrame은 테이블이라고 생각할 수 있다
이 테이블은 index를 0,1,2로 기본적으로 만들지만 따로 index를 지정해줄수도 있다
Series는 DataFrame과는 다르게 value들의 수열이라고 볼 수 있다
그저 데이터의 list!
DataFrame처럼 index는 지정해줄 수 있지만 테이블은 아니다
역시 사용해보면서 익히는 것이 좋을 것 같아 exercise 이외의 데이터를 가지고 연습해보았다
이번에 사용해본 데이터는 리그오브레전드 게임 데이터ㅋㅋㅋ
롤을 하지는 않지만 주변에 롤에 환장하는 사람이 많아서 자연스레 관심이 갔다
판다스에서 csv 파일을 사용하고 싶으면 이렇게 이용할 수 있다
1
2
3
|
lol_data = pd.read_csv('/kaggle/input/league-of-legends-diamond-ranked-games-10-min/high_diamond_ranked_10min.csv')
lol_data.shape
lol_data.head()
|
cs |
read_csv 함수를 이용해 데이터를 저장할 수 있다
이때 데이터는 shape를 통해 본다면 데이터가 몇개 있는지와 feature의 개수를 파악할 수 있다
head로 몇개만 살펴보자면
이런 느낌!
이제 이 데이터를 가지고 요리조리 사용해보았다
먼저 selection은 두가지로 접근할 수 있다.
1. index based selection
iloc 함수를 사용한다
row-first, col-second 헷갈리지 않게 주의하기
1
2
3
|
# index based selection
lol_data.iloc[1]
lol_data.iloc[:,1]
|
cs |
이렇게 행과 열을 select 해서 Series로 얻어낼 수 있다
2. label based selection
loc 함수를 사용한다
index based selection과 같이 사용할 수도 있다
1
2
|
# label based selection
lol_data.loc[[1,2,3],'blueWins']
|
cs |
set index 함수를 통해 gameID를 index로 만들어보았다
label based selection과 함께 쓰면 좋다
1
|
lol_data.set_index('gameId').loc[:,'blueWins']
|
cs |
이렇게 사용하면 index로 gameId를 갖는 blueWins의 값들을 Series로 얻어올 수 있다
다음으로는 conditional selection을 살펴보았다
1
|
lol_data.blueWins == 0
|
cs |
blueWins가 0인지 아닌지에 대한 정보를 참 거짓으로 담고 있는 Series로 만들어 사용할 수 있다
1
|
lol_data[(lol_data.blueWins == 1) & (lol_data.blueFirstBlood == 1)]
|
cs |
이런식으로 블루팀이 이겼으면서 퍼블을 먹은 경우의 데이터만 DataFrame으로 받아올 수 있다
isna 함수와 함께 사용한다면 데이터가 비어있는 행을 제외하고 사용할 수도 있다
데이터가 비어 있는 행은 isna 함수를 이용해 제외시키는 것 이외에도 fillna 함수를 이용해 특정 값을 채워주거나 채워준 값을 replace 함수를 이용해 변환시켜 사용할 수도 있다
다음은 summary function들을 살펴보았다
직관적인 이름에 쉬운 사용법을 가지고 있어 금방 손에 익었다
1
2
3
4
|
lol_data.describe()
lol_data.blueKills.unique()
lol_data.blueKills.value_counts()
lol_data.blueKills.mean()
|
cs |
이름만 봐도 결과값이 쉽게 예상된다
약간 낯선 개념이었던 map
map을 공부할때는 게임 플레이 데이터 말고 챔피언 데이터를 사용하였다
map은 이런식으로 사용할 수 있다
1
2
|
speed_of_attack_mean = champion_data.speed_of_attack.mean()
newdata = champion_data.speed_of_attack.map(lambda p : p - speed_of_attack_mean)
|
cs |
newdata에는 Series 값이 담기는데 이 때 전체 DataFrame을 얻고 싶다면 map 함수 대신 apply 함수를 사용할 수 있다
1
2
3
4
5
|
def remean_speed_of_attack(row):
row.speed_of_attack = row.speed_of_attack - speed_of_attack_mean
return row
champion_data.apply(remean_speed_of_attack,axis='columns')
|
cs |
주의할 점은 두 함수 모두 return 값만 바뀌는 것이지 원래 데이터 값을 바꾸는 것은 아니다
group by는 sql에서 다뤘던 것과 비슷한 느낌이었다
1
2
|
champion_data.groupby('origin').origin.count()
champion_data.groupby('origin').health.min()
|
cs |
처음은 value_counts와 똑같은 역할을 하는 함수 구조이다
두번째 줄은 각 그룹에서 health가 가장 작은 값들을 나타내어준다
groupby로 묶여진 DataFrame은 기존의 DataFrame처럼 apply 함수도 사용 가능하다
또한 agg 함수를 이용해 다양한 함수들을 동시에 사용할 수도 있다
1
|
champion_data.groupby('origin').health.agg([len,min,max])
|
cs |
마지막으로 sorting!
1
|
champion_data.sort_values(by='attack',ascending=False)
|
cs |
이렇게 한줄만 봐도 무슨 뜻인지 바로 알 수 있을 것 같다
attack이 큰 순서대로 정렬하여 DataFrame을 반환시켜주는 함수이다
ascending은 true가 default 값이다
실제 데이터로 여러 함수를 반복적으로 연습해보니 pandas를 어떻게 써야 할지 감이 조금 오는 것 같다
얼른 데이터를 필요한 모양으로 만들어 모델을 만드는 데 사용해보고 싶다
'AI' 카테고리의 다른 글
[Kaggle] Melbourne 집값 예측하기 - 3 Categorical Variables (0) | 2020.05.23 |
---|---|
[Kaggle] Melbourne 집값 예측하기 - 2 Missing Values (0) | 2020.05.23 |
[Kaggle] Melbourne 집값 예측하기 - 1 (0) | 2020.05.22 |
[Python Big Data] Google bigquery와 SQL (0) | 2020.05.20 |
[Python Data Visualization] Seaborn 사용법 (0) | 2020.05.13 |