Python 統計ライブラリをテストしたい場合がありますが、データセットが見つかりません。幸いなことに、独自のものを生成することで、この問題を簡単に回避できます。これが私のやり方です。
Python でデータを探索したい場合、最近では利用できるソースがさらにたくさんあります。これらには、政府の情報源や Kaggle のようなサイトが含まれる場合があります。
場合によっては、Pingouin での統計モデルや統計テストなどの Python ライブラリでの操作を試してみたいと思うことがありますが、手元にデータセットがありません。幸いなことに、必要なときに自分で作成するのは非常に簡単です。 NumPy の乱数ジェネレーターの助けが少し必要なだけです。
単純な関数: 乱数で十分です
単純な乱数を生成するには、NumPy をインポートして乱数ジェネレーターをセットアップするだけです。私のMamba環境ではこれを行うことができます:
mamba activate stats私は統計作業のほとんどを、対話型の IPython または Jupyter ノートブック セッションで Python を使用して行っています。まず、NumPy をインポートします。
import numpy as np次に、乱数ジェネレーター オブジェクトを定義します。
rng = np.random.default_rng()乱数ジェネレーターを作成したら、そこから乱数を取得できます。 20 個のランダムな浮動小数点数の配列を作成します。
a = rng.random(20)乱数を作成したら、それらに対して NumPy の標準的な記述統計を実行できるようになります。まずは平均値を取ることから始めます。
a.mean()それを行う別の方法は次のとおりです。
np.mean(a)中央値、つまり中間値についても同じことができます。
np.median(a)標準偏差を取得すると、配列内の数値が平均からどれだけ離れているかを測定できます。
a.std()または:
np.std(a)データのパーセンタイル、または値のパーセンテージが低いデータセット内の値を計算することもできます。中央値は 50 パーセンタイルであり、他の値の 50% が低い値です。 50 パーセンタイルを計算するには:
np.percentile(a,50)パーセンタイル法では、配列の名前とパーセンタイル (0 ~ 100) を値として受け取ります。
同様に、75 パーセンタイルについては次のようになります。
np.percentile(a,75)0 番目と 100 番目のパーセンタイルはデータセットの最小値と最大値であり、標準の NumPy 関数を使用して見つけることもできます。
a.min()
np.min(a)そして最大の場合:
a.max()
np.max(a)回帰、相関テスト: 正規分布から数値を生成する
通常の乱数は基本的な統計関数をテストするのに適していますが、相関テストや回帰テストも試してみたいと思うかもしれません。テストしたいデータセットがない場合は、さらに乱数を生成するだけです。このタスクには、有名な釣鐘型曲線を備えた正規分布の方が適しています。先ほど作成した乱数生成オブジェクトを使用して、NumPy で正規分布から数値を生成できます。これを行うのが、standard_normal メソッドです。必要な標準分布の値の数を指定して呼び出します。 50個お願いします。
a = rng.standard_normal(50)正規分布であることを証明するには、中央値付近の値の分布を示すヒストグラムを作成します。 Seaborn ライブラリを使用します。
import seaborn as snsJupyter ノートブックを使用している場合は、次の「マジック」コマンドを実行して、別のウィンドウではなくノートブックにプロットを表示する必要があります。
次に、ヒストグラムをプロットします。
sns.displot(x=a)最初の配列に基づいて 20 倍した別の配列を作成します。
b = a * 20パンダをインポートし、これら 2 つの配列を使用して DataFrame を作成します
import pandas as pd
df = pd.DataFrame({'a':a,'b':b})a と b の散布図を作成します。
sns.relplot(x=a,y=b,data=df)a が X 軸上、b が Y 軸上にある場合、点は直線上にあります。それを通る回帰直線を簡単に引くことができました。 Seaborn の regplot メソッドを使用してそれを行います。 「relplot」の「g」を変更するだけです。
sns.regplot(x=a,y=b,data=df)より正式な分析には、statsmodels などの他のライブラリを使用できます。このモジュールは、名前が示すように、さまざまな統計テストを提供しますが、最も一般的には線形回帰に使用されます。 R と同様の数式 API を使用できます。
result = smf.ols('b ~ a',data=df).fit()
result.summary()これにより、情報の表が表示されます。係数により、古典的な直線方程式 y = mx + b に代入する値と、ここでは「R 二乗」として表される相関係数が得られます。二乗数値は常に正であるため、二乗されます。
R 二乗は 1 であり、完全な相関を示します。ランダムに生成されたデータからそれが予想されます。 SciPy ライブラリを使用して相関係数を取得することもできます。これは stats サブモジュールの下にあり、このメソッドは Karl Pearson によって普及された概念であるため、「pearsonr」と呼ばれています。
from scipy import stats
stats.pearsonr(a,b)この結果も、配列 a と配列 b の間にほぼ完全な正の線形関係があることを示しています。
乱数の配列は、数値を加算したり乗算したりするだけで変更できます。正規分布の元の配列に 20 を乗算してこれを行うのはすでに見ました。配列に加算するとその数値で平均値が設定され、乗算すると標準偏差が設定されます。
平均 20、標準偏差 3.5 のサンプルから 15 個の数値を抽出したい場合:
c = 20 + 3.5 * rng.standard_normal(15)標準のmean関数とstd関数を使用すると、値は近くなりますが、より大きな配列では、中心極限定理に従って値はより近くなります。
Python で統計関数をテストするためにランダムに生成されたデータを生成するのは簡単です。もう公開データセットを調べたり、教科書を精読したりする必要はありません。