Skip to content

Repository files navigation

insight Analytics

insight Analytics Workbench

현재 구현 계획: IMPLEMENTATION_PLAN.md · 현재 작업 상태: WORKLOG.md

Local-First Business Intelligence & Data Analytics Platform

Tableau의 시각화 + Power BI의 대시보드 + JMP의 통계 + Orange의 분석 흐름 + ChatGPT의 자연어 인터페이스를
하나의 로컬 웹 애플리케이션으로 통합한 개인용 데이터 분석 플랫폼

Status Stack No Build Tests


브랜드 아이덴티티

상세 브랜드 스펙: docs/insight Analytics Brand Spec (standalone) ver2.html

워드마크

로고는 in + sight + Analytics 세 요소로 구성됩니다.

구성 색상 역할
in tx-hi (흰/다크, #E9EAEC) 조용히 시작하는 전치사 — 소문자로 겸손하게
sight Heritage Orange #E8611A 브랜드 핵심 — 시각·통찰·발견
Analytics tx-faint #6E6E86 · 0.62em 기능 설명 — 배경으로 물러남

워드마크 HTML (표준 표기):

<span style="color:#E9EAEC">in</span><span style="color:#E8611A">sight</span><span style="color:#6E6E86;font-size:.62em"> Analytics</span>

컴팩트 (좁은 공간): insight — Analytics 생략
단색/워터마크: insight Analytics — 단일 색상

브랜드 컬러

이름 용도
Heritage Orange #E8611A / oklch(0.70 0.17 47) 기본 accent · sight · 집중/발견
Orange Hi oklch(0.80 0.14 55) hover · 강조 텍스트
Orange Soft oklch(0.72 0.17 48 / .16) 선택 배경 · 뱃지 · 액티브 칩

타이포그래피

역할 폰트 굵기
UI 전반 · 워드마크 · 본문 IBM Plex Sans / IBM Plex Sans KR 400 / 500 / 600 / 700
수치 · 코드 · 토큰 · 필드 키 IBM Plex Mono tabular-nums

제품군

제품 색상 역할
insight Analytics Workbench 🟠 주황 (sight) 분석 · 시각화
insight Data hub 🔵 블루 #3F74E8 데이터 수집 · 공급

컨셉: "보다(See)"의 핵심 단어 sight를 주황으로 강조해 데이터를 꿰뚫어 보는 시각이라는 의미를 직관적으로 전달합니다. 소문자 워드마크는 부드럽고 현대적인 인상을 주며, sight의 주황만이 시선을 사로잡습니다.


🚀 빠른 시작

# 저장소 클론
git clone https://github.com/HOYUN-Y/Visualization-Tool.git
cd Visualization-Tool

# 로컬 서버 실행
python3 -m http.server 8742

# 브라우저에서 열기
open http://localhost:8742

빌드 단계 없음 — 순수 HTML + in-browser Babel 구성입니다.
앱 실행에 Node.js / npm 설치는 불필요합니다. (테스트를 돌릴 때만 필요 — 아래 참조)


🎯 주요 기능

모드 기능
Data 데이터셋 탐색기 + 고밀도 데이터 그리드 + 자동 프로파일링 + 직접 편집 (JMP/Excel 스타일 — 셀 편집 · 행/열 추가·삭제 · 피처명 변경 · 타입 변경 · 헤더 드래그 열 순서 변경, 모두 비파괴 Undo/Redo)
Clean 결측치/중복/이상치 처리 · 컬럼 변환 · Encoding (Label/Dummy) · 수치 변환 (Z-Score/Min-Max/Log/Rank/Winsorize/Binning) · Formula Column (JS 수식 파생 컬럼) · Undo/Redo 파이프라인 (Data 모드 편집 이력도 여기에 통합 표시)
SQL DuckDB-WASM 엔진 — 전체 SQL(JOIN·서브쿼리·CTE·윈도우 함수). 데이터셋이 테이블로 자동 등록되고 따옴표 식별자로 한글 컬럼 지원 · DuckDB 미로드 시 내장 JS 엔진 폴백(JOIN/윈도우 제외)
Chart Tableau 스타일 Dimension/Measure 셸프 → ECharts (Basic 8 + Advanced 8 + Financial 3 + Special 1, 총 20종)
Map 3개 탭 — Seoul · 구 (서울 25구 Choropleth + 버블맵) · Korea · 행정구역 (17 시도 choropleth + 84 시군구 버블맵 + 내 데이터 모드) · World · GDP (30개국 choropleth)
Board 드래그/리사이즈 위젯 대시보드 + Cross Filtering + 위젯 Inspector(타입·필드·크기 편집) + 안전 KPI 수식(SUM/AVG/COUNT/… 사칙연산, eval 없음)
Stats 상관분석, T-Test, ANOVA, Chi-Square, 회귀분석 + Distribution 탭 (히스토그램+박스플롯+왜도/첨도) + Analysis Builder (자동 분석 유형 선택) + 시계열 (계절분해 4단 차트 additive/multiplicative · ACF/PACF) + SPC 관리도 + 다변량 이상치 + 자동 해석 패널
ML 브라우저 내 AutoML 10종 — OLS 회귀 · k-NN · Decision Tree(CART) · Naive Bayes(Gaussian) · Logistic(다중클래스 one-vs-rest) · KMeans · DBSCAN · 계층 군집 · PCA + Cross Validation(k-fold mean±std) + 적격성 게이팅(이 데이터로 못 돌리는 태스크는 사유와 함께 비활성) + 클래스별 Precision/Recall/F1 + 군집 특성표 + 모델 비교 이력
Ask Insight 데이터셋 자동 프로파일 (IE.profileDataset) + 마지막 분석 결과 요약 + NL→차트/모드 전환
Projects IndexedDB 다중 프로젝트 · 1초 자동저장(+언로드 플러시) · 즉시 저장 상태 · JSON 백업/복원 · 공유 링크(#p= URL fragment, deflate 압축, 백엔드 없음)
Export PNG/SVG/CSV · PPT 네이티브 차트(스택·보조축·콤보를 편집 가능한 PowerPoint 차트로 매핑, 미대응 형식은 이미지 폴백)
Import CSV/TSV/JSON/XLSX 공통 Preview · 결정적 타입 추론 · XLSX 복수 시트 선택 · 타입 override
Combine 데이터셋 Union(행 결합·타입 승격·__source) / Join(Inner·Left·Right·Full·복수키·폭증 경고) · lineage 포함 새 데이터셋 생성
Pivot Rows × Columns 크로스탭 · 복수 Values 개별 집계 · 범주/범위 필터 · Grand Total(원본 재계산) · 결과를 데이터셋으로 저장 후 Chart 열기

🛠 기술 스택

현재 (v2.0.0 — 브라우저 전용, 빌드 없음)

  • React 18.3.1 (UMD, no bundler)
  • Apache ECharts 5.5.1 (차트, SRI 고정)
  • Babel Standalone 7.29.0 (in-browser 트랜스파일)
  • DuckDB-WASM 1.29.0 (SQL 엔진 — jsDelivr ESM 동적 로드, JS 폴백 보유)
  • SheetJS CE 0.20.3 (로컬 vendoring — XLSX 파싱)
  • PptxGenJS (로컬 vendoring — PPT 네이티브 차트 export)
  • IndexedDB (브라우저 로컬 다중 프로젝트 저장)
  • IBM Plex Sans / Mono (타이포그래피)
  • CSS Custom Properties (디자인 토큰 기반 다크/라이트 테마)

앱 자체는 여전히 빌드 단계가 없습니다. package.json은 테스트 하네스(Node 유닛 + Playwright E2E) 전용이며 앱 실행에 필요하지 않습니다.

⚠️ 지원 환경

  • 최신 데스크톱 Chromium 기준. oklch()/color-mix()를 쓰므로 Safari <16.2 · Chrome <111에서 스타일이 깨집니다.
  • 클립보드 복사(PPT용)는 HTTPS 전용입니다(localhost는 예외). http:// 접속 시 자동으로 PNG 다운로드로 폴백하며 이유를 안내합니다.
  • 로컬 저장은 영구 보장이 아닙니다. 앱이 시작할 때 브라우저에 저장소 보존(StorageManager.persist())을 요청하지만, 허용되지 않으면(Safari는 미지원) ITP 7일 규칙·시크릿 모드·용량 압박으로 프로젝트가 삭제될 수 있습니다. 이 경우 앱이 1회 안내하며, 중요한 작업은 Projects › Project JSON으로 백업하세요.
  • 같은 프로젝트를 여러 탭에서 열지 마세요. 양쪽이 1초마다 자동저장하므로 나중에 저장한 쪽이 상대 작업을 덮어씁니다. 감지되면 상단바에 경고 배지가 뜨지만 차단하지는 않습니다.

향후 (별도 계획 — 미착수)

  • Frontend: Next.js + TypeScript + TailwindCSS + shadcn/ui + Zustand + TanStack Table + dnd-kit
  • Backend: FastAPI + Polars + Pandas
  • ML: scikit-learn + statsmodels
  • AI: OpenAI API / Ollama / LM Studio

DuckDB는 원래 백엔드 전환 항목이었으나 DuckDB-WASM으로 브라우저에서 해결되어 v2.0.0에 포함됐습니다.



📦 배포

개발은 빌드가 없지만, 배포할 때는 빌드하세요. 개발용 구성(react.development.js + 브라우저 Babel 3MB + 매 로드 JSX 컴파일)을 그대로 올리면 첫 화면까지 수 초 걸리고 콘솔에 개발 경고가 노출됩니다.

npm run build         # → dist/ (JSX 사전 트랜스파일 · React production 로컬 vendoring · Babel 제거)
npm run verify:dist   # 빌드 결과를 실제 Chrome으로 부팅 검증 (권장 — 배포 전 필수)
npm run preview       # 빌드 후 dist/를 :8743에 서빙해 눈으로 확인

dist/를 정적 호스팅에 그대로 올리면 됩니다 (git에는 커밋하지 않습니다).

npm run verify:dist를 건너뛰지 마세요. 브라우저 Babel은 constvar로 낮춰 컴파일하므로, 개발 환경에서는 우연히 동작하지만 빌드에서는 깨지는 코드가 존재할 수 있습니다. 실제로 2026-07-17에 이 검증이 Data 모드를 통째로 크래시시키는 TDZ 버그를 잡아냈습니다.

알려진 제약: DuckDB-WASM은 여전히 런타임에 jsDelivr에서 로드됩니다(로컬 vendoring 미적용). 오프라인·CDN 장애 시 SQL은 내장 JS 엔진으로 폴백하며 JOIN·윈도우 함수만 제한됩니다 — IMPLEMENTATION_PLAN.md §12 A3′.


📊 샘플 데이터

서울 부동산·금융·지도 데모 데이터 (시뮬레이션/정적 참조 데이터):

데이터셋 행 수 설명
Seoul_Apartment_Txns 503 거래 상세 (구, 건물유형, 면적, 층, 준공연도, 가격)
Monthly_Price_Index 42 월별 평균 ㎡당 가격 + 거래량 추이
KOSPI_Stock_2024 320 OHLCV 금융 차트용 데이터
District_Summary 12 서울 구별 통계 + 위경도
World_GDP_2023 30 세계 GDP·인구·성장률 지도 데이터
Korea_Provinces_2023 17 시도별 인구·면적·GRDP
Korea_시군구_2023 84 시군구별 인구·면적·위경도

📁 프로젝트 구조

.
├── index.html               # 메인 진입점 (스크립트 로드 순서 = 의존성 순서)
├── IMPLEMENTATION_PLAN.md   # 계획 정본 — 앞으로 할 일 (§12 하드닝 백로그)
├── WORKLOG.md               # 현재 상태 + 완료 기록 + 릴리스 이력 (세션 시작 시 여기부터)
├── HANDOFF.md               # 코드 아키텍처
├── css/                     # 13개 CSS 파일 (토큰 → 기능별 분리)
├── js/                      # JS/JSX 모듈 (window.* 전역 공유)
├── vendor/                  # 로컬 고정 서드파티 (sheetjs-0.20.3 · pptxgenjs)
├── scripts/                 # build.mjs(배포 빌드) · verify-dist.mjs · bump-assets.sh
├── dist/                    # 배포 산출물 (npm run build로 생성 · git 미포함)
├── tests/                   # Node 유닛 테스트 + e2e/ (Playwright)
└── docs/                    # 개발자 매뉴얼 · 브랜드 에셋 · archieve/(폐기 문서)

테스트

npm install       # 테스트·빌드 도구만 설치 (앱 실행에는 불필요)
npm test          # Node 유닛 361개
npm run test:e2e  # Playwright E2E 73개 (시스템 Chrome 사용 — 브라우저 다운로드 없음)
npm run bump      # 자산 캐시버스트 ?v= 일괄 갱신

⚙️ 개발 규칙

  1. window.*로 내보내기 — 모든 모듈은 window.X = ...로 전역 노출
  2. 데이터 접근 — 반드시 Store.derive.getActiveData(id) 사용 (직접 접근 금지)
  3. ECharts animation: false — iframe/Preview 환경에서 빈 차트 방지를 위해 유지
  4. CSS 변수만 사용css/tokens.css의 커스텀 프로퍼티로만 색상 정의
  5. 스크립트 로드 순서 유지index.html<script> 순서 = 의존성 순서

🗺️ 개발 로드맵

✅ Phase 1 (완료)

  • 전체 UI 프레임워크 (8개 모드)
  • 샘플 데이터셋 + Data/Clean/Chart/Dashboard/Stats/ML/Map/SQL 모드
  • 다크/라이트 테마, Tweaks 패널, Ask Insight AI 드로어

✅ Phase 1.5 — JMP 통계 강화 (완료)

  • js/insightEngine.js 신규: 규칙 기반 자동 해석 엔진 (window.IE)
  • Stats 모드 Distribution 탭: 히스토그램 + 수평 박스플롯 + 8개 통계 카드 (왜도/첨도 포함)
  • Stats 모드 Analysis Builder 탭: 컬럼 타입 자동 감지 → 회귀/ANOVA/카이제곱 중 적합한 분석 자동 선택
  • 모든 Stats 탭: Interpretation 패널 (파란색, IE 생성 해석 문구) + Next Step 패널 (초록색, 다음 분석 제안)
  • statsMath.js 왜도(skewness) / 첨도(excess kurtosis) 함수 추가
  • ML 분류 결과: 클래스별 Precision / Recall / F1 테이블
  • ML 군집 결과: 군집별 특성 평균 테이블 (원본 스케일)
  • ML: Model Comparison History 테이블 (최근 10개 실행 비교)
  • Ask Insight 드로어: IE.profileDataset() 자동 실행 + 마지막 분석 결과 연동

✅ Phase 1.6 — Map 강화 (완료)

  • Export (PNG/CSV), CSV/TSV/JSON 파일 임포트 (드래그앤드롭)
  • Map 모드 — World · GDP choropleth 탭 추가
  • Map 모드 — Korea · 행정구역 탭 (시도 choropleth + 시군구 버블맵, WGS84→UTM52N 좌표 변환)
  • Map 모드 — 내 데이터 모드 (위경도 컬럼 자동 감지, 임포트 데이터를 지도에 직접 표시)

✅ Phase 2 (1차) — Clean 모드 전처리 강화 (완료)

  • Encoding: Label Encode (문자→정수), Dummy Encode (One-Hot 0/1 컬럼)
  • 수치 변환: Z-Score 표준화, Min-Max 정규화, Log(1+x), 순위(Rank)
  • Outlier 처리: Winsorize (상하 p% 클리핑), Binning (등폭 구간 범주화)
  • Formula Column: JS 수식으로 파생 컬럼 생성 (row 객체 + Math.* 접근)
  • 모든 op 파이프라인 Undo/Redo 지원

✅ Phase 2 (1.5차) — 데이터 직접 편집 (완료, v1.9.0)

  • 셀 편집: 더블클릭 인라인 편집, 열 타입 자동 형변환
  • 행 편집: 행 추가 / 다중선택 삭제(Del 키)
  • 열 편집: 열 추가 · 삭제 · 피처명 변경 · 타입 변경 · 헤더 드래그 순서 변경
  • 숨김 행 ID(__rid)로 정렬·필터·페이징과 무관하게 안정적 행 지목
  • 모든 편집을 비파괴 스텝으로 기록 → Undo/Redo + Clean 모드 PIPELINE 통합 표시

✅ Core v2 Milestone 1 — 프로젝트 저장·복원

  • IndexedDB 다중 프로젝트 생성·전환·이름 변경·복제·삭제
  • Store/데이터셋/분석 이력 1초 debounce 자동저장 + 즉시 저장 상태
  • schema version 1 JSON 백업·복원과 미래 버전 거부
  • 데이터셋 등록 API 중앙화와 __rid 복원 연속성

✅ Core v2 Milestone 2 — XLSX Import와 타입 추론

  • SheetJS CE 0.20.3 로컬 고정 + 라이선스/SHA-256 기록
  • CSV/TSV/JSON/XLSX 공통 ImportEngine과 원문 기반 결정적 타입 추론
  • XLSX 시트 범위·행/열·첫 20행 Preview, 복수 시트 선택, 컬럼별 타입 override
  • 중복 데이터셋명 _2, _3 처리와 Import 완료 후 프로젝트 즉시 저장

✅ Core v2 Milestone 3 — Union/Join 데이터 결합

  • 순수 결정적 window.DataOps 엔진: Union(타입 승격·null 채움·__source), Join(4종·복수키·정규화 비교·리네임·폭증 감지)
  • Combine 모달: 실시간 Preview·many-to-many 경고·lineage 포함 새 데이터셋 materialize
  • Node 9/9 회귀 테스트 + 브라우저 러너 케이스

✅ Core v2 Milestone 4 — Pivot Table

  • 순수 결정적 window.PivotEngine: Rows × Columns 크로스탭, 복수 Values 개별 집계, 범주/범위 필터
  • Grand Total은 원본 행에서 재계산(평균·중앙값 정확), 빈 셀 안전 처리
  • Pivot rail 모드: 드래그 shelf + 크로스탭 테이블 + 데이터셋 저장·Chart 열기
  • Node 8/8 회귀 테스트 + 브라우저 러너 케이스

✅ Core v2 Milestone 5 — Dashboard 설정 + KPI Builder

  • 안전한 window.KPIFormula 파서/평가기(eval 없음): SUM/AVG/COUNT(*)/COUNTD/MIN/MAX/MEDIAN + 사칙연산
  • 위젯 Inspector: 선택 위젯의 타입·필드·집계·색상·크기 편집(Chart/KPI/Table/Text)
  • KPI 수식은 Cross Filtering 이후 행 기준 계산, 오류는 표시
  • Text 위젯 dangerouslySetInnerHTML 제거(보안) + 기존 HTML→평문 마이그레이션
  • Node 7/7 회귀 테스트 + 브라우저 러너 케이스

✅ Phase 2 분석 엔진 — 순수 JS + UI 배선 완료 (feat/analytics)

결정적 window.* 엔진 + Node 테스트 + Stats/ML 모드 UI 모두 완료.

  • ML 모드: PCA(Scree+로딩), Logistic Regression + ROC/AUC(계수 막대), DBSCAN(eps/minPts), 계층군집(Ward, K 컷) — 7종 task 그리드
  • Stats 모드: Normal Q-Q(왜도/첨도/Jarque-Bera), Time Series(MA/EMA + ACF), SPC 관리도(I-MR + CL/UCL/LCL)
  • 엔진: window.PCA·Logistic·TimeSeries·DistFit·SPC·Clustering (Cp/Cpk·Pareto·Holt·PACF 등 추가 함수 포함, 일부는 UI 후속)

✅ Core v2 Milestone 6 — 통합 안정화 · v2.0.0 (완료)

  • 8모드 전환 크래시(P0) 수정 — 모드를 함수호출이 아닌 엘리먼트로 렌더
  • Playwright E2E 14스펙 — 모드 전환·un-bricking·ML·DuckDB·SQL·Export·공유링크 회귀 잠금
  • Formula Column 안전 파서new Function 제거, 재귀하강 파서로 임의 코드 실행 차단
  • 언로드 저장 플러시 · ECharts SRI · 캐시버스트 자동화(npm run bump)

✅ Phase 4 — DuckDB-WASM 전환 (완료)

원래 "백엔드 필요" 항목이었으나 브라우저에서 해결.

  • SQL 모드가 DuckDB-WASM에서 전체 SQL 실행 (JOIN·서브쿼리·CTE·윈도우)
  • 데이터셋 자동 테이블 등록(__rid 제외), 따옴표 식별자로 한글 컬럼 지원
  • DuckDB 미로드 시 내장 JS 엔진 폴백 → 오프라인에서도 기본 SQL 동작

🔲 다음 — 하드닝 백로그

강제 순서 없음. 전부 "지금 로컬 개인 사용에는 문제 없고, 특정 조건에서 터지는 것". 상세·근거·해소 이력: IMPLEMENTATION_PLAN.md §12

2026-07-18 실사 백로그 소탕 완료 — 정확성(E1E6)·구조(F1F6)·전역 리렌더(C1)·formula 한글(B3′), 그리고 배포 선행이던 A2·A4·A6·C3까지 전부 해소. 남은 건 아래 조건부 대기 항목뿐.

트리거 선행 필요 항목 (미해소)
오프라인 보장 A3′ DuckDB 로컬 벤더링 (JS 폴백 있어 SQL 자체는 오프라인 동작)
대용량 XLSX 사용 D1 인메모리 복제 가드 · B4 undo 스택 압축
팀·다중 기기 사용 B1 다중 탭 실제 잠금(경고까지는 완료)
구형 브라우저 / 품질 A5 CSS 폴백 · C6 접근성 · C7 라이트 테마 검증 · C8 소형 화면

🔲 미착수 분석 기능 (브라우저 단독 가능)

  • Box-Cox 변환 · Stepwise Regression · ANCOVA · Bootstrap
  • Precision-Recall Curve · Lift/Gain/KS Chart · 트리 모델 Feature Importance
  • Auto Chart Recommendation · Parallel Coordinates · Mosaic/Pair/Contour Plot
  • DOE 기초 (Full/Fractional Factorial, CCD, Taguchi, Prediction Profiler)

⚠️ 데이터 규모 제한 항목

구현 가능하나 5k 행 초과 시 실용성 저하. 경고와 함께 제한적 지원.

기능 제한 이유 실용 상한
Random Forest 다수 트리 = O(n·d·T) CPU ~5k 행, ~10 트리
DBSCAN O(n²) naive 구현 ~5k 행
t-SNE 반복 최적화 매우 느림 ~3k 행
Gaussian Mixture Model EM 수렴 느림 ~5k 행
Factor Analysis SVD 반복 계산 ~10k 행
Neural Network TF.js CDN (~1.5MB) 필요 소규모 아키텍처

❌ 브라우저 단독 불가 — 백엔드 필요

기능 불가 이유
XGBoost / LightGBM C++ 네이티브, 순수 JS 구현 없음
SVM Quadratic Programming solver 필요
UMAP 신뢰할 CDN 없음, 계산 비용 과대
SOM 복잡한 구현, CDN 없음
ARIMA / SARIMA MLE 최적화 수치 불안정, JS 라이브러리 미성숙
Prophet Facebook Python/Stan 전용
Bayesian Analysis (MCMC) 샘플링 비용 — 브라우저에서 수분~수십분
DOE Custom Design (D-optimal) Exchange 알고리즘 = 복잡 수치 최적화
Survival Analysis (Cox) Partial likelihood 최적화 복잡
Gradient Boosting 대용량 데이터 시 너무 느림

🔲 별도 계획 — 프로덕션 스택 전환 (미착수)

  • FastAPI + Polars 백엔드 → 위 ❌ 항목 구현 가능
  • Next.js TypeScript 포팅
  • Analysis Pipeline Builder (노드 기반 워크플로우)
  • AI Analytics Assistant (실제 LLM 연동)

📝 세션 간 작업 기록

자세한 작업 이력은 WORKLOG.md를 참고하세요.


📄 라이선스

Private project — HOYUN-Y

About

데이터 분석 및 시각화 도구 개발

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages