dacon-data Skill
Dacon 공모전 데이터를 압축 해제하고 Hugging Face Hub에 업로드하는 스킬입니다.
Trigger
- •
/dacon-uploaddata - •"upload dacon data"
- •"데이콘 데이터 업로드"
- •"dacon data to huggingface"
Prerequisites
1. 의존성 설치
bash
uv pip install -r ~/.claude/skills/dacon-data/requirements.txt
2. Hugging Face 토큰 설정 (최초 1회)
bash
uv run python ~/.claude/skills/dacon-data/scripts/setup_auth.py
- •토큰 발급: https://huggingface.co/settings/tokens
- •필요 권한: write (데이터셋 업로드용)
Workflow
이 스킬이 트리거되면 다음 단계를 수행합니다:
Step 1: 아카이브 파일 확인
프로젝트 루트에서 open.zip 파일을 찾습니다.
bash
ls -la open.zip 2>/dev/null || ls -la *.zip 2>/dev/null || echo "No archive found"
- •파일이 있으면 → 계속
- •파일이 없으면 → AskUserQuestion으로 경로 입력 요청
Step 2: HF 토큰 확인
토큰이 설정되어 있는지 확인합니다:
- •
~/.claude/skills/dacon-data/config/.hf_token - •환경변수
HF_TOKEN - •
~/.cache/huggingface/token
토큰이 없으면 setup_auth.py 실행을 안내합니다.
Step 3: 레포지토리 정보 수집
AskUserQuestion을 사용하여 다음 정보를 수집합니다:
code
질문 1: "HF 레포지토리 ID를 입력하세요" - header: "Repo ID" - 형식: username/dataset-name - 기본 네임스페이스: gamma4638 - 예시: gamma4638/dacon-competition-2024, gamma4638/challenge-hai 질문 2: "레포지토리 공개 설정" - header: "Visibility" - options: - Private (Recommended): 비공개 - 본인만 접근 가능 - Public: 공개 - 누구나 접근 가능
참고: 레포지토리는 자동으로 생성됩니다. HF 웹사이트에서 미리 만들 필요가 없습니다.
Step 4: 데이터 업로드 실행
수집한 정보로 업로드 스크립트를 실행합니다:
bash
uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \
--archive ./open.zip \
--dest ./data \
--repo-id {repo_id} \
{--private 또는 --public}
Step 5: 결과 보고
업로드 완료 후 다음 정보를 사용자에게 알립니다:
- •✅ 압축 해제 완료:
./data/폴더 - •✅ 업로드 완료: HF Hub URL
- •🗑️
open.zip삭제 완료
CLI 직접 사용
스킬 대신 CLI로 직접 실행할 수도 있습니다:
bash
# 기본 사용 uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \ --archive ./open.zip \ --dest ./data \ --repo-id gamma4638/my-dataset # 공개 레포지토리로 업로드 uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \ --archive ./open.zip \ --dest ./data \ --repo-id gamma4638/my-dataset \ --public # 아카이브 유지 (삭제하지 않음) uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \ --archive ./open.zip \ --dest ./data \ --repo-id gamma4638/my-dataset \ --keep-archive # 이미 압축 해제된 데이터 업로드 uv run python ~/.claude/skills/dacon-data/scripts/upload_data.py \ --skip-extract \ --dest ./data \ --repo-id gamma4638/my-dataset
CLI 옵션
| 옵션 | 설명 | 기본값 |
|---|---|---|
--archive | 아카이브 파일 경로 | open.zip |
--dest | 압축 해제 대상 디렉토리 | ./data |
--repo-id | HF 레포지토리 ID (필수) | - |
--private | 비공개 레포지토리 | True |
--public | 공개 레포지토리 | False |
--keep-archive | 업로드 후 아카이브 유지 | False |
--skip-extract | 압축 해제 건너뛰기 | False |
--commit-message | 커밋 메시지 | "Upload Dacon competition dataset" |
지원 아카이브 포맷
- •
.zip - •
.tar,.tar.gz,.tgz,.tar.bz2 - •
.7z - •
.rar
포맷은 Magic bytes로 자동 감지됩니다 (확장자에 의존하지 않음).
문제 해결
토큰 오류
bash
# 토큰 재설정 uv run python ~/.claude/skills/dacon-data/scripts/setup_auth.py
압축 해제 오류 (7z/rar)
bash
# 추가 의존성 설치 uv pip install py7zr rarfile
업로드 실패 (대용량 파일)
- •
upload_folder()API가 자동으로 멀티파트 업로드를 처리합니다 - •네트워크 오류 시 재시도하면 이어서 업로드됩니다 (이미 업로드된 파일은 건너뜀)
네임스페이스 권한 오류 (403 Forbidden)
code
You don't have the rights to create a dataset under the namespace "xxx"
- •원인: HF 토큰의 사용자명과 레포지토리 네임스페이스가 불일치
- •해결: 토큰 사용자명(gamma4638)과 일치하는 네임스페이스 사용
- •확인 방법:
huggingface-cli whoami또는 스크립트 실행 시 "✅ 인증됨: {username}" 메시지 확인
타임아웃 오류
- •대용량 파일 업로드 시 네트워크 타임아웃이 발생할 수 있음
- •재시도하면 이미 업로드된 파일은 건너뛰고 나머지만 업로드됨
주요 특징
레포지토리 자동 생성
- •HF 웹사이트에서 미리 레포지토리를 만들 필요가 없습니다
- •
create_repo(exist_ok=True)API가 자동으로 생성하거나 기존 레포지토리를 사용합니다
재시도 안전성
- •HF Hub API는 파일 해시를 비교하여 이미 업로드된 파일을 건너뜁니다
- •네트워크 오류 시 안전하게 재시도할 수 있습니다
- •"No files have been modified since last commit" 메시지는 정상입니다
API 호환성
- •
upload_folder()가upload_large_folder()보다 더 안정적인 인터페이스를 제공합니다 - •
HfApi(token=token)생성자에서 토큰을 전달하면 이후 모든 API 호출에 자동 적용됩니다