د ډیټا ساینس سره څه غلط کیدی شي؟ د معلوماتو راټولول

د ډیټا ساینس سره څه غلط کیدی شي؟ د معلوماتو راټولول
نن ورځ د ډیټا ساینس 100500 کورسونه شتون لري او دا د اوږدې مودې راهیسې پیژندل شوي چې د ډیټا ساینس کې ترټولو ډیرې پیسې د ډیټا ساینس کورسونو له لارې ترلاسه کیدی شي (ولې کله چې تاسو بیلچه وپلورئ؟). د دې کورسونو اصلي نیمګړتیا دا ده چې دوی د ریښتیني کار سره هیڅ تړاو نلري: هیڅوک به تاسو ته په اړین شکل کې پاک، پروسس شوي معلومات درکړي. او کله چې تاسو کورس پریږدئ او د یوې ریښتینې ستونزې حل کول پیل کړئ، ډیری باریکونه راڅرګندیږي.

له همدې امله، موږ د یادښتونو لړۍ پیل کوو "د ډیټا ساینس سره څه غلط کیدی شي"، د ریښتینې پیښو پراساس چې زما، زما ملګرو او همکارانو سره پیښ شوي. موږ به د اصلي مثالونو په کارولو سره د ډیټا ساینس ځانګړي دندې تحلیل کړو: دا واقعیا څنګه پیښیږي. راځئ نن د معلوماتو راټولولو دنده سره پیل کړو.

او لومړی شی چې خلک په ټپه دریږي کله چې دوی د ریښتیني معلوماتو سره کار پیل کوي په حقیقت کې د دې معلوماتو راټولول دي چې زموږ لپاره خورا اړونده دي. د دې مقالې مهم پیغام:

موږ په سیستماتیک ډول د معلوماتو راټولولو، پاکولو او چمتو کولو لپاره اړین وخت، سرچینې، او هڅې کموو.

او تر ټولو مهم، موږ به په دې اړه بحث وکړو چې د دې مخنیوي لپاره څه وکړو.

د مختلفو اټکلونو له مخې، پاکول، بدلون، د معلوماتو پروسس کول، فیچر انجنیري، او نور د 80-90٪ وخت نیسي، او 10-20٪ تحلیل، پداسې حال کې چې نږدې ټول تعلیمي مواد یوازې په تحلیل تمرکز کوي.

راځئ چې په دریو نسخو کې یوې ساده تحلیلي ستونزې ته د یو عادي مثال په توګه وګورو او وګورو چې "زیاتونکي شرایط" څه دي.

او د مثال په توګه، یو ځل بیا، موږ به د معلوماتو راټولولو او د ټولنو پرتله کولو د دندې ورته توپیرونه په پام کې ونیسو:

  1. دوه Reddit subreddits
  2. د حبر دوه برخې
  3. د Odnoklassniki دوه ډلې

په تیوري کې مشروط چلند

سایټ خلاص کړئ او مثالونه ولولئ ، که دا روښانه وي ، د لوستلو لپاره څو ساعته جلا کړئ ، د مثالونو او ډیبګ کولو په کارولو سره د کوډ لپاره څو ساعته. د راټولولو لپاره څو ساعته اضافه کړئ. په څو ساعتونو کې په ریزرو کې وغورځوئ (دوه ضرب کړئ او N ساعتونه اضافه کړئ).

کلیدي ټکی: د وخت اټکلونه د انګیرنو او اټکل پر بنسټ دي چې دا به څومره وخت ونیسي.

دا اړینه ده چې د پورته بیان شوي شرطي ستونزې لپاره د لاندې پیرامیټونو اټکل کولو سره د وخت تحلیل پیل کړئ:

  • د معلوماتو اندازه څه ده او څومره یې اړتیا ده چې په فزیکي توګه راټول شي (*لاندې وګورئ*).
  • د یو ریکارډ لپاره د راټولولو وخت څه دی او تاسو باید څومره وخت انتظار وکړئ مخکې لدې چې تاسو دوهم راټول کړئ؟
  • د لیکلو کوډ په پام کې ونیسئ چې دولت خوندي کوي او بیا پیل پیل کوي کله چې (نه که) هرڅه ناکام شي.
  • معلوم کړئ چې ایا موږ اجازه ته اړتیا لرو او د API له لارې د لاسرسي ترلاسه کولو لپاره وخت وټاکو.
  • د غلطیو شمیر د ډیټا پیچلتیا د فعالیت په توګه تنظیم کړئ - د یو ځانګړي کار لپاره ارزونه وکړئ: جوړښت ، څومره بدلونونه ، څه او څنګه استخراج کول.
  • د غیر معیاري پروژې چلند سره د شبکې غلطۍ او ستونزې حل کړئ.
  • ارزونه وکړئ چې ایا اړین دندې په اسنادو کې دي او که نه، نو بیا د حل لپاره څنګه او څومره اړتیا ده.

