logo

logo

メールマガジン・新着情報一覧

  1. TOP
  2. メールマガジン・新着情報一覧
  3. D-0161. 平均、標準偏差をPythonで確認する — Y.O

2020.06.17

D-0161. 平均、標準偏差をPythonで確認する — Y.O

◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
 
平均、標準偏差をPythonで確認する
 
発行:エスオーエル株式会社
https://www.sol-j.co.jp/
 
連載「知って得する干渉計測定技術!」
2020年6月17日号 VOL.161
 
平素は格別のお引き立てを賜り、厚く御礼申し上げます。
干渉計による精密測定やアプリケーション例などをテーマに、
無料にてメールマガジンとして配信いたします。
 
◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇
 
 
 
こんにちは。営業技術グループの落合です。

今回はいつもと趣向を変えて、

  平均、標準偏差をPythonで確認する

について書いていきます。

自粛生活に入り、普段できないことをしたいな
と気になったのがプログラミングです。

しかし、大学の時に最も避けていたのがプログラミング
(授業で扱ったのはC言語)でした。
自分にはハードルを下げる必要がありました。

そこで目を付けたのがPythonです。
Pythonはコードが直感的で初心者にも分かりやすいと言われます。
また、始め易かったもう一つの理由が、
環境準備のハードルの低さです。

通常は何か言語を始めようとしたとき、
ローカルPCに専用のソフトウェアをインストールし、
開発環境と呼ばれるものを整える必要があると思います。

しかし、Webブラウザ上で
コードを書き込むと即実行して使うことができる
「Google Colaboratory」というサービスがあり、
初期設定がほとんどなく
簡単に開始できる環境を得られます。
(これについては最後に記述します。)

今回は3テーマ
1.文章を表示する
2.簡単な計算をする
3.測定結果の平均、標準偏差を確認する
について、私がハードル低く始めることができた、
Pythonのコードを書いてみたいと思います。


1.文章を表示する
【コード】
print("Hello, SOL!")

【実行結果】
Hello, SOL!

⇒print()の中に入れると、
 文字列や数値を出力できます。
 文字列の場合は、" "または' 'で囲います。


2.簡単な計算をする
計算を2例挙げます。

(1)Part sizeが100mmの時の、ピクセルサイズを求めます。
(FlatMasterでは、ピクセル数は約500です。)

【コード】
x = 100/500
print(x)

【実行結果】
0.2

⇒100÷500 = 0.2 mm/pixelが求まります。
 なお、コード2行目は、単に

 x 

 と記載するだけでも、
 同様に実行結果を表示できます。

(2)縞感度4μm/fr時のサンプルへのレーザー入射角θを求めます。
 (Sensitivity) = (レーザー波長λ)/(2*cosθ)より
 θ = arccos(λ/(2 * Sensitivity))から求まります。

 *縞感度については過去のメルマガVOL.003をご覧ください。

【コード】
import math
sensitivity = 4
lamda = 0.635
theta = math.acos(lamda/(2*sensitivity))  

print(theta)
print(math.degrees(theta))

【実行結果】
1.49133774067839
85.44735836944739

⇒コードの1行目に、2(1)にはなかった

 import math 

  があります。これは、sin、cosやacos、
 π(パイ)、などの数学関連の機能の
 mathというモジュールを用意しています。
 
 使うときは、例えばcos(0) のみではエラーになりますので、
 math.cos(0)と書くことで、使うことができます。
 (math.cos(0)は1です)

 実行結果を見てみると、
 縞感度が4.0μm/fr、かつレーザー波長が0.635μmのとき、
 レーザー入射角は85.4度と出ます。

 1行目では、単位がラジアンで表示されますので(1.49・・・)、
 2行目で、math.degrees()の中に入れ角度に直しています(85.4・・・)。

 なお、2(1)でも触れましたが、
 計算結果(文字列ではなく数値)はprint()を使わず、
 下記のように記載するだけでも出力されます。

 math.degrees(theta)

 ただし、
 print()を使わないと、最後の1行しか表示されません。 
 (他の環境では分かりませんがgoogle colabolatoryにおいては。)
 そのため、複数行の結果を表示する場合はprint()の使用が必要です。


