BigQuery ML-এর সাথে ছবির ডেটা শ্রেণীবিভাগ

১. ভূমিকা

এই কোডল্যাবে, আমরা BigQuery-তে যোগাসনের ছবি সংরক্ষণ ও বিশ্লেষণের ব্যবহারিক প্রয়োগ এবং শুধুমাত্র SQL কাঠামো ব্যবহার করে (অন্য কোনো ধরনের কোড ছাড়া) BigQuery ML-এর সাহায্যে আসনগুলোকে লেবেল করার জন্য একটি ক্লাসিফিকেশন মডেল বাস্তবায়নের বিষয়ে আলোচনা করব।

BigQuery এবং BQML

BigQuery হলো একটি সার্ভারবিহীন, মাল্টি-ক্লাউড ডেটা ওয়্যারহাউস যা কোনো রকম অপারেশনাল ওভারহেড ছাড়াই বাইট থেকে পেটাবাইট পর্যন্ত স্কেল করতে পারে। এই কারণে এটি এমএল (ML) ট্রেনিং ডেটা সংরক্ষণের জন্য একটি চমৎকার পছন্দ। এছাড়াও, এর বিল্ট-ইন BigQuery মেশিন লার্নিং ( BQML ) এবং অ্যানালিটিক্স সক্ষমতা আপনাকে শুধুমাত্র SQL কোয়েরি ব্যবহার করে নো-কোড প্রেডিকশন তৈরি করার সুযোগ দেয়। এবং আপনি ফেডারেটেড কোয়েরির মাধ্যমে বাহ্যিক উৎস থেকে ডেটা অ্যাক্সেস করতে পারেন, যা জটিল ETL পাইপলাইনের প্রয়োজনীয়তা দূর করে। BigQuery-এর সমস্ত সুবিধা সম্পর্কে আরও বিস্তারিত জানতে আপনি BigQuery পেজটি দেখতে পারেন।

এখন পর্যন্ত আমরা BigQuery-কে একটি সম্পূর্ণভাবে পরিচালিত ক্লাউড ডেটা ওয়্যারহাউস হিসেবে জানি, যা ব্যবহারকারীদের স্ট্রাকচার্ড এবং সেমি-স্ট্রাকচার্ড ডেটা বিশ্লেষণ করতে সাহায্য করে। কিন্তু,

  • BigQuery এখন অসংগঠিত ডেটার উপরেও সমস্ত ধরণের অ্যানালিটিক্স এবং এমএল সম্পাদন করার জন্য তার কার্যক্রম প্রসারিত করেছে।
  • অতিরিক্ত কোড না লিখেই আমরা SQL কোয়েরি ব্যবহার করে ছবি, ভিডিও, অডিও ইত্যাদির ওপর বৃহৎ পরিসরে গভীর বিশ্লেষণ, অ্যানালিটিক্স এবং ML সম্পাদন করতে পারি।
  • আমাদের কাঠামোগত এবং অকাঠামোগত ডেটাকে এমনভাবে একত্রিত করার ক্ষমতা আছে, যেন সেগুলি সবই একটি টেবিলে একসাথে বিদ্যমান।

পরবর্তী বিভাগে আলোচিত যোগাসনের শ্রেণীকরণের ব্যবহারিক ক্ষেত্রে আমরা এই বিষয়গুলো নিয়ে আলোচনা করব।

BigQuery ML ব্যবহার করে চিত্র ডেটার শ্রেণিবিন্যাস

স্ট্রাকচার্ড কোয়েরি ব্যবহার করে ছবিকে স্ট্রাকচার্ড ডেটার মতো করে প্রসেস ও বিশ্লেষণ করার ক্ষমতা এখন এক নতুন ধরনের উদ্ভাবন। এখন আমরা BigQuery ML ব্যবহার করে মেশিন লার্নিং ক্লাসিফিকেশন মডেলের মাধ্যমে ফলাফল ভবিষ্যদ্বাণীও করতে পারি। সহজে বোঝার জন্য আমি এর ধাপগুলোকে ৫টি ভাগে ভাগ করেছি:

fe97945bce996e1.jpeg

উপরের ধাপগুলোকে শুধু নাম হিসেবে দেখলে জটিল মনে হতে পারে। এর সাথে জড়িত প্রতিটি উপাদানের, যেমন BigQuery Dataset, BigLake connection, Cloud Storage Buckets (কন্টেইনার), Object Table (বাহ্যিক ডেটা উৎস), BQML ইত্যাদির বিস্তারিত বিবরণ ইমপ্লিমেন্টেশন অংশে দেওয়া আছে। তাই এই পরিভাষাগুলোর সাথে পরিচিত না হলেও হতাশ হবেন না।

আপনি যা তৈরি করবেন

আপনি BQML ব্যবহার করে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত করে একটি ইমেজ ডেটা ক্লাসিফিকেশন মডেল তৈরি করবেন:

  • টেবিল এবং মডেলের উপাদানসমূহ ধারণ করার জন্য একটি BigQuery ডেটাসেট।
  • মডেলের জন্য যোগব্যায়ামের ছবি সংরক্ষণের গুগল ক্লাউড স্টোরেজ (GCS) বাকেট
  • ক্লাউড স্টোরেজ ইমেজ অ্যাক্সেস করার জন্য একটি এক্সটার্নাল টেবিল
  • GCS-এ থাকা ছবিগুলো অ্যাক্সেস করার জন্য এক্সটার্নাল টেবিলের একটি BigLake কানেকশন।
  • BigQuery ML-এ ResNet মডেল
  • তৈরি করা মডেল ব্যবহার করে অনুমান
  • ছবির ডেটা বিশ্লেষণের জন্য BigQuery SQL
  • স্ট্রাকচার্ড এবং আনস্ট্রাকচার্ড ডেটা একসাথে কোয়েরি করার জন্য BigQuery SQL

আপনি যা শিখবেন

  • কীভাবে একটি ক্লাউড স্টোরেজ বাকেট তৈরি করবেন এবং ছবি সংরক্ষণ করবেন
  • BigQuery ডেটাসেট, টেবিল এবং কানেকশন কীভাবে তৈরি করবেন
  • BQML ব্যবহার করে কীভাবে একটি ইমেজ ডেটা ক্লাসিফিকেশন মডেল তৈরি করবেন
  • BigQuery ML ব্যবহার করে তৈরি মডেলের সাহায্যে কীভাবে পূর্বাভাস দেওয়া যায়
  • BigQuery SQL ব্যবহার করে কীভাবে ছবি কোয়েরি করতে হয় এবং স্ট্রাকচার্ড ডেটার সাথে একত্রিত করতে হয়

২. প্রয়োজনীয়তা

  • ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
  • বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট, যেটিতে আপনার BigQuery, ক্লাউড স্টোরেজ এবং BigLake Connection পরিষেবাগুলো অন্তর্ভুক্ত রয়েছে।
  • পরবর্তী অংশে ইমেজ ডেটা ক্লাসিফিকেশন অ্যাপ্লিকেশন তৈরি করার ধাপগুলোর তালিকা রয়েছে।

৩. ডেটাসেট এবং একটি বিগলেক সংযোগ তৈরি করুন

৫টি যোগাসনের ছবি শনাক্তকরণের জন্য, আমি একটি সর্বজনীনভাবে উপলব্ধ ডেটাসেট ব্যবহার করেছি এবং আপনি এই রিপো থেকে ডেটাসেটটি অ্যাক্সেস করতে পারবেন। আমরা যে যোগাসনগুলো শনাক্ত করছি সেগুলো ডাউনডগ, গডেস, প্ল্যাঙ্ক, ট্রি এবং ওয়ারিয়র২-এর মধ্যে সীমাবদ্ধ। BigQuery ডেটাসেট তৈরি শুরু করার আগে, একটি Google Cloud প্রজেক্ট নির্বাচন বা তৈরি করে নিন এবং প্রজেক্টটিতে বিলিং চালু আছে কিনা তা পরীক্ষা করে নিন। BigQuery API এবং BigQuery Connection API সক্রিয় করুন । অনুগ্রহ করে মনে রাখবেন, এই বাস্তবায়নে ব্যবহৃত সমস্ত পরিষেবা আপনার পছন্দের একই অঞ্চলে থাকা উচিত।

