こんにちは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を本気で学んで今後の仕事に活かして生きましょう♪