tkvariousdata.py ライブラリ ドキュメント

このドキュメントは、Python言語で記述された tkvariousdata.py ライブラリの技術的な詳細について説明します。

ライブラリの機能や目的

tkvariousdata.py は、様々な形式の構造化データファイル(特にCSVおよびExcel)を効率的に読み込み、処理し、書き出すためのユーティリティ機能を提供するPythonライブラリです。科学技術計算やデータ分析の分野で頻繁に発生する、表形式データの取り扱いを簡素化することを目的としています。

主な機能:

  • 多様なファイル形式のサポート: CSV (.csv) および Excel (.xlsx, .xlsm) ファイルからのデータ読み込みと書き込みをサポートします。

  • データの抽出とフィルタリング: 特定の列(ラベル名またはインデックスで指定)のデータを抽出し、数値範囲に基づいてフィルタリングする機能を提供します。

  • Excelテンプレートの利用: 既存のExcelテンプレートファイル(特にVBAを含む.xlsmファイル)を使用して、新しいデータを挿入し、グラフや既存データを整形する機能があります。

  • データ型変換: 文字列として読み込まれたデータを、可能な場合は自動的に整数型や浮動小数点型に変換します。

  • Pandas DataFrameとの連携: Pandas DataFrameオブジェクトから直接Excelファイルに出力する機能を提供し、既存のデータ分析ワークフローとの統合を容易にします。

解決する課題:

  • 異なるファイル形式(CSV、Excel)間でのデータ連携における複雑さを軽減します。

  • 手動でのファイル操作や、複雑なライブラリの低レベルAPIを直接操作することなく、統一されたインターフェースでデータを扱えるようにします。

  • 特に、テンプレートを用いたレポート作成など、定型的なデータ出力プロセスを自動化するのに役立ちます。

importする方法

このライブラリの変数、関数、クラスは、以下の方法で他のPythonプログラムにインポートできます。

import tkvariousdata

# または、特定の要素を直接インポート
from tkvariousdata import tkVariousData, find_template, pattern_int, pattern_float

必要な非標準ライブラリとインストール方法

tkvariousdata.py が正しく動作するためには、いくつかの非標準ライブラリが必要です。これらは pip を使用してインストールできます。

  • numpy: 数値計算を効率的に行うためのライブラリです。

    pip install numpy
    
  • pandas: データ構造とデータ分析ツールを提供するライブラリです。

    pip install pandas
    
  • openpyxl: Excelファイル (.xlsx, .xlsm) の読み書きを行うためのライブラリです。

    pip install openpyxl
    

また、このライブラリは tklib というカスタムライブラリに依存しています。tklib はこのドキュメントの範囲外ですが、tkvariousdata.py を使用する環境では tklib も利用可能である必要があります。

importできる変数と関数

変数

  • pattern_int

    • : re.Pattern オブジェクト

    • 説明: 整数形式の文字列 (^[-+]?[0-9]+$) にマッチするための正規表現パターンです。文字列を整数に変換する際に使用されます。

  • pattern_float

    • : re.Pattern オブジェクト

    • 説明: 浮動小数点数形式の文字列 (^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$) にマッチするための正規表現パターンです。文字列を浮動小数点数に変換する際に使用されます。

関数

  • find_template(template)

    • 動作: 指定されたテンプレートファイルパスを以下の順序で検索し、最初に見つかったファイルのフルパスを返します。

      1. 指定された template パスがそのまま存在するファイルか。

      2. スクリプトが実行されているディレクトリからの相対パスとして template が存在するか。

      3. tklib.tkprogvars.tkprog_X_path で定義されたパス内の "excel/template" サブディレクトリに template が存在するか。

    • 引数:

      • template (str): 検索するテンプレートファイルのパスまたはファイル名。

    • 戻り値:

      • (str または None): 見つかったテンプレートファイルの絶対パス。見つからなかった場合は None

クラス

  • class tkVariousData(tkDataFile)

    • tklib.tkdatafile.tkDataFile を継承しており、ファイルパス管理や共通のユーティリティ機能を利用できます。

    • __init__(self, path=None, mode='r', OpenFile=1, data_only=True, **args)

      • 動作: tkVariousData オブジェクトのコンストラクタです。データファイルパス、モード、および初期設定を初期化します。

      • 引数:

        • path (str, optional): 処理するデータファイル(CSVまたはExcel)のパス。デフォルトは None

        • mode (str, optional): ファイルを開くモード(例: 'r' 読み込み、'w' 書き込み)。デフォルトは 'r'。

        • OpenFile (int, optional): ファイルを即座に開くかどうかのフラグ。デフォルトは 1。

        • data_only (bool, optional): Excelファイルを読み込む際、セルの数式ではなく表示されている値のみを読み込むか。デフォルトは True

        • **args: 親クラス tkDataFile のコンストラクタに渡される追加のキーワード引数。

      • 戻り値: なし

    • __del__(self)

      • 動作: オブジェクトが破棄されるときに Close() メソッドを呼び出し、開いているファイルを閉じます。

      • 引数: なし

      • 戻り値: なし

    • __str__(self)

      • 動作: オブジェクトの文字列表現を返します。

      • 引数: なし

      • 戻り値: (str): オブジェクトのクラスパス。

    • Read_minimum_matrix(self, close_fp=False, force_numeric=True, usage=None)

      • 動作: オブジェクトの path に指定されたCSVまたはExcelファイルから、最小限のデータ行列を読み込みます。データはラベル行とデータリストの形式で返されます。

      • 引数:

        • close_fp (bool, optional): 読み込み完了後にファイルポインタを閉じるか。デフォルトは False

        • force_numeric (bool, optional): 可能な限り読み込んだデータを数値型(整数または浮動小数点数)に変換するか。デフォルトは True

        • usage (str, optional): エラーメッセージに含める用途を示す文字列。

      • 戻り値:

        • tuple[list[str], list[list[Any]]): 最初の要素は列ラベルのリスト、2番目の要素は各列のデータがリストになったリスト。

      • エラー: サポートされていないファイルタイプの場合、terminate 関数でプログラムを終了します。

    • read_data(self, infile, xlabel=0, ylabel=1, xmin=None, xmax=None, usage=None)

      • 動作: 指定された入力ファイルからデータを読み込み、X軸とY軸に指定された列のデータを抽出します。オプションでX軸データに基づいてフィルタリングを行います。このメソッドは、self.xself.y、``self.included_index` など、オブジェクトの複数の属性を更新します。

      • 引数:

        • infile (str): 読み込む入力ファイルのパス。

        • xlabel (int or str, optional): X軸データとして使用する列のインデックス(0から始まる)またはラベル名。デフォルトは 0。

        • ylabel (int or str, optional): Y軸データとして使用する列のインデックスまたはラベル名。デフォルトは 1。

        • xmin (float or None, optional): 抽出するXデータの最小値。これより小さいXデータは除外されます。デフォルトは None(無制限)。

        • xmax (float or None, optional): 抽出するXデータの最大値。これより大きいXデータは除外されます。デフォルトは None(無制限)。

        • usage (str, optional): エラーメッセージに含める用途を示す文字列。

      • 戻り値:

        • tuple[list[str], list[list[Any]]): 最初の要素は全列ラベルのリスト、2番目の要素は全データリスト。

      • 副作用: self.labels, self.datalist, self.xlabel, self.ylabel, self.ndata_all, self.x, self.y, self.included_index, self.ndata, self.index などのインスタンス変数を設定します。

    • to_csv(self, outfile, labels, data_list, print_level=1)

      • 動作: 指定されたラベルとデータリストをCSVファイルに書き込みます。浮動小数点数は適宜、指数表記または一般形式でフォーマットされます。

      • 引数:

        • outfile (str): 出力するCSVファイルのパス。

        • labels (list[str]): CSVファイルのヘッダとして使用する列ラベルのリスト。

        • data_list (list[list[Any]]): 書き込むデータ。各内部リストは1つの列のデータを含みます(例: [[col1_row1, col1_row2], [col2_row1, col2_row2]])。

        • print_level (int, optional): 処理メッセージの表示レベル。0の場合メッセージを表示しません。デフォルトは 1。

      • 戻り値:

        • (bool): 書き込みが成功した場合は True、失敗した場合は False

    • reformat_workbook(self, wb)

      • 動作: openpyxl のワークブックオブジェクトを整形します。具体的には、最初のシートのA1からE列の全セルをクリアし、ワークブック内のすべてのシートからグラフを削除します。

      • 引数:

        • wb (openpyxl.Workbook): 整形するExcelワークブックオブジェクト。

      • 戻り値:

        • (openpyxl.worksheet.worksheet.Worksheet): 整形されたワークブックの最初のシート。

    • to_excel_from_dataframe(self, outfile, df, template=None, isheet_create=0, print_level=1)

      • 動作: pandas.DataFrame オブジェクトからデータを抽出し、指定されたExcelファイルに書き込みます。内部的には to_excel メソッドを呼び出します。

      • 引数:

        • outfile (str): 出力するExcelファイルのパス。

        • df (pandas.DataFrame): 書き込むデータを含むPandas DataFrameオブジェクト。

        • template (str or None, optional): 使用するExcelテンプレートファイルのパス。デフォルトは None

        • isheet_create (int, optional): 新しいデータシートを作成する位置のインデックス。0の場合、最初のシートとして作成されます。デフォルトは 0。

        • print_level (int, optional): 処理メッセージの表示レベル。0の場合メッセージを表示しません。デフォルトは 1。

      • 戻り値:

        • (bool): 書き込みが成功した場合は True、失敗した場合は False

    • to_excel(self, outfile, labels, data_list, template=None, isheet_create=0, print_level=1)

      • 動作: 指定されたラベルとデータリストをExcelファイルに書き込みます。テンプレートファイルを使用することも可能です。データが文字列の場合、可能な場合は自動的に数値型(整数または浮動小数点数)に変換されます。

      • 引数:

        • outfile (str): 出力するExcelファイルのパス。

        • labels (list[str] or list[list[str]]): Excelファイルのヘッダとして使用する列ラベルのリスト。ネストされたリストの場合、それらは結合されます。

        • data_list (list[list[Any]] or list[list[list[Any]]]): 書き込むデータ。各内部リストは1つの列のデータを含みます。ネストされたリストの場合、それらは結合されます。

        • template (str or None, optional): 使用するExcelテンプレートファイルのパス。テンプレートが指定され、.xlsm 以外の outfile 拡張子が与えられた場合、自動的に .xlsm に変更されます。デフォルトは None

        • isheet_create (int, optional): 新しいデータシートを作成する位置のインデックス。0の場合、最初のシートとして作成されます。デフォルトは 0。

        • print_level (int, optional): 処理メッセージの表示レベル。0の場合メッセージを表示しません。デフォルトは 1。

      • 戻り値:

        • (bool): 書き込みが成功した場合は True、失敗した場合は False

    • save(self, outfile, labels, data_list, print_level=1)

      • 動作: 出力ファイルパスの拡張子に基づいて、to_excel または to_csv メソッドを呼び出し、データを保存します。サポートされる拡張子は .xlsx.csv です。

      • 引数:

        • outfile (str): 出力ファイルパス。拡張子 (.xlsx または .csv) によって保存形式が決定されます。

        • labels (list[str]): ファイルのヘッダとして使用する列ラベルのリスト。

        • data_list (list[list[Any]]): 書き込むデータ。各内部リストは1つの列のデータを含みます。

        • print_level (int, optional): 処理メッセージの表示レベル。0の場合メッセージを表示しません。デフォルトは 1。

      • 戻り値:

        • (bool): 保存が成功した場合は True、失敗した場合は False

main scriptとして実行したときの動作

tkvariousdata.py のソースコードには、if __name__ == '__main__': ブロックが存在しません。したがって、このファイルを直接Pythonインタプリタで実行しても、特別なスクリプトとしての動作は定義されていません。このファイルは、他のPythonプログラムからインポートされて利用されるライブラリとして設計されています。