X'jista' jmur ħażin fix-Xjenza tad-Data? Ġbir tad-dejta

X'jista' jmur ħażin fix-Xjenza tad-Data? Ġbir tad-dejta
Illum hemm 100500 kors tax-Xjenza tad-Data u ilu magħruf li l-aktar flus fid-Data Science jistgħu jinqalgħu permezz ta’ korsijiet tax-Xjenza tad-Data (għaliex ħaffer meta tista’ tbigħ pali?). L-iżvantaġġ ewlieni ta 'dawn il-korsijiet huwa li m'għandhom x'jaqsmu xejn ma' xogħol reali: ħadd ma jagħtik dejta nadifa u pproċessata fil-format meħtieġ. U meta titlaq mill-kors u tibda ssolvi problema reali, joħorġu ħafna sfumaturi.

Għalhekk, qed nibdew sensiela ta 'noti "X'jista' jmur ħażin fix-Xjenza tad-Data", ibbażati fuq avvenimenti reali li ġraw lili, sħabi u kollegi. Se nanalizzaw il-kompiti tipiċi tax-Xjenza tad-Data billi nużaw eżempji reali: kif dan fil-fatt jiġri. Nibdew illum bil-kompitu tal-ġbir tad-dejta.

U l-ewwel ħaġa li n-nies jitfixklu meta jibdew jaħdmu b'dejta reali hija fil-fatt jiġbru din id-dejta li hija l-aktar rilevanti għalina. Il-messaġġ ewlieni ta 'dan l-artikolu:

Aħna nissottovalutaw b'mod sistematiku l-ħin, ir-riżorsi, u l-isforz meħtieġa biex niġbru, inaddfu u nippreparaw id-dejta.

U l-aktar importanti, se niddiskutu x'għandna nagħmlu biex nipprevjenu dan.

Skont diversi stimi, it-tindif, it-trasformazzjoni, l-ipproċessar tad-dejta, l-inġinerija tal-karatteristiċi, eċċ jieħdu 80-90% tal-ħin, u l-analiżi 10-20%, filwaqt li kważi l-materjal edukattiv kollu jiffoka esklussivament fuq l-analiżi.

Ejja nħarsu lejn problema analitika sempliċi fi tliet verżjonijiet bħala eżempju tipiku u naraw x'inhuma "ċirkostanzi aggravanti".

U bħala eżempju, għal darb'oħra, se nikkunsidraw varjazzjonijiet simili tal-kompitu tal-ġbir tad-dejta u t-tqabbil tal-komunitajiet għal:

  1. Żewġ subreddits Reddit
  2. Żewġ taqsimiet tal-Habr
  3. Żewġ gruppi ta 'Odnoklassniki

Approċċ kundizzjonali fit-teorija

Iftaħ is-sit u aqra l-eżempji, jekk ikun ċar, warrab ftit sigħat għall-qari, ftit sigħat għall-kodiċi billi tuża l-eżempji u l-debugging. Żid ftit sigħat għall-ġbir. Itfa’ ftit sigħat fir-riżerva (immultiplika bi tnejn u żid N sigħat).

Punt Ewlieni: L-istimi tal-ħin huma bbażati fuq suppożizzjonijiet u suppożizzjonijiet dwar kemm se jieħu.

Huwa meħtieġ li tibda l-analiżi tal-ħin billi jiġu stmati l-parametri li ġejjin għall-problema kondizzjonali deskritta hawn fuq:

  • X'inhu d-daqs tad-dejta u kemm minnha jeħtieġ li tinġabar fiżikament (*ara hawn taħt*).
  • X'inhu l-ħin tal-ġbir għal rekord wieħed u kemm għandek tistenna qabel ma tkun tista' tiġbor it-tieni?
  • Ikkunsidra tikteb kodiċi li jiffranka l-istat u jibda mill-ġdid meta (mhux jekk) kollox ifalli.
  • Ara jekk hemmx bżonn awtorizzazzjoni u ssettja l-ħin biex niksbu aċċess permezz tal-API.
  • Issettja n-numru ta 'żbalji bħala funzjoni tal-kumplessità tad-dejta - evalwaw għal kompitu speċifiku: struttura, kemm trasformazzjonijiet, liema u kif estratt.
  • Waħħal l-iżbalji tan-netwerk u l-problemi bl-imġieba tal-proġett mhux standard.
  • Evalwa jekk il-funzjonijiet meħtieġa humiex fid-dokumentazzjoni u jekk le, allura kif u kemm hu meħtieġ għal soluzzjoni alternattiva.

