ایجاد تحولات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy

ایجاد تحولات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy

شرکت‌ها به جای تمرکز بر روی کد، باید روی توسعه روش‌های مهندسی سیستماتیک برای بهبود داده‌ها به روش‌هایی که قابل اعتماد، کارآمد و سیستماتیک هستند، تمرکز کنند. به عبارت دیگر، شرکت ها باید از رویکرد مدل محور به رویکرد داده محور حرکت کنند. - اندرو نگ

یک رویکرد هوش مصنوعی مبتنی بر داده شامل ساخت سیستم‌های هوش مصنوعی با داده‌های باکیفیت شامل آماده‌سازی داده‌ها و مهندسی ویژگی‌ها است. این می تواند یک کار خسته کننده شامل جمع آوری داده ها، کشف، پروفایل، پاکسازی، ساختار، تبدیل، غنی سازی، اعتبارسنجی و ذخیره ایمن داده ها باشد.

Amazon SageMaker Data Rangler یک سرویس در است Amazon SageMaker Studio که یک راه حل انتها به انتها برای وارد کردن، آماده سازی، تبدیل، مشخص کردن و تجزیه و تحلیل داده ها با استفاده از کدگذاری کم یا بدون کد ارائه می دهد. می‌توانید یک جریان آماده‌سازی داده‌های Data Wrangler را در جریان‌های کاری یادگیری ماشین (ML) خود ادغام کنید تا پیش‌پردازش داده‌ها و مهندسی ویژگی‌ها را ساده کنید، بدون نیاز به نوشتن کد PySpark، نصب Apache Spark یا چرخش خوشه‌ها، آماده‌سازی داده‌ها را سریع‌تر به تولید برسانید.

برای سناریوهایی که باید اسکریپت های سفارشی خود را برای تبدیل داده ها اضافه کنید، می توانید منطق تبدیل خود را در Pandas، PySpark، PySpark SQL بنویسید. Data Wrangler اکنون از کتابخانه های NLTK و SciPy برای نوشتن تبدیل های سفارشی برای آماده سازی داده های متنی برای ML و انجام بهینه سازی محدودیت ها پشتیبانی می کند.

ممکن است با سناریوهایی مواجه شوید که در آن باید اسکریپت های سفارشی خود را برای تبدیل داده ها اضافه کنید. با قابلیت تبدیل سفارشی Data Wrangler، می توانید منطق تبدیل خود را در Pandas، PySpark، PySpark SQL بنویسید.

در این پست، در مورد اینکه چگونه می توانید تبدیل سفارشی خود را در NLTK بنویسید تا داده های متنی برای ML آماده کنید، بحث می کنیم. ما همچنین چند نمونه تبدیل کد سفارشی را با استفاده از سایر چارچوب های رایج مانند NLTK، NumPy، SciPy، و scikit-learn و همچنین خدمات هوش مصنوعی AWS به اشتراک خواهیم گذاشت. برای این تمرین از مجموعه داده تایتانیک، یک مجموعه داده محبوب در جامعه ML است که اکنون به عنوان یک اضافه شده است مجموعه داده نمونه در Data Wrangler.

بررسی اجمالی راه حل

Data Wrangler بیش از 40 رابط داخلی برای وارد کردن داده ها فراهم می کند. پس از وارد شدن داده ها، می توانید تجزیه و تحلیل داده ها و تبدیل های خود را با استفاده از بیش از 300 تبدیل داخلی ایجاد کنید. سپس می توانید خطوط لوله صنعتی ایجاد کنید تا ویژگی ها را به سمت آن سوق دهید سرویس ذخیره سازی ساده آمازون (Amazon S3) یا فروشگاه ویژگی آمازون SageMaker. نمودار زیر معماری سطح بالا انتها به انتها را نشان می دهد.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

پیش نیازها

Data Wrangler یک ویژگی SageMaker است که در داخل موجود است Amazon SageMaker Studio. می توانید دنبال کنید فرآیند ورود به استودیو برای چرخاندن محیط استودیو و نوت بوک ها. اگرچه می‌توانید از میان چند روش احراز هویت انتخاب کنید، ساده‌ترین راه برای ایجاد دامنه استودیو پیروی از آن است دستورالعمل های شروع سریع. Quick Start از همان تنظیمات پیش‌فرض مانند راه‌اندازی استاندارد Studio استفاده می‌کند. شما همچنین می توانید با استفاده از سوار شدن را انتخاب کنید مرکز هویت AWS IAM (جانشین AWS Single Sign-On) برای احراز هویت (نگاه کنید به ورود به دامنه Amazon SageMaker با استفاده از مرکز هویت IAM).

