3 분 소요

☀️공지 사항☀️ 해당 게시글은 SK 쉴더스 루키즈, 생성형AI 활용 사이버보안 전문인력 양성과정 을 수업을 듣고 정리한 글입니다. 자세한 교육 정보는 SK 쉴더스 홈페이지 를 확인해주세요.

# 학습 내용 요약 (25/11/07)

본 자료는 Streamlit을 활용하여 관리자 대시보드를 구축하는 과정과, 이를 위한 파이썬 웹 시각화 환경 설정 및 주요 기능을 요약한 것입니다.


1. Streamlit 환경 설정 및 기본 구조

1.1. 서버 기동 및 실행 (보충)

Streamlit으로 구축된 웹 애플리케이션은 일반 파이썬 파일처럼 실행되지 않고, 전용 명령어를 사용하여 서버를 기동해야 합니다.

  • 서버 기동 명령어:
    streamlit run app.py # app.py 파일 실행 예시
    
  • 팁: 코드 수정 후 저장(Ctrl+S)하고 웹 브라우저에서 새로고침(F5)하면 변경 사항이 즉시 반영됩니다.
  • 서버 종료: 터미널에서 Ctrl+C를 눌러 서버를 종료합니다.

1.2. 라이브러리 임포트

관리자 대시보드 구축을 위해 Streamlit과 데이터 처리 및 시각화 관련 라이브러리를 임포트합니다.

예시 코드 (라이브러리 임포트):

import streamlit as st
import numpy as np
import pandas as pd
import plotly.express as px
# 지도 시각화를 위해 pydeck 설치도 권장됨
라이브러리 설명
streamlit (st) 웹 애플리케이션을 쉽고 빠르게 구축하는 도구입니다.
pandas (pd) 데이터 분석 및 조작을 위한 라이브러리입니다.
plotly.express (px) 대화형 시각화 도구를 제공합니다.
numpy (np) 수치 계산을 위한 라이브러리입니다.

1.3. Streamlit 출력 함수 및 위젯 (보충)

Streamlit은 데이터뿐만 아니라 다양한 웹 요소를 출력하고 사용자 인터랙션을 제공하는 함수를 지원합니다.

기능 함수 설명
제목/헤더 st.title(), st.header(), st.subheader() 페이지 제목, 헤더, 서브헤더를 정의합니다.
DataFrame 출력 st.dataframe(data) 동적이고 인터랙티브한 DataFrame을 출력합니다.
정적 테이블 st.table(data) (보충) 정적인 프레임 형태로 데이터를 출력합니다.
텍스트 출력 st.write(body) 텍스트나 정적인 요소를 출력합니다.
마크다운 지원 st.markdown(body) (보충) 마크다운 구문을 사용하여 텍스트를 포맷팅합니다.
성공 메시지 st.success(body) 성공 메시지를 표시합니다.
JSON 출력 st.json(data) (보충) Key-Value 형태의 JSON 데이터를 시각화하여 출력합니다.
미디어 출력 st.video(path) (보충) 비디오, 이미지, 오디오 등 미디어 파일을 출력합니다.
사용자 입력 st.slider(label, min, max, default) (보충) 슬라이더 위젯 등 다양한 입력 위젯을 사용하여 실시간 사용자 입력을 처리합니다.

2. 관리자 대시보드 구축 과정 (Streamlit)

2.1. 대시보드 제목 및 파일 업로드

대시보드의 제목을 설정하고, 사용자로부터 CSV 파일을 업로드 받습니다.

예시 코드 (제목 및 파일 업로드):

st.title('관리자 대시보드') # 대시보드 제목 설정

file = st.file_uploader('CSV 파일 업로드: ', type=['csv'])

if file is not None:
    rawData = pd.read_csv(file)
    st.success(f'{file.name} 업로드 성공')

2.2. 사이드바 필터 설정

사용자가 데이터를 선택적으로 분석할 수 있도록 사이드바에 필터 위젯을 배치합니다.

  • st.sidebar: 사이드바 영역을 지정합니다.
  • st.sidebar.multiselect(label, options): 다중 선택 옵션을 제공합니다. 옵션으로는 데이터프레임 컬럼의 고유값(unique())을 사용합니다.

예시 코드 (사이드바 필터):

st.sidebar.header('필터 설정')
countryFilter = st.sidebar.multiselect('국가 선택 : ', rawData['country'].unique())
attackFilter = st.sidebar.multiselect('공격 타입 : ', rawData['attack_type'].unique())

2.3. 데이터 프레임 출력

