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(2019815)
datetime.now() - datetime(19921030)
 
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 , 21,3,12441,24,5,14,532,412,4,1234,235 ]
 
## 나누고자 하는 기준
bins = [ 115 , 25356099 ]
 
## 나누고 난뒤의 라벨
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


+ Recent posts