こんにちはSHINです。
僕のことについては上のプロフィールを見てくれたら嬉しいです。
とにかく未経験からPythonに挑戦中です。
今回は単位変換のプログラムに挑戦します。
科学や工学の分野でよく直面する問題の一つが、異なる単位系間でのデータ変換です。
特に圧力と温度のデータは、日々の研究や業務で頻繁に取り扱われる重要な要素です。
今回はこのようなデータ変換を手軽かつ正確に行うための新しいツールについて紹介します。
このプログラムは、ユーザーフレンドリーなGUIを備えており、圧力(Pa、kPa、MPa、bar)や温度(摂氏、華氏、ケルビン)の単位変換を瞬時に行うことを目指します。
ポイント
・単位をプログラムで一瞬で変換させたい
話題のChatGPTを使ったプログラミングをするなら下の書籍がおススメです。
圧力変換プログラム
基本的にPandasライブラリとTkinterライブラリを使用して、圧力単位の変換を行うGUIアプリケーションとしています。
※コピペでは使えないのであくまで参考にしてください
import pandas as pd
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
def load_file():
# ファイル選択ダイアログを開く
filepath = filedialog.askopenfilename(filetypes=[("CSV Files", "*.csv"), ("Excel Files", "*.xlsx")])
if filepath.endswith('.csv'):
return pd.read_csv(filepath)
else:
return pd.read_excel(filepath)
def convert_pressure_units(data, column, from_unit, to_unit):
# 圧力単位の変換表
conversion_factors = {
'Pa': {'Pa': 1, 'kPa': 0.001, 'MPa': 1e-6, 'bar': 1e-5},
'kPa': {'Pa': 1000, 'kPa': 1, 'MPa': 0.001, 'bar': 0.01},
'MPa': {'Pa': 1e6, 'kPa': 1000, 'MPa': 1, 'bar': 10},
'bar': {'Pa': 1e5, 'kPa': 100, 'MPa': 0.1, 'bar': 1}
}
# 変換率を取得
conversion_factor = conversion_factors[from_unit][to_unit]
# 単位変換を行う
data[column] = data[column] * conversion_factor
return data
def main():
# GUIのセットアップ
root = tk.Tk()
root.withdraw()
# ファイルを読み込む
data = load_file()
if data is None:
return
# 変換したい列を選択
column = simpledialog.askstring("Input", "変換したい列名を入力してください:")
if column not in data.columns:
messagebox.showerror("Error", "Column not found.")
return
# 変換前の単位を選択
from_unit = simpledialog.askstring("Input", "変換前の単位を選択してください (Pa, kPa, MPa, bar):")
if from_unit not in ['Pa', 'kPa', 'MPa', 'bar']:
messagebox.showerror("Error", "Invalid from unit.")
return
# 変換後の単位を選択
to_unit = simpledialog.askstring("Input", "変換後の単位を選択してください (Pa, kPa, MPa, bar):")
if to_unit not in ['Pa', 'kPa', 'MPa', 'bar']:
messagebox.showerror("Error", "Invalid to unit.")
return
# 単位変換を実行
converted_data = convert_pressure_units(data, column, from_unit, to_unit)
# 新しいファイルに保存
save_path = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excel Files", "*.xlsx")])
if save_path:
converted_data.to_excel(save_path, index=False)
messagebox.showinfo("Info", "ファイルの保存が完了しました.")
if __name__ == "__main__":
main()
主な機能のを説明
主な機能は以下の通りです。
load_file()関数で、ファイル選択ダイアログを開き、CSV形式またはExcel形式のファイルを読み込みます。
convert_pressure_units()関数では、指定された列の圧力値を、指定された単位から別の単位に変換します。変換係数は関数内で定義されたディクショナリから取得されます。
main()関数では、GUIを設定し、以下の処理を行います。
- ファイルを読み込む
- 変換したい列名を入力させる
- 変換前の単位を選択させる
- 変換後の単位を選択させる
- 単位変換を実行する
- 変換後のデータを新しいExcelファイルとして保存する
プログラムの最後の if __name__ == "__main__": ブロックでは、プログラムが直接実行された場合にのみ main() 関数が呼び出されます。
プログラムの実行時には、Tkinterによるダイアログボックスが表示され、ユーザーは必要な情報を入力することができます。処理が完了すると、変換後のデータがExcelファイルとして保存されます。
注意点としては、入力された列名や単位が無効な場合、エラーメッセージが表示されます。また、ファイルの読み込みや保存に失敗した場合も、適切なメッセージが表示されます。
温度変換プログラム
※コピペでは使えないのであくまで参考にしてください
import pandas as pd
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
def load_file():
filepath = filedialog.askopenfilename(filetypes=[("CSVファイル", "*.csv"), ("Excelファイル", "*.xlsx")])
if filepath.endswith('.csv'):
return pd.read_csv(filepath)
else:
return pd.read_excel(filepath)
def convert_temperature_units(data, column, from_unit, to_unit):
def celsius_to_fahrenheit(c):
return (c * 9/5) + 32
def celsius_to_kelvin(c):
return c + 273.15
def fahrenheit_to_celsius(f):
return (f - 32) * 5/9
def fahrenheit_to_kelvin(f):
return fahrenheit_to_celsius(f) + 273.15
def kelvin_to_celsius(k):
return k - 273.15
def kelvin_to_fahrenheit(k):
return celsius_to_fahrenheit(kelvin_to_celsius(k))
conversion_functions = {
('摂氏', '華氏'): celsius_to_fahrenheit,
('摂氏', 'ケルビン'): celsius_to_kelvin,
('華氏', '摂氏'): fahrenheit_to_celsius,
('華氏', 'ケルビン'): fahrenheit_to_kelvin,
('ケルビン', '摂氏'): kelvin_to_celsius,
('ケルビン', '華氏'): kelvin_to_fahrenheit
}
if (from_unit, to_unit) in conversion_functions:
data[column] = data[column].apply(conversion_functions[(from_unit, to_unit)])
return data
def main():
root = tk.Tk()
root.withdraw()
data = load_file()
if data is None:
return
column = simpledialog.askstring("入力", "変換する列名を入力してください:")
if column not in data.columns:
messagebox.showerror("エラー", "指定された列が見つかりません。")
return
from_unit = simpledialog.askstring("入力", "変換前の単位を入力してください (摂氏, 華氏, ケルビン):")
if from_unit not in ['摂氏', '華氏', 'ケルビン']:
messagebox.showerror("エラー", "無効な変換前の単位です。")
return
to_unit = simpledialog.askstring("入力", "変換後の単位を入力してください (摂氏, 華氏, ケルビン):")
if to_unit not in ['摂氏', '華氏', 'ケルビン']:
messagebox.showerror("エラー", "無効な変換後の単位です。")
return
converted_data = convert_temperature_units(data, column, from_unit, to_unit)
save_path = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excelファイル", "*.xlsx")])
if save_path:
converted_data.to_excel(save_path, index=False)
messagebox.showinfo("情報", "ファイルが正常に保存されました。")
if __name__ == "__main__":
main()
主な機能の説明
主な機能は以下の通りです。
load_file()関数では、ファイル選択ダイアログを開き、CSV形式またはExcel形式のファイルを読み込みます。
convert_temperature_units()関数では、指定された列の温度値を、指定された単位から別の単位に変換します。
変換に使用される変換関数は、関数内で定義されています。対応している変換は、摂氏(℃)から華氏(℉)、摂氏からケルビン(K)、華氏から摂氏、華氏からケルビン、ケルビンから摂氏、ケルビンから華氏の6通りです。
main()関数では、GUIを設定し、以下の処理を行います。
- ファイルを読み込む
- 変換したい列名を入力させる
- 変換前の単位を選択させる
- 変換後の単位を選択させる
- 単位変換を実行する
- 変換後のデータを新しいExcelファイルとして保存する
プログラムの最後の if __name__ == "__main__": ブロックでは、プログラムが直接実行された場合にのみ main() 関数が呼び出されます。
プログラムの実行時には、Tkinterによるダイアログボックスが表示され、ユーザーは必要な情報を入力することができます。
変換前と変換後の温度単位は、摂氏、華氏、ケルビンから選択できます。処理が完了すると、変換後のデータがExcelファイルとして保存されます。
注意点としては、入力された列名や単位が無効な場合、エラーメッセージが表示されます。また、ファイルの読み込みや保存に失敗した場合も、適切なメッセージが表示されます。
リットルから立法メートル【逆でも可】
ここまできたらリットルから立法メートル(リューベ)もやっていきます。
ちなみにですが”リューベ”というのは立法メートルを感じで表す時に立法米と表すらしく、
これを訳して立米でいわゆる立(リュウ)米(ベイ)となってるみたいです。
ちなみによく家の広さで使われるヘーベーなんかも同じ理屈で平米からきています。
※コピペでは使えないのであくまで参考にしてください
import pandas as pd
import tkinter as tk
from tkinter import filedialog, simpledialog, messagebox
def load_file():
filepath = filedialog.askopenfilename(filetypes=[("CSVファイル", "*.csv"), ("Excelファイル", "*.xlsx")])
if filepath.endswith('.csv'):
return pd.read_csv(filepath)
else:
return pd.read_excel(filepath)
def convert_volume_units(data, column, from_unit, to_unit):
# リットルから立法メートルへの変換
if from_unit == 'リットル' and to_unit == '立法メートル':
data[column] = data[column] * 0.001
# 立法メートルからリットルへの変換
elif from_unit == '立法メートル' and to_unit == 'リットル':
data[column] = data[column] * 1000
return data
def main():
root = tk.Tk()
root.withdraw()
data = load_file()
if data is None:
return
column = simpledialog.askstring("入力", "変換する列名を入力してください:")
if column not in data.columns:
messagebox.showerror("エラー", "指定された列が見つかりません。")
return
from_unit = simpledialog.askstring("入力", "変換前の単位を入力してください (リットル, 立法メートル):")
to_unit = simpledialog.askstring("入力", "変換後の単位を入力してください (リットル, 立法メートル):")
converted_data = convert_volume_units(data, column, from_unit, to_unit)
save_path = filedialog.asksaveasfilename(defaultextension=".xlsx", filetypes=[("Excelファイル", "*.xlsx")])
if save_path:
converted_data.to_excel(save_path, index=False)
messagebox.showinfo("情報", "ファイルが正常に保存されました。")
if __name__ == "__main__":
main()
主な機能の説明
主な機能は以下の通りです。
load_file()関数では、ファイル選択ダイアログを開き、CSV形式またはExcel形式のファイルを読み込みます。
convert_volume_units()関数では、指定された列の体積値を、リットル(L)から立方メートル(m3)、または立方メートルからリットルに変換します。変換係数は関数内で定義されています。
main()関数では、GUIを設定し、以下の処理を行います。
- ファイルを読み込む
- 変換したい列名を入力させる
- 変換前の単位(リットルまたは立方メートル)を選択させる
- 変換後の単位(リットルまたは立方メートル)を選択させる
- 単位変換を実行する
- 変換後のデータを新しいExcelファイルとして保存する
プログラムの最後の if __name__ == "__main__": ブロックでは、プログラムが直接実行された場合にのみ main() 関数が呼び出されます。
プログラムの実行時には、Tkinterによるダイアログボックスが表示され、ユーザーは必要な情報を入力することができます。
変換前と変換後の体積単位は、リットルと立方メートルから選択できます。処理が完了すると、変換後のデータがExcelファイルとして保存されます。
注意点としては、入力された列名や単位が無効な場合、エラーメッセージが表示されます。
また、ファイルの読み込みや保存に失敗した場合も、適切なメッセージが表示されます。
※このプログラムでは、リットルと立方メートル間の変換しか対応していません。
まとめ
今紹介した3つのプログラムの要点をまとめます。
圧力単位変換プログラム
- CSV/Excelファイルから特定の列のデータを読み込む
- ダイアログでユーザーに変換前後の圧力単位(Pa, kPa, MPa, bar)を入力させる
- 指定された列の値を指定された単位間で変換する
- 変換後のデータをExcelファイルとして保存する
温度単位変換プログラム
- CSV/Excelファイルから特定の列のデータを読み込む
- ダイアログでユーザーに変換前後の温度単位(摂氏、華氏、ケルビン)を入力させる
- 指定された列の値を指定された単位間で変換する(6種類の変換パターンに対応)
- 変換後のデータをExcelファイルとして保存する
体積単位変換プログラム
- CSV/Excelファイルから特定の列のデータを読み込む
- ダイアログでユーザーに変換前後の体積単位(リットル、立方メートル)を入力させる
- 指定された列の値をリットルと立方メートル間で変換する
- 変換後のデータをExcelファイルとして保存する
共通点は、Pandasを使ってファイルを読み書きし、TkinterのGUIでユーザーからの入力を受け取り、指定された単位変換を実行して結果を出力するという処理フローです。
これらのプログラムは、ユーザーがファイルを読み込み特定のデータ列と変換したい単位を選択し、変換後のデータを新しいファイルに保存できるようにしています。
Tkinterを使用したグラフィカルユーザーインターフェース(GUI)により、ファイル選択や単位選択が簡単になっています。
またPandasライブラリを使用してデータの読み込み、処理、保存を行っています。
基本的な構造は同じなのでいろんなことに応用がききそうですね。
Pythonを本気で学びたい人はUdemyでの勉強がおススメです。私も実際に入ってますし、なによりPythonのコースが豊富です。
これからの必須スキルであるPythonを本気で学んで今後の仕事に活かして生きましょう♪
