DynamoDBからPandas
データフレームにデータをロード

今回pynamodbのライブラリーでPandasデータフレームにDynamoDBからのデータをロードする方法を紹介します。

前提

・AWSのDynamoDBテーブルを作成する
・AWSのアカウントのaws_access_key_idとaws_secret_access_keyを作成する
・pipでpynamodbのライフラリーをインストールする

AWS認証のファイルを追加

AWS認証はこちらで参加してください。

~/.aws/credentials

[default]
aws_access_key_id=XXXXXXXXXXXXX
aws_secret_access_key=XXXXXXXXXXXXX

pynamodbのテーブルを設定する

DynamoDBのテーブルのUserActivityの属性:

  • uid:テーブルのプライマリパーティションキー
  • url:ユーザがアクセスしたURL
  • action:ユーザのアクション
from pynamodb.models import Model
from pynamodb.attributes import UnicodeAttribute

class UserActivity(Model):
    class Meta:
        table_name = "UserActivity"
        region = 'ap-northeast-1'
    uid = UnicodeAttribute(hash_key=True)
    url = UnicodeAttribute(null=True)
    action = UnicodeAttribute(null=True)

pynamoDBでクエリーを実行

uidがあるユーザのアクションをクエリーする

UserActivity.query(uid)

DynamoDBのデータからjson文字列に交換

DynamoDBのデータからjson文字列に交換するために、下記のコードを追加する

import json

class ModelEncoder(json.JSONEncoder):
    def default(self, obj):
        if hasattr(obj, 'attribute_values'):
            return obj.attribute_values
        elif isinstance(obj, datetime.datetime):
            return obj.isoformat()
        return json.JSONEncoder.default(self, obj)

def json_dumps(obj):
    return json.dumps(obj, cls=ModelEncoder)

PandasデータフレームにDynamoDBからのデータをロード

activitiesのデータをpandasにロードする

import pandas as pd
activities = []
for activity in UserActivity.query(uid):
        activities.append(json.loads(json_dumps(activity)))
activities_pds = pd.DataFrame(activities)