ক. নিচে দেখানো ধাপগুলো অনুসরণ করে 'yoga_set' নামক ডেটাসেটটি তৈরি করুন:

BigQuery Editor-এ যান এবং এই কমান্ডটি টাইপ করুন:

CREATE SCHEMA `<<project_id>>.yoga_set`;

খ. BigLake Connection আমাদেরকে BigQuery-এর সূক্ষ্ম অ্যাক্সেস নিয়ন্ত্রণ এবং নিরাপত্তা বজায় রেখে বাহ্যিক ডেটা উৎসের সাথে সংযোগ স্থাপন করতে দেয়, যা আমাদের ক্ষেত্রে ছবির ডেটার জন্য ক্লাউড স্টোরেজ। আমরা ক্লাউড স্টোরেজ থেকে অবজেক্ট পড়ার জন্য এই সংযোগটি ব্যবহার করব। BigLake Connection তৈরি করতে নিচের ধাপগুলো অনুসরণ করুন।

BigQuery পেজের Explorer প্যানে ADD DATA-তে ক্লিক করুন:

4cb42b1245bb0ba6.png BigQuery "বাহ্যিক ডেটা যোগ করুন" স্ক্রিন

বাহ্যিক ডেটা উৎসের সাথে সংযোগ-এ ক্লিক করুন এবং BigLake ও Remote functions বিকল্পটি নির্বাচন করুন:

9ffec2b2bfcc3cd5.png বাহ্যিক ডেটা উৎস সংযোগ কনফিগার করুন

কানেকশন আইডি দিন এবং কানেকশনটি তৈরি করুন। মনে রাখবেন, কানেকশন তৈরি হয়ে গেলে স্ক্রিনে যে সার্ভিস অ্যাকাউন্ট আইডিটি (<SERVICE_ACCOUNT>>) দেখা যাবে, সেটি লিখে রাখতে হবে। আমাদের উদাহরণে, কানেকশন আইডিটি হলো "yoga-pose-conn"। অঞ্চলটিও লিখে রাখতে ভুলবেন না।

৪. গুগল ক্লাউড স্টোরেজ বাকেট তৈরি করুন এবং অনুমতি প্রদান করুন

যে যোগাসনের ভঙ্গিমাগুলোর ওপর ভিত্তি করে আমরা মডেলটি তৈরি করতে চাই, সেগুলোর ইমেজ ফাইল রাখার জন্য আমরা গুগল ক্লাউড স্টোরেজ বাকেট ব্যবহার করব। বাকেট হলো ক্লাউড স্টোরেজের এমন একটি কন্টেইনার যা আমাদের বিশ্লেষণ করার জন্য ব্যবহৃত ছবিগুলো ধারণ করে।

ক. কনসোলে Google Cloud Storage সার্চ করে সেখানে যান, এরপর Buckets হোম পেজে যেতে Buckets-এ ক্লিক করুন এবং CREATE-এ ক্লিক করুন।

a6f6b26cffb53ae0.png গুগল ক্লাউড স্টোরেজ বাকেট পৃষ্ঠা

খ. 'Create a bucket' পেজে, আপনার বাকেটের তথ্য (একটি অনন্য নাম) প্রবেশ করান এবং চালিয়ে যান, নিশ্চিত করুন যে এটি ডেটাসেট এবং উপরের ধাপগুলিতে আলোচিত সংযোগের মতো একই অঞ্চলে রয়েছে এবং 'create' এ ক্লিক করুন।

1280366a42b7bdf6.png গুগল ক্লাউড স্টোরেজ একটি বাকেট তৈরি করার পৃষ্ঠা

পরবর্তী ধাপে যাওয়ার আগে, আপনার সার্ভিস অ্যাকাউন্ট, বাকেট নেম এবং পাথ লিখে রেখেছেন কিনা তা নিশ্চিত করুন।

গ. বাকেটটি তৈরি হয়ে গেলে, আপনার ইমেজগুলো সংরক্ষণ করুন (কনসোল বা ক্লাউড শেল কমান্ডের মাধ্যমে অথবা প্রোগ্রাম্যাটিকভাবে) এবং ইমেজগুলো অ্যাক্সেস করার জন্য কানেকশনের সার্ভিস অ্যাকাউন্টকে (যা আমরা আগে সংরক্ষণ করেছিলাম) প্রয়োজনীয় অনুমতি প্রদান করুন।

