0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Excelに吐き出されていたチャット履歴をCosmosDB にインポートしたときのメモ

Posted at

はじめに

Excelに吐き出されていたチャット履歴のデータを、生成AIに食べさせてみたりするために一度CosmosDBにまるっとインポートしたときの個人的なメモ

中身のデータがこんな感じのExcelファイルだったので、python使ってJSONに変換して突っ込みました

ChatID type Createdon MessageText
a0001 user 2024-04-04 13:56:13 ○○システムのライセンスを付与していただきたいです
a0001 supporter 2024-04-04 14:20:53 こちらの事前の手順を完了させたのち、このチャットでご連絡ください。URL:XXXXXXXX
a0001 user 2024-04-05 08:48:59 資料ありがとうございます。
a0001 user 2024-04-08 09:45:10 事前の作業完了しました。
a0001 supporter 2024-04-08 09:45:10 確認が取れましたので、これからライセンスを付与いたします。
a0001 supporter 2024-04-08 10:07:21 ライセンスの付与が完了しました。Welcomeメールが配信されているかと思いますのでそちらからご利用ください
a0002 user 2024-04-08 15:29:34 機種変更した際に二要素認証の設定を移すのを忘れました。一度リセットお願いします
a0002 supporter 2024-04-08 15:32:26 解除しました。再度登録をお願いします
a0002 user 2024-04-08 15:48:07 新しい機種で設定できました。ありがとうございました。

CosmosDB のリソース作る

リソースはコアで作ります
image.png

お試しなので、AZは無効、容量はServerlessにして作っておきます
image.png

基本的にデフォルトで作成しますが、バックアップはContinuous (7 days)にしておきます
image.png

コンテナを作る

データエクスプローラを起動してコンテナを作っていく
image.png

NewContainerから新しくコンテナを作成する(ついでにDBも作る

  • Database Id:ChatHistoryDB
  • ContainerId:ChatData
  • PartitionKey:chatId

あたりを入力してOK
image.png

Excelファイル開いてインポートする関数を作成する

使うライブラリ

requirements.txt
pandas
openpyxl
azure-cosmos

データは一連の会話がChatID単位にまとまってるようだったので、この単位にデータを入れていくように今回はしました。

app.py
import pandas as pd
from azure.cosmos import CosmosClient, PartitionKey
import json

# Cosmos DBの接続情報
COSMOS_ENDPOINT = "<your endpoint>"
COSMOS_KEY = "<your Key>"
DATABASE_NAME = "ChatHistoryDB" #作成したDBのID
CONTAINER_NAME = "ChatData"     #作成したコンテナのID
PARTITION_KEY= "/chatId"        #作成したパーティションのキー

# Cosmos DBクライアントの初期化
client = CosmosClient(COSMOS_ENDPOINT, COSMOS_KEY)
database = client.create_database_if_not_exists(id=DATABASE_NAME)
container = database.create_container_if_not_exists(
    id=CONTAINER_NAME,
    partition_key=PartitionKey(path=PARTITION_KEY),
    offer_throughput=400
)

# Excelファイルの読み込み
file_path = r"C:\work\user-chat-history.xlsx"
sheet_name = "Message data"
df = pd.read_excel(file_path, sheet_name=sheet_name)

# データをチャットID単位にグループ化
grouped = df.groupby('chatId')

# グループごとにデータをCosmos DBに格納
# デフォルトでID列ができてしまうので、chatIdと同じ値を入れておく
for chat_id, group in grouped:
    chat_data = {
        "id": chat_id,
        "chatId": chat_id,
        "messages": []
    }
    print(chat_id)
    for index, row in group.iterrows():
        message = {
            "type": row['type'],
            "UserID": row['UserID'],
            "Createdon": row['Createdon'],
            "MessageText": row['MessageText']
        }
        chat_data["messages"].append(message)
    
    # データの挿入
    #idが重複した場合は上書きする
    container.upsert_item(body=chat_data)

print("データのインポートが完了しました。")

これでCosmosDBにインポートできた

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?