1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | # -*- coding: utf-8 -*- """Day 09_TimeSeries.ipynb Automatically generated by Colaboratory. Original file is located at """ from google.colab import drive drive.mount('/gdrive') PATH = "/gdrive/My Drive/Colab Notebooks/resources/" # %matplotlib inline import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl import pandas as pd import seaborn as sns import time from scipy.stats import norm, multivariate_normal # installing packages for interactive graphs import ipywidgets as widgets from IPython.display import display from ipywidgets import interact, interactive, fixed, interact_manual, IntSlider from datetime import datetime #시간 관련 객체 #date :날짜 , time: 시간, datetime 날짜 + 시간 ## 현재 년 월 일 시 분 초(ms) 리턴 t1 = datetime.now() ## print문을 쓰고 안쓰고 차이가 있다. t1은 그냥 객체 정보가 나오고 print(t1)은 문자열이 나온다. # print(t1) t1 ## today() == now() t2 = datetime.today() t2 ## 직접 datetime객체 생성자에 날자를 줘서 객체를 생성할 수 있다. 자정을 기준으로 생성된다.시분초도 지정 가능. datetime(2019,7,12) ## ( -34, 16985, 905067 ) 34일 남았음을 알 수 있다, 즉 연산이 가능하다 datetime.now() - datetime(2019, 8, 15) datetime.now() - datetime(1992, 10, 30) t1 = datetime.now() ebola = pd.read_csv(PATH + "data/country_timeseries.csv") ebola.info() """#Date 타입으로의 변환""" ebola['Date'][:10] ## datetime 타입으로의 변환 pd.to_datetime(ebola['Date'])[:2] # Name: Date, dtype: datetime64[ns] ebola['date_dt'] = pd.to_datetime(ebola['Date']) test_df1 = pd.DataFrame({ 'order_day' : ['07/12/19', '08/12/19', '09/12/19' ] }) test_df1 ## 디폴트 맨 뒤 19가 맨 앞으로, 2019가 된다, 07이 그다음 , 그다음 19가 된다 즉 월/ 일 / 년 => 년 월 일 이 된다. pd.to_datetime(test_df1['order_day']) ## 월, 일, 년으로 되어있는 데이터 라고 명시. pd.to_datetime(test_df1['order_day'], format = "%m/%d/%y") ## 일, 월, 년으로 되어있는 데이터 라고 명시. pd.to_datetime(test_df1['order_day'], format = "%d/%m/%y") ## 년, 월, 년 으로 되어있는 데이터 라고 명시. => 잘못 읽어진다. pd.to_datetime(test_df1, format = "%y/%m/%y") test_df1 = pd.DataFrame({ 'order_day' : ['07-12-19', '08-12-19', '09-12-19' ] }) ## 문자열 기호에 맞게 / 를 - 로 바꿔서 읽어 준다. pd.to_datetime(test_df1['order_day'], format = "%m-%d-%y") """##시계열 데이터의 특정 구간을 구분해서 추출 하고자 할때""" now = datetime.now() # print(now) ## 년월일 또는 시분초만 얻고 싶을때, ## strf = string format , time => strftime now.strftime('%y-%m-%d') ## 2019 4글자로 풀어서 보고 싶을때, now.strftime('%Y-%M-%D') ## 시 분,초를 뽑아내고자 할때, now.strftime("%H:%M:%S") ebola1 = pd.read_csv(PATH + "data/country_timeseries.csv") ebola1.info() ## date가 문자열 일때. ebola1[:2] ebola1 = pd.read_csv(PATH + "data/country_timeseries.csv", parse_dates = ['Date']) ## 데이트 타입으로 바뀌어 있다. ebola1.info() ## 각 날짜 요소는 datetime 객체의 속성으로 따로 지정되어 있다. ebola1['Date'][0].year ebola1['Date'][0].month ebola1['Date'][0].day ebola1['date_dt'] = ebola1['Date'] ebola1.info() ## 이 컬럼 전체에 대해서 year를 추출하고 싶다. Series에는 dt라는 datetime 접근자가 있다. ebola1['year'] = ebola1['date_dt'].dt.year ebola1[['Date','date_dt','year']].info() ## int로 바꾸고자 할때 동시에 두개 컬럼을 바꿀 수 있다. ebola1['month'], ebola1['day'] = ebola1['date_dt'].dt.month , ebola1['date_dt'].dt.day ebola1.info() ## 에볼라의 최초 발병일..? ## 날짜 형식은 사실상 숫자 형식과 거의 유사하게 사용가능하다. ## 그냥 min() 컬럼에서 제일 작은 날짜 ( 최초 날짜 )를 알 수 있다. ebola1['date_dt'].min() ## 에볼라 첫 발병일 부터 몇일이 경과했는지도 볼 수 있다, 자동으로 일수로 계산 해준다. ebola1['outbreak_d'] = ebola1['date_dt'] - ebola1['date_dt'].min() ## 윤년과 같은 복잡한 일수 계산을 생략 할 수 있다. ebola1[:2] banks = pd.read_csv(PATH + "data/banklist.csv") banks[:2] banks.info() # Closing Date 555 non-null object # Updated Date 555 non-null object ## 비교용. banks_no_dates = pd.read_csv(PATH + "data/banklist.csv") banks = pd.read_csv(PATH + "data/banklist.csv", parse_dates = [5,6]) banks.info() ## Quarter => 시계열 데이터를 4분기로 나눠준다. banks['Closing Date'].dt.year ## Closing Date룰 4분기로 나눠서 월을 가지고 1~3 = 1 , 4~6 = 2 .. 이런식으로 4분기로 나눠준다. banks['Closing Date'].dt.quarter[:2] banks['closing_quarter'], banks['closing_year'] = banks['Closing Date'].dt.quarter, banks['Closing Date'].dt.year banks[:2] ## 연도별로 문을 닫은 은행의 갯수..? closing_year = banks.groupby('closing_year').size() closing_year ## 각 연도별 4분기마다 망한 은행의 갯수 closing_year_q = banks.groupby(['closing_year', 'closing_quarter']).size() closing_year.plot() closing_year_q.plot() ## 수치값 - > 범위로 구간화, cut, qcut #1~15 = , 15~25 나누고자 한다. ## 나누고자 하는 값 ages = [0 , 2, 1,3,124, 41,24,5,14,532,412,4,1234,235 ] ## 나누고자 하는 기준 bins = [ 1, 15 , 25, 35, 60, 99 ] ## 나누고 난뒤의 라벨 labels = ['0', '1','2','3','4' ] ##라벨로 리턴. pd.cut(ages , bins, labels = labels ) ## 몇번째에 속하는지 0~해당 그룹의 인덱스로 리턴. pd.cut(ages , bins, labels = labels ).codes ## 그냥 균등하게 나누기 data = np.random.randn(100) ## 균등하게 4구간으로 나누고자 한다. df = pd.qcut(data, 4, labels = ['A1', 'A2','A3','A4']) df.value_counts() | cs |
'딥러닝 모델 설계 > Machine Learning' 카테고리의 다른 글
Day 10_DecisionTree_With_Preprocessing (0) | 2019.07.17 |
---|---|
Day 09_Advanced Group_Agg_Apply (0) | 2019.07.12 |
Day 09_bitly_Json_Dictionary_List_Advenced (0) | 2019.07.12 |
Day 08. Movielens_Analysis (0) | 2019.07.11 |
Day 08.Baby Names Analysis_cumsum_pivot (0) | 2019.07.11 |