2024年7月10日水曜日

技術メモ 遺物台帳電子化データの効率的分類作業

 Technical memo: Efficient classification of digitized artifact ledger data


I am working on classifying the digitized Ariyoshi Kita Kaizuka north slope shell layer artifact ledger.

I have achieved the task of "matching" and classifying the name column of the artifact ledger using a Python script, and automatically writing the classification code using a Python script. I have achieved the task of "leaving the tedious work to Python."


電子化した有吉北貝塚北斜面貝層遺物台帳の分類作業に取組んでいます。

遺物台帳の名称欄をPythonスクリプトで「名寄せ」して分類し、その分類コードをPythonスクリプトで自動で書き込む作業が実現しました。「面倒な作業はPythonに任せる」が実現しました。

1 遺物台帳名称欄を「名寄せ」するPythonスクリプト

有吉北貝塚北斜面貝層の遺物台帳にうち、土器・土製品に関するデータは20923件あります。この土器・土製品に関するデータを分類するために、遺物台帳名称欄の文字記述を名寄せして分類しました。


遺物台帳名称欄(データ総計20923件)


名寄せした結果(データ総計212件)

参考 名寄せPythonスクリプトをChatGPTに依頼した質問文

「Excelファイル"E:\test\ggg.xlsx"のD列(左から4番目)には文字列が書き込まれています。この文字列の種別リストと種別数を求め、その結果をExcelファイル"E:\test\jjj.xlsx"に書き込むPythonスクリプトを教えてください。

"E:\test\jjj.xlsx"には、A列(左から1番目)に種別リストを、B列(左から2番目)にその数を書き込みます。」

参考 名寄せPythonスクリプト(ChatGPT回答)



import pandas as pd

# 入力ファイルと出力ファイルのパス
input_file = r"E:\test\ggg.xlsx"
output_file = r"E:\test\jjj.xlsx"

# Excelファイルからデータを読み込む
df = pd.read_excel(input_file, sheet_name=0)

# D列のデータを取得(0インデックスなので、3はD列)
d_column_data = df.iloc[:, 3]

# 種別リストと種別数を計算
category_counts = d_column_data.value_counts()

# データフレームに変換
result_df = pd.DataFrame({
    '種別リスト': category_counts.index,
    '種別数': category_counts.values
})

# 結果を新しいExcelファイルに書き込む
result_df.to_excel(output_file, index=False, header=['種別リスト', '種別数'])


2 遺物台帳「名称欄」名寄せ結果に基づく分類

遺物台帳「名称欄」の分類は「土器か土製品か」「土器部位、土製品種別」「朱塗」の3視点から行いました。そのうち「土器部位、土製品種別」の視点から行った分類は次の通りです。

●分類コード番号2

1…(土器)土器

2…(土器)口縁部

3…(土器)底部

4…(土器)把手

11…(土製品)土錘

12…(土製品)円盤

13…(土製品)耳飾

14…(土製品)11、12、13以外の土製品

この分類コードを遺物台帳「名称欄」名寄せ結果(212件)に手作業で確認しながら当てはめました。


遺物台帳「名称欄」名寄せ結果を分類した様子(分類コード番号2)

「名称-分類コード」の対応表(辞書)を作成したことになります。


3 「名称-分類コード」対応表を使った、遺物台帳への分類コード記入

「名称-分類コード」対応表(212件の辞書)を使って、遺物台帳(20923件)へ分類コードを記入しました。この記入は次のPythonスクリプトでほんの数秒でできました。手作業なら1週間の仕事になりそうです。


遺物台帳分類コード記入結果(データ総計20923件)

参考 「名称-分類コード」対応表をつかった分類コード記入PythonスクリプトをChatGPTに依頼した質問文

Excelファイル"E:\test\hhh.xlsx"のD列(左から4番目)には名称が文字列で記入されています。この文字列に対応する分類コード番号2をM列(左から13番目)に書き込むPythonスクリプトを教えてください。

名称と分類コード番号の対応はExcelファイル"E:\test\lll.xlsx"のA列(左から1番目)が名称、C列(左から3番目)が分類コード番号2になります。


参考 「名称-分類コード」対応表をつかった分類コード記入Pythonスクリプト


import pandas as pd

# 入力ファイルと対応表ファイルのパス
input_file = r"E:\test\hhh.xlsx"
mapping_file = r"E:\test\lll.xlsx"

# 入力ファイルからデータを読み込む
input_df = pd.read_excel(input_file, sheet_name=0)

# 対応表ファイルからデータを読み込む
mapping_df = pd.read_excel(mapping_file, sheet_name=0)

# 対応表を辞書に変換(名称 -> 分類コード番号2)
mapping_dict = pd.Series(mapping_df.iloc[:, 2].values, index=mapping_df.iloc[:, 0]).to_dict()

# D列のデータを名称として取得し、対応する分類コード番号2をM列に書き込む
input_df['分類コード番号2'] = input_df.iloc[:, 3].map(mapping_dict)

# 結果を新しいExcelファイルに書き込む(上書き保存)
input_df.to_excel(input_file, index=False)

print("分類コード番号2の書き込みが完了しました。")


4 感想

データ数が数百程度なら、あるいは1000~2000なら、以上の作業はExcel機能を使って全部手作業で行えます。これまでは実際に類似作業を手作業で行って、その作業を楽しんでいました。しかし、データ数が万の単位になると手作業は現実的ではありません。今回Pythonを利用して「面倒な作業はPythonに任せる」が実現したことは、自分にとって感動的です。

また、Pythonスクリプトをつくる際のChatGPT質問文の作り方にも慣れてきて、ChatGPTとのやりとりがとても円滑になっています。(あるいはChatGPTが高性能化しているのかもしれません。)

遺物台帳データの整備が進んだ段階でExcelファイルからデータベースファイルに移行して、SQLで分析作業を行うことを予定しています。SQLを使えば各種分類分析作業がより効率的になりそうです。



0 件のコメント:

コメントを投稿