Data Science ilə nə səhv ola bilər? Məlumatların toplanması

Data Science ilə nə səhv ola bilər? Məlumatların toplanması
Bu gün 100500 Məlumat Elmi kursları var və çoxdan məlumdur ki, Data Elmində ən çox pul Data Elm kursları vasitəsilə qazanıla bilər (niyə kürək sata biləcəyiniz zaman qazmaq olar?). Bu kursların əsas çatışmazlığı onların real işlə heç bir əlaqəsinin olmamasıdır: heç kim sizə lazımi formatda təmiz, işlənmiş məlumatları verməyəcək. Və kursu tərk edib əsl problemi həll etməyə başlayanda bir çox nüanslar ortaya çıxır.

Buna görə də, mənim, yoldaşlarımın və həmkarlarımın başıma gələn real hadisələrə əsaslanaraq “Data Science ilə nə səhv ola bilər” silsilə qeydlərə başlayırıq. Biz real nümunələrdən istifadə edərək tipik Data Science tapşırıqlarını təhlil edəcəyik: bunun əslində necə baş verdiyi. Bu gün məlumat toplama tapşırığı ilə başlayaq.

İnsanların real məlumatlarla işləməyə başladıqları ilk şey bizim üçün ən uyğun olan bu məlumatları toplamaqdır. Bu məqalənin əsas mesajı:

Biz məlumatları toplamaq, təmizləmək və hazırlamaq üçün tələb olunan vaxtı, resursları və səyləri sistematik olaraq düzgün qiymətləndirmirik.

Və ən əsası, bunun qarşısını almaq üçün nə edəcəyimizi müzakirə edəcəyik.

Müxtəlif hesablamalara görə, təmizləmə, transformasiya, məlumatların işlənməsi, xüsusiyyət mühəndisliyi və s. vaxtın 80-90%, təhlil isə 10-20% təşkil edir, halbuki, demək olar ki, bütün tədris materialları yalnız təhlilə yönəlib.

Tipik bir nümunə kimi üç versiyada sadə analitik problemə baxaq və “ağırlaşdıran halların” nə olduğunu görək.

Nümunə olaraq, yenə də məlumat toplamaq və icmaları müqayisə etmək tapşırığının oxşar variantlarını nəzərdən keçirəcəyik:

  1. İki Reddit subredditi
  2. Habrın iki bölməsi
  3. Odnoklassniki-nin iki qrupu

Nəzəriyyədə şərti yanaşma

Saytı açın və nümunələri oxuyun, aydındırsa, oxumaq üçün bir neçə saat, nümunələrdən istifadə edərək kod üçün bir neçə saat və sazlama üçün ayırın. Toplama üçün bir neçə saat əlavə edin. Ehtiyatda bir neçə saat atın (ikiyə vurun və N saat əlavə edin).

Əsas nöqtə: Vaxt təxminləri onun nə qədər vaxt aparacağı ilə bağlı fərziyyələrə və təxminlərə əsaslanır.

Yuxarıda təsvir olunan şərti problem üçün aşağıdakı parametrləri qiymətləndirməklə vaxt təhlilinə başlamaq lazımdır:

  • Məlumatın ölçüsü nədir və onun nə qədəri fiziki olaraq toplanmalıdır (*aşağıya bax*).
  • Bir qeyd üçün toplama vaxtı nə qədərdir və ikincini toplamaq üçün nə qədər gözləmək lazımdır?
  • Vəziyyəti saxlayan və hər şey uğursuz olduqda (əgər yox) yenidən başlamağa başlayan kodu yazmağı düşünün.
  • Avtorizasiyaya ehtiyacımız olub-olmadığını anlayın və API vasitəsilə giriş əldə etmək üçün vaxt təyin edin.
  • Səhvlərin sayını verilənlərin mürəkkəbliyindən asılı olaraq təyin edin - müəyyən bir tapşırıq üçün qiymətləndirin: struktur, neçə çevrilmə, nə və necə çıxarılmalı.
  • Şəbəkə səhvlərini və qeyri-standart layihə davranışı ilə bağlı problemləri həll edin.
  • Tələb olunan funksiyaların sənədlərdə olub-olmadığını və əgər yoxdursa, həll üçün necə və nə qədər lazım olduğunu qiymətləndirin.

