DuckDB で仮説テストを実行する – wang_yb
你不是想过,SQL电影做设计设计?
今天设计来聊聊、使い方 アヒルDB 高速データ分析における 2 つの古典的なタスク:
- 右変数の分類做方法方法
- 右連続変数関連する分析を行う
プロセス全体は完璧ではありません:
- DuckDB を使用して CSV または Parquet ファイルを直接読み取ります
- 設定された SQL を使用して実行する
- 握り精简後技术交经 Python 計算 p 值
- 連続変数は DuckDB 組み込みで直接使用することもできます
corr()関数
完你电影电影可可以「快、圆、焾」データ分析利器!
以下は発表会用に共有された単車乗車記録です。
データファイル bike_rides.csv、フィールドは次のようなものです。
ride_iduser_type:月卡 / 单次is_weekend:あり / 否distance_km: 距離duration_min:骑行時間長start_hour: 開始時間bike_type:普通车 / 電助力车
# pip install duckdb pandas scipy
import duckdb
from scipy.stats import chi2_contingency
con = duckdb.connect()
DuckDB の利点は、CSV ファイルをデータベースにインポートする必要がないことです。
con.execute("""
SELECT *
FROM read_csv_auto('bike_rides.csv')
LIMIT 5
""").df()
| 乗車ID | ユーザータイプ | 週末です | 距離_km | 継続時間_分 | 開始時間 | 自転車の種類 |
|---|---|---|---|---|---|---|
| 1 | 月卡 | はい | 2.5 | 13 | 9 | 普通車 |
| 2 | 月卡 | はい | 3.2 | 15 | 10 | 電助力车 |
| 3 | 月卡 | はい | 1.8 | 10 | 14 | 普通車 |
| 4 | 月卡 | はい | 4.5 | 19 | 16 | 電助力车 |
| 5 | 月卡 | はい | 5.1 | 21 | 8 | 普通車 |
寄木細工の床の場合、就可成:
read_parquet('bike_rides.parquet')
実際にデータを確認してみると、DuckDB ですべてのデータをまとめることができません。
データ探索のプロセスでは、「異なるタイプのユーザー間に違いはあるのか?」という当然の疑問が生じます。
この質問に答えるために、分類変数の常用分析手法である卡方検証を使用できます。
まず、簡単な仮説を立てます。
- H₀(当初の仮説): ユーザーのタイプと週末のライディングの間には関係はありません。
- H₁:ユーザータイプと週末の間には何らかの関係があります。
このような仮定により、データの背後にあるストーリーを単に探索するのではなく、データの背後にあるストーリーをより体系的に探索できるようになります。
次に、これらの仮定を卡方数所来,英语说是可以支持件下支持挬否成戋证成话成正说,によって検証できます。
DuckDB を使用した先研究出列表:
df = con.execute("""
SELECT
user_type,
SUM(CASE WHEN is_weekend = '是' THEN 1 ELSE 0 END) AS weekend,
SUM(CASE WHEN is_weekend = '否' THEN 1 ELSE 0 END) AS weekday
FROM read_csv_auto('bike_rides.csv')
GROUP BY user_type
ORDER BY user_type
""").df()
print(df)
| ユーザータイプ | 週末 | 営業日 |
|---|---|---|
| シングル | 4.0 | 16.0 |
| 月卡 | 14.0 | 6.0 |
交说 scipy 做卡方検証:
table = df[['weekend', 'weekday']].values
chi2, p, dof, expected = chi2_contingency(table)
print(f"卡方统计量: {chi2:.4f}")
print(f"p 值: {p:.4f}")
卡方统计量: 8.1818
p 值: 0.0042
分析結果:
- p = 0.0042 < 0.05: H₂ を拒否し、ビデオ電気安全性と周屋行比例性に関係します。
- 卡方统计量的 8.1818、在月性水 α = 0.05 以下は月著、異なるユーザー タイプ (单次 vs.
DuckDB 組み込みのカード検査はないため、ここでの分割は次のようになります: DuckDB が大きなテーブルを担当します。scipy 検査の責任者。
この方法では、Python ですべてのデータを記録することはできず、メモリの負荷が大きくなります。
次に、私たちの電子映画のこれらのおよび実験の時間にわたるストーリーの主な説明は、何が通過した電子効果ですか?
実際にこのような悩みも聞かれます。
しかし、データを愛する人として、咱不光光靠は話したいと思います、我们得拿出点真度实孙広实孙
したがって、次の 2 つの仮説を立てることができます。
- 仮定:二人の間には何の関係もない、つまり距離も時間も完全に「他人事」であり、お互いが干渉しない。
- 备择是です(H₁):実際にはそれらの間には関係があり、この関係も偶然ではなく非常に明白です。
次に、いくつかの統計的手法を使用して一度テストし、最終的にどの仮説が得られるかを確認します。
たとえば、一緒にやってみよう関連するテスト,それらの間の相関係数を計算し,移動は月著不我零である。
これは DuckDB で直接使用できます。 corr():
corr_df = con.execute("""
SELECT
corr(distance_km, duration_min) AS corr
FROM read_csv_auto('bike_rides.csv')
WHERE distance_km IS NOT NULL
AND duration_min IS NOT NULL
""").df()
print(corr_df)
計算された corr=0.996897。
結果の見方:
corr近接性 1: 非常に正直で、使用頻度が高く、時間が長くなります。corr-1に近い:強性動作。corr0に近い:基本的に線形相関はありません。
DuckDB は関連する係数を直接計算します。2 列のデータをすべて Python に取り込む必要はありません。
まだ p が必要な場合は、再利用できます scipy.stats.pearsonr,しかし通常は先見る corr() 方向と強さを判断することができます。
- 直接読み取り
CSV / Parquet、データベースをインポートする必要はありません。 SQL管理が早く、公共性があり、可能性があり、求められます。- 卡方设计には列联表のみが必要です、
DuckDB集計後のデータは非常に小さくなり、再び集計されます。scipyとても適しています。 - 関連するテストを直接使用できます
corr(),neuseハンドル全量安全支到Python。 - 和
Pythonリンクcon.execute(...).df()直接DataFrame。
この篇の文章は、部品车製造の了了ダウンロード下書きは電影です:
- 比較変数の分類:ユーザーのタイプと週末の買い物かどうかを考慮した方法。
- 連続変数関係:ピアソン相関係数を使用した実行時間と実行時間。
基本セットは:
- 能用
SQL重合、先裹DuckDBやった - チェックする必要があります。その後、結果がチェックされます
Python。 - 直接使用
DuckDB組み込み関数の例corr()、まさにハンドルを安全に引き出します。
「単一の車のブランドの違いが乗車時間に影響するかどうか」「早晚高峰与骑行」などの他のフィールドを変更しても、プロセスは基本的に同じです。