Ni nini kinachoweza kwenda vibaya na Sayansi ya Data? Mkusanyiko wa data

Ni nini kinachoweza kwenda vibaya na Sayansi ya Data? Mkusanyiko wa data
Leo kuna kozi 100500 za Sayansi ya Takwimu na imejulikana kwa muda mrefu kuwa pesa nyingi zaidi katika Sayansi ya Takwimu zinaweza kupatikana kupitia kozi za Sayansi ya Takwimu (kwa nini uchimba wakati unaweza kuuza majembe?). Hasara kuu ya kozi hizi ni kwamba hawana chochote cha kufanya na kazi halisi: hakuna mtu atakupa data safi, iliyosindika katika muundo unaohitajika. Na unapoacha kozi na kuanza kutatua tatizo halisi, nuances nyingi hujitokeza.

Kwa hiyo, tunaanza mfululizo wa maelezo "Ni nini kinachoweza kwenda vibaya na Sayansi ya Data", kulingana na matukio halisi yaliyotokea kwangu, wandugu zangu na wenzangu. Tutachanganua kazi za kawaida za Sayansi ya Data kwa kutumia mifano halisi: jinsi hii inavyotokea. Hebu tuanze leo na kazi ya kukusanya data.

Na jambo la kwanza ambalo watu hujikwaa wanapoanza kufanya kazi na data halisi ni kukusanya data hii ambayo ni muhimu zaidi kwetu. Ujumbe muhimu wa makala hii:

Tunapuuza muda, rasilimali na juhudi zinazohitajika ili kukusanya, kusafisha na kuandaa data.

Na muhimu zaidi, tutajadili nini cha kufanya ili kuzuia hili.

Kwa mujibu wa makadirio mbalimbali, kusafisha, mabadiliko, usindikaji wa data, uhandisi wa kipengele, nk kuchukua 80-90% ya muda, na uchambuzi wa 10-20%, wakati karibu nyenzo zote za elimu huzingatia pekee uchambuzi.

Wacha tuangalie shida rahisi ya uchanganuzi katika matoleo matatu kama mfano wa kawaida na tuone "hali zinazozidisha" ni nini.

Na kama mfano, tena, tutazingatia tofauti zinazofanana za kazi ya kukusanya data na kulinganisha jumuiya kwa:

  1. Reddit mbili ndogo
  2. Sehemu mbili za Habr
  3. Vikundi viwili vya Odnoklassniki

Mbinu ya masharti katika nadharia

Fungua tovuti na usome mifano, ikiwa ni wazi, tenga saa chache za kusoma, saa chache kwa msimbo kwa kutumia mifano na utatuzi. Ongeza masaa machache kwa mkusanyiko. Tupa kwa saa chache katika hifadhi (zidisha kwa mbili na kuongeza saa N).

Hoja Muhimu: Makadirio ya muda yanatokana na dhana na ubashiri kuhusu muda ambao itachukua.

Inahitajika kuanza uchambuzi wa wakati kwa kukadiria vigezo vifuatavyo vya shida ya masharti iliyoelezewa hapo juu:

  • Ni ukubwa gani wa data na ni kiasi gani kinahitaji kukusanywa kimwili (*tazama hapa chini*).
  • Ni wakati gani wa kukusanya kwa rekodi moja na unapaswa kusubiri kwa muda gani kabla ya kukusanya ya pili?
  • Fikiria kuandika nambari ambayo huokoa hali na kuanza kuanza tena wakati (sio ikiwa) kila kitu kitashindwa.
  • Tambua kama tunahitaji uidhinishaji na uweke wakati wa kupata ufikiaji kupitia API.
  • Weka idadi ya makosa kama kazi ya utata wa data - tathmini kwa kazi maalum: muundo, mabadiliko mangapi, nini na jinsi ya kutoa.
  • Rekebisha makosa ya mtandao na matatizo na tabia isiyo ya kawaida ya mradi.
  • Tathmini ikiwa vitendaji vinavyohitajika viko kwenye hati na ikiwa sivyo, basi ni jinsi gani na ni kiasi gani kinahitajika kwa suluhisho.

Jambo muhimu zaidi ni kwamba ili kukadiria muda - kwa kweli unahitaji kutumia muda na jitihada kwenye "upelelezi kwa nguvu" - basi tu mipango yako itakuwa ya kutosha. Kwa hivyo, haijalishi ni kiasi gani unasukumwa kusema "inachukua muda gani kukusanya data" - jinunulie muda kwa uchambuzi wa awali na ubishane na ni muda gani utatofautiana kulingana na vigezo halisi vya kazi.

Na sasa tutaonyesha mifano maalum ambapo vigezo kama hivyo vitabadilika.

Hoja Muhimu: Makadirio yanatokana na uchanganuzi wa mambo muhimu yanayoathiri upeo na utata wa kazi.

Ukadiriaji unaotegemea nadhani ni mbinu nzuri wakati vipengele vya utendaji ni vidogo vya kutosha na hakuna vipengele vingi vinavyoweza kuathiri kwa kiasi kikubwa muundo wa tatizo. Lakini kwa upande wa shida kadhaa za Sayansi ya Takwimu, mambo kama haya huwa mengi sana na njia kama hiyo inakuwa haitoshi.

Ulinganisho wa jamii za Reddit

Wacha tuanze na kesi rahisi (kama inavyotokea baadaye). Kwa ujumla, kuwa waaminifu kabisa, tuna kesi karibu inayofaa, wacha tuangalie orodha yetu ya ugumu:

  • Kuna API safi, wazi na iliyoandikwa.
  • Ni rahisi sana na muhimu zaidi, ishara hupatikana kiatomati.
  • Kuna kanga ya chatu - na mifano mingi.
  • Jumuiya inayochanganua na kukusanya data kwenye reddit (hata kwa video za YouTube zinazoelezea jinsi ya kutumia karatasi ya chatu) Kwa mfano.
  • Njia tunazohitaji zipo kwenye API. Zaidi ya hayo, msimbo unaonekana thabiti na safi, hapa chini ni mfano wa chaguo la kukokotoa ambalo linakusanya maoni kwenye chapisho.

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

Imechukuliwa kutoka hii uteuzi wa huduma zinazofaa za kufunika.

Licha ya ukweli kwamba hii ndio kesi bora, bado inafaa kuzingatia mambo kadhaa muhimu kutoka kwa maisha halisi:

  • Vikomo vya API - tunalazimika kuchukua data katika batches (kulala kati ya maombi, nk).
  • Muda wa kukusanya - kwa uchanganuzi kamili na ulinganisho, itabidi utenge wakati muhimu ili buibui apitie subreddit.
  • Boti lazima iendeshe kwenye seva-huwezi kuiendesha tu kwenye kompyuta yako ya mkononi, kuiweka kwenye mkoba wako, na kuendelea na biashara yako. Kwa hivyo niliendesha kila kitu kwenye VPS. Kwa kutumia msimbo wa ofa habrahabr10 unaweza kuokoa 10% nyingine ya gharama.
  • Kutoweza kufikiwa kwa data fulani (zinaonekana kwa wasimamizi au ni ngumu sana kukusanya) - hii lazima izingatiwe; kimsingi, sio data zote zinaweza kukusanywa kwa wakati wa kutosha.
  • Hitilafu za Mtandao: Mtandao ni maumivu.
  • Hii ni data hai halisi - sio safi kamwe.

Bila shaka, ni muhimu kujumuisha nuances hizi katika maendeleo. Saa/siku mahususi hutegemea uzoefu wa maendeleo au uzoefu wa kufanya kazi kwenye kazi zinazofanana, hata hivyo, tunaona kwamba hapa kazi ni ya uhandisi tu na haihitaji harakati za ziada za mwili kutatua - kila kitu kinaweza kutathminiwa vizuri sana, kuratibiwa na kufanywa.

Ulinganisho wa sehemu za Habr

Wacha tuendelee kwenye kisa cha kuvutia zaidi na kisicho cha kawaida cha kulinganisha nyuzi na/au sehemu za Habr.

