Бо Data Science чӣ хато карда метавонад? Ҷамъоварии маълумот

Бо Data Science чӣ хато карда метавонад? Ҷамъоварии маълумот
Имрӯзҳо 100500 курсҳои илмҳои иттилоотӣ мавҷуданд ва кайҳо боз маълум аст, ки пулҳои бештарро дар Data Science тавассути курсҳои Илм ба даст овардан мумкин аст (чаро кобед, вақте ки шумо бел фурӯшед?). Камбудии асосии ин курсҳо дар он аст, ки онҳо бо кори воқеӣ коре надоранд: ҳеҷ кас ба шумо маълумоти тоза ва коркардшударо дар формати зарурӣ намедиҳад. Ва ҳангоме ки шумо курсро тарк мекунед ва ба ҳалли мушкилоти воқеӣ шурӯъ мекунед, нозукиҳои зиёде пайдо мешаванд.

Аз ин рӯ, мо як силсила қайдҳоро оғоз мекунем "Бо маълумотҳои илм чӣ хато карда метавонад" дар асоси рӯйдодҳои воқеие, ки бо ман, рафиқон ва ҳамкасбони ман рӯй доданд. Мо бо истифода аз мисолҳои воқеӣ вазифаҳои маъмулии Илми маълумотро таҳлил хоҳем кард: ин воқеан чӣ гуна мешавад. Биёед имрӯз аз вазифаи ҷамъоварии маълумот оғоз кунем.

Ва аввалин чизе, ки одамон ҳангоми оғоз кардани кор бо маълумоти воқеӣ пешпо мехӯранд, воқеан ҷамъоварии ин маълумотест, ки барои мо бештар мувофиқ аст. Паёми асосии ин мақола:

Мо мунтазам вақт, захираҳо ва кӯшишро барои ҷамъоварӣ, тоза кардан ва омода кардани маълумот нодида мегирем.

Ва муҳимтар аз ҳама, мо муҳокима хоҳем кард, ки барои пешгирӣ кардани ин чӣ кор кардан лозим аст.

Тибқи ҳисобҳои гуногун, тозакунӣ, табдилдиҳӣ, коркарди маълумот, муҳандисии хусусиятҳо ва ғайра 80-90% вақт ва таҳлил 10-20% вақтро мегирад, дар ҳоле ки қариб тамоми маводи таълимӣ танҳо ба таҳлил нигаронида шудааст.

Биёед як масъалаи оддии таҳлилиро дар се вариант ҳамчун намунаи маъмулӣ дида бароем ва бубинем, ки «ҳолатҳои вазнинкунанда» чист.

Ва ҳамчун мисол, боз мо вариантҳои шабеҳи вазифаи ҷамъоварии маълумот ва муқоисаи ҷомеаҳоро барои:

  1. Ду зергурӯҳи Reddit
  2. Ду бахши Ҳабр
  3. Ду гурӯҳи Одноклассники

Муносибати шартӣ дар назария

Сайтро кушоед ва мисолҳоро хонед, агар он равшан бошад, чанд соат барои хондан, чанд соат барои код бо истифода аз мисолҳо ва ислоҳот ҷудо кунед. Барои ҷамъоварӣ чанд соат илова кунед. Дар якчанд соат дар захира партоед (ба ду зарб кунед ва N соат илова кунед).

Нуқтаи асосӣ: Ҳисобкунии вақт ба фарзияҳо ва тахминҳо дар бораи он, ки чӣ қадар вақт мегирад, асос ёфтааст.

Зарур аст, ки таҳлили вақтро бо арзёбии параметрҳои зерини масъалаи шартии дар боло тавсифшуда оғоз кунед:

  • Андозаи маълумот чӣ гуна аст ва чӣ қадари он бояд аз ҷиҳати ҷисмонӣ ҷамъоварӣ карда шавад (*ба поён нигаред*).
  • Вақти ҷамъоварӣ барои як сабт чанд аст ва шумо бояд то чанд вақт интизор шавед, ки сабти дуюмро ҷамъ кунед?
  • Навиштани кодро баррасӣ кунед, ки ҳолатро захира мекунад ва ҳангоми аз нав оғоз кардан оғоз мекунад (на агар) ҳама чиз ноком шавад.
  • Муайян кунед, ки оё ба мо иҷозат лозим аст ва вақти дастрасиро тавассути API муқаррар кунед.
  • Шумораи хатогиҳоро ҳамчун вазифаи мураккабии маълумот таъин кунед - барои як вазифаи мушаххас арзёбӣ кунед: сохтор, чанд тағирот, чӣ ва чӣ гуна истихроҷ кардан.
  • Хатогиҳои шабакавӣ ва мушкилотро бо рафтори ғайристандартии лоиҳа ислоҳ кунед.
  • Арзёбӣ кунед, ки оё функсияҳои зарурӣ дар ҳуҷҷатҳо мавҷуданд ва агар не, пас барои ҳалли мушкилот чӣ гуна ва чӣ қадар лозим аст.

Муҳимтар аз ҳама он аст, ки барои ҳисоб кардани вақт - шумо воқеан бояд вақт ва кӯшишро барои "разведка дар қувва" сарф кунед - танҳо дар он сурат банақшагирии шумо мувофиқ хоҳад буд. Аз ин рӯ, новобаста аз он ки шумо чӣ қадар маҷбур мешавед, ки "ҷамъоварии маълумот чӣ қадар вақт лозим аст" бигӯед - барои таҳлили пешакӣ каме вақт харед ва баҳс кунед, ки вақт вобаста ба параметрҳои воқеии мушкилот чӣ қадар фарқ мекунад.

Ва ҳоло мо мисолҳои мушаххасеро нишон медиҳем, ки ин параметрҳо тағир меёбанд.

Нуқтаи асосӣ: Баҳодиҳӣ ба таҳлили омилҳои асосӣ, ки ба ҳаҷм ва мураккабии кор таъсир мерасонанд, асос ёфтааст.

Баҳодиҳии ба тахмин асосёфта як равиши хубест, вақте ки унсурҳои функсионалӣ ба қадри кофӣ хурданд ва омилҳои зиёде вуҷуд надоранд, ки метавонанд ба тарҳрезии мушкилот таъсир расонанд. Аммо дар мавриди як қатор мушкилоти илми маълумот, ин омилҳо бениҳоят зиёд мешаванд ва чунин бархӯрд нокофӣ мешавад.

Муқоисаи ҷамоатҳои Reddit

Биёед бо оддитарин парванда оғоз кунем (чунон ки баъдтар маълум мешавад). Умуман, ростқавлона, мо як парвандаи қариб идеалӣ дорем, биёед рӯйхати санҷиши мураккабии худро тафтиш кунем:

  • API-и тоза, равшан ва ҳуҷҷатгузорӣ мавҷуд аст.
  • Ин хеле содда аст ва муҳимтар аз ҳама, нишона ба таври худкор гирифта мешавад.
  • вуҷуд доранд бастаи python — бо мисолхои зиёд.
  • Ҷамъияте, ки маълумотро дар Reddit таҳлил ва ҷамъоварӣ мекунад (ҳатто ба видеоҳои YouTube, ки чӣ тавр истифода бурдани wrapper python-ро мефаҳмонад) ин намунаи ибрат аст.
  • Усулҳое, ки ба мо лозиманд, эҳтимолан дар API вуҷуд доранд. Гузашта аз ин, рамз паймон ва тоза менамояд, дар зер намунаи функсияе оварда шудааст, ки шарҳҳоро дар як пост ҷамъ мекунад.

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

Аз ин интихоби коммуналӣ қулай барои печонидани.

Сарфи назар аз он, ки ин беҳтарин ҳолат аст, ҳанӯз ҳам ба назар гирифтани як қатор омилҳои муҳими ҳаёти воқеӣ зарур аст:

  • Маҳдудиятҳои API - мо маҷбур мешавем, ки маълумотро дар гурӯҳҳо гирем (хоби байни дархостҳо ва ғайра).
  • Вақти ҷамъоварӣ - барои таҳлил ва муқоисаи мукаммал, шумо бояд танҳо барои он ки тортанак аз субреддит гузарад, вақти зиёд ҷудо кунед.
  • Бот бояд дар сервер кор кунад - шумо наметавонед онро танҳо дар ноутбуки худ иҷро кунед, онро ба ҷузвдони худ гузоред ва ба тиҷорати худ равед. Ҳамин тавр, ман ҳама чизро дар VPS иҷро кардам. Бо истифода аз рамзи таблиғотии habrahabr10 шумо метавонед боз 10% хароҷотро сарфа кунед.
  • Дастрасии ҷисмонии баъзе маълумотҳо (онҳо ба маъмурон намоёнанд ё ҷамъоварӣ хеле душвор аст) - ин бояд ба назар гирифта шавад, аслан на ҳама маълумотро дар вақти мувофиқ ҷамъоварӣ кардан мумкин аст.
  • Хатогиҳои шабакавӣ: Шабака дардовар аст.
  • Ин маълумоти воқеии зинда аст - он ҳеҷ гоҳ пок нест.

Албатта, ин нозукихоро ба тахияхо дохил кардан лозим аст. Соатҳо/рӯзҳои мушаххас аз таҷрибаи рушд ё таҷрибаи кор дар вазифаҳои шабеҳ вобастаанд, аммо мо мебинем, ки дар ин ҷо вазифа комилан муҳандисӣ аст ва барои ҳалли он ҳаракатҳои иловагии баданро талаб намекунад - ҳама чизро хеле хуб арзёбӣ кардан, ба нақша гирифтан ва иҷро кардан мумкин аст.

Муқоисаи бахшҳои Ҳабр

Биёед ба як ҳолати ҷолибтар ва ғайримуқаррарии муқоисаи риштаҳо ва/ё бахшҳои Ҳабр гузарем.

Биёед рӯйхати санҷиши мураккабии худро тафтиш кунем - дар ин ҷо, барои фаҳмидани ҳар як нукта, шумо бояд каме дар худи вазифа кобед ва озмоиш кунед.

  • Дар аввал шумо фикр мекунед, ки API вуҷуд дорад, аммо вуҷуд надорад. Бале, ҳа, Habr дорои API мебошад, аммо он барои корбарон дастрас нест (ё шояд он тамоман кор намекунад).
  • Пас шумо танҳо ба таҳлили html оғоз мекунед - "дархостҳои воридотӣ", чӣ метавонад хато кунад?
  • Ба ҳар ҳол чӣ гуна бояд таҳлил кард? Усули соддатарин ва маъмултарин истифодашаванда такрори ID-ҳо мебошад, қайд кунед, ки он самараноктарин нест ва бояд парвандаҳои гуногунро ҳал кунад - ин аст мисоли зичии ID-ҳои воқеӣ дар байни ҳама мавҷуда.

    Бо Data Science чӣ хато карда метавонад? Ҷамъоварии маълумот
    Аз ин мақолаҳо.

  • Маълумоти хом, ки бо HTML дар болои веб печонида шудааст, дардовар аст. Масалан, шумо мехоҳед рейтинги мақоларо ҷамъоварӣ ва захира кунед: шумо холро аз html канда ва қарор додед, ки онро ҳамчун рақам барои коркарди минбаъда захира кунед: 

    1) int(хол) хато мекунад: азбаски дар Хабре минус мавҷуд аст, масалан, дар хати “–5” - ин тире en аст, на аломати минус (ногаҳон, дуруст?), ҳамин тавр дар баъзе нуқтаҳо ман маҷбур шудам, ки парсерро бо чунин ислоҳи даҳшатнок зинда кунам.

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

    Шояд ягон сана, плюсҳо ва нуқсонҳо вуҷуд надошта бошанд (чунон ки мо дар боло дар функсияи check_date мебинем, ин рӯй дод).

    2) Аломатҳои махсуси наҷотёфта - онҳо меоянд, шумо бояд омода бошед.

    3) Сохтор вобаста ба намуди пост тағйир меёбад.

    4) Паёмҳои кӯҳна метавонанд **сохтори аҷибе дошта бошанд**.

  • Аслан, коркарди хатогиҳо ва он чизе, ки метавонад рӯй диҳад ё не, бояд ҳал карда шавад ва шумо аниқ пешгӯӣ карда наметавонед, ки чӣ хато хоҳад кард ва чӣ гуна сохтор метавонад ва дар куҷо афтад - шумо бояд танҳо кӯшиш кунед ва ба назар гиред. хатоҳое, ки таҳлилгар мепартояд.
  • Он гоҳ шумо мефаҳмед, ки шумо бояд якчанд риштаҳоро таҳлил кунед, вагарна таҳлил дар як ришта 30+ соатро мегирад (ин соф вақти иҷрои таҳлилгари як ришта, ки аллакай кор мекунад, хоб аст ва зери ҳеҷ гуна мамнӯъ нест). ДАР ин мақола, ин дар як вақт ба як схемаи шабеҳ оварда расонд:

Бо Data Science чӣ хато карда метавонад? Ҷамъоварии маълумот

Рӯйхати умумӣ аз рӯи мураккабӣ:

  • Кор бо шабака ва таҳлили HTML бо такрор ва ҷустуҷӯ аз рӯи ID.
  • Ҳуҷҷатҳои сохтори гетерогенӣ.
  • Бисёр ҷойҳо ҳастанд, ки код метавонад ба осонӣ афтад.
  • || навиштан лозим аст код.
  • Ҳуҷҷатҳои зарурӣ, мисолҳои рамзӣ ва/ё ҷомеа мавҷуд нестанд.

Вақти тахминии иҷрои ин вазифа назар ба ҷамъоварии маълумот аз Reddit 3-5 маротиба зиёдтар хоҳад буд.

Муқоисаи гурӯҳҳои Одноклассники

Биёед ба парвандаи аз ҷиҳати техникӣ ҷолибтарин тавсифшуда гузарем. Барои ман, ин маҳз аз он сабаб ҷолиб буд, ки дар назари аввал, он хеле ночиз менамояд, аммо ин тавр намешавад - вақте ки шумо ба он чӯб мезанед.

Биёед аз рӯйхати санҷиши мушкилоти худ оғоз кунем ва қайд кунем, ки бисёре аз онҳо назар ба он ки дар аввал назар мекунанд, хеле душвортар хоҳанд буд:

  • API вуҷуд дорад, аммо он қариб пурра функсияҳои заруриро надорад.
  • Барои баъзе вазифаҳо шумо бояд дастрасиро тавассути почта дархост кунед, яъне додани дастрасӣ фаврӣ нест.
  • Он ба таври даҳшатнок ҳуҷҷатгузорӣ шудааст (аз аввал истилоҳҳои русӣ ва англисӣ дар ҳама ҷо омехта мешаванд ва комилан номувофиқанд - баъзан шумо танҳо бояд тахмин кунед, ки онҳо аз шумо дар ҷое чӣ мехоҳанд) ва илова бар ин, тарҳ барои гирифтани маълумот мувофиқ нест, масалан , функсияе, ки ба мо лозим аст.
  • Сеансро дар ҳуҷҷатҳо талаб мекунад, аммо дар асл онро истифода намебарад - ва ҳеҷ роҳе барои фаҳмидани тамоми нозукиҳои шеваҳои API вуҷуд надорад, ба ҷуз ин ки дар гирду атроф ва умеди он ки чизе кор хоҳад кард.
  • Намунаҳо ва ҷомеа вуҷуд надоранд; ягона нуқтаи дастгирӣ дар ҷамъоварии иттилоот хурд аст печонд дар Python (бе мисолҳои зиёди истифода).
  • Чунин ба назар мерасад, ки Selenium варианти аз ҳама қобили кор аст, зеро бисёре аз маълумоти зарурӣ бастаанд.
    1) Яъне, авторизатсия тавассути корбари сохта (ва бақайдгирии дастӣ) сурат мегирад.

    2) Бо вуҷуди ин, бо Selenium ҳеҷ гуна кафолат барои кори дуруст ва такроршаванда вуҷуд надорад (ҳадди аққал дар сурати ok.ru бешубҳа).

    3) Сомонаи Ok.ru дорои хатогиҳои JavaScript буда, баъзан ба таври аҷиб ва номувофиқ рафтор мекунад.

    4) Ба шумо лозим аст, ки саҳифабандӣ, боркунии элементҳо ва ғайраҳоро анҷом диҳед ...

    5) Хатогиҳои API, ки бастабандӣ медиҳад, бояд ба таври заҳматталабона коркард карда шаванд, масалан, ба монанди ин (як пораи рамзи таҷрибавӣ):

    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
    

    Хатои дӯстдоштаи ман ин буд:

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

    6) Дар ниҳоят, Selenium + API варианти оқилонатарин ба назар мерасад.

  • Ҳолатро захира кардан ва системаро бозоғоз кардан лозим аст, хатогиҳои зиёдеро, аз ҷумла рафтори номувофиқи сайтро идора кардан лозим аст - ва ин хатогиҳоро тасаввур кардан хеле душвор аст (агар шумо таҳлилҳоро ба таври касбӣ нанависед, албатта).

Андозаи шартй барои ин вазифа назар ба чамъоварии маълумот аз Хабр 3—5 баробар зиёд мешавад. Сарфи назар аз он, ки дар мавриди Habr мо равиши фронталиро бо таҳлили HTML истифода мебарем ва дар ҳолати OK мо метавонем бо API дар ҷойҳои муҳим кор кунем.

натиҷаҳои

Новобаста аз он ки аз шумо чӣ қадар талаб карда мешавад, ки мӯҳлатҳои «дар ҷои худ» (мо имрӯз ба нақша гирифтаем!) як модули коркарди маълумотро ба нақша гиред, вақти иҷроро ҳатто бидуни таҳлили параметрҳои вазифаҳо ҳатто аз ҷиҳати сифатӣ ҳисоб кардан ғайриимкон аст.

Дар як ёддошти каме фалсафӣ, стратегияҳои баҳодиҳии фаврӣ барои вазифаҳои муҳандисӣ хуб кор мекунанд, аммо мушкилоте, ки бештар таҷрибавӣ ва ба маъное "эҷодӣ" ва ҷустуҷӯӣ ҳастанд, яъне камтар пешгӯишаванда, ба монанди мисолҳои мавзӯъҳои шабеҳ, мушкилот доранд. ки мо дар ин чо мухокима кардем.

Албатта, ҷамъоварии маълумот танҳо як мисоли олӣ аст - он одатан як вазифаи бениҳоят содда ва аз ҷиҳати техникӣ мураккаб аст ва иблис аксар вақт дар тафсилот аст. Ва маҳз аз рӯи ин вазифа мо метавонем тамоми имконоти имконпазирро нишон диҳем, ки чӣ гуна хатогӣ кардан мумкин аст ва маҳз кор чӣ қадар вақт мегирад.

Агар шумо ба хусусиятҳои супориш бе таҷрибаҳои иловагӣ назар андозед, он гоҳ Reddit ва OK ба ҳам монанданд: API, печони python мавҷуд аст, аммо дар асл, фарқият бузург аст. Аз руи ин параметрхо, парсхои Хабр назар ба ОК мураккабтар ба назар мерасанд — аммо дар амал ин тамоман баръакс аст ва махз хаминро бо гузарондани тачрибахои оддй барои тахлили параметрхои масъала муайян кардан мумкин аст.

Дар таҷрибаи ман, усули аз ҳама самаранок ин тахминан ҳисоб кардани вақти барои худи таҳлили пешакӣ ва таҷрибаҳои оддии аввалин, хондани ҳуҷҷатҳо мебошад - ин ба шумо имкон медиҳад, ки барои тамоми кор баҳои дақиқ диҳед. Дар робита ба методологияи маъмули agile, ман аз шумо хоҳиш мекунам, ки чиптаеро барои "баҳодиҳии параметрҳои вазифа" созед, ки дар асоси он ман метавонам баҳо диҳам, ки дар доираи "спринт" чӣ кор кардан мумкин аст ва барои ҳар яки онҳо баҳои дақиқтар дода мешавад. вазифа.

Аз ин рӯ, аз ҳама самараноктарин далеле ба назар мерасад, ки ба мутахассиси "ғайритехникӣ" нишон медиҳад, ки чӣ қадар вақт ва захираҳо вобаста ба параметрҳое, ки ҳанӯз арзёбӣ нашудаанд, фарқ мекунанд.

Бо Data Science чӣ хато карда метавонад? Ҷамъоварии маълумот

Манбаъ: will.com

Илова Эзоҳ