ترټولو مهمه خبره دا ده چې د وخت اټکل کولو لپاره - تاسو واقعیا اړتیا لرئ چې وخت او هڅې "په ځواک کې کشف" باندې مصرف کړئ - یوازې بیا به ستاسو پلان کافي وي. له همدې امله، مهمه نده چې تاسو څومره فشار راوړئ چې ووایاست "د معلوماتو راټولولو لپاره څومره وخت نیسي" - د ابتدايي تحلیل لپاره خپل ځان یو څه وخت واخلئ او د دې په اړه بحث وکړئ چې څومره وخت به د دندې اصلي پیرامیټونو پورې اړه ولري.

او اوس به موږ ځانګړي مثالونه وښیو چیرې چې دا ډول پیرامیټونه به بدل شي.

کلیدي ټکی: اټکل د کلیدي فکتورونو د تحلیل پراساس دی چې د کار ساحه او پیچلتیا اغیزه کوي.

د اټکل پر بنسټ اټکل یو ښه طریقه ده کله چې فعال عناصر په کافی اندازه کوچني وي او ډیری فکتورونه شتون نلري چې د ستونزې په ډیزاین کې د پام وړ اغیزه کولی شي. مګر د ډیټا ساینس د یو شمیر ستونزو په حالت کې ، دا ډول فکتورونه خورا ډیر کیږي او دا ډول چلند ناکافي کیږي.

د Reddit ټولنو پرتله کول

راځئ چې د ساده قضیې سره پیل وکړو (لکه څنګه چې وروسته معلومیږي). په عموم کې ، په بشپړ ډول صادق اوسئ ، موږ نږدې مثالی قضیه لرو ، راځئ چې زموږ د پیچلتیا چک لیست چیک کړو:

  • یو پاک، روښانه او مستند API شتون لري.
  • دا خورا ساده دی او خورا مهم ، نښه په اوتومات ډول ترلاسه کیږي.
  • موجود دي د پیتون ریپر - د ډیری مثالونو سره.
  • یوه ټولنه چې په ریډیټ کې ډاټا تحلیل او راټولوي (حتی د یوټیوب ویډیوګانو ته چې د python wrapper کارولو څرنګوالی تشریح کوي) د مثال په ډول.
  • هغه میتودونه چې موږ ورته اړتیا لرو په API کې شتون لري. سربیره پردې ، کوډ کمپیکٹ او پاک ښکاري ، لاندې د یو فنکشن مثال دی چې په پوسټ کې نظرونه راټولوي.

def get_comments(submission_id):
    reddit = Reddit(check_for_updates=False, user_agent=AGENT)
    submission = reddit.submission(id=submission_id)
    more_comments = submission.comments.replace_more()
    if more_comments:
        skipped_comments = sum(x.count for x in more_comments)
        logger.debug('Skipped %d MoreComments (%d comments)',
                     len(more_comments), skipped_comments)
    return submission.comments.list()

څخه اخیستل شوی دا د ریپ کولو لپاره د مناسبو اسانتیاو انتخاب.

د دې حقیقت سره سره چې دا ترټولو غوره قضیه ده، دا لاهم د حقیقي ژوند څخه یو شمیر مهم عوامل په پام کې نیولو سره ارزښت لري:

  • د API محدودیتونه - موږ مجبور یو چې په بیچونو کې ډاټا واخلو (د غوښتنو تر مینځ خوب او نور).
  • د راټولولو وخت - د بشپړ تحلیل او پرتله کولو لپاره، تاسو باید یوازې د سپیډرډیټ له لارې د تګ لپاره د پام وړ وخت ځانګړی کړئ.
  • بوټ باید په سرور کې وګرځي — تاسو نشئ کولی دا یوازې په خپل لپ ټاپ کې پرمخ وړئ ، دا په خپل کڅوړه کې واچوئ ، او خپل سوداګرۍ ته لاړشئ. نو ما هر څه په VPS کې واخیستل. د پروموشنل کوډ habrahabr10 په کارولو سره تاسو کولی شئ نور 10٪ لګښت خوندي کړئ.
  • د ځینو معلوماتو فزیکي لاسرسی (دوی د مدیرانو لپاره لیدل کیږي یا راټولول خورا ستونزمن دي) - دا باید په پام کې ونیول شي؛ په اصولو کې، ټول معلومات په کافي وخت کې نه شي راټولیدلی.
  • د شبکې تېروتنې: شبکه کول یو درد دی.
  • دا د حقیقي ډاټا ژوند کوي - دا هیڅکله خالص ندی.

