최근 수익률이 높았던 종목 데이터 만들어서 그래프 그리기
1. .pct_change() 메서드를 이용하여 주가 변동률 구하기
# 3일간의 주가 변동률
d['adj_close'].pct_change(periods=3, axis=1)
2021-07-26 2021-07-27 2021-07-28 2021-07-29 2021-07-30
Symbol
A000020 NaN NaN NaN 0.013889 0.017361
A000030 NaN NaN NaN 0.000000 0.000000
A000040 NaN NaN NaN 0.012097 -0.012000
A000050 NaN NaN NaN 0.011278 0.018727
A000060 NaN NaN NaN 0.094298 0.092077
...
- .pct_change() 메서드는 periods 값만큼 이전과의 변동률을 나타낸다.
- 결과가 %가 아닌 비율이므로 %를 구할땐 100을 곱해주면 된다.
- 날짜를 정하면, 해당 날짜기준 n일(periods) 전에 투자했을때 해당 날짜까지의 수익률을 알 수 있게 된다.
2. 투자 기간에 해당하는 수익률 데이터를 만들고, 파일 데이터 딕셔너리에 추가하기
for hold_days in [1, 3, 5, 10, 20, 60, 120]:
table_name = f'return_{hold_days}d'
d[table_name] = d['adj_close'].pct_change(periods=hold_days, axis=1) * 100
print(f"투자기간 {hold_days} 일, 테이블 {table_name} 연산 완료 !")
- for문을 사용하여 table_name과 periods만 변경하며, d딕셔너리에 파일 데이터 추가
- periods는 순서대로 [1일, 3일, 1주, 2주, 1개월, 3개월, 6개월]을 의미한다.
3. d 딕셔너리에 데이터 잘 추가되었는지 확인
print(d.keys())
# dict_keys(['adj_close', 'mc', 'sales_ttm', 'op_ttm', 'ni_ttm', 'liab', 'asset_cur', 'eq',
#'return_1d', 'return_3d', 'return_5d', 'return_10d', 'return_20d', 'return_60d', 'return_120d'])
print(d['return_5d'].iloc[:5, -5:])
# 2021-07-26 2021-07-27 2021-07-28 2021-07-29 2021-07-30
# Symbol
# A000020 -4.635762 -3.355705 -2.364865 -1.016949 0.342466
# A000030 0.000000 0.000000 0.000000 0.000000 0.000000
# A000040 -4.247104 -3.846154 -3.515625 -3.088803 -3.137255
# A000050 -1.481481 0.375940 0.000000 0.373134 1.115242
# A000060 4.347826 6.621005 6.236080 10.643016 11.353712
4. 딕셔너리 d에 있는 데이터프레임에 종목 이름 데이터 붙이는 함수 작성
def get_df_with_info(data_df):
return pd.concat([stock_info, data_df], axis=1)
5. 원하는 데이터프레임 만들기
: 20일 수익률 기준, 내림차순 종목 및 종목명 함께 보기
sorted_df = get_df_with_info(d['return_20d'].loc[:, view_date]).sort_values(view_date, ascending=False)
sorted_df = sorted_df.rename(columns={view_date:f'{view_date}_기준_20일_수익률'})
print(sorted_df)
itemname Sector 2021-07-30_기준_20일_수익률
Symbol
A258830 세종메디칼 의료장비_및_서비스 185.148515
A189330 NaN NaN 126.804124
A215090 이디티 상업서비스 96.511628
A307750 대신밸런스제6호스팩 NaN 93.422405
A256840 한국비엔씨 의료장비_및_서비스 88.811189
...
- .sort_values() 메서드를 사용해서 view_date 컬럼 기준으로 내림차순 정렬
- .rename() 으로 columns={변경전:변경후} 컬럼 이름 변경
6. 상승률 1등한 종목 그래프 그리기
rank1_code = sorted_df.index[0]
d['adj_close'].loc[rank1_code, '2020-03-01':].plot(figsize=(12,5));
7. 업종별로 상승률 정렬해보기
column_name = f'{view_date}_기준_20일_수익률'
sector_sorted_df = sorted_df.groupby('Sector').mean().sort_values(column_name, ascending=False)
sector_sorted_df.plot(figsize=(12,5), kind='bar')
'퀀트' 카테고리의 다른 글
13. 특정 조건에 해당하는 종목 선별하기 (0) | 2023.01.03 |
---|---|
12. 전체 산업별, 기간별 수익률 데이터 보기 (0) | 2023.01.03 |
10. 주식 시장에서 산업 별로 차지하는 비중을 그래프로 보기 (0) | 2022.12.30 |
09. 데이터 파일(CSV) 읽어서 그래프 그리기 + 이동평균선 추가 (0) | 2022.12.28 |
08. 데이터 분석 : EDA (0) | 2022.12.26 |