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にも課金してみようかな。。。