見出し画像

Copilot(無印)・ChatGPT-4・Geminiの比較

googleのGeminiが日本語に対応し、BardがGeminiになりました。
また、MicrosoftもCopilotが使えます(ただし、無印です)。
それらと、ChatGPT-4とを比較してみました。

Pythonのコードで比較

比較は、同じ指示でPythonのコードがどう違うかで比較してみました。

指示した文章

1指定されたフォルダ内のすべての .xlsx ファイルを探索します。
2各ファイルの指定されたシートから34行目から36行目までのデータを抽出します。
3新しいExcelファイルを作成し、2のデータを追加し、A列にコピー元のファイル名を記載します。
以上のことを行うPythonのコードが知りたいです。

Copilot

import os
import pandas as pd
from tkinter import filedialog
from tkinter import Tk

def combine_excel_files(folder_path):
    all_data_frames = []
    for filename in os.listdir(folder_path):
        if filename.endswith('.xls') or filename.endswith('.xlsx'):
            file_path = os.path.join(folder_path, filename)
            df = pd.read_excel(file_path, sheet_name=0)  # シート1を読み込む
            all_data_frames.append(df)

    combined_df = pd.concat(all_data_frames, ignore_index=True)
    return combined_df

def save_combined_file(combined_df):
    root = Tk()
    root.withdraw()  # ファイルダイアログのみ表示
    file_path = filedialog.asksaveasfilename(defaultextension='.xlsx')
    if file_path:
        combined_df.to_excel(file_path, index=False)
        print(f"ファイルが保存されました: {file_path}")
    else:
        print("ファイルの保存がキャンセルされました。")

# フォルダ選択ダイアログを表示
root = Tk()
root.withdraw()  # ダイアログのみ表示
folder_selected = filedialog.askdirectory()
root.destroy()

if folder_selected:
    combined_data = combine_excel_files(folder_selected)
    save_combined_file(combined_data)
else:
    print("フォルダが選択されませんでした。")

34行目から36行目の指定がないコードです。
一応、そのことを突っ込んだら、修正はしてきましたが、コードを細かく見ないと、失敗しています。
また、Tkinterは、特に不要かなと。自分で使うだけであれば、そんなにGUIこだわらないので。

Gemini

import glob
import pandas as pd

# フォルダパス
folder_path = "your/folder/path"

# シート名
sheet_name = "your_sheet_name"

# 出力ファイル名
output_file_name = "output.xlsx"

# 出力データフレーム
df_all = pd.DataFrame()

# フォルダ内のすべての .xlsx ファイルを探索
for filepath in glob.glob(f"{folder_path}/*.xlsx"):
    # ファイル名を取得
    filename = filepath.split("/")[-1]

    # Excelファイルを読み込み
    df = pd.read_excel(filepath, sheet_name=sheet_name, skiprows=33, nrows=3)

    # A列にファイル名を追加
     df.insert(0, 'Source File', filename)

    # データフレームを結合
    df_all = pd.concat([df_all, df], ignore_index=True)

# 出力Excelファイルを作成
df_all.to_excel(output_file_name, index=False)

print("処理が完了しました。")

だいぶ、すっきりしたコードですね。
パスの指定の仕方がわかりやすく、処理完了のメッセージが、地味にありがたいです。
処理完了のメッセージは、いつも、自分でも
print("finish")
と入れていました。

ChatGPT-4

import os
import pandas as pd

# 検索するフォルダパスとシート名を設定
folder_path = '指定されたフォルダのパス'  # 例: '/path/to/folder'
sheet_name = 'シート名'  # 例: 'Sheet1'
output_file = 'output.xlsx'

# 新しいExcelファイルに追加するための空のリストを作成
data_frames = []

# 指定されたフォルダ内のすべての.xlsxファイルを探索
for filename in os.listdir(folder_path):
    if filename.endswith('.xlsx'):
        file_path = os.path.join(folder_path, filename)
        
        # 指定されたシートから34行目から36行目までのデータを読み込み
        data = pd.read_excel(file_path, sheet_name=sheet_name, header=None, skiprows=33, nrows=3)
        
        # コピー元のファイル名を最初の列に挿入
        data.insert(0, 'Source File', filename)
        
        # リストにDataFrameを追加
        data_frames.append(data)

# すべてのDataFrameを結合
combined_data = pd.concat(data_frames, ignore_index=True)

# 新しいExcelファイルにデータを書き込み
combined_data.to_excel(output_file, index=False)

Geminiに近いですが、glob関数と、listdir関数で違いが出ています。
globのほうが、ワイルドカードなどでも検索できるようなので、汎用性は、そちらのほうが高いかもしれません。

まとめ

コードを書いてもらうのに、Copilotは、ちょっと向いてなさそうですね。
また、今回試した範囲では、GeminiとChatGPTを比較した場合、個人的には、Geminiに軍配が上がったかなと思います。
しかも、Geminiは、無課金のものなので、ultraにグレードアップすれば、さらにいいのかもしれません。

一度、Geminiにも課金してみようかな。。。





いいなと思ったら応援しよう!