VosaicのモーメントのデータをCSVファイルとしてダウンロードする際、現状ではモーメントの開始時間(Start Time)と終了時間(End Time)は秒の位までが表示される仕様となっています。

「Start Time」と「End Time」の列は1秒の単位まで表示され、09:41となっています。

元となるXMLファイルを確認すると、小数点以下の数値まで記録されています。

CSVで9:41と表示されているStart Timeは、実際には581.760293ということがわかります。

そこで、この数値をそのままExcel上でも表示できるよう、XMLファイルからCSVファイルに変換するプログラムを生成AIの力を借りて考えてみました。

プロンプトを試行錯誤しながら、Google Geminiを使って作成してみたのが次のPythonのプログラムです。

import csv
import xml.etree.ElementTree as ET

def xml_to_csv(xml_path, csv_file):
    # XMLファイルを解析
    tree = ET.parse(xml_path)
    root = tree.getroot()

    # CSVファイルを開く
    with open(csv_file, 'w', encoding='utf-16') as f:
        # CSVファイルのヘッダー行を書く
        writer = csv.writer(f)
        header = [
            "Start Time",
            "End Time",
            "Duration in Seconds",
            "Form Title",
            "Moment Name",
            "User",
            "Moment Sequence",
            "Number of Tags",
            "Global Moment Sequence",
            "Comments",
            "Tags"
        ]
        writer.writerow(header)

        # 各instanceタグについて処理を行う
        moment_sequence = 1
        for i, instance in enumerate(root.findall('ALL_INSTANCES/instance')):
            # Start Time, End Time, Duration in Seconds を取得
            start_time = float(instance.find('start').text)
            end_time = float(instance.find('end').text)
            duration_in_seconds = end_time - start_time

            # Form Title を取得
            form_title = xml_path.split('/')[-1]

            # Moment Name を取得
            moment_name = instance.find('code').text

            # User, Moment Sequence を設定
            user = ''
            moment_sequence_instance = moment_sequence

            # Number of Tags を取得
            number_of_tags = len(instance.findall('label/text'))

            # Global Moment Sequence を取得
            global_moment_sequence = i + 1

            # Comments を取得
            comments = instance.find('free_text').text if instance.find('free_text') else ''

            # Tags を取得
            tags = []
            for text_tag in instance.findall('label/text'):
                tags.append(text_tag.text)
            tags_text = ', '.join(tags)

            # CSVファイルに1行分のデータを書き込む
            data = [
                start_time,
                end_time,
                duration_in_seconds,
                form_title,
                moment_name,
                user,
                moment_sequence_instance,
                number_of_tags,
                global_moment_sequence,
                comments,
                tags_text
            ]
            writer.writerow(data)

            # 次のMoment NameのMoment Sequenceを更新
            if moment_name != instance.find('code').text:
                moment_sequence += 1

if __name__ == '__main__':
    # 変換元のXMLファイルのパスを指定
    xml_path = ''

    # 変換後のCSVファイルのパスを指定
    csv_file = ''

    # XMLファイルをCSVファイルに変換
    xml_to_csv(xml_path, csv_file)

    print('XMLファイルをCSVファイルに変換しました。')

このプログラムで、最初に示したXMLファイルをCSVファイルに変換し、Excelに読み込んでみると、次の画像のように表示されました。

Start Timeが581.760293秒と表示されています。

最近のアップデートで、フレーム単位(1/30秒)でのコマ送りを矢印キーで行うことができるようになりました。これと合わせて、より詳細な分析に繋げていただけますと幸いです。

お断り:私自身はプログラミングに関する知識が乏しいので、上記のプログラムが最適なものなのかどうかについては自信がございません。もし何か間違いやもっと良い方法がございましたら、ご助言やご指摘をいただけますと幸いです。

(橘 肇/Vosaic総代理店 橘図書教材

[ Provided by Vosaic ]

カテゴリー: