본문 바로가기

파이썬 & 머신러닝과 딥러닝

8일차 - 시계열 데이터를 위한 Pandas 응용 및 각종 데이터 시각화 기법 학습 및 실습

Index

 

 

%%time

%%time 후 명령문 작성하면 얼마나 걸렸는지 시간을 출력한다.

 

 

 

%%timeit 

한 번만 해서는 정확하게 측정할 수 없어 똑같은 과정을 여러번 반복해서 측정

같은 명령문을 100loops돌렸을때의 평균

 

 

 

column을 index로 지정 -> 검색 시간 단축

index로 지정해주고 싶은 column을 작성

 

 

 

loc() 함수 : index로 바꿔서 찾기

index로 title을 바꿔주기만해도 시간 감소

 

 

 

1.08ms로 ms 단위 시간이었는데 시간이 엄청 빨라진 모습

 

 

 


Multi Index

: index로 사용할 column을 list로 선택

index로 사용할 column을 list로 선택

 

 

 

MultiIndex로 시작은 ('Closet Monster', 2015)이고 끝은 ('Fugitive Pieces', 2007)

 

 

 

가장 앞쪽에 있는 index를 loc로 찾는다.

 

 

-> 가장 앞쪽에 있는 index가 아니라 특정 연도로 영화를 찾고싶은 경우

 

xs() 함수

level : indexing해 놓은것 중 하나를 선택

multi index 영화 데이터 중 2018년도 데이터만 출력

 

-> multi_index일땐 xs()함수 사용을 권장 loc를 사용할 수 있지만 xs를 권장

 

 

 

reset()

: index를 다시 column으로 되돌린다. reset_index()함수 안 리스트를 column으로 돌린다.

 

 

 

column의 전체 이름을 모두 변경

column의 개수에 맞게 리스트로 작성한다.

 

 

 

특정 한개의 column 이름을 변경

-> rename() 사용

rename을 이용하여 특정 한개의 column을 바꾼다.

 

 


 

 

Pandas 파일 읽고 쓰기

ex1.csv
0.00MB
ex2.csv
0.00MB
ex3.csv
0.00MB
ex4.csv
0.00MB

 

 

read_csv()

저장한 txt 파일 읽어오기 -> 잘 읽어온 모습

 

 

 

read_table()

sep = ',' 를 통해 구분자 설정 가능

 

 

 

첫번째 index를 column의 index로 사용하는 특성 때문에 데이터가 column으로 잘못 출력된 경우

header = None 

: 디폴트값 -> header = 0 이기때문에 첫번째 row가 column이 된다

ex2.csv에는 header(column의 index) 없다 -> header = None 사용

 

 

 

파일을 읽어오면서 column 설정하고 싶은 경우

파일을 읽어옴과 동시에 column 설정

 

 

 

index_col = 'msg'

:  index_col로 index로 사용 할 column설정

 


 

 

텍스트 파일에 주석(설명)이 추가되어 있는 경우

a,b,c,d가 index가 data column이 하나만 있는 이상한 모습

 

->  앞에 것들은 MultiIndex가 되었고 column이 하나인 DataFrame이 된 모습

 

 

주석 해결 방법

(1) 특정 기호로 부터 시작하는 문장 생략

 comment = '#'

: '#' 으로 시작하는건 전부 주석으로 생각하겠다. + 중간에 있어도 생략가능하다

 

데이터를 읽어올 때 # 사용 x

 

 

 

(2) 데이터를 읽어올 때 특정 행 생략

skiprows = n : n 숫자 부터 읽는다

 + skiprows를 리스트로 주게되면, 리스트안에 숫자만 제외하고 읽게 된다.

행의 시작은 항상 0번부터 시작

 


 

 

갖고 있는 column보다 많이 있는 경우 자동으로 index로 저장

: column 개수 보다 많은 부분 인덱스로 저장된다.

 

 

DataFrame을 csv파일로 저장

-> 자동으로 생성된 index도 csv파일로 저장한다.

 

 

 

ex5.csv 모습

, 앞에 column index가 있는데 이름이 안정해짐

 

->  자동으로 생성되었던 index를 다시 설정해주어야한다

 


 

자동으로 생성되었던 index를 다시 설정 방법

(1) index_col = 0

: 첫번째 column이 인덱스임을 알려줌

 

 

(2) index = False

: 자동으로 주어진 index 같은 경우는 저장되지 않도록 설정

 

ex6.csv 모습

 


 

DataFrame을 엑셀 파일로 저장해보기

 

 


 

 

Pandas로 기상청 데이터를 분석해보자

 

daegu_20240115.csv
0.36MB

 

 

 

 

날짜 앞 \t 지우기

: str.strip() 로 \t 삭제

날짜 앞 \t 삭제

 

 


 

missing data 없애기

 

 

none 값이 뒤쪽의 데이터로 채우기

.fillna(method = 'bfill', inplace = True) 로 뒤쪽의 데이터로 값을 채워 none 없애기

 

 

지점 column 삭제 후 column 이름 재지정

지점 column이 삭제되고 column 이름이 잘 변경된 모습

 


 

위를 바탕으로 실습

 

1. 최고 기온을 구하고 그 날짜도 구하시오

 

 

Pandas로 인덱스를 통해 최고 기온, 최저 기온과 그 날짜 구하기

 


 