Ən əsası odur ki, vaxtı hesablamaq üçün - əslində "qüvvədə olan kəşfiyyata" vaxt və səy sərf etmək lazımdır - yalnız bundan sonra planlamağınız adekvat olacaq. Buna görə də, "məlumat toplamaq üçün nə qədər vaxt lazımdır" deməyə nə qədər itələsəniz də - ilkin təhlil üçün özünüzə bir az vaxt ayırın və problemin real parametrlərindən asılı olaraq vaxtın nə qədər dəyişəcəyi ilə mübahisə edin.

İndi biz bu cür parametrlərin dəyişəcəyi konkret nümunələri nümayiş etdirəcəyik.

Əsas nöqtə: Qiymətləndirmə işin həcminə və mürəkkəbliyinə təsir edən əsas amillərin təhlilinə əsaslanır.

Təxminə əsaslanan qiymətləndirmə, funksional elementlər kifayət qədər kiçik olduqda və problemin dizaynına əhəmiyyətli dərəcədə təsir edə biləcək bir çox amillər olmadığında yaxşı bir yanaşmadır. Lakin bir sıra Data Science problemləri vəziyyətində bu kimi amillər həddindən artıq çoxalır və belə bir yanaşma qeyri-adekvat olur.

Reddit icmalarının müqayisəsi

Ən sadə vəziyyətdən başlayaq (sonradan göründüyü kimi). Ümumiyyətlə, tamamilə dürüst olmaq üçün, demək olar ki, ideal bir işimiz var, mürəkkəblik yoxlama siyahımızı yoxlayaq:

  • Səliqəli, aydın və sənədləşdirilmiş API var.
  • Bu, olduqca sadədir və ən əsası, bir token avtomatik olaraq əldə edilir.
  • Yoxdur python sarğı - çoxlu nümunələrlə.
  • Reddit-də məlumatları təhlil edən və toplayan icma (hətta python paketindən necə istifadə ediləcəyini izah edən YouTube videolarına qədər) Misal üçün.
  • Bizə lazım olan üsullar çox güman ki, API-də mövcuddur. Üstəlik, kod yığcam və təmiz görünür, aşağıda yazıya şərhlər toplayan funksiyanın nümunəsi verilmişdir.

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()

-dən götürülüb bu sarma üçün rahat kommunal seçimlər.

Bunun ən yaxşı hal olmasına baxmayaraq, real həyatdan bir sıra vacib amilləri nəzərə almağa dəyər:

  • API məhdudiyyətləri - biz məlumatları partiyalar şəklində götürməyə məcburuq (sorğular arasında yuxu və s.).
  • Toplama vaxtı - tam təhlil və müqayisə üçün yalnız hörümçəyin subredditdən keçməsi üçün əhəmiyyətli vaxt ayırmalı olacaqsınız.
  • Bot serverdə işləməlidir - siz onu sadəcə laptopunuzda işlədə, çantanıza qoyub işinizlə məşğul ola bilməzsiniz. Beləliklə, hər şeyi VPS-də işlətdim. Habrahabr10 promosyon kodundan istifadə edərək dəyərin daha 10%-nə qənaət edə bilərsiniz.
  • Bəzi məlumatların fiziki əlçatmazlığı (onlar idarəçilər üçün görünür və ya toplamaq çox çətindir) - bu nəzərə alınmalıdır, prinsipcə, bütün məlumatları adekvat vaxtda toplamaq mümkün deyil.
  • Şəbəkə xətaları: Şəbəkə qurmaq ağrıdır.
  • Bu canlı real məlumatlardır - heç vaxt təmiz deyil.

Təbii ki, bu nüansları inkişafa daxil etmək lazımdır. Xüsusi saatlar/günlər inkişaf təcrübəsindən və ya oxşar tapşırıqlar üzərində işləmək təcrübəsindən asılıdır, lakin biz görürük ki, burada tapşırıq sırf mühəndislik xarakteri daşıyır və həll etmək üçün əlavə bədən hərəkətləri tələb etmir - hər şeyi çox yaxşı qiymətləndirmək, planlaşdırmaq və yerinə yetirmək olar.

Habr bölmələrinin müqayisəsi

Habrın mövzularını və/və ya bölmələrini müqayisə etmək üçün daha maraqlı və qeyri-trivial bir işə keçək.

