۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

اشیاء جاوا اسکریپت را به روشی آسان با Arquero فیلتر کنید

برای فیلتر کردن و زیر مجموعه آرایه‌های جاوا اسکریپت دوبعدی خود و موارد دیگر، از نحو محبوب «گرامر داده» استفاده کنید. در اینجا نحوه استفاده از Arquero برای جدال داده ها در JavaScript قابل مشاهده و Node.js آورده شده است.

برای فیلتر کردن و زیر مجموعه آرایه‌های جاوا اسکریپت دوبعدی خود و موارد دیگر، از نحو محبوب «گرامر داده» استفاده کنید. در اینجا نحوه استفاده از Arquero برای جدال داده ها در JavaScript قابل مشاهده و Node.js آورده شده است.

کدنویسی در جاوا اسکریپت مزایای زیادی دارد، اما بحث و جدل داده احتمالاً در صدر این لیست نیست. با این حال، یک خبر خوب برای کسانی که داده‌های جاوا اسکریپت را یک چالش می‌دانند وجود دارد: همان ایده‌های “گرامر داده‌ها” در پشت بسته بسیار محبوب dplyr R نیز به لطف در جاوا اسکریپت موجود است. href=”https://github.com/uwdata/arquero” rel=”nofollow”>کتابخانه Arquero.

Arquero، از آزمایشگاه داده‌های تعاملی دانشگاه واشنگتن، احتمالاً برای کاربران جاوااسکریپت قابل مشاهده شناخته شده است، اما به روش‌های دیگری نیز در دسترس است. یکی از این موارد Node.js است.

این مقاله به شما نشان می دهد که چگونه اشیاء جاوا اسکریپت را با Arquero فیلتر کنید، با چند کار اضافی در پایان.

مرحله ۱. بارگیری Arquero

Arquero یک کتابخانه استاندارد با جاوا اسکریپت قابل مشاهده و در Quarto است که من از آن استفاده می کنم. در این صورت نیازی به نصب نیست. اگر از Arquero در Node استفاده می‌کنید، باید آن را با npm install arquero --save نصب کنید. در مرورگر، از  استفاده کنید.

در Observable، می‌توانید Arquero را با import {aq, op} از "@uwdata/arquero" بارگیری کنید. در مرورگر، Arquero به صورت aq بارگذاری می شود. در Node، می‌توانید آن را با const aq = require('arquero') بارگیری کنید.

باقیمانده کد در این آموزش باید همانطور که در Observable و Quarto است اجرا شود. اگر از آن در یک محیط ناهمزمان مانند Node استفاده می‌کنید، باید تنظیمات لازم را برای بارگیری و پردازش داده‌ها انجام دهید.

مرحله ۲. داده های خود را به جدول Arquero تبدیل کنید

شما می توانید یک شی جاوا اسکریپت “معمول” موجود را با aq.from(my_object) به جدول Arquero تبدیل کنید.

گزینه دیگر این است که مستقیماً داده های راه دور را به عنوان جدول Arquero با خانواده توابع load Arquero وارد کنید—عملکردهایی مانند  aq.loadCSV("myurl.com/mycsvfile.csv") برای یک فایل CSV و aq.loadJSON("myjsonurl.com/myjsonfile.json") برای یک فایل JSON در وب. اطلاعات بیشتری درباره عملکردهای ورودی جدول در وب‌سایت اسناد Arquero API وجود دارد.

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


states_table = aq.loadCSV("https://raw.githubusercontent.com/smach/SampleData/master/states.csv")

جدول Arquero دارای یک روش view() برای استفاده با JavaScript قابل مشاهده و در Quarto است. فرمان states_table.view() چیزی شبیه خروجی نشان داده شده در شکل ۱ را برمی گرداند.

جدول با ستون‌های State، Pop_2000، Pop_2010، Pop_2020، PctChange_2000، Pct_change_2010,

شکل ۱. نتیجه استفاده از روش Arquero table view().

جاوا اسکریپت قابل مشاهده Inputs.table(states_table) (که دارای سرصفحه های ستون قابل کلیک برای مرتب سازی است) برای نمایش جدول Arquero نیز کار می کند.

خارج از Observable، می‌توانید از states_table.print() برای چاپ جدول در کنسول استفاده کنید.

مرحله ۳. فیلتر کردن ردیف ها

جدول Arquero دارای تعداد زیادی روش‌های داخلی برای بحث و تحلیل داده‌ها هستند، از جمله فیلتر کردن ردیف‌ها برای شرایط خاص با filter().

