Zer egin daiteke oker Datu Science-rekin? Datu bilketa

Zer egin daiteke oker Datu Science-rekin? Datu bilketa
Gaur egun, 100500 Datu Zientzien ikastaro daude eta aspalditik jakina da Datu Zientzietan diru gehien Datu Zientziako ikastaroen bidez lor daitekeela (zergatik zulatu palak saltzen dituzunean?). Ikastaro hauen desabantaila nagusia benetako lanarekin zerikusirik ez dutela da: inork ez dizu datu garbi eta prozesatu behar den formatuan emango. Eta ikastaroa utzi eta benetako arazo bat konpontzen hasten zarenean, Γ±abardura asko sortzen dira.

Hori dela eta, "Zer gaizki joan daiteke Data Science-rekin" ohar sorta bat hasten ari gara, niri, nire adiskideei eta lankideei, gertatu zitzaizkidan benetako gertakarietan oinarrituta. Datu-zientziako ohiko zereginak aztertuko ditugu benetako adibideen bidez: hau nola gertatzen den. Hasi gaitezen gaur datu bilketa lanarekin.

Eta jendeak datu errealekin lanean hasten direnean estropezu egiten duen lehenengo gauza guretzat garrantzitsuenak diren datu horiek biltzea da. Artikulu honen mezu nagusia:

Datuak biltzeko, garbitzeko eta prestatzeko behar diren denbora, baliabideak eta ahalegina sistematikoki gutxiesten ditugu.

Eta garrantzitsuena, hau saihesteko zer egin behar den eztabaidatuko dugu.

Hainbat kalkuluen arabera, garbiketak, eraldaketak, datuen tratamenduak, ezaugarrien ingeniaritza eta abarrek denboraren % 80-90 hartzen dute, eta analisiak % 10-20, eta hezkuntza-material ia guztiak analisian soilik oinarritzen dira.

Ikus dezagun hiru bertsiotako arazo analitiko soil bat adibide tipiko gisa eta ikus dezagun zer diren β€œegoera larrigarriak”.

Eta adibide gisa, berriro ere, datuak biltzeko eta komunitateak alderatzeko zereginaren antzeko aldaerak hartuko ditugu kontuan:

  1. Bi Reddit azpierredituak
  2. Habr-en bi atal
  3. Odnoklassniki talde bi

Ikuspegi baldintzatua teorian

Ireki gunea eta irakurri adibideak, argi badago, utzi ordu batzuk irakurtzeko, ordu batzuk kodea adibideak erabiliz eta arazketa. Gehitu ordu batzuk biltzeko. Erreserban ordu batzuk bota (bikoiztu bi eta gehitu N ordu).

Gakoa: denboraren kalkuluak zenbat denbora beharko duen hipotesietan eta asmakizunetan oinarritzen dira.

Beharrezkoa da denboraren analisia lehen deskribatutako baldintzazko arazorako parametro hauek estimatuz:

  • Zein da datuen tamaina eta zenbat bildu behar den fisikoki (*ikus behean*).
  • Zein da disko baten bilketa denbora eta zenbat denbora itxaron behar duzu bigarrena biltzeko?
  • Demagun egoera gordetzen duen kodea idaztea eta dena huts egiten duenean (ez bada) berrabiarazi egiten duena.
  • Irudikatu baimenik behar dugun ala ez eta ezarri APIaren bidez sarbidea lortzeko ordua.
  • Ezarri errore-kopurua datuen konplexutasunaren arabera - ebaluatu zeregin zehatz baterako: egitura, zenbat eraldaketa, zer eta nola atera.
  • Konpondu sareko akatsak eta proiektuaren portaera ez-estandarra duten arazoak.
  • Ebaluatu behar diren funtzioak dokumentazioan dauden eta ez bada, orduan nola eta zenbat behar den konponbide baterako.

Garrantzitsuena zera da: denbora kalkulatzeko - egia esan denbora eta ahalegina eman behar dituzu "indarrean ezagutarazteko" - orduan bakarrik zure plangintza egokia izango dela. Hori dela eta, "zenbat denbora behar da datuak biltzeko" esatera zenbateraino bultzatzen zaren, erosi ezazu denbora pixka bat aurretiazko analisia egiteko eta argudiatu zenbat denbora aldatuko den arazoaren benetako parametroen arabera.

