← .mpy 공유

스펙트럼 픽셀 행 합산

Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다

English

Sums Pixel0..PixelN columns per row and plots the total intensity trend

실행 결과 미리보기가 없는 스크립트입니다

README

스펙트럼 픽셀 행 합산

설명

Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다

필요 데이터

'Pixel'로 시작하는 컬럼들 (예: Pixel0 ~ Pixel2047)

출력

행별 합산 그래프 + 합산 결과 표

필요 패키지

  • matplotlib
  • pandas

태그

science, visualization, timeseries

작성자

SDSL | MDS 1.0

Source · 52줄
# MDS_TITLE: 스펙트럼 픽셀 행 합산
# MDS_REQUIRES: matplotlib, pandas
# MDS_DESC: Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다
# MDS_DESC[en]: Sums Pixel0..PixelN columns per row and plots the total intensity trend
# MDS_TAGS: science, visualization, timeseries
# MDS_INPUT: 'Pixel'로 시작하는 컬럼들 (예: Pixel0 ~ Pixel2047)
# MDS_OUTPUT: 행별 합산 그래프 + 합산 결과 표
# MDS_AUTHOR: SDSL
# MDS_VERSION: 1.0
def pixel_columns(df: pd.DataFrame, prefix: str) -> list[str]:
    cols = [c for c in df.columns if str(c).startswith(prefix) and str(c)[len(prefix):].isdigit()]
    return sorted(cols, key=lambda c: int(str(c)[len(prefix):]))


def sum_pixels_by_row(df: pd.DataFrame, prefix: str) -> pd.DataFrame:
    dff = df.copy()
    cols = pixel_columns(dff, prefix)
    total = dff[cols].apply(pd.to_numeric, errors='coerce').sum(axis=1)
    return pd.DataFrame({'행': range(len(total)), '픽셀합': total.to_numpy()})


def plot_row_sum(table: pd.DataFrame) -> None:
    try:
        plt.style.use('seaborn-v0_8-whitegrid')
    except OSError:
        plt.style.use('seaborn-whitegrid')
    plt.rcParams['font.family'] = 'Malgun Gothic'
    plt.rcParams['axes.unicode_minus'] = False
    fig, ax = plt.subplots(figsize=(10, 5))
    ax.plot(table['행'], table['픽셀합'], linewidth=1.5, color='#4C72B0')
    ax.fill_between(table['행'], table['픽셀합'], alpha=0.1, color='#4C72B0')
    ax.set_title('행별 픽셀 합산', fontsize=13, fontweight='semibold')
    ax.set_xlabel('측정 순번 (행)')
    ax.set_ylabel('픽셀 합')
    ax.grid(True, alpha=0.3)
    plt.tight_layout()
    plt.show()
    return None


def run_pixel_row_sum(df: pd.DataFrame) -> pd.DataFrame | None:
    prefix = mIO.input('픽셀 컬럼 접두어를 입력하세요 (기본: Pixel)') or 'Pixel'
    if not pixel_columns(df, prefix):
        mIO.print(f"'{prefix}0', '{prefix}1' ... 형태의 컬럼을 찾지 못했습니다.")
        return None
    table = sum_pixels_by_row(df, prefix)
    plot_row_sum(table)
    return table


result = run_pixel_row_sum(df)