크게 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: 선의 두께 지정
'IVS > Python 프로그래밍' 카테고리의 다른 글
[Python] Class, 상속, 오버라이딩 (1) | 2024.12.20 |
---|---|
[JSON] Project1- 파이썬을 활용한 API 데이터 수집 (1) | 2024.12.18 |
[JSON] Encoding/ Decoding, JSON 파일 파싱하기 (0) | 2024.12.18 |
[JSON] 기본 문법 (2) | 2024.12.18 |
[Python] 리스트, 함수, 딕셔너리, 튜플 (0) | 2024.12.17 |