نکته ای به کاربران R: نحو filter() Arquero به سادگی فیلتر (Region == 'RegionName') dplyr نیست. کد>. از آنجا که این جاوا اسکریپت است و اکثر توابع بردار نیستند، باید یک تابع ناشناس با d => ایجاد کنید و سپس تابع دیگری را در داخل آن اجرا کنید - معمولاً تابعی از op (وارد شده در بالا با arquero). حتی اگر به زبانی غیر از جاوا اسکریپت عادت دارید، پس از آشنایی با این ساختار، استفاده از آن نسبتاً آسان است.

نحو معمول این است:


filter(d => op.opfunction(d.columnname, 'argument')

در این مثال، تابع op که می‌خواهم، op.equal() است که (همانطور که از نامش پیداست) برابری را آزمایش می‌کند. بنابراین، کد Arquero فقط برای ایالت های منطقه شمال شرقی ایالات متحده خواهد بود:


states_table
  .filter(d => op.equal(d.Region, 'Northeast'))

برای دیدن نتایج می توانید روی .view() در انتها علامت بزنید.

نکته ای در مورد نحو فیلتر(): کد داخل filter() یک عبارات جدول Arquero است. "در نگاه اول عبارات جدول مانند توابع معمولی جاوا اسکریپت به نظر می رسد ... اما نگه دارید!" وب‌سایت مرجع API وب‌سایت Arquero توضیح می‌دهد. "زیر سرپوش، Arquero مجموعه ای از تعاریف تابع را می گیرد، آنها را به رشته ها نگاشت می کند، سپس آنها را تجزیه، بازنویسی و کامپایل می کند تا به طور موثر داده ها را در داخل مدیریت کند."

این برای شما چه معنایی دارد؟ علاوه بر نحو معمول تابع جاوا اسکریپت، می‌توانید از نحو بیان جدول خاص مانند filter("d => op.equal(d.Region, 'Northeast')") استفاده کنید. /code> یا filter("equal(d.Region, 'Northeast')"). اگر فکر می کنید یکی از این نسخه ها ممکن است مرجع API را بررسی کنید جذاب تر یا مفیدتر باشد.

این همچنین به این معنی است که نمی‌توانید از هر نوع تابع جاوا اسکریپت در filter() و سایر افعال Arquero استفاده کنید. برای مثال، حلقه‌های for مجاز نیستند مگر اینکه توسط escape() "کمک بیان" پیچیده شوند. برای کسب اطلاعات بیشتر، مرجع Arquero API را بررسی کنید.

نکته ای برای کاربران پایتون: Arquero filter تنها برای زیرمجموعه ردیف‌ها طراحی شده است، نه برای ستون‌های یا، همانطور که با pandas.filter. (به ستون های بعدی می رسیم.)

فیلترها می‌توانند پیچیده‌تر از یک آزمایش، با شرایط منفی یا چندگانه باشند. به عنوان مثال، اگر می‌خواهید «نام‌های ایالتی تک کلمه‌ای در منطقه غرب» را داشته باشید، باید به دنبال نام‌های ایالتی باشید که شامل فاصله نیست و منطقه برابر با غرب . یکی از راه‌های انجام این کار این است که  !op.includes(d.State, ' ') && op.equal(d.Region, 'West') در داخل فیلتر(d =>)< /code> عملکرد ناشناس:


states_table
  .filter(d => !op.includes(d.State, ' ') && 
     op.equal(d.Region, 'West'))

برای جستجو و فیلتر کردن با عبارت منظم به جای برابری، از op.match()< استفاده کنید /a> به جای op.equal().

مرحله ۴. انتخاب ستون ها

انتخاب فقط برخی از ستون‌ها مشابه select() dplyr است. در واقع این حتی ساده تر است، زیرا نیازی به تبدیل انتخاب به آرایه ندارید. آرگومان فقط نام ستون های جدا شده با کاما در داخل select()::

است


states_table
  .select('State', 'State Code', 'Region', 'Division', 'Pop_2020')

می‌توانید هنگام انتخاب ستون‌ها، با استفاده از نحو، نام آنها را تغییر دهید: select{{ OldName1: 'NewName1'، OldName2: 'NewName2' }). این یک مثال است:


states_table
  .select({ State: 'State', 'State Code': 'Abbr', Region: 'Region', 
      Division: 'Division', Pop_2020: 'Pop' })

مرحله ۵. آرایه ای از مقادیر منحصر به فرد را در ستون جدول ایجاد کنید

دریافت مقادیر منحصر به فرد یک ستون به عنوان یک آرایه جاوا اسکریپت وانیلی، برای کارهایی مانند پر کردن یک لیست کشویی ورودی می تواند مفید باشد. Arquero چندین عملکرد برای انجام این کار دارد:

  • dedupe() مقادیر منحصر به فرد دریافت می کند.
  • orderby() نتایج را مرتب می‌کند.
  • array() داده‌ها را از یک ستون جدول Arquero به یک آرایه جاوا اسکریپت معمولی تبدیل می‌کند.

در اینجا یک راه برای ایجاد یک آرایه مرتب شده از نام‌های Division منحصر به فرد از states_table وجود دارد:


region_array = states_table
  .select('Region')                                      
  .dedupe()                                                                 
  .orderby('Region')
  .array('Region')

از آنجایی که این شی جدید یک آرایه جاوا اسکریپت است، روش‌های Arquero دیگر روی آن کار نمی‌کنند، اما روش‌های آرایه معمولی کار می‌کنند. این یک مثال است:


'The regions are ' + region_array.join(', ')

این کد خروجی زیر را دریافت می کند:

"The regions are , Midwest, Northeast, South, West"

اولین کاما در رشته کاراکتر بالا به این دلیل است که مقدار null در آرایه وجود دارد. اگر می‌خواهید مقادیر خالی مانند null را حذف کنید، می‌توانید از تابع Arquero  op.compact() در نتایج استفاده کنید:


  region_array2 = op.compact(states_table
  .select('Region')                                      
  .dedupe()                                                                 
  .orderby('Region')
  .array('Region')
  )

گزینه دیگر استفاده از  filter() وانیلی جاوا اسکریپت برای حذف مقادیر null از آرایه‌ای از رشته‌های متنی است. توجه داشته باشید که تابع filter() وانیلی جاوا اسکریپت برای آرایه‌های جاوا اسکریپت یک بعدی مشابه filter() Arquero برای نیست. جداول دو بعدی Arquero:


 region_array3 = states_table
  .select('Region')                                      
  .dedupe()                                                                 
  .orderby('Region')
  .array('Region')
  .filter(n => n)

کاربران قابل مشاهده جاوا اسکریپت، از جمله کسانی که از Quarto استفاده می‌کنند، می‌توانند از تابع md برای اضافه کردن یک ظاهر به رشته، مانند متن پررنگ با ** استفاده کنند. بنابراین، این کد

md`The regions are **${region_array2.join(', ')}**.`

خروجی زیر را تولید می‌کند:


The regions are Midwest, Northeast, South, West

به‌علاوه، توجه داشته باشید که Intl .ListFormat() شی جاوا اسکریپت اضافه کردن "and" را قبل از آخرین مورد در یک آرایه به رشته جدا شده با کاما آسان می کند. بنابراین، کد


my_formatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
my_formatter.format(region_array3)

خروجی را تولید می کند:


"Midwest, Northeast, South, and West"

خیلی چیزهای بیشتری برای Arquero وجود دارد

فیلتر کردن، انتخاب، حذف کردن و ایجاد آرایه‌ها به سختی سطح کاری را که Arquero می‌تواند انجام دهد خراش می‌دهد. این کتابخانه دارای افعالی برای تغییر شکل داده ها، ادغام، تجمیع، و موارد دیگر، و همچنین توابع op برای محاسبات و تجزیه و تحلیل مانند میانگین، میانه، چندک، رتبه بندی، تاخیر و سرب است. برای مروری بر قابلیت‌های بیشتر، معرفی Arquero را بررسی کنید. همچنین به راهنمای مصور افعال Arquero و < یک href="https://uwdata.github.io/arquero/" rel="nofollow">مستندات Arquero API برای فهرست کامل، یا به نوت بوک قابل مشاهده Data Wrangler برای یک برنامه تعاملی که نشان می دهد Arquero چه کاری می تواند انجام دهد.

برای اطلاعات بیشتر در مورد جاوا اسکریپت قابل مشاهده و Quarto، راهنمای مبتدی برای استفاده از جاوا اسکریپت قابل مشاهده، R و پایتون با Quarto و آموزش جاوا اسکریپت قابل مشاهده با نوت بوک های مشاهده پذیر را از دست ندهید. .