個案研究:滑過城市!

Python 中的 AWS Boto 入門

Maksim Pecherskiy

Data Engineer

難題

電動滑板車

Python 中的 AWS Boto 入門

難題

電動滑板車

Python 中的 AWS Boto 入門

資料

service_request_id image lat long public_description
93494 report_113439.jpg 32.723138 -117.128237 Hay un scooter electrico en sidewalk
101502 report_134938839.jpg 32.7077658 -117.1281408 This scooter helped me move a mattress!
101520 report_272819.jpg 32.77605567 -117.100004 There is a scooter blocking the sidewalk
101576 report_3722938.jpg 32.68899358 -117.0584723 I tripped on a stupid scooter
Python 中的 AWS Boto 入門

最終成果

最終成果

Python 中的 AWS Boto 入門

最終成果

最終成果

Python 中的 AWS Boto 入門

最終成果

最終成果

Python 中的 AWS Boto 入門

最終成果

最終成果

Python 中的 AWS Boto 入門

最終成果

最終成果

Python 中的 AWS Boto 入門

初始化 boto3 服務用戶端。

初始化 rekognition 用戶端

rekog = boto3.client('rekognition',
                     region_name='us-east-1', 
                     aws_access_key_id=AWS_KEY_ID, 
                     aws_secret_access_key=AWS_SECRET)

初始化 comprehend 用戶端

comprehend = boto3.client('comprehend',
                     region_name='us-east-1', 
                     aws_access_key_id=AWS_KEY_ID, 
                     aws_secret_access_key=AWS_SECRET)
Python 中的 AWS Boto 入門

初始化 boto3 服務用戶端

初始化 translate 用戶端

translate = boto3.client('translate', 
                         region_name='us-east-1', 
                         aws_access_key_id=AWS_KEY_ID, 
                         aws_secret_access_key=AWS_SECRET)
Python 中的 AWS Boto 入門

將所有描述翻成英文

for index, row in df.iterrows():
    desc = df.loc[index, 'public_description']
    if desc != '':
        resp = translate_fake.translate_text(
          Text=desc, 
          SourceLanguageCode='auto', 
          TargetLanguageCode='en')
        df.loc[index, 'public_description'] = resp['TranslatedText']
Python 中的 AWS Boto 入門

將所有描述翻成英文

service_request_id image lat long public_description
93494 report_113439.jpg 32.723138 -117.128237 Electric scooter on sidewalk
101502 report_134938839.jpg 32.7077658 -117.1281408 This scooter helped me move a mattress!
101520 report_272819.jpg 32.77605567 -117.100004 There is a scooter blocking the sidewalk
101576 report_3722938.jpg 32.68899358 -117.0584723 I tripped on a stupid scooter
Python 中的 AWS Boto 入門

偵測文字情緒

for index, row in df.iterrows():
    desc = df.loc[index, 'public_description']
    if desc != '':
        resp = comprehend.detect_sentiment(
          Text=desc, 
          LanguageCode='en')
        df.loc[index, 'sentiment'] = resp['Sentiment']
Python 中的 AWS Boto 入門

偵測文字情緒

service_request_id image lat long sentiment public_description
93494 report_113439.jpg 32.723138 -117.128237 NEGATIVE Electric scooter on sidewalk
101502 report_134938839.jpg 32.7077658 -117.1281408 POSITIVE This scooter helped me move a mattress!
101520 report_272819.jpg 32.77605567 -117.100004 NEGATIVE There is a scooter blocking the sidewalk
101576 report_3722938.jpg 32.68899358 -117.0584723 NEGATIVE I tripped on a stupid scooter
Python 中的 AWS Boto 入門

偵測影像中的滑板車

df['img_scooter'] = 0
for index, row in df.iterrows():
    image = df.loc[index, 'image']
    response = rekog.detect_labels(
      # Specify the image as an S3Object
      Image={'S3Object': {'Bucket': 'gid-images', 'Name': image}}
    )
    for label in response['Labels']:
        if label['Name'] == 'Scooter':
        df.loc[index, 'img_scooter'] = 1
        break
Python 中的 AWS Boto 入門

偵測影像中的滑板車

service_request_id image img_scooter sentiment lat long public_description
93494 report_113439.jpg 1 NEGATIVE 32.723138 -117.128237 Electric scooter on sidewalk
101502 report_134938839.jpg 1 POSITIVE 32.7077658 -117.1281408 This scooter helped me move a mattress!
101520 report_272819.jpg 0 NEGATIVE 32.77605567 -117.100004 There is a scooter blocking the sidewalk
101576 report_3722938.jpg 1 NEGATIVE 32.68899358 -117.0584723 I tripped on a stupid scooter
Python 中的 AWS Boto 入門

最終統計!

僅選出包含滑板車影像且情緒為負向的列

pickups = df[((df.img_scooter == 1) & (df.sentiment == 'NEGATIVE'))]

num_pickups = len(pickups)

332 台滑板車!

Python 中的 AWS Boto 入門

一起來練習吧!

Python 中的 AWS Boto 入門

Preparing Video For Download...