البته، دا اړینه ده چې دا ډول ډولونه په پراختیا کې شامل کړئ. ځانګړي ساعتونه/ورځې په پراختیایي تجربو یا ورته کارونو کې د کار کولو تجربې پورې اړه لري، په هرصورت، موږ ګورو چې دلته دنده په بشپړه توګه انجینري ده او د حل کولو لپاره د بدن اضافي حرکتونو ته اړتیا نلري - هرڅه خورا ښه ارزول کیدی شي، مهال ویش او ترسره کیدی شي.

د حبر برخو پرتله کول

راځئ چې د هیبر د تارونو او / یا برخو پرتله کولو یوې ډیرې په زړه پورې او غیر معمولي قضیې ته لاړ شو.

راځئ چې زموږ د پیچلتیا چک لیست وګورو - دلته، د هر ټکي د پوهیدو لپاره، تاسو باید پخپله دنده کې لږ څه وخورئ او تجربه وکړئ.

  • په لومړي سر کې تاسو فکر کوئ چې یو API شتون لري، مګر شتون نلري. هو، هو، هابر یو API لري، مګر دا یوازې د کاروونکو لپاره د لاسرسي وړ نه دی (یا شاید دا کار نه کوي).
  • بیا تاسو یوازې د html پارس کول پیل کړئ - "د وارداتو غوښتنې"، څه شی غلط کیدی شي؟
  • په هرصورت، څنګه تجزیه کول؟ ترټولو ساده او په مکرر ډول کارول کیږي د IDs تکرار کول دي ، په یاد ولرئ چې دا خورا مؤثره ندي او باید مختلف قضیې اداره کړي - دلته د ټولو موجوده IDs په مینځ کې د اصلي IDs کثافت مثال دی.

    د ډیټا ساینس سره څه غلط کیدی شي؟ د معلوماتو راټولول
    څخه اخیستل شوی دا مقالې.

  • د ویب په سر کې په HTML کې پوښل شوي خام معلومات درد دی. د مثال په توګه، تاسو غواړئ د یوې مقالې درجه بندي راټول او خوندي کړئ: تاسو د html څخه نمرې واخیستې او پریکړه یې وکړه چې د نورو پروسس کولو لپاره د شمیرې په توګه خوندي کړئ: 

    1) انټ (سکور) یوه تېروتنه وهي: ځکه چې په هابري کې یو منفي شتون لري، لکه څنګه چې، د مثال په توګه، په "–5" کرښه کې - دا یو این ډیش دی، د منفي نښه نه ده (په غیر متوقع ډول، سمه؟)، نو یو څه ټکي چې ما باید د داسې ناوړه حل سره ژوند ته پارسر پورته کړم.

    try:
          score_txt = post.find(class_="score").text.replace(u"–","-").replace(u"+","+")
          score = int(score_txt)
          if check_date(date):
            post_score += score
    

    دلته ممکن هیڅ نیټه ، پلس او منفي نه وي (لکه څنګه چې موږ پورته د check_date فنکشن کې ګورو ، دا پیښ شوي).

    2) بې ځایه شوي ځانګړي کرکټرونه - دوی به راشي ، تاسو اړتیا لرئ چمتو اوسئ.

    3) جوړښت د پوسټ ډول پورې اړه لري.

    4) زاړه پوسټونه ممکن ** عجیب جوړښت ** ولري.

  • په اساسي ډول، د تېروتنې اداره کول او څه چې کېدای شي یا نه واقع شي باید اداره شي او تاسو د ډاډ لپاره وړاندوینه نشئ کولی چې څه به غلط شي او جوړښت به څنګه وي او کوم ځای به راښکته شي - تاسو به یوازې هڅه وکړئ او په پام کې ونیسئ هغه تېروتنې چې پارسر یې اچوي.
  • بیا تاسو پوهیږئ چې تاسو اړتیا لرئ په څو تارونو کې تجزیه وکړئ ، که نه نو په یوه کې پارس کول به بیا 30+ ساعته وخت ونیسي (دا په بشپړ ډول د دمخه کار کولو واحد تار شوي پارسر اجرا کولو وخت دی ، کوم چې خوب کوي او د هیڅ بندیز لاندې نه راځي). IN دا مقاله، دا په ځینو وختونو کې ورته سکیم ته لاره هواره کړه:

