LivelogからPythonによるテキストデータ抽出

# PythonとExcelを活用したライブ情報の自動化と解析

## はじめに

Livelogは、ライブ情報をメモするためのモバイルアプリです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/a864b545-81ca-8d15-0c9b-a3e7483c1b74.png)


https://youthkee.github.io/livelog/

普段、このアプリでライブの参戦履歴を記録していますが、ExcelやPythonでデータを集計したいので、
内部のテキストデータをもとにPythonでExcelで書き起こすことにしました。
![IMG_8015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/21b8b69f-d922-c6b1-db1c-d6b80ba72070.png)

![IMG_8014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/7dbd2668-4ce8-86ec-2fbe-6f7e05015592.png)






## コード

Livelogからエクスポートしたテキストデータをlive_txt.pyというファイルへ貼り付けています。
以下はその例です。

```python
live_txt.py

#ここに貼り付ける
live_txt=r"""{
{
	"live534": {
		"id": 534,
		"title": "札幌リリイベ",
		"date": "2022/05/06",
		"open": "",
		"start": "16:00",
		"adv": "",
		"door": "",
		"area": "",
		"place": "タワレコ札幌",
		"address": "",
		"info": "",
		"artists": {
			"artist0": {
				"name": "でんぱ組",
				"setlist": {},
				"members": {}
			}
		},
		"type": "",
		"genre": "",
		"ticket": "",
		"attendance": "参加済",
		"memo": "",
		"report": ""
	},
	"live378": {
		"id": 378,
		"title": "アイドルジェネレーション vol.59",
		"date": "2019/10/20",
		"open": "",
		"start": "",
		"adv": "",
		"door": "",
		"area": "",
		"place": "渋谷ストリームホール",
		"address": "",
		"info": "",
		"artists": {
			"artist0": {
				"name": "かみやど",
				"setlist": {},
				"members": {}
			},
			"artist1": {
				"name": "ちゅーどり",
				"setlist": {},
				"members": {}
			}
		},
		"type": "",
		"genre": "",
		"ticket": "",
		"attendance": "参加済",
		"memo": "",
		"report": ""
	}
}
"""

def func():
    return live_txt

```


このコードで上記のlive_txt.pyからライブ情報を受け取って、
Excelに書き起こします。

```python
import os
import openpyxl
import live_txt

# 作業ディレクトリを設定
os.chdir(r"path/to/your/folder")

# 新しいExcelワークブックとワークシートを作成
title = "Live info"
wb = openpyxl.Workbook()
ws = wb.worksheets[0]

# 列ヘッダーを設定
ws["A1"].value = "title"
ws["B1"].value = "date"
ws["C1"].value = "place"
ws["D1"].value = "artist"
ws["E1"].value = "artist1"
ws["F1"].value = "artist2"
ws["G1"].value = "artist3"
ws["H1"].value = "artist4"

# 行の追跡のためのカウンタ変数
cnt = 2

# live_txtモジュールからライブ情報を取得
live_list = live_txt.func().split(",")

# 各ライブ情報について繰り返し処理
for info in live_list:
    if "title" in info:
        ws.cell(cnt, 1).value = info[13:-1]
    if "date" in info:
        ws.cell(cnt, 2).value = info[12:-1]
    if "place" in info:
        ws.cell(cnt, 3).value = info[13:-1]
    if "artist0" in info:
        ws.cell(cnt, 4).value = info[45:-1]
    if "artist1" in info:
        ws.cell(cnt, 5).value = info[30:-1]
    if "artist2" in info:
        ws.cell(cnt, 6).value = info[30:-1]        
    if "artist3" in info:
        ws.cell(cnt, 7).value = info[30:-1]        

    if "report" in info:
        cnt += 1

# ワークブックをExcelファイルとして保存
wb.save(title + '.xlsx')
```

出力結果はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/721038cd-58c3-fd48-b9a1-3c6b64cebd0c.png)



## コードの理解


1. まず、ファイル操作に`os`、Excelファイルの操作に`openpyxl`、ライブ情報データを提供する`live_txt`モジュールをインポートします。

2. `os.chdir()`を使用して、Excelファイルを保存する場所を設定します。

3. `openpyxl.Workbook()`を使用して新しいワークブックとワークシートを作成します。ワークシートは`ws`変数に代入されます。

4. セルA1からH1にヘッダーを設定します。

5. カウンタ変数として`cnt`を設定します。この変数は、ライブ情報を書き込むExcelシートの行番号を追跡するために使用されます。

6. `live_txt.func()`関数を呼び出してライブ情報データを取得し、JSONのような文字列として返します。

7. JSONのような文字列を`split(",")`メソッドを使用してライブ情報のリストに分割します。

8. `live_list`内の各`info`に対して繰り返し処理を行います。

9. ループ内では、各`info`文字列に特定のキーワードが含まれているかどうかをチェックし、対応する値をExcelシートの該当するセルに代入します。値は、`info`文字列の構造に基づいて文字列スライスを使用して抽出されます。

10. キーワード"report"が`info`文字列内で見つかった場合、カウンタ変数`cnt`がインクリメントされ、次のライブ情報セットのためにExcelシートの次の行に移動します。

11. 最後に、指定されたタイトルと拡張子'.xlsx'でワークブックをExcelファイルとして保存します。

## JSONでの読み込み　追記:2023/06/10
いろいろな人からJSONでparseしたら？とアドバイスもらったので、やってみました。
artistsのところがネスト構造とリストを含んでいるので処理が必要ですができそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/5ea307eb-c057-11dc-0182-1cdc56ac46b1.png)

参考記事

https://qiita.com/kawada2017/items/937b6bd5ea81ea7974ad



## おまけ

ライブ会場の都道府県の情報が欲しかったので、chatGPTに投げてみた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/1f8a3a24-05ba-dcca-0e60-5dac23a8abcf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1086849/920b5542-9398-c9b2-266b-582b5a68dce5.png)

```
                    Place  Prefecture
0             ZeppNagoya       Aichi
1            日本特殊陶業ホール       Aichi
2              名古屋ReNY       Aichi
3             イオンモール土浦    Ibaraki
4                 ひたちなか    Ibaraki
5         水戸light house    Ibaraki
6      Kingdam Crazy mama    Okinawa
7                  にゅーぷれ    Okinawa
8                     沖縄    Okinawa
9                  那覇市内    Okinawa
10               美ら海水族館    Okinawa
11           オフィスゴコマチ   Hiroshima
12                   広島   Hiroshima
13     広島JMSアステールプラザ   Saitama
14   HMVイオンモール浦和美園店   Saitama
15             SPINNS大宮   Saitama
16           イオンモール北戸田   Saitama
17        イオン越谷レイクタウン   Saitama
18       スタジオサンパティック      Tokyo
19            ボートレース戸田      Tokyo
20             メットライフドーム      Tokyo
21            ららぽーと富士見      Tokyo

```

ローカルな会場は厳しいようです。

## まとめ

このブログ記事では、Pythonと`openpyxl`ライブラリを使用して、ライブ情報を収集し、Excelファイルに整理する自動化プロセスについて探求しました。提供されたコードでは、`live_txt`というカスタムモジュールを使用して、JSONのような形式でライブイベントのデータを取得します。

このコードを理解し、ライブイベントデータに合わせてカスタマイズすることで、ライブ情報を簡単に管理・分析する強力なツールを作成できます。データをExcelファイルとして保存できるため、必要に応じてデータをさらに処理・可視化することができます。