{
  "markdown": "# DalyKit\n\n### Data Analysis Kit\n\n> 반복되는 분석 코드는 DalyKit에게. 당신은 인사이트에만 집중하세요.  \n> Claude Code 플러그인으로 데이터 분석 워크플로우를 가속합니다.\n\n![version](https://img.shields.io/badge/version-0.2.3-blue?style=flat)\n![license](https://img.shields.io/badge/license-MIT-green?style=flat)\n![python](https://img.shields.io/badge/python-3.10%2B-yellow?style=flat&logo=python&logoColor=white)\n![platform](https://img.shields.io/badge/platform-Claude%20Code-orange?style=flat)\n\n[English](./README.en.md) | 한국어\n\n---\n\n## Table of Contents\n\n- [What is DalyKit?](#what-is-dalykit)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Workflow](#workflow)\n- [Project Structure](#project-structure)\n- [Tech Stack](#tech-stack)\n- [Skills](#skills)\n- [Kit Management](#kit-management)\n- [Skills in Detail](#skills-in-detail)\n- [Contact](#contact)\n\n---\n\n## What is DalyKit?\n\n데이터 분석은 반복적입니다. 매번 같은 EDA 코드를 쓰고, 같은 전처리 패턴을 적용하고, 같은 방식으로 모델을 돌립니다.\n\nDalyKit은 이 반복을 없앱니다.\n\n명령어 하나로 분석 코드를 생성하고, 실행 결과를 보고서로 정리하고, 모델 튜닝 루프를 자동으로 돌립니다. 분석가는 데이터와 인사이트에만 집중할 수 있습니다.\n\n### 핵심 특징\n\n- **단계별 워크플로우** — init → eda → clean → stat → feature → ml 전 파이프라인을 스킬 하나씩으로 실행\n- **kit 기반 사이클 관리** — 각 분석 시도가 `kits/k1/`, `kits/k2/`처럼 독립 폴더로 관리되어 이전 시도와 섞이지 않음\n- **토큰 효율 설계** — 1,000행 이상 데이터는 `.py` 스크립트로 분리 실행, 대화 컨텍스트 오염 방지\n- **표준화된 결과물** — 모든 산출물이 `dalykit/` 폴더에 일관된 구조로 저장\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Installation\n\n> **필요 조건** [Claude Code](https://claude.ai/code)\n\n```\n/plugin marketplace add taehyunan-99/DalyKit\n/plugin install dalykit@taehyunan\n```\n\n설치 후 `dalykit:init`으로 시작하세요.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Quick Start\n\n```\n# 1. 프로젝트 초기화\ndalykit:init\n\n# 2. dalykit/data/raw/ 폴더에 CSV 파일 배치\n\n# 3. 다음 단계 확인\ndalykit:next\n```\n\n이후에는 `dalykit:next`가 다음 할 일을 1단계씩 안내합니다.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Workflow\n\n```\ndalykit:init\n│\n├── dalykit:next          현재 상태 기반 다음 단계 자동 추천\n│\n├── dalykit:domain        도메인 정보 정의 (선택)\n│\n├── dalykit:eda           탐색적 데이터 분석\n│\n├── dalykit:clean         데이터 전처리\n│\n├── dalykit:stat          통계 분석 · 가설 검정\n│\n├── dalykit:feature       피처 엔지니어링\n│\n└── dalykit:ml            모델 학습 · 자동 튜닝\n```\n\n각 스킬은 독립적으로 호출 가능합니다. 순서대로 전체 파이프라인을 실행하거나, 필요한 단계만 단독으로 사용할 수 있습니다.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Project Structure\n\n`dalykit:init` 실행 후 생성되는 폴더 구조입니다.\n\n```\ndalykit/\n├── config/\n│   ├── domain.md\n│   ├── requirements.txt\n│   ├── active.json      ← 현재 활성 kit 포인터\n│   └── progress.md\n├── data/\n│   └── raw/             ← 원본 CSV\n└── kits/\n    └── k1/\n        ├── manifest.json\n        ├── eda/\n        ├── clean/\n        ├── stat/\n        ├── feature/\n        └── model/\n```\n\n각 stage 내부에는 다음 산출물이 들어갑니다.\n\n- `eda/`: `eda_analysis.ipynb`, `eda_results.json`, `eda_report.md`, `figures/`\n- `clean/`: `clean_pipeline.ipynb`, `clean_results.json`, `clean_report.md`, `cleaned.csv`, `figures/`\n- `stat/`: `stat_analysis.py`, `stat_analysis.ipynb`, `stat_results.json`, `stat_report.md`, `figures/`\n- `feature/`: `feature_pipeline.ipynb`, `feature_results.json`, `feature_select.py`, `feature_select_results.json`, `selected_features.txt`, `feature_report.md`, `featured.csv`, `figures/`\n- `model/`: `model_train.py`, `model_results.json`, `model_report.md`, `models/`, `figures/`\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Tech Stack\n\n| 용도 | 라이브러리 |\n|------|-----------|\n| 데이터 처리 | pandas 2.x, numpy 2.x |\n| 시각화 | matplotlib 3.x, seaborn 0.13.x |\n| 통계 분석 | scipy 1.x, statsmodels 0.14.x, scikit-posthocs 0.x |\n| 머신러닝 | scikit-learn 1.x, xgboost 3.x, lightgbm 4.x, catboost 1.x, joblib 1.x |\n| 모델 해석 | shap (선택 설치) |\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Skills\n\n| 명령어 | 설명 | 주요 산출물 |\n|--------|------|-------------|\n| `dalykit:init` | 프로젝트 구조 초기화 | `dalykit/kits/k1/` |\n| `dalykit:next` | 현재 상태 기반 다음 단계 추천 | — |\n| `dalykit:domain` | 도메인 정보 구조화 (자유 입력 → domain.md) | `config/domain.md` |\n| `dalykit:eda` | 탐색적 데이터 분석 (EDA) | `kits/{kit}/eda/eda_analysis.ipynb` |\n| `dalykit:eda report` | 노트북 실행 후 EDA 보고서 생성 | `kits/{kit}/eda/eda_report.md` |\n| `dalykit:clean` | 데이터 전처리 | `kits/{kit}/clean/clean_pipeline.ipynb` |\n| `dalykit:clean report` | 노트북 실행 후 전처리 보고서 생성 | `kits/{kit}/clean/clean_report.md` |\n| `dalykit:stat` | 통계 분석 · 가설 검정 | `kits/{kit}/stat/stat_report.md` |\n| `dalykit:stat notebook` | py → ipynb 변환 | `kits/{kit}/stat/stat_analysis.ipynb` |\n| `dalykit:feature` | 피처 엔지니어링 — 인코딩, 스케일링, 파생 변수 | `kits/{kit}/feature/feature_pipeline.ipynb` |\n| `dalykit:feature select` | Greedy Forward Selection + CV 기반 피처 조합 비교 | `kits/{kit}/feature/feature_select_results.json` |\n| `dalykit:feature report` | 노트북 실행 후 피처 보고서 생성 | `kits/{kit}/feature/feature_report.md` |\n| `dalykit:ml` | 모델 자동 선택 (3-5개 비교) + 튜닝 | `kits/{kit}/model/` |\n| `dalykit:ml LR,RF,XGB` | 지정 모델만 비교 + 튜닝 (모델명은 예시) | `kits/{kit}/model/` |\n| `dalykit:ml ensemble` | 베이스라인 상위 모델로 Voting + Stacking 앙상블 비교 | `kits/{kit}/model/model_results.json` |\n| `dalykit:ml report` | 결과 JSON → 보고서 + 시각화 생성 + progress 갱신 | `kits/{kit}/model/model_report.md` |\n| `dalykit:doctor` | 환경 점검 | Python / 패키지 상태 |\n| `dalykit:doctor install` | 의존성 설치 | 현재 Python/conda 환경 |\n| `dalykit:kit` | 활성 kit 확인 | `config/active.json` |\n| `dalykit:kit new` | 새 kit 생성 | `kits/kN/` |\n| `dalykit:kit list` | kit 목록 요약 | `kits/` 스캔 결과 |\n| `dalykit:kit switch k1` | 활성 kit 전환 | `config/active.json` |\n| `dalykit:progress` | 진행 현황 문서 갱신 | `config/progress.md` |\n| `dalykit:help` | 도움말 | — |\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Kit Management\n\n`dalykit:kit`은 분석 사이클을 독립적으로 관리하는 핵심 명령입니다.\n\n예:\n\n```\ndalykit:kit new feature\n```\n\n이 명령은 새 kit을 만들고, 이전 kit의 필요한 선행 산출물을 복사한 뒤 feature 단계부터 다시 시작하게 합니다.\n\n이 구조의 장점:\n\n- `k1`이 마음에 들지 않으면 `k2`를 새로 만들어 독립적으로 시도 가능\n- 이전 kit을 버려도 새 kit이 자체 입력 파일을 가지고 있어 유지 가능\n- 보고서, figures, 모델 파일이 모두 같은 kit 아래 묶여 추적이 쉬움\n\n| 명령어 | 설명 |\n|--------|------|\n| `dalykit:kit` | 현재 활성 kit 확인 |\n| `dalykit:kit new` | 새 kit 생성 (다음 번호 자동 할당) |\n| `dalykit:kit new feature` | feature 단계부터 새 kit 생성 |\n| `dalykit:kit list` | 전체 kit 목록 및 완료 단계 요약 |\n| `dalykit:kit switch k2` | 활성 kit 전환 |\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### Skills in Detail\n\n### `dalykit:init` — 프로젝트 초기화\n\n분석을 시작하기 전 가장 먼저 실행하는 스킬입니다. `dalykit/` 폴더와 kit 기반 하위 구조를 한 번에 생성하고, 필요한 설정 파일을 복사합니다.\n\n**동작 방식**\n\n1. `dalykit/` 폴더가 이미 존재하면 중복 실행을 방지하고 종료\n2. `config`, `data/raw`, `kits/k1/{eda,clean,stat,feature,model}` 폴더 생성\n3. 플러그인 번들에서 `domain.md`, `requirements.txt`, `active.json`, `progress.md` 복사\n4. `kits/k1/manifest.json` 생성\n\n**실행 결과**\n```\ndalykit/\n├── config/\n│   ├── domain.md\n│   ├── requirements.txt\n│   ├── active.json\n│   └── progress.md\n├── data/\n│   └── raw/\n└── kits/\n    └── k1/\n        ├── manifest.json\n        ├── eda/\n        ├── clean/\n        ├── stat/\n        ├── feature/\n        └── model/\n```\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:next` — 다음 단계 추천\n\n현재 상태를 읽어 다음에 실행할 명령 1개를 자동으로 추천합니다. 어디서부터 시작할지 모를 때 언제든 실행하세요.\n\n**판단 순서**\n\n1. 초기화 확인 (`dalykit/config/active.json` 존재 여부)\n2. 원본 데이터 확인 (`data/raw/`에 CSV/Excel 존재 여부)\n3. 도메인 구조화 확인\n4. 분리 보고서 단계 확인 (결과 파일 있는데 보고서 미생성 시 report 우선 추천)\n5. 기본 파이프라인 순서 추천 (`eda → clean → stat → feature → ml`)\n6. 완료 후 분기 안내\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:domain` — 도메인 정보 구조화\n\n분석 전 데이터와 비즈니스 맥락을 정리하는 스킬입니다. 형식 없이 자유롭게 작성한 메모를 Claude가 읽고, 이후 스킬들이 참조할 수 있는 구조화된 형식으로 변환합니다.\n\n**동작 방식**\n\n1. `dalykit/config/domain.md`의 자유 입력 섹션 읽기\n2. `dalykit/data/raw/`의 CSV 파일을 탐색해 컬럼명, 타입, 분포 파악\n3. 자유 입력 + CSV 정보를 종합해 업종, 타겟 변수, 컬럼 설명, 도메인 규칙 등 구조화\n4. `domain.md`의 구조화 섹션만 덮어쓰기 (자유 입력 보존)\n\n자유 입력 없이 실행해도 CSV 컬럼 정보만으로 구조화가 가능합니다. 단, 도메인 규칙이나 비즈니스 제약처럼 데이터에서 추론할 수 없는 항목은 직접 입력하는 것을 권장합니다.\n\n이 파일은 이후 `dalykit:eda`부터 `dalykit:ml`까지 모든 스킬이 참조합니다.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:eda` — 탐색적 데이터 분석\n\n데이터의 구조, 분포, 결측값, 상관관계를 분석하는 Jupyter 노트북을 자동 생성합니다.\n\n**동작 방식**\n\n1. `dalykit/data/raw/`에서 CSV 파일 탐색\n2. `domain.md`가 있으면 도메인 맥락을 반영해 노트북 구성\n3. `kits/{kit}/eda/eda_analysis.ipynb` 생성 (각 분석 셀 끝에서 결과를 `eda_results.json`으로 누적 저장)\n4. 사용자가 노트북을 직접 실행한 뒤 `dalykit:eda report`로 보고서 생성\n\n**실행 흐름**\n```\ndalykit:eda           → eda_analysis.ipynb 생성\n  ↓ 사용자가 노트북 실행 (→ eda_results.json 셀 단위 누적 저장)\ndalykit:eda report    → eda_results.json 읽기 → eda_report.md 생성\n```\n\n노트북 실행은 사용자가 직접 합니다. 셀 단위로 결과를 확인하고 수정할 수 있어 분석 품질을 높일 수 있습니다.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:clean` — 데이터 전처리\n\n결측값, 중복, 이상치, 타입 변환을 처리하는 전처리 파이프라인 노트북을 생성합니다. EDA 보고서가 있으면 분석 결과를 반영해 전처리 전략을 자동으로 구성합니다.\n\n**동작 방식**\n\n1. `eda_report.md`가 있으면 결측값·이상치·타입 이슈를 파악해 전략 수립, 없으면 데이터 직접 프로파일링\n2. `kits/{kit}/clean/clean_pipeline.ipynb` 생성 (주요 처리 셀 끝마다 결과를 `clean_results.json`으로 누적 저장)\n3. 사용자가 노트북을 직접 실행한 뒤 `dalykit:clean report`로 보고서 생성\n4. 전처리 결과는 `kits/{kit}/clean/cleaned.csv`로 저장\n\n**결측값 처리 전략** (결측 비율 기준 자동 선택)\n\n| 결측 비율 | 전략 |\n|-----------|------|\n| > 50% | 열 제거 권고 (사용자 확인) |\n| 5 ~ 50% | 그룹별 중앙값 대체 → fallback: 단순 중앙값 |\n| < 5% | 단순 중앙값 / 최빈값 대체 |\n| 복잡한 패턴 | IterativeImputer 셀 별도 제공 (선택 실행) |\n\n**이상치 처리 워크플로우**\n\n이상치는 자동 제거하지 않습니다. 탐지 결과만 출력하고, 처리 옵션(IQR 제거 / 클리핑)을 주석 처리 셀로 미리 제공합니다.\n\n```\ndalykit:clean            → clean_pipeline.ipynb 생성\n  ↓ 노트북 실행 (이상치 탐지 결과 확인, → clean_results.json 셀 단위 누적 저장)\ndalykit:clean report     → clean_results.json 읽기 → 보고서 확인\n  ↓ 노트북에서 이상치 처리 셀 주석 해제 후 재실행\ndalykit:clean report     → 보고서 갱신\n```\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:stat` — 통계 분석 · 가설 검정\n\n변수 척도를 파악하고 적합한 통계 검정을 자동 선택해 분석합니다. EDA/전처리 보고서가 있으면 추천 항목을 반영해 분석 계획을 수립합니다.\n\n**동작 방식**\n\n1. EDA·전처리 보고서에서 분석 추천 항목 추출, 없으면 데이터 직접 프로파일링\n2. 변수 척도(명목/순서/등간/비율) 파악 → 적합한 검정 자동 선택\n3. `kits/{kit}/stat/stat_analysis.py` 생성 후 자동 실행\n4. 결과를 JSON으로 저장하고 `stat_report.md` 자동 생성\n\neda/clean과 달리 노트북 수동 실행 없이 스크립트 실행부터 보고서 생성까지 자동으로 이어집니다. 결과를 노트북으로 확인하고 싶다면 `dalykit:stat notebook`으로 변환할 수 있습니다.\n\n**실행 흐름**\n```\ndalykit:stat          → stat_analysis.py 생성 + 실행 → stat_report.md 자동 생성\ndalykit:stat notebook → stat_analysis.ipynb 변환\n```\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:feature` — 피처 엔지니어링\n\n전처리된 데이터에서 인코딩, 스케일링, 파생 변수 생성, 피처 선택을 수행하는 노트북을 생성합니다. EDA·전처리·통계 보고서의 요약 섹션을 참조해 데이터에 맞는 전략을 자동으로 구성합니다.\n\n**동작 방식**\n\n1. 이전 보고서(eda, clean, stat) 요약 섹션 참조 → 인코딩 대상, 유의미한 변수 파악\n2. `domain.md`에서 타겟 변수, 도메인 규칙 확인\n3. `kits/{kit}/feature/feature_pipeline.ipynb` 생성 (마지막 셀에서 피처 변환 결과를 `feature_results.json`으로 자동 저장)\n4. 사용자가 노트북을 직접 실행한 뒤 `dalykit:feature report`로 보고서 생성\n5. 피처 결과는 `kits/{kit}/feature/featured.csv`로 저장 (ml 스킬의 입력값)\n\n**실행 흐름**\n```\ndalykit:feature           → feature_pipeline.ipynb 생성\n  ↓ 사용자가 노트북 실행 (→ feature_results.json 자동 저장)\ndalykit:feature select    → featured.csv 기준 Greedy Forward Selection + CV 비교 (선택)\ndalykit:feature report    → feature_results.json 읽기 → feature_report.md 생성\n```\n\n**`dalykit:feature select` — 피처 조합 CV 비교**\n\n`featured.csv`에서 최적 피처 조합을 찾는 선택적 보조 단계입니다. `featured.csv`를 수정하지 않고 추천 결과만 반환합니다.\n\n- CV 전략 자동 선택: GroupKFold → TimeSeriesSplit → StratifiedKFold → KFold (데이터 특성 기반)\n- 경량 베이스 모델(LGBM/RF)로 상대 성능 비교 (최종 모델 성능 기준 아님)\n- 결과: `feature_select_results.json`, `selected_features.txt`, `figures/feature_select_*.png`\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n### `dalykit:ml` — 모델 학습 · 자동 튜닝\n\n피처 엔지니어링된 데이터로 머신러닝 모델을 학습하고 자동으로 튜닝합니다. 분류/회귀를 자동 감지하고, 3~5개 후보 모델을 비교한 뒤 상위 모델을 선정해 튜닝 루프를 실행합니다.\n\n**동작 방식**\n\n1. 이전 보고서 요약 섹션 참조 + `domain.md`에서 타겟 변수, 목표 성능 확인\n2. 데이터 규모 판단 후 전략 결정 (소규모 n≤10k: 전체 비교 / 중규모 n≤100k: SVM 제외 / 대규모 n>100k: 샘플링 후 선정 재학습)\n3. `kits/{kit}/model/model_train.py` 생성 후 백그라운드 자동 실행\n4. 1회차 결과로 피처 진단 (중요도 수렴, 다중공선성, 과적합, 전체 저성능)\n5. 이상 없으면 상위 1~2개 모델 선정 → 튜닝 루프 실행 (최대 5회)\n6. 회귀 문제의 경우 타깃 로그 변환(identity vs log1p) 자동 판단 (`y.min() >= 0` 조건, 역변환 후 원본 스케일 평가)\n7. 결과는 `model_results.json` + `models/{모델명}.joblib`으로 저장\n\n**튜닝 종료 조건**\n\n| 조건 | 동작 |\n|------|------|\n| 목표 성능 도달 | 종료 |\n| 이전 대비 개선폭 ≤ 0.5% 또는 성능 하락 | 수렴 종료 |\n| 최대 5회 도달 | 강제 종료 |\n\n**실행 흐름**\n```\ndalykit:ml              → 자동 모델 선택 + 튜닝 루프\ndalykit:ml LR,RF,XGB    → 지정 모델만 비교 + 튜닝\ndalykit:ml ensemble     → 베이스라인 상위 모델로 Voting + Stacking 앙상블 비교\ndalykit:ml report       → model_results.json → model_report.md 생성 + progress 갱신\n```\n\n**피처 진단 시그널**\n\n1회차 실행 후 아래 시그널이 감지되면 조기 종료하고 피처 수정 피드백을 제공합니다.\n\n| 시그널 | 기준 |\n|--------|------|\n| 피처 중요도 0 수렴 | 중요도 < 0.01인 피처가 전체의 50% 이상 |\n| 다중공선성 | VIF > 10인 피처 쌍 존재 |\n| 과적합 | train-test 성능 격차 > 10% |\n| 전체 저성능 | 모든 모델이 베이스라인 미달 |\n\n피처 수정이 필요한 경우 `dalykit:feature`로 돌아가 노트북을 수정·재실행한 뒤 `dalykit:ml`을 재실행합니다.\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n\n---\n\n## Contact\n\n[![Email](https://img.shields.io/badge/Email-withblua%40gmail.com-D14836?style=flat&logo=gmail&logoColor=white)](mailto:withblua@gmail.com)\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-taehyun--an-0A66C2?style=flat&logo=linkedin&logoColor=white)](https://www.linkedin.com/in/taehyun-an-8b07993a5)\n[![Velog](https://img.shields.io/badge/Velog-taehyunan817-20C997?style=flat&logo=velog&logoColor=white)](https://velog.io/@taehyunan817/posts)\n\n<div align=\"right\"><a href=\"#dalykit\">Top</a></div>\n",
  "bytes": 12984,
  "sha": "8436bb07c7f8b6ae9dfa44dd2b07d8db06ba848d6361ef3bd88cf503bc508a8d",
  "repo_slug": "taehyunan-99/dalykit",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_taehyunan_99_dalykit_dalykit_d7c2f3fe/readme"
}