Ki sa ki ka ale mal ak Data Science? Koleksyon done

Ki sa ki ka ale mal ak Data Science? Koleksyon done
Jodi a gen 100500 kou Syans Done epi li te konnen depi lontan ke plis lajan an nan Syans Done yo ka touche nan kou Syans Done (poukisa fouye lè ou ka vann pèl?). Dezavantaj prensipal la nan kou sa yo se ke yo pa gen anyen fè ak travay reyèl: pèsonn pa pral ba ou pwòp, done trete nan fòma yo mande yo. Men, lè ou kite kou a epi kòmanse rezoud yon pwoblèm reyèl, anpil nuans parèt.

Se poutèt sa, nou ap kòmanse yon seri nòt "Kisa ki ka ale mal ak Data Science", ki baze sou evènman reyèl ki te rive m ', kamarad mwen yo ak kòlèg li yo. Nou pral analize travay tipik Syans Done lè l sèvi avèk egzanp reyèl: ki jan sa a aktyèlman rive. Ann kòmanse jodi a ak travay la kolekte done.

Ak premye bagay moun bite sou lè yo kòmanse travay ak done reyèl se aktyèlman kolekte done sa a ki pi enpòtan pou nou. Mesaj kle atik sa a:

Nou sistematikman souzèstime tan, resous, ak efò ki nesesè pou kolekte, netwaye ak prepare done yo.

Ak sa ki pi enpòtan, nou pral diskite sou sa yo dwe fè pou anpeche sa a.

Dapre estimasyon divès kalite, netwayaj, transfòmasyon, pwosesis done, jeni karakteristik, elatriye pran 80-90% nan tan an, ak analiz 10-20%, pandan y ap prèske tout materyèl edikasyon konsantre sèlman sou analiz.

Ann gade nan yon senp pwoblèm analyse nan twa vèsyon kòm yon egzanp tipik epi wè ki sa "sikonstans agrave" yo.

Epi kòm yon egzanp, ankò, nou pral konsidere varyasyon menm jan an nan travay la nan kolekte done ak konpare kominote pou:

  1. De subreddits Reddit
  2. De seksyon nan Habr
  3. De gwoup Odnoklassniki

Apwòch kondisyonèl nan teyori

Louvri sit la epi li egzanp yo, si li klè, mete sou kote kèk èdtan pou lekti, kèk èdtan pou kòd la lè l sèvi avèk egzanp yo ak debogaj. Ajoute kèk èdtan pou koleksyon. Jete nan kèk èdtan an rezèv (miltipliye pa de epi ajoute N èdtan).

Pwen kle: Estimasyon tan yo baze sou sipozisyon ak devine sou konbyen tan li pral pran.

Li nesesè pou kòmanse analiz tan an pa estime paramèt sa yo pou pwoblèm kondisyonèl ki dekri pi wo a:

  • Ki gwosè done yo ak ki kantite yo bezwen pou yo kolekte fizikman (*gade anba a*).
  • Ki tan koleksyon yon dosye epi konbyen tan ou dwe tann anvan ou ka kolekte dezyèm lan?
  • Konsidere ekri kòd ki sove eta a epi kòmanse yon rekòmanse lè (pa si) tout bagay echwe.
  • Chèche konnen si nou bezwen otorizasyon epi fikse tan pou jwenn aksè atravè API a.
  • Mete kantite erè kòm yon fonksyon konpleksite done - evalye pou yon travay espesifik: estrikti, konbyen transfòmasyon, ki sa ak ki jan yo ekstrè.
  • Ranje erè rezo ak pwoblèm ak konpòtman pwojè ki pa estanda.
  • Evalye si fonksyon ki nesesè yo nan dokiman an epi si se pa sa, Lè sa a, ki jan ak konbyen lajan yo bezwen pou yon solisyon.

Bagay ki pi enpòtan an se ke yo nan lòd yo estime tan - ou aktyèlman bezwen pase tan ak efò sou "rekonesans nan fòs" - sèlman lè sa a pral planifikasyon ou dwe adekwa. Se poutèt sa, kèlkeswa kantite lajan ou pouse pou di "konbyen tan li pran pou kolekte done" - achte tèt ou kèk tan pou yon analiz preliminè epi diskite sou konbyen tan an ap varye depann sou paramèt reyèl pwoblèm nan.

Epi kounye a nou pral demontre egzanp espesifik kote paramèt sa yo pral chanje.

Pwen kle: Estimasyon an baze sou yon analiz de faktè kle ki enfliyanse dimansyon ak konpleksite travay la.

Estimasyon ki baze sou Devine se yon bon apwòch lè eleman fonksyonèl yo piti ase epi pa gen anpil faktè ki ka enfliyanse siyifikativman konsepsyon pwoblèm nan. Men, nan ka a nan yon kantite pwoblèm Syans Done, faktè sa yo vin trè anpil ak yon apwòch konsa vin ensifizan.

Konparezon nan kominote Reddit

Ann kòmanse ak ka ki pi senp la (jan li vire pita). An jeneral, yo dwe konplètman onèt, nou gen yon ka prèske ideyal, ann tcheke lis verifikasyon konpleksite nou an:

  • Gen yon API pwòp, klè ak dokimante.
  • Li trè senp epi sa ki pi enpòtan, yo jwenn yon siy otomatikman.
  • Gen python wrapper - ak anpil egzanp.
  • Yon kominote ki analize ak kolekte done sou reddit (menm nan videyo YouTube ki eksplike kijan pou itilize python wrapper) Pa egzanp.
  • Metòd nou bezwen yo gen plis chans egziste nan API a. Anplis, kòd la sanble kontra enfòmèl ant ak pwòp, anba a se yon egzanp yon fonksyon ki kolekte kòmantè sou yon pòs.

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

Pran nan sa a yon seleksyon sèvis piblik pratik pou anbalaj.

Malgre lefèt ke sa a se ka ki pi bon, li toujou vo pran an kont yon kantite faktè enpòtan nan lavi reyèl:

  • Limit API - nou oblije pran done an pakèt (dòmi ant demann, elatriye).
  • Tan koleksyon - pou yon analiz konplè ak konparezon, ou pral oblije mete sou kote tan enpòtan jis pou arenyen an mache nan subreddit la.
  • Bot la dwe kouri sou yon sèvè—ou pa ka jis kouri li sou laptop ou, mete l nan sak lekòl ou, epi ale nan biznis ou. Se konsa, mwen kouri tout bagay sou yon VPS. Sèvi ak kòd pwomosyon habrahabr10 ou ka ekonomize yon lòt 10% nan pri a.
  • Inaksesiblite fizik kèk done (yo vizib pou administratè yo oswa yo twò difisil pou kolekte) - sa a dwe pran an konsiderasyon; nan prensip, se pa tout done yo ka kolekte nan yon tan ase.
  • Erè rezo: Rezo se yon doulè.
  • Sa a se k ap viv done reyèl - li pa janm pi bon kalite.

Natirèlman, li nesesè enkli nuans sa yo nan devlopman an. Espesifik èdtan / jou depann sou eksperyans devlopman oswa eksperyans k ap travay sou travay menm jan an, sepandan, nou wè ke isit la travay la se piman jeni epi yo pa mande pou mouvman kò adisyonèl yo rezoud - tout bagay ka trè byen evalye, pwograme ak fè.

Konparezon nan seksyon Habr

Ann ale nan yon ka ki pi enteresan epi ki pa trivial nan konpare fil ak / oswa seksyon nan Habr.