Eta orain, halako parametroak aldatuko diren adibide zehatzak erakutsiko ditugu.

Funtsezko puntua: estimazioa lanaren esparruan eta konplexutasunean eragina duten funtsezko faktoreen azterketan oinarritzen da.

Asmakizunetan oinarritutako estimazioa hurbilketa ona da elementu funtzionalak nahikoa txikiak direnean eta arazoaren diseinuan nabarmen eragin dezaketen faktore asko ez daudenean. Baina Datu Zientzien arazo batzuen kasuan, faktore horiek izugarri ugaritzen dira eta ikuspegi hori desegokia bihurtzen da.

Reddit komunitateen konparaketa

Has gaitezen kasurik errazenetik (geroago ikusiko den bezala). Oro har, guztiz zintzoa izateko, kasu ia ezin hobea dugu, ikus dezagun gure konplexutasun zerrenda:

  • API garbi, argi eta dokumentatua dago.
  • Oso erraza da eta garrantzitsuena, token bat automatikoki lortzen da.
  • Ez dago python bilgarri - Adibide askorekin.
  • Reddit-en datuak aztertzen eta biltzen dituen komunitatea (baita python wrapper nola erabili azaltzen duten YouTube-ko bideoetara ere) Adibidez.
  • Behar ditugun metodoak ziurrenik APIan existitzen dira. Gainera, kodea trinkoa eta garbia dirudi, behean argitalpen baten iruzkinak biltzen dituen funtzio baten adibidea dago.

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

Handik hartua hau biltzeko erabilgarritasun erosoen aukeraketa.

Kasurik onena izan arren, merezi du bizitza errealeko faktore garrantzitsu batzuk kontuan hartzea:

  • API mugak - datuak loteka hartzera behartuta gaude (eskaeren artean lo egin, etab.).
  • Bilketa-denbora: azterketa eta konparaketa osoa egiteko, denbora garrantzitsua utzi beharko duzu armiarma azpierredituan zehar ibiltzeko.
  • Botak zerbitzari batean exekutatu behar du; ezin duzu zure ordenagailu eramangarrian exekutatu, motxilan sartu eta zure negozioari ekin. Beraz, dena VPS batean exekutatu nuen. Habrahabr10 promozio kodea erabiliz kostuaren beste %10 aurrez dezakezu.
  • Datu batzuen eskuraezintasun fisikoa (administratzaileentzat ikusgai daude edo biltzeko zailegiak dira) - hori kontuan hartu behar da; printzipioz, ezin dira datu guztiak denbora egokian bildu.
  • Sareko akatsak: Sarea mingarria da.
  • Hau benetako datu bizia da, ez da inoiz hutsa.

Jakina, beharrezkoa da Γ±abardura horiek garapenean sartzea. Ordu/egun zehatzak garapen-esperientziaren edo antzeko zereginetan lan egiteko esperientziaren araberakoak dira, hala ere, hemen zeregina ingeniaritza hutsa dela ikusten dugu eta ez duela gorputz-mugimendu gehigarririk behar konpontzeko - dena oso ondo ebaluatu, programatu eta egin daiteke.

Habr atalen konparaketa

Goazen Habr-en hariak edo/eta atalak alderatzeko kasu interesgarri eta ez hutsalago batera.

