MENU

Pythonによるデータフレームの読み込み、および可視化

はじめに

Pythonを用いて、データフレームの読み込み、および可視化を行うヘルパー関数を作成しました。データ分析においてはコンソールで確認すればよいので必要ないのですが、記事作成にあたり少し見栄えの良いものが欲しかったため作成しました。

目次

GUI で DataFrame を表示する関数

この関数はデータフレームを視覚的に表示するためのものです。

ソースコード

from tkinter import ttk

import customtkinter as ctk


def df_viewer(df):
    """
    DataFrame を GUI ウィンドウに表示する関数。

    Args:
        df (pd.DataFrame): 表示するデータフレーム
    """

    # 外観設定(ダーク/ライトモード & テーマカラー)
    ctk.set_appearance_mode("System")  # "Dark", "Light", "System"
    ctk.set_default_color_theme("blue")

    # メインウィンドウの作成
    root = ctk.CTk()
    root.title("DataFrame Viewer")
    root.geometry("800x500")  # ウィンドウサイズを設定

    # メインフレームの作成
    frame = ctk.CTkFrame(root)
    frame.pack(fill="both", expand=True, padx=10, pady=10)

    # DataFrame を表示する Treeview(テーブル)を作成
    tree = ttk.Treeview(frame, columns=list(df.columns), show="headings")

    # 列ヘッダーの設定
    for col in df.columns:
        tree.heading(col, text=col)  # ヘッダー名を設定
        tree.column(col, width=150, anchor="center")  # 列幅を設定

    # データフレームの行をテーブルに追加
    for row in df.itertuples(index=False):
        tree.insert("", "end", values=row)

    # 縦スクロールバーの追加
    scrollbar = ctk.CTkScrollbar(frame, command=tree.yview)
    tree.configure(yscrollcommand=scrollbar.set)  # スクロールバーを有効化

    # Grid を使ってレイアウト調整
    frame.grid_rowconfigure(0, weight=1)
    frame.grid_columnconfigure(0, weight=1)

    # 各ウィジェットをグリッドに配置
    tree.grid(row=0, column=0, sticky="nsew")
    scrollbar.grid(row=0, column=1, sticky="ns")

    # ウィンドウを閉じたときに次の処理へ進む
    def on_closing():
        root.quit()  # `mainloop()` を終了し、次の処理へ
        root.destroy()  # ウィンドウを閉じる

    root.protocol(
        "WM_DELETE_WINDOW", on_closing
    )  # 閉じるボタン(×)を押したときの処理を設定

    # ウィンドウを表示(閉じるまで処理を一時停止)
    root.mainloop()

処理の概要

このスクリプトは以下の流れで処理を行います。

  1. customtkinter を使用して GUI ウィンドウを作成。
  2. DataFrame の内容を Treeview ウィジェットに表示。
  3. スクロールバーを追加し、大量のデータにも対応。
  4. ユーザーがウィンドウを閉じるまでデータを表示。

外観の設定

ctk.set_appearance_mode("System")  # "Dark", "Light", "System"
ctk.set_default_color_theme("blue")
  • set_appearance_mode("System") により、OS の設定に応じたダーク/ライトモードを適用。
  • set_default_color_theme("blue") で GUI の基本色を青系統に設定。

メインウィンドウの作成

root = ctk.CTk()
root.title("DataFrame Viewer")
root.geometry("800x500")
  • CTk() を用いてメインウィンドウを作成。
  • title("DataFrame Viewer") でウィンドウのタイトルを設定。
  • geometry("800x500") でウィンドウサイズを 800×500 ピクセルに指定。

Treeview(テーブル)の作成

tree = ttk.Treeview(frame, columns=list(df.columns), show="headings")
  • Treeview を使用して、DataFrame を表形式で表示。
  • columns=list(df.columns) で DataFrame の列名を取得し、列として設定。
  • show="headings" により、デフォルトのツリー構造を無効化し、ヘッダーを表示。

データの挿入

