チャレンジ #238: LEGO® データ分析(パート2)
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- ミュート
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
先週のチャレンジの回答はこちらで見つけることができます。
このチャレンジは @Sebastian_Chaieb2からのものです。Sebastianさん、ご投稿ありがとうございました!
このチャレンジは、前回の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'
- ページの内容を抽出し、[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を使用します)。
5.最終の出力とPDF表示:
- 最終の出力として、アプリの最後にPDFファイルが表示されるようにします
データソース:https://www.kaggle.com/datasets/rtatman/lego-database?resource=download
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
ダウンロードツールで画像をうまく取得できたときに興奮するのは私だけでしょうか
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
blobのエラーがどうしても解消できず・・・、うまくいくコレクションとそうでないのがあります。なぜでしょう・・・。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
できました!今回のはかなりヘビーな感じですね・・・。
Blobエラーもどうにもならなかったです・・・。一部は何かしら不正な画像になっていそうですね、、、
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
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だとエラーを起こすのだと思います・・・。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する