| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
Tags
- ChatGPT
- 상관관계
- Magic
- Ltd
- KRX
- 미드저니
- correlation
- 자전거여행
- 069500
- NASDAQ
- story
- Inovio Pharmaceuticals
- correlatiom
- bigdata
- distribution
- Apple
- kosdaq
- Forex
- GPT
- Trip
- 태그를 입력해 주세요.
- KODEX200
- AI
- Histogram
- 스트라이다
- ATR
- volume
- stock
- kospi
Archives
- Today
- Total
DATAUNION
30 days Rolling Correlation violin plot 본문
반응형
import pandas as pd
from sqlalchemy import create_engine
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# SQLAlchemy 엔진 설정
engine = create_engine("mysql+pymysql://root:1*****s@localhost/krxstock?charset=utf8")
# 모든 테이블 이름 가져오기
table_query = "SHOW TABLES"
tables = pd.read_sql(table_query, con=engine)
table_names = tables.iloc[:, 0].tolist()
# 날짜 설정
start_date = pd.Timestamp('2023-01-01')
end_date = pd.Timestamp('2023-03-30')
# 세 종목에 대해 실행
for stock_code in ['a017670', 'a056080', 'a005930']:
# 특정 종목의 'close' 데이터 가져오기
query = f"SELECT date, close FROM {stock_code}"
df_stock = pd.read_sql(query, con=engine)
df_stock['date'] = pd.to_datetime(df_stock['date'])
df_stock.set_index('date', inplace=True)
df_stock = df_stock.loc[start_date:end_date]
# 상관계수를 저장할 리스트 생성
correlation_data = []
# 모든 테이블에 대한 'close' 값 상관계수 계산
for table in table_names:
if table == stock_code:
continue
query = f"SELECT date, close FROM {table}"
df = pd.read_sql(query, con=engine)
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
# 두 데이터프레임을 병합
merged_df = pd.merge(df_stock, df, left_index=True, right_index=True, how='inner', suffixes=(f'_{stock_code}', f'_{table}'))
# 30일 롤링 윈도우로 상관계수 계산
rolling_corr = merged_df[f'close_{stock_code}'].rolling(window=30).corr(merged_df[f'close_{table}'])
# 지정된 날짜 범위의 데이터만 필터링
filtered_corr = rolling_corr.loc[start_date:end_date]
# 일별로 분류하고 평균 상관계수 계산
for date, group in filtered_corr.groupby(filtered_corr.index):
correlation_data.append({'Date': date, 'Correlation': group.mean()})
# 데이터 프레임으로 변환
df_corr_by_day = pd.DataFrame(correlation_data)
df_corr_by_day.set_index('Date', inplace=True)
# NaN과 inf 값 제거
df_corr_by_day = df_corr_by_day.dropna()
df_corr_by_day = df_corr_by_day.replace([np.inf, -np.inf], np.nan).dropna()
# CSV 파일로 저장
csv_filename = f"{stock_code}_correlation_data.csv"
df_corr_by_day.to_csv(csv_filename)
# Close Price 시계열 차트
plt.figure(figsize=(16, 8))
plt.plot(df_stock.index, df_stock['close'], color='tab:red')
plt.title(f'Close Price of {stock_code}')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.show()
# Violin Plot for Correlations
plt.figure(figsize=(16, 8))
sns.violinplot(x=df_corr_by_day.index, y=df_corr_by_day['Correlation'], inner='stick')
plt.title(f'30-day Rolling Correlation with {stock_code}')
plt.xlabel('Date')
plt.ylabel('Correlation')
plt.xticks(rotation=90)
plt.show()
# 연결 종료
engine.dispose()






https://chat.openai.com/g/g-X1vYUg5J2-dataunion
If you have any questions, contact GPT and get insight!!
ChatGPT - DATAUNION
Stock Analysis
chat.openai.com
반응형
'Analysis' 카테고리의 다른 글
| Correlation distribution 이 무엇인가? (0) | 2024.01.31 |
|---|---|
| SK텔레콤 Distribution of Correlation Coefficients by Year with a017670 Close Prices (0) | 2024.01.28 |
| Portfolios recommended by chatGPT (0) | 2023.02.19 |
| [python] 2021 NASDAQ CORRELATION HISTOGRAM (0) | 2021.01.09 |
| Bitcoin Correlation Histogram (0) | 2017.05.21 |