[데이터 분석 입문 with 파이썬(2)] Pandas,Numpy,Matplotlib 기초 익히기

01. Pandas의 설치 및 활용

판다스는 파이썬에서 가장 널리 사용되는 데이터 분석 라이브러리로 데이터 프레임이라는 자료구조를 사용한다. 데이터 프레임은 엑셀의 스프레드시트와 유사한 형태이며 파이썬으로 데이터를 쉽게 처리할 수 있도록 한다.

import pandas as pd

names = ['yelim', 'gyuwon','haeun','soyeon','yeeun']
births = [968, 155, 77, 578, 973]
custom = [1, 5, 25, 13, 23232]

babydataset = list(zip(names, births))
df = pd.DataFrame(data=babydataset, columns=['names', 'births'])

df.head() # head() 함수는 데이터 프레임의 상단 부분만 출력
  names births
0 yelim 968
1 gyuwon 155
2 haeun 77
3 soyeon 578
4 yeeun 973
df.dtypes # 데이터프레임의 열 타입 정보
names     object
births     int64
dtype: object
df.index # 데이터프레임의 인덱스 정보
RangeIndex(start=0, stop=5, step=1)
df.columns # 데이터 프레임의 열의 형태 정보
Index(['names', 'births'], dtype='object')

 

지금까지 데이터 프레임의 기본 정보를 출력해봤으니, 이번에는 행과 열 각각의 데이터를 출력해보자

데이터 프레임의 열 이름을 선택하여 데이터를 출력할 때는 df['names'] 를 실행한다.

그리고 행의 구간에 해당하는 데이터를 출력할 때는 df[0:3] 과 같은 방법을 사용한다.
여기서 0과 3은 데이터 프레임의 행 번호를 의미하며 모든 데이터 프레임의 행 번호는 0부터 시작한다.

df['names']
0     yelim
1    gyuwon
2     haeun
3    soyeon
4     yeeun
Name: names, dtype: object
df[0:3]
  names births
0 yelim 968
1 gyuwon 155
2 haeun 77

위의 두 결과는 서로 형태가 다르게 보이는데,
이는 첫 번째 결과는 '시리즈'라는 객체를 출력한 것이고
두 번째 결과는 데이터 프레임을 출력한 것이기 때문이다.
시리즈 객체에 대해서는 추후에 다룬다.

이제 데이터 프레임으로 수행할 수 있는 가장 기초적인 두 가지 기능을 알아보자.

첫번째는 필터링 기능이다.

df[df['births']>100] #데이터 베이스에서 births 열이 100보다 큰 데이터를 선택한다
  names births
0 yelim 968
1 gyuwon 155
3 soyeon 578
4 yeeun 973

두번째는 평균값을 계산하는 기능이다.

df.mean()
births    550.2
dtype: float64

02. Numpy의 설치와 활용

넘파이는 Numerical Python 의 줄임말로 수치 계산을 위해 만들어진 파이썬 라이브러리이다.

넘파이에서는 배열 개념으로 변수를 사용하며 벡터, 행렬 등의 연산을 쉽고 빠르게 수행하도록 지원한다.
파이썬이라는 언어가 기본 자료구조인 리스트, 딕셔너리 등을 갖고 있는 것과 마찬가지로 데이터 분석이라는 언어는 기본 자료구조로 넘파이 배열을 갖고 있다.

import numpy as np 

우선 numpy 배열을 하나 선언해보겠다. 아래 코드는 1차원 배열이 3개, 2차원 배열이 5개의 값을 가지는 15개의 숫자를 생성하는 코드이다.

arr1 = np.arange(15).reshape(3,5)
arr1
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])

0부터 14까지 15개의 숫자를 (3,5) 차원으로 생성한 것을 확인할 수 있다.

앞에서 생성한 데이터의 차원과 변수 타입을 확인하는 방법은 다음과 같다.

arr1.shape #넘파이 배열 정보 확인하기 - 차원
(3, 5)
arr1.dtype #넘파이 배열 정보 확인하기 - 데이터타입 확인
dtype('int32')
arr3 = np.zeros((3,4)) #zeros()는 0으로 채워진 넘파이 배열 생성 1로 채우는건 ones()
arr3
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])

 

