df-basic-stats
npx skills add https://github.com/qmakescl/qskills --skill df-basic-stats
Agent 安装分布
Skill 文档
DataFrame ê¸°ì´ íµê³ ë¶ì ì¤í¬
ê°ì
ì´ ì¤í¬ì ì¬ì©ìê° ì ê³µí ë°ì´í°íë ìì ëí´ ìë íì ì¶ë¡ â íì ë³ ë§ì¶¤ íµê³ ì°ì¶ â ë¶í¬ íë¡íì¼ë§ 리í¬í¸ ìì±ì ì¼ê´ë íì´íë¼ì¸ì¼ë¡ ìííë¤.
ìí¬íë¡ì°
1. ë°ì´í° ë¡ë â ì¬ì©ì íì¼ì pd.DataFrameì¼ë¡ ì½ê¸°
2. íì
ì¶ë¡ â ê° ì´ì 4ê°ì§ íì
ì¼ë¡ ë¶ë¥
3. íµê³ ì°ì¶ â íì
ë³ ë§ì¶¤ íµê³ ê³ì°
4. íë¡íì¼ ë¦¬í¬í¸ â ydata-profiling HTML ìì±
5. ê²°ê³¼ ì ë¬ â JSON ìì½ + HTML 리í¬í¸ë¥¼ ì¬ì©ììê² ì ê³µ
ì¤í ë°©ë²
Step 1: ìì¡´ì± íì¸
pip install pandas numpy matplotlib ydata-profiling --break-system-packages -q
ydata-profilingì´ ì¤ì¹ ì¤í¨íë©´ Step 4(íë¡íì¼ ë¦¬í¬í¸)ë§ ê±´ëë´ë¤. matplotlibì´ ì¤ì¹ ì¤í¨íë©´ ë²ì£¼í ë¶í¬ ì°¨í¸ë§ ê±´ëë´ë¤. ëë¨¸ì§ íµê³ ì°ì¶ì pandas/numpyë§ì¼ë¡ ëìíë¤.
Step 2: ë°ì´í° ë¡ë
ì¬ì©ìê° ì ê³µí íì¼ ê²½ë¡ìì ë°ì´í°ë¥¼ ë¡ëíë¤. íì¼ ìì¹ë íë«í¼ë§ë¤ ë¤ë¥´ë¯ë¡ íê²½ì ë§ê² ê²°ì íë¤:
| íê²½ ë³ì / ê´ë¡ | ì¤ëª |
|---|---|
$UPLOAD_DIR ëë íë«í¼ ì ê³µ ê²½ë¡ |
ì¬ì©ì ì ë¡ë íì¼ ìì¹ |
$OUTPUT_DIR ëë íë«í¼ ì ê³µ ê²½ë¡ |
결과물 ì ë¬ ìì¹ |
| ë³ë ê²½ë¡ ê·ì¹ì´ ìì¼ë©´ | íì¬ ìì ëë í 리(CWD) ê¸°ì¤ |
import pandas as pd
# íì¥ìì ë°ë¼ ìë ì í
df = pd.read_csv(path) # .csv
df = pd.read_excel(path) # .xlsx, .xls
df = pd.read_parquet(path) # .parquet
df = pd.read_json(path) # .json
Step 3: íµê³ ì°ì¶ ì¤í¬ë¦½í¸ ì¤í
ë©ì¸ ë¶ì ì¤í¬ë¦½í¸ë¥¼ ì¤ííë¤. $SKILL_DIRì ì´ ì¤í¬ì´ ì¤ì¹ë ëë í 리 ê²½ë¡ì´ë¤:
# 기본 ì¤í (JSON + MD + HTML + ì°¨í¸ ëª¨ë ìë ìì±)
python $SKILL_DIR/scripts/compute_stats.py <input_file>
# HTML 리í¬í¸ ìì´
python $SKILL_DIR/scripts/compute_stats.py <input_file> --no-html
# MD 리í¬í¸ ìì´
python $SKILL_DIR/scripts/compute_stats.py <input_file> --no-md
ì¶ë ¥ íì¼ëª ì ì ë ¥ íì¼ëª ìì ìë ê²°ì ëë¤:
{dataset_name}-stats.jsonâ ì´ë³ íµê³ (구조í ë°ì´í°)report/{dataset_name}-stats.mdâ 기ì´íµê³ + ì°¨í¸ + ì¸ì¬ì´í¸ íµí© 리í¬í¸{dataset_name}-ydata-profiling.htmlâ ìì¸ íë¡íì¼ ë¦¬í¬í¸charts/*.pngâ ë²ì£¼í ë¶í¬ ì°¨í¸ ì´ë¯¸ì§
ëë Pythonìì ì§ì import (sys.pathì ì¤í¬ ëë í 리 ì¶ê° íì):
import sys, os
sys.path.insert(0, os.path.join(os.environ.get("SKILL_DIR", "."), "scripts"))
from compute_stats import compute_basic_stats
result = compute_basic_stats(
df,
dataset_name="titanic",
profile_report_path="titanic-ydata-profiling.html",
chart_output_dir="./",
md_output_path="titanic-stats.md",
)
Step 4: ê²°ê³¼ ì ë¬
{dataset_name}-stats.jsonâ ì´ë³ íµê³ (구조í ë°ì´í°){dataset_name}-stats.mdâ 기ì´íµê³ + ì°¨í¸ + ì¸ì¬ì´í¸ íµí© 리í¬í¸ (주 결과물){dataset_name}-ydata-profiling.htmlâ ìì¸ íë¡íì¼ ë¦¬í¬í¸charts/*.pngâ ë²ì£¼í ë¶í¬ ì°¨í¸ ì´ë¯¸ì§
ìì´ì í¸ë report/{dataset_name}-stats.md를 ì½ì´ ì¬ì©ììê² í ì¤í¸ë¡ ì¤ëª íë ê²ì 기본ì¼ë¡ íë¤.
íì ì¶ë¡ ê·ì¹
| íì ìì | ì¡°ê±´ | ë¶ë¥ |
|---|---|---|
| 1 | datetime64 dtype |
datetime |
| 2 | ì ì dtype (numpy int, pandas Int) | integer |
| 3 | ì¤ì dtype (float) | continuous |
| 4 | objectì¸ë° 80%+ ì«ì ë³í ê°ë¥ & 모ë ì ì | integer |
| 5 | objectì¸ë° 80%+ ì«ì ë³í ê°ë¥ & ììì í¬í¨ | continuous |
| 6 | objectì¸ë° 80%+ ë ì§ íì± ê°ë¥ | datetime |
| 7 | ê·¸ ì¸ ì ë¶ | categorical |
ìì¸ ì¶ë¡ ë¡ì§ì
references/type-inference.md참조.
íì ë³ ì°ì¶ íµê³
| íµê³ í목 | continuous | integer | categorical | datetime |
|---|---|---|---|---|
| ìëµì (valid_count) | â | â | â | â |
| 결측ì (missing_count) | â | â | â | â |
| ê²°ì¸¡ë¥ (missing_rate) | â | â | â | â |
| íê· (mean) | â | â | ||
| íì¤í¸ì°¨ (std) | â | â | ||
| ì¤ìê° (median) | â | â | ||
| ìµìê° (min) | â | â | â | |
| ìµëê° (max) | â | â | â | |
| ìµë¹ê° (mode) | â | â | â | |
| ê³ ì ê° ì (unique_count) | â | |||
| ìì ë¹ëê° (top5_values) | â (>8 ë²ì£¼) | |||
| ë¶í¬ (distribution) | â (â¤8 ë²ì£¼) | |||
| ë¶í¬ ì¤ëª (distribution_description) | â (â¤8 ë²ì£¼) | |||
| ë¶í¬ ì°¨í¸ (distribution_chart) | â (â¤8 ë²ì£¼) |
ì¶ë ¥ íì
ê²°ê³¼ë ë¤ì JSON êµ¬ì¡°ë¡ ë°íëë¤:
{
"dataframe_shape": {"rows": 1000, "cols": 8},
"columns": [
{
"column_name": "age",
"inferred_type": "integer",
"total_count": 1000,
"valid_count": 985,
"missing_count": 15,
"missing_rate": 0.015,
"mean": 42.3,
"std": 14.2,
"median": 41.0,
"min": 18.0,
"max": 75.0,
"mode": 35
}
],
"profile_report": "report.html"
}
ì£ì§ ì¼ì´ì¤ ì²ë¦¬
- ë¹ ë°ì´í°íë ì: íì´ 0ê°ë©´ shape ì ë³´ë§ ë°ííê³ ê²½ê³ ë©ìì§ ì¶ë ¥
- ì ì²´ 결측 ì´: íµê³ê°ì 모ë nullë¡ ë°í
- í¼í© íì ì´: objectë¡ ì²ë¦¬ í ì«ì/ë ì§ ë³í ìë (80% ìê³ê° ì ì©)
- ydata-profiling 미ì¤ì¹: ê²½ê³ ë§ ì¶ë ¥íê³ íë¡íì¼ ë¦¬í¬í¸ ìì´ ëë¨¸ì§ íµê³ ì ì ë°í
- ëì©ë ë°ì´í° (>100ë§ í): profilingì
minimal=True모ë ê°ì ì ì©
íë«í¼ ê²½ë¡ ì¤ì
ì´ ì¤í¬ì í¹ì íë«í¼ì ì ë ê²½ë¡ì ìì¡´íì§ ìëë¤. ê° ìì´ì í¸ íê²½ìì ìë 3ê°ì§ ê²½ë¡ë¥¼ ìì ì íê²½ì ë§ê² ê²°ì íë©´ ëë¤:
| ë³ì | ì미 | ìì |
|---|---|---|
SKILL_DIR |
ì´ ì¤í¬ì´ ì¤ì¹ë ëë í 리 | /mnt/skills/user/df-basic-stats |
UPLOAD_DIR |
ì¬ì©ì íì¼ ì ë¡ë ìì¹ | íë«í¼ ì ê³µ ê²½ë¡ ëë CWD |
OUTPUT_DIR |
ê²°ê³¼ íì¼ ì ë¬ ìì¹ | íë«í¼ ì ê³µ ê²½ë¡ ëë CWD |
íë«í¼ë³ ì°¸ê³ :
- Anthropic Claude ì»´í¨í°:
UPLOAD_DIR=/mnt/user-data/uploads,OUTPUT_DIR=/mnt/user-data/outputs - OpenAI Code Interpreter: ë ë¤
/mnt/data/ - ë¡ì»¬ ìì´ì í¸ (LangChain, Claude Code ë±): íì¬ ìì ëë í 리(CWD) 기ì¤
ì°¸ê³ ë¬¸ì
references/type-inference.mdâ íì ì¶ë¡ ìê³ ë¦¬ì¦ ìì¸ ì¤ëªreferences/output-schema.mdâ ì ì²´ ì¶ë ¥ JSON ì¤í¤ë§ ì ìscripts/compute_stats.pyâ ë©ì¸ ì¤í ì¤í¬ë¦½í¸ (CLI + 모ë)