FinanceDataReader Tutorial

섹터 평균 수익률과 개별 종목의 수익률 구하기


https://github.com/FinanceData/FinanceDataReader

2018-2020 FinanceData.KR | facebook.com/financedata

요약

  • KRX 전체종목과 섹터정보를 가져옵니다
  • groupby()를 활용하여 섹터별로 묶어 냅니다
  • groupby()에 간단한 통계함수를 적용하여 count, sum, mean 등을 구할 수 있습니다
  • 섹터 개별 종목들의 데이터를 수집하고 종가(Close)를 취합 합니다
  • 섹터종목의 들의 개별 수익률과 섹터 전체의 평균 수익률을 계산합니다
  • 기간을 지정하여(timedelta 활용) 다양한 기간의 수익률을 계산합니다
  • 데이터프레임 스타일을 적용하여 주요 셀을 강조합니다
  • 스타일을 적용한 데이터프레임을 엑셀로 저장합니다

FinanceDataReader 설치

In [0]:
!pip -q install finance-datareader

한국거래소(KRX)의 전체 종목 가져오기

In [25]:
import FinanceDataReader as fdr

krx = fdr.StockListing('KRX')
krx
Out[25]:
Symbol Name Sector Industry
0 155660 DSR 1차 비철금속 제조업 합섬섬유로프
1 001250 GS글로벌 상품 종합 도매업 수출입업(시멘트,철강금속,전기전자,섬유,기계화학),상품중개,광업,채석업/하수처리 서...
2 082740 HSD엔진 일반 목적용 기계 제조업 대형선박용엔진,내연발전엔진
3 011070 LG이노텍 전자부품 제조업 기타 전자부품 제조업
4 010120 LS산전 전동기, 발전기 및 전기 변환 · 공급 · 제어 장치 제조업 고압기기,저압기기,변압기,배전반,PLC,인버터,빌딩설비,공조기,건축배관,자동화기기 ...
... ... ... ... ...
2350 234070 에이원알폼 산업용 기계 및 장비 임대업 건설현장용 알루미늄 거푸집 임대
2351 278380 원바이오젠 의료용품 및 기타 의약 관련제품 제조업 의료기기(창상피복재)
2352 299480 지앤이헬스케어 기타 섬유제품 제조업 면생리대
2353 189350 코셋 통신 및 방송 장비 제조업 광통신용 증폭기
2354 331660 한국미라클피플사 기타 화학제품 제조업 은나노스텝, 닥터오렌지 등

2355 rows × 4 columns

groupby('컬럼명')을 사용하여 컬럼명을 기준으로 묶어 줄 수 있습니다.

In [26]:
krx.groupby('Sector')
Out[26]:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7f2517b9e0f0>

groupby 결과에 통계함수(count, mean, sum 등)을 적용해주면 묶은 그룹별 통계량을 산출할 수 있습니다.

In [27]:
krx.groupby('Sector').count()
Out[27]:
Symbol Name Industry
Sector
1차 비철금속 제조업 19 19 18
1차 철강 제조업 57 57 57
가구 제조업 8 8 8
가전제품 및 정보통신장비 소매업 1 1 1
가정용 기기 제조업 9 9 9
... ... ... ...
해상 운송업 5 5 5
해체, 선별 및 원료 재생업 1 1 1
화학섬유 제조업 9 9 9
환경 정화 및 복원업 1 1 1
회사 본부 및 경영 컨설팅 서비스업 12 12 11

156 rows × 3 columns

섹터(Sector)의 개수는 모두 156개 인것을 확인할 수 있습니다.

섹터(Sector)별로 개수(종목수)를 구하고, 가장 종목수가 많은 섹터 30개를 뽑아 봅니다.

