mySUNI


NamemySUNI JSON
Version 2.0.6 PyPI version JSON
download
home_pagehttps://github.com/braincrew/cds
SummarymySUNI CDS - 데이터 과학 교육용 라이브러리
upload_time2025-09-07 23:57:48
maintainerNone
docs_urlNone
authorBAEM1N, Teddy Lee
requires_python>=3.7
licenseMIT License Copyright (c) 2024 BAEM1N, Teddy Lee Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
keywords mysuni cds data science education machine learning
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # mySUNI CDS

[![PyPI version](https://badge.fury.io/py/mySUNI.svg)](https://badge.fury.io/py/mySUNI)
[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

mySUNI CDS는 데이터 과학 교육을 위한 Python 라이브러리입니다. 데이터셋 다운로드, 워크샵 자료 관리, 프로젝트 제출 등의 기능을 제공합니다.

## 주요 기능

### 📊 데이터셋 관리
- 다양한 교육용 데이터셋 목록 조회 및 다운로드
- 자동 데이터 폴더 생성 및 관리
- 인증이 필요한 데이터셋 자동 다운로드

### 🎓 워크샵 자료
- 워크샵 목록 조회
- 실습용 및 해설용 Jupyter 노트북 다운로드
- 로컬 및 서버 환경 지원

### 📝 프로젝트 제출
- 프로젝트 파일 자동 다운로드
- 결과 제출 및 자동 채점
- 최종 프로젝트 제출 기능

### 🛠 유틸리티 도구
- 머신러닝 모델 성능 시각화
- 다양한 평가 지표 지원 (MSE, RMSE, RMSLE, MAE, Gini)
- Jupyter 노트북 변환 도구
- 데이터프레임 요약 정보 제공

### 🎯 SKADA (도메인 적응 및 미니스카다)
- 도메인 적응 알고리즘 (CORAL, MMD)
- 미니스카다 문제 제출 시스템
- 자동 채점 및 검증 기능
- XGBoost 기반 모델 평가 도구

## 설치

```bash
pip install mySUNI
```

## 사용법

### 데이터셋 사용

```python
import mySUNI as ms

# 데이터셋 목록 조회
ms.list_data()

# 특정 데이터셋 다운로드
ms.download_data('타이타닉')

# 여러 데이터셋 다운로드
ms.download_data(['타이타닉', '보스턴 주택가격'])
```

### 워크샵 자료 사용

```python
# 워크샵 목록 조회
ms.list_workshop()

# 워크샵 실습 파일 다운로드
ms.download_workshop('mySUNI-WorkShop-01-StepWalk')

# 워크샵 해설 파일 다운로드
ms.download_workshop('mySUNI-WorkShop-01-StepWalk', sol=True)
```

### 프로젝트 제출

```python
# 프로젝트 정보 설정
class_info = {
    'edu_name': '데이터분석과정',
    'edu_rnd': '1',
    'edu_class': 'A'
}

# 프로젝트 다운로드
ms.download_project('프로젝트명', class_info, 'your-email@example.com')

# 결과 제출
ms.submit(submission_dataframe)

# 최종 프로젝트 제출
ms.end_project('이름', 'notebook.ipynb')
```

### 모델 성능 시각화

```python
from mySUNI.utils import plot_error, set_plot_error

# 평가 지표 설정
set_plot_error('rmse')

# 모델 성능 시각화
plot_error('Linear Regression', y_true, y_pred)
plot_error('Random Forest', y_true, y_pred2)

# 전체 모델 비교
ms.plot_all()
```

### 데이터 요약

```python
from mySUNI.utils import summary

# 데이터프레임 요약 정보
summary_info = summary(df)
print(summary_info)
```

### SKADA 도메인 적응

```python
from mysuni import skada

# 샘플 도메인 데이터 생성
X_source, X_target, y_source, y_target = skada.load_sample_domain_data()

# CORAL 도메인 적응
coral_adapter = skada.CORAL()
coral_adapter.fit(X_source, X_target)

# 데이터 변환
X_source_adapted = coral_adapter.transform(X_source, domain='source')
X_target_adapted = coral_adapter.transform(X_target, domain='target')

# 성능 평가
score = skada.domain_adaptation_score(X_source, X_target, y_source, y_target, coral_adapter)
print(f"정확도: {score['accuracy']:.4f}")

# 여러 방법 비교
results = skada.compare_domain_adapters(X_source, X_target, y_source, y_target)
print(results)
```

### 미니스카다 제출 시스템

```python
from mysuni.skada import SKADA

# SKADA 인스턴스 생성 (싱글톤 패턴)
skada = SKADA.instance()

# 미니스카다 1번 문제 답안 제출
skada.Q1_answer(X_test)
skada.Q2_1_answer(X_test, mu)
skada.Q2_2_answer(drop_cols)
skada.Q2_3_answer(function, result)
skada.Q3_1_answer(sm_X_train, sm_y_train, ada_X_train, ada_y_train)
skada.Q3_2_answer(best_hyper_parameters)

# 미니스카다 2번 문제 답안 제출
skada.Q4_1_answer(processed_data)
skada.Q4_2_answer(cleaned_data)
skada.Q4_3_answer(normalized_data, numerical_features)
skada.Q5_1_answer(feature_importance_list)
skada.Q5_2_answer(f_count, selected_features)
skada.Q6_1_answer(accuracy_1, accuracy_2)
skada.Q6_2_answer(train_indices, test_indices)

# XGBoost 모델 평가
macro_f1 = skada.train_and_evaluate_xgb_model(X_train, y_train, X_test, y_test)

# 혼동 행렬 시각화
skada.disp_confusion_matrix(X_train, y_train, X_test, y_test)
```

## API 참조

### 주요 함수

- `list_data()`: 사용 가능한 데이터셋 목록 조회
- `download_data(dataset_name)`: 데이터셋 다운로드
- `list_workshop()`: 워크샵 목록 조회
- `download_workshop(workshop_name, sol=False, local=False)`: 워크샵 자료 다운로드
- `download_project(project_name, class_info, email)`: 프로젝트 다운로드
- `submit(submission)`: 프로젝트 결과 제출
- `end_project(name, ipynb_file_path)`: 최종 프로젝트 제출

### 유틸리티 함수

- `plot_error(name, actual, prediction)`: 모델 성능 시각화
- `set_plot_error(error_type)`: 평가 지표 설정
- `summary(dataframe)`: 데이터프레임 요약 정보
- `convert_ipynb(from_file, to_file)`: 노트북 파일 변환

## 요구사항

- Python 3.7+
- pandas
- matplotlib
- seaborn
- scikit-learn
- jupyter
- requests
- tqdm
- ipywidgets
- xgboost

## 라이선스

이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 [LICENSE](LICENSE) 파일을 참조하세요.

## 기여하기

버그 리포트, 기능 요청, 풀 리퀘스트는 언제나 환영합니다!

1. 이 저장소를 포크하세요
2. 기능 브랜치를 생성하세요 (`git checkout -b feature/AmazingFeature`)
3. 변경사항을 커밋하세요 (`git commit -m 'Add some AmazingFeature'`)
4. 브랜치에 푸시하세요 (`git push origin feature/AmazingFeature`)
5. 풀 리퀘스트를 생성하세요

## 지원

문제가 있거나 질문이 있으시면 [GitHub Issues](https://github.com/braincrew/cds/issues)에 등록해 주세요.

## 작성자

- **BAEM1N** - *초기 작업* - [GitHub](https://github.com/baem1n)
- **Teddy Lee** - *개발 및 유지보수* - [GitHub](https://github.com/teddylee777)

## 🌐 API 제출 시스템

mySUNI v2.0.3부터 `https://skada.quest/api`로 답안을 자동 제출하는 시스템을 지원합니다.

### 환경 설정

```python
import os

# 학생 ID와 세션 ID 설정
os.environ['SKADA_STUDENT_ID'] = 'your_student_id'
os.environ['SKADA_SESSION_ID'] = 'your_session_id'
```

또는 Jupyter 노트북에서:

```python
%env SKADA_STUDENT_ID=your_student_id
%env SKADA_SESSION_ID=your_session_id
```

### 자동 제출

기존 답안 제출 방식과 동일하게 사용하면 자동으로 API 제출을 시도합니다:

```python
from mySUNI.skada import SKADA

skada_instance = SKADA.instance()

# Q4_1 답안 제출 (자동으로 API 제출 시도)
skada_instance.Q4_1_answer(merged_df)

# 제출 성공시: ✅ Q4_1 답안 제출 성공! 📊 점수: 85
# 제출 실패시: 📁 로컬 백업 저장 완료. 최종 제출을 위해선 런박스 상단의 제출버튼을 눌러주세요.
```

### 직접 API 호출

```python
from mySUNI.skada import submit_to_api, SubmissionError

try:
    result = submit_to_api(
        problem_id="Q4_1",
        answer_data=your_answer,
        student_id="your_id",
        session_id="session_001"
    )
    print(f"제출 결과: {result}")
except SubmissionError as e:
    print(f"제출 실패: {e}")
```

### 지원하는 데이터 타입

- **NumPy 배열**: 자동으로 base64 인코딩하여 전송
- **Pandas DataFrame/Series**: JSON 형식으로 직렬화
- **Python 기본 타입**: int, float, str, bool, list, dict
- **함수**: pickle로 직렬화하여 전송

### 백업 시스템

API 제출이 실패할 경우 자동으로 로컬 파일에 백업 저장됩니다:

- 네트워크 오류
- 서버 오류  
- 타임아웃 (30초)

백업 파일은 `submit/` 디렉토리에 저장되며, 런박스 상단의 제출 버튼으로 수동 제출할 수 있습니다.

## 변경 이력

### v2.0.3
- **🌐 API 제출 시스템 추가**: `https://skada.quest/api`로 자동 제출
- **📦 SKADA 모듈 통합**: 미니스카다 제출 시스템 통합
- **🔧 네트워크 오류 처리**: CDS 모듈 안정성 개선
- **📁 백업 시스템**: API 제출 실패시 로컬 백업 자동 저장

### v2.0.2
- 안정성 개선 및 버그 수정
- 의존성 업데이트

### v2.0.1
- 새로운 데이터셋 추가
- 워크샵 자료 업데이트

### v2.0.0
- 메이저 리팩토링
- 새로운 API 구조
- 성능 최적화

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/braincrew/cds",
    "name": "mySUNI",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "BAEM1N <baemin.dev@gmail.com>",
    "keywords": "mySUNI, CDS, data science, education, machine learning",
    "author": "BAEM1N, Teddy Lee",
    "author_email": "BAEM1N <baemin.dev@gmail.com>, Teddy Lee <teddylee777@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/6b/d2/5a7ea00c1f435add1fb546fee43c589034e33df4d983c3667adb0326e931/mysuni-2.0.6.tar.gz",
    "platform": null,
    "description": "# mySUNI CDS\n\n[![PyPI version](https://badge.fury.io/py/mySUNI.svg)](https://badge.fury.io/py/mySUNI)\n[![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nmySUNI CDS\ub294 \ub370\uc774\ud130 \uacfc\ud559 \uad50\uc721\uc744 \uc704\ud55c Python \ub77c\uc774\ube0c\ub7ec\ub9ac\uc785\ub2c8\ub2e4. \ub370\uc774\ud130\uc14b \ub2e4\uc6b4\ub85c\ub4dc, \uc6cc\ud06c\uc0f5 \uc790\ub8cc \uad00\ub9ac, \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c \ub4f1\uc758 \uae30\ub2a5\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.\n\n## \uc8fc\uc694 \uae30\ub2a5\n\n### \ud83d\udcca \ub370\uc774\ud130\uc14b \uad00\ub9ac\n- \ub2e4\uc591\ud55c \uad50\uc721\uc6a9 \ub370\uc774\ud130\uc14b \ubaa9\ub85d \uc870\ud68c \ubc0f \ub2e4\uc6b4\ub85c\ub4dc\n- \uc790\ub3d9 \ub370\uc774\ud130 \ud3f4\ub354 \uc0dd\uc131 \ubc0f \uad00\ub9ac\n- \uc778\uc99d\uc774 \ud544\uc694\ud55c \ub370\uc774\ud130\uc14b \uc790\ub3d9 \ub2e4\uc6b4\ub85c\ub4dc\n\n### \ud83c\udf93 \uc6cc\ud06c\uc0f5 \uc790\ub8cc\n- \uc6cc\ud06c\uc0f5 \ubaa9\ub85d \uc870\ud68c\n- \uc2e4\uc2b5\uc6a9 \ubc0f \ud574\uc124\uc6a9 Jupyter \ub178\ud2b8\ubd81 \ub2e4\uc6b4\ub85c\ub4dc\n- \ub85c\uceec \ubc0f \uc11c\ubc84 \ud658\uacbd \uc9c0\uc6d0\n\n### \ud83d\udcdd \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c\n- \ud504\ub85c\uc81d\ud2b8 \ud30c\uc77c \uc790\ub3d9 \ub2e4\uc6b4\ub85c\ub4dc\n- \uacb0\uacfc \uc81c\ucd9c \ubc0f \uc790\ub3d9 \ucc44\uc810\n- \ucd5c\uc885 \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c \uae30\ub2a5\n\n### \ud83d\udee0 \uc720\ud2f8\ub9ac\ud2f0 \ub3c4\uad6c\n- \uba38\uc2e0\ub7ec\ub2dd \ubaa8\ub378 \uc131\ub2a5 \uc2dc\uac01\ud654\n- \ub2e4\uc591\ud55c \ud3c9\uac00 \uc9c0\ud45c \uc9c0\uc6d0 (MSE, RMSE, RMSLE, MAE, Gini)\n- Jupyter \ub178\ud2b8\ubd81 \ubcc0\ud658 \ub3c4\uad6c\n- \ub370\uc774\ud130\ud504\ub808\uc784 \uc694\uc57d \uc815\ubcf4 \uc81c\uacf5\n\n### \ud83c\udfaf SKADA (\ub3c4\uba54\uc778 \uc801\uc751 \ubc0f \ubbf8\ub2c8\uc2a4\uce74\ub2e4)\n- \ub3c4\uba54\uc778 \uc801\uc751 \uc54c\uace0\ub9ac\uc998 (CORAL, MMD)\n- \ubbf8\ub2c8\uc2a4\uce74\ub2e4 \ubb38\uc81c \uc81c\ucd9c \uc2dc\uc2a4\ud15c\n- \uc790\ub3d9 \ucc44\uc810 \ubc0f \uac80\uc99d \uae30\ub2a5\n- XGBoost \uae30\ubc18 \ubaa8\ub378 \ud3c9\uac00 \ub3c4\uad6c\n\n## \uc124\uce58\n\n```bash\npip install mySUNI\n```\n\n## \uc0ac\uc6a9\ubc95\n\n### \ub370\uc774\ud130\uc14b \uc0ac\uc6a9\n\n```python\nimport mySUNI as ms\n\n# \ub370\uc774\ud130\uc14b \ubaa9\ub85d \uc870\ud68c\nms.list_data()\n\n# \ud2b9\uc815 \ub370\uc774\ud130\uc14b \ub2e4\uc6b4\ub85c\ub4dc\nms.download_data('\ud0c0\uc774\ud0c0\ub2c9')\n\n# \uc5ec\ub7ec \ub370\uc774\ud130\uc14b \ub2e4\uc6b4\ub85c\ub4dc\nms.download_data(['\ud0c0\uc774\ud0c0\ub2c9', '\ubcf4\uc2a4\ud134 \uc8fc\ud0dd\uac00\uaca9'])\n```\n\n### \uc6cc\ud06c\uc0f5 \uc790\ub8cc \uc0ac\uc6a9\n\n```python\n# \uc6cc\ud06c\uc0f5 \ubaa9\ub85d \uc870\ud68c\nms.list_workshop()\n\n# \uc6cc\ud06c\uc0f5 \uc2e4\uc2b5 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc\nms.download_workshop('mySUNI-WorkShop-01-StepWalk')\n\n# \uc6cc\ud06c\uc0f5 \ud574\uc124 \ud30c\uc77c \ub2e4\uc6b4\ub85c\ub4dc\nms.download_workshop('mySUNI-WorkShop-01-StepWalk', sol=True)\n```\n\n### \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c\n\n```python\n# \ud504\ub85c\uc81d\ud2b8 \uc815\ubcf4 \uc124\uc815\nclass_info = {\n    'edu_name': '\ub370\uc774\ud130\ubd84\uc11d\uacfc\uc815',\n    'edu_rnd': '1',\n    'edu_class': 'A'\n}\n\n# \ud504\ub85c\uc81d\ud2b8 \ub2e4\uc6b4\ub85c\ub4dc\nms.download_project('\ud504\ub85c\uc81d\ud2b8\uba85', class_info, 'your-email@example.com')\n\n# \uacb0\uacfc \uc81c\ucd9c\nms.submit(submission_dataframe)\n\n# \ucd5c\uc885 \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c\nms.end_project('\uc774\ub984', 'notebook.ipynb')\n```\n\n### \ubaa8\ub378 \uc131\ub2a5 \uc2dc\uac01\ud654\n\n```python\nfrom mySUNI.utils import plot_error, set_plot_error\n\n# \ud3c9\uac00 \uc9c0\ud45c \uc124\uc815\nset_plot_error('rmse')\n\n# \ubaa8\ub378 \uc131\ub2a5 \uc2dc\uac01\ud654\nplot_error('Linear Regression', y_true, y_pred)\nplot_error('Random Forest', y_true, y_pred2)\n\n# \uc804\uccb4 \ubaa8\ub378 \ube44\uad50\nms.plot_all()\n```\n\n### \ub370\uc774\ud130 \uc694\uc57d\n\n```python\nfrom mySUNI.utils import summary\n\n# \ub370\uc774\ud130\ud504\ub808\uc784 \uc694\uc57d \uc815\ubcf4\nsummary_info = summary(df)\nprint(summary_info)\n```\n\n### SKADA \ub3c4\uba54\uc778 \uc801\uc751\n\n```python\nfrom mysuni import skada\n\n# \uc0d8\ud50c \ub3c4\uba54\uc778 \ub370\uc774\ud130 \uc0dd\uc131\nX_source, X_target, y_source, y_target = skada.load_sample_domain_data()\n\n# CORAL \ub3c4\uba54\uc778 \uc801\uc751\ncoral_adapter = skada.CORAL()\ncoral_adapter.fit(X_source, X_target)\n\n# \ub370\uc774\ud130 \ubcc0\ud658\nX_source_adapted = coral_adapter.transform(X_source, domain='source')\nX_target_adapted = coral_adapter.transform(X_target, domain='target')\n\n# \uc131\ub2a5 \ud3c9\uac00\nscore = skada.domain_adaptation_score(X_source, X_target, y_source, y_target, coral_adapter)\nprint(f\"\uc815\ud655\ub3c4: {score['accuracy']:.4f}\")\n\n# \uc5ec\ub7ec \ubc29\ubc95 \ube44\uad50\nresults = skada.compare_domain_adapters(X_source, X_target, y_source, y_target)\nprint(results)\n```\n\n### \ubbf8\ub2c8\uc2a4\uce74\ub2e4 \uc81c\ucd9c \uc2dc\uc2a4\ud15c\n\n```python\nfrom mysuni.skada import SKADA\n\n# SKADA \uc778\uc2a4\ud134\uc2a4 \uc0dd\uc131 (\uc2f1\uae00\ud1a4 \ud328\ud134)\nskada = SKADA.instance()\n\n# \ubbf8\ub2c8\uc2a4\uce74\ub2e4 1\ubc88 \ubb38\uc81c \ub2f5\uc548 \uc81c\ucd9c\nskada.Q1_answer(X_test)\nskada.Q2_1_answer(X_test, mu)\nskada.Q2_2_answer(drop_cols)\nskada.Q2_3_answer(function, result)\nskada.Q3_1_answer(sm_X_train, sm_y_train, ada_X_train, ada_y_train)\nskada.Q3_2_answer(best_hyper_parameters)\n\n# \ubbf8\ub2c8\uc2a4\uce74\ub2e4 2\ubc88 \ubb38\uc81c \ub2f5\uc548 \uc81c\ucd9c\nskada.Q4_1_answer(processed_data)\nskada.Q4_2_answer(cleaned_data)\nskada.Q4_3_answer(normalized_data, numerical_features)\nskada.Q5_1_answer(feature_importance_list)\nskada.Q5_2_answer(f_count, selected_features)\nskada.Q6_1_answer(accuracy_1, accuracy_2)\nskada.Q6_2_answer(train_indices, test_indices)\n\n# XGBoost \ubaa8\ub378 \ud3c9\uac00\nmacro_f1 = skada.train_and_evaluate_xgb_model(X_train, y_train, X_test, y_test)\n\n# \ud63c\ub3d9 \ud589\ub82c \uc2dc\uac01\ud654\nskada.disp_confusion_matrix(X_train, y_train, X_test, y_test)\n```\n\n## API \ucc38\uc870\n\n### \uc8fc\uc694 \ud568\uc218\n\n- `list_data()`: \uc0ac\uc6a9 \uac00\ub2a5\ud55c \ub370\uc774\ud130\uc14b \ubaa9\ub85d \uc870\ud68c\n- `download_data(dataset_name)`: \ub370\uc774\ud130\uc14b \ub2e4\uc6b4\ub85c\ub4dc\n- `list_workshop()`: \uc6cc\ud06c\uc0f5 \ubaa9\ub85d \uc870\ud68c\n- `download_workshop(workshop_name, sol=False, local=False)`: \uc6cc\ud06c\uc0f5 \uc790\ub8cc \ub2e4\uc6b4\ub85c\ub4dc\n- `download_project(project_name, class_info, email)`: \ud504\ub85c\uc81d\ud2b8 \ub2e4\uc6b4\ub85c\ub4dc\n- `submit(submission)`: \ud504\ub85c\uc81d\ud2b8 \uacb0\uacfc \uc81c\ucd9c\n- `end_project(name, ipynb_file_path)`: \ucd5c\uc885 \ud504\ub85c\uc81d\ud2b8 \uc81c\ucd9c\n\n### \uc720\ud2f8\ub9ac\ud2f0 \ud568\uc218\n\n- `plot_error(name, actual, prediction)`: \ubaa8\ub378 \uc131\ub2a5 \uc2dc\uac01\ud654\n- `set_plot_error(error_type)`: \ud3c9\uac00 \uc9c0\ud45c \uc124\uc815\n- `summary(dataframe)`: \ub370\uc774\ud130\ud504\ub808\uc784 \uc694\uc57d \uc815\ubcf4\n- `convert_ipynb(from_file, to_file)`: \ub178\ud2b8\ubd81 \ud30c\uc77c \ubcc0\ud658\n\n## \uc694\uad6c\uc0ac\ud56d\n\n- Python 3.7+\n- pandas\n- matplotlib\n- seaborn\n- scikit-learn\n- jupyter\n- requests\n- tqdm\n- ipywidgets\n- xgboost\n\n## \ub77c\uc774\uc120\uc2a4\n\n\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 MIT \ub77c\uc774\uc120\uc2a4 \ud558\uc5d0 \ubc30\ud3ec\ub429\ub2c8\ub2e4. \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 [LICENSE](LICENSE) \ud30c\uc77c\uc744 \ucc38\uc870\ud558\uc138\uc694.\n\n## \uae30\uc5ec\ud558\uae30\n\n\ubc84\uadf8 \ub9ac\ud3ec\ud2b8, \uae30\ub2a5 \uc694\uccad, \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub294 \uc5b8\uc81c\ub098 \ud658\uc601\ud569\ub2c8\ub2e4!\n\n1. \uc774 \uc800\uc7a5\uc18c\ub97c \ud3ec\ud06c\ud558\uc138\uc694\n2. \uae30\ub2a5 \ube0c\ub79c\uce58\ub97c \uc0dd\uc131\ud558\uc138\uc694 (`git checkout -b feature/AmazingFeature`)\n3. \ubcc0\uacbd\uc0ac\ud56d\uc744 \ucee4\ubc0b\ud558\uc138\uc694 (`git commit -m 'Add some AmazingFeature'`)\n4. \ube0c\ub79c\uce58\uc5d0 \ud478\uc2dc\ud558\uc138\uc694 (`git push origin feature/AmazingFeature`)\n5. \ud480 \ub9ac\ud018\uc2a4\ud2b8\ub97c \uc0dd\uc131\ud558\uc138\uc694\n\n## \uc9c0\uc6d0\n\n\ubb38\uc81c\uac00 \uc788\uac70\ub098 \uc9c8\ubb38\uc774 \uc788\uc73c\uc2dc\uba74 [GitHub Issues](https://github.com/braincrew/cds/issues)\uc5d0 \ub4f1\ub85d\ud574 \uc8fc\uc138\uc694.\n\n## \uc791\uc131\uc790\n\n- **BAEM1N** - *\ucd08\uae30 \uc791\uc5c5* - [GitHub](https://github.com/baem1n)\n- **Teddy Lee** - *\uac1c\ubc1c \ubc0f \uc720\uc9c0\ubcf4\uc218* - [GitHub](https://github.com/teddylee777)\n\n## \ud83c\udf10 API \uc81c\ucd9c \uc2dc\uc2a4\ud15c\n\nmySUNI v2.0.3\ubd80\ud130 `https://skada.quest/api`\ub85c \ub2f5\uc548\uc744 \uc790\ub3d9 \uc81c\ucd9c\ud558\ub294 \uc2dc\uc2a4\ud15c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.\n\n### \ud658\uacbd \uc124\uc815\n\n```python\nimport os\n\n# \ud559\uc0dd ID\uc640 \uc138\uc158 ID \uc124\uc815\nos.environ['SKADA_STUDENT_ID'] = 'your_student_id'\nos.environ['SKADA_SESSION_ID'] = 'your_session_id'\n```\n\n\ub610\ub294 Jupyter \ub178\ud2b8\ubd81\uc5d0\uc11c:\n\n```python\n%env SKADA_STUDENT_ID=your_student_id\n%env SKADA_SESSION_ID=your_session_id\n```\n\n### \uc790\ub3d9 \uc81c\ucd9c\n\n\uae30\uc874 \ub2f5\uc548 \uc81c\ucd9c \ubc29\uc2dd\uacfc \ub3d9\uc77c\ud558\uac8c \uc0ac\uc6a9\ud558\uba74 \uc790\ub3d9\uc73c\ub85c API \uc81c\ucd9c\uc744 \uc2dc\ub3c4\ud569\ub2c8\ub2e4:\n\n```python\nfrom mySUNI.skada import SKADA\n\nskada_instance = SKADA.instance()\n\n# Q4_1 \ub2f5\uc548 \uc81c\ucd9c (\uc790\ub3d9\uc73c\ub85c API \uc81c\ucd9c \uc2dc\ub3c4)\nskada_instance.Q4_1_answer(merged_df)\n\n# \uc81c\ucd9c \uc131\uacf5\uc2dc: \u2705 Q4_1 \ub2f5\uc548 \uc81c\ucd9c \uc131\uacf5! \ud83d\udcca \uc810\uc218: 85\n# \uc81c\ucd9c \uc2e4\ud328\uc2dc: \ud83d\udcc1 \ub85c\uceec \ubc31\uc5c5 \uc800\uc7a5 \uc644\ub8cc. \ucd5c\uc885 \uc81c\ucd9c\uc744 \uc704\ud574\uc120 \ub7f0\ubc15\uc2a4 \uc0c1\ub2e8\uc758 \uc81c\ucd9c\ubc84\ud2bc\uc744 \ub20c\ub7ec\uc8fc\uc138\uc694.\n```\n\n### \uc9c1\uc811 API \ud638\ucd9c\n\n```python\nfrom mySUNI.skada import submit_to_api, SubmissionError\n\ntry:\n    result = submit_to_api(\n        problem_id=\"Q4_1\",\n        answer_data=your_answer,\n        student_id=\"your_id\",\n        session_id=\"session_001\"\n    )\n    print(f\"\uc81c\ucd9c \uacb0\uacfc: {result}\")\nexcept SubmissionError as e:\n    print(f\"\uc81c\ucd9c \uc2e4\ud328: {e}\")\n```\n\n### \uc9c0\uc6d0\ud558\ub294 \ub370\uc774\ud130 \ud0c0\uc785\n\n- **NumPy \ubc30\uc5f4**: \uc790\ub3d9\uc73c\ub85c base64 \uc778\ucf54\ub529\ud558\uc5ec \uc804\uc1a1\n- **Pandas DataFrame/Series**: JSON \ud615\uc2dd\uc73c\ub85c \uc9c1\ub82c\ud654\n- **Python \uae30\ubcf8 \ud0c0\uc785**: int, float, str, bool, list, dict\n- **\ud568\uc218**: pickle\ub85c \uc9c1\ub82c\ud654\ud558\uc5ec \uc804\uc1a1\n\n### \ubc31\uc5c5 \uc2dc\uc2a4\ud15c\n\nAPI \uc81c\ucd9c\uc774 \uc2e4\ud328\ud560 \uacbd\uc6b0 \uc790\ub3d9\uc73c\ub85c \ub85c\uceec \ud30c\uc77c\uc5d0 \ubc31\uc5c5 \uc800\uc7a5\ub429\ub2c8\ub2e4:\n\n- \ub124\ud2b8\uc6cc\ud06c \uc624\ub958\n- \uc11c\ubc84 \uc624\ub958  \n- \ud0c0\uc784\uc544\uc6c3 (30\ucd08)\n\n\ubc31\uc5c5 \ud30c\uc77c\uc740 `submit/` \ub514\ub809\ud1a0\ub9ac\uc5d0 \uc800\uc7a5\ub418\uba70, \ub7f0\ubc15\uc2a4 \uc0c1\ub2e8\uc758 \uc81c\ucd9c \ubc84\ud2bc\uc73c\ub85c \uc218\ub3d9 \uc81c\ucd9c\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.\n\n## \ubcc0\uacbd \uc774\ub825\n\n### v2.0.3\n- **\ud83c\udf10 API \uc81c\ucd9c \uc2dc\uc2a4\ud15c \ucd94\uac00**: `https://skada.quest/api`\ub85c \uc790\ub3d9 \uc81c\ucd9c\n- **\ud83d\udce6 SKADA \ubaa8\ub4c8 \ud1b5\ud569**: \ubbf8\ub2c8\uc2a4\uce74\ub2e4 \uc81c\ucd9c \uc2dc\uc2a4\ud15c \ud1b5\ud569\n- **\ud83d\udd27 \ub124\ud2b8\uc6cc\ud06c \uc624\ub958 \ucc98\ub9ac**: CDS \ubaa8\ub4c8 \uc548\uc815\uc131 \uac1c\uc120\n- **\ud83d\udcc1 \ubc31\uc5c5 \uc2dc\uc2a4\ud15c**: API \uc81c\ucd9c \uc2e4\ud328\uc2dc \ub85c\uceec \ubc31\uc5c5 \uc790\ub3d9 \uc800\uc7a5\n\n### v2.0.2\n- \uc548\uc815\uc131 \uac1c\uc120 \ubc0f \ubc84\uadf8 \uc218\uc815\n- \uc758\uc874\uc131 \uc5c5\ub370\uc774\ud2b8\n\n### v2.0.1\n- \uc0c8\ub85c\uc6b4 \ub370\uc774\ud130\uc14b \ucd94\uac00\n- \uc6cc\ud06c\uc0f5 \uc790\ub8cc \uc5c5\ub370\uc774\ud2b8\n\n### v2.0.0\n- \uba54\uc774\uc800 \ub9ac\ud329\ud1a0\ub9c1\n- \uc0c8\ub85c\uc6b4 API \uad6c\uc870\n- \uc131\ub2a5 \ucd5c\uc801\ud654\n",
    "bugtrack_url": null,
    "license": "MIT License\n        \n        Copyright (c) 2024 BAEM1N, Teddy Lee\n        \n        Permission is hereby granted, free of charge, to any person obtaining a copy\n        of this software and associated documentation files (the \"Software\"), to deal\n        in the Software without restriction, including without limitation the rights\n        to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n        copies of the Software, and to permit persons to whom the Software is\n        furnished to do so, subject to the following conditions:\n        \n        The above copyright notice and this permission notice shall be included in all\n        copies or substantial portions of the Software.\n        \n        THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n        IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n        FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n        AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n        LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n        OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n        SOFTWARE.\n        ",
    "summary": "mySUNI CDS - \ub370\uc774\ud130 \uacfc\ud559 \uad50\uc721\uc6a9 \ub77c\uc774\ube0c\ub7ec\ub9ac",
    "version": "2.0.6",
    "project_urls": {
        "Bug Reports": "https://github.com/braincrew/cds/issues",
        "Documentation": "https://github.com/braincrew/cds/wiki",
        "Homepage": "https://github.com/braincrew/cds",
        "Repository": "https://github.com/braincrew/cds"
    },
    "split_keywords": [
        "mysuni",
        " cds",
        " data science",
        " education",
        " machine learning"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a9bb0dc646f93b479f041e374a43109e0c03a0b0f4e116e4a559250f137eec8f",
                "md5": "46a972a9de327b67fb47cfe1983a06e9",
                "sha256": "52fa852a9595fd694dbaec1c66e56abf36ff680f7323d60ae39a12cedc9c1c62"
            },
            "downloads": -1,
            "filename": "mysuni-2.0.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "46a972a9de327b67fb47cfe1983a06e9",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 26138,
            "upload_time": "2025-09-07T23:57:46",
            "upload_time_iso_8601": "2025-09-07T23:57:46.766058Z",
            "url": "https://files.pythonhosted.org/packages/a9/bb/0dc646f93b479f041e374a43109e0c03a0b0f4e116e4a559250f137eec8f/mysuni-2.0.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6bd25a7ea00c1f435add1fb546fee43c589034e33df4d983c3667adb0326e931",
                "md5": "09c0bedff98b9d7dfaff1b3547d6bc3b",
                "sha256": "48fcabbed5540965f0fe78ae137ced29cc60eab053897c2441b0bcf1333c1aee"
            },
            "downloads": -1,
            "filename": "mysuni-2.0.6.tar.gz",
            "has_sig": false,
            "md5_digest": "09c0bedff98b9d7dfaff1b3547d6bc3b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 26070,
            "upload_time": "2025-09-07T23:57:48",
            "upload_time_iso_8601": "2025-09-07T23:57:48.895502Z",
            "url": "https://files.pythonhosted.org/packages/6b/d2/5a7ea00c1f435add1fb546fee43c589034e33df4d983c3667adb0326e931/mysuni-2.0.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-09-07 23:57:48",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "braincrew",
    "github_project": "cds",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "mysuni"
}
        
Elapsed time: 2.11133s