2. 최고 기온 Top 10, 최저 기온 Top 10을 구하기

정렬로 구할 수 있음

(1) 최고기온 Top 10과 그 날짜

 

 

head 안쓰고 Top 10 뽑기 -> 슬라이싱 사용

 

 

(2) 최저기온 Top 10과 그 날짜

오름차순이 기본이라 따로 쓸 필요 x

 

 


 

병합 (Merge)

merge()

 

-> df1, df2를 합병해보기

 

조합해서 그려진다.

 

 

 

 

 

 


데이터 결합 (Concatenation)

concat()

 

물리적으로 붙여준 모습

 

 

조합해서 만들어주는게 merge

물리적으로 붙여주는게 concat

 

 


시계열 (Time Series)

: 시간의 흐름에 따라서 모아놓은 데이터

대표적으로 기온 정보, 주식 등이 있다.

 

 

날짜의 squance

date_range()

frequency 가 어떤 간격으로 만들어주는지 정하는 것

 

-> freq = 'D' 현재 날짜를 기준으로 하루씩 증가한다


fegq='B'로 frequency를 바꾼 모습

 

-> feq='B'는 주말을 제외하고 하루씩 증가

 


-> freq = '50T', tz = 'Asia/Seoul' 는 50분 간격으로 한국의 time zone 설정

 


 

-> time zone을 'Australia/Sydney'로

 


 

문자열 -> 날짜 타입으로 변경

: 날짜에 대한 연산 가능

 

-> 이를 날짜로 바꾸고 싶은 경우

 

to_datetime() 

: 미국식 표기법 mm/dd/yyyy 형태로 날짜로 바꿔줌

 

유럽식:dd/mm/yyyy

 


 

날짜의 인덱스

 

-> 이거로 DataFrame 만들기

문자열 날짜가 아니라 날짜 객체

 

 

기온차

기온차를 알 수 있다.

 

 


 

df.loc[] : 날짜에 대한 정보 출력

 

 

 


 

기상청 데이터에 날짜 인덱스를 적용해보기

 

 

2002년의 최고 기온 구하기

 


 

각 연도별 최고 기온, 최저 기온 구하기

 

 

groupby() : 날짜별로 묶어서 최고기온 찾기 가능

groupby는 column뿐만 아니라 index도 group화가 가능

 

-> 각 연도별 최고 기온 한 번에 뽑기 가능

 

-> 마찬가지로 연도별 최저 기온 뽑기 가능

 

 

최고기온, 최저기온을 날짜를 기준으로 merge 합병

 

 


최고 기온과 최저 기온의 차 구하기

 

 


 

기온차가 많이 난 것 부터 보기

-> 내림차순 정렬

 

 


통계학적 수치 보기

describe()

 

 


 

각 10년간(decade) 최고, 최저 기온 구하기

 

 

-> DataFrame으로 만들기 merge()

 

 


 

데이터 시각화

Matplotlib

import matplotlib.pyplot as plt 선언

 

plt.plot()

: 꺾은선 그래프 그리기


 

 

x, y 좌표값을 줄 수도 있다.

 


 

그래프의 제목, x축이 나타내는게 뭔지, y축이 나타내는게 뭔지 출력

plt.xlabel(), plt.ylabel(), plt.title()

단, 한글로 이름을 정한 경우 제대로 출력 안되고 네모 박스가 뜸

 


 

한글 폰트 지정하는 방법

import matplotlib.font_manager as fm 선언

 

사용 가능한 폰트 파일의 경로가 출력됨

 


 

폰트 이름 가져오기

 


 

폰트 적용하기

한글로 그래프가 잘 출력되는 모습


 

원하는 폰트로 그래프를 그릴 수 있음

 


 

점으로 표현

marker : 각각의 데이터에 대한 점찍기

'rD' 를 추가하면 빨간색 점을 표시

 


과 점을 연결

선에 대한 종류 넣기

'rD:' 는 점선, 'rD-'는 실선 , 'rD--'는 --로 등

'rD:'

 

'bD--'

 

'k^-.'


 

numpy로 난수값을 생성하여 그래프 그리기

x축의 값과 y축의 값을 ticks

plt.xticks(), plt.yticks()로 설정 가능

 


 

그래프 뒤쪽에 모눈종이 형태로

plt.grid()

 

 


 

각각의 파라미터로 수정 가능

 

 


 

여러개의 그래프 곂쳐서 그리기


 

중첩된 그래프에 각각의 그래프 이름 추가

 

plt.legend() : 범례 추가

 

 


 

해상도 설정

dpi가 클 수록 해상도 높아진다.

 

 


 

웹페이지에 그래프 출력

그래프를 별도의 그림판에 저장하여 웹페이지에 보이게

plt.savefig() : 그래프 저장, dpi 설정 가능

 

myfisrtgraph.png로 저장된 모습

 


 

막대그래프

plt.bar()

 

 


 

기본값 80%로 띄워진 bar을 100%로 bar을 붙이기

width = 1로 줌 -> 100%

 


 

bar에 무늬 넣기

 


 

산포도 그래프, scatter graph

plt.scatter()

: 주어진 위치에 점을 찍는거 외에도 색, 크기로도 정보의 크기 표시 가능

 

s는 사이즈 c는 color

 

 

 

plt.text(), plt.grid(), plt.colorbar() 사용 가능

 

 


Subplot

: 부분 그래프