Wacha tuangalie orodha yetu ya ugumu - hapa, ili kuelewa kila nukta, itabidi kuchimba kidogo kwenye kazi yenyewe na kujaribu.

  • Mwanzoni unafikiri kuna API, lakini hakuna. Ndiyo, ndiyo, Habr ana API, lakini haipatikani kwa watumiaji (au labda haifanyi kazi kabisa).
  • Kisha unaanza kuchanganua html - "maombi ya kuingiza", ni nini kinachoweza kwenda vibaya?
  • Jinsi ya kuchanganua hata hivyo? Njia rahisi na inayotumiwa mara kwa mara ni kukariri vitambulisho, kumbuka kuwa sio bora zaidi na italazimika kushughulikia kesi tofauti - hapa kuna mfano wa msongamano wa vitambulisho halisi kati ya vyote vilivyopo.

    Ni nini kinachoweza kwenda vibaya na Sayansi ya Data? Mkusanyiko wa data
    Imechukuliwa kutoka hii nakala.

  • Data ghafi iliyofungwa kwa HTML juu ya wavuti ni maumivu. Kwa mfano, unataka kukusanya na kuhifadhi ukadiriaji wa makala: ulitoa alama kutoka kwa html na ukaamua kuihifadhi kama nambari kwa usindikaji zaidi: 

    1) int(alama) hutupa makosa: kwa kuwa kwa Habre kuna minus, kama, kwa mfano, kwenye mstari "-5" - hii ni dashi ya en, sio ishara ya minus (bila kutarajia, sawa?), kwa hivyo wakati fulani ilinibidi kuinua mchanganuzi maishani na marekebisho mabaya kama haya.

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

    Kunaweza kuwa hakuna tarehe, pluses na minuses wakati wote (kama tunavyoona hapo juu katika check_date kazi, hii ilitokea).

    2) Wahusika maalum ambao hawajatoroka - watakuja, unahitaji kuwa tayari.

    3) Muundo hubadilika kulingana na aina ya chapisho.

    4) Machapisho ya zamani yanaweza kuwa na **muundo wa ajabu**.

  • Kimsingi, utunzaji wa makosa na kile kinachoweza kutokea au kisichoweza kutokea itabidi kushughulikiwa na huwezi kutabiri kwa hakika nini kitaenda vibaya na jinsi muundo mwingine unaweza kuwa na nini kitaanguka wapi - itabidi tu ujaribu na kuzingatia. makosa ambayo mchanganuzi hutupa.
  • Halafu unagundua kuwa unahitaji kuchanganua katika nyuzi kadhaa, vinginevyo kuchanganua katika moja basi itachukua masaa 30+ (hii ni wakati wa utekelezaji wa kichanganuzi kilicho na nyuzi moja ambacho tayari kinafanya kazi, ambacho hulala na haingii chini ya marufuku yoyote). KATIKA hii makala, hii ilisababisha wakati fulani kwa mpango kama huo:

Ni nini kinachoweza kwenda vibaya na Sayansi ya Data? Mkusanyiko wa data

Jumla ya orodha kulingana na utata:

  • Kufanya kazi na mtandao na uchanganuzi wa html kwa kurudia na kutafuta kwa kitambulisho.
  • Nyaraka za muundo tofauti.
  • Kuna maeneo mengi ambapo msimbo unaweza kuanguka kwa urahisi.
  • Inahitajika kuandika || kanuni.
  • Hati zinazohitajika, mifano ya msimbo, na/au jumuiya haipo.

Muda uliokadiriwa wa kazi hii utakuwa juu mara 3-5 kuliko wa kukusanya data kutoka Reddit.

Ulinganisho wa vikundi vya Odnoklassniki

Hebu tuendelee kwenye kesi ya kuvutia zaidi ya kiufundi iliyoelezwa. Kwangu, ilikuwa ya kufurahisha haswa kwa sababu kwa mtazamo wa kwanza, inaonekana kuwa ndogo, lakini haibadilika kuwa hivyo hata kidogo - mara tu unapoipiga fimbo.