Ikus dezagun gure konplexutasun-zerrenda - hemen, puntu bakoitza ulertzeko, apur bat sakondu eta esperimentatu beharko duzu.

  • Hasieran API bat dagoela uste duzu, baina ez dago. Bai, bai, Habr-ek API bat dauka, baina erabiltzaileentzat ez da eskuragarri (edo agian ez du batere funtzionatzen).
  • Ondoren, html analizatzen hasten zara - "inportazio eskaerak", zer egin liteke gaizki?
  • Nola analizatu hala ere? Hurbilketa errazena eta erabiliena IDen gainean errepikatzea da, kontuan izan ez dela eraginkorrena eta kasu desberdinak kudeatu beharko dituela - hona hemen dauden guztien artean benetako IDen dentsitatearen adibide bat.

    Zer egin daiteke oker Datu Science-rekin? Datu bilketa
    Handik hartua hau artikuluak.

  • Webaren gainean HTMLn bildutako datu gordinak mina da. Adibidez, artikulu baten balorazioa bildu eta gorde nahi duzu: puntuazioa html-tik kendu eta zenbaki gisa gordetzea erabaki duzu gero prozesatzeko: 

    1) int(puntuazioa) errore bat botatzen du: HabrΓ©-n minus bat dagoenez, adibidez, "–5" lerroan - hau en marra bat da, ez minus ikurra (ustekabean, ezta?), beraz. punturen batean analizatzailea biziarazi behar izan nuen halako konponketa izugarri batekin.

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

    Baliteke datarik, gehigarri eta negatiborik ez egotea (goian check_date funtzioan ikusten dugun bezala, hau gertatu da).

    2) Ihes gabeko karaktere bereziak - etorriko dira, prestatuta egon behar duzu.

    3) Egitura aldatu egiten da postu motaren arabera.

    4) Mezu zaharrek **egitura arraroa** izan dezakete.

  • Funtsean, akatsen kudeaketa eta zer gerta daitekeen edo ez gerta daitekeen kudeatu beharko dira eta ezin duzu ziur aurreikusi zer gaizki joango den eta nola bestela egitura izan daitekeen eta zer non eroriko den. Saiatu eta kontuan hartu besterik ez duzu egin beharko. analizatzaileak botatzen dituen akatsak.
  • Orduan konturatzen zara hainbat hari analizatu behar dituzula, bestela batean analizatzeak 30 ordu baino gehiago beharko ditu (hau da dagoeneko lanean ari den hari bakarreko analizatzaile baten exekuzio-denbora soilik, lo egiten duena eta inolako debekuetan sartzen ez dena). IN hau artikuluan, horrek noizbait antzeko eskema bat ekarri zuen:

Zer egin daiteke oker Datu Science-rekin? Datu bilketa

Guztizko kontrol-zerrenda konplexutasunaren arabera:

  • Sarearekin lan egitea eta html analizatzea iterazioarekin eta ID bidezko bilaketarekin.
  • Egitura heterogeneoko dokumentuak.
  • Kodea erraz erori daitekeen leku asko daude.
  • Idatzi behar da || kodea.
  • Beharrezko dokumentazioa, kode-adibideak eta/edo komunitatea falta dira.

Zeregin honetarako aurreikusitako denbora Reddit-en datuak biltzeko baino 3-5 aldiz handiagoa izango da.

Odnoklassniki taldeen konparaketa

Goazen teknikoki deskribatutako kasurik interesgarrienera. Niretzat interesgarria izan zen, hain zuzen, lehen begiratuan nahiko hutsala dirudielako, baina ez da batere horrela gertatzen - makila bat sartu bezain pronto.