넘파이 데이터 연산 방법

동일한 shape를 가지는 데이터에 사칙연산을 수행할 수 있음

arr4 = np.array([[1,2,3],[4,5,6]],dtype = np.float64)
arr5 = np.array([[7,8,9],[10,11,12]],dtype = np.float64)

#사칙연산 출력
print("arr4 + arr5 = ")
print(arr4+arr5,"\n")
print("arr4 - arr5 = ")
print(arr4-arr5,"\n")
print("arr4 * arr5 = ")
print(arr4 * arr5, "\n")
print("arr4 / arr5 = ")
print(arr4/arr5,"\n")
arr4 + arr5 = 
[[ 8. 10. 12.]
 [14. 16. 18.]] 

arr4 - arr5 = 
[[-6. -6. -6.]
 [-6. -6. -6.]] 

arr4 * arr5 = 
[[ 7. 16. 27.]
 [40. 55. 72.]] 

arr4 / arr5 = 
[[0.14285714 0.25       0.33333333]
 [0.4        0.45454545 0.5       ]] 

이외에도 넘파이 라이브러리는 dot()함수를 이용한 행렬 연산 등 데이터 분석에 필요한 많은 기능을 제공하고 있다.

03. Matplotlib의 설치와 활용

matplotlib 라이브러리는 데이터를 시각화해주는 가장 기본적인 라이브러리이다. 주피터 노트북에서 Matlpotlib로 시각화된 그래프를 출력하려면 아래와 같은 코드를 미리 실행해두어야 한다.

%matplotlib inline 이 코드는 현재 실행중인 주피터 노트북에서 그래프를 출력 가능하도록 선언하는 명령어이다.

%matplotlib inline
import matplotlib.pyplot as plt

이제 두 가지 그래프 출력 예제를 통해 Matplotlib를 알아보겠다. 첫번쨰 그래프는 막대 그래프이다. matplot 라이브러리를 사용할 때는 우선 그래프 객체 라는 걸 생성해줘야 한다. plt.bar(x,y) 를 실행하면 그래프 객체가 생성되고, 이제 객체에 다른 요소를 추가해줄 수 있다.

이어지는 코드 plt.xlabel, plt.ylabel, plt.title은 그래프 객체에 각각 x축 제목, y축 제목, 그래프 전체 제목을 달아주는 코드이다.

마지막으로 plt.show()를 호출하면 그래프를 출력할 수 있다.

y = df['births']
x = df['names']

plt.bar(x,y) #막대 그래프 객체 생성
plt.xlabel('NAMES') # x축 제목
plt.ylabel('BIRTHS') #Y축 제목
plt.title('Bar plot') #그래프 제목
plt.show() #그래프 출력

png

 

실행시 이렇게 출력됨

 

두 번째 그래프는 산점도 그래프다(scatter plot)이다. 아래 코드에서는 넘파이를 이용하여 데이터를 생성한 뒤, 이를 산점도 그래프로 그려보았다.
random.seed() 함수는 랜덤 추출 시드를 고정한 것이고 이를 토대로 random.rand()함수가 넘파이 배열 타입의 난수를 생성한다.
그리고 arrange() 함수는 5의 간격으로 0부터 100까지의 숫자를 생성한 것이다. 지금까지의 데이터를 plt.scatter()함수로 출력한 결과는 다음과 같다.

np.random.seed() #랜덤 추출 시드를 고정한다

#산점도 데이터를 생성한다.
x = np.arange(0.0,100.0,5.0)
y = (x * 1.5) + np.random.rand(20)*50

#산점도 데이터를 출력한다.
plt.scatter(x,y,c="b",alpha = 0.5, label = "scatter point")
plt.xlabel("X")
plt.ylabel("Y")
plt.legend(loc = 'upper left')
plt.title("scatter plot")
plt.show()

png

실행시 이렇게 출력됨

 

앞의 코드에서 scatter() 함수에 사용된 c, alpha,label 파라미터와 legend()함수는 그래프를 보기 좋게 꾸며주기 위한 파라미터들이다.