import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np
plt.style.use('ggplot') # 차트 격자 제공
# 엑셀 파일 경로 (이미지가 아닌 실제 .xlsx 파일 경로)
file_path = 'IPO_data_simple.xlsx'
# 엑셀 파일 읽기
df2 = pd.read_excel(file_path, sheet_name='Sheet2')
df3 = pd.read_excel(file_path, sheet_name='Sheet3')
# 평가점수의 중앙값을 기준으로 상위 50%와 하위 50% 분류
median_score = df3['promise_ratio'].median()
# 색상 매핑을 위한 설정
cmap_red = plt.get_cmap('Reds')
cmap_blue = plt.get_cmap('Blues')
norm_red = plt.Normalize(df3[df3['promise_ratio'] > median_score]['promise_ratio'].min(), df3['promise_ratio'].max())
norm_blue = plt.Normalize(df3['promise_ratio'].min(), df3[df3['promise_ratio'] <= median_score]['promise_ratio'].max())
# 중앙값과 값이 같은 데이터 개수 출력
count = (df3['promise_ratio'] == median_score).sum()
print(f"조건을 만족하는 행의 개수: {count}")
# t+0부터 t+250까지의 데이터만 추출
df_filtered = df2.iloc[:250].copy() # t+0부터 t+n까지
plt.figure(figsize=(15, 8))
# 각 종목별로 시계열 그래프 그리기
for column in df_filtered.columns[1:]: # 'date' 열을 제외하고 반복
if column == 'mean': # 'mean' 열에 대한 특별한 처리
plt.plot(df_filtered['date'], df_filtered[column], label=column, alpha=0.6, color='green', lw=3) # 'mean'을 초록선으로 표시
elif column != 'mean': # 'mean' 열은 다르게 처리하므로 여기서 제외
# df3에서 현재 종목(column)의 평가점수('promise_ratio') 찾기
score_row = df3[df3['code'] == column]
if not score_row.empty:
# 데이터가 존재하는 경우
score = score_row['promise_ratio'].iloc[0]
if score >= median_score:
color = cmap_red(norm_red(score))
else:
color = cmap_blue(norm_blue(score))
plt.plot(df_filtered['date'], df_filtered[column], label='_nolegend_', color=color, alpha=0.6, lw=2)
else:
# 데이터가 존재하지 않는 경우
plt.plot(df_filtered['date'], df_filtered[column], label='_nolegend_', color='black', alpha=1, lw=2)
# y축 눈금값 설정
y_values = [2, 3, 4, 4.605, 5, 6]
plt.yticks(y_values)
plt.title('IPO price data')
plt.xlabel('date')
plt.ylabel('price index')
plt.xticks(rotation=45)
plt.gca().set_xticks(df_filtered['date'][::30]) # 2개 간격으로 x축 눈금 설정
plt.gca().set_xticklabels(df_filtered['date'][::30]) # 2개 간격으로 x축 라벨 설정
plt.axhline(y=4.605, color='r', linestyle='--') # y=4.605 인 수평 점선 설정
plt.legend()
plt.tight_layout()
plt.show()
'Python' 카테고리의 다른 글
| IPO Stock 종합 크롤링 (2) | 2024.03.12 |
|---|---|
| DART 고유번호 (0) | 2024.03.07 |
| 시계열 그래프 그리기 (하위, 상위 그룹별 평균) (0) | 2024.02.29 |
| 중복 변수 찾고 데이터 추출 (1) | 2024.02.28 |
| IPO stock_crawler (1) | 2024.02.22 |