티스토리 뷰
pip install pandas numpy matplotlib
Collecting pandas Using cached https://files.pythonhosted.org/packages/c3/e2/00cacecafbab071c787019f00ad84ca3185952f6bb9bca9550ed83870d4d/pandas-1.1.5-cp36-cp36m-manylinux1_x86_64.whl Collecting numpy Using cached https://files.pythonhosted.org/packages/45/b2/6c7545bb7a38754d63048c7696804a0d947328125d81bf12beaa692c3ae3/numpy-1.19.5-cp36-cp36m-manylinux1_x86_64.whl Collecting matplotlib Using cached https://files.pythonhosted.org/packages/09/03/b7b30fa81cb687d1178e085d0f01111ceaea3bf81f9330c937fb6f6c8ca0/matplotlib-3.3.4-cp36-cp36m-manylinux1_x86_64.whl Collecting python-dateutil>=2.7.3 (from pandas) Using cached https://files.pythonhosted.org/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl Collecting pytz>=2017.2 (from pandas) Using cached https://files.pythonhosted.org/packages/70/94/784178ca5dd892a98f113cdd923372024dc04b8d40abe77ca76b5fb90ca6/pytz-2021.1-py2.py3-none-any.whl Collecting pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 (from matplotlib) Using cached https://files.pythonhosted.org/packages/8a/bb/488841f56197b13700afd5658fc279a2025a39e22449b7cf29864669b15d/pyparsing-2.4.7-py2.py3-none-any.whl Collecting cycler>=0.10 (from matplotlib) Using cached https://files.pythonhosted.org/packages/f7/d2/e07d3ebb2bd7af696440ce7e754c59dd546ffe1bbe732c8ab68b9c834e61/cycler-0.10.0-py2.py3-none-any.whl Collecting pillow>=6.2.0 (from matplotlib) Using cached https://files.pythonhosted.org/packages/89/d2/942af29f8494a1a3f4bc4f483d520f7c02ccae677f5f50cf76c6b3d827d8/Pillow-8.2.0-cp36-cp36m-manylinux1_x86_64.whl Collecting kiwisolver>=1.0.1 (from matplotlib) Using cached https://files.pythonhosted.org/packages/a7/1b/cbd8ae738719b5f41592a12057ef5442e2ed5f5cb5451f8fc7e9f8875a1a/kiwisolver-1.3.1-cp36-cp36m-manylinux1_x86_64.whl Collecting six>=1.5 (from python-dateutil>=2.7.3->pandas) Using cached https://files.pythonhosted.org/packages/ee/ff/48bde5c0f013094d729fe4b0316ba2a24774b3ff1c52d924a8a4cb04078a/six-1.15.0-py2.py3-none-any.whl Installing collected packages: numpy, six, python-dateutil, pytz, pandas, pyparsing, cycler, pillow, kiwisolver, matplotlib Successfully installed cycler-0.10.0 kiwisolver-1.3.1 matplotlib-3.3.4 numpy-1.19.5 pandas-1.1.5 pillow-8.2.0 pyparsing-2.4.7 python-dateutil-2.8.1 pytz-2021.1 six-1.15.0 Note: you may need to restart the kernel to use updated packages.
판다스의 설치 및 활용¶
판다스는 파이썬에서 가장 널리 사용되는 데이터 분석 라이브러리로 데이터프레임이라는 자료구조를 사용한다. 데이터프레임은 엑셀의 스프레드시트와 유사한 형태이며 파이썬으로 데이터를 쉽게 처리할 수 있도록 한다. 아래코드는 데이터 분석 라이브러리를 import 하는 코드이다. 판다스 라이브러리는 보통 pd라는 이름으로 축약하여 사용한다.
import pandas as pd
다음으로 판다스의 데이터 프레임을 생성해보자. 데이터 프레임에 들어갈 2개의 열 데이터를 입력한 뒤, list()와 zip() 함수로 데이터셋을 생성한다. 그리고 이 데이터셋으로 아래와 같은 데이터 프레임 객체를 생성할 수 있다. head() 함수로 생성된 데이터 프레임의 일부분을 살펴볼 수 있다.
names = ['Bob', 'Jessica', 'Mary', 'John', 'Mel']
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()
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
3 | John | 578 |
4 | Mel | 973 |
이번에는 데이터 프레임의 기본 정보를 출력해보자. dtypes, index, columns로 데이터 프레임의 행, 열 정보를 출력할 수 있다.
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]과 같은 방법을 사용한다.
df['Names']
0 Bob 1 Jessica 2 Mary 3 John 4 Mel Name: Names, dtype: object
df[0:3]
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
2 | Mary | 77 |
위 결과는 서로 형태가 다르게 보이는데, 이는 첫 번째 결과는 시리즈라는 객체를 출력한 것이고 두 번째 결과는 데이터 프레임을 출력한 것이기 때문이다. 마지막으로 데이터 프레임으로 수행할 수 있는 가장 기초적인 두 가지 기능을 알아보자. 첫 번째는 필터링 기능이다. 아래 df[df['Births'] >100]이라는 코드는 전체 데이터 프레임 내에서 Births 열에 해당하는 데이터가 100 보다 큰 경우에만 데이터를 반환해달라는 코드이다.
df[df['Births'] > 100]
Names | Births | |
---|---|---|
0 | Bob | 968 |
1 | Jessica | 155 |
3 | John | 578 |
4 | Mel | 973 |
두 번째는 평균값을 계산하는 기능이다. 아래 코드는 현재 데이터 프레임의 열 중에서 유일하게 평균값을 구할 수 있는 Births 열의 평균을 mean()함수로 계산한 것이다.
df.mean()
Births 550.2 dtype: float64
넘파이의 설치와 활용¶
넘파이는 Numerical python의 줄임말로 수치 계산을 위해 만들어진 파이썬 라이브러리이다. 넘파이에서는 배열 개념으로 변수를 사용하며 벡터, 행렬 등의 연산을 쉽고 빠르게 수행할 수 있도록 지원한다. 파이썬이라는 언어가 기본적으로 리스트, 딕셔너리등을 갖고 있는 것과 마찬가지로 데이터 분석이라는 언어는 기본 자료구조로 넘파이 배열을 가지고 있다. 이제 몇 가지 간단한 코드를 통해 넘파이를 알아보자. 넘파이는 통상적으로 np라는 약어로 라이브러리를 import 한다.
import numpy as np
우선 넘파이 배열을 하나 선언해 보자. 아래 코드는 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]])
- 혼동하지 말아야 할 것은 이 배열은 넘파이 배열이며, 파이썬의 기본 자료구조와는 다른 데이터 타입이라는 것이다.
이번엔 앞에서 생성한 데이터의 차원과 변수 타입을 확인해 보자. 넘파이 배열 데이터의 차원을 확인하는 방법은 shape를 호출하는 것이고, 데이터 타입을 확인하는 방법은 dtype을 호출하는 것이다.
arr1.shape
(3, 5)
arr1.dtype
dtype('int64')
혹은 zeros() 함수로 데이터를 생성할 수 있다. zeros() 함수는 0으로 채워진 넘파이 배열을 생성하는 함수이다. 1을 채워주는 역할을 하는 함수는 ones()이다.
arr3 = np.zeros((3,4))
arr3
array([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]])
마지막으로 넘파이 배열의 존재 이유라고 할 수 있는 데이터 연산 방법을 알아보자. 먼저 동일한 shape를 가지는 2개의 데이터를 생성한다. 그리고 이 1개의 데이터에 다음과 같이 +,-,*,/ 기호를 사용하여 사칙연산을 수행할 수 있다.
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() 함수를 이용한 행렬 연산 등 데이터 분석에 필요한 많은 기능을 제공한다.
matplotlib¶
Matplotlib 라이브러리는 데이터를 시각화해주는 가장 기본적인 라이브러리이다. 주피터노트북에서 Matplotlib로 시각화된 그래프를 출력하려면 아래와 같은 코드를 미리 실행해두어야 한다.
%matplotlib inline
import matplotlib.pyplot as plt
이제 두가지 그래프 출력 예제를 통해 matplotlib를 알아보겠다. 첫 번째 그래프는 막대 그래프(bar plot)이다. matplotlib 라이브러리를 사용할 때는 우선 그래프 객체라는 것을 생성해주어야 한다. 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')
plt.ylabel('Births')
plt.title('Bar plot')
plt.show()
두 번째 그래프는 산점도 그래프(scatter plot) 이다.아래 코드에서 넘파이를 이용하여 데이터를 생성한 뒤, 이를 산점도 그래프로 그려보았다. random.seed() 함수는 랜덤 추출 시드를 고정한 것이고 이를 토대로 random.rand() 함수가 넘파이 배열 타입의 난수를 생성한다. 그리고 arrange() 함수는 5의 간격으로 0부터 100까지 숫자를 생성한 것이다. 지금까지의 데이터를 plt.scatter() 함수로 출력한 결과는 아래와 같다.
# 랜덤 추출 시드를 고정한다.
np.random.seed(19920613)
# 산점도 데이터를 생성한다.
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()
앞의 코드에서 scatter() 함수에 사용된 c,alpha,label 파라미터와 legend() 함수는 그래프를 꾸며주기 위한 파라미터이다.
출처 : 이것이 데이터 분석이다 with 파이썬
'이것이 데이터분석이다 with 파이썬' 카테고리의 다른 글
이것이 데이터 분석이다 with 파이썬 ch3-3(미래에 볼 영화의 평점 예측하기) (0) | 2021.04.15 |
---|---|
이것이 데이터 분석이다 with 파이썬 ch3-2(비트코인 시세 예측하기) (0) | 2021.04.14 |
이것이 데이터 분석이다 with 파이썬 ch3-1(프로야구 선수의 다음 해 연봉 예측하기) (0) | 2021.04.12 |
이것이 데이터 분석이다 with 파이썬 ch1-2(국가별 음주 데이터 분석하기) (0) | 2021.04.11 |
이것이 데이터 분석이다 with 파이썬 ch1-1(chipotle 주문 데이터 분석하기) (0) | 2021.04.09 |