> export sa=<<"SERVICE_ACCOUNT">>
> gsutil iam ch serviceAccount:$sa:objectViewer "gs://<<bucket>>"

৫. একটি অবজেক্ট টেবিল তৈরি করুন।

আমাদের তৈরি করা কানেকশনটি ব্যবহার করে বাকেটের অসংগঠিত ডেটা অ্যাক্সেস করার জন্য BigQuery থেকে একটি এক্সটার্নাল অবজেক্ট টেবিল তৈরি করুন। BigQuery এডিটর থেকে নিচের CREATE SQL টি চালান:

CREATE OR REPLACE EXTERNAL TABLE `<<dataset>>.<<table_name>>`
WITH CONNECTION `us.<<connection-name>>`
OPTIONS(
object_metadata="SIMPLE", uris=["gs://<<bucket>>/<<folder_if_exists>>/*.jpg"]);

এক্সটার্নাল টেবিলটি নিচে দেখানো পদ্ধতিতে তৈরি করা হয়:

bda48f566e0c292f.png

চলুন নতুন তৈরি করা এক্সটার্নাল টেবিলটি থেকে দ্রুত একটি পোজ কোয়েরি করি:

SELECT data , uri
FROM `yoga_set.yoga_poses`
WHERE REGEXP_CONTAINS(uri, 'gs://yoga_images/Downdog')
Limit 1;

নিচের স্ক্রিনশটে যেমন দেখতে পাচ্ছেন, আপনি অসংগঠিত ছবিগুলোকে সংগঠিত ডেটার মতোই তৈরি করতে এবং সেগুলোর ওপর কাজ করতে পারেন:

7d1784122b5013f.png

এখন ফলাফলটি দেখার জন্য, উপরের কোয়েরির ফলাফলটি একটি ছোট পাইথন কোডে এক্সপোর্ট করা যাক:

ফলাফল এক্সপোর্ট করতে SAVE RESULTS-এ ক্লিক করুন এবং "CSV Localfile" অপশনটি নির্বাচন করুন। এরপর আপনার Colab Notebook খুলুন (অথবা একটি তৈরি করুন ) এবং নিচের কোডটি টাইপ করুন।

from IPython.display import display
from PIL import Image
import io
import pandas as pd
import base64
df = pd.read_csv('/content/sample_data/<<your_csv>>')
imgdata = base64.b64decode(str(df.data[0]))
image = Image.open(io.BytesIO(imgdata))
display(image)

নিম্নোক্ত ফলাফল দেখতে এটি চালান:

b8edd68cb281786a.png

এখন যেহেতু আমরা এক্সটার্নাল টেবিল তৈরি করেছি এবং শুধুমাত্র SQL কোয়েরি ব্যবহার করে ক্লাউড স্টোরেজ থেকে ছবি অ্যাক্সেস করেছি, চলুন পরবর্তী অংশে অর্থাৎ ক্লাসিফিকেশন মডেল তৈরিতে এগিয়ে যাই।

৬. মডেলটি তৈরি করুন এবং গুগল ক্লাউড স্টোরেজে আপলোড করুন।

এই বাস্তবায়নের জন্য, আমরা এইমাত্র তৈরি করা অবজেক্ট টেবিলের উপর ইনফারেন্স চালানোর জন্য প্রি-ট্রেইনড ResNet 50 মডেলটি ব্যবহার করব। ResNet 50 মডেলটি ইমেজ ফাইল বিশ্লেষণ করে এবং একটি ইমেজ সংশ্লিষ্ট ক্লাসের অন্তর্ভুক্ত হওয়ার সম্ভাবনাকে (লজিটস) প্রতিনিধিত্বকারী একগুচ্ছ ভেক্টর আউটপুট হিসেবে দেয়।

