[연구 자동화 #26] 실전 프로젝트: 수천 건의 실험 데이터를 한눈에, '연구 데이터 아카이브' 웹 앱 제작

 

연구실 생활을 하다 보면 가장 많이 듣는 질문 중 하나가 "지난달 온도를 80도로 설정했던 실험 데이터 어디 있지?"입니다. 폴더를 뒤지고 엑셀을 하나하나 열어보는 수고는 이제 그만두셔도 됩니다. 16편에서 맛보았던 Streamlit을 활용해, 25편에서 정제한 마스터 데이터를 브라우저에서 검색하고 시각화하는 완성형 아카이브 앱을 만들어보겠습니다.


1. 왜 대시보드 형태의 아카이브가 필요한가?

단순히 엑셀 파일 하나에 몰아넣는 것으로는 부족합니다. 데이터가 수천 행을 넘어가면 엑셀 자체가 무거워질뿐더러, 특정 조건만 필터링해서 그래프를 그리는 작업이 갈수록 번거로워지기 때문입니다. 웹 앱 형태의 아카이브는 파이썬을 몰라도 누구나 데이터를 조회할 수 있는 접근성과 클릭 몇 번으로 결과를 브리핑할 수 있는 실시간 공유성을 제공합니다.


2. 프로젝트 핵심 기능 설계

우리가 구축할 아카이브 앱의 필수 기능 3가지는 다음과 같습니다.

  • 사이드바 필터: 날짜, 실험 조건, 샘플 이름별로 데이터를 필터링하는 기능
  • 인터랙티브 테이블: 필터링된 결과만 보여주고, 필요시 엑셀로 내려받는 기능
  • 통계 차트: 선택한 그룹 간의 평균차이나 경향성을 그래프로 즉시 출력하는 기능

3. 실전 구현 코드: 아카이브 앱의 뼈대

import streamlit as st
import pandas as pd
import plotly.express as px

# 데이터 불러오기
@st.cache_data # 데이터를 메모리에 올려 속도를 높임
def load_data():
    return pd.read_csv('master_experiment_data.csv')

df = load_data()

st.title("🔬 Research Data Archive v1.0")

# 사이드바: 필터 설정
st.sidebar.header("Filter Options")
selected_date = st.sidebar.multiselect("실험 날짜 선택", df['Date'].unique())
selected_condition = st.sidebar.selectbox("실험 조건 선택", df['Condition'].unique())

# 필터링 로직
filtered_df = df[df['Condition'] == selected_condition]
if selected_date:
    filtered_df = filtered_df[filtered_df['Date'].isin(selected_date)]

# 메인 화면: 데이터 현황
st.subheader(f"📊 {selected_condition} 분석 결과")
st.write(f"조회된 데이터: {len(filtered_df)} 건")
st.dataframe(filtered_df)

# 시각화: 경향성 그래프
fig = px.line(filtered_df, x='Timestamp', y='Measurement', title='실험 수치 경향성')
st.plotly_chart(fig)

4. 연구원을 위한 한 끗 차이 디테일: @st.cache_data

주목해야 할 부분은 @st.cache_data 데코레이터입니다. 연구 데이터는 수만 줄이 넘는 경우가 많습니다. 사용자가 필터를 바꿀 때마다 파일을 다시 읽어오면 앱이 매우 느려집니다. 이 기능을 쓰면 데이터를 메모리에 저장해두기 때문에, 필터를 클릭할 때마다 웹사이트처럼 즉각적으로 반응합니다.


5. 프로젝트 요약 및 기대 효과

구분 수동 관리 (Before) 웹 아카이브 (After)
데이터 검색 수십 개 폴더 직접 탐색 필터링 (1초)
시각화 데이터 복사 후 엑셀 차트 생성 자동 그래프 생성
데이터 공유 대용량 파일 이메일 전송 URL 주소 하나로 공유

데이터는 기록되는 것만으로는 충분하지 않습니다. 언제든 꺼내어 새로운 가설과 대조해 볼 수 있을 때 비로소 가치가 생깁니다. 오늘 구축한 아카이브는 여러분의 연구실이 쌓아온 경험을 언제든 꺼내 쓸 수 있는 '지식 은행'이 될 것입니다.


[다음 편 예고] 27편에서는 데이터 수치가 위험 범위를 넘어가면 즉시 알려주는 [실전 프로젝트 #4: 실험 모니터링 텔레그램 알림 봇]을 소개합니다.


여러분의 아카이브에 딱 하나만 더 기능을 추가한다면 무엇을 넣고 싶으신가요? 댓글로 공유해 주세요!

댓글

이 블로그의 인기 게시물

[연구 자동화 #18] 연구용 머신러닝 기초: Scikit-learn으로 실험 데이터 예측 모델 만들기

[연구 자동화 #19] 블랙박스 속을 들여다보다: 설명 가능한 AI(XAI)로 모델의 판단 근거 분석하기

[연구 자동화 #8] 결과 보고 자동화: 분석 결과를 워드(Docx)나 PDF 보고서로 자동 생성하기