In [28]:
krx.groupby('Sector').count().sort_values('Symbol', ascending=False)[:30]
Out[28]:
Symbol Name Industry
Sector
특수 목적용 기계 제조업 136 136 136
소프트웨어 개발 및 공급업 129 129 128
전자부품 제조업 119 119 118
자동차 신품 부품 제조업 96 96 96
기타 금융업 88 88 86
의약품 제조업 88 88 88
기타 화학제품 제조업 83 83 83
금융 지원 서비스업 79 79 78
통신 및 방송 장비 제조업 76 76 76
반도체 제조업 58 58 58
1차 철강 제조업 57 57 57
자연과학 및 공학 연구개발업 49 49 49
의료용 기기 제조업 44 44 43
플라스틱제품 제조업 44 44 44
일반 목적용 기계 제조업 44 44 44
기초 화학물질 제조업 43 43 43
기타 전문 도매업 38 38 38
컴퓨터 프로그래밍, 시스템 통합 및 관리업 36 36 36
기초 의약물질 및 생물학적 제제 제조업 36 36 36
기타 식품 제조업 34 34 34
전동기, 발전기 및 전기 변환 · 공급 · 제어 장치 제조업 33 33 33
영화, 비디오물, 방송프로그램 제작 및 배급업 31 31 31
봉제의복 제조업 28 28 27
측정, 시험, 항해, 제어 및 기타 정밀기기 제조업; 광학기기 제외 25 25 25
건물 건설업 25 25 25
기타 금속 가공제품 제조업 23 23 23
기계장비 및 관련 물품 도매업 23 23 23
의료용품 및 기타 의약 관련제품 제조업 23 23 23
구조용 금속제품, 탱크 및 증기발생기 제조업 20 20 20
생활용품 도매업 19 19 19

묶은(groupby)결과를 list와 dict로 변환하면 개별 섹터(Sector)별로 종목리스트를 구분할 수 있습니다.

In [29]:
sectors = dict(list(krx.groupby('Sector')))

print('count:', len(sectors))
list(sectors.keys())[:10]
count: 156
Out[29]:
['1차 비철금속 제조업',
 '1차 철강 제조업',
 '가구 제조업',
 '가전제품 및 정보통신장비 소매업',
 '가정용 기기 제조업',
 '가죽, 가방 및 유사제품 제조업',
 '개인 및 가정용품 임대업',
 '건물 건설업',
 '건물설비 설치 공사업',
 '건축기술, 엔지니어링 및 관련 기술 서비스업']
In [30]:
med_sec = sectors['의료용품 및 기타 의약 관련제품 제조업']

print('row count:', len(med_sec))
med_sec.head(10)
row count: 23
Out[30]:
Symbol Name Sector Industry
149 206640 바디텍메드 의료용품 및 기타 의약 관련제품 제조업 기업인수합병
164 253840 수젠텍 의료용품 및 기타 의약 관련제품 제조업 체외진단 기기 및 시약
188 950130 엑세스바이오 의료용품 및 기타 의약 관련제품 제조업 말라리아 진단키트(RDT), HIV 진단키트(RDT)
195 153710 옵티팜 의료용품 및 기타 의약 관련제품 제조업 옵티케어, 메디피그 등
437 059210 메타바이오메드 의료용품 및 기타 의약 관련제품 제조업 생체분해성봉합사,근관충전재
484 174900 앱클론 의료용품 및 기타 의약 관련제품 제조업 항체의약품
527 228760 지노믹트리 의료용품 및 기타 의약 관련제품 제조업 암 조기진단 제품
746 064550 바이오니아 의료용품 및 기타 의약 관련제품 제조업 합성유전자,시약및유전자분석장비
824 086890 이수앱지스 의료용품 및 기타 의약 관련제품 제조업 항체치료제,효소치료제
853 046210 파나진 의료용품 및 기타 의약 관련제품 제조업 의료용품및 기타 의약관련 제품 제조업

FinanceDataReader 설치

In [0]:
!pip -q install finance-datareader

개별 종목의 가격 데이터 가져오기

개별 종목의 가격을 가져오고, 개별 종목의 종가(Close)를 데이터 프레임(med_pirces)에 컬럼으로 추가합니다.

In [32]:
import pandas as pd
import FinanceDataReader as fdr

med = pd.DataFrame()

for ix, row in med_sec.iterrows():
  code, name = row['Symbol'], row['Name']
  print(code, name)
  # 개별 종목의 가격을 가져옵니다
  df = fdr.DataReader(code, '2019-01-01', '2019-12-31')

  # 가격 데이터의 종가(Close)를 컬럼으로 추가합니다
  # (컬럼명은 종목명을 지정합니다)
  med[name] = df['Close']
206640 바디텍메드
253840 수젠텍
950130 엑세스바이오
153710 옵티팜
059210 메타바이오메드
174900 앱클론
228760 지노믹트리
064550 바이오니아
086890 이수앱지스
046210 파나진
138610 나이벡
096530 씨젠
246720 아스타
100700 세운메디칼
260660 알리코제약
241820 피씨엘
042520 한스바이오메드
205470 휴마시스
233250 메디안디노스틱
142280 녹십자엠에스
216080 제테마
303360 프로테옴텍
278380 원바이오젠
In [33]:
# 23개 종목 1년간의 종가(Close) 데이터를 수집하였습니다
med
Out[33]:
바디텍메드 수젠텍 엑세스바이오 옵티팜 메타바이오메드 앱클론 지노믹트리 바이오니아 이수앱지스 파나진 나이벡 씨젠 아스타 세운메디칼 알리코제약 피씨엘 한스바이오메드 휴마시스 메디안디노스틱 녹십자엠에스 제테마 프로테옴텍 원바이오젠
Date
2019-01-02 10400 12900 4410 9130 2960 42700 27550 7540 6170 4475 9358 15600 8290 3780 12100 9530 24600 1335 27000 9866 NaN 19400 NaN
2019-01-03 9990 13000 4180 9030 2920 40900 27500 7200 6010 4380 8696 14750 8120 3830 11650 9360 23450 1310 27450 9661 NaN 18800 NaN
2019-01-04 10200 12950 4365 9260 2965 40800 27500 7380 6200 4505 9140 15000 8030 3805 11950 9630 24100 1330 27450 9784 NaN 18850 NaN
2019-01-07 10250 12950 4470 9100 3020 39350 27700 7210 6350 4665 9140 15200 7970 3780 12200 9700 24650 1340 27450 9784 NaN 18900 NaN
2019-01-08 9980 12900 4305 9080 3040 37550 27700 7080 6300 4600 9053 15600 7800 3730 12150 9720 24800 1340 27500 9702 NaN 18450 NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2019-12-23 9600 5400 2030 9070 2700 36700 22150 6570 6700 2215 9710 29700 5090 3235 13600 7910 23550 1375 39200 5140 19300.0 15450 9700.0
2019-12-24 9450 5210 2065 8840 2630 35950 21250 6500 6490 2185 10150 30300 5040 3200 12400 7870 23550 1355 39200 5060 19150.0 14450 9500.0
2019-12-26 9670 5270 2015 8810 2675 36600 22100 6620 6460 2320 10500 30300 4960 3225 12750 7890 24100 1355 39200 5110 20050.0 14000 9900.0
2019-12-27 9650 5450 2060 8900 2750 38150 22800 6690 6540 2345 10750 30650 4850 3230 12850 8010 24200 1385 40000 5250 20450.0 14000 9880.0
2019-12-30 9650 5480 2060 9040 2785 40100 23450 6790 6650 2345 11100 30650 4860 3225 14100 8060 24950 1390 40000 5250 20650.0 13950 9900.0

246 rows × 23 columns

2019년 중에 신규상장한 2개 종목은 제외합니다. (1년간 기간 수익률을 구하는 것이므로)

  • 제테마(코스닥, 2019년 11월 14일 신규상장)
  • 원바이오젠(코넥스, 2019년 6월 3일 신규상장)