এই ধাপে যাওয়ার আগে, নিশ্চিত হয়ে নিন যে আপনার সমস্ত প্রয়োজনীয় অনুমতি রয়েছে। তারপর নিচের ধাপগুলো অনুসরণ করুন:

  1. এই অবস্থান থেকে মডেলটি ডাউনলোড করুন এবং আপনার স্থানীয় ফোল্ডারে সংরক্ষণ করুন।
  2. এটি আনপ্যাকেজ হয়ে saved_model.pb এবং একটি variables ফোল্ডারে পরিণত হবে।
  3. পূর্ববর্তী বিভাগে তৈরি করা বাকেটটিতে এই দুটি (ফাইল এবং ফোল্ডার) আপলোড করুন

2629ff3eda214946.png ResNet মডেল ফাইলগুলো Google Cloud Storage Bucket 'yoga_images'-এ আপলোড করা হয়েছে।

এই ধাপটি সম্পন্ন হয়ে গেলে, উপরের ছবিতে যেমন দেখা যাচ্ছে, আপনার মডেল সম্পর্কিত ফাইলগুলো ছবিগুলোর সাথে একই বাকেটে থাকবে।

৭. মডেলটি BQML-এ লোড করুন এবং ইনফার করুন।

এই ধাপে, আমরা পূর্বে তৈরি করা এক্সটার্নাল টেবিল হিসেবে ব্যবহৃত BigQuery ডেটাসেটটিতে মডেলটি লোড করব এবং ক্লাউড স্টোরেজে সংরক্ষিত ছবিগুলোর জন্য এটি প্রয়োগ করব।

ক. BigQuery Editor থেকে, নিম্নলিখিত SQL স্টেটমেন্টটি চালান।

CREATE MODEL `<<Dataset>>.<<Model_Name>>`
OPTIONS(
model_type = 'TENSORFLOW',
model_path = 'gs://<<Bucket>>/*');

এক্সিকিউশন সম্পন্ন হয়ে গেলে (যা আপনার ডেটাসেটের উপর নির্ভর করে কিছুটা সময় নিতে পারে), আপনি BigQuery-এর ডেটাসেট সেকশনে মডেলটি তালিকাভুক্ত দেখতে পাবেন।

435fa0919aeb57a6.png BigQuery ডেটাসেটে তৈরি করা মডেলটি তালিকাভুক্ত করা হচ্ছে

খ. মডেলটির ইনপুট ও আউটপুট ফিল্ডগুলো দেখতে এটি পরিদর্শন করুন।

ডেটা সেটটি প্রসারিত করুন এবং আমরা এইমাত্র তৈরি করা 'yoga_poses_resnet' মডেলটিতে ক্লিক করুন। স্কিমা ট্যাবে ক্লিক করুন:

e88928764f10f6ff.png BigQuery মডেল সংজ্ঞা স্কিমা ট্যাব

লেবেল বিভাগে, আপনি "activation_49" ফিল্ডটি দেখতে পাবেন, যা আউটপুট ফিল্ডকে নির্দেশ করে। ফিচার বিভাগে, আপনি "input_1" দেখতে পাবেন, যা সেই ফিল্ডটিকে নির্দেশ করে যেটি মডেলে ইনপুট হিসেবে দেওয়া হবে বলে আশা করা হচ্ছে। আপনার ইনফারেন্স কোয়েরিতে (বা প্রেডিকশন কোয়েরিতে) আপনি "টেস্ট" ডেটার জন্য যে ফিল্ডটি পাস করছেন, সেই ফিল্ড হিসেবে "input_1"-কে রেফারেন্স করবেন।

গ. আপনার যোগাসনটি অনুমান করুন!

চলুন, আমাদের টেস্ট ইমেজ ডেটা শ্রেণীবদ্ধ করার জন্য এইমাত্র তৈরি করা মডেলটি ব্যবহার করি। নিশ্চিত করুন যে আপনার ক্লাউড স্টোরেজ বাকেট থেকে শনাক্ত করা কিছু টেস্ট ইমেজ (যোগাসন) আপনার কাছে আছে, যেগুলো আমরা এক্সটার্নাল টেবিলটি তৈরি করার সময় তাতে অন্তর্ভুক্ত করেছিলাম। এইমাত্র তৈরি করা BQML মডেলটি ব্যবহার করে ইনফারেন্স সম্পাদন করার জন্য আমরা BigQuery-তে বেছে বেছে সেই টেস্ট ইমেজগুলো কোয়েরি করব। পরীক্ষাটি শুরু করতে নিচের কোয়েরিটি ব্যবহার করুন।

SELECT *
FROM ML.PREDICT(
MODEL yoga_set.yoga_poses_resnet,
(SELECT uri, ML.DECODE_IMAGE(data) AS input_1
FROM yoga_set.yoga_poses where REGEXP_CONTAINS(uri,
'gs://yoga_images/Downdog/00000097.jpg')));

উপরের কোয়েরিতে, আমরা একটি টেস্ট ইমেজ সিলেক্ট করি যেটি এক্সটার্নাল টেবিলে একটি নির্দিষ্ট URI ভ্যালু (00000097.jpg) ধারণ করে বলে শনাক্ত করা হয়েছে। এছাড়াও, ML.PREDICT ফাংশনটি যাতে কাজ করতে পারে, সেজন্য SELECT অংশে "input_1" ফিল্ড হিসেবে ML.DECODE_IMAGE কনস্ট্রাক্টটি ব্যবহার করা হয়েছে।

কার্য সম্পাদন সম্পন্ন হলে, আপনি নিচে দেখানো ফলাফলটি দেখতে পাবেন:

867018993845e943.png

যারা ResNet মডেল সম্পর্কে গভীরভাবে জানেন, তাদের জন্য এটি ক্লাসিফিকেশন বুঝতে সহায়ক হবে। অন্যথায়, ক্লাসিফিকেশনটি চাক্ষুষভাবে বোঝার জন্য চলুন একটি ছোট কোড স্নিপেট দেখা যাক।

d. ফলাফল সমতল করা

উপরের আউটপুটটি দেখার একটি উপায় হলো BigQuery SQL-এর UNNEST কনস্ট্রাক্ট ব্যবহার করে activation_49 ফিল্ডের মানগুলোকে ফ্ল্যাট করা। পূর্ববর্তী ধাপের ফলাফল ফ্ল্যাট করার জন্য অনুগ্রহ করে নিচের কোয়েরিটি দেখুন। যদি আপনি ফলাফলস্বরূপ প্রাপ্ত ক্লাসটিকে আরও টেক্সট আকারে লেবেল করতে চান, তাহলে কোয়েরিতে থাকা প্লেসহোল্ডার <<LABEL_LOGIC>>-এর জায়গায় লজিকটি যোগ করতে পারেন (ব্যবহার করার সময় আনকমেন্ট করুন)।

with predictions as (
SELECT
Uri, data, SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 1)] as img,  
i as label_i,
<<LABEL_LOGIC>> label,
Score
FROM ML.PREDICT(
MODEL yoga_set.yoga_poses_resnet,
(SELECT data, uri, ML.DECODE_IMAGE(data) AS input_1
FROM yoga_set.yoga_poses 
WHERE
REGEXP_CONTAINS(uri,'gs://yoga_images/Goddess/00000007.jpg'))),
UNNEST(activation_49) as score WITH OFFSET i)
SELECT * FROM predictions 
ORDER BY score DESC
LIMIT  5;

ক্লাস লেবেলিং লজিক ছাড়া, কোয়েরিটির আউটপুট নিচে দেওয়া হলো:

71f580f41f0811f3.png

তবে আমার ক্ষেত্রে, আমি একটি নমুনা লজিক প্রয়োগ করেছি এবং তার ফলাফল নিচে দেওয়া হলো:

1c6df6ecd14fba1.png

আপনি মডেলটি সম্পর্কে আরও পড়তে পারেন এবং আপনার ডেটা ও মডেলের আউটপুটের সাথে সবচেয়ে ভালোভাবে কাজ করে এমন যুক্তি প্রয়োগ করতে পারেন।

e. অনুমানের দৃশ্যায়ন

অবশেষে, ক্লাসিফিকেশনের ফলাফল ভিজ্যুয়ালাইজ করার জন্য একটি ছোট পাইথন কোড! উপরের কোয়েরির ফলাফলটি একটি CSV ফাইলে এক্সপোর্ট করুন এবং পাইথন কোডে সেটিকে রেফারেন্স হিসেবে ব্যবহার করুন।