for row in df.itertuples(index=False):
    tree.insert("", "end", values=row)
  • itertuples(index=False) により、DataFrame をタプル形式で取得。
  • tree.insert("", "end", values=row) で各行のデータをテーブルに追加。

ウィンドを閉じる処理

def on_closing():
    root.quit()
    root.destroy()
root.protocol("WM_DELETE_WINDOW", on_closing)
  • on_closing() 関数を作成し、ウィンドウを閉じる際の処理を定義。
  • root.protocol("WM_DELETE_WINDOW", on_closing) で閉じるボタン (×) を押した際に on_closing() を実行。

.pkl ファイルをオブジェクトとして読み込む関数

ソースコード

この関数は、指定された .pkl ファイルを開き、その中のオブジェクトを復元するシンプルな処理を行います。

import pickle
from pathlib import Path

def pkl_opener(file_path):
    """
    指定した .pkl ファイルを読み込み、オブジェクトとして返す関数。

    Args:
        file_path (str): .pkl ファイルのパス

    Returns:
        object: 読み込まれたオブジェクト(失敗時は None)
    """
    try:
        path = Path(file_path)
        if not path.exists():
            raise FileNotFoundError(f"ファイルが見つかりません: {file_path}")

        with path.open("rb") as f:
            data = pickle.load(f)

        print(f".pkl ファイルが正常に読み込まれました (データ型: {type(data)}).")
        return data
    except Exception as e:
        print(f"エラーが発生しました: {e}")
        return None

処理の概要

この関数は .pkl ファイルを読み込み、保存されているオブジェクトを返します。

  • pickle を使用して .pkl ファイルをバイナリモードで開く。
  • pathlib を利用してファイルの存在を確認し、適切なエラーハンドリングを実施。
  • 読み込んだオブジェクトの型を出力し、返す。
  • 失敗時はエラーメッセージを出力し、None を返す。

pathlib と pickle を使用して .pkl ファイルを読み込む

path = Path(file_path)
if not path.exists():
    raise FileNotFoundError(f"ファイルが見つかりません: {file_path}")

with path.open("rb") as f:
    data = pickle.load(f)
  • Path(file_path) を使用して、.pkl ファイルのパスをオブジェクトとして扱う。
  • open("rb") により、バイナリモードで .pkl ファイルを開く。
  • pickle.load(f) でファイル内のデータを復元。

オブジェクトの型を確認する処理

print(f".pkl ファイルが正常に読み込まれました (データ型: {type(data)}).")
return data
  • print() で読み込み成功のメッセージとオブジェクトの型を出力。
  • return data で復元したオブジェクトを返す。

エラーハンドリングと例外処理

except Exception as e:
    print(f"エラーが発生しました: {e}")
    return None

return None でエラー時は None を返す。

try-except ブロックを使用して、エラーが発生した場合に適切に処理。

print(f"エラーが発生しました: {e}") でエラーメッセージを出力。

処理の概要

この関数は以下の流れで処理を行います。

  • 指定した .pkl ファイルを pandas で読み込む。
  • 読み込み成功時は DataFrame を返し、エラーハンドリングを実施。
  • 読み込み失敗時はエラーメッセージを出力し、None を返す。

pandas を使用して .pkl ファイルを読み込む

df = pd.read_pickle(file_path)
  • pd.read_pickle(file_path) を使用して、指定した .pkl ファイルを読み込む。
  • .pkl ファイルは Python のオブジェクトを保存・復元できるバイナリ形式のファイル。

正常に読み込まれた場合の処理

print(".pkl ファイルが正常に読み込まれました。")
return df
  • print() で読み込み成功のメッセージを出力。
  • return df で読み込んだ DataFrame を返す。

エラーハンドリング

except Exception as e:
    print(f"エラーが発生しました: {e}")
    return None
  • try-except ブロックを使用して、エラーが発生した場合に適切に処理。
  • print(f"エラーが発生しました: {e}") でエラーメッセージを出力。
  • return None でエラー時は None を返す。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次