결측치(NaN)이 포함된 컬럼을 제외합니다.

In [34]:
med = med.dropna(axis=1)
med
Out[34]:
바디텍메드 수젠텍 엑세스바이오 옵티팜 메타바이오메드 앱클론 지노믹트리 바이오니아 이수앱지스 파나진 나이벡 씨젠 아스타 세운메디칼 알리코제약 피씨엘 한스바이오메드 휴마시스 메디안디노스틱 녹십자엠에스 프로테옴텍
Date
2019-01-02 10400 12900 4410 9130 2960 42700 27550 7540 6170 4475 9358 15600 8290 3780 12100 9530 24600 1335 27000 9866 19400
2019-01-03 9990 13000 4180 9030 2920 40900 27500 7200 6010 4380 8696 14750 8120 3830 11650 9360 23450 1310 27450 9661 18800
2019-01-04 10200 12950 4365 9260 2965 40800 27500 7380 6200 4505 9140 15000 8030 3805 11950 9630 24100 1330 27450 9784 18850
2019-01-07 10250 12950 4470 9100 3020 39350 27700 7210 6350 4665 9140 15200 7970 3780 12200 9700 24650 1340 27450 9784 18900
2019-01-08 9980 12900 4305 9080 3040 37550 27700 7080 6300 4600 9053 15600 7800 3730 12150 9720 24800 1340 27500 9702 18450
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2019-12-23 9600 5400 2030 9070 2700 36700 22150 6570 6700 2215 9710 29700 5090 3235 13600 7910 23550 1375 39200 5140 15450
2019-12-24 9450 5210 2065 8840 2630 35950 21250 6500 6490 2185 10150 30300 5040 3200 12400 7870 23550 1355 39200 5060 14450
2019-12-26 9670 5270 2015 8810 2675 36600 22100 6620 6460 2320 10500 30300 4960 3225 12750 7890 24100 1355 39200 5110 14000
2019-12-27 9650 5450 2060 8900 2750 38150 22800 6690 6540 2345 10750 30650 4850 3230 12850 8010 24200 1385 40000 5250 14000
2019-12-30 9650 5480 2060 9040 2785 40100 23450 6790 6650 2345 11100 30650 4860 3225 14100 8060 24950 1390 40000 5250 13950

246 rows × 21 columns

수익률 계산

데이터의 첫날(1월 2일)을 기준으로 일일 누적 수익률을 구하기 위해 다음과 같이 연산합니다.

In [35]:
acc_rets = med / med.iloc[0] - 1.0
acc_rets
Out[35]:
바디텍메드 수젠텍 엑세스바이오 옵티팜 메타바이오메드 앱클론 지노믹트리 바이오니아 이수앱지스 파나진 나이벡 씨젠 아스타 세운메디칼 알리코제약 피씨엘 한스바이오메드 휴마시스 메디안디노스틱 녹십자엠에스 프로테옴텍
Date
2019-01-02 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
2019-01-03 -0.039423 0.007752 -0.052154 -0.010953 -0.013514 -0.042155 -0.001815 -0.045093 -0.025932 -0.021229 -0.070742 -0.054487 -0.020507 0.013228 -0.037190 -0.017838 -0.046748 -0.018727 0.016667 -0.020778 -0.030928
2019-01-04 -0.019231 0.003876 -0.010204 0.014239 0.001689 -0.044496 -0.001815 -0.021220 0.004862 0.006704 -0.023296 -0.038462 -0.031363 0.006614 -0.012397 0.010493 -0.020325 -0.003745 0.016667 -0.008311 -0.028351
2019-01-07 -0.014423 0.003876 0.013605 -0.003286 0.020270 -0.078454 0.005445 -0.043767 0.029173 0.042458 -0.023296 -0.025641 -0.038601 0.000000 0.008264 0.017838 0.002033 0.003745 0.016667 -0.008311 -0.025773
2019-01-08 -0.040385 0.000000 -0.023810 -0.005476 0.027027 -0.120609 0.005445 -0.061008 0.021070 0.027933 -0.032592 0.000000 -0.059107 -0.013228 0.004132 0.019937 0.008130 0.003745 0.018519 -0.016623 -0.048969
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2019-12-23 -0.076923 -0.581395 -0.539683 -0.006572 -0.087838 -0.140515 -0.196007 -0.128647 0.085900 -0.505028 0.037615 0.903846 -0.386007 -0.144180 0.123967 -0.169990 -0.042683 0.029963 0.451852 -0.479019 -0.203608
2019-12-24 -0.091346 -0.596124 -0.531746 -0.031763 -0.111486 -0.158080 -0.228675 -0.137931 0.051864 -0.511732 0.084633 0.942308 -0.392039 -0.153439 0.024793 -0.174187 -0.042683 0.014981 0.451852 -0.487128 -0.255155
2019-12-26 -0.070192 -0.591473 -0.543084 -0.035049 -0.096284 -0.142857 -0.197822 -0.122016 0.047002 -0.481564 0.122035 0.942308 -0.401689 -0.146825 0.053719 -0.172088 -0.020325 0.014981 0.451852 -0.482060 -0.278351
2019-12-27 -0.072115 -0.577519 -0.532880 -0.025192 -0.070946 -0.106557 -0.172414 -0.112732 0.059968 -0.475978 0.148750 0.964744 -0.414958 -0.145503 0.061983 -0.159496 -0.016260 0.037453 0.481481 -0.467869 -0.278351
2019-12-30 -0.072115 -0.575194 -0.532880 -0.009858 -0.059122 -0.060890 -0.148820 -0.099469 0.077796 -0.475978 0.186151 0.964744 -0.413752 -0.146825 0.165289 -0.154250 0.014228 0.041199 0.481481 -0.467869 -0.280928

246 rows × 21 columns

종목별 12월 30일의 최종 수익률은 마지막 행(row)가 됩니다.

In [36]:
returns = acc_rets.iloc[-1]
returns
Out[36]:
바디텍메드     -0.072115
수젠텍       -0.575194
엑세스바이오    -0.532880
옵티팜       -0.009858
메타바이오메드   -0.059122
앱클론       -0.060890
지노믹트리     -0.148820
바이오니아     -0.099469
이수앱지스      0.077796
파나진       -0.475978
나이벡        0.186151
씨젠         0.964744
아스타       -0.413752
세운메디칼     -0.146825
알리코제약      0.165289
피씨엘       -0.154250
한스바이오메드    0.014228
휴마시스       0.041199
메디안디노스틱    0.481481
녹십자엠에스    -0.467869
프로테옴텍     -0.280928
Name: 2019-12-30 00:00:00, dtype: float64

수익률이 큰 종목부터 나열해 봅니다

In [37]:
returns.sort_values(ascending=False)
Out[37]:
씨젠         0.964744
메디안디노스틱    0.481481
나이벡        0.186151
알리코제약      0.165289
이수앱지스      0.077796
휴마시스       0.041199
한스바이오메드    0.014228
옵티팜       -0.009858
메타바이오메드   -0.059122
앱클론       -0.060890
바디텍메드     -0.072115
바이오니아     -0.099469
세운메디칼     -0.146825
지노믹트리     -0.148820
피씨엘       -0.154250
프로테옴텍     -0.280928
아스타       -0.413752
녹십자엠에스    -0.467869
파나진       -0.475978
엑세스바이오    -0.532880
수젠텍       -0.575194
Name: 2019-12-30 00:00:00, dtype: float64

2019년 1년의 연간 수익률에서 가장 높은 수익률을 보인 것은 씨젠 96.4% 이고, 가장 낮은 수익률을 보인것은 수젠텍 -57.5% 입니다.

In [38]:
returns.mean()
Out[38]:
-0.07462202024155605