Ann tcheke lis verifikasyon konpleksite nou an - isit la, yo nan lòd yo konprann chak pwen, ou pral oblije fouye yon ti kras nan travay la tèt li ak eksperyans.

  • Okòmansman ou panse gen yon API, men pa genyen. Wi, wi, Habr gen yon API, men li jis pa aksesib pou itilizatè yo (oswa petèt li pa travay ditou).
  • Lè sa a, ou jis kòmanse analize html - "demann enpòte", ki sa ki ka ale mal?
  • Ki jan yo analize de tout fason? Apwòch ki pi senp epi ki pi souvan itilize se iterasyon sou ID, sonje ke li pa pi efikas la epi li pral oblije okipe diferan ka - isit la se yon egzanp nan dansite ID reyèl nan mitan tout sa yo ki deja egziste.

    Ki sa ki ka ale mal ak Data Science? Koleksyon done
    Pran nan sa a atik.

  • Done kri vlope nan HTML sou tèt entènèt la se yon doulè. Pou egzanp, ou vle kolekte epi sove evalyasyon an nan yon atik: ou chire nòt la soti nan html la epi deside sove li kòm yon nimewo pou plis pwosesis: 

    1) int(nòt) lanse yon erè: depi sou Habré gen yon mwens, tankou, pou egzanp, nan liy "-5" - sa a se yon priz en, pa yon siy mwens (san atann, pa vre?), Se konsa, nan kèk pwen mwen te oblije ogmante parser la nan lavi ak tankou yon ranje terib.

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

    Pa gen okenn dat, plis ak minus ditou (jan nou wè pi wo a nan fonksyon check_date, sa te rive).

    2) karaktè espesyal Unescaped - yo pral vini, ou bezwen yo dwe prepare.

    3) Estrikti a chanje selon kalite pòs la.

    4) Ansyen pòs yo ka gen yon **estrikti etranj**.

  • Esansyèlman, manyen erè ak sa ki ka oswa ki pa ka rive pral oblije okipe epi ou pa ka predi pou asire w sa ki pral mal ak ki jan lòt bagay estrikti a ka ak sa ki pral tonbe kote - ou pral jis gen eseye ak pran an kont. erè yo ke analizeur a voye.
  • Lè sa a, ou reyalize ke ou bezwen analize nan plizyè fil, otreman analiz nan yon sèl pral Lè sa a, pran 30+ èdtan (sa a se piman tan an ekzekisyon nan yon analizeur yon sèl-threaded ki deja ap travay, ki dòmi epi ki pa tonbe anba okenn entèdiksyon). NAN sa a atik, sa a te mennen nan kèk pwen nan yon konplo menm jan an:

Ki sa ki ka ale mal ak Data Science? Koleksyon done

Lis verifikasyon total pa konpleksite:

  • Travay ak rezo a ak analiz html ak iterasyon ak rechèch pa ID.
  • Dokiman nan estrikti etewojèn.
  • Gen anpil kote kòd la ka fasil tonbe.
  • Li nesesè ekri || kòd.
  • Dokimantasyon ki nesesè yo, egzanp kòd, ak/oswa kominote yo manke.

Tan an estime pou travay sa a pral 3-5 fwa pi wo pase pou kolekte done nan Reddit.

Konparezon nan gwoup Odnoklassniki

Ann ale nan ka ki pi enteresan teknikman ki dekri. Pou mwen, li te enteresan jisteman paske nan premye gade, li sanble byen trivial, men li pa vire soti nan fason sa a ditou - le pli vit ke ou pike yon baton nan li.

Ann kòmanse ak lis verifikasyon difikilte nou an epi sonje ke anpil nan yo pral vin pi difisil pase sa yo gade nan premye:

  • Gen yon API, men li prèske konplètman manke fonksyon ki nesesè yo.
  • Pou sèten fonksyon ou bezwen mande aksè pa lapòs, se sa ki, akòde aksè a pa enstantane.
  • Li fò anpil dokimante (pou kòmanse, tèm Ris ak angle yo melanje tout kote, ak konplètman konsistan - pafwa ou jis bezwen devine sa yo vle nan men ou yon kote) epi, Anplis, konsepsyon an pa apwopriye pou jwenn done, pou egzanp. , fonksyon nou bezwen an.
  • Mande yon sesyon nan dokiman an, men li pa aktyèlman sèvi ak li - epi pa gen okenn fason yo konprann tout sibtilite ki nan mòd yo API lòt pase pike alantou ak espere yon bagay pral travay.
  • Pa gen okenn egzanp ak pa gen kominote; sèl pwen sipò nan kolekte enfòmasyon se yon ti pakè nan Python (san anpil egzanp itilizasyon).
  • Selenyòm sanble se opsyon ki pi posib, paske anpil nan done ki nesesè yo fèmen.
    1) Sa vle di, otorizasyon fèt atravè yon itilizatè fiktif (ak anrejistreman alamen).

    2) Sepandan, ak Selenyòm pa gen okenn garanti pou travay kòrèk ak repete (omwen nan ka ok.ru pou asire w).

    3) Sit entènèt la Ok.ru gen erè JavaScript epi pafwa konpòte li etranj ak enkonsistan.

    4) Ou bezwen fè paginasyon, chaje eleman, elatriye...

    5) Erè API ke wrapper a bay yo pral dwe jere malèz, pou egzanp, tankou sa a (yon moso nan kòd eksperimantal):

    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
    

    Erè pi renmen m 'te:

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

    6) Finalman, Selenyòm + API sanble opsyon ki pi rasyonèl.

  • Li nesesè pou konsève pou eta a ak rekòmanse sistèm nan, okipe anpil erè, ki gen ladan konpòtman konsistan nan sit la - ak erè sa yo se byen difisil imajine (sòf si ou ekri analizeur pwofesyonèl, nan kou).

Estimasyon tan kondisyonèl pou travay sa a pral 3-5 fwa pi wo pase pou kolekte done ki soti nan Habr. Malgre lefèt ke nan ka a nan Habr nou itilize yon apwòch frontal ak analiz HTML, ak nan ka a nan OK nou ka travay ak API a nan kote kritik.

Jwenn

Kèlkeswa kantite lajan ou oblije estime dat limit yo "sou tèren an" (nou ap planifye jodi a!) nan yon modil tiyo pwosesis done volumineuz, tan an ekzekisyon se prèske pa janm posib yo estime menm kalitatif san yo pa analize paramèt yo travay.

Sou yon nòt yon ti kras plis filozofik, estrateji estimasyon ajil travay byen pou travay jeni, men pwoblèm ki gen plis eksperimantal epi, nan yon sans, "kreyatif" ak eksplorasyon, sa vle di, mwens previzib, gen difikilte, tankou nan egzanp yo nan sijè ki sanble , ke nou te diskite isit la.

Natirèlman, koleksyon done se jis yon premye egzanp - li se nòmalman yon travay ekstrèmman senp ak teknikman senp, ak dyab la se souvan nan detay yo. Epi li se jisteman sou travay sa a ke nou ka montre tout seri opsyon posib pou sa ki ka ale mal ak egzakteman konbyen tan travay la ka pran.

Si ou gade nan karakteristik sa yo nan travay la san yo pa eksperyans adisyonèl, Lè sa a, Reddit ak OK sanble: gen yon API, yon anbalaj python, men nan sans, diferans lan se gwo. Jije pa paramèt sa yo, pars Habr a sanble pi konplike pase OK - men nan pratik li se byen opoze a, e sa a se egzakteman sa yo ka jwenn soti nan fè eksperyans senp yo analize paramèt yo nan pwoblèm nan.

Nan eksperyans mwen, apwòch ki pi efikas se apeprè estime tan w ap bezwen pou analiz preliminè tèt li ak premye eksperyans senp, li dokiman an - sa yo pral pèmèt ou bay yon estimasyon egzat pou tout travay la. An tèm de metodoloji popilè ajil la, mwen mande w pou kreye yon tikè pou "estime paramèt travay", sou baz ki mwen ka bay yon evalyasyon sou sa ki ka akonpli nan "sprint" la epi bay yon estimasyon pi egzak pou chak. travay.

Se poutèt sa, agiman ki pi efikas sanble se youn ki ta montre yon espesyalis "ki pa teknik" konbyen tan ak resous yo pral varye selon paramèt ki poko evalye.

Ki sa ki ka ale mal ak Data Science? Koleksyon done

Sous: www.habr.com

Add nouvo kòmantè