Mürəkkəblik yoxlama siyahımızı yoxlayaq - burada hər bir nöqtəni başa düşmək üçün tapşırığın özünə bir az qazmalı və sınaqdan keçirməli olacaqsınız.

  • Əvvəlcə bir API olduğunu düşünürsən, amma yoxdur. Bəli, bəli, Habr-ın bir API-si var, lakin o, istifadəçilər üçün əlçatan deyil (və ya bəlkə də heç işləmir).
  • Sonra html-ni təhlil etməyə başlayırsınız - "import sorğuları", nə səhv ola bilər?
  • Hər halda necə təhlil etmək olar? Ən sadə və ən çox istifadə edilən yanaşma ID-ləri təkrarlamaqdır, qeyd edək ki, bu, ən səmərəli deyil və müxtəlif halları idarə etməli olacaq - burada bütün mövcud olanlar arasında real ID-lərin sıxlığının bir nümunəsi var.

    Data Science ilə nə səhv ola bilər? Məlumatların toplanması
    -dən götürülüb bu məqalələr.

  • Vebin üstündə HTML-ə bükülmüş xam məlumatlar ağrıdır. Məsələn, siz məqalənin reytinqini toplamaq və saxlamaq istəyirsiniz: siz html-dən hesabı çıxartdınız və sonrakı emal üçün onu nömrə kimi saxlamaq qərarına gəldiniz: 

    1) int (hesab) xəta atır: Habré-də mənfi olduğu üçün, məsələn, “–5” sətirində - bu, mənfi işarə deyil (gözlənilmədən, elə deyilmi?) en tiredir. bir nöqtədə belə bir dəhşətli düzəlişlə təhlilçini canlandırmalı oldum.

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

    Heç bir tarix, müsbət və mənfi cəhətlər ola bilməz (yuxarıda check_date funksiyasında gördüyümüz kimi, bu baş verdi).

    2) Qaçılmamış xüsusi simvollar - onlar gələcək, hazır olmaq lazımdır.

    3) Postun növündən asılı olaraq struktur dəyişir.

    4) Köhnə yazıların **qəribə strukturu** ola bilər.

  • Əslində, səhvlərin idarə edilməsi və nəyin baş verə biləcəyi və ya olmaya biləcəyi ilə məşğul olmaq lazımdır və nəyin səhv gedəcəyini və strukturun başqa necə ola biləcəyini və nəyin hara yıxılacağını dəqiq proqnozlaşdıra bilməzsiniz - sadəcə cəhd etməli və nəzərə almalısınız. təhlilçinin atdığı səhvlər.
  • Sonra başa düşürsən ki, bir neçə mövzuda təhlil etməlisən, əks halda birində təhlil etmək daha sonra 30+ saat çəkəcək (bu, sırf işlək vəziyyətdə olan və heç bir qadağaya düşməyən tək yivli analizatorun icra müddətidir). IN bu məqalədə, bu, bir anda oxşar sxemə gətirib çıxardı:

Data Science ilə nə səhv ola bilər? Məlumatların toplanması

Mürəkkəbliyə görə ümumi yoxlama siyahısı:

  • Şəbəkə ilə işləmək və iterasiya ilə html təhlili və ID ilə axtarış.
  • Heterojen strukturun sənədləri.
  • Kodun asanlıqla düşə biləcəyi bir çox yer var.
  • || yazmaq lazımdır kod.
  • Lazımi sənədlər, kod nümunələri və/və ya icma yoxdur.

Bu tapşırığın təxmini vaxtı Reddit-dən məlumat toplamaqdan 3-5 dəfə çox olacaq.

Odnoklassniki qruplarının müqayisəsi

Təsvir edilən texniki cəhətdən ən maraqlı işə keçək. Mənim üçün bu, maraqlı idi, çünki ilk baxışdan olduqca mənasız görünür, amma heç də belə deyil - ona bir çubuq vuran kimi.

