شما اینجا هستید

ایجاد مجموعه داده ها

امکان دانلود مجموعه کاملی از داده ها از همه کاربران از del.icio.us وجود ندارد. شما نیاز به انتخاب یک زیر مجموعه از آن دارید. شما می توانید این کار را به هر طریقی انجام دهید، اما برای ساخت مثالی که بتواند خروجی جالبی بدهد، بهتر است کاربرانی که معمولا ارسال هایی شبیه به هم داشته اند پیدا کنیم.

یک راه این است که یک لیست از کاربران که اخیرا لینکهایی با برچسب های مشابه ارسال کرده اند را دریافت کنیم. یک فایل جدید به نام deliciousrec.py بسازید و کد زیر را در آن وارد کنید:

 

from pydelicious import get_popular,get_userposts,get_urlposts
import time

def initializeUserDict(tag,count=5):
  user_dict={}
  # get the top count' popular posts
  for p1 in get_popular(tag=tag)[0:count]:
    # find all users who posted this
    for p2 in get_urlposts(p1['href']):
      user=p2['user']
      user_dict[user]={}
  return user_dict

این یک دیکشنری با چند کاربر به شما می دهد.هر کدام ارجاء به دیکشنری خالی آماده است تا توسط لینک ها پر شود.API فقط ۳۰ کاربر آخری که لینک ارسال کرده اند را برمی گرداند، بنابراین تابع ما به جمع آوری کاربران از ۵ لینک اول برای ساختن یک لیست بزرگتر می پردازد.

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

صفر اگر کاربر این لینک را نفرستاده است و یک اگر کاربر ارسال کرده باشد.با استفاده ازAPI، شما می توانید یک تابع برای پر کردن رای های همه کاربران ایجاد کنید. این کد را به فایل deliciousrec.py اضافه کنید:

 

 def fillItems(user_dict):
  all_items={}
  # Find links posted by all users
  for user in user_dict:
    for i in range(3):
      try:
        posts=get_userposts(user)
        break
      except:
        print "Failed user "+user+", retrying"
        time.sleep(4)
    for post in posts:
      url=post['href']
      user_dict[user][url]=1.0
      all_items[url]=1
  
  # Fill in missing items with 0
  for ratings in user_dict.values():
    for item in all_items:
      if item not in ratings:
        ratings[item]=0.0
 

این می تواند به ایجاد مجموعه شبیه دیکشنری منتقدین که شما دستی آن را در ابتدای فصل نوشتید بیانجامد:

 

>>from deliciousrec import *
>>delusers=initializeUserDict('programming')
>>delusers ['tsegaran']={} # Add yourself to the dictionary if you use delicious
>>fillItems(delusers) 

خط سوم کاربر tsegaran را به لیست اضافه می کند. شما می توانید tsegaran را با نام کاربری خودتان اگر عضو سایت del.icio.us هستید، جایگزین کنید.

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

در این مثال کد وقفه هایی ایجاد می کند و هر کاربر ۳ بار تلاش می کند.

 

دیدگاه جدیدی بگذارید