د ډیټا ساینس سره څه غلط کیدی شي؟ د معلوماتو راټولول

د پیچلتیا له مخې ټول چک لیست:

  • د شبکې سره کار کول او html د تکرار سره او د ID لخوا لټون کول.
  • د متفاوت جوړښت اسناد.
  • ډیری ځایونه شتون لري چیرې چې کوډ کولی شي په اسانۍ سره راټیټ شي.
  • لیکل اړین دي || کوډ
  • اړین اسناد، د کوډ مثالونه، او/یا ټولنه ورکه ده.

د دې کار لپاره اټکل شوی وخت به د Reddit څخه د معلوماتو راټولولو په پرتله 3-5 ځله لوړ وي.

د Odnoklassniki ډلو پرتله کول

راځئ چې تشریح شوي خورا تخنیکي په زړه پورې قضیه ته لاړ شو. زما لپاره، دا دقیقا په زړه پورې وه ځکه چې په لومړي نظر کې، دا خورا کوچنی ښکاري، مګر دا په بشپړ ډول داسې نه بریښي - هرڅومره ژر چې تاسو په هغې کې یو لکۍ واچوئ.

راځئ چې زموږ د ستونزو چک لیست سره پیل وکړو او په یاد ولرئ چې ډیری یې به د لومړي ځل په پرتله خورا ستونزمن وي:

  • یو API شتون لري، مګر دا تقریبا په بشپړه توګه اړین دندې نلري.
  • د ځینو دندو لپاره تاسو اړتیا لرئ چې د بریښنالیک له لارې د لاسرسي غوښتنه وکړئ، دا دی، د لاسرسي ورکول سمدستي ندي.
  • دا خورا ډیر مستند شوی (د پیل کولو لپاره ، روسی او انګلیسي اصطلاحات هرچیرې مخلوط شوي ، او په بشپړ ډول متضاد - ځینې وختونه تاسو اړتیا لرئ اټکل وکړئ چې دوی له تاسو څخه څه غواړي) او سربیره پردې ، ډیزاین د معلوماتو ترلاسه کولو لپاره مناسب ندي ، د مثال په توګه. , هغه فعالیت چې موږ ورته اړتیا لرو.
  • په اسنادو کې ناستې ته اړتیا لري، مګر په حقیقت کې دا نه کاروي - او د API حالتونو ټولو پیچلتیاو د پوهیدو لپاره هیڅ لاره نشته پرته له دې چې شاوخوا ځړول او امید وي چې یو څه به کار وکړي.
  • هیڅ مثال نشته او هیڅ ټولنه نشته؛ د معلوماتو په راټولولو کې د ملاتړ یوازینی ټکی یو کوچنی دی ټوپونه په پایتون کې (د کارولو ډیری مثالونو پرته).
  • سیلینیم ترټولو د کار وړ انتخاب ښکاري، ځکه چې ډیری اړین معلومات تړل شوي دي.
    1) دا دی، اجازه ورکول د جعلي کارونکي له لارې ترسره کیږي (او د لاس په واسطه نوم لیکنه).

    2) په هرصورت، د سیلینیم سره د سم او تکرار وړ کار لپاره هیڅ تضمین شتون نلري (لږترلږه د ok.ru په حالت کې د ډاډ لپاره).

    3) د Ok.ru ویب پاڼه د جاوا سکریپټ تېروتنې لري او ځینې وختونه په عجیب او متضاد ډول چلند کوي.

    4) تاسو اړتیا لرئ چې پاڼه کول، د عناصرو بار کول، او نور ...

    5) د API تېروتنې چې ریپر یې ورکوي باید په ناڅاپه توګه اداره شي، د بیلګې په توګه، دا (د تجربوي کوډ یوه ټوټه):

    def get_comments(args, context, discussions):
        pause = 1
        if args.extract_comments:
            all_comments = set()
    #makes sense to keep track of already processed discussions
            for discussion in tqdm(discussions): 
                try:
                    comments = get_comments_from_discussion_via_api(context, discussion)
                except odnoklassniki.api.OdnoklassnikiError as e:
                    if "NOT_FOUND" in str(e):
                        comments = set()
                    else:
                        print(e)
                        bp()
                        pass
                all_comments |= comments
                time.sleep(pause)
            return all_comments
    

    زما د خوښې تېروتنه وه:

    OdnoklassnikiError("Error(code: 'None', description: 'HTTP error', method: 'discussions.getComments', params: …)”)

    6) په نهایت کې، سیلینیم + API د خورا منطقي اختیار په څیر ښکاري.

  • دا اړینه ده چې دولت خوندي کړئ او سیسټم بیا پیل کړئ ، ډیری خطاګانې اداره کړئ ، پشمول د سایټ متضاد چلند - او دا خطاګانې تصور کول خورا ګران دي (مګر که تاسو په مسلکي ډول پارسر ونه لیکئ ، البته).

