初心者向けプログラミング講座
第6回: 測定データの取得と基本的な処理

講座の概要については以下からご覧ください。
目的
この回では、計測器から取得したデータを処理する方法について学びます。Pythonを使って計測器から実際に測定データを取得し、それを加工・保存するまでの基本的なフローを習得します。これにより、簡単なデータ解析や可視化の準備が整います。
学習内容
- 計測器からの測定データの取得方法
- データの加工および処理(例:簡単な統計演算)
- 測定データの保存(テキストファイル、CSVファイル)
- 実践プログラム例
- 演習問題で実力を確認
1. 計測器からの測定データの取得方法
前回の講座ではPythonを使って計測器に接続し、SCPIコマンドでデータを取得する流れを学びました。今回は、この流れを具体的にデータ取得に活用します。
計測器からのデータ取得
基本的に、SCPIコマンドを使用して計測器から測定値を取得します。
pyvisaの「queryメソッド」が便利で、多くの場合以下で対応可能です。
result = instrument.query("MEAS:VOLT?") # 電圧測定の例
print("測定値:", result)
2. データの加工および処理
取得した測定データをそのまま使うのではなく、必要な形に加工して処理する場面が多々あります。
(1) データの型変換
計測器から取得したデータは通常、「文字列型(str)」で返されます。これを解析に適した数値型に変換します。
例:数値への変換
# 測定値を取得
result = instrument.query("MEAS:VOLT?")
# 文字列 "2.345" から浮動小数点型に変換
voltage = float(result)
print("測定された電圧:", voltage)
(2) データの統計演算
複数回の測定データからまとめて統計処理を行うことがあります。Pythonのnumpyライブラリを使うと効率的な処理が可能です。
例:複数の測定結果の統計
import numpy as np
# 測定データ(例として複数データを取得)
data = [2.1, 2.3, 2.2, 2.5, 2.4]
# 統計量を計算
average = np.mean(data) # 平均
maximum = np.max(data) # 最大値
minimum = np.min(data) # 最小値
print("平均:", average)
print("最大値:", maximum)
print("最小値:", minimum)
3. 測定データの保存
計測したデータを記録として残したり、別の解析ソフトウェアで利用できるようにするためにファイルに保存します。
(1) テキストファイルに保存
Pythonでは、open()を使ってデータを簡単にテキストファイルに保存できます。
例:テキストファイルに保存
# 測定データ
data = [2.1, 2.3, 2.2, 2.5, 2.4]
# ファイルに書き込み
with open("output.txt", "w") as file:
for value in data:
file.write(f"{value}\n") # 1行ごとにデータを書き込む
print("データが output.txt に保存されました。")
(2) CSVファイルに保存
CSV形式は多くのソフトウェアで利用可能なのでおすすめです。Python標準ライブラリのcsvを使うと簡単です。
例:CSVに保存
import csv
# 測定データ
data = [2.1, 2.3, 2.2, 2.5, 2.4]
# CSVファイルに書き込み
with open("output.csv", "w", newline="") as file:
writer = csv.writer(file)
# ヘッダーを追加(任意)
writer.writerow(["Measurement"])
# データを追加
writer.writerows([[value] for value in data]) # データを1行ごとに分けて保存
print("データが output.csv に保存されました。")
4. 実践プログラム例
以下のプログラムでは、計測器から得た測定データを取得し、それを加工してCSV形式でファイル保存するまでを扱います。
プログラム例:測定と保存
import pyvisa
import numpy as np
import csv
# PyVISAで計測器に接続
rm = pyvisa.ResourceManager()
resources = rm.list_resources()
print("接続可能なリソース:", resources)
if resources:
# 最初のリソースを使用
instrument = rm.open_resource(resources[0])
print("接続した計測器:", instrument.query("*IDN?"))
# 複数回測定データを取得
data = []
print("測定中...")
for i in range(5): # 5回繰り返し測定
result = instrument.query("MEAS:VOLT?") # 電圧値取得
voltage = float(result) # 数値に変換
data.append(voltage) # データをリストに追加
print(f"測定値 {i+1}: {voltage}")
# 統計処理
average = np.mean(data)
maximum = np.max(data)
minimum = np.min(data)
print(f"平均値: {average}, 最大値: {maximum}, 最小値: {minimum}")
# データをCSVに保存
with open("measurement_data.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Measurement"]) # ヘッダー
writer.writerows([[value] for value in data])
print("測定データが measurement_data.csv に保存されました。")
# 接続を終了
instrument.close()
else:
print("計測器が接続されていません。")
5. 演習問題
演習問題 1: 平均値と標準偏差の計算
計測器から複数回の測定データを取得してください。
numpyを使用して、測定データの平均値と標準偏差(np.std(data))を計算してください。
解答例を表示
import pyvisa
import numpy as np
# PyVISAで計測器に接続
rm = pyvisa.ResourceManager()
resources = rm.list_resources()
if resources:
# 最初のリソースを使用
instrument = rm.open_resource(resources[0])
# 複数回測定データを取得
data = []
print("測定中...")
for i in range(10): # 10回繰り返し測定
result = instrument.query("MV") # 電圧値取得
voltage = float(result) # 数値に変換
data.append(voltage)
print(f"回数: {i+1}, 測定値:{voltage}")
average = np.mean(data)
stddev = np.std(data)
print(f"平均値: {average}, 標準偏差: {stddev}")
# 接続を終了
instrument.close()
else:
print("計測器が接続されていません。")
演習問題 2: 継続的な測定データを記録
計測値をforループで継続的に取得し、10回測定データを記録してください。
測定されたデータをリアルタイムで画面に表示し、終了後にCSVに保存してください。
例:
測定中:
測定値 1: 2.1
測定値 2: 2.3
測定値 3: 2.2
...(省略)...
測定データが measurement_log.csv に保存されました。
解答例を表示
import pyvisa
import numpy as np
import csv
# PyVISAで計測器に接続
rm = pyvisa.ResourceManager()
resources = rm.list_resources()
if resources:
# 最初のリソースを使用
instrument = rm.open_resource(resources[0])
# 複数回測定データを取得
data = []
print("測定中...")
count = 10
for i in range(count):
result = instrument.query("MEAS:VOLT") # 電圧値取得
voltage = float(result) # 数値に変換
data.append(voltage) # データをリストに追加
print(f"測定値 {i+1}: {voltage}")
# データをCSVに保存
with open("measurement_log.csv", "w", newline="") as file:
writer = csv.writer(file)
writer.writerow(["Measurement"]) # ヘッダー
writer.writerows([[value] for value in data])
print("測定データが measurement_log.csv に保存されました。")
# 接続を終了
instrument.close()
else:
print("計測器が接続されていません。")
次回予告
次回(第7回)は、「データの可視化(グラフ作成)」を学びます。本回で取得した測定データを、Pythonのライブラリmatplotlibを使ってグラフ表示していきましょう!