Post

파이썬 데이터분석 라이브러리

파이썬에서 사용되는 데이터분석 관련 라이브러리에 대해 학습합니다.

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?
    • Numerical Python(수와관련된 파이썬) : 수치적인 연산에 최적화된 파이썬 도구
    • NumPy Array 자료형 사용
    • 효율적인 메모리 관리와 연산을 위한 알고리즘 설계
    • 효율적인 컴퓨터 하드웨어 활용
    • 다양한 라이브러리와 호환(pandas, scikit-learn 등)
1
import numpy as np
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])

1
np.arange(3, 10, 2)

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

1
array2.size

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])

1
numbers_array[0]

1466

1
numbers_array[-1]

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])

1
numbers_array[:5:2]

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])

1
gdp_array[1][3]

35327

1
2
# 위와 동일한값
gdp_array[1,3]

35327

1
gdp_array[1:3, 2:5]

array([[32858, 35327, 38954], [ 1148, 1258, 1506]])

1
gdp_array[:,1:4]

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는 표 형태의 데이터를 간편하게 다루고 싶을 때 사용
1
import pandas as pd

판다스 객체


  • 시리즈(Series)와 데이터프레임(Dataframe)
    • 시리즈 : 인덱싱된 데이터의 1차원 배열
1
2
data = pd.Series([1,2,3,4])
data
0
01
12
23
34


1
2
3
# 시리즈 명시적 인덱스 설정
data = pd.Series([1,2,3,4,],index=['a','b','c','d'])
data
0
a1
b2
c3
d4


1
2
data1 = pd.Series(['a','b','c','d'], index=[1,3,5,7])
data1.loc[:]
0
1a
3b
5c
7d


  • 데이터프레임 : 인덱싱된 데이터의 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(열)
categoryquantityprice
0skirt1040000
1sweater1570000
2coat690000
3jeans1335000
1
df['quantity']
quantity
010
115
26
313


1
2
# numpy 연산 사용가능
df['quantity'].mean()
1
11.0
1
df['quantity'] * df['price']
0
0400000
11050000
2540000
3455000


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
012
0skirt1030000
1sweater1560000
2coat695000
3jeans1135000
1
2
array_df = pd.DataFrame(two_dimensional_array)
array_df
012
0skirt1030000
1sweater1560000
2coat695000
3jeans1135000
1
2
3
# column을 만들지 않았을 때 데이터프레임을 생성하면서 명시적으로 선언할 수 있음
list_df = pd.DataFrame(two_dimensional_list, columns=['category', 'quantity', 'price'])
list_df
categoryquantityprice
0skirt1030000
1sweater1560000
2coat695000
3jeans1135000
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 : 라벨링 기반(행, 열 이름)
    • 슬라이싱 loc은 마지막 이름도 포함됨
This post is licensed under CC BY 4.0 by the author.