L-iktar ħaġa importanti hija li sabiex tistma l-ħin - fil-fatt trid tqatta' ħin u sforz fuq "rikonoxximent fis-seħħ" - allura biss l-ippjanar tiegħek ikun adegwat. Għalhekk, irrispettivament minn kemm tkun imbuttat biex tgħid "kemm iddum biex tiġbor id-dejta" - tixtri xi żmien lilek innifsek għal analiżi preliminari u argumenta kemm il-ħin se jvarja skont il-parametri reali tal-problema.

U issa se nuru eżempji speċifiċi fejn parametri bħal dawn se jinbidlu.

Punt Ewlieni: L-istima hija bbażata fuq analiżi tal-fatturi ewlenin li jinfluwenzaw l-ambitu u l-kumplessità tax-xogħol.

Stima bbażata fuq l-aqta hija approċċ tajjeb meta l-elementi funzjonali huma żgħar biżżejjed u ma jkunx hemm ħafna fatturi li jistgħu jinfluwenzaw b'mod sinifikanti d-disinn tal-problema. Iżda fil-każ ta' numru ta' problemi tax-Xjenza tad-Data, fatturi bħal dawn isiru estremament numerużi u tali approċċ isir inadegwat.

Tqabbil tal-komunitajiet Reddit

Nibdew bl-aktar każ sempliċi (kif jirriżulta aktar tard). B'mod ġenerali, biex inkunu kompletament onest, għandna każ kważi ideali, ejja niċċekkjaw il-lista ta 'kontroll tal-kumplessità tagħna:

  • Hemm API pulita, ċara u dokumentata.
  • Huwa estremament sempliċi u l-aktar importanti, token jinkiseb awtomatikament.
  • Hemm tgeżwir tal-python - b'ħafna eżempji.
  • Komunità li tanalizza u tiġbor data fuq reddit (anke għal videos YouTube li jispjegaw kif tuża python wrapper) Pereżempju.
  • Il-metodi li għandna bżonn x'aktarx jeżistu fl-API. Barra minn hekk, il-kodiċi jidher kompatt u nadif, hawn taħt huwa eżempju ta 'funzjoni li tiġbor kummenti fuq post.

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

Meħuda minn dan għażla ta 'utilitajiet konvenjenti għat-tgeżwir.

Minkejja l-fatt li dan huwa l-aħjar każ, xorta ta 'min jieħu kont ta' numru ta 'fatturi importanti mill-ħajja reali:

  • Limiti tal-API - aħna sfurzati nieħdu dejta f'lottijiet (irqad bejn talbiet, eċċ.).
  • Ħin tal-ġbir - għal analiżi u paragun kompluti, ser ikollok twarrab ħin sinifikanti biss biex il-brimba timxi permezz tas-subreddit.
  • Il-bot irid jaħdem fuq server—ma tistax sempliċement tħaddem fuq il-laptop tiegħek, poġġih fil-backpack tiegħek, u tmur fin-negozju tiegħek. Allura ħadt kollox fuq VPS. Bl-użu tal-kodiċi promozzjonali habrahabr10 tista' tiffranka 10% oħra tal-ispiża.
  • L-inaċċessibbiltà fiżika ta 'xi data (huma viżibbli għall-amministraturi jew huma diffiċli wisq biex tinġabar) - din għandha titqies; fil-prinċipju, mhux id-data kollha tista' tinġabar fi żmien adegwat.
  • Żbalji tan-netwerk: In-netwerking huwa uġigħ.
  • Din hija dejta reali ħajja - qatt ma hija pura.

Naturalment, huwa meħtieġ li jiġu inklużi dawn l-isfumaturi fl-iżvilupp. Sigħat/ġranet speċifiċi jiddependu fuq esperjenza ta 'żvilupp jew esperjenza ta' ħidma fuq kompiti simili, madankollu, naraw li hawnhekk il-kompitu huwa purament ta 'inġinerija u ma jeħtieġx movimenti addizzjonali tal-ġisem biex issolvi - kollox jista' jiġi vvalutat tajjeb ħafna, skedat u jsir.

Tqabbil tat-taqsimiet Habr

Ejja ngħaddu għal każ aktar interessanti u mhux trivjali ta’ tqabbil ta’ ħjut u/jew sezzjonijiet ta’ Habr.