68756e7e4b8d7a29.png

উপরের ছবির আউটপুটটি 'ডাউনওয়ার্ড ডগ' নামক যোগাসনকে নির্দেশ করে, যা হুবহু সেই একই টেস্ট ইনপুট যা আমরা BQML ব্যবহার করে ক্লাসিফিকেশনের জন্য ML.PREDICT কোয়েরিতে দিয়েছিলাম!

৮. কাঠামোগত এবং অকাঠামোগত ডেটার একীকরণ

সবশেষে, এই বাস্তবায়নের আমার সবচেয়ে পছন্দের অংশ হলো আমার স্ট্রাকচার্ড রিলেশনাল টেবিলের ফিল্ডগুলোকে এই আনস্ট্রাকচার্ড ইমেজ ডেটার সাথে একীভূত করা। পোজ এবং এর স্বাস্থ্য সম্পর্কিত ডেটা রাখার জন্য আমি এক্সটার্নাল টেবিলের ডেটাসেটেই একটি স্ট্রাকচার্ড BigQuery টেবিল তৈরি করেছি।

125bdf848c86fbe.png BigQuery স্ট্রাকচার্ড টেবিল "yoga_health" স্কিমা

উপরের চিত্রটি "yoga_health" নামক স্ট্রাকচার্ড ডেটা টেবিলের স্কিমা উপস্থাপন করে এবং এর ফিল্ডগুলো হলো pose, focus, health_benefit ও breath। নিচের কোয়েরিটি স্ট্রাকচার্ড এবং আনস্ট্রাকচার্ড উভয় ডেটাকে যুক্ত করে:

SELECT SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 2)] as pose,
a.health_benefit, breath, focus, data
FROM `abis-345004.yoga_set.yoga_health` a, yoga_set.yoga_poses b
WHERE a.pose = SPLIT(uri, "/")[OFFSET(ARRAY_LENGTH(SPLIT(uri, "/")) - 2)];

নিম্নে ফলাফল দেওয়া হলো:

469bdfcffa9e19fd.png

দ্রষ্টব্য: এই ব্লগে আলোচিত সমস্ত কোয়েরি BigQuery Magic কমান্ড ব্যবহার করে সরাসরি আপনার পাইথন নোটবুক থেকে চালানো যেতে পারে।

৯. পরিষ্কার করুন

এই পোস্টে ব্যবহৃত রিসোর্সগুলোর জন্য আপনার গুগল ক্লাউড অ্যাকাউন্টে চার্জ হওয়া এড়াতে, এই ধাপগুলো অনুসরণ করুন।

  1. Google Cloud কনসোলে, রিসোর্স পরিচালনা (Manage resources) পৃষ্ঠায় যান।
  2. প্রজেক্ট তালিকা থেকে আপনি যে প্রজেক্টটি মুছতে চান সেটি নির্বাচন করুন এবং তারপর ডিলিট-এ ক্লিক করুন।
  3. ডায়ালগ বক্সে প্রজেক্ট আইডি টাইপ করুন, এবং তারপর প্রজেক্টটি ডিলিট করতে শাট ডাউন-এ ক্লিক করুন।

১০. অভিনন্দন

অভিনন্দন! আপনি সফলভাবে BigQuery-তে অসংগঠিত ডেটা সংরক্ষণ ও কোয়েরি করেছেন, BQML ব্যবহার করে একটি ক্লাসিফিকেশন মডেল তৈরি করেছেন এবং সেই মডেলের সাহায্যে পরীক্ষামূলক যোগাসনগুলোর পূর্বাভাস দিয়েছেন। আপনি যদি এটি বাস্তবায়ন করতে চান, তবে আপনার গুগল ক্লাউড প্রজেক্টটি শুরু করে দিন। এছাড়াও, আপনি যদি ডেটাবেস বা গুগল ক্লাউডে অন্যান্য এন্ড-টু-এন্ড অ্যাপ্লিকেশন বাস্তবায়ন সম্পর্কে আরও জানতে চান, তবে অনুগ্রহ করে আমার ব্লগগুলো দেখুন।