본문 바로가기
DataFrame

주식 데이터분석 기초

by 자동매매 2022. 4. 25.

kospi지수 계산

from datetime import datetime
import sqlite3
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
import mplfinance as mpf
from pykrx import stock, bond
import pandas_datareader.data as web
import FinanceDataReader as fdr
import krx

L_13 = krx.code_list(market="KOSPI",기준일="20210913")
L_14 = krx.code_list(market="kospi",기준일="20210914")

idx13 = pd.Index(L_13)
idx14 = pd.Index(L_14)

# 신규상장 고려
idx = idx14.difference(idx13)

for i in idx:
	print(i,krx.code_to_name(i))

시가총액_13 = krx.시가총액(기준일="20210913")
시가총액_14 = krx.시가총액(기준일="20210914")
 # kospi 종목만 추출
df_13 = 시가총액_13.loc[idx13]                                  
df_14 = 시가총액_14.loc[idx14]

전일비교시가총액 = df_13['시가총액'].sum()
당일비교시가총액 = df_14['시가총액'].sum()
전일기준시가총액 = 전일비교시가총액            # 증가율로 당일 기준시가 환산 위해
신규상장증가액 = df_14.loc[idx, '시가총액'].sum()
증감률 = (전일비교시가총액 +신규상장증가액) / 전일비교시가총액
당일기준시가총액 = 증감률 * 전일기준시가총액
지수_1 = 당일비교시가총액 / 당일기준시가총액
print(지수_1)

#증감자 여부 판단
idx1 = idx14.intersection(idx13)
cond =df_13.loc[idx1,"상장주식수"] != df_14.loc[idx1,"상장주식수"]
print(cond.any())

# 증감자 주식수 추출
t_13 = df_13.loc[idx1]
t_14 = df_14.loc[idx1]
cond =t_13["상장주식수"] != t_14["상장주식수"]
dela_num = t_14.loc[cond,'상장주식수']  -  t_13.loc[cond,'상장주식수']

증감자증감액 = ((t_14.loc[cond, '상장주식수'] - t_13.loc[cond, '상장주식수']) * t_13.loc[cond, '종가']).sum()
증감률 = (전일비교시가총액 +신규상장증가액 + 증감자증감액) / 전일비교시가총액
당일기준시가총액 = 증감률 * 전일기준시가총액
지수_1 = 당일비교시가총액 / 당일기준시가총액
print(지수_1)

지수_13 = 3127.82
지수_14 = 지수_13*지수_1
print(지수_14)

상관관계

import matplotlib.pyplot as plt
import mplfinance as mpf
from pykrx import stock, bond
import pandas_datareader.data as web
import FinanceDataReader as fdr
import krx
import pandas as pd
import matplotlib.pyplot as plt


df = krx.ohlcv('005930','20200101',"20201231")
df1 = krx.kospi지수("2020")

df1 = df1['종가']
df = df['종가']

df3 = pd.concat([df,df1],axis=1)
df3 = df3.loc["2020"]
df3.columns = ['삼성전자','kospi']
print(df3)

# 상관관계 : 0.9 이상 매우 높음 / 0.7 이상 높음
print(df3.corr())
result=df.corr(df1)
print(result)           # 0.9245014782866269

# 상관관계 plot
df3.plot.scatter(x='삼성전자', y='kospi')
plt.show()

kospi 통계

from datetime import datetime
import sqlite3
from numpy import mask_indices, minimum
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
import mplfinance as mpf
from pykrx import stock, bond
import pandas_datareader.data as web
import FinanceDataReader as fdr
import krx
import pandas as pd
import matplotlib.pyplot as plt


df = krx.kospi지수("2022")

# 최고가(일)/최저가(일)
print(df['종가'].max(),df['종가'].min())
print(df['종가'].idxmax(),df['종가'].idxmin())

# 변동률 하위/상위 5종목
#dataframe단위
df['변동률']=(df['종가']-df['종가'].shift(1))/df['종가'].shift(1)
df1 = df.sort_values('변동률')[:5]   # 하위5종목
df2 = df.sort_values('변동률',ascending=False)[:5]   # 상위5종목
#series단위
df1=df['변동률'].nsmallest(n=5)
df2=df['변동률'].nlargest(n=5)
print(df1)
print(df2)

# 데이터 그룹화
df.reset_index(inplace=True)
how ={
	'시가':'first',
	'종가':'last',
	'고가':max,
	'저가':min
	}

df4= df.groupby(pd.Grouper(key="날짜",freq='m')).agg(how)
print(df4)

수익률

from datetime import datetime
import sqlite3
from numpy import mask_indices, minimum
import pandas as pd
from pandas import DataFrame, Series
import matplotlib.pyplot as plt
import mplfinance as mpf
from pykrx import stock, bond
import pandas_datareader.data as web
import FinanceDataReader as fdr
import krx
import pandas as pd
import matplotlib.pyplot as plt


kospi = krx.kospi지수("2020")
print(kospi)

# 수익률 = 최종일 종가 / 최초일 종가 -1 
# 연복리 수익률 (CAGR) = 기간수익률 =   (최종자산/최초자산)**(1/투자기간) - 1 
수익률 =kospi.iloc[-1]["종가"]/kospi.iloc[0][ "종가"] -1
print(수익률*100  )

diff = (kospi.index[-1] - kospi.index[0])
투자기간 = diff.days / 365
cagr = (수익률+1) ** (1/투자기간) -1
print(cagr*100)

# 수익률 비교
samsung = krx.ohlcv("005930","20200101")

수익률_kospi  = kospi['종가']/kospi['종가'][0]
수익률_samsung  = samsung['종가']/samsung['종가'][0]
df = pd.concat([수익률_kospi,수익률_samsung],axis=1,keys=['kospi','samsung'])
df.plot()
plt.show()

 

'DataFrame' 카테고리의 다른 글

1  (0) 2022.04.16
전략  (0) 2022.04.14
Data 관리 Main  (0) 2022.04.14
finance-datareader  (0) 2022.04.13
KRX  (0) 2022.04.13

댓글