3.測定結果の平均、標準偏差を確認する
ここでは、1次元のデータについて扱います。

(1)平均値を求めます。
例として、ある測定結果が
5.0, 5.1, 5.1, 5.2, 5.2, 5.3, 5.4, 5.6
の8点のデータについて扱います。
結果の値をカンマで区切り[]の中に入れます。

【コード】
import numpy as np
y = np.array([5.0, 5.1, 5.1, 5.2, 5.2, 5.3, 5.4, 5.6])
heikin = sum(y)/len(y)
print(heikin)

【実行結果】
5.2375

⇒コードの1行目ですが、
 機能をまとめたモジュールと呼ばれるものは
 2(2)のmath以外にもたくさんあり、
 numpy は配列に関する機能のモジュールです。

 import numpy as np

 と書くことで、以降「np」という名前で使っています。

 2行目では、
 8点の測定値をnp.array([])の中に入れることで、
 右辺で新しい配列を作成し、左辺のyという1文字に代入しています。

 3行目で平均を求めています。
 合計sum(y)が41.9、データ個数len(y)が8のため
 41.9÷8 = 5.2375
 となります。

 print(sum(y)
 print(len(y))

 を追記すると、
 値を確かめることができます。

(2)標準偏差を求めます。
さきほどの(1)に追記します。

【コード】
import numpy as np
y = np.array([5.0, 5.1, 5.1, 5.2, 5.2, 5.3, 5.4, 5.6])
heikin = sum(y)/len(y)
hensa = y - heikin
print(hensa)
print(np.mean(hensa**2))
print(np.sqrt(np.mean(hensa**2)))

【実行結果】
[-0.2375 -0.1375 -0.1375 -0.0375 -0.0375  0.0625  0.1625  0.3625]
0.03234375
0.17984368212422697

⇒コードの4行目で、

 hensa = y - heikin

 と、8点のデータの偏差を取り、
 その結果を5行目で表示しています。実行結果は
 [-0.2375 -0.1375 -0.1375 -0.0375 -0.0375  0.0625  0.1625  0.3625]
 となっています。

 yという見かけは1文字の変数ですが、
 中身は配列となっており、8点の要素の計算を
 この1行で表わすことができます。
 (初め、私はこのことに慣れるのに時間がかかりました)

 分散は偏差の2乗(**と書くと累乗です)の平均ですから、
 コード6行目でnp.mean()を使い、それを計算しています。
 実行結果は、0.03234375です。

 標準偏差は、分散の平方根ですがから、
 コード7行目でnp.sqrt()を使い、計算しています。
 実行結果は、0.17984368212422697です。

 コードを見たままで計算過程が分かりやすいのがうれしいです。


以上、簡単な内容ではありますが、
3テーマについて触れてみました。

今回、Pythonのコードを書いてみて、
プログラミングでも電卓のように計算が行えると分かり、
プログラミングへの苦手意識が少し消えました。

最後に、
Pythonの開発環境「Google Corabolatory」
の使い方を説明して終わります。結構おすすめです。
(オンラインでないと使えない制約はありますが、
 実行処理をgoogleのクラウド側で行うことで、
 PCのスペックに依存せず使用できるメリットがあります。)

(前提)
 Googleアカウントへのログインが必要です。また、
 WebブラウザはChrome、FirefoxまたはSafariを使うのが良いようです。

1.Chrome等で「Google Colaboratory」と検索して開きます。
2.「ファイル」から「新規のノートブックを作成」を選びます。
3.新しくコードを書けるノート(Webページ)ができますので、
 「+コード」を押して、出てきた枠内に上記のコードを入れます。
4.実行ボタン(左の▼マーク)または「Shift+Enter」を押せば
  処理が実行され、結果が表示されます。

Pythonは、Webアプリだけでなく、
機械学習、人工知能やIoT機器の制御など
広い分野で利用される人気の言語のようです。

少しでも皆様の役に立つ情報があったなら幸いです。

最後までお読みいただきありがとうございました。


--
Y.O

一覧に戻る

お問い合わせ Contact

048-441-1133

お問合せフォーム