Track and update action item status from natural language updates like 'Seanのメールには返信しておいた' or 'Lu対応予定'. Integrates with daily-comms-ops workflow. Use when managing action items across communication channels.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
DuckDBを使用した大規模データ分析の専門スキル。DuckDBのアーキテクチャ、SQL構文、パフォーマンス最適化、各種ファイル形式(CSV、Parquet、JSON等)の効率的な読み込み・書き出しを熟知。メモリ効率の良い分析、複雑なクエリの最適化、データパイプライン構築を支援。
Use when analyzing large datasets, querying CSV/Parquet/JSON files directly, building data pipelines, or optimizing analytical queries with DuckDB.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
실행 점수 미검증
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
DuckDBは、OLAP(オンライン分析処理)に最適化された組み込み型の列指向データベースです。このスキルは、DuckDBを使用した効率的なデータ分析、大規模データセットの処理、パフォーマンス最適化を支援します。
duckdb package installedpandas, polars, pyarrow for DataFrame integration# Install DuckDB (required)
pip install duckdb
# Optional: Install DataFrame libraries
pip install pandas polars pyarrow
1. Connect to DuckDB (in-memory or persistent)
2. Load/query data files directly (CSV, Parquet, JSON)
3. Transform and analyze using SQL
4. Export results (DataFrame, file, or database)
import duckdb
# インメモリデータベース(一時的な分析向け)
con = duckdb.connect()
# 永続化データベース(データを保存する場合)
con = duckdb.connect('my_analysis.duckdb')
# 読み取り専用モード(並列アクセス可能)
con = duckdb.connect('my_analysis.duckdb', read_only=True)
# CSVファイルを直接クエリ(ロード不要)
result = con.execute("SELECT * FROM 'data.csv' LIMIT 10").fetchdf()
# Parquetファイル
result = con.execute("SELECT * FROM 'data.parquet' WHERE year = 2024").fetchdf()
# 複数ファイルのワイルドカードクエリ
result = con.execute("SELECT * FROM 'data/*.parquet'").fetchdf()
# リモートファイル(S3、HTTP)- httpfs拡張が必要
con.execute("INSTALL httpfs; LOAD httpfs;")
# S3認証設定(必要な場合)
con.execute("""
SET s3_region = 'us-east-1';
SET s3_access_key_id = 'your_key';
SET s3_secret_access_key = 'your_secret';
""")
# または環境変数 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY を使用
result = con.execute("SELECT * FROM 's3://bucket/data.parquet'").fetchdf()
# HTTPファイル(httpfs拡張をロード後に使用可能)
result = con.execute("SELECT * FROM 'https://example.com/data.csv'").fetchdf()
# Query CSV file directly from command line
duckdb -c "SELECT * FROM 'data.csv' LIMIT 10"
# Run SQL file against data
duckdb -c "SELECT COUNT(*) FROM 'sales.parquet'"
# Export query results to CSV
duckdb -c "COPY (SELECT * FROM 'input.parquet' WHERE year=2024) TO 'output.csv' (HEADER)"
# Convert CSV to Parquet
duckdb -c "COPY (SELECT * FROM 'data.csv') TO 'data.parquet' (FORMAT PARQUET)"
# Run data analyzer script
python scripts/duckdb_analyzer.py data.csv --output report.md
python scripts/duckdb_analyzer.py 'data/*.parquet' --sample 10000 --format json
1. データソース確認 → 2. スキーマ推論 → 3. サンプリング分析 → 4. 集計・可視化
Step 1: データソースの確認
# ファイルのスキーマを確認
con.execute("DESCRIBE SELECT * FROM 'large_data.csv'").fetchdf()
# ファイルサイズと行数の概算
con.execute("""
SELECT
COUNT(*) as row_count,
COUNT(DISTINCT column1) as unique_values
FROM 'large_data.csv'
""").fetchdf()
Step 2: サンプリングによる高速分析
# TABLESAMPLEでランダムサンプリング(大規模データに有効)
con.execute("""
SELECT * FROM 'large_data.parquet'
USING SAMPLE 1% (bernoulli)
""").fetchdf()
# RESERVOIR SAMPLINGで固定行数サンプル
con.execute("""
SELECT * FROM 'large_data.csv'
USING SAMPLE reservoir(10000 ROWS)
""").fetchdf()
Step 3: 効率的な集計
# 列指向の強みを活かした集計
con.execute("""
SELECT
category,
COUNT(*) as count,
AVG(value) as avg_value,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY value) as median
FROM 'large_data.parquet'
GROUP BY category
ORDER BY count DESC
""").fetchdf()
1. ソース定義 → 2. 変換ロジック → 3. 品質チェック → 4. 出力
Step 1: 複数ソースの統合
# 複数ファイルの統合
con.execute("""
CREATE OR REPLACE VIEW combined_data AS
SELECT *, 'source_a' as source FROM 'data_a/*.parquet'
UNION ALL
SELECT *, 'source_b' as source FROM 'data_b/*.parquet'
""")
# 異なるフォーマットの結合
con.execute("""
SELECT a.*, b.category_name
FROM 'transactions.csv' a
LEFT JOIN 'categories.json' b ON a.category_id = b.id
""")
Step 2: データ変換
# 型変換とクレンジング
con.execute("""
SELECT
CAST(id AS INTEGER) as id,
TRIM(LOWER(email)) as email,
COALESCE(amount, 0) as amount,
TRY_CAST(date_str AS DATE) as date,
CASE
WHEN status IN ('active', 'enabled') THEN 'active'
ELSE 'inactive'
END as status_normalized
FROM 'raw_data.csv'
WHERE id IS NOT NULL
""")
Step 3: 品質チェック
# データ品質レポート
con.execute("""
SELECT
COUNT(*) as total_rows,
COUNT(*) FILTER (WHERE id IS NULL) as null_ids,
COUNT(*) FILTER (WHERE amount < 0) as negative_amounts,
COUNT(DISTINCT customer_id) as unique_customers
FROM transformed_data
""").fetchdf()
Step 4: 効率的な出力
# Parquet形式で出力(圧縮・パーティション付き)
con.execute("""
COPY (SELECT * FROM transformed_data)
TO 'output' (FORMAT PARQUET, PARTITION_BY (year, month), COMPRESSION 'zstd')
""")
# CSV出力
con.execute("""
COPY (SELECT * FROM result_table)
TO 'output.csv' (HEADER, DELIMITER ',')
""")
ウィンドウ関数の活用
# ランキングと累積計算
con.execute("""
SELECT
date,
category,
sales,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) as rank,
SUM(sales) OVER (PARTITION BY category ORDER BY date) as cumulative_sales,
LAG(sales, 1) OVER (PARTITION BY category ORDER BY date) as prev_sales,
sales - LAG(sales, 1) OVER (PARTITION BY category ORDER BY date) as sales_change
FROM 'sales_data.parquet'
""").fetchdf()
CTEを使った複雑なクエリ
con.execute("""
WITH monthly_stats AS (
SELECT
DATE_TRUNC('month', date) as month,
category,
SUM(amount) as total_amount,
COUNT(*) as transaction_count
FROM transactions
GROUP BY 1, 2
),
ranked AS (
SELECT *,
RANK() OVER (PARTITION BY month ORDER BY total_amount DESC) as rank
FROM monthly_stats
)
SELECT * FROM ranked WHERE rank <= 5
""").fetchdf()
PIVOT/UNPIVOT操作
# PIVOT: 行を列に変換
con.execute("""
PIVOT sales_data
ON category
USING SUM(amount)
GROUP BY month
""").fetchdf()
# UNPIVOT: 列を行に変換
con.execute("""
UNPIVOT wide_table
ON col1, col2, col3
INTO NAME metric VALUE value
""").fetchdf()
# メモリ制限の設定(デフォルト: システムメモリの80%)
con.execute("SET memory_limit = '8GB'")
# 一時ファイルディレクトリの設定(メモリ超過時のスピル先)
con.execute("SET temp_directory = '/tmp/duckdb'")
# スレッド数の調整
con.execute("SET threads = 4")
列の選択を明示する
# Good: 必要な列のみ選択
SELECT id, name, amount FROM large_table
# Bad: 全列選択は避ける
SELECT * FROM large_table
フィルタを早期に適用
# Good: WHERE句でフィルタリング
SELECT * FROM 'data.parquet' WHERE year = 2024
# Parquetのpredicate pushdownが効く
適切なファイル形式を選択
- Parquet: 大規模分析に最適(列指向、圧縮、メタデータ)
- CSV: 互換性重視、小規模データ
- JSON: 半構造化データ
パーティショニングの活用
# パーティションされたデータの効率的なクエリ
SELECT * FROM 'data/year=2024/month=*/data.parquet'
# クエリプランの確認
con.execute("EXPLAIN ANALYZE SELECT ...").fetchdf()
# プロファイリング有効化
con.execute("PRAGMA enable_profiling")
con.execute("PRAGMA profiling_output = 'profile.json'")
import pandas as pd
import duckdb
# pandasからDuckDB
df = pd.DataFrame({'a': [1, 2, 3], 'b': ['x', 'y', 'z']})
result = duckdb.query("SELECT * FROM df WHERE a > 1").fetchdf()
# DuckDBからpandas
result_df = con.execute("SELECT * FROM table").fetchdf()
import polars as pl
import duckdb
# PolarsからDuckDB
pl_df = pl.DataFrame({'a': [1, 2, 3]})
result = duckdb.query("SELECT * FROM pl_df").pl()
# DuckDBからPolars
result_pl = con.execute("SELECT * FROM table").pl()
import pyarrow as pa
# ArrowからDuckDB(ゼロコピー)
arrow_table = pa.table({'a': [1, 2, 3]})
result = duckdb.query("SELECT * FROM arrow_table").arrow()
con.execute("""
SELECT * FROM read_csv('data.csv',
header = true,
delim = ',',
quote = '"',
escape = '"',
nullstr = 'NA',
skip = 1,
columns = {'id': 'INTEGER', 'name': 'VARCHAR'},
auto_detect = true,
sample_size = 10000
)
""")
con.execute("""
SELECT * FROM read_parquet('data.parquet',
filename = true, -- ファイル名を列として追加
hive_partitioning = true, -- Hiveパーティション認識
union_by_name = true -- スキーマが異なるファイルの結合
)
""")
con.execute("""
SELECT * FROM read_json('data.json',
auto_detect = true,
format = 'auto', -- 'array', 'unstructured', 'newline_delimited'
maximum_object_size = 16777216
)
""")
# ストリーミング処理(メモリ効率)
for chunk in con.execute("SELECT * FROM 'huge.csv'").fetch_record_batch(100000):
process(chunk.to_pandas())
# 方法1: INSERT OR REPLACE(PRIMARY KEY制約が必要)
# テーブル作成時に主キーを定義
con.execute("""
CREATE TABLE IF NOT EXISTS target_table (
id INTEGER PRIMARY KEY,
name VARCHAR,
value DOUBLE,
updated_at TIMESTAMP
)
""")
# 主キーに基づいて更新または挿入
con.execute("""
INSERT OR REPLACE INTO target_table
SELECT * FROM 'new_data.parquet'
WHERE updated_at > (SELECT COALESCE(MAX(updated_at), '1970-01-01') FROM target_table)
""")
# 方法2: DELETE + INSERT(主キーがない場合)
con.execute("""
DELETE FROM target_table
WHERE id IN (SELECT id FROM 'new_data.parquet');
INSERT INTO target_table
SELECT * FROM 'new_data.parquet'
""")
# 方法3: 一時テーブルを使ったマージパターン
con.execute("""
-- 新データを一時テーブルに読み込み
CREATE TEMP TABLE new_data AS SELECT * FROM 'new_data.parquet';
-- 既存データを削除
DELETE FROM target_table WHERE id IN (SELECT id FROM new_data);
-- 新データを挿入
INSERT INTO target_table SELECT * FROM new_data;
-- 一時テーブル削除
DROP TABLE new_data;
""")
# 包括的な品質レポート
quality_report = con.execute("""
SELECT
'total_rows' as metric, COUNT(*)::VARCHAR as value FROM data
UNION ALL
SELECT 'null_rate_col1', ROUND(100.0 * COUNT(*) FILTER (WHERE col1 IS NULL) / COUNT(*), 2)::VARCHAR FROM data
UNION ALL
SELECT 'duplicate_keys', COUNT(*)::VARCHAR FROM (SELECT key FROM data GROUP BY key HAVING COUNT(*) > 1)
""").fetchdf()
duckdb_analyzer.py: データプロファイリングと品質チェックの自動化スクリプトetl_pipeline.py: ETLパイプラインのテンプレートスクリプトduckdb_functions_reference.md: 主要な関数リファレンスperformance_tuning_guide.md: パフォーマンスチューニングガイドfile_formats_guide.md: ファイル形式別の最適な設定ガイドこのスキルにはアセットファイルは含まれません。
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
Track and update action item status from natural language updates like 'Seanのメールには返信しておいた' or 'Lu対応予定'. Integrates with daily-comms-ops workflow. Use when managing action items across communication channels.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
AI活用提案の専門コンサルタントスキル。LLM・AIエージェントの活用事例知識を基に、業界別、部門別、シーン別に最適なAI導入提案を行います。システム化、業務改善、効率化を得意とし、具体的な活用事例、期待効果、導入ステップを含む実践的な提案を提供します。Use when proposing AI/LLM adoption strategies for specific industries, departments, or business scenarios.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Generate AI-powered BPO service proposals for Japanese companies in the US market. Use when creating outsourcing proposals with AI service menus, ROI estimation, implementation roadmaps, and bilingual (JA/EN) proposal documents for 在米日系企業向けAI実装.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
AI(LLM)が生成した日本語テキストの「AI臭」を検出・診断し、人間らしい文章にリライトするスキル。 Use when: 「AIっぽい文章を直して」「人間らしくリライトして」「AI臭を消して」「この文章をもっと自然にして」 「テキストのAI感を減らして」「機械っぽさを取りたい」 "make this sound more human", "remove AI tone", "humanize this text", "detect if this is AI-generated". 6つのAI特有パターン(視覚的マーカー、単調なリズム、マニュアル的構成、非コミット姿勢、抽象語の濫用、 定型メタファー)を正規表現ベースで検出し、0-100のAI臭スコアを算出。3つの人間化技法 (バランスを崩す・客観を崩す・論理を崩す)でリライトを実行する。 Note: 検出スクリプトは日本語テキスト専用。英語テキストの場合はClaude自身がreferences/を参照して分析・リライトする。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Generate audit-ready internal control design documents from As-Is business process inventories. Produces control IDs, assertion mappings, procedures, SoD analysis, KPIs, materiality thresholds, and implementation roadmaps. Use when building internal controls for new audit engagements, SOX/J-SOX compliance, or process improvement initiatives.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
Review audit-related documents (control design documents, bottleneck analyses, requirements definitions, etc.) for quality, scoring them 0-100 with a severity-rated findings list. Use when reviewing audit documents, checking control design quality, or verifying cross-document consistency. Supports documents governed by US GAAP, IFRS, or J-GAAP.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.