728x90
데이터 가공 참고 사이트¶
In [55]:
# ! pip install yfinance
import yfinance as yf
import pandas as pd
import datetime
In [56]:
# Download price data from Yahoo finance
start = '2013-04-29'
end = '2021-07-06'
p_Bitcoin = yf.download('BTC-USD', start = start, end=end )
p_Ethereum = yf.download('ETH-USD', start = start, end=end )
p_Litecoin = yf.download('LTC-USD', start = start, end=end )
[*********************100%***********************] 1 of 1 completed
[*********************100%***********************] 1 of 1 completed
[*********************100%***********************] 1 of 1 completed
In [57]:
p_Bitcoin.head()
Out[57]:
Open | High | Low | Close | Adj Close | Volume | |
---|---|---|---|---|---|---|
Date | ||||||
2014-09-17 00:00:00+00:00 | 465.864014 | 468.174011 | 452.421997 | 457.334015 | 457.334015 | 21056800 |
2014-09-18 00:00:00+00:00 | 456.859985 | 456.859985 | 413.104004 | 424.440002 | 424.440002 | 34483200 |
2014-09-19 00:00:00+00:00 | 424.102997 | 427.834991 | 384.532013 | 394.795990 | 394.795990 | 37919700 |
2014-09-20 00:00:00+00:00 | 394.673004 | 423.295990 | 389.882996 | 408.903992 | 408.903992 | 36863600 |
2014-09-21 00:00:00+00:00 | 408.084991 | 412.425995 | 393.181000 | 398.821014 | 398.821014 | 26580100 |
In [58]:
p_BTC = p_Bitcoin[['Adj Close']].rename(columns = {'Adj Close':'Close BTC'})
p_ETH = p_Ethereum[['Adj Close']].rename(columns = {'Adj Close':'Close ETH'})
p_LTC = p_Litecoin[['Adj Close']].rename(columns = {'Adj Close':'Close LTC'})
In [59]:
price = pd.concat([p_BTC, p_ETH, p_LTC],axis=1)
In [60]:
price.head()
Out[60]:
Close BTC | Close ETH | Close LTC | |
---|---|---|---|
Date | |||
2014-09-17 00:00:00+00:00 | 457.334015 | NaN | 5.05855 |
2014-09-18 00:00:00+00:00 | 424.440002 | NaN | 4.68523 |
2014-09-19 00:00:00+00:00 | 394.795990 | NaN | 4.32777 |
2014-09-20 00:00:00+00:00 | 408.903992 | NaN | 4.28644 |
2014-09-21 00:00:00+00:00 | 398.821014 | NaN | 4.24592 |
pct_change는 한 객체 내에서 행과 행의 차이를 현재값과의 백분율로 출력하는 메서드 입니다.
즉, (다음행 - 현재행)÷현재행
In [61]:
# Calculate daily returns
# 일별 수익률 = {(오늘 종가 - 어제 종가)/ 어제 종가}
pct_ret = price.pct_change(1)*100
pct_ret = pct_ret.rename(columns = {'Close BTC':'BTC','Close ETH':'ETH','Close LTC':'LTC'})
pct_ret.head()
Out[61]:
BTC | ETH | LTC | |
---|---|---|---|
Date | |||
2014-09-17 00:00:00+00:00 | NaN | NaN | NaN |
2014-09-18 00:00:00+00:00 | -7.192558 | NaN | -7.379983 |
2014-09-19 00:00:00+00:00 | -6.984265 | NaN | -7.629499 |
2014-09-20 00:00:00+00:00 | 3.573492 | NaN | -0.955003 |
2014-09-21 00:00:00+00:00 | -2.465854 | NaN | -0.945300 |
In [62]:
pct_ret.iloc[0] = 0
pct_ret.reset_index(inplace=True)
pct_ret.head()
Out[62]:
Date | BTC | ETH | LTC | |
---|---|---|---|---|
0 | 2014-09-17 00:00:00+00:00 | 0.000000 | 0.0 | 0.000000 |
1 | 2014-09-18 00:00:00+00:00 | -7.192558 | NaN | -7.379983 |
2 | 2014-09-19 00:00:00+00:00 | -6.984265 | NaN | -7.629499 |
3 | 2014-09-20 00:00:00+00:00 | 3.573492 | NaN | -0.955003 |
4 | 2014-09-21 00:00:00+00:00 | -2.465854 | NaN | -0.945300 |
날짜와 시간(datetime)을 문자열로 출력하려면 strftime
날짜와 시간 형식의 문자열을 datetime으로 변환하려면 strptime을 사용하면 된다.
datetime.strptime(문자열, 형식)의 형태로 사용된다.
%y : 두 자리 수의 연도 ex) 19, 20, 21
%Y : 네 자리 수의 연도 ex) 2019, 2020, 2021
%m : 0을 채운 두 자리 수의 월 ex) 01, 02 ... 11 ,12
%d : 0을 채운 두 자리 수의 일 ex) 01, 02 ... 30, 31
%I : 0을 채운 12시간제의 시간 ex) 01, 02 … 12
%H : 0을 채운 24시간제의 시간 ex) 00, 01 … 23
%M : 0을 채운 두 자리 수의 분 ex) 00, 01 ... 58, 59
%S : 0을 채운 두 자리 수의 초 ex) 00, 01 ... 58, 59 https://docs.python.org/ko/3/library/datetime.html#strftime-strptime-behavior
In [63]:
pct_ret['Date'] = pct_ret['Date'].dt.strftime("%m/%d/%Y")
pct_ret.head()
Out[63]:
Date | BTC | ETH | LTC | |
---|---|---|---|---|
0 | 09/17/2014 | 0.000000 | 0.0 | 0.000000 |
1 | 09/18/2014 | -7.192558 | NaN | -7.379983 |
2 | 09/19/2014 | -6.984265 | NaN | -7.629499 |
3 | 09/20/2014 | 3.573492 | NaN | -0.955003 |
4 | 09/21/2014 | -2.465854 | NaN | -0.945300 |
In [64]:
pct_ret.to_csv('crypto_daily_returns.csv', index = False)
728x90
'Data Analytics with python > [Data Analysis]' 카테고리의 다른 글
[seaborn]S6_02_pairplot,displot,heatmap(correlations) (0) | 2023.01.21 |
---|---|
[seaborn]S6_01_scatter&count_plot (0) | 2023.01.21 |
[matplotlib]S5_07_histogram (0) | 2023.01.21 |
[matplotlib]S5_06_pie_chart (0) | 2023.01.21 |
[matplotlib]S5_05_Scatterplot (0) | 2023.01.21 |
댓글