21개 종목의 평균수익률은 -7.4% 입니다.

다양한 기간에 대한 수익률

기간을 달리해서 수익률을 추출해 봅니다.

In [39]:
df = med['2019-12-01':'2019-12-30'] # 특정 기간(12월 1달) 동안
acc_rets = df / df.iloc[0] - 1.0
acc_rets.iloc[-1]
Out[39]:
바디텍메드      0.040992
수젠텍       -0.041958
엑세스바이오    -0.021378
옵티팜        0.030787
메타바이오메드    0.096457
앱클론        0.134371
지노믹트리      0.015152
바이오니아      0.046225
이수앱지스      0.047244
파나진       -0.062000
나이벡        0.082927
씨젠         0.104505
아스타       -0.063584
세운메디칼      0.028708
알리코제약      0.084615
피씨엘        0.002488
한스바이오메드    0.012170
휴마시스       0.007246
메디안디노스틱    0.000000
녹십자엠에스    -0.062500
프로테옴텍     -0.041237
Name: 2019-12-30 00:00:00, dtype: float64

'2019-12-30' 시점을 기준으로 과거 5일, 10일, 20일, 60일, 120일, 240일 각각 수익률을 구해봅니다.

각 기간의 (시작날짜, 끝날짜)는 다음과 같이 생성할 수 있습니다.

In [40]:
from datetime import datetime, timedelta

the_day = datetime(2019, 12, 30)

for days in [5, 10, 20, 60, 120, 240]:
  start = the_day - timedelta(days)
  end = the_day
  print(start, '~', end)
2019-12-25 00:00:00 ~ 2019-12-30 00:00:00
2019-12-20 00:00:00 ~ 2019-12-30 00:00:00
2019-12-10 00:00:00 ~ 2019-12-30 00:00:00
2019-10-31 00:00:00 ~ 2019-12-30 00:00:00
2019-09-01 00:00:00 ~ 2019-12-30 00:00:00
2019-05-04 00:00:00 ~ 2019-12-30 00:00:00
In [0]:
from datetime import datetime, timedelta

the_day = datetime(2019, 12, 30)
row_dict = {}
for days in [5, 10, 20, 60, 120, 240]:
  start = the_day - timedelta(days)
  end = the_day

  df = med[start:end] # 특정 기간
  acc_rets = df / df.iloc[0] - 1.0
  row_dict[days] = acc_rets.iloc[-1] 
In [42]:
df_rets = pd.DataFrame(row_dict)
df_rets
Out[42]:
5 10 20 60 120 240
바디텍메드 -0.002068 0.013655 0.025505 0.128655 0.084270 -0.138393
수젠텍 0.039848 0.000000 -0.035211 -0.094215 -0.125997 -0.619444
엑세스바이오 0.022333 -0.026005 -0.011990 -0.021378 -0.072072 -0.492611
옵티팜 0.026107 -0.010941 0.018018 0.008929 -0.030043 -0.174429
메타바이오메드 0.041121 0.029575 0.067050 0.052930 0.127530 -0.068562
앱클론 0.095628 0.088195 0.049738 0.116992 0.029525 -0.343699
지노믹트리 0.061086 0.093240 -0.071287 0.132850 0.522727 -0.366216
바이오니아 0.025680 0.057632 0.046225 -0.089812 -0.015942 -0.317588
이수앱지스 0.029412 0.000000 0.024653 -0.027778 -0.019174 -0.149616
파나진 0.010776 0.008602 -0.022917 -0.099808 -0.192771 -0.475978
나이벡 0.057143 0.110000 0.131498 0.140802 0.707692 0.149068
씨젠 0.011551 0.040747 0.122711 0.442353 0.377528 0.261317
아스타 -0.020161 -0.067179 -0.074286 -0.356291 -0.041420 -0.370466
세운메디칼 0.000000 0.001553 0.036977 -0.034431 -0.066570 -0.161248
알리코제약 0.105882 0.014388 0.060150 -0.037543 0.602273 0.184874
피씨엘 0.021546 0.010025 0.053595 -0.122004 0.083333 -0.085131
한스바이오메드 0.035270 0.052743 0.068522 0.091904 0.118834 -0.105735
휴마시스 0.025830 -0.007143 0.014599 -0.014184 -0.047945 -0.268421
메디안디노스틱 0.020408 0.020408 0.000000 -0.024390 0.002506 0.261830
녹십자엠에스 0.027397 -0.003795 0.023392 -0.275862 0.013514 -0.414193
프로테옴텍 -0.003571 -0.041237 -0.041237 -0.097087 -0.057432 -0.066890
In [47]:
# 섹터 전체 기간별 수익률
df_rets.mean()
Out[47]:
5      0.030058
10     0.018308
20     0.023129
60    -0.008541
120    0.095256
240   -0.179121
dtype: float64