업로드된 데이터의 형태를 확인하기 위해 DataFrame의 일부를 화면에 표시합니다.

예시 코드 (DataFrame 출력):

st.write("프레임 데이터출력을 도와주는 : dataframe() ")
st.dataframe(rawData.head())

2.4. 데이터 필터링 및 추출

사이드바에서 선택된 값(countryFilter, attackFilter)을 기준으로 원본 데이터(rawData)를 필터링하여 시각화에 사용할 데이터(filterData)를 생성합니다.

  • 핵심 원리: Pandas의 .isin() 함수를 사용하여 해당 컬럼 값이 필터 리스트에 포함되는지 확인합니다. 여러 필터 조건은 AND 조건(&)으로 결합됩니다.

예시 코드 (필터링된 데이터 생성):

# isin()과 & (AND) 연산자를 사용하여 복합 조건 필터링
filterData = rawData[ (rawData['country'].isin(countryFilter)) & (rawData['attack_type'].isin(attackFilter)) ]

3. 데이터 시각화 (Plotly)

Plotly Express로 생성된 figure 객체는 st.plotly_chart(fig) 함수를 통해 Streamlit 웹 페이지에 대화형 차트 형태로 표시됩니다.

3.1. 시간대별 공격 발생 추이 (Line Chart)

예시 코드 (Line Chart):

st.subheader('시간대별 공격 발생 추이 - line chart')
fig01 = px.line(filterData, x='time', color='attack_type')
st.plotly_chart(fig01)

3.2. 국가별 공격 비율 (Pie Chart)

예시 코드 (Pie Chart):

st.subheader('국가별 공격 비율 - pie chart')
fig02 = px.pie(filterData, names='country')
st.plotly_chart(fig02)

3.3. 공격 타입별 성공/실패 비율 (Bar Chart)

barmode='group' 옵션은 막대 그래프를 그룹화하여 표시합니다.

예시 코드 (Bar Chart):

st.subheader('공격 타입별 성공/실패 비율 - bar chart')
fig03 = px.bar(filterData, x='attack_type', title="공격 유형별 상태", color='status', barmode='group')
st.plotly_chart(fig03)

4. 기타 시각화 및 분석 도구 (보충)

4.1. Plotly 상세 기능 및 레이아웃 설정

Plotly는 대화형 시각화를 위해 다양한 레이아웃 및 스타일 설정을 지원합니다.

  • px.bar() 주요 매개변수:
    • data_frame, x, y: 시각화할 데이터프레임과 축 지정.
    • color: 데이터의 색상을 나타내는 열 지정.
    • barmode: 막대 그래프 표시 방식 설정 ('group' 또는 'relative'(누적)).
  • 색상 설정 (Color Scale):
    • colorscale: 값의 변화에 따른 색상 스케일을 정의합니다.
    • colorway: 그래프에 사용될 색상 순서(팔레트)를 정의합니다.

4.2. 지도 시각화: Folium (보충)

Folium 라이브러리는 Python 환경에서 Leaflet.js를 기반으로 하는 대화형 지도 시각화를 지원합니다.

  • 기본 지도 생성: g.Map(location=[위도, 경도], zoom_start=확대레벨)
  • 마커 추가: g.Marker([위도, 경도], popup='이름').add_to(map)
  • Leaflet.js 기반 동작: Folium 코드는 내부적으로 Leaflet JavaScript 코드를 생성하며, L.marker, L.popup, bindPopup() 등의 개념을 사용하여 마커를 지도에 추가하고 팝업을 연결합니다.

공부 후기

본 학습을 통해 Streamlit을 사용하여 웹 기반의 관리자 대시보드를 파이썬 코드만으로 신속하게 구축하는 방법을 익혔습니다. 특히, Streamlit의 st.file_uploader, st.sidebar.multiselect와 Pandas의 효율적인 필터링(특히 .isin()과 & 연산)` 기법을 결합하여 동적인 데이터 분석 환경을 마련하는 것이 중요하다고 생각합니다.

또한, Plotly Express를 활용하여 라인, 파이, 막대 차트 등 다양한 형태의 대화형 시각화 결과를 웹에 쉽게 임베드할 수 있음을 확인했습니다. 웹 시각화 구현 시 streamlit run 명령어를 통한 서버 기동이 필수적임을 인지하고, 코드 수정 후 브라우저 새로고침만으로 즉시 반영되는 점이 개발 효율을 높여줄 것이라고 판단됩니다. 단순한 시각화를 넘어, 데이터를 효율적으로 분석하고 인사이트를 도출하는 역량을 키우는 데 집중해야겠습니다.

댓글 남기기