Has gaitezen gure zailtasunen kontrol-zerrendatik eta ohar gaitezen horietako asko hasieran ikusten diren baino askoz zailagoak izango direla:

  • API bat dago, baina ia guztiz falta zaizkio beharrezko funtzioak.
  • Funtzio batzuetarako sarbidea eskatu behar da posta bidez, hau da, sarbidea ematea ez da berehalakoa.
  • Izugarri dokumentatua dago (hasteko, errusiera eta ingelesa terminoak nonahi nahasten dira, eta guztiz inkoherentea - batzuetan zuregandik zer nahi duten asmatu behar duzu nonbait) eta, gainera, diseinua ez da egokia datuak lortzeko, adibidez. , behar dugun funtzioa.
  • Dokumentazioan saio bat eskatzen du, baina ez du benetan erabiltzen - eta ez dago modurik API moduen korapilatsu guztiak ulertzeko modurik, inguruan ibiltzea eta zerbait funtzionatuko duela espero izateaz gain.
  • Ez dago adibiderik eta ez komunitaterik; informazioa biltzeko laguntza puntu bakarra txikia da Wrapper Python-en (erabilera adibide askorik gabe).
  • Selenioa da aukerarik bideragarriena dela, beharrezko datu asko blokeatuta baitaude.
    1) Hau da, baimena fikziozko erabiltzaile baten bidez egiten da (eta erregistroa eskuz).

    2) Hala ere, Selenium-ekin ez dago lan zuzen eta errepikagarrirako bermerik (ok.ru-ren kasuan behintzat ziur).

    3) Ok.ru webguneak JavaScript akatsak ditu eta batzuetan portaera arraroa eta inkoherentea da.

    4) Paginazioa egin behar duzu, elementuak kargatu, etab...

    5) Bilgarriak ematen dituen API akatsak modu baldarrean kudeatu beharko dira, adibidez, honela (kode esperimental bat):

    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
    

    Nire akatsik gogokoena izan zen:

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

    6) Azken finean, Selenium + API aukerarik arrazionalena dirudi.

  • Egoera gorde eta sistema berrabiarazi behar da, akats asko kudeatu, gunearen portaera ez-koherentea barne - eta akats horiek nahiko zailak dira imajinatzea (analizatzaileak profesionalki idazten ez badituzu, noski).

Zeregin horretarako baldintzapeko denbora estimazioa Habr-en datuak biltzeko baino 3-5 aldiz handiagoa izango da. Nahiz eta Habr-en kasuan ikuspegi frontala erabiltzen dugu HTML analisiarekin, eta OK kasuan APIarekin lan egin dezakegu leku kritikoetan.

Findings

Datuak prozesatzeko kanalizazio modulu handi baten epeak zenbatesteko behar duzun zenbaterainokoa den ere (gaur planifikatzen ari gara!), exekuzio-denbora ia inoiz ez da posible kualitatiboki estimatzea ataza-parametroak aztertu gabe.

Ohar apur bat filosofikoago batean, estimazio arin-estrategiek ondo funtzionatzen dute ingeniaritza-zereginetarako, baina esperimentalagoak diren eta, nolabait, "sormenezkoak" eta esploratzaileak diren arazoek, hau da, ez hain aurreikusgarriak, zailtasunak dituzte, antzeko gaien adibideetan bezala , hemen eztabaidatu duguna.

Jakina, datu-bilketa adibide nagusi bat besterik ez da - normalean lan izugarri sinplea eta teknikoki konplexurik gabekoa da, eta deabrua sarritan dago xehetasunetan. Eta, hain zuzen ere, zeregin horretan erakutsi ditzakegu oker egon daitezkeen aukerak eta lanak zenbat denbora iraun dezakeen jakiteko.

Zereginaren ezaugarriei esperimentu gehigarririk gabe begiratuz gero, Reddit eta OK antzekoak dirudite: API bat dago, python bilgarri bat, baina funtsean, aldea handia da. Parametro horiek ikusita, Habr-en pars-ak OK baino konplikatuagoa dirudi, baina praktikan guztiz kontrakoa da, eta horixe da arazoaren parametroak aztertzeko esperimentu errazak eginez aurki daitekeena.

Nire esperientziaren arabera, ikuspegi eraginkorrena aurretiazko analisia bera eta lehen esperimentu sinpleak egiteko beharko duzun denbora gutxi gorabehera kalkulatzea da, dokumentazioa irakurriz - hauek lan osoaren estimazio zehatza emango dizute. Metodologia arin ezagunari dagokionez, "zereginen parametroak estimatzeko" txartel bat sortzea eskatzen dizut, eta horren oinarrian "sprint"-en barruan lor daitekeenaren balorazioa eman dezaket eta bakoitzaren estimazio zehatzagoa eman dezaket. zeregina.

Horregatik, badirudi argudiorik eraginkorrena espezialista β€œez tekniko” bati zenbat denbora eta baliabide aldatuko diren oraindik ebaluatu gabe dauden parametroen arabera erakutsiko lukeena.

Zer egin daiteke oker Datu Science-rekin? Datu bilketa

Iturria: www.habr.com

Gehitu iruzkin berria