데이터프레임 스타일

In [43]:
def color_negative_red(val):
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

def highlight_max(s):
    is_max = s == s.max()
    return ['background-color: yellow' if v else '' for v in is_max]

df_rets.style.\
    applymap(color_negative_red).\
    apply(highlight_max)
Out[43]:
5 10 20 60 120 240
바디텍메드 -0.00206825 0.0136555 0.0255048 0.128655 0.0842697 -0.138393
수젠텍 0.0398482 0 -0.0352113 -0.0942149 -0.125997 -0.619444
엑세스바이오 0.0223325 -0.0260047 -0.0119904 -0.0213777 -0.0720721 -0.492611
옵티팜 0.0261067 -0.0109409 0.018018 0.00892857 -0.0300429 -0.174429
메타바이오메드 0.0411215 0.0295749 0.0670498 0.0529301 0.12753 -0.0685619
앱클론 0.0956284 0.0881954 0.0497382 0.116992 0.029525 -0.343699
지노믹트리 0.061086 0.0932401 -0.0712871 0.13285 0.522727 -0.366216
바이오니아 0.0256798 0.0576324 0.046225 -0.0898123 -0.015942 -0.317588
이수앱지스 0.0294118 0 0.0246533 -0.0277778 -0.019174 -0.149616
파나진 0.0107759 0.00860215 -0.0229167 -0.0998081 -0.192771 -0.475978
나이벡 0.0571429 0.11 0.131498 0.140802 0.707692 0.149068
씨젠 0.0115512 0.040747 0.122711 0.442353 0.377528 0.261317
아스타 -0.0201613 -0.0671785 -0.0742857 -0.356291 -0.0414201 -0.370466
세운메디칼 0 0.0015528 0.0369775 -0.0344311 -0.0665702 -0.161248
알리코제약 0.105882 0.0143885 0.0601504 -0.0375427 0.602273 0.184874
피씨엘 0.0215463 0.0100251 0.0535948 -0.122004 0.0833333 -0.0851305
한스바이오메드 0.0352697 0.0527426 0.0685225 0.0919037 0.118834 -0.105735
휴마시스 0.0258303 -0.00714286 0.0145985 -0.0141844 -0.0479452 -0.268421
메디안디노스틱 0.0204082 0.0204082 0 -0.0243902 0.00250627 0.26183
녹십자엠에스 0.0273973 -0.00379507 0.0233918 -0.275862 0.0135135 -0.414193
프로테옴텍 -0.00357143 -0.0412371 -0.0412371 -0.0970874 -0.0574324 -0.0668896
In [0]:
## 엑셀로 저장
df_rets.style.\
    applymap(color_negative_red).\
    apply(highlight_max).\
    to_excel('기간별수익률데이터(2019.12.30).xlsx', engine='openpyxl')
In [0]:
# 구글 colab 에서 실행한 경우 엑셀 파일을 다음과 같이 다운로드 합니다.

from google.colab import files
files.download('기간별수익률데이터(2019.12.30).xlsx')