وارد کردن مجموعه داده تایتانیک

محیط Studio خود را راه اندازی کنید و یک محیط جدید ایجاد کنید جریان مخاصمه داده. می توانید داده های خود را وارد کنید یا از یک مجموعه داده نمونه (تایتانیک) همانطور که در تصویر زیر نشان داده شده است استفاده کنید. Data Wrangler به شما امکان می دهد مجموعه داده ها را از منابع داده مختلف وارد کنید. برای مورد استفاده ما، مجموعه داده نمونه را از یک سطل S3 وارد می کنیم.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

پس از وارد کردن، دو گره (گره منبع و گره نوع داده) را در جریان داده خواهید دید. Data Wrangler به طور خودکار نوع داده را برای تمام ستون های مجموعه داده شناسایی می کند.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تغییرات سفارشی با NLTK

برای آماده سازی داده ها و مهندسی ویژگی ها با Data Wrangler، می توانید از بیش از 300 تبدیل داخلی استفاده کنید یا تبدیل های سفارشی خود را بسازید. تبدیل های سفارشی را می توان به صورت مراحل جداگانه در Data Wrangler نوشت. آنها بخشی از فایل .flow در Data Wrangler می شوند. ویژگی تبدیل سفارشی از Python، PySpark و SQL به عنوان مراحل مختلف در قطعه کد پشتیبانی می کند. پس از اینکه فایل‌های نوت‌بوک (ipynb.) از فایل .flow تولید شدند یا فایل .flow به‌عنوان دستور غذا استفاده شد، تکه‌های کد تبدیل سفارشی بدون نیاز به تغییر باقی می‌مانند. این طراحی Data Wrangler به تبدیل های سفارشی اجازه می دهد تا به بخشی از یک کار پردازش SageMaker برای پردازش مجموعه داده های عظیم با تبدیل های سفارشی تبدیل شوند.

مجموعه داده تایتانیک چند ویژگی دارد (نام و home.dest) که حاوی اطلاعات متنی است. ما استفاده می کنیم NLTK برای تقسیم ستون نام و استخراج نام خانوادگی و چاپ فراوانی نام خانوادگی. NLTK یک پلت فرم پیشرو برای ساخت برنامه های پایتون برای کار با داده های زبان انسان است. این رابط کاربری آسان برای استفاده را فراهم می کند بیش از 50 مجموعه و منبع واژگانی مانند WordNet، همراه با مجموعه‌ای از کتابخانه‌های پردازش متن برای طبقه‌بندی، نشانه‌گذاری، ریشه‌گذاری، برچسب‌گذاری، تجزیه و استدلال معنایی، و بسته‌بندی‌هایی برای کتابخانه‌های پردازش زبان طبیعی با قدرت صنعتی (NLP).

برای افزودن یک تبدیل جدید، مراحل زیر را انجام دهید:

  1. علامت مثبت را انتخاب کرده و انتخاب کنید Transform را اضافه کنید.
  2. را انتخاب کنید مرحله را اضافه کنید و انتخاب کنید تبدیل سفارشی.

شما می توانید با استفاده از Pandas، PySpark، توابع تعریف شده توسط کاربر Python و SQL PySpark یک تبدیل سفارشی ایجاد کنید.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

  1. را انتخاب کنید پایتون (پاندا) و کد زیر را برای استخراج نام خانوادگی از ستون نام اضافه کنید:
    import nltk
    nltk.download('punkt')
    tokens = [nltk.word_tokenize(name) for name in df['Name']] # Extract the last names of the passengers
    df['last_name'] = [token[0] for token in tokens]

  2. را انتخاب کنید پیش نمایش برای بررسی نتایج

تصویر زیر نشان می دهد last_name ستون استخراج شد

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

  1. با استفاده از کد زیر، مرحله تبدیل سفارشی دیگری را برای شناسایی توزیع فراوانی نام‌های خانوادگی اضافه کنید:
    import nltk
    fd = nltk.FreqDist(df["last_name"])
    print(fd.most_common(10))

  2. را انتخاب کنید پیش نمایش برای بررسی نتایج فرکانس.ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تغییرات سفارشی با خدمات AWS AI

