Free Trial

ウィークリーチャレンジリポジトリ

トップになるためのスキルをお持ちですか? ウィークリーチャレンジを購読しましょう。ベストを尽くして問題を解決し、解決策を共有して、他のユーザーがどのように同じ問題に取り組んだのか確認しましょう。私たちも解答例を共有しています。

チャレンジ #238: LEGO® データ分析(パート2)

AYXAcademy
Alteryx
Alteryx

 

先週のチャレンジの回答はこちらで見つけることができます。

 

このチャレンジは @Sebastian_Chaieb2からのものです。Sebastianさん、ご投稿ありがとうございました!

 

lego-Image.pngこのチャレンジは、前回のLEGO®データ分析(#213)の上級バージョンです。今回も、同じデータセットを使ってレポートを作成しますが、今回はレポートにレゴモデルの画像を組み込みます!

 

また、前回と異なり、このチャレンジで開発するアプリでは、ドロップダウンメニューを組み込み、ユーザーがレゴコレクションを選択できるようにします。さらに、リストボックスは、リストから1つまたは複数のリリース年を選択できるようにします。

 

以下は、このチャレンジを克服するために待ち受けているタスクの内訳です:

 

1.データセットの統合と表の作成:

 

データセットを統合して、以下の列を持つ包括的な表を作成します:

  • Model Number (これは Set ID です)
  • Model Name
  • Year Released
  • Number of Parts
  • Collection Name

 

2.アプリ開発:

 

ユニークなコレクション名(Collection Name)を選択可能なドロップダウンメニューを作成します:

 

  • 前のステップで作成した表の Collection Name 列を使用します
  • 50 以上のモデル名が登録されているコレクションのみを使用します
  • ピリオド(.)、カンマ(,)、およびフォワードスラッシュ(/)を含むコレクション名を除外します

 

ユーザーが、単一のリリース年または複数のリリース年を選択できるリストボックスを設計します:

  • 前のステップで作成した表のYear Released列を使用します

 

3.フィルタリングとモデル選択:

 

アプリユーザーが設定した入力データを使用して表をフィルタリングし、ユーザーが選択したコレクション名と発売年に対応するModel Numberを選択します。

 

4.画像の自動取得:

 

  • 次のウェブサイト(https://brickset.com/search?query=31100&scope=All)からそれぞれのモデルの画像を取得するバッチマクロを作成します
  • 以下の構文を使ってウェブサイトのアドレスを修正します

'https://brickset.com/search?query=' + tostring([Model Number]) + '&scope=All'

 

AYXAcademy_0-1697053408744.png

 

  • ページの内容を抽出し、[Model Number]フィールドの横にhttps://images.brickset.com/sets/images/ を含む行を識別するフィルタを実装します。
  • 画像(JPG)とModel Numberへのパスを抽出します(時々ページに追加の画像が添付されることがあります)
  • [Model Number] = [ExtractedModelNumber]の場合、画像リンクのみを取得するフィルタを使用します
  • 2つ目のダウンロードツールを使用して、画像をblobとしてダウンロードします(JPG画像が間違ったblob形式であるというエラーを出す場合は、ペイロードパラメータContent-Type: application/pngとContent-Disposition: attachmentを使用します)。

AYXAcademy_1-1697053408747.png

 

 

5.最終の出力とPDF表示:

  • 最終の出力として、アプリの最後にPDFファイルが表示されるようにします

 

データソース:https://www.kaggle.com/datasets/rtatman/lego-database?resource=download

https://brickset.com/search/

gawa
16 - Nebula
16 - Nebula

ダウンロードツールで画像をうまく取得できたときに興奮するのは私だけでしょうか

スポイラ
image.png
sanae
ボリード

blobのエラーがどうしても解消できず・・・、うまくいくコレクションとそうでないのがあります。なぜでしょう・・・。

スポイラ
ヒントにあるペイロードパラメータは入れてみたのですがダメでした
challenge_238_start_file_ja_sanae.pngchallenge_238_start_file_ja_sanae_selection.png
challenge_238_start_file_ja_sanae_pdf.png
AkimasaKajitani
17 - Castor
17 - Castor

できました!今回のはかなりヘビーな感じですね・・・。

 

スポイラ
バッチマクロ使わなくてもできますね・・・。一応バッチマクロなし版も残しておきました。

スクリーンショット 2023-10-14 132320.png

Blobエラーもどうにもならなかったです・・・。一部は何かしら不正な画像になっていそうですね、、、

 

 

AkimasaKajitani
17 - Castor
17 - Castor

BlobエラーをPythonツールで解消したものを作成してみました!

 

 

スポイラ

Blobエラーを解消するために、落としてきたBlobをそのままファイルに保存し、それをPythonツールで一度読み込み、jpgファイルとして保存することで正常なjpgファイルに変換し、再度読み込むという回りくどい方法で回避してみました。

Pythonコードは以下のとおりです。Pillowというパッケージを使ってみました。

from ayx import Package
Package.installPackages(['Pillow'])

from ayx import Alteryx
from PIL import Image

df = Alteryx.read("#1")
image_list =[]

print(df['DownloadTempFile'])

for img in df['DownloadTempFile']:
    if img is not None:
        with open(img, mode='rb') as f:
            image_file = Image.open(img)
        image_file.save(img+'.jpg', quality=95)
        image_list.append(img+'.jpg')
    else:
        image_list.append(None)
        
df['image_path'] = image_list

Alteryx.write(df,1)

 
Pythonツールの前の段階で、ダウンロードツールで一時ファイルとして保存し、それをPythonツール内で読み込んだ後、再度jpgとして保存し、最終的に画像ツールで再度読み込み直しています。

基本的にBlobエラーを起こしているのは、Alteryxが使っている画像変換のライブラリかなにかで、何かしら正常ではないjpgだとエラーを起こすのだと思います・・・。


スクリーンショット 2023-10-14 145610.png
DaisukeTsuchiya
パルサー

英語版でかなり苦労した記憶があります。

 

スポイラ
スクリーンショット 2023-10-16 091819.png