د دې کار لپاره د مشروط وخت اټکل به د هابر څخه د معلوماتو راټولولو په پرتله 3-5 ځله لوړ وي. د دې حقیقت سره سره چې د حبر په قضیه کې موږ د HTML پارس کولو سره مخکینۍ طریقه کاروو، او د OK په حالت کې موږ کولی شو په مهمو ځایونو کې د API سره کار وکړو.

موندنو

مهمه نده چې تاسو د ډیټا پروسس کولو پراخه پایپ لاین ماډل "په ځای کې" (موږ نن پلان کوو!) د نیټې نیټې اټکل کولو لپاره څومره اړتیا لرئ ، د اجرا کولو وخت تقریبا هیڅکله امکان نلري حتی د کاري پیرامیټونو تحلیل کولو پرته حتی په کیفیت سره اټکل کول.

په یو څه نور فلسفي یادښت کې، د ګړندي اټکل کولو ستراتیژۍ د انجینرۍ دندو لپاره ښه کار کوي، مګر ستونزې چې ډیرې تجربې دي او په یوه معنی، "تخلیقي" او سپړونکي، د بیلګې په توګه، لږ اټکل کیږي، ستونزې لري، لکه د ورته موضوعاتو مثالونو کې، کوم چې موږ دلته بحث کړی دی.

البته، د معلوماتو راټولول یوازې یو اصلي مثال دی - دا معمولا یو په زړه پورې ساده او تخنیکي پلوه غیر پیچلي کار دی، او شیطان اکثرا په توضیحاتو کې وي. او دا دقیقا پدې کار کې دی چې موږ کولی شو د ممکنه اختیارونو ټوله لړۍ وښیو چې څه شی غلط کیدی شي او دقیقا څومره کار کولی شي.

که تاسو د اضافي تجربو پرته د دندې ځانګړتیاو ته ګورئ، نو بیا Reddit او OK ورته ښکاري: یو API شتون لري، د پیتون ریپر، مګر په حقیقت کې، توپیر خورا لوی دی. د دې پیرامیټونو له مخې قضاوت کول ، د هابر پارس د OK په پرتله خورا پیچلي ښکاري - مګر په عمل کې دا خورا برعکس دی ، او دا واقعیا هغه څه دي چې د ستونزې پیرامیټرونو تحلیل کولو لپاره د ساده تجربو په ترسره کولو سره موندل کیدی شي.

زما په تجربه کې، ترټولو اغیزمنه طریقه د هغه وخت اټکل کول دي چې تاسو به د لومړني تحلیل لپاره اړتیا ولرئ او ساده لومړنۍ تجربې، د اسنادو لوستل - دا به تاسو ته اجازه درکړي چې د ټول کار لپاره دقیق اټکل وړاندې کړئ. د مشهور ځیرک میتودولوژۍ په شرایطو کې ، زه له تاسو څخه غوښتنه کوم چې د "د کار پیرامیټونو اټکل کولو" لپاره ټیکټ رامینځته کړئ ، د دې پراساس زه کولی شم د دې ارزونه وکړم چې په "سپرینټ" کې څه ترسره کیدی شي او د هر یو لپاره ډیر دقیق اټکل وړاندې کړم. دنده

له همدې امله، تر ټولو اغېزمن دلیل داسې ښکاري چې یو "غیر تخنیکي" متخصص وښيي چې څومره وخت او سرچینې به د پیرامیټونو په پام کې نیولو سره توپیر ولري چې لا تر اوسه ارزول شوي.

د ډیټا ساینس سره څه غلط کیدی شي؟ د معلوماتو راټولول

سرچینه: www.habr.com

Add a comment