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:
Żewġ subreddits Reddit
Żewġ taqsimiet tal-Habr
Ż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.
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:
Ħ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.
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.
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:
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
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.