در پروژه‌های علوم داده گاهی لازم می‌شود که رد اطلاعات را در داده‌ها بگیریم یا نوعی انعطاف‌پذیری برای به‌روزرسانی ورودی جدید داده‌ها به سرعت و سهولت داشته باشیم. دانستن شیوه استفاده از برخی اشیای داده‌ای پایتون موجب می‌شود که در این زمینه سازمان‌یافته‌تر عمل کنیم و از بروز اشتباهاً در زمان کار با حجم بالایی از داده‌ها در حوزه علم داده جلوگیری نماییم. در این مقاله با برخی ترفندهای پایتون برای ردگیری داده ها آشنا خواهیم شد که شامل فهرست زیر می‌شوند:

  • ردگیری اندیس در زمان تکرار حلقه
  • به‌روزرسانی آیتم‌های دیکشنری جدید
  • ضبط اطلاعات جدید با شیئی که قابلیت استفاده مجدد دارد

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

ردگیری اندیس در زمان تکرار حلقه

فرض کنید لیستی از اسامی دوستان دارید. می‌خواهید یک حلقه روی لیست اجرا کنید و در عین حال اندیس آیتم‌ها را نیز ردگیری کنید برای انجام این کار می‌توانید به آسانی از enumerate کمک بگیرید:

>>> friends = ['Ben', 'Kate', 'Thinh']
>>> for i, item in enumerate(friends):
>>>     print(f'{i}: {item}')
0: Ben
1: Kate
2: Thinh

یا این که می‌توانید از «خلاصه‌سازی دیکشنری» (dictionary comprehension) کمک بگیرید:

>>> {i: friends[i] for i in range(len(friends))}
{0: 'Ben', 1: 'Kate', 2: 'Thinh'}
فیلم آموزشی مرتبط

به‌روزرسانی آیتم‌های دیکشنری جدید

فرض کنید از یک دیکشنری برای ردگیری کلمات و تعدادشان در جمله نخست یک متن استفاده می‌کنید:

sent1 = {'love': 1, 'hate': 3}

اما زمانی که به جمله دوم می‌رسید، می‌خواهید دیکشنری قبلی را با جمله جدید به‌روزرسانی کنید:

sent2 = {'love': 2, 'flower': 1}

بنابراین کیسه به‌روزرسانی شده کلمات به صورت زیر درمی‌آید:

{'love': 3, 'hate': 3, 'flower': 1}

بهتر است ابزارهایی داشته باشیم که به ما امکان می‌دهند این کار را به آسانی انجام دهیم. به این منظور می‌توانید از collections.Counter کمک بگیرید. کلاس collections.Counter امکان می‌دهد که عنصر یک مجموعه بیش از یک عدد باشند.

from collections import Counter
bag_words = Counter()
sent1 = {'love': 1, 'hate': 3}
bag_words.update(sent1)
sent2 = {'love': 2, 'flower': 1}
bag_words.update(sent2)
bag_words

خروجی کد فوق به صورت زیر است:

Counter({'love': 3, 'hate': 3, 'flower': 1})

اکنون می‌توانید به سهولت «کیسه کلمات» (bag of words) را به‌روزرسانی کرده و اطلاعاتی بیشتری از جمله‌های دیگر گردآوری کنید. برای یافتن تعداد کلمات یکتا در جمله می‌توان از len استفاده کرد:

>>> len(bag_words)
3

همچنین می‌توانید کل کلمات را در جمله بیابید. به این منظور از sum استفاده کنید:

>>> sum(bag_words.values())
7
فیلم آموزشی مرتبط

تعریف کردن اشیای دارای قابلیت استفاده مجدد با Namedtuple

فرض کنید می‌خواهید رد لیستی از اطلاعات در مورد دوستان را بگیرید تا یک جشن تولد را آماده کنید. از آنجا که هم اینک به این اطلاعات دسترسی ندارید، ابتدا باید یک place holder where ایجاد کنید تا بتوانید اطلاعات را بعداً وارد نمایید. اگر می‌خواهید تاریخ تولد Kate، غذای مورد علاقه، رنگ محبوب و خصوصیت‌های روان‌شناختی را ذخیره کنید، باید به صورت زیر عمل کنید:

>>> Kate = Friend('Feb', 'cake', 'pink', True)

همچنین زمانی که تاریخ تولید کیت را به خاطر نیاورید می‌توانید به صورت زیر عمل کنید:

>>> Kate.birthday
'Feb'

این شیء کلاس در پایتون به شما امکان می‌دهد که وهله‌ای از Kate ایجاد کنید، اما ممکن است متوجه شوید که ایجاد یک کلاس Friend برای نگهداری اطلاعات ساده ممکن است کاری زمان‌گیر باشد. اگر چنین باشد، می‌توانید از تابع namedtuple استفاده کنید. امکان تعریف یک شیء با قابلیت استفاده مجدد را برای رکوردها می‌دهد که با وجود آن مطمئن می‌شویم نام‌های صحیحی برای فیلدهای خود استفاده می‌کنیم:

from collections import namedtuple
Friend = namedtuple('Friend' , 'birthday food color introvert')
Kate = Friend('Feb', 'cake', 'pink', True)
Ben = Friend('Jan', 'fish', 'red', False)

برای نمایش اطلاعات در مورد کیت به صورت زیر عمل می‌کنیم:

>>> Kate
Friend(birthday='Feb', food='cake', color='pink', introvert=True)

اگر بخواهیم بدانیم آیا Ben درونگرا یا برونگرا است، می‌توانیم از کد زیر استفاده کنیم:

>>> Ben.introvert
False
فیلم آموزشی مرتبط

سخن پایانی

در این مقاله با شیوه ردگیری اطلاعات با استفاده از enumerate، خلاصه‌سازی مجموعه، Counter و nametuples آشنا شدیم. امیدواریم این راهنما اطلاعات مفیدی در مورد ابزارهای علوم داده در اختیار شما قرار داده باشد.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
شما قبلا رای داده‌اید!
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.

«میثم لطفی» در رشته‌های ریاضیات کاربردی و مهندسی کامپیوتر به تحصیل پرداخته و شیفته فناوری است. وی در حال حاضر علاوه بر پیگیری علاقه‌مندی‌هایش در رشته‌های برنامه‌نویسی، کپی‌رایتینگ و محتوای چندرسانه‌ای، در زمینه نگارش مقالاتی با محوریت نرم‌افزار با مجله فرادرس همکاری دارد.