根性いらずの健康術

体から心までケアする、てんこ式

プログラミングだけで、数学確率統計、大体いける

f:id:kon-ten:20200509140657j:plain

現実のあらゆる事象はバラつきます

てんこです。Excelのプログラミング講座です。その①では、ExcelVBA機能を有効にして、とりあえずマクロの記録機能を使ってみました。通常なら、次は別のエクセルファイルを開いて、そこから値を取得するような方法の紹介をすることでしょう。しかし、それらはちょっと調べれば分かることなので(希望があればもちろん解説しますが)、今日はプログラミングで学ぶ正規分布と行きましょう。

 

【プログラミングは力業】

ところで、大抵の文系の人って、おそらく高校数学の微分積分辺りで躓くのかなと思います。意味不明な記号がいっぱい出てきて、小難しく説明されるから嫌になりますよね。数学って、計算のショートカットのために存在します。例えば掛け算で、9 x 4 = 36ってすぐ計算できますよね。これは九九を覚えているからですが、別に、9 + 9 + 9 + 9 = 36でも良いし、もっと言えば、1 + 1 + 1 + 1 + 1 + ・・・ = 36でも良いわけです。時間がかかるから、それを短縮しようとします。プログラミングの場合、「時間がかかるから」の部分は全てパソコンさんがやってくれるので、最低限のルールさえ知っていれば、難しい定理や公式なんか知らなくても何だって計算できるようになります。まぁ、公式を知ってた方が計算時間が短くて済むから、無駄って訳ではないんですけどね。

ちなみに、数学で出てくるような問題は「解けることが分かっている問題」だけです。ほんの少し形を変えただけで、殆どの問題は解けなくなります。プログラミングなら、ゴリ押しで全ての問題が解けます。したがって、仕事で生じる現実の問題を解こうとした場合、プログラミングに軍配が上がると思います。後は、複雑すぎる問題の場合は計算時間がネックになります。スーパーコンピューターとか、量子コンピューターが注目されるのはそのためです。

 

正規分布ってなんであんな形してるの?】

プログラミングで色々理解してみよう、と言うことで、「正規分布」の解説をしてみます。確率統計で一番大事な関数で、自然のバラツキは殆どこの形に落ち着きます。当然、正規分布確率密度関数の導出手順があるわけですが、難しすぎて意味不明です。

ですが、プログラミングを駆使すれば、この形になる理由が理解できます。

例えば、パスタ1束の長さのバラツキについて考えてみます。工場見学行った事ないですが、当然自動で切断されていると思います。そうすると、切断プロセスはざっくり以下になります。

①運ばれてくる麺の先端をセンサーで検知する。

②先端検知後、ある時間が経ったら、切断機に信号を送る。

③信号を受けた切断機が起動する。

 

少し専門的な話をすると、上記にはいずれも「スキャンタイム」や「サンプリング周期」といった時間が存在します。①で麺の先端を検知するわけですが、センサーは麺の先端を検知した「ジャスト」の瞬間に信号を送っている訳ではありません。スペックにもよりますが、大体0.01秒毎でしか信号を遅れません。つまり、この時点で0~0.01秒の完全ランダムなバラツキが発生します。②と③にも同じように完全ランダムな0~0.01秒のバラツキが発生します。結局のところ、これら3つのバラツキを足したものが、パスタの長さのバラツキとして発生します。

上記をプログラミングで計算して、グラフに起こすと下のようになります。

 

f:id:kon-ten:20200509143005j:plain

 

①だけだと0~0.01秒の間で全て同じ確率になるので直線になります。それに②を重ねるとピラミッド型になります。ここで言う「重ねる」という処理は、例えば②を重ねるときには、①の1番左の1点に対して、完全ランダムな0~0.01秒のバラツキが乗ると言うことです。それを10点全てに対して計算して足し合わせます。①+②の誤差の範囲が①のみの2倍になっているのは、①の1番右、最大の誤差の0.01秒に、さらに②の最大の誤差の0.01秒が乗るためです。

更に③を重ねると正規分布っぽい形になります。重ねれば重ねるほど、正規分布に近づきます。すなわち、正規分布という形は、「完全ランダムな3つ以上のバラツキの重ね合わせ」の結果になります。逆に言えば、現実で発生する事象は、様々な要因の組み合わせによって成り立っていると言うことです。まぁ、そりゃそうでしょうね、って感じです。

 

【終わりに】

どうでしょうか。私は別に統計の専門でもなければプログラマーですらないですが、プログラミングの基礎を理解しているだけで、後は簡単なルールを積み上げれば、数学でやろうとしたら鬼のように難しい事も簡単に理解できます。下のオマケで参考にコードを載せてます。プログラミング的には、基礎中の基礎しか使っていません。初心者でも理解できると思います。あえて言うなら、頭の中身をコードにするためには理論思考が必要ですが、これもプログラミングをしていく内に勝手に身に付きます。とにかく、試してみること、トライ&エラーが大事です。

と言うことで、プログラミング講座その②でした。それではまた。

 

てんこ式健康術:目次

 

 

【オマケ】

Excel VBAの標準モジュールに以下のプログラムをコピペして走らせれば、グラフの形になる数列が作れます。気になった人は確認してみてね。

 

Sub Macro1()
 
Dim i As Long
Dim ii As Long
Dim j As Long
Dim n As Long
 
i = 1
j = 1
n = 1
 
'①を最初に作る
Do
 
  Cells(i, j) = 1
  i = i + 1
  
Loop While i < 11
 
ii = i
i = 1
n = 1
j = j + 1
 
'①に②と③を重ね合わせてみる
Do
  Do
    Do
      
      Cells(n, j) = Cells(n, j) + Cells(i, j - 1)
      n = n + 1
      
    Loop While n < i + 10
  
    i = i + 1
    n = i
    
  Loop While i < ii
  
  ii = Cells(i, j).End(xlDown).Row + 1
  i = 1
  n = 1
  j = j + 1
  If j = 4 Then Exit Do
 
Loop
 
End Sub