스펙트럼 픽셀 행 합산
설명
Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다
필요 데이터
'Pixel'로 시작하는 컬럼들 (예: Pixel0 ~ Pixel2047)
출력
행별 합산 그래프 + 합산 결과 표
필요 패키지
- matplotlib
- pandas
태그
science, visualization, timeseries
작성자
SDSL | MDS 1.0
Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다
Sums Pixel0..PixelN columns per row and plots the total intensity trend
README
Pixel0~PixelN 형태의 분광 데이터를 행(측정)마다 합산해 신호 세기 추이를 그린다
'Pixel'로 시작하는 컬럼들 (예: Pixel0 ~ Pixel2047)
행별 합산 그래프 + 합산 결과 표
science, visualization, timeseries
SDSL | MDS 1.0
# 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)