[Python] 데이터 분석을 위한 기초 문법
사실 우리가 인터넷 상에서 취득하는 데이터들을 분석하기 위해서는 기초적인 문법들만 알고 있어도 된다.
(당장 machine learning, deep learning 같은 것들을 할 건 아니니까. 필요하면 그건 나중에 배우는 걸로.)
크게는 데이터를 불러와서 내 입맛에 맞게 요약하고, 그걸 좀 더 직관적으로 확인할 수 있게 시각화하는 단계로 나눌 수 있을 것 같다.
0. Jupyer notebook 실행시키기
- 기본적인 데이터 분석만 할 거면 jupyter notebook 을 활용하는 걸 추천한다. 나는 터미널에서 jupyter notebook 이라는 키워드를 입력해서 실행시키는 편인데, windows 에서는 시작 메뉴에 아이콘이 있을 거다. 가끔 아이콘으로 실행이 안 될 때가 있는데 그 때는 아래처럼 터미널에서 실행시키면 대부분 된다.
(만약 새로운 package 를 설치한 후 실행이 안 된다면, dependency 가 꼬인거니 설치한 package 를 삭제하거나 dependency 를 맞춰주면 됨)
이렇게 팝업으로 활성화되면, 폴더나 파일을 생성해서 아래 내용을 따라서 직접 한 번 해보자. 눈으로 보는 거랑 머리로 이해하는 거랑 손으로 익히는 건 완전 다르다.
1. 데이터 불러오기
- 데이터를 불러오기 전에 어떤 형태의 데이터를 불러올 것인지 정해야한다. 일반적으로는 csv, txt 파일을 많이 사용하고, 복사한 데이터를 붙여다가 쓸 수도 있다. 좀 더 나아가서는 api 등을 통해 다른 web 이나 database 에서 데이터를 제공받아 사용할 수도 있다.
우선 여기서는 csv 파일을 불러와서 사용하는 걸로 하자.
# pandas 라는 package 를 pd 라는 이름으로 import 한다는 뜻
import pandas as pd
# 불러올 데이터의 파일 경로 입력
# data = pd.read_csv('파일 경로')
data = pd.read_csv('sample_dataset.csv')
이렇게 pandas 를 이용해 csv 파일을 읽을 수 있다. 아래 같은 형태의 데이터를 불러온 거라고 보면 된다. (이런 형태를 dataframe 이라고 함)
2. 데이터 요약하기
- 코딩을 하지 않는 사람들은 데이터를 만질 때 엑셀을 많이 사용하는데 그 중에서도 pivot 기능을 많이 사용할 거다. Pivot table 에서는 구분별 개수, 평균, 최저, 최고 등의 정보를 요약해서 볼 수 있다. Python 에서 pivot table 을 만드는 방식은 두 가지가 있는데 성질이 조금 다르다고 보면 된다.
1) dataframe.pivot(index, columns, values)
- dataframe 을 재구조화시키는 걸로 행(index)/열(column)을 지정하고, 그에 맞게 구성된 matrix 의 빈칸을 value 로 채우는 거라고 보면 된다. values 에는 수치형 데이터가 들어가도 되고, 아래처럼 범주형 데이터가 들어가도 된다.
data.pivot(index=['date', 'stockCode'], columns=['signal'], values=['name'])
2) pd.pivot_table(dataframe, index, columns, values, aggfunc)
- 1번에서는 values 에 범주형이 들어갈 수 있는데, 여기서는 수치형 데이터를 다룬다. aggfunc 에는 count, mean, min, max 등 어떤 수치 데이터를 표현할 것인가를 지정해준다. 위의 예시처럼 범주형 데이터를 넣으면 아래와 같이 에러가 발생하는 걸 볼 수 있다.
pd.pivot_table(data, index=['date', 'stockCode'], columns=['signal'], values=['name'])
반면에 수치형 데이터를 지정해주면 아래와 같은 결과를 확인할 수 있다.
pd.pivot_table(data, index=['date', 'stockCode'], columns=['signal'], values=['high'], aggfunc='min')
이런 식으로 데이터를 요약해볼 수 있다는 하나의 예제일 뿐이니, index / columns / values / aggfunc 에 이것저것 넣어보고 시도해보는 것도 좋겠다. 데이터가 단조로워서 예제로 사용하기에 좋은 데이터는 아니지만, 위에서 사용한 sample 인데 연습할 때 쓸 데이터가 없으면 이걸로라도 한 번 시도해보시길. 해보는 게 목적이니까.
3. 시각화하기
- 데이터를 한 눈에 직관적으로 파악하기 위해서는 시각화하는 게 중요하다. 주로 사용되는 그래프 유형은 bar chart, line chart, scatter plot 정도인 것 같다. 나는 matplotlib 을 주로 사용하고, seaborn 도 가끔 사용한다. (seaborn 그래프가 좀 더 이쁜 듯)
하나씩 그려보자.
1) 데이터 준비
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# sample data 만들기
raw_data = {'year': ['2018', '2019', '2020', '2021'],
'value': [100, 400, 300, 600]}
df = pd.DataFrame(raw_data)
이렇게 데이터를 생성하면, 아래와 같은 형태의 dataframe 이 된다.
2) 내가 가지고 있는 데이터로 어떤 그래프를 그릴 수 있을지 고민해보기
- 그래프를 그리려면 우선 내가 어떤 데이터를 가지고 있는지 데이터에 대해 정확하게 이해하고 있어야 한다. 예를 들어 내가 범주형 / 수치형 데이터를 모두 가지고 있다면, 범주에 따른 수치 변화를 살펴볼 수 있다. (연도별 강수량 등)
반면에 내가 수치형 데이터만 가지고 있다면, 그 데이터들 간의 상관관계를 살펴볼 수 있다.
내가 어떤 데이터를 어떻게 시각화해서 보고 싶은지 먼저 고민해보자.
3) 내가 그리고자 하는 그래프 형태별로 요구되는 데이터 확인하기
- 시각화 package 별로 그래프를 그릴 때 요구되는 데이터 항목이 다를 수 있다. 아래는 하나의 예시로 matplotlib 를 사용해서 bar chart 를 그리기 위해 요구되는 데이터 항목이 정리된 내용이다. 구글에서 사용하고자 하는 package / function 을 입력하면 공식 홈페이지에서 확인할 수 있다. (예를 들어, matplotlib bar chart 와 같은 키워드)
4) 그래프 그리기
# bar chart
x = np.arange(len(df))
plt.bar(x, df['value'])
plt.xticks(x, df['year'])
plt.show()
# line chart
plt.plot(df['year'], df['value1'])
plt.show()
# scatter plot
plt.scatter(df['value1'], df['value2'])
plt.xlabel('value1')
plt.ylabel('value2')
plt.show()
위의 코드대로 한 번 실행시켜보면, 아래와 같이 그래프를 시각화해서 볼 수 있다.
좀 더 세밀하게 분석하려면 여기서 더 나아가 grouped bar chart 를 그리기도 하고, 서로 다른 유형의 그래프를 중첩해서 보기도 한다. 그런 디테일한 내용은 다음에 기회가 되면 다룰 예정이다.
분석의 key point 는 내가 어떤 데이터를 가지고 있는지 제대로 파악할 것! 그리고 내가 보고 싶은 결과물이 어떤 것일이 상상해볼 것!