데이터 출처: https://www.kaggle.com/currie32/crimes-in-chicago
ㄴ 2005-2007만 작업하기로 함.
ㄴ 구글 드라이브 Colab Notebook에 파일 업로드 해놓음.
작업확경: Colab Notebook
import pandas as pd import numpy as np import matplotlib.pyplot as plt import random import seaborn as sns from fbprophet import Prophet from google.colab import drive drive.mount('/content/drive') |
import os os.chdir('/content/drive/MyDrive/Colab Notebooks') |
chicago_df_1 = pd.read_csv('Chicago_Crimes_2005_to_2007.csv', error_bad_lines = False,index_col= 'Unnamed: 0') chicago_df_2 = pd.read_csv('Chicago_Crimes_2008_to_2011.csv', error_bad_lines = False,index_col= 'Unnamed: 0') chicago_df_3 = pd.read_csv('Chicago_Crimes_2012_to_2017.csv', error_bad_lines = False,index_col= 'Unnamed: 0') |
ㄴ error_bad_lines :
chicago_df = pd.concat([chicago_df_1,chicago_df_2,chicago_df_3]) # 위의 3개 데이터프레임을 하나로 합친다. # 컬럼('Case Number', 'Case Number', 'IUCR', 'X Coordinate', 'Y Coordinate','Updated On','Year', 'FBI Code', 'Beat','Ward','Community Area', 'Location', 'District', 'Latitude' , 'Longitude')을 삭제하시오. a = ['Case Number', 'Case Number', 'IUCR', 'X Coordinate', 'Y Coordinate','Updated On','Year', 'FBI Code', 'Beat','Ward', 'Community Area', 'Location', 'District', 'Latitude' , 'Longitude'] chicago_df = chicago_df.drop(a,axis=1) # Date 컬럼을 보니, 날짜 형식으로 되어있다. 이를 파이썬이 이해할 수 있는 날짜로 바꿔서 다시 Date 컬럼에 저장하시오 chicago_df.info() # 타입 확인 |
ㄴ Object: 스트링
—
—-(파이썬이 알아보게 만드는 날짜 표기방법)---
판다스:파이썬이 이해가능한 여러 날짜를 str(스트링) -> 날짜로 바꾸는 방법
chicago_df['Date'] = pd.to_datetime(chicago_df['Date'], format= '%m/%d/%Y %I:%M:%S %p') |
ㄴ pd.to_datetime(데이터프레임[컬럼이름], format= '%m/%d/%Y %I:%M:%S %p')
ㄴ 마지막에 dtype 보면 제대로 바뀌었는지 확인 가능하다.
판다스 시리즈에서 요일 구하는 방법
chicago_df['Date'].dt.weekday |
ㄴ date타임 타입이라서, dt
chicago_df['weekday'] = chicago_df['Date'].dt.weekday chicago_df['weekday'].value_counts() |
판다스: 컬럼을 인덱스로 설정하는 방법
chicago_df.index = chicago_df['Date'] |
ㄴ 데이터프레임.index = 데이터프레임[컬럼이름]
ㄴ 컬럼은 유지한채, 해당 컬럼을 인덱스로 만들라는 뜻
ㄴ set_index와는 다른 개념
- 그룹바이 함수(groupby())로는, 지금 있는 데이터를 년 단위, 월 단위, 일 단위, 시 단위, 분 단위, 초 단위등으로 묶으라고는 할 수가 없다.
- 따라서, 먼저, Date 컬럼을 인덱스로 만들어 주면, resample 함수를 사용할 수 있게 된다.
- 이 함수를 통해서, 년단위, 월단위 등으로 묶어서 처리가 가능해진다.
chicago_df.index
# resample 'Y' 는 년도다. 년도로 리샘플한 후, 각 년도별 몇개의 범죄 데이터를 가지고 있는지 확인한다. #YS: yeer start 연도의 시작 # #Y: yeer 연도의 끝 # size() : 행의 갯수 df_year = chicago_df.resample('YS').size() |
ex) 위의 데이터를 plot 으로 시각화 한다. 범죄횟수를 눈으로 확인하자.
plt.plot(df_year) plt.show() # 이것도 된다. df_year.plot() plt.show() |
ex) 월별 범죄 발생 건수를 확인 및 시각화하자.
# 인덱스가 시간(datetype)라서, resample 함수를 사용할 수 있다. df_month = chicago_df.resample('M').size() df_month.plot() plt.show() |
ex) 분기별 범죄 발생 건수를 확인 및 시각화하자.
df_q = chicago_df.resample('Q').size() df_q.plot() |
....
ex) 월별로(매달 말일) 주기로 하여 데이터프레임을 만들고, 인덱스를 리셋하시오.
chicago_prophet = chicago_df.resample('M').size() |
chicago_prophet = pd.DataFrame(chicago_prophet).reset_index() chicago_prophet.columns = ['ds','y'] # 프로펫 라이브러리를 사용하려면, 날짜 컬럼은 'ds'로, 예측하려는 수치는 'y'로 바꿔야한다. # 프로펫으로 예측하기(Prophet)으로 예측하기. prophet = Prophet() prophet.fit(chicago_prophet) |
- frequ 조절가능한 문자: https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases
- 페이스북 프로펫 페이지 예시
https://facebook.github.io/prophet/docs/non-daily_data.html
ex) 36개월로 해서 예측해보자.
future = prophet.make_future_dataframe( periods = 36 , freq = 'M') forecast = prophet.predict(future) |
prophet.plot(forecast) plt.savefig('chart1.jpg') |
prophet.plot_components(forecast) plt.savefig('chart1.jpg') |
'Python-머신러닝' 카테고리의 다른 글
영화 추천 시스템 2/2 (0) | 2022.05.15 |
---|---|
영화 추천 시스템 1/2 (0) | 2022.05.15 |
가격 예측 알고리즘: Facebook Prophet (0) | 2022.05.15 |
댓글의 긍정/부정 인공지능 알고리즘(나이브 베이즈/서포터 백터 머신) (0) | 2022.05.15 |
나이브 베이즈(Naive Bayes) 및 구글 코랩( Colab), Word Cloud2 (0) | 2022.05.15 |