#!/usr/bin/env python # coding: utf-8 # # **지난번 학습내용 정리하기** # **Python 기본문법 정리
and Pandas** # ### **review Data Datum** # 1. Datum(숫자, "문자"), Data([list], {dict}, (tuple,)) # 1. (기본/외부/사용자) 모듈, 함수, 메소드 # 1. **문자**에서 **[]** 의 활용 ( [index], [:slicing]) # 1. **[list]** 객체에서 **[]** 의 활용 ( [index], [:slicing], [if 조건문]) # 1. [ List 포맷을 응용하여 for if ] # 1. { Dict 포맷을 응용하여 for if } # 1. for : 반복, if :판단, # 1. enumerate() : [List] 자료를 for 반복시 인덱스 를 함께 Tuple로 출력 # 1. .item() : {dict} 자료를 for 반복시 key 와 value 를 Tuple로 출력 # 1. Web Crawling ==> type 변경 ==> list, dict, pandas 객체로 변환 ==> 시각화 # 1. ndarray, Series, Dataframe # ### **review Series** # 1. pd.Series( [ data ] , index = [ index ]) # 1. series 사칙연산 # 1. series [ Boolean 판단문 ] # 1. series.index = [ list ] # 1. series.isnull() # 1. series.drop() # ### **review Data Datum** # 1. Datum(숫자, "문자"), Data([list], {dict}, (tuple,)) # 1. (기본/외부/사용자) 모듈, 함수, 메소드 # 1. **문자**에서 **[]** 의 활용 ( [index], [:slicing]) # 1. **[list]** 객체에서 **[]** 의 활용 ( [index], [:slicing], [if 조건문]) # 1. [ List 포맷을 응용하여 for if ] # 1. { Dict 포맷을 응용하여 for if } # 1. for : 반복, if :판단, # 1. enumerate() : [List] 자료를 for 반복시 인덱스 를 함께 Tuple로 출력 # 1. .item() : {dict} 자료를 for 반복시 key 와 value 를 Tuple로 출력 # 1. Web Crawling ==> type 변경 ==> list, dict, pandas 객체로 변환 ==> 시각화 # 1. ndarray, Series, Dataframe # ### **review DataFrame static** # 1. .count() # 1. .describe() # 1. .min() .max() # 1. .idxmin() .idxmax() # 1. .quantile() # 1. .sum() # 1. .mean() .median() # 1. .var() 분산 .std() 정규분산 # 1. .cumsum() .cumprod() 누적 합 누적 곱 # 1. .cummin() .cummax() 누적최소값, 누적최대값 # ### **review Series & DataFrame 결측치 제어하기** # 1. df.dropna() # 1. df.fillna(method='ffill', limit=2) # 결측치 대체 # 1. df.fillna(df.mean()['컬럼명']) # 1. Series.interpolate(method='time') # 결측치 보간 (시계열적 특성을 부여가능) # 1. Series.interpolate(method='values', limit=1, limit_direction='backward') # 'forward','backward','both' # ### **review   TimeSeries** # 1. from datetime import datetime # 1. pandas.date_range(end = '2017-07-01', periods=30, freq='BM') # 1. pandas.date_range('2017/8/8 09:09:09', periods=5, normalize=True) # 1. [str(date.date())    for    date    in    pd.date_range('2017/01/01', '2017/01/11')] #