Çətinlik yoxlama siyahımızdan başlayaq və qeyd edək ki, onların bir çoxu ilk baxışdan göründüyündən daha çətin olacaq:

  • API var, lakin lazımi funksiyaları demək olar ki, tamamilə yoxdur.
  • Müəyyən funksiyalara poçtla giriş tələb etmək lazımdır, yəni girişin verilməsi ani deyil.
  • Dəhşətli şəkildə sənədləşdirilmişdir (başlamaq üçün, rus və ingilis terminləri hər yerdə qarışdırılır və tamamilə uyğunsuzdur - bəzən sadəcə bir yerdə sizdən nə istədiklərini təxmin etmək lazımdır) və üstəlik, dizayn məlumat əldə etmək üçün uyğun deyil, məsələn , bizə lazım olan funksiya.
  • Sənədlərdə bir seans tələb olunur, lakin əslində ondan istifadə etmir - və API rejimlərinin bütün incəliklərini başa düşməyin bir şeyin işləyəcəyinə ümid etməkdən başqa heç bir yolu yoxdur.
  • Heç bir nümunə və icma yoxdur; məlumat toplamaqda yeganə dəstək nöqtəsi kiçikdir wrapper Python-da (bir çox istifadə nümunələri olmadan).
  • Selenium ən işlək seçim kimi görünür, çünki lazımi məlumatların çoxu kilidlənir.
    1) Yəni, avtorizasiya uydurma istifadəçi (və əl ilə qeydiyyat) vasitəsilə baş verir.

    2) Bununla birlikdə, Selenium ilə düzgün və təkrarlanan iş üçün heç bir zəmanət yoxdur (ən azı ok.ru vəziyyətində).

    3) Ok.ru saytında JavaScript səhvləri var və bəzən qəribə və qeyri-sabit davranır.

    4) Səhifələmə, elementlərin yüklənməsi və s...

    5) Paketin verdiyi API xətaları yöndəmsiz şəkildə idarə edilməli olacaq, məsələn, bu kimi (eksperimental kod parçası):

    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
    

    Ən sevdiyim səhv idi:

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

    6) Nəhayət, Selenium + API ən rasional seçim kimi görünür.

  • Vəziyyəti saxlamaq və sistemi yenidən başlatmaq, bir çox səhvləri, o cümlədən saytın uyğunsuz davranışını idarə etmək lazımdır - və bu səhvləri təsəvvür etmək olduqca çətindir (əlbəttə ki, təhlilçiləri peşəkar şəkildə yazmasanız).

Bu tapşırıq üçün şərti vaxt təxmini Habr-dan məlumat toplamaqdan 3-5 dəfə yüksək olacaq. Baxmayaraq ki, Habr vəziyyətində biz HTML təhlili ilə frontal yanaşmadan istifadə edirik və OK vəziyyətində kritik yerlərdə API ilə işləyə bilərik.

Tapıntılar

Həcmli məlumat emalı boru kəməri modulunun son tarixlərini "yerində" (bu gün planlaşdırırıq!) hesablamağınız nə qədər tələb olunsa da, tapşırıq parametrlərini təhlil etmədən icra müddətini hətta keyfiyyətcə qiymətləndirmək demək olar ki, mümkün deyil.

Bir az daha fəlsəfi qeyddə desək, çevik qiymətləndirmə strategiyaları mühəndislik tapşırıqları üçün yaxşı işləyir, lakin daha eksperimental və müəyyən mənada “yaradıcı” və kəşfiyyat xarakterli, yəni daha az proqnozlaşdırıla bilən problemlərin oxşar mövzuların nümunələrində olduğu kimi çətinlikləri var. biz burada müzakirə etdik.

Əlbəttə ki, məlumatların toplanması sadəcə bir nümunədir - bu, adətən inanılmaz dərəcədə sadə və texniki cəhətdən mürəkkəb olmayan bir işdir və şeytan çox vaxt detallarda olur. Və məhz bu tapşırıq üzərində nəyin səhv ola biləcəyi və işin nə qədər vaxt apara biləcəyi üçün bütün mümkün variantları göstərə bilərik.

Əlavə təcrübələr olmadan tapşırığın xüsusiyyətlərinə nəzər salsanız, Reddit və OK oxşar görünür: API, python sarğı var, lakin mahiyyət etibarı ilə fərq böyükdür. Bu parametrlərə əsasən, Habrın parsı OK-dən daha mürəkkəb görünür - amma praktikada bu, tamamilə əksinədir və problemin parametrlərini təhlil etmək üçün sadə eksperimentlər aparmaqla bunu tapmaq olar.

Təcrübəmə görə, ən təsirli yanaşma ilkin təhlilin özü və sadə ilk təcrübələr üçün lazım olacaq vaxtı təxmini hesablamaq, sənədləri oxumaqdır - bunlar bütün iş üçün dəqiq bir qiymətləndirmə verməyə imkan verəcəkdir. Populyar çevik metodologiya baxımından, sizdən "tapşırıq parametrlərinin qiymətləndirilməsi" üçün bir bilet yaratmağınızı xahiş edirəm, bunun əsasında "sprint" çərçivəsində nələrin edilə biləcəyini qiymətləndirə bilərəm və hər biri üçün daha dəqiq qiymət verə bilərəm. vəzifə.

Buna görə də, ən təsirli arqument "qeyri-texniki" mütəxəssisə hələ qiymətləndirilməmiş parametrlərdən asılı olaraq nə qədər vaxt və resursların dəyişəcəyini göstərəcək bir arqument kimi görünür.

Data Science ilə nə səhv ola bilər? Məlumatların toplanması

Mənbə: www.habr.com

Добавить комментарий