[LLM] Compressor performance map 그리기 (260115)

WonTerry·2026년 1월 14일

LLM

목록 보기
33/38

*.CSV 다운로드 링크:
https://github.com/wontaeleeterry/Compressor_Map/blob/main/Comp_Data.csv

여러 LLM 서비스들 덕분에 기존에 작성해뒀던 코드들을 간결하게 고쳐쓰고 있는 중입니다. 코딩의 국룰은... '일단 돌아가면 건들지 말라(?)' 입니다만, 예전에 그렇게 골치 아팠던 일들이 이렇게 간단하게 해결된다는게 놀라울 따름입니다. <진짜 업무에 쓰는 챗GPT 노코드 데이터 분석, 이기복 저자> 도서를 최근에 발견하고 말그대로 '노코드'가 가능한 시대에 오늘도 놀라고 있습니다.


Prompt

1. 데이터 전처리 지시:

  • Comp_Data.csv 파일을 로드하되, 상단의 메타데이터를 제외하고 실제 헤더가 시작되는 6행(skiprows=5)부터 데이터를 읽어주세요.
  • 모든 컬럼명의 앞뒤 공백을 제거하여 데이터 매칭 오류를 방지하세요.
    2. 그래프 구성 요소:
  • X축: MASSc-kg/s (질량 유량)
  • Y축: PRC (T-S) (압력비)
  • Z축 (색상): Efficiency (T-S) (효율)를 사용하여 2D 컨투어(Contour) 그래프를 그리세요.
  • 색상 설정: 효율이 높을수록 색상이 진하게 나타나는 컬러맵(예: 'Blues' 또는 'YlGnBu')을 사용하세요. 데이터 사이는 보간법(Interpolation)을 사용하여 부드러운 등고선을 형성해야 합니다.
    3. 속도선(Speed Lines) 및 라벨링:
  • 데이터 그룹화: 첫 번째 컬럼인 NC (rpm) 값을 기준으로 데이터를 그룹화하여 각 회전수별 곡선을 생성하세요.
  • 선 스타일: 각 NC 그룹의 데이터 포인트를 검은색 실선(black line)으로 연결하고, 각 포인트에는 작은 마커를 표시하세요.
  • 텍스트 라벨: 각 곡선 위에 해당 데이터를 구성하는 NC (rpm) 값들의 평균값을 계산하여 라벨로 표시하세요. 라벨 형식은 정수 뒤에 단위를 붙인 "00000 rpm" 형태여야 합니다.
    4. 마무리 및 스타일링:
  • 축 이름은 각각 'MASSc-kg/s', 'PRC (T-S)'로 설정하고 적절한 타이틀을 추가하세요.
  • 우측에 효율 수치를 확인할 수 있는 컬러바(Colorbar)를 표시하고, 전체적인 가독성을 위해 그리드(Grid)를 포함하세요.

Prompt 초안

Step 1) "MASSc-kg/s" 와 "PRC (T-S)"를 기준으로 "Efficiency (T-S)"를 나타내는 2D 컨투어 그래프를 그려주세요.
색이 짙을수록 높은 "Efficiency (T-S)"를 의미합니다. X축은 "MASSc-kg/s", y축은 "PRC (T-S)"로 설정하세요.
Step 2) 각 포인트를 검은색 선으로 연결한 곡선을 표시해주세요. 데이터 테이블의 첫번째 칼럼에 표시된 것은 각 점에서의 "NC (rpm)" 값입니다. 앞에서 생성한 여러 개의 각각의 곡선 위에 그 곡선을 구성하는 점들의 "NC (rpm)"의 평균값을 계산하여 라벨로 표시해 주세요. 평균값의 끝에는 회전 속도를 의미하는 "rpm"을 추가해서 표시해 주세요.


Compressor map (수정 버전)


Compressor map (초기 버전)


생성 코드 (코드 일부 수정)


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata

# 1. 데이터 로드 및 전처리
df = pd.read_csv('Comp_Data.csv', skiprows=5)
df.columns = df.columns.str.strip()
data = df[['NC (rpm)', 'MASSc-kg/s', 'PRC (T-S)', 'Efficiency (T-S)']].dropna()

# 2. NC(회전수)별로 곡선을 구분하기 위한 그룹화
# NC 값이 미세하게 다를 수 있으므로, 연속된 유사 값들을 하나의 그룹으로 묶습니다.
data['NC_Group'] = (data['NC (rpm)'].diff().abs() > 1000).cumsum()

x = data['MASSc-kg/s'].values
y = data['PRC (T-S)'].values
z = data['Efficiency (T-S)'].values

# 3. 배경 컨투어 생성을 위한 그리드 보간
xi = np.linspace(x.min(), x.max(), 500)
yi = np.linspace(y.min(), y.max(), 500)
xi, yi = np.meshgrid(xi, yi)
# zi = griddata((x, y), z, (xi, yi), method='linear')
zi = griddata((x, y), z, (xi, yi), method='cubic')    # 수정 - 등고선 곡선 처리 (260115)

# 4. 시각화
plt.figure(figsize=(7, 7))     # 사이즈 조정 (260115)

# 배경: Efficiency 컨투어 (짙을수록 고효율)
contour = plt.contourf(xi, yi, zi, levels=8, cmap='jet', alpha=0.8)   # 레벨 작게 조정 (260115)
# 등고선 추가
plt.contour(xi, yi, zi, levels=16, alpha=0.2, colors='grey')          # 등고선 레벨 - contour 2배로 설정 (260115)

cbar = plt.colorbar(contour)
cbar.set_label('Efficiency (T-S)', fontsize=12)

# 각 NC 그룹별로 곡선 그리기 및 라벨 추가
for group_id, group_data in data.groupby('NC_Group'):
    # 유량(X축) 기준으로 정렬하여 선이 꼬이지 않게 함
    group_data = group_data.sort_values('MASSc-kg/s')
    
    gx = group_data['MASSc-kg/s']
    gy = group_data['PRC (T-S)']
    gnc_mean = group_data['NC (rpm)'].mean() # NC 평균값 계산
    
    # 검은색 선으로 포인트 연결
    plt.plot(gx, gy, color='black', linewidth=1.5, marker='o', markersize=4, alpha=0.8)
    
    # 곡선의 마지막 지점(보통 저유량/서지 라인 쪽)에 rpm 라벨 표시
    # label_x = gx.iloc[-1]
    # label_y = gy.iloc[-1]
    label_x = gx.iloc[-5]     # 라벨 위치 변경 (그래프 왼쪽으로 이동) (260115)
    label_y = gy.iloc[-5]     # 라벨 위치 변경 (그래프 왼쪽으로 이동) (260115)
    plt.text(label_x, label_y + 0.02, f"{int(gnc_mean):.2e} rpm",     # 회전 속도 - 유효숫자 소숫점 2자리까지 (:.2e) (260115)
             fontsize=9, fontweight='bold', va='bottom', ha='center')

plt.xlabel('MASSc-kg/s (Mass Flow Rate)', fontsize=12)
plt.ylabel('PRC (T-S) (Pressure Ratio)', fontsize=12)
plt.title('Compressor Map with Efficiency Contours & NC Speed Lines', fontsize=14)
plt.grid(True, linestyle=':', alpha=0.5)

# Compressor map과 그래프 공간에서 패딩 추가 (260115)
plt.xticks(np.arange(0, 0.4, 0.05))
plt.yticks(np.arange(0, 5, 0.5))

plt.tight_layout()
plt.show()
profile
Hello, I'm Terry! 👋 Enjoy every moment of your life! 🌱 My current interests are Signal processing, Machine learning, Python, Database, LLM & RAG, MCP & ADK, Multi-Agents, Physical AI, ROS2...

0개의 댓글