ケーススタディ:レポート用リポジトリの生成

Python で始める AWS Boto 入門

Maksim Pecherskiy

Data Engineer

最終成果物

最終成果物

Python で始める AWS Boto 入門

手順

データを準備
  • 生データのバケットから当月のファイルを取得
  • 1 つの CSV に結合
  • 集計用 DataFrame を作成
Python で始める AWS Boto 入門

手順

レポートを作成
  • DataFrame を CSV と HTML に書き出し
  • Bokeh プロットを生成し、HTML として保存
Python で始める AWS Boto 入門

手順

共有用サイトにアップロード
  • gid-reports バケットを作成
  • 当月の 3 ファイルをすべて S3 にアップロード
  • すべてのファイルを列挙する index.html を生成
  • ウェブサイト URL を取得
Python で始める AWS Boto 入門

生データ用バケット

生データ用バケット

  • 非公開ファイル
  • アプリからのリクエストの毎日 CSV
  • 生データ

Gid requests バケット

Python で始める AWS Boto 入門

生データを読み込む

# DataFrame を格納するリストを作成
df_list = []

# プレフィックス付きで S3 から CSV 一覧を取得;内容を取得 response = s3.list_objects( Bucket='gid-requests', Prefix='2019_jan')
# レスポンスの内容を取得 request_files = response['Contents']
Python で始める AWS Boto 入門

生データを読み込む

# 各オブジェクトを反復
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# DataFrame として読み込み obj_df = pd.read_csv(obj['Body'])
# DataFrame をリストへ追加 df_list.append(obj_df)
Python で始める AWS Boto 入門

生データを読み込む

# リスト内の全 DataFrame を結合
df = pd.concat(df_list)

# DataFrame をプレビュー df.head()

DataFrame のプレビュー

Python で始める AWS Boto 入門

集計レポートを作成

  • 集計を実行
  • df.to_csv('jan_final_report.csv')
  • df.to_html('jan_final_report.html')
  • jan_final_chart.html

集計済みレポート

Python で始める AWS Boto 入門

レポート用バケット

レポート用バケット

  • バケットのウェブサイト
  • 公開アクセス可
  • 集計データと HTML レポート

レポート用バケット

Python で始める AWS Boto 入門

集計 CSV をアップロード

# 集計 CSV を S3 にアップロード
s3.upload_file(Filename='./jan_final_report.csv', 
                      Key='2019/jan/final_report.csv', 
                      Bucket='gid-reports',
                      ExtraArgs = {'ACL': 'public-read'})
Python で始める AWS Boto 入門

HTML テーブルをアップロード

# HTML テーブルを S3 にアップロード
s3.upload_file(Filename='./jan_final_report.html', 
                      Key='2019/jan/final_report.html', 
                      Bucket='gid-reports',
                      ExtraArgs = {
                        'ContentType': 'text/html',
                        'ACL': 'public-read'})
Python で始める AWS Boto 入門

HTML チャートをアップロード

# 集計チャートを S3 にアップロード
s3.upload_file(Filename='./jan_final_chart.html', 
                      Key='2019/jan/final_chart.html', 
                      Bucket='gid-reports',
                      ExtraArgs = {
                        'ContentType': 'text/html',
                        'ACL': 'public-read'})
Python で始める AWS Boto 入門

アップロード済みレポート

アップロード済みレポート

Python で始める AWS Boto 入門

index.html を作成

# 2019/ で始まる gid-reports バケットのオブジェクトを一覧
r = s3.list_objects(Bucket='gid-reports', Prefix='2019/')

# レスポンス内容を DataFrame 化 objects_df = pd.DataFrame(r['Contents'])
# ウェブサイト URL + Key を含む「Link」列を作成 base_url = "https://gid-reports." objects_df['Link'] = base_url + objects_df['Key']
Python で始める AWS Boto 入門

index.html を作成

# DataFrame を HTML に書き出し
objects_df.to_html('report_listing.html', 
                   columns=['Link', 'LastModified', 'Size'],
                   render_links=True)

DF を HTML に書き出し

Python で始める AWS Boto 入門

index.html をアップロード

# ファイルを gid-reports バケット直下にアップロード
s3.upload_file(
  Filename='./report_listing.html', 
  Key='index.html', 
  Bucket='gid-reports',
  ExtraArgs = {
    'ContentType': 'text/html', 
    'ACL': 'public-read'
  })
Python で始める AWS Boto 入門

index の URL を取得

バケットのウェブサイト URL *


"http://gid-reports.index.html"
Python で始める AWS Boto 入門

少し調整しましょう

Python で始める AWS Boto 入門

Preparing Video For Download...