# ## **Question About Pandas** # #
# ### **Question 1** # Business Day 는 휴일이 포함되어 있나요? # In[1]: # DateTime Index를 생성한다 import pandas as pd one_year = pd.date_range('2018-01-01',periods=365) # In[2]: data = [i for i in range(len(one_year))] data = pd.Series(data, index=one_year) # In[3]: businessday = data.resample('B') # In[4]: (365 - len(businessday)) / 2 # In[5]: # Tips data.resample('M').mean() # In[6]: # Tips data.resample('M').ohlc() #
# ### **Question 2** # 초단타 매매를 위한 초단위 생성도 가능한가요? # In[7]: pd.date_range('1/1/2011', periods=5, freq='H') # In[8]: pd.date_range('1/1/2011', periods=5, freq='min') # In[9]: pd.date_range('1/1/2011', periods=5, freq='s') # In[10]: pd.date_range('1/1/2011', periods=5, freq='ms') # In[11]: pd.date_range('1/1/2011', periods=5, freq='1ms') # In[12]: import numpy as np # In[13]: data = np.random.rand(110) # In[14]: date = pd.date_range('2018-06-06', periods=110, freq='ms') # In[15]: pd.Series(data, index=date)[:20] #
# ### **Question 3** # 1. https://en.wikipedia.org/wiki/List_of_tz_database_time_zones # 1. pd.date_range() 에서 생성한 데이터의 시간대 변경은 어떻게 하나요? # In[16]: import pandas as pd # In[17]: date_nan = pd.date_range('2018-06-01', periods=5, freq='h') date_nan # In[18]: date_utc = pd.date_range('2018-06-01', periods=5, freq='h', tz='UTC') date_utc # In[19]: date_kor = pd.date_range(start='2018-01-01', periods=5, tz='Asia/Tokyo') date_kor # In[20]: date_kor.tz_convert('UTC') # In[21]: date_utc.tz_convert('Asia/Tokyo') # In[22]: # 처음 생성할때 UTC 정보가 없으면 수정이 어렵다 # date_nan.tz_convert(9) # date_nan.tz_convert('UTC') # In[23]: data_nine = date_utc.tz_convert(9) print(data_nine.tzinfo) data_nine[:10] # In[24]: # 목록보기 # List of tz database time zones 을 위키에서 찾기 #
# ### **Question 4** # 지난번 코스닥 자료를 보니까 빈 공간이 많던데 이유가 뭔가요? # > **from**    pandas_datareader    **import**    get_data_yahoo # In[25]: from pandas_datareader import get_data_yahoo kosdaq = get_data_yahoo('031510.KQ', '2018-01-01').Close # In[26]: get_ipython().run_line_magic('matplotlib', 'inline') kosdaq.plot() # In[27]: import pandas as pd pd.DataFrame(kosdaq) kosdaq.index = pd.DatetimeIndex(kosdaq.index) kosdaq.tail(10) # In[28]: # 현재 Yahoo finance API가 중간 자료가 빈 구간이 존재한다 # 2018-02-01 부터 2018-06-03 4달 사이의 자료가 존재하지 않음 # 이를 고치려면 별도 Naver 크롤링 등 별도 경로를 활용하여 보완해야 한다 #
# ### **Question 5** # pd.pct_change() 로 변환을 하는데 이유가 뭔가요? # #### 데이터의 전처리 # 1. 표준화 : 해당 데이터 고유한 값을 기준으로 범위를 재조정 한다 # 1. 정규화 : 0 ~ 1 사이의 값으로 변환 # Q. voice, Signal 분석에서 중요한 데이터는?
# A. Raw 데이터 로 해당 데이터를 직접 표준화/ 정규화 한다 # Q. 금융분석에서 중요한 데이터는?
# A. Raw 데이터 (X)
# A. 이익/ 손실여부의 판단
# 때문에 해당 데이터를 **변화율**로 전환한 뒤 이를 **Log 수익률** 을 사용하면 기간별 분석에 용이하다 #
# ### **Question 6** # Bitcoin 가격수집할때, 컬럼명에 찌꺼기들이 포함되어 있으면 어떻게 처리를 하나요? # In[29]: import pandas as pd prices = pd.read_html("https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20180103&end=20180530")[0] prices = prices[::-1] prices.reset_index(inplace=True, drop=True) prices.tail() # In[30]: prices.index = pd.DatetimeIndex(prices.Date) prices.columns = [ col.replace('*', '') for col in prices.columns] del prices['Date'] prices.head(3) # In[31]: prices.info() # In[32]: get_ipython().run_line_magic('matplotlib', 'inline') prices.Close.plot(figsize=(16,4), grid=True) prices.tail() # In[2]: from pandas_datareader import get_data_google # In[4]: get_data_google('KRX:KOSPI') # In[5]: from googlefinance.get import get_data # In[6]: get_data('KRX:KOSPI') # In[ ]: # In[ ]: