본문 바로가기
IVS/Python 프로그래밍

[Python] Project-2) 파이썬과 Pandas를 사용한 데이터 처리

by 코곰_ 2024. 12. 20.

크게 3가지 라이브러리 사용 !

  • Numpy
  • Pandas
  • Matplotlib

 

 

 

Numpy

다차원 배열을 쉽게 처리하고 효율적으로 사용할 수 있도록 지원하는 파이썬 패키지

  • 장점
    • Numpy 행렬 연산은 데이터가 많을수록 Python 반복문에 비해 빠름
    • 다차원 행렬 자료 구조를 제공
    • 행렬 인덱싱 기능 제공
  • 단점
    • 그룹화, 피벗 등 구조화 부족

 

Pandas

Numpy 기반으로 만들어진 패키지

Series(1차원 배열), DataFrame(2차원 배열)의 자료구조 제공

 

 

Matplotlib

데이터 시각화를 위해 사용되는 라이브러리

 

 

 

 

CSV ?

  • 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일
  • 일반적으로 표 형식의 데이터를 CSV 형태로 사용
  • 저장, 전송 및 처리속도가 빠름!

 

 

 

 

프로젝트 실습에 앞서 Pandas의 핵심 데이터 구조 2가지를 알아보자.

1. 시리즈(Series)

  • 1차원 배열의 형태를 가진 데이터 구조
  • 각각의 데이터에 고유한 인덱스를 부여
  • 각 값은 유일한 인덱스와 연관된다.

 

 

 

2. 데이터 프레임(DataFrame)

  • 2차원의 테이블 형태인 데이터 구조
df = pd.DataFrame(data, index = index_data, columns = columns_data)

 

 

 

 


프로젝트 실습

사용 데이터: Netflix Stock Price Prediction(넷플릭스 주식 가격 데이터)

각 단계별로 사용한 메서드 위주로 정리해보자. 

 

 

 

 

 

I. 데이터 전처리

데이터 파일(csv)을 데이터 프레임으로 가져오기

import pandas as pd

# 파일 경로 지정
csv_path = 'c:\work\NFLX.csv'

# csv파일을 데이터프레임으로 불러오기
df = pd.read_csv(csv_path)
df

 

 

데이터 프레임의 정보 파악하기

shape

데이터 프레임의 구조 (= 행과 열의 수)를 나타내는 속성

데이터 프레임의 모양 파악

 

columns

데이터프레임의 모든 열 이름을 포함하는 객체

 

 

info()

데이터프레임의 열, 데이터 타입, 결측치의 유무, 메모리 사용량 등 데이터 프레임에 대한 요약 정보를 제공

df.info()
<class 'pandas.core.frame.DataFrame'>
Index: 276 entries, 733 to 1008
Data columns (total 5 columns):
 #   Column  Non-Null Count  Dtype         
---  ------  --------------  -----         
 0   Date    276 non-null    datetime64[ns]
 1   Open    276 non-null    float64       
 2   High    276 non-null    float64       
 3   Low     276 non-null    float64       
 4   Close   276 non-null    float64       
dtypes: datetime64[ns](1), float64(4)
memory usage: 12.9 KB

 

 

 

describe()

데이터프레임 안에 있는 숫자 데이터에 대한 간단한 요약을 보여주는 함수

숫자로 된 열들의 평균, 최소값, 최대값 등 숫자 데이터에 대한 통계 정보 제공

df.describe()

  • count: 각 열에 있는 값의 개수
  • mean: 각 열의 평균값
  • std: 각 열의 표준편차 (= 평균에서 얼마나 퍼져있는지의 정도)
  • min: 각 열의 최소값
  • max: 각 열의 최대값
  • 25%: 각 열에서 하위 25%
  • 50%: 각 열의 중앙값
  • 75%: 각 열에서 상위 25%

 

 

 

 

 

II. 데이터 분석

특정 데이터 선택하기

열 데이터 선택하기

# 단일 열 선택
df['Date']

# 여러 열 선택
df = df[['Date', 'Open', 'High', 'Low', 'Close']]
df.head()

 

 

 

 

행 데이터 선택하기

 

head(), tail()

# 상위 1개 행 출력
df.head(1)

# 하위 1개 행 출력
df.tail(1)

 

 

loc[]

  • 라벨(문자열), 인덱스 번호로 인덱싱

 

 

iloc[]

  • 정수 인덱스로 인덱싱 (0부터 시작)
  • 인덱스 마지막 번호는 포함 X
  • 라벨로 인덱싱이 불가능 

위치 기반 인덱싱, 데이터프레임의 특정 행이나 열에 접근

 

 

 

 

 

인덱싱

열인덱싱

df['칼럼이름']: 하나의 열만 인덱싱

df[['칼럼이름']]: 하나의 열만 인덱싱, 데이터프레임 형식으로 출력

df[['칼럼이름1', '칼럼이름2']]: 여러개의 열은 리스트로 인덱싱

 

행인덱싱

  • 슬라이싱 형식으로 가져오기 df[1:3]

 

불리언 인덱싱

자료가 바로 데이터프레임에 저장되므로 다른 변수 생성 후 저장하기

 

 

 

 

시계열 데이터 다루기

기존 데이터는 형식이 "object"로 문자열로 취급.

to_datetime()을 통해 날짜 형식으로 변환하도록 하자 

 

to_datetime()

  • Pandas를 이용한 데이터 타입 변환 중, 날짜에 관한 함수
  • datetime64 형식으로 변환
# 문자열을 Datetime으로 변환하기
df['Date'] = pd.to_datetime(df['Date'], format = '%Y-%m-%d')

 

 

 

~수정예정~

to_timestamp()

 

 

groupby()

 

 

reset_index()

 

 

 

 

 

 

 

 

데이터프레임에서 특정 조건을 만족하는 열 필터링하기

query()

  • 조건에 부합하는 데이터를 추출할 때
  • 문자열의 형태로 조건을 내보내, 가독성과 편의성이 뛰어나다.
  • 아래의 6가지 기능으로 조건 형성 가능
    • 비교 연산: ==, >, >=, <, <=, !=
    • in 연산(포함): in, not in
    • 논리 연산: and, or, not
    • 외부 변수 또는 참조 연산: @
    • 인덱스 검색
    • 문자열 부분 검색
# 2021년 이후의 데이터만 조회 
df = df.query('Date.dt.year >= 2021')
df.head()
# 2021년 이후의 데이터만 조회 
df = df[df['Date'] >= pd.to_datetime('2021-01-01')]

 

 

 

 

 

III. 데이터 시각화

Matplotlib: 파이썬 데이터 시각화 라이브러리

 

기본 선 그래프(Line plot) 그리기 + 다중 그래프 그리기

plt.plot(df3['Date'], df3['High'], label = 'High')
plt.plot(df3['Date'], df3['Low'], label = 'Low')
plt.plot(df3['Date'], df3['Close'], label = 'Close')

# 그래프 정보 생성
plt.title('High, Low and Close Prices since Jan 2022') # 제목
plt.xlabel('Date') # x축
plt.ylabel('Price') # y축

# x축 45도 회전
plt.xticks(rotation = 45)
# 범례(legend)
plt.legend()

# 그래프 출력
plt.show()

결과 그래프 !

범례(legend) ?

  • 서로 다른 종류의 데이터를 색깔 또는 마커 모양으로 분류하고 표시하는 기능
  • 위치를 직접 지정하고 싶다면 아래와 같이 지정 가능 
plt.legend(loc = 'upper right') # 그래프의 오른쪽 상단에 범례 배치

 

 

그래프 설정 추가하기

  • plt.plot(): 선의 스타일, 색상 마커 등 설정 가능
plt.plot(x, y, color='red', linestyle='--', marker='o', linewidth='1.5')
# linestyle: 선의 스타일 지정(실선(-), 파선(--) 등..)
# marker: 각 데이터 포인트에 마커 추가('o'(원형마커), '^'(삼각형 업 마커), 's' (사각 마커), '+' (플러스 마커)
# linewidth: 선의 두께 지정