Python에서 사용되는 데이터분석 관련 라이브러리에 대해 학습합니다.
데이터 분석에 사용되는 주요 라이브러리에 대해 학습합니다. numpy 라이브러리를 학습합니다. matplotilib 라이브러리를 학습합니다. pandas 라이브러리를 학습합니다. 데이터 분석 라이브러리 numpy : 데이터 분석 관련 연산처리 pandas : 데이터를 표 형식으로 정리하고 분석 matplotilib : 효과적인 전달을 위한 데이터 시각화 툴 seaborn : 간단한 데이터 시각화 툴 scikit-learn : 머신러닝 1
2
3
4
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
NumPy Numpy?Num erical Py thon(수와관련된 파이썬) : 수치적인 연산에 최적화된 파이썬 도구NumPy Array 자료형 사용 효율적인 메모리 관리와 연산을 위한 알고리즘 설계 효율적인 컴퓨터 하드웨어 활용 다양한 라이브러리와 호환(pandas, scikit-learn 등) 1
2
array1 = np . array ([ 1 , 3 , 5 , 6 , 7 , 9 ])
array1
array([1, 3, 5, 6, 7, 9])
1
2
# 0으로 array 채우기 : zeros
np . zeros ( 10 )
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
1
2
# 규칙적인 숫자 array 채우기 : arange
np . arange ( 7 )
array([1, 2, 3, 4, 5, 6, 7, 8, 9])
array([3, 5, 7, 9])
1
2
# array 자료형 확인
type ( array1 )
numpy.ndarray
1
2
3
# 2차원 array
array2 = np . array ([[ 1 , 2 ],[ 3 , 4 ],[ 5 , 6 ]])
array2
array([[1, 2], [3, 4], [5, 6]])
1
2
# array 크기 : size
array1 . size
6
6
1
2
# array 형태 : shape (행,열)
array2 . shape
(3, 2)
1
2
3
# 인덱싱과 슬라이싱 : 1차원 array
numbers_array = np . array ([ 1466 , 2345 , 3455 , 5675 , 7332 , 4155 , 7345 , 76376 , 256 ])
numbers_array
array([ 1466, 2345, 3455, 5675, 7332, 4155, 7345, 76376, 256])
1466
256
1
numbers_array [[ 0 , 1 , 4 ]]
array([1466, 2345, 7332])
1
2
array1 = np . array ([ 2 , 1 , 3 , 5 ])
numbers_array [ array1 ]
array([3455, 2345, 5675, 4155])
1
2
# 슬라이싱
numbers_array [ 2 : 5 ]
array([3455, 5675, 7332])
array([1466, 3455, 7332])
1
2
3
4
5
6
7
8
# 인덱싱과 슬라이싱 : 2차원 array
gdp_array = np . array ([
[ 12257 , 11561 , 13165 , 14673 , 16469 , 19403 ], # korea
[ 39169 , 34406 , 32858 , 35327 , 38954 , 37852 ], # japan
[ 955 , 1055 , 1148 , 1258 , 1506 , 1773 ], # china
[ 36332 , 37115 , 38223 , 39445 , 41254 , 44125 ] # usa
])
gdp_array
array([[12257, 11561, 13165, 14673, 16469, 19403], [39169, 34406, 32858, 35327, 38954, 37852], [ 955, 1055, 1148, 1258, 1506, 1773], [36332, 37115, 38223, 39445, 41254, 44125]])
1
2
# japan gdp 가져오기
gdp_array [ 1 ]
array([39169, 34406, 32858, 35327, 38954, 37852])
35327
1
2
# 위와 동일한값
gdp_array [ 1 , 3 ]
35327
array([[32858, 35327, 38954], [ 1148, 1258, 1506]])
array([[11561, 13165, 14673], [34406, 32858, 35327], [ 1055, 1148, 1258], [37115, 38223, 39445]])
1
2
3
# 불린 인덱싱 : 특정 조건을 만족하는 값들만 추려냄
numbers_array = np . array ([ 1466 , 2345 , 3455 , 5675 , 7332 , 4155 , 7345 , 76376 , 256 ])
numbers_array > 5000
array([False, False, False, True, True, False, True, True, False])
1
2
3
# 조건을 만족하는 array 요소만 가져오기
mask = numbers_array > 5000
numbers_array [ mask ]
array([ 5675, 7332, 7345, 76376])
1
2
3
4
# 2가지 이상 조건 &(and) |(or) ~(not)
mask1 = numbers_array > 5000
mask2 = numbers_array < 8000
numbers_array [ mask1 & mask2 ]
array([5675, 7332, 7345])
1
2
3
# 짝수만 뽑기
mask3 = numbers_array % 2 == 0
numbers_array [ mask3 ]
array([ 1466, 7332, 76376, 256])
1
2
3
# numpy 기본 연산 : mean, sum, min, max 등...
numbers_array = np . array ([ 1466 , 2345 , 3455 , 5675 , 7332 , 4155 , 7345 , 76376 , 256 ])
numbers_array
array([ 1466, 2345, 3455, 5675, 7332, 4155, 7345, 76376, 256])
1
2
# 평균
numbers_array . mean ()
12045.0
1
2
# 최소값
numbers_array . min ()
256
1
2
# 사칙연산
numbers_array + 10000
array([11466, 12345, 13455, 15675, 17332, 14155, 17345, 86376, 10256])
1
2
# 사칙연산은 비파괴적이다. 변수로 값을 저장
numbers_array
array([ 1466, 2345, 3455, 5675, 7332, 4155, 7345, 76376, 256])
1
2
3
# array 사칙연산
numbers_array2 = np . array ([ 14466 , 23245 , 34545 , 53675 , 73632 , 41855 , 73545 , 763576 , 2586 ])
numbers_array2 - numbers_array
array([ 13000, 20900, 31090, 48000, 66300, 37700, 66200, 687200, 2330])
Matplotlib Matplotlib?Python과 NumPy 기반으로 만들어진 데이터 시각화 라이브러리 다양한 데이터를 시각화하여 직관적으로 이해할 수 있음 1
2
import numpy as np
import matplotlib.pyplot as plt
1
2
year_array = np . array ([ 2015 , 2016 , 2017 , 2018 , 2019 , 2020 , 2021 , 2022 , 2023 , 2024 ])
stock_array = np . array ([ 14.46 , 19.01 , 20.04 , 27.59 , 26.32 , 28.96 , 42.31 , 39.44 , 73.41 , 132.69 ])
1
2
3
# 선 그래프 : x축, y축 순
plt . plot ( year_array , stock_array )
plt . show () # 차트 생성
1
2
3
# 막대 그래프
fruit_array = np . array ([ ' apple ' , ' banana ' , ' watermelon ' , ' lemon ' , ' peach ' ])
votes_array = np . array ([ 2 , 1 , 4 , 7 , 3 ])
1
2
plt . bar ( fruit_array , votes_array )
plt . show ()
1
2
3
4
5
6
7
8
9
# 선점도 그래프 : 두 변수의 연관성 확인
height_array = np . array ([
166 , 168 , 153 , 152 , 158 , 152 , 136 , 158 ,
147 , 198 , 175 , 167 , 166 , 187 , 152 , 166
])
weight_array = np . array ([
55 , 59 , 77 , 80 , 45 , 72 , 36 , 66 ,
69 , 77 , 82 , 49 , 92 , 105 , 76 , 85
])
참고 링크: 다양한 marker 옵션 알아보기(matplotlib 공식 문서 )
1
2
3
4
5
6
7
8
# c = 마커 색깔 변경, marker = 마커 변경
plt . figure ( figsize = ( 10 , 4 )) # 차트 크기 변경 : 개별적으로 차트 크기 변경
# plt.rcParams['figure.figsize'] = (5, 5) # 전체 그래프 사이즈 변경
plt . scatter ( height_array , weight_array , c = " green " , marker = " * " )
plt . title ( " Height and Weight " ) # 차트 제목 넣기
plt . xlabel ( " Height (cm) " ) # x라벨 넣기
plt . ylabel ( " Weight (kg) " ) # y라벨 넣기
plt . show ()
Pandas Pandas?Numpy 기반으로 만들어진 데이터분석 라이브러리 Numpy array의 한계를 보완해줌 데이터를 불러와서 가공, 분석, 시각화 가능 Numpy는 복잡한 알고리즘 연산을 할 때 사용 Pandas는 표 형태의 데이터를 간편하게 다루고 싶을 때 사용 판다스 객체 시리즈(Series)와 데이터프레임(Dataframe) 1
2
data = pd . Series ([ 1 , 2 , 3 , 4 ])
data
dtype: int64
1
2
3
# 시리즈 명시적 인덱스 설정
data = pd . Series ([ 1 , 2 , 3 , 4 ,], index = [ ' a ' , ' b ' , ' c ' , ' d ' ])
data
dtype: int64
1
2
data1 = pd . Series ([ ' a ' , ' b ' , ' c ' , ' d ' ], index = [ 1 , 3 , 5 , 7 ])
data1 . loc [:]
dtype: object
데이터프레임 : 인덱싱된 데이터의 2차원 행렬구조(index, Column)pd.DataFrame()
: 파이썬의 리스트나 사전형을 활용하여 생성 1
2
3
4
5
6
df = pd . DataFrame ({
' category ' : [ ' skirt ' , ' sweater ' , ' coat ' , ' jeans ' ],
' quantity ' : [ 10 , 15 , 6 , 13 ],
' price ' :[ 40000 , 70000 , 90000 , 35000 ]
})
df # 가로줄 row(행), 세로줄 column(열)
category quantity price 0 skirt 10 40000 1 sweater 15 70000 2 coat 6 90000 3 jeans 13 35000
dtype: int64
1
2
# numpy 연산 사용가능
df [ ' quantity ' ]. mean ()
1
df [ ' quantity ' ] * df [ ' price ' ]
0 0 400000 1 1050000 2 540000 3 455000
dtype: int64
1
2
3
4
5
6
7
8
9
10
11
# column(열)의 이름을 지정안하면 0부터 시작하는 기본 인덱스값이 들어감
two_dimensional_list = [
[ ' skirt ' , 10 , 30000 ],
[ ' sweater ' , 15 , 60000 ],
[ ' coat ' , 6 , 95000 ],
[ ' jeans ' , 11 , 35000 ]
]
two_dimensional_array = np . array ( two_dimensional_list )
list_df = pd . DataFrame ( two_dimensional_list )
list_df
0 1 2 0 skirt 10 30000 1 sweater 15 60000 2 coat 6 95000 3 jeans 11 35000
1
2
array_df = pd . DataFrame ( two_dimensional_array )
array_df
0 1 2 0 skirt 10 30000 1 sweater 15 60000 2 coat 6 95000 3 jeans 11 35000
1
2
3
# column을 만들지 않았을 때 데이터프레임을 생성하면서 명시적으로 선언할 수 있음
list_df = pd . DataFrame ( two_dimensional_list , columns = [ ' category ' , ' quantity ' , ' price ' ])
list_df
category quantity price 0 skirt 10 30000 1 sweater 15 60000 2 coat 6 95000 3 jeans 11 35000
1
2
3
4
5
6
# 데이터 불러오기
# pd.read_000("파일경로")
# head(첫번째줄)을 column으로 자동으로 지정
# header가 없을경우 파라미터로 header=None 선언
# column은 names=[columns] 선언
# row를 기본인덱스가 아닌 column기준으로 하려면 index=column이름(또는 column인덱스번호) 파라미터사용
DataFrame 인덱싱과 슬라이싱 iloc : 인덱스 기반(행, 열 인덱스 번호)슬라이싱 iloc은 일반 인덱스 번호처럼 마지막 번호는 포함 안됨 loc : 라벨링 기반(행, 열 이름)