Python 仕事の話

Pythonで圧力とか温度の単位を一瞬で変換する【単位変換して別ファイルに保存】

※アフィリエイト広告を利用しています

SHIN

ガジェット好きの凡人会社員
未経験からシステム業務をしてる人
※Pythonでの業務効率化に挑戦中
自分の勉強の為の自由帳ブログ運営

こんにちは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ライブラリを使用してデータの読み込み、処理、保存を行っています。

基本的な構造は同じなのでいろんなことに応用がききそうですね。

GUIって大事!

Pythonを本気で学びたい人はUdemyでの勉強がおススメです。私も実際に入ってますし、なによりPythonのコースが豊富です。

これからの必須スキルであるPythonを本気で学んで今後の仕事に活かして生きましょう♪

多彩な講座から自分に合った講座を探そう!

プログラミング言語カテゴリー

  • この記事を書いた人

SHIN

ガジェット好きの凡人会社員
未経験からシステム業務をしてる人
※Pythonでの業務効率化に挑戦中
自分の勉強の為の自由帳ブログ運営

-Python, 仕事の話