Nghiên cứu tình huống: Tạo kho báo cáo

Giới thiệu về AWS Boto trong Python

Maksim Pecherskiy

Data Engineer

Sản phẩm cuối

Sản phẩm cuối

Giới thiệu về AWS Boto trong Python

Các bước

Chuẩn bị dữ liệu
  • Tải các tệp trong tháng từ bucket dữ liệu thô
  • Nối chúng thành một CSV
  • Tạo DataFrame tổng hợp
Giới thiệu về AWS Boto trong Python

Các bước

Tạo báo cáo
  • Ghi DataFrame ra CSV và HTML
  • Tạo biểu đồ Bokeh, lưu dạng HTML
Giới thiệu về AWS Boto trong Python

Các bước

Tải báo cáo lên website chia sẻ
  • Tạo bucket gid-reports
  • Tải cả ba tệp của tháng lên S3
  • Tạo tệp index.html liệt kê tất cả tệp
  • Lấy URL website!
Giới thiệu về AWS Boto trong Python

Bucket dữ liệu thô

Bucket dữ liệu thô

  • Tệp riêng tư
  • CSV hằng ngày từ Ứng dụng
  • Dữ liệu thô

Bucket yêu cầu Gid

Giới thiệu về AWS Boto trong Python

Đọc tệp dữ liệu thô

# Tạo danh sách để chứa các DataFrame
df_list = []

# Yêu cầu danh sách các CSV từ S3 theo tiền tố; Lấy nội dung response = s3.list_objects( Bucket='gid-requests', Prefix='2019_jan')
# Lấy nội dung phản hồi request_files = response['Contents']
Giới thiệu về AWS Boto trong Python

Đọc tệp dữ liệu thô

# Lặp qua từng đối tượng
for file in request_files:
    obj = s3.get_object(Bucket='gid-requests', Key=file['Key'])

# Đọc thành DataFrame obj_df = pd.read_csv(obj['Body'])
# Thêm DataFrame vào danh sách df_list.append(obj_df)
Giới thiệu về AWS Boto trong Python

Đọc tệp dữ liệu thô

# Nối tất cả DataFrame trong danh sách
df = pd.concat(df_list)

# Xem trước DataFrame df.head()

Xem trước DataFrame

Giới thiệu về AWS Boto trong Python

Tạo báo cáo tổng hợp

  • Thực hiện một số tổng hợp
  • df.to_csv('jan_final_report.csv')
  • df.to_html('jan_final_report.html')
  • jan_final_chart.html

Báo cáo đã tổng hợp

Giới thiệu về AWS Boto trong Python

Bucket báo cáo

Bucket báo cáo

  • Website bucket
  • Truy cập công khai
  • Dữ liệu tổng hợp và báo cáo HTML

Bucket báo cáo

Giới thiệu về AWS Boto trong Python

Tải CSV tổng hợp lên

# Tải CSV tổng hợp lên S3
s3.upload_file(Filename='./jan_final_report.csv', 
                      Key='2019/jan/final_report.csv', 
                      Bucket='gid-reports',
                      ExtraArgs = {'ACL': 'public-read'})
Giới thiệu về AWS Boto trong Python

Tải bảng HTML lên

# Tải bảng HTML lên 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'})
Giới thiệu về AWS Boto trong Python

Tải biểu đồ HTML lên

# Tải biểu đồ tổng hợp lên 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'})
Giới thiệu về AWS Boto trong Python

Báo cáo đã tải lên

Đã tải báo cáo

Giới thiệu về AWS Boto trong Python

Tạo index.html

# Liệt kê các đối tượng bucket gid-reports bắt đầu với 2019/
r = s3.list_objects(Bucket='gid-reports', Prefix='2019/')

# Chuyển nội dung phản hồi thành DataFrame objects_df = pd.DataFrame(r['Contents'])
# Tạo cột "Link" chứa url website + key base_url = "https://gid-reports." objects_df['Link'] = base_url + objects_df['Key']
Giới thiệu về AWS Boto trong Python

Tạo index.html

# Ghi DataFrame ra html
objects_df.to_html('report_listing.html', 
                   columns=['Link', 'LastModified', 'Size'],
                   render_links=True)

Ghi DF ra html

Giới thiệu về AWS Boto trong Python

Tải index.html lên

# Tải tệp lên thư mục gốc bucket gid-reports.
s3.upload_file(
  Filename='./report_listing.html', 
  Key='index.html', 
  Bucket='gid-reports',
  ExtraArgs = {
    'ContentType': 'text/html', 
    'ACL': 'public-read'
  })
Giới thiệu về AWS Boto trong Python

Lấy URL của index!

URL website bucket *


"http://gid-reports.index.html"
Giới thiệu về AWS Boto trong Python

Hãy tinh chỉnh!

Giới thiệu về AWS Boto trong Python

Preparing Video For Download...