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 : 라벨링 기반(행, 열 이름)