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