Ejja niċċekkjaw il-lista ta 'kontroll tal-kumplessità tagħna - hawn, sabiex tifhem kull punt, ikollok tħaffer ftit fil-kompitu innifsu u tesperimenta.

  • Għall-ewwel taħseb li hemm API, iżda m'hemmx. Iva, iva, Habr għandu API, iżda sempliċement mhux aċċessibbli għall-utenti (jew forsi ma taħdimx).
  • Imbagħad tibda parsing html - "talbiet għall-importazzjoni", x'jista' jmur ħażin?
  • Kif parse xorta? L-aktar approċċ sempliċi u użat ta' spiss huwa li jtenni fuq IDs, innota li mhuwiex l-aktar effiċjenti u se jkollu jimmaniġġja każijiet differenti - hawn eżempju tad-densità ta 'IDs reali fost dawk kollha eżistenti.

    X'jista' jmur ħażin fix-Xjenza tad-Data? Ġbir tad-dejta
    Meħuda minn dan oġġetti.

  • Id-dejta mhux ipproċessata mgeżwra f'HTML fuq il-web hija uġigħ. Pereżempju, trid tiġbor u tissejvja l-klassifikazzjoni ta’ artiklu: ħarġet il-punteġġ mill-html u ddeċidejt li ssalvah bħala numru għal aktar proċessar: 

    1) int(score) jitfa' żball: peress li fuq Habré hemm minus, bħal, pereżempju, fil-linja "–5" - dan huwa en dash, mhux sinjal minus (mingħajr mistenni, hux?), allura fuq xi punt kelli ngħolli l-parser għall-ħajja b'tali soluzzjoni terribbli.

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

    Jista 'jkun hemm l-ebda data, pluses u minuses fil-livelli kollha (kif naraw hawn fuq fil-funzjoni check_date, dan ġara).

    2) Karattri speċjali mhux maħruba - se jiġu, trid tkun ippreparat.

    3) L-istruttura tinbidel skond it-tip ta 'post.

    4) Postijiet qodma jista' jkollhom **struttura stramba**.

  • Essenzjalment, l-immaniġġjar tal-iżbalji u dak li jista’ jiġri jew ma jseħħx iridu jiġu ttrattati u ma tistax tipprevedi b’mod ċert x’se jmur ħażin u kif inkella l-istruttura tista’ tkun u x’se jaqa’ fejn – trid biss tipprova tqis l-iżbalji li l-parser jitfa.
  • Imbagħad tirrealizza li għandek bżonn parse f'diversi ħjut, inkella parsing f'wieħed imbagħad jieħu 30 + siegħa (dan huwa purament il-ħin ta 'eżekuzzjoni ta' parser b'ħajt wieħed li diġà jaħdem, li jorqod u ma jaqa 'taħt l-ebda projbizzjoni). IN dan artikolu, dan wassal f'xi punt għal skema simili:

X'jista' jmur ħażin fix-Xjenza tad-Data? Ġbir tad-dejta

Lista ta' kontroll totali skont il-kumplessità:

  • Ħidma man-netwerk u parsing html b'iterazzjoni u tfittxija bl-ID.
  • Dokumenti ta' struttura eteroġenja.
  • Hemm ħafna postijiet fejn il-kodiċi jista 'faċilment jaqa'.
  • Huwa meħtieġ li tikteb || kodiċi.
  • Id-dokumentazzjoni meħtieġa, l-eżempji tal-kodiċi, u/jew il-komunità huma neqsin.

Il-ħin stmat għal dan il-kompitu se jkun 3-5 darbiet ogħla milli għall-ġbir tad-dejta minn Reddit.

Tqabbil ta 'gruppi Odnoklassniki

Ejja ngħaddu għall-każ l-aktar teknikament interessanti deskritt. Għalija, kien interessanti preċiżament għaliex mal-ewwel daqqa t'għajn, jidher pjuttost trivjali, iżda ma jirriżultax li huwa hekk - malli tpoġġi stick lejha.

Ejja nibdew bil-lista ta 'kontroll tad-diffikultà tagħna u ninnota li ħafna minnhom se jirriżultaw ferm aktar diffiċli milli jidhru għall-ewwel:

  • Hemm API, iżda hija kważi kompletament nieqsa mill-funzjonijiet meħtieġa.
  • Għal ċerti funzjonijiet għandek bżonn titlob aċċess bil-posta, jiġifieri, l-għoti tal-aċċess mhuwiex istantanju.
  • Huwa terriblement dokumentat (biex, it-termini Russu u Ingliż huma mħallta kullimkien, u b'mod kompletament inkonsistenti - xi drabi għandek bżonn biss taqta' dak li jridu mingħandek x'imkien) u, barra minn hekk, id-disinn mhuwiex adattat biex tinkiseb data, pereżempju , il-funzjoni li għandna bżonn.
  • Jeħtieġ sessjoni fid-dokumentazzjoni, iżda fil-fatt ma jużahx - u m'hemm l-ebda mod biex tifhem l-intricacies kollha tal-modi API għajr it-tama u t-tama li xi ħaġa taħdem.
  • M'hemm l-ebda eżempji u l-ebda komunità; l-uniku punt ta 'appoġġ fil-ġbir ta' informazzjoni huwa żgħir tgeżwir f'Python (mingħajr ħafna eżempji ta' użu).
  • Is-selenju jidher li huwa l-iktar għażla fattibbli, peress li ħafna mid-dejta meħtieġa hija maqfula.
    1) Jiġifieri, l-awtorizzazzjoni sseħħ permezz ta' utent fittizju (u reġistrazzjoni bl-idejn).

    2) Madankollu, b'Selenium m'hemmx garanziji għal xogħol korrett u ripetibbli (għall-inqas fil-każ ta 'ok.ru żgur).

    3) Il-websajt Ok.ru fiha żbalji JavaScript u xi drabi jaġixxi b'mod stramb u inkonsistenti.

    4) Trid tagħmel il-paġnar, it-tagħbija ta 'elementi, eċċ...

    5) L-iżbalji tal-API li jagħti t-tgeżwir iridu jiġu ttrattati b'mod skomdu, pereżempju, bħal dan (biċċa kodiċi sperimentali):

    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
    

    L-iżball favorit tiegħi kien:

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

    6) Fl-aħħar mill-aħħar, Selenium + API tidher qisha l-iktar għażla razzjonali.

  • Huwa meħtieġ li tiffranka l-istat u terġa 'tibda s-sistema, timmaniġġja ħafna żbalji, inkluża l-imġiba inkonsistenti tas-sit - u dawn l-iżbalji huma pjuttost diffiċli li wieħed jimmaġina (sakemm ma tiktebx parsers professjonalment, ovvjament).