Wacha tuanze na orodha yetu ya ugumu na kumbuka kuwa nyingi kati yao zitageuka kuwa ngumu zaidi kuliko vile wanavyoangalia mwanzoni:

  • Kuna API, lakini karibu haina kazi muhimu.
  • Kwa kazi fulani unahitaji kuomba ufikiaji kwa barua, ambayo ni, kutoa ufikiaji sio papo hapo.
  • Imeandikwa sana (kuanza, maneno ya Kirusi na Kiingereza yamechanganywa kila mahali, na haiendani kabisa - wakati mwingine unahitaji tu nadhani wanataka nini kutoka kwako mahali fulani) na, zaidi ya hayo, muundo huo haufai kupata data, kwa mfano. , kazi tunayohitaji.
  • Inahitaji kikao katika hati, lakini haitumii - na hakuna njia ya kuelewa ugumu wote wa aina za API zaidi ya kuzunguka na kutumaini kuwa kitu kitafanya kazi.
  • Hakuna mifano na hakuna jumuiya; hatua pekee ya usaidizi katika kukusanya taarifa ni ndogo kanga katika Python (bila mifano mingi ya matumizi).
  • Selenium inaonekana kuwa chaguo linalofanya kazi zaidi, kwani data nyingi muhimu zimefungwa.
    1) Hiyo ni, idhini hufanyika kupitia mtumiaji wa uwongo (na usajili kwa mkono).

    2) Walakini, na Selenium hakuna dhamana ya kazi sahihi na inayoweza kurudiwa (angalau katika kesi ya ok.ru kwa hakika).

    3) Tovuti ya Ok.ru ina makosa ya JavaScript na wakati mwingine hutenda kwa kushangaza na kwa kutofautiana.

    4) Unahitaji kufanya pagination, vitu vya kupakia, nk ...

    5) Makosa ya API ambayo wrapper inatoa italazimika kushughulikiwa vibaya, kwa mfano, kama hii (kipande cha nambari ya majaribio):

    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
    

    Kosa langu nilipenda zaidi lilikuwa:

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

    6) Hatimaye, Selenium + API inaonekana kama chaguo la busara zaidi.

  • Ni muhimu kuokoa hali na kuanzisha upya mfumo, kushughulikia makosa mengi, ikiwa ni pamoja na tabia ya kutofautiana ya tovuti - na makosa haya ni vigumu kufikiria (isipokuwa uandike vichanganuzi kitaaluma, bila shaka).

Makadirio ya muda wa masharti ya kazi hii yatakuwa juu mara 3-5 kuliko ya kukusanya data kutoka kwa Habr. Licha ya ukweli kwamba katika kesi ya Habr tunatumia njia ya mbele na uchanganuzi wa HTML, na kwa upande wa OK tunaweza kufanya kazi na API katika maeneo muhimu.

Matokeo

Haijalishi ni kiasi gani unahitajika kukadiria tarehe za mwisho "papo hapo" (tunapanga leo!) ya moduli ya bomba la usindikaji wa data nyingi, muda wa utekelezaji karibu hauwezekani kukadiria hata kwa ubora bila kuchambua vigezo vya kazi.

Kwa mtazamo wa kifalsafa zaidi, mikakati ya kukadiria ya haraka hufanya kazi vizuri kwa kazi za uhandisi, lakini shida ambazo ni za majaribio zaidi na, kwa maana fulani, "ubunifu" na uchunguzi, yaani, zisizotabirika sana, zina shida, kama katika mifano ya mada zinazofanana , ambayo tumejadili hapa.

Kwa kweli, ukusanyaji wa data ni mfano mkuu - kwa kawaida ni kazi rahisi sana na isiyo ngumu sana ya kiufundi, na shetani mara nyingi huwa katika maelezo. Na ni kwa usahihi juu ya kazi hii kwamba tunaweza kuonyesha anuwai nzima ya chaguzi zinazowezekana kwa kile kinachoweza kwenda vibaya na kwa muda gani kazi inaweza kuchukua.

Ikiwa unatazama sifa za kazi bila majaribio ya ziada, basi Reddit na OK inaonekana sawa: kuna API, kitambaa cha python, lakini kwa asili, tofauti ni kubwa. Kwa kuzingatia vigezo hivi, pars za Habr inaonekana ngumu zaidi kuliko Sawa - lakini kwa mazoezi ni kinyume kabisa, na hii ndiyo hasa inaweza kupatikana kwa kufanya majaribio rahisi ya kuchambua vigezo vya tatizo.

Katika uzoefu wangu, mbinu ya ufanisi zaidi ni takribani kukadiria wakati utahitaji kwa uchambuzi wa awali yenyewe na majaribio rahisi ya kwanza, kusoma nyaraka - hizi zitakuwezesha kutoa makadirio sahihi kwa kazi nzima. Kwa upande wa mbinu maarufu ya agile, nakuuliza utengeneze tikiti ya "vigezo vya kukadiria kazi", kwa msingi ambao ninaweza kutoa tathmini ya kile kinachoweza kukamilika ndani ya "sprint" na kutoa makisio sahihi zaidi kwa kila moja. kazi.

Kwa hiyo, hoja yenye ufanisi zaidi inaonekana kuwa moja ambayo ingeonyesha mtaalamu "asiye wa kiufundi" kiasi gani cha muda na rasilimali zitatofautiana kulingana na vigezo ambavyo bado havijatathminiwa.

Ni nini kinachoweza kwenda vibaya na Sayansi ya Data? Mkusanyiko wa data

Chanzo: mapenzi.com

Kuongeza maoni