728x90
반응형
import pandas as pd
import numpy as np
import FinanceDataReader as fdr
import xlwings as xw
import os
base_dir = os.getcwd()
df_code = pd.read_csv('종목코드.csv')
df_code = df_code[df_code['검색'] == 1]
df_code = df_code.reset_index()
print(df_code)
date_s = '2021-10-01'
date_e = '2022-10-30'
tbl_list = []
for i in range(len(df_code)) :
# csv로 읽어서 그런지 숫자 첫자리의 0이 계속 삭제되어서 강제로 채웠다.
# 종목코드는 6자리니까 강제로 맞췄다.
code_indi = format(df_code.loc[i, '종목코드'], '06')
name = df_code.loc[i, '회사명']
print(code_indi, name)
df_code_indi = fdr.DataReader(code_indi, date_s, date_e)
df_kospi = fdr.DataReader('KS11', date_s, date_e)
df_c_price = df_code_indi['Change']
df_kospi_c_price = df_kospi['Change']
#조인
df_join = pd.merge(df_c_price, df_kospi_c_price, how='left', left_on=['Date'], right_on=['Date'],suffixes=('_개별', '_코스피지수'))
#베타
cov_indi_kospi = df_join.cov().iloc[0]['Change_코스피지수']
var_kospi = df_join['Change_코스피지수'].var()
beta = cov_indi_kospi / var_kospi
tbl_list = tbl_list + [[code_indi, name, date_s, date_e, beta]]
df_beta = pd.DataFrame.from_records(tbl_list, columns=['개별종목코드', '개별종목명', '시작일자', '종료일자', '베타'])
#주가 및 변동 history 테이블 구하기
df_c_fluc_join = pd.merge(df_code_indi, df_kospi, how='left', left_on=['Date'], right_on=['Date'], suffixes=('_{}'.format(name), '_코스피지수'))
#주가 및 변동 history 테이블에서 필요한 컬럼 선택
df_c_fluc_join = df_c_fluc_join.iloc[:,[3,6,5,11]]
#엑셀출력
xw.view(df_c_fluc_join)
xw.view(df_beta)
728x90
반응형
'Program Language > Python' 카테고리의 다른 글
(python) CRM 워드파일 만들기 (1) | 2023.11.28 |
---|---|
(python) 두 개 엑셀 파일 비교하기 (0) | 2023.11.28 |
(python) pandas ix -> iloc (0) | 2023.11.28 |
(python) 네이버 뉴스 크롤링 (0) | 2023.11.27 |
(python) bad operand type for unary +: 'str' (1) | 2023.11.27 |