L-istima tal-ħin kundizzjonali għal dan il-kompitu se tkun 3-5 darbiet ogħla milli għall-ġbir tad-dejta minn Habr. Minkejja l-fatt li fil-każ ta 'Habr nużaw approċċ frontali b'parsing HTML, u fil-każ ta' OK nistgħu naħdmu mal-API f'postijiet kritiċi.

Sejbiet

Ma jimpurtax kemm inti mitlub li tistma l-iskadenzi "fuq il-post" (aħna qed nippjanaw illum!) Ta 'modulu voluminuż tal-pipeline tal-ipproċessar tad-dejta, il-ħin ta' eżekuzzjoni kważi qatt ma huwa possibbli li jiġi stmat anke kwalitattivament mingħajr ma jiġu analizzati l-parametri tal-kompitu.

Fuq nota kemmxejn aktar filosofika, l-istrateġiji ta' stima b'aġilità jaħdmu tajjeb għall-kompiti ta' inġinerija, iżda problemi li huma aktar sperimentali u, f'ċertu sens, "kreattivi" u esploratorji, jiġifieri, inqas prevedibbli, għandhom diffikultajiet, bħal fl-eżempji ta 'suġġetti simili , li ddiskutejna hawn.

Naturalment, il-ġbir tad-dejta huwa biss eżempju ewlieni - ġeneralment huwa kompitu oerhört sempliċi u teknikament mhux ikkumplikat, u x-xitan spiss ikun fid-dettalji. U huwa preċiżament fuq dan il-kompitu li nistgħu nuru l-firxa kollha ta 'għażliet possibbli għal dak li jista' jmur ħażin u eżattament kemm jista 'jdum ix-xogħol.

Jekk tagħti t'għajn lejn il-karatteristiċi tal-kompitu mingħajr esperimenti addizzjonali, allura Reddit u OK jidhru simili: hemm API, tgeżwir tal-python, iżda essenzjalment, id-differenza hija enormi. Meta wieħed jiġġudika minn dawn il-parametri, il-pars ta 'Habr jidher aktar ikkumplikat minn OK - iżda fil-prattika huwa pjuttost l-oppost, u dan huwa eżattament dak li jista' jinstab billi jsiru esperimenti sempliċi biex tanalizza l-parametri tal-problema.

Fl-esperjenza tiegħi, l-aktar approċċ effettiv huwa li tistma bejn wieħed u ieħor iż-żmien li ser ikollok bżonn għall-analiżi preliminari nnifisha u l-ewwel esperimenti sempliċi, taqra d-dokumentazzjoni - dawn jippermettulek tagħti stima preċiża għax-xogħol kollu. F'termini tal-metodoloġija b'aġilità popolari, nitolbok biex toħloq biljett għall-"istima tal-parametri tal-kompitu", li fuq il-bażi tiegħu nista' nagħti valutazzjoni ta 'dak li jista' jitwettaq fi ħdan l-"sprint" u nagħti stima aktar preċiża għal kull wieħed. kompitu.

Għalhekk, l-aktar argument effettiv jidher li jkun wieħed li juri speċjalista "mhux tekniku" kemm se jvarjaw ħin u riżorsi skont il-parametri li għad iridu jiġu vvalutati.

X'jista' jmur ħażin fix-Xjenza tad-Data? Ġbir tad-dejta

Sors: www.habr.com

Żid kumment