忍者ブログ

mshencity

Python で現実的なテスト データを高速に生成します。データセットは必要ありません






まとめ






  • NumPy の RNG を使用して、統計関数を簡単にテストするためのランダムな配列を作成します。



  • 正規データを生成し、追加およびスケーリングによって平均/標準を設定します。 Seaborn で視覚化します。



  • 回帰と相関関係を実行します (statsmodels、SciPy)。テストにはランダムなデータで十分です。






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 の標準的な記述統計を実行できるようになります。まずは平均値を取ることから始めます。
























IPython ターミナルで Python がランダムに作成した配列。





a.mean()


それを行う別の方法は次のとおりです。


np.mean(a)

























Python を使用してランダムに生成された配列の平均を出力します。




中央値、つまり中間値についても同じことができます。


np.median(a)


標準偏差を取得すると、配列内の数値が平均からどれだけ離れているかを測定できます。


a.std()


または:


np.std(a)

























ランダムに生成された配列の NumPy 標準偏差。




データのパーセンタイル、または値のパーセンテージが低いデータセット内の値を計算することもできます。中央値は 50 パーセンタイルであり、他の値の 50% が低い値です。 50 パーセンタイルを計算するには:


np.percentile(a,50)


パーセンタイル法では、配列の名前とパーセンタイル (0 ~ 100) を値として受け取ります。

同様に、75 パーセンタイルについては次のようになります。


np.percentile(a,75)

























ランダムに生成された配列の NumPy 中央値。




0 番目と 100 番目のパーセンタイルはデータセットの最小値と最大値であり、標準の NumPy 関数を使用して見つけることもできます。


a.min()
np.min(a)

























ランダムに生成された配列に対する NumPy min 関数。




そして最大の場合:


a.max()
np.max(a)

























ランダムに生成された配列に対する NumPy max 関数。




回帰、相関テスト: 正規分布から数値を生成する

通常の乱数は基本的な統計関数をテストするのに適していますが、相関テストや回帰テストも試してみたいと思うかもしれません。テストしたいデータセットがない場合は、さらに乱数を生成するだけです。このタスクには、有名な釣鐘型曲線を備えた正規分布の方が適しています。先ほど作成した乱数生成オブジェクトを使用して、NumPy で正規分布から数値を生成できます。これを行うのが、standard_normal メソッドです。必要な標準分布の値の数を指定して呼び出します。 50個お願いします。


 a = rng.standard_normal(50)


正規分布であることを証明するには、中央値付近の値の分布を示すヒストグラムを作成します。 Seaborn ライブラリを使用します。


import seaborn as sns








Jupyter ノートブックを使用している場合は、次の「マジック」コマンドを実行して、別のウィンドウではなくノートブックにプロットを表示する必要があります。






次に、ヒストグラムをプロットします。


sns.displot(x=a)

























正規分布からランダムに生成された NumPy 配列からの配列のヒストグラム プロット。




最初の配列に基づいて 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」を変更するだけです。
























NumPy を使用して正規分布から生成された 2 つの配列の散布図。





sns.regplot(x=a,y=b,data=df)

























NumPy を使用して標準分布から生成された正規分布配列による回帰直線プロット。




より正式な分析には、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 で統計関数をテストするためにランダムに生成されたデータを生成するのは簡単です。もう公開データセットを調べたり、教科書を精読したりする必要はありません。

PR

コメント

プロフィール

HN:
No Name Ninja
性別:
非公開

P R