خدمات هوش مصنوعی از پیش آموزش دیده AWS اطلاعات آماده ای را برای برنامه ها و گردش کار شما فراهم می کند. خدمات هوش مصنوعی AWS به راحتی با برنامه های شما ادغام می شوند تا به بسیاری از موارد استفاده رایج رسیدگی کنند. اکنون می توانید از قابلیت های خدمات AWS AI به عنوان یک مرحله تبدیل سفارشی در Data Wrangler استفاده کنید.

درک آمازون از NLP برای استخراج بینش در مورد محتوای اسناد استفاده می کند. با شناسایی موجودیت ها، عبارات کلیدی، زبان، احساسات و سایر عناصر مشترک در یک سند، بینش ها را توسعه می دهد.

ما از Amazon Comprehend برای استخراج موجودیت ها از ستون نام استفاده می کنیم. مراحل زیر را کامل کنید:

  1. یک مرحله تبدیل سفارشی اضافه کنید.
  2. را انتخاب کنید پایتون (پاندا).
  3. برای استخراج موجودیت ها کد زیر را وارد کنید:
    import boto3
    comprehend = boto3.client("comprehend") response = comprehend.detect_entities(LanguageCode = 'en', Text = df['name'].iloc[0]) for entity in response['Entities']:
    print(entity['Type'] + ":" + entity["Text"])

  4. را انتخاب کنید پیش نمایش و نتایج را تجسم کنید.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

اکنون سه تبدیل سفارشی را در Data Wrangler اضافه کرده ایم.

  1. را انتخاب کنید گردش داده ها برای تجسم جریان داده سرتاسر.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تغییرات سفارشی با NumPy و SciPy

NumPy یک کتابخانه منبع باز برای پایتون است که توابع ریاضی جامع، مولد اعداد تصادفی، روال های جبر خطی، تبدیل فوریه و غیره را ارائه می دهد. SciPy یک کتابخانه منبع باز پایتون است که برای محاسبات علمی و محاسبات فنی استفاده می شود، شامل ماژول هایی برای بهینه سازی، جبر خطی، ادغام، درون یابی، توابع ویژه، تبدیل فوریه سریع (FFT)، پردازش سیگنال و تصویر، حل کننده ها و غیره است.

تبدیل های سفارشی Data Wrangler به شما امکان می دهد پایتون، PySpark و SQL را به عنوان مراحل مختلف ترکیب کنید. در جریان Data Wrangler زیر، توابع مختلف از بسته های Python، NumPy و SciPy در مجموعه داده تایتانیک به صورت چند مرحله اعمال می شوند.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تبدیل NumPy

ستون کرایه مجموعه داده تایتانیک کرایه‌های سوار شدن مسافران مختلف را دارد. هیستوگرام ستون کرایه توزیع یکنواخت را نشان می دهد، به جز آخرین بن. با اعمال تبدیل های NumPy مانند log یا ریشه مربع، می توانیم توزیع را تغییر دهیم (همانطور که با تبدیل ریشه مربع نشان داده شده است).

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai. ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

کد زیر را ببینید:

import pandas as pd
import numpy as np
df["fare_log"] = np.log(df["fare_interpolate"])
df["fare_sqrt"] = np.sqrt(df["fare_interpolate"])
df["fare_cbrt"] = np.cbrt(df["fare_interpolate"])

تحولات SciPy

توابع SciPy مانند z-score به عنوان بخشی از تبدیل سفارشی برای استاندارد کردن توزیع کرایه با میانگین و انحراف استاندارد اعمال می‌شوند.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

کد زیر را ببینید:

df["fare_zscore"] = zscore(df["fare_interpolate"])
from scipy.stats import zscore

بهینه سازی محدودیت با NumPy و SciPy

تبدیل‌های سفارشی Data Wrangler می‌توانند تبدیل‌های پیشرفته‌ای مانند بهینه‌سازی محدودیت با اعمال توابع بهینه‌سازی SciPy و ترکیب SciPy با NumPy را انجام دهند. در مثال زیر، کرایه به عنوان تابعی از سن هیچ روند قابل مشاهده ای را نشان نمی دهد. با این حال، بهینه سازی محدودیت می تواند کرایه را به عنوان تابعی از سن تغییر دهد. شرط محدودیت در این مورد این است که کرایه کل جدید مانند کرایه کل قبلی باقی بماند. تبدیل های سفارشی Data Wrangler به شما امکان می دهد تابع بهینه سازی SciPy را برای تعیین ضریب بهینه ای که می تواند کرایه را به عنوان تابعی از سن در شرایط محدودیت تغییر دهد، اجرا کنید.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai. ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تعریف بهینه‌سازی، تعریف هدف و محدودیت‌های متعدد را می‌توان به عنوان توابع مختلف در حین فرمول‌بندی بهینه‌سازی محدودیت در تبدیل سفارشی Data Wrangler با استفاده از SciPy و NumPy ذکر کرد. تبدیل های سفارشی همچنین می توانند روش های حل کننده مختلفی را که به عنوان بخشی از بسته بهینه سازی SciPy در دسترس هستند، بیاورند. یک متغیر تبدیل شده جدید را می توان با ضرب ضریب بهینه با ستون اصلی تولید کرد و به ستون های موجود Data Wrangler اضافه کرد. کد زیر را ببینید:

import numpy as np
import scipy.optimize as opt
import pandas as pd df2 = pd.DataFrame({"Y":df["fare_interpolate"], "X1":df["age_interpolate"]}) # optimization defination
def main(df2):
x0 = [0.1]
res = opt.minimize(fun=obj, x0=x0, args=(df2), method="SLSQP", bounds=[(0,50)], constraints=cons)
return res # objective function
def obj(x0, df2):
sumSquares = np.sum(df2["Y"] - x0*df2["X1"])
return sumSquares # constraints
def constraint1(x0):
sum_cons1 = np.sum(df2["Y"] - x0*df2["X1"]) - 0
return sum_cons1
con1 = {'type': 'eq', 'fun': constraint1}
cons = ([con1]) print(main(df2)) df["new_fare_age_optimized"]=main(df2).x*df2["X1"]

ویژگی تبدیل سفارشی Data Wrangler دارای قابلیت UI برای نشان دادن نتایج بهینه سازی توابع SciPy مانند مقدار ضریب بهینه (یا ضرایب چندگانه) است.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

تحولات سفارشی با scikit-learn

یادگیری یک ماژول پایتون برای یادگیری ماشینی است که بر روی SciPy ساخته شده است. این یک کتابخانه ML منبع باز است که از یادگیری تحت نظارت و بدون نظارت پشتیبانی می کند. همچنین ابزارهای مختلفی را برای برازش مدل، پیش پردازش داده ها، انتخاب مدل، ارزیابی مدل و بسیاری از ابزارهای کاربردی دیگر فراهم می کند.

گسسته سازی

گسسته سازی (در غیر این صورت به عنوان شناخته شده است کمیت or بنینگ) راهی برای تقسیم ویژگی های پیوسته به مقادیر گسسته ارائه می دهد. مجموعه داده‌های خاصی با ویژگی‌های پیوسته ممکن است از گسسته‌سازی سود ببرند، زیرا گسسته‌سازی می‌تواند مجموعه داده‌های ویژگی‌های پیوسته را به مجموعه‌ای با ویژگی‌های اسمی تبدیل کند. ویژگی‌های گسسته رمزگذاری‌شده یک‌طرفه می‌توانند یک مدل را رساتر کنند، در حالی که قابلیت تفسیر را حفظ می‌کنند. به عنوان مثال، پیش پردازش با یک گسسته کننده می تواند غیرخطی بودن را به مدل های خطی معرفی کند.

در کد زیر استفاده می کنیم KBinsDiscretizer برای گسسته کردن ستون سن به 10 bin:

# Table is available as variable `df`
from sklearn.preprocessing import KBinsDiscretizer
import numpy as np
# discretization transform the raw data
df = df.dropna()
kbins = KBinsDiscretizer(n_bins=10, encode='ordinal', strategy='uniform')
ages = np.array(df["age"]).reshape(-1, 1)
df["age"] = kbins.fit_transform(ages)
print(kbins.bin_edges_)

در تصویر زیر می توانید لبه های سطل را مشاهده کنید.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

رمزگذاری تک داغ

مقادیر در ستون های Embarked مقادیر طبقه ای هستند. بنابراین، ما باید این رشته ها را به عنوان مقادیر عددی نمایش دهیم تا بتوانیم طبقه بندی خود را با مدل خود انجام دهیم. ما همچنین می‌توانیم این کار را با استفاده از یک تبدیل رمزگذاری یک‌طرفه انجام دهیم.

سه مقدار برای Embarked وجود دارد: S، C و Q. ما اینها را با اعداد نشان می دهیم. کد زیر را ببینید:

# Table is available as variable `df`
from sklearn.preprocessing import LabelEncoder le_embarked = LabelEncoder()
le_embarked.fit(df["embarked"]) encoded_embarked_training = le_embarked.transform(df["embarked"])
df["embarked"] = encoded_embarked_training

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

پاک کردن

وقتی از Data Wrangler استفاده نمی‌کنید، مهم است که نمونه‌ای را که در آن اجرا می‌شود خاموش کنید تا از پرداخت هزینه‌های اضافی جلوگیری کنید.

Data Wrangler به طور خودکار جریان داده های شما را هر 60 ثانیه ذخیره می کند. برای جلوگیری از از دست دادن کار، قبل از خاموش کردن Data Wrangler، جریان داده خود را ذخیره کنید.

  1. برای ذخیره جریان داده خود در Studio، را انتخاب کنید پرونده، پس از آن را انتخاب کنید ذخیره داده Wrangler Flow.
  2. برای خاموش کردن نمونه Data Wrangler، در Studio، را انتخاب کنید در حال اجرا نمونه ها و هسته ها.
  3. تحت برنامه های در حال اجرا، نماد خاموش شدن را در کنار برنامه sagemaker-data-wrangler-1.0 انتخاب کنید.
  4. را انتخاب کنید همه را خاموش کنید برای تایید.

Data Wrangler روی نمونه ml.m5.4xlarge اجرا می‌شود. این نمونه از بین می رود در حال اجرا نمونه هنگامی که برنامه Data Wrangler را خاموش می کنید.

پس از اینکه برنامه Data Wrangler را خاموش کردید، دفعه بعد که یک فایل جریان داده Wrangler را باز می کنید، باید دوباره راه اندازی شود. این ممکن است چند دقیقه طول بکشد.

نتیجه

در این پست نشان دادیم که چگونه می توانید از تبدیل های سفارشی در Data Wrangler استفاده کنید. ما از کتابخانه‌ها و چارچوب درون کانتینر Data Wrangler برای گسترش قابلیت‌های تبدیل داده داخلی استفاده کردیم. مثال‌های این پست نشان‌دهنده زیرمجموعه‌ای از چارچوب‌های مورد استفاده است. اکنون می توان تغییرات در جریان داده رانگلر را در یک خط لوله برای DataOps مقیاس کرد.

برای کسب اطلاعات بیشتر در مورد استفاده از جریان های داده با Data Wrangler، مراجعه کنید ایجاد و استفاده از Data Wrangler Flow و قیمت گذاری آمازون SageMaker. برای شروع کار با Data Wrangler، نگاه کنید داده های ML را با Amazon SageMaker Data Wrangler آماده کنید. برای کسب اطلاعات بیشتر در مورد Autopilot و AutoML در SageMaker، مراجعه کنید توسعه مدل را با Amazon SageMaker Autopilot به صورت خودکار انجام دهید.


درباره نویسندگان

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.میناکشیسوندارام تانداوارایان یک متخصص ارشد AI/ML با AWS است. او به حساب های استراتژیک پیشرفته در سفر هوش مصنوعی و ML کمک می کند. او علاقه زیادی به هوش مصنوعی مبتنی بر داده دارد.

 ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.سوویک کومار نات یک معمار راه حل AI/ML با AWS است. او تجربه گسترده ای در طراحی ها و راه حل های پایان به انتها برای یادگیری ماشین دارد. تجزیه و تحلیل تجاری در تجزیه و تحلیل مالی، عملیاتی و بازاریابی؛ مراقبت های بهداشتی؛ زنجیره تامین؛ و اینترنت اشیا سوویک در خارج از محل کار از سفر و تماشای فیلم لذت می برد.

ایجاد تغییرات سفارشی در Amazon SageMaker Data Wrangler با استفاده از NLTK و SciPy PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.ندیمه مهندس توسعه نرم افزار در Amazon SageMaker است. او مشتاق کمک به مشتریان است تا داده های خود را در DataWrangler آماده کنند و سیستم های یادگیری ماشینی توزیع شده بسازند. ابیگیل در اوقات فراغت خود از سفر، پیاده روی، اسکی و شیرینی پزی لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS