chokukil/mcp-data-science
If you are the rightful owner of mcp-data-science and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.
The Advanced Data Science MCP Server offers comprehensive data science capabilities and intelligent analytics, supporting enterprise-level data analysis through state-of-the-art machine learning and deep learning algorithms.
Advanced Data Science MCP Server
ํฌ๊ด์ ์ธ ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค ๊ธฐ๋ฅ๊ณผ ์ง๋ฅํ ๋ถ์์ ์ ๊ณตํ๋ ๊ณ ๋ํ๋ MCP (Model Context Protocol) ์๋ฒ์ ๋๋ค. ์ต์ ๋จธ์ ๋ฌ๋/๋ฅ๋ฌ๋ ์๊ณ ๋ฆฌ์ฆ, AutoML, ์ง๋ฅํ ๋ฌธ์ ์ ํ ๊ฐ์ง, ์ ์์ ์ํ๋ง, ์ธํฐ๋ํฐ๋ธ ์๊ฐํ๋ฅผ ํตํด ์ํฐํ๋ผ์ด์ฆ๊ธ ๋ฐ์ดํฐ ๋ถ์์ ์ง์ํฉ๋๋ค.
๐ ์ฃผ์ ๊ธฐ๋ฅ
๐ง ์ง๋ฅํ ๋ฌธ์ ์ ํ ์๋ ๊ฐ์ง
- ๋ฐ์ดํฐ ํน์ฑ ๊ธฐ๋ฐ ์๋ ๋ฌธ์ ์ ํ ํ๋ณ (๋ถ๋ฅ/ํ๊ท/ํด๋ฌ์คํฐ๋ง/์๊ณ์ด/์ด๋ฏธ์ง/ํ ์คํธ)
- ์ง๋/๋น์ง๋ ํ์ต ์๋ ์ถ์ฒ
- ํ๊ฒ ์ปฌ๋ผ ์๋ ์ถ์ฒ ๋ฐ ์ ํฉ์ฑ ํ๊ฐ
- ๋ฐ์ดํฐ ํฌ๊ธฐ๋ณ ์ต์ ๋ถ์ ์ ๋ต ์๋ ์ ํ
๐ค ๊ณ ๊ธ AutoML & ๋จธ์ ๋ฌ๋
- ์ต์ ๋ถ์คํ ์๊ณ ๋ฆฌ์ฆ: XGBoost, LightGBM, CatBoost
- AutoKeras ํตํฉ: ์๋ ์ ๊ฒฝ๋ง ์ํคํ ์ฒ ํ์ (NAS)
- Gaussian Process: ๋ถํ์ค์ฑ ์ ๋ํ ๊ธฐ๋ฅ
- ๊ณ ๊ธ ํด๋ฌ์คํฐ๋ง: HDBSCAN, Spectral Clustering, OPTICS
- ์ด์์น ํ์ง: Isolation Forest, One-Class SVM, Elliptic Envelope
- ๋ถ๊ท ํ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: SMOTE, ADASYN, ์ธ๋์ํ๋ง
๐ ์ ์์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์ํ๋ง
- ์ง๋ฅํ ์ํ๋ง: 100MB ์ด์ ํ์ผ์ ๋ํ ์๋ ์ํ๋ง
- ์ํ๋ง ๋ฐฉ๋ฒ: ์ธตํํ์ง, ์ฒด๊ณํ์ง, ๋ฌด์์ํ์ง
- ํ์ง ๊ฒ์ฆ: ์ํ๊ณผ ์๋ณธ ๋ฐ์ดํฐ์ ํต๊ณ์ ์ ์ฌ์ฑ ์๋ ๊ฒ์ฆ
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ: ๋์ฉ๋ ๋ฐ์ดํฐ์ ํจ์จ์ ์ฒ๋ฆฌ
๐จ ๊ณ ๊ธ ์๊ฐํ & ์ฐจ์ ์ถ์
- ์ธํฐ๋ํฐ๋ธ ์๊ฐํ: Plotly ๊ธฐ๋ฐ ๋์ ์ฐจํธ
- ์ฐจ์ ์ถ์: t-SNE, UMAP, Isomap, PCA
- ์ข ํฉ ๋์๋ณด๋: ๋ฐ์ดํฐ ํ์ง, ์๊ด๊ด๊ณ, ๋ถํฌ ํ๋์ ๋ณด๊ธฐ
- ๋ค์ํ ํ๋กฏ: histogram, scatter, boxplot, heatmap, pairplot, violin, distribution
๐ฌ ๋ชจ๋ธ ํด์ & ์ต์ ํ
- SHAP: ๋ธ๋๋ฐ์ค ๋ชจ๋ธ ํด์ ๋ฐ ํน์ฑ ์ค์๋
- ์ค๋ฃจ์ฃ ๋ถ์: ์ต์ ํด๋ฌ์คํฐ ์ ์๋ ๊ฒฐ์
- ๊ต์ฐจ ๊ฒ์ฆ: ๋ค์ํ ํ๊ฐ ์งํ๋ก ๋ชจ๋ธ ์ฑ๋ฅ ๊ฒ์ฆ
- ํน์ฑ ์ค์๋: ์ฌ๋ฌ ๋ฐฉ๋ฒ๋ก ์ ํตํ ํน์ฑ ๋ถ์
๐ป ์์ ํ ์ฝ๋ ์๋ ์์ฑ
- ๋ชจ๋ ๋ถ์ ๊ณผ์ ์ ์ฌํ ๊ฐ๋ฅํ Python ์ฝ๋ ์๋ ์์ฑ
- ์ํ๋ง ๋ก์ง, ์ ์ฒ๋ฆฌ, ๋ชจ๋ธ๋ง ์ ์ฒด ํ์ดํ๋ผ์ธ ์ฝ๋ํ
- ํ๋ก๋์ ๋ฐฐํฌ๋ฅผ ์ํ ๋ ๋ฆฝ ์คํ ๊ฐ๋ฅ ์คํฌ๋ฆฝํธ
- API ์๋น, ๋ชจ๋ธ ๋ชจ๋ํฐ๋ง ์ฝ๋ ํ ํ๋ฆฟ ์ ๊ณต
๐ ์ข ํฉ ๋งํฌ๋ค์ด ๋ณด๊ณ ์
- ๋ถ์ ๊ณผ์ ๊ณผ ๊ฒฐ๊ณผ์ ์ ๋ฌธ์ ์ธ ๋งํฌ๋ค์ด ๋ณด๊ณ ์ ์๋ ์์ฑ
- ์๊ฐํ ์๋ฒ ๋ฉ, ์ฝ๋ ์ค๋ช , ์ค์ฉ์ ํ์ฉ ๊ฐ์ด๋ ํฌํจ
- ์ํ๋ง ์ ๋ณด, ๋ชจ๋ธ ์ฑ๋ฅ, ๊ถ์ฅ์ฌํญ ์์ธ ๊ธฐ์
๐ ๏ธ ๋๊ตฌ ๋ชฉ๋ก
๐ ํต์ฌ ๋ถ์ ๋๊ตฌ
load_dataset
: ์ง๋ฅํ ๋ฐ์ดํฐ ๋ก๋ฉ (์๋ ์ํ๋ง, ๋ฌธ์ ์ ํ ๊ฐ์ง, ํ๊ฒ ์ถ์ฒ)perform_eda
: ๊ณ ๊ธ ํ์์ ๋ฐ์ดํฐ ๋ถ์ (๋์๋ณด๋, ์ฐจ์์ถ์, ์ด์์น ๋ถ์)auto_ml_pipeline
: ์ง๋ฅํ AutoML ํ์ดํ๋ผ์ธ (๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ, ์๋ ํ๊ฐ)create_visualization
: ๊ณ ๊ธ ์๊ฐํ ์์ฑ (๋ค์ํ ํ๋กฏ ํ์ , ์ธํฐ๋ํฐ๋ธ)
๐ ํ์ผ ๊ด๋ฆฌ ๋๊ตฌ
upload_local_file
: ๋ก์ปฌ ํ์ผ ์ ๋ก๋ (์๋ ํ์ ๊ฒ์ฆ, ์์ ํ ์ด๋ฆ ์์ฑ)copy_file_to_sandbox
: ํ์ผ ๋ณต์ฌ (์ปค์คํ ์ด๋ฆ ์ง์ ๊ฐ๋ฅ)list_uploaded_files
: ์ ๋ก๋๋ ํ์ผ ๋ชฉ๋ก (๋ฐ์ดํฐ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํฌํจ)list_available_datasets
: ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ์ ๋ชฉ๋ก (๋ฉํ๋ฐ์ดํฐ ํฌํจ)
๐ ์ถ์ ๋ฐ ๋ณด๊ณ ์ ๋๊ตฌ
generate_comprehensive_report
: ์ข ํฉ ๋ถ์ ๋ณด๊ณ ์ ์์ฑ (๋งํฌ๋ค์ด, ์๊ฐํ ์๋ฒ ๋ฉ)get_operation_details
: ์์ ์์ธ ์ ๋ณด ์กฐํ (์ ๋ ฅ/์ถ๋ ฅ, ์์ฑ ํ์ผ)list_generated_code
: ์์ฑ๋ ์ฝ๋ ๋ชฉ๋ก (ํ์ผ ์ ๋ณด, ์ฝ๋ ํ์ )get_upload_instructions
: ํ์ผ ์ ๋ก๋ ๊ฐ์ด๋ (์ฌ์ฉ๋ฒ, ์์)
โ๏ธ ์์คํ ๋๊ตฌ
get_environment_info
: ํ๊ฒฝ ์ ๋ณด ์กฐํ (ํจํค์ง ๊ฐ์ฉ์ฑ, ์ง์ ๊ธฐ๋ฅ)health_check
: ์๋ฒ ์ํ ํ์ธ (์์คํ ์ ๋ณด, ๊ธฐ๋ฅ ์ํ)
๐ ์ง์ ์๊ณ ๋ฆฌ์ฆ ์์ธ
๋ถ๋ฅ (Classification)
- ๊ธฐ๋ณธ: Random Forest, Gradient Boosting, Extra Trees, Logistic Regression, SVM, k-NN, Naive Bayes, Decision Tree, MLP
- ๊ณ ๊ธ: XGBoost, LightGBM, CatBoost, Gaussian Process, QDA
- ํ๊ฐ: Accuracy, Precision, Recall, F1-Score, ROC-AUC
ํ๊ท (Regression)
- ๊ธฐ๋ณธ: Random Forest, Gradient Boosting, Extra Trees, Linear/Ridge/Lasso/ElasticNet, SVR, k-NN, Decision Tree, MLP
- ๊ณ ๊ธ: XGBoost, LightGBM, CatBoost, Gaussian Process
- ํ๊ฐ: Rยฒ, RMSE, MAE, Cross-validation Score
ํด๋ฌ์คํฐ๋ง (Clustering)
- ๊ธฐ๋ณธ: K-Means, DBSCAN, Agglomerative, Gaussian Mixture
- ๊ณ ๊ธ: HDBSCAN, Spectral, OPTICS, Mean Shift, Affinity Propagation
- ํ๊ฐ: Silhouette Score, ์๋ ์ต์ ํด๋ฌ์คํฐ ์ ๊ฒฐ์
์ด์์น ํ์ง (Anomaly Detection)
- ์๊ณ ๋ฆฌ์ฆ: Isolation Forest, One-Class SVM, Elliptic Envelope, Local Outlier Factor
- ํ๊ฐ: ์ด์์น ๋น์จ, ์ด์์น ์ค์ฝ์ด
๐ ์๊ฐํ ํ์
ํ์ | ์ค๋ช | ํ์ ํ๋ผ๋ฏธํฐ | ์ ํ ํ๋ผ๋ฏธํฐ |
---|---|---|---|
histogram | ํ์คํ ๊ทธ๋จ | x_column | title |
scatter | ์ฐ์ ๋ | x_column, y_column | hue_column, title |
boxplot | ๋ฐ์คํ๋กฏ | x_column | y_column, title |
heatmap | ์๊ด๊ด๊ณ ํํธ๋งต | - | title |
bar | ๋ฐ์ฐจํธ | x_column | y_column, title |
pairplot | ๋ค๋ณ๋ ๊ด๊ณ ํ๋กฏ | - | hue_column, title |
violin | ๋ฐ์ด์ฌ๋ฆฐ ํ๋กฏ | x_column, y_column | title |
distribution | ๋ถํฌ ๋ถ์ (ํ์คํ ๊ทธ๋จ+KDE+Q-Q) | x_column | title |
๐ ์ง์ ํ์ผ ํ์
์ ๋ ฅ ํ์
- CSV:
.csv
(๊ฐ์ฅ ๊ถ์ฅ) Excel:.xlsx
,.xls
JSON:.json
Parquet:.parquet
ํ ์คํธ:.txt
,.tsv
์ถ๋ ฅ ํ์
- ๋ฐ์ดํฐ: CSV
- ์๊ฐํ: PNG (์ ์ ), HTML (์ธํฐ๋ํฐ๋ธ)
- ๋ชจ๋ธ: PKL (joblib)
- ๋ณด๊ณ ์: JSON, Markdown
- ์ฝ๋: Python (.py)
๐ ๋น ๋ฅธ ์์
Linux/Mac ์ฌ์ฉ์
# 1. uv ์ค์น (์๋ ๊ฒฝ์ฐ)
curl -LsSf https://astral.sh/uv/install.sh | sh
source ~/.bashrc # ๋๋ ~/.zshrc
# 2. ํ๋ก์ ํธ ์ค์
git clone https://github.com/chokukil/mcp-data-science.git
cd mcp-data-science
# 3. ๊ธฐ๋ณธ ์์กด์ฑ ์ค์น
uv venv --python 3.10
source .venv/bin/activate
uv pip install -e .
# 4. ๊ณ ๊ธ ๊ธฐ๋ฅ ์ค์น (์ ํ์ )
uv pip install -e ".[all]" # ๋ชจ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ ํ๋ฒ์ ์ค์น
# 5. ์๋ฒ ์คํ
python mcp_data_science.py --sandbox-dir ./sandbox --port 8007
Windows ์ฌ์ฉ์
# 1. uv ์ค์น (์๋ ๊ฒฝ์ฐ) - PowerShell์ ๊ด๋ฆฌ์ ๊ถํ์ผ๋ก ์คํ
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
# PowerShell ์ฌ์์
# 2. ํ๋ก์ ํธ ์ค์
git clone https://github.com/chokukil/mcp-data-science.git
cd mcp-data-science
# 3. ๊ธฐ๋ณธ ์์กด์ฑ ์ค์น
uv venv --python 3.10
.\.venv\Scripts\activate
uv pip install -e .
# 4. ๊ณ ๊ธ ๊ธฐ๋ฅ ์ค์น (์ ํ์ )
uv pip install -e ".[all]" # ๋ชจ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ ํ๋ฒ์ ์ค์น
3. ์๋ฒ ์คํ
# ๊ธฐ๋ณธ ์คํ
python mcp_data_science.py
# uv๋ฅผ ์ฌ์ฉํ ๊ฒฉ๋ฆฌ ์คํ
uv run --isolated mcp_data_science.py
# ์ปค์คํ
์ค์
uv run --isolated --sandbox-dir ./my_sandbox --port 8008
# ๋ชจ๋ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ํจ๊ป ์คํ (์๊ฐ์ด ์ ๋ถ ๊ฑธ๋ฆด ์ ์์ต๋๋ค.)
uv run --isolated --extra all mcp_data_science.py
4. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ
1. ํ์ผ ์ ๋ก๋
upload_result = await upload_local_file('/path/to/your/data.csv')
2. ๋ฐ์ดํฐ ๋ก๋ (์๋ ์ํ๋ง, ๋ฌธ์ ์ ํ ๊ฐ์ง)
load_result = await load_dataset(upload_result['file_info']['destination_path']) dataset_id = load_result['dataset_id']
3. ํ์์ ๋ฐ์ดํฐ ๋ถ์
eda_result = await perform_eda(dataset_id)
4. AutoML ์คํ
automl_result = await auto_ml_pipeline( dataset_id=dataset_id, target_column='target', # ๋๋ None์ผ๋ก ์๋ ๊ฐ์ง include_advanced=True )
5. ์๊ฐํ ์์ฑ
viz_result = await create_visualization( dataset_id=dataset_id, plot_type='pairplot', hue_column='category' )
6. ์ข ํฉ ๋ณด๊ณ ์ ์์ฑ
report_result = await generate_comprehensive_report()
## ๐ก ๊ณ ๊ธ ์ฌ์ฉ ์๋๋ฆฌ์ค
### ๐ฏ ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
```python
# 500MB CSV ํ์ผ ์ฒ๋ฆฌ
await upload_local_file('/data/large_dataset.csv')
# โ ์๋์ผ๋ก ์ง๋ฅํ ์ํ๋ง ์ ์ฉ (์ธตํํ์ง/์ฒด๊ณํ์ง/๋ฌด์์ํ์ง)
load_result = await load_dataset('large_dataset_20241207_143052.csv')
# ์ถ๋ ฅ ์์:
# - ์๋ณธ: 1,000,000 ํ
# - ์ํ: 30,000 ํ (์ธตํํ์ง)
# - ํ์ง: Excellent (๋ถํฌ ์ฐจ์ด < 2%)
๐ฌ ๋ฌธ์ ์ ํ ์๋ ๊ฐ์ง
# ํ๊ฒ ์ปฌ๋ผ ์์ด ๋ก๋ โ ์๋ ์ถ์ฒ
load_result = await load_dataset('mystery_data.csv')
# ์ถ๋ ฅ:
# - ๊ฐ์ง๋ ๋ฌธ์ ์ ํ: classification
# - ์ถ์ฒ ํ๊ฒ: 'survived' (๋ถ๋ฅ, ์ ํฉ๋ 85์ )
# - ๋์ ํ๊ฒ: 'age' (ํ๊ท, ์ ํฉ๋ 70์ )
# ์ถ์ฒ ํ๊ฒ์ผ๋ก AutoML ์คํ
await auto_ml_pipeline('dataset_123', target_column='survived')
๐งช ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ ํ์ฉ
# ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ ํฌํจ AutoML
automl_result = await auto_ml_pipeline(
dataset_id='dataset_123',
target_column='target',
include_advanced=True # XGBoost, LightGBM, CatBoost, Gaussian Process
)
# ๊ฒฐ๊ณผ ์์:
# 1์: CatBoost (์ ํ๋: 94.2%)
# 2์: XGBoost (์ ํ๋: 93.8%)
# 3์: LightGBM (์ ํ๋: 93.5%)
๐ ํด๋ฌ์คํฐ๋ง ์๋ ์ต์ ํ
# ๋น์ง๋ ํ์ต - ์๋ ํด๋ฌ์คํฐ ์ ๊ฒฐ์
await auto_ml_pipeline(
dataset_id='dataset_no_target',
target_column=None
)
# โ ์ค๋ฃจ์ฃ ๋ถ์์ผ๋ก ์ต์ k=5 ์๋ ๊ฒฐ์
# โ HDBSCAN, Spectral Clustering ๋ฑ ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
๐ ์ ์์ ์ํ๋ง ์ ๋ต
ํ์ผ ํฌ๊ธฐ | ์ํ๋ง ๋ฐฉ๋ฒ | ๋ชฉํ ์ํ ํฌ๊ธฐ | ๋ฉ๋ชจ๋ฆฌ ์ ์ฝ |
---|---|---|---|
< 100MB | ์ํ๋ง ์ํจ | ์ ์ฒด ๋ฐ์ดํฐ | 0% |
100-500MB | ์ธตํ/๋ฌด์์ | 50,000 ํ | ~70% |
500MB-1GB | ์ธตํ/์ฒด๊ณ | 30,000 ํ | ~80% |
1-2GB | ์ฒด๊ณ ํ์ง | 20,000 ํ | ~85% |
> 2GB | ์ฒด๊ณ ํ์ง | 15,000 ํ | ~90% |
์ํ๋ง ํ์ง ๋ณด์ฅ
- ํต๊ณ์ ์ ์ฌ์ฑ: ํ๊ท ๊ฐ ์ฐจ์ด < 5%
- ๋ถํฌ ๋ณด์กด: ํ๊ฒ ๋ณ์ ๋ถํฌ ์ฐจ์ด < 2%
- ํ์ง ๋ฑ๊ธ: Excellent / Good / Fair ์๋ ํ๊ฐ
- ์ ์ฒด ๊ฒ์ฆ: ์์ฐ ๋ฐฐํฌ ์ ์ ์ฒด ๋ฐ์ดํฐ ๊ฒ์ฆ ๊ถ์ฅ
๐๏ธ ํ๋ก์ ํธ ๊ตฌ์กฐ
mcp-data-science/
โโโ mcp_data_science.py # ๋ฉ์ธ ์๋ฒ ์ฝ๋ (๋จ์ผ ํ์ผ)
โโโ pyproject.toml # ํ๋ก์ ํธ ์ค์ ๋ฐ ์์กด์ฑ
โโโ README.md # ์ด ๋ฌธ์
โโโ .env # ํ๊ฒฝ ๋ณ์ (์ ํ์ )
โ โโโ OPENAI_API_KEY=... # LLM ํฅ์ ๊ธฐ๋ฅ์ฉ
โโโ sandbox/ # ์์
๋๋ ํ ๋ฆฌ (์๋ ์์ฑ)
โโโ datasets/ # ์
๋ก๋/๋ก๋๋ ๋ฐ์ดํฐ์
โโโ plots/ # ์์ฑ๋ ์๊ฐํ (PNG, HTML)
โโโ models/ # ํ์ต๋ ๋ชจ๋ธ (PKL)
โโโ reports/ # ๋ถ์ ๋ณด๊ณ ์ (JSON, MD)
โโโ logs/ # ์์
๋ก๊ทธ (JSON)
โโโ generated_code/ # ์์ฑ๋ Python ์ฝ๋
๐ง ํ๊ฒฝ ์ค์
ํ๊ฒฝ ๋ณ์ (.env ํ์ผ)
# OpenAI API ํค (์ ํ์ - ๋ณด๊ณ ์ ํฅ์์ฉ)
OPENAI_API_KEY=sk-...
# ์๋ฒ ์ค์ (๊ธฐ๋ณธ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ)
# MCP_SERVER_PORT=8007
# MCP_SANDBOX_DIR=./sandbox
ํจํค์ง ๊ทธ๋ฃน๋ณ ์ค์น
# ๊ธฐ๋ณธ ์ค์น (ํ์ ํจํค์ง๋ง)
uv pip install -e .
# ๊ธฐ๋ฅ๋ณ ์ค์น
uv pip install -e ".[ml]" # ๋จธ์ ๋ฌ๋ ๋ถ์คํ
(XGBoost, LightGBM, CatBoost)
uv pip install -e ".[dl]" # ๋ฅ๋ฌ๋ (TensorFlow, AutoKeras, Keras-Tuner)
uv pip install -e ".[viz]" # ๊ณ ๊ธ ์๊ฐํ (Plotly)
uv pip install -e ".[interpret]" # ๋ชจ๋ธ ํด์ (SHAP)
uv pip install -e ".[advanced]" # ๊ณ ๊ธ ๋ถ์ (UMAP, HDBSCAN, Optuna)
uv pip install -e ".[stats]" # ํต๊ณ ๋ถ์ (statsmodels)
uv pip install -e ".[image]" # ์ด๋ฏธ์ง ์ฒ๋ฆฌ (Pillow)
uv pip install -e ".[llm]" # LLM ํตํฉ (OpenAI)
# ์กฐํฉ ์ค์น
uv pip install -e ".[ml,viz,interpret]" # ์์ฃผ ์ฌ์ฉํ๋ ์กฐํฉ
uv pip install -e ".[all]" # ๋ชจ๋ ๊ธฐ๋ฅ
๐ก๏ธ ๋ณด์ ๋ฐ ์ฑ๋ฅ
๐ ๋ฐ์ดํฐ ๋ณด์
- ๋ก์ปฌ ์ฒ๋ฆฌ: ๋ชจ๋ ๋ฐ์ดํฐ๋ ๋ก์ปฌ์์๋ง ์ฒ๋ฆฌ
- ์ํ๋ง ์ ๋ณด: LLM์๋ ํต๊ณ ์์ฝ๋ง ์ ์ก, ์๋ณธ ๋ฐ์ดํฐ ๋น์ ์ก
- ํ์ผ ๊ฒฉ๋ฆฌ: ์๋๋ฐ์ค ๋๋ ํ ๋ฆฌ๋ก ์์ ํ ํ์ผ ๊ด๋ฆฌ
- ๋ก๊ทธ ์ถ์ : ๋ชจ๋ ์์ ์ ์์ธํ ๋ก๊ทธ ๊ธฐ๋ก
โก ์ฑ๋ฅ ์ต์ ํ
- ์ ์์ ์ํ๋ง: ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ง๋ฅ์ ํฌ๊ธฐ ์กฐ์
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ: ์ฒญํฌ ๋จ์ ์ฒ๋ฆฌ๋ก ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์ต์ํ
- ์กฐ๊ธฐ ์ข ๋ฃ: ์ฑ๋ฅ์ด ์๋ ดํ๋ฉด ์๋์ผ๋ก ํ์ต ์ค๋จ
- ์บ์ฑ: ์ค๊ฐ ๊ฒฐ๊ณผ ์บ์ฑ์ผ๋ก ๋ฐ๋ณต ์์ ์ต์ ํ
๐ ์ฑ๋ฅ ๋ฒค์น๋งํฌ
๋ฐ์ดํฐ ํฌ๊ธฐ | ํ ์ | ์ฒ๋ฆฌ ์๊ฐ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ | ์ํ๋ง ์ ์ฉ |
---|---|---|---|---|
์ํ | < 10K | < 30์ด | < 500MB | โ |
์คํ | 10K-100K | 1-5๋ถ | 500MB-2GB | โ |
๋ํ | 100K-1M | 2-15๋ถ | 1-4GB | โ |
์ด๋ํ | > 1M | 5-30๋ถ | 2-8GB | โ |
๐จ ํธ๋ฌ๋ธ์ํ
์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ค
1. ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ค๋ฅ
# ํด๊ฒฐ: ๋ ์์ ์ํ ํฌ๊ธฐ ์ฌ์ฉ
# 100MB ์๊ณ๊ฐ์ 50MB๋ก ๋ฎ์ถค
import os
os.environ['DATA_SIZE_THRESHOLD_MB'] = '50'
2. TensorFlow/AutoKeras ์ค์น ๋ฌธ์
# Apple Silicon Mac
pip install tensorflow-macos tensorflow-metal
# CUDA GPU ์ง์
pip install tensorflow[and-cuda]
# ๋๋ CPU ๋ฒ์ ๋ง
pip install tensorflow-cpu
3. ํจํค์ง ๋ฒ์ ์ถฉ๋
# ๊ฐ์ํ๊ฒฝ ์ฌ์์ฑ
python -m venv venv --clear
source venv/bin/activate # ๋๋ Windows: venv\Scripts\activate
pip install --upgrade pip
# ํจํค์ง ์ฌ์ค์น...
4. ํ์ผ ์ ๋ก๋ ์คํจ
# ํด๊ฒฐ: ํ์ผ ๊ฒฝ๋ก ํ์ธ ๋ฐ ๊ถํ ์ฒดํฌ
import os
print(f"ํ์ผ ์กด์ฌ: {os.path.exists('/path/to/file.csv')}")
print(f"์ฝ๊ธฐ ๊ถํ: {os.access('/path/to/file.csv', os.R_OK)}")
5. ์๋ฒ ์์ ์คํจ
# ํฌํธ ์ถฉ๋ ํ์ธ
netstat -tlnp | grep 8007
# ๋ค๋ฅธ ํฌํธ ์ฌ์ฉ
python mcp_data_science.py --port 8008
๋ก๊ทธ ํ์ธ
# ์์
๋ก๊ทธ ํ์ธ
tail -f sandbox/logs/operation_*.json
# ์๋ฒ ๋ก๊ทธ ํ์ธ (์ฝ์ ์ถ๋ ฅ)
โ๏ธ MCP ์๋ฒ ์ค์
MCP ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ค์ ํ์ผ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
์ฌ์ฉํ๊ณ ์ ํ๋ ํ๊ฒฝ์ MCP ์ค์ ํ์ผ์ ์ด์ด ์๋ ๋ด์ฉ์ ์ถ๊ฐํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ค์ ํ์ผ ๋ด์ฉ
{
"mcpServers": {
"data-science": {
"transport": "sse",
"url": "http://localhost:8007/sse"
}
}
}
ํฌํธ ์ค์
๊ธฐ๋ณธ ํฌํธ 8007์ด ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
# ํฌํธ ์ฌ์ฉ ํ์ธ (Linux/Mac)
lsof -i :8007
# ํฌํธ ์ฌ์ฉ ํ์ธ (Windows)
netstat -an | findstr :8007
# ๋ค๋ฅธ ํฌํธ๋ก ์๋ฒ ์คํ
python mcp_data_science.py --port 8008
์ค์ ํ์ผ์์๋ ํด๋น ํฌํธ๋ก ๋ณ๊ฒฝ:
{
"mcpServers": {
"data-science": {
"transport": "sse",
"url": "http://localhost:8008/sse"
}
}
}
๐ฏ MCP ํธ์ถ ์์
๋ค์์ Cursor์์ ๋ฐ์ดํฐ ์ฌ์ด์ธ์ค MCP ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ์ค์ ์์ ์ ๋๋ค.
๐ฅ ๐ฅ
๐ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ๋ถ์ ์ํฌํ๋ก์ฐ
์ฌ์ฉ์: "CSV ํ์ผ์ ์
๋ก๋ํ๊ณ ๋ฐ์ดํฐ ๋ถ์์ ํด์ฃผ์ธ์."
Cursor: upload_local_file() โ load_dataset() โ perform_eda() โ auto_ml_pipeline()
๐ ๋จ๊ณ๋ณ MCP ๋๊ตฌ ํธ์ถ
1. ํ๊ฒฝ ํ์ธ
์ฌ์ฉ์: "๋ฐ์ดํฐ ์ฌ์ด์ธ์ค ์๋ฒ๊ฐ ์ ์ ์๋ํ๋์ง ํ์ธํด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ: health_check()
2. ํ์ผ ์ ๋ก๋
์ฌ์ฉ์: "๋ก์ปฌ์ ์๋ sales_data.csv ํ์ผ์ ๋ถ์ํด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
1. upload_local_file('/path/to/sales_data.csv')
2. load_dataset('sales_data_20241207_143052.csv')
3. ํ์์ ๋ฐ์ดํฐ ๋ถ์
์ฌ์ฉ์: "๋ฐ์ดํฐ์ ๊ธฐ๋ณธ ํน์ฑ๊ณผ ๋ถํฌ๋ฅผ ํ์ธํด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
1. perform_eda(dataset_id='dataset_123')
2. create_visualization(dataset_id='dataset_123', plot_type='pairplot')
4. ๋จธ์ ๋ฌ๋ ๋ชจ๋ธ๋ง
์ฌ์ฉ์: "๋งค์ถ ์์ธก ๋ชจ๋ธ์ ๋ง๋ค์ด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
1. auto_ml_pipeline(
dataset_id='dataset_123',
target_column='sales',
include_advanced=True
)
5. ๊ฒฐ๊ณผ ๋ณด๊ณ ์ ์์ฑ
์ฌ์ฉ์: "์ ์ฒด ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฆฌํ ๋ณด๊ณ ์๋ฅผ ๋ง๋ค์ด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
1. generate_comprehensive_report()
2. list_generated_code()
๐ก ๊ณ ๊ธ ์ฌ์ฉ ์๋๋ฆฌ์ค
๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
์ฌ์ฉ์: "500MB ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํด์ฃผ์ธ์. ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํด์ฃผ์ธ์."
Cursor์ ์๋ ์ฒ๋ฆฌ:
1. upload_local_file() โ ์๋ ์ํ๋ง ๊ฐ์ง
2. load_dataset() โ ์ธตํํ์ง์ผ๋ก 30,000ํ ์ํ ์์ฑ
3. perform_eda() โ ์ํ ๋ฐ์ดํฐ๋ก EDA ์ํ
4. auto_ml_pipeline() โ ๊ณ ๊ธ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ชจ๋ธ๋ง
๋ฌธ์ ์ ํ ์๋ ๊ฐ์ง
์ฌ์ฉ์: "์ด ๋ฐ์ดํฐ์
์ผ๋ก ๋ฌด์์ ๋ถ์ํ ์ ์๋์ง ์๋ ค์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
1. load_dataset() โ ์๋ ๋ฌธ์ ์ ํ ๊ฐ์ง
2. ๊ฒฐ๊ณผ: "๋ถ๋ฅ ๋ฌธ์ ๋ก ๊ฐ์ง, ์ถ์ฒ ํ๊ฒ: 'customer_churn'"
์ปค์คํ ์๊ฐํ
์ฌ์ฉ์: "์ฐ๋ น๋๋ณ ๊ตฌ๋งค ํจํด์ ์๊ฐํํด์ฃผ์ธ์."
Cursor๊ฐ ํธ์ถ:
create_visualization(
dataset_id='dataset_123',
plot_type='boxplot',
x_column='age_group',
y_column='purchase_amount',
title='์ฐ๋ น๋๋ณ ๊ตฌ๋งค ํจํด'
)
๐ ์ค์ ์ฌ์ฉ ํ
-
ํจ์จ์ ์ธ ์ํฌํ๋ก์ฐ
- ๋จผ์
health_check
๋ก ์๋ฒ ์ํ ํ์ธ upload_local_file
โload_dataset
โperform_eda
์์๋ก ์งํ- ํฐ ๋ฐ์ดํฐ๋ ์๋ ์ํ๋ง ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ ํ์ธ
- ๋จผ์
-
์ค๋ฅ ์ฒ๋ฆฌ
- ํ์ผ ์
๋ก๋ ์คํจ ์
get_upload_instructions
ํ์ธ - ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ ๋ ์์ ์ํ ํฌ๊ธฐ ์์ฒญ
- ๋ชจ๋ธ๋ง ์คํจ ์
get_operation_details
๋ก ์์ธ ์ ๋ณด ํ์ธ
- ํ์ผ ์
๋ก๋ ์คํจ ์
-
๊ฒฐ๊ณผ ํ์ฉ
list_generated_code
๋ก ์ฌํ ๊ฐ๋ฅํ Python ์ฝ๋ ํ์ธgenerate_comprehensive_report
๋ก ์ ๋ฌธ์ ์ธ ๋ถ์ ๋ณด๊ณ ์ ์์ฑ- ์์ฑ๋ ๋ชจ๋ธ์
sandbox/models/
์์ ํ์ธ ๊ฐ๋ฅ
๐ ๋ผ์ด์ผ์ค
MIT License - ์์ ๋กญ๊ฒ ์ฌ์ฉ, ์์ , ๋ฐฐํฌ ๊ฐ๋ฅ
๐ ๋ฒ์ ํ์คํ ๋ฆฌ
v0.3.0 (ํ์ฌ)
- ๐ฏ ์ง๋ฅํ ๋ฌธ์ ์ ํ ์๋ ๊ฐ์ง
- ๐ง ๊ณ ๊ธ ML ์๊ณ ๋ฆฌ์ฆ (XGBoost, LightGBM, CatBoost, Gaussian Process)
- ๐ ์ ์์ ์ํ๋ง (์ธตํ/์ฒด๊ณ/๋ฌด์์)
- ๐จ ๊ณ ๊ธ ์๊ฐํ (Plotly, ์ฐจ์์ถ์, ๋์๋ณด๋)
- ๐ฌ SHAP ๊ธฐ๋ฐ ๋ชจ๋ธ ํด์
- ๐ป ์์ ํ ์ฝ๋ ์๋ ์์ฑ
- ๐ ์ข ํฉ ๋งํฌ๋ค์ด ๋ณด๊ณ ์
- ๐ ํ์ผ ์ ๋ก๋ ๋ฐ ๊ด๋ฆฌ
- โก ์ฑ๋ฅ ์ต์ ํ ๋ฐ ์์ ์ฑ
์ฃผ์ ๊ฐ์ ์ฌํญ
- ์ง๋ฅํ ๋ถ์: ๋ฐ์ดํฐ ํน์ฑ ๊ธฐ๋ฐ ์๋ ๋ฌธ์ ์ ํ ๊ฐ์ง
- ํ์ง ๋ณด์ฅ: ์ํ๋ง ํ์ง ์๋ ๊ฒ์ฆ ์์คํ
- ์ฌ์ฉ์ ์นํ: ์ง๊ด์ ์ธ API์ ์์ธํ ๊ฐ์ด๋
- ์ํฐํ๋ผ์ด์ฆ: ๋์ฉ๋ ๋ฐ์ดํฐ ์์ ์ ์ฒ๋ฆฌ
- ์ฌํ์ฑ: ๋ชจ๋ ๋ถ์์ ์์ ํ ์ฝ๋ ์์ฑ
๐ก ํ: ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ํด ํ๊ฒ ์ปฌ๋ผ์ด ์๋ ์ง๋ํ์ต ๋ฌธ์ ๋ฅผ ๊ถ์ฅํ๋ฉฐ, ๋์ฉ๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์๋ ์ํ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฒํ ํ ํ ํ์์ ์ ์ฒด ๋ฐ์ดํฐ๋ก ์ฌ๊ฒ์ฆํ์ธ์.