Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ Data? Gbigba data

Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ Data? Gbigba data
Loni awọn iṣẹ-ẹkọ Imọ-jinlẹ data 100500 wa ati pe o ti mọ fun igba pipẹ pe owo pupọ julọ ni Imọ-jinlẹ data le ṣee gba nipasẹ awọn iṣẹ ikẹkọ Imọ-jinlẹ data (kilode ti o ma wà nigbati o le ta awọn shovels?). Aila-nfani akọkọ ti awọn iṣẹ-ẹkọ wọnyi ni pe wọn ko ni nkankan lati ṣe pẹlu iṣẹ gidi: ko si ẹnikan ti yoo fun ọ ni mimọ, data ilana ni ọna kika ti o nilo. Ati pe nigbati o ba lọ kuro ni iṣẹ-ẹkọ naa ki o bẹrẹ si yanju iṣoro gidi kan, ọpọlọpọ awọn nuances farahan.

Nitorinaa, a n bẹrẹ lẹsẹsẹ awọn akọsilẹ “Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ data”, da lori awọn iṣẹlẹ gidi ti o ṣẹlẹ si mi, awọn ẹlẹgbẹ mi ati awọn ẹlẹgbẹ mi. A yoo ṣe itupalẹ awọn iṣẹ-ṣiṣe Imọ-jinlẹ data aṣoju ni lilo awọn apẹẹrẹ gidi: bawo ni eyi ṣe ṣẹlẹ gangan. Jẹ ki a bẹrẹ loni pẹlu iṣẹ-ṣiṣe gbigba data.

Ati ohun akọkọ ti eniyan kọsẹ nigbati wọn bẹrẹ ṣiṣẹ pẹlu data gidi ni gbigba data yii ti o ṣe pataki julọ si wa. Ifiranṣẹ bọtini ti nkan yii:

A ṣe eleto akoko, awọn orisun, ati ipa ti o nilo lati gba, sọ di mimọ, ati mura data.

Ati ṣe pataki julọ, a yoo jiroro kini lati ṣe lati yago fun eyi.

Gẹgẹbi awọn iṣiro oriṣiriṣi, mimọ, iyipada, sisẹ data, imọ-ẹrọ ẹya, ati bẹbẹ lọ gba 80-90% ti akoko naa, ati itupalẹ 10-20%, lakoko ti o fẹrẹ jẹ pe gbogbo ohun elo ẹkọ ni idojukọ iyasọtọ lori itupalẹ.

Jẹ ki a wo iṣoro itupalẹ ti o rọrun ni awọn ẹya mẹta bi apẹẹrẹ aṣoju ati wo kini “awọn ayidayida ti o buruju” jẹ.

Ati bi apẹẹrẹ, lẹẹkansi, a yoo ro iru awọn iyatọ ti iṣẹ-ṣiṣe ti gbigba data ati ifiwera awọn agbegbe fun:

  1. Meji Reddit subreddits
  2. Awọn apakan meji ti Habr
  3. Awọn ẹgbẹ meji ti Odnoklassniki

Ni àídájú ona ni yii

Ṣii aaye naa ki o ka awọn apẹẹrẹ, ti o ba jẹ kedere, fi awọn wakati diẹ silẹ fun kika, awọn wakati diẹ fun koodu nipa lilo awọn apẹẹrẹ ati aṣiṣe. Fi awọn wakati diẹ kun fun gbigba. Jabọ si awọn wakati diẹ ni ifipamọ (sọdipupo nipasẹ meji ki o ṣafikun awọn wakati N).

Koko Koko: Awọn iṣiro akoko da lori awọn arosinu ati amoro nipa bi o ṣe gun to.

O jẹ dandan lati bẹrẹ itupalẹ akoko nipasẹ iṣiro awọn aye atẹle wọnyi fun iṣoro ipo ti a ṣalaye loke:

  • Kini iwọn data naa ati iye ti o nilo lati gba ni ti ara (* wo isalẹ *).
  • Kini akoko gbigba fun igbasilẹ kan ati igba melo ni o ni lati duro ṣaaju ki o to le gba keji?
  • Wo koodu kikọ ti o fipamọ ipinle ati bẹrẹ atunbere nigbati (kii ṣe ti) ohun gbogbo ba kuna.
  • Ṣe apejuwe boya a nilo aṣẹ ati ṣeto akoko fun gbigba wiwọle nipasẹ API.
  • Ṣeto nọmba awọn aṣiṣe bi iṣẹ ti idiju data - ṣe iṣiro fun iṣẹ-ṣiṣe kan pato: eto, awọn iyipada melo, kini ati bii o ṣe le jade.
  • Ṣe atunṣe awọn aṣiṣe nẹtiwọki ati awọn iṣoro pẹlu ihuwasi iṣẹ akanṣe ti kii ṣe deede.
  • Ṣe ayẹwo boya awọn iṣẹ ti o nilo wa ninu iwe ati ti kii ba ṣe bẹ, lẹhinna bawo ati iye melo ni o nilo fun iṣẹ-ṣiṣe.

Ohun pataki julọ ni pe lati le ṣe iṣiro akoko - o nilo lati lo akoko ati igbiyanju lori “iwadi ni agbara” - lẹhinna nikan ni eto rẹ yoo jẹ deede. Nitorinaa, laibikita bawo ni o ti tẹ lati sọ “bawo ni o ṣe pẹ to lati gba data” - ra ararẹ ni akoko diẹ fun itupalẹ alakoko ati jiyan nipa iye akoko yoo yatọ si da lori awọn aye gidi ti iṣẹ-ṣiṣe naa.

Ati ni bayi a yoo ṣafihan awọn apẹẹrẹ kan pato nibiti iru awọn paramita yoo yipada.

Koko Koko: Iṣiro naa da lori itupalẹ awọn nkan pataki ti o ni ipa lori iwọn ati idiju iṣẹ naa.

Iṣiro-orisun amoro jẹ ọna ti o dara nigbati awọn eroja iṣẹ jẹ kekere to ati pe ko si ọpọlọpọ awọn okunfa ti o le ni ipa lori apẹrẹ iṣoro naa. Ṣugbọn ninu ọran ti nọmba awọn iṣoro Imọ-jinlẹ Data, iru awọn okunfa di pupọ lọpọlọpọ ati pe iru ọna kan di aipe.

Ifiwera ti awọn agbegbe Reddit

Jẹ ká bẹrẹ pẹlu awọn alinisoro nla (bi o ti wa ni jade nigbamii). Ni gbogbogbo, lati jẹ ooto patapata, a ni ọran ti o dara julọ, jẹ ki a ṣayẹwo atokọ ayẹwo idiju wa:

  • API afinju, ko o ati akọsilẹ wa.
  • O rọrun pupọ julọ ati pataki julọ, ami kan gba laifọwọyi.
  • Nibẹ ni o wa Python wrapper - pẹlu ọpọlọpọ awọn apẹẹrẹ.
  • Agbegbe ti o ṣe atupale ati gba data lori reddit (paapaa si awọn fidio YouTube ti n ṣalaye bi o ṣe le lo iwe ipari Python) Fun apere.
  • Awọn ọna ti a nilo julọ wa ninu API. Pẹlupẹlu, koodu naa dabi iwapọ ati mimọ, ni isalẹ jẹ apẹẹrẹ ti iṣẹ kan ti o gba awọn asọye lori ifiweranṣẹ kan.

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

Ya lati eyi yiyan ti o rọrun fun igbesi fun murasilẹ.

Bi o ti jẹ pe eyi ni ọran ti o dara julọ, o tun tọ lati ṣe akiyesi nọmba kan ti awọn ifosiwewe pataki lati igbesi aye gidi:

  • Awọn opin API - a fi agbara mu lati mu data ni awọn ipele (orun laarin awọn ibeere, ati bẹbẹ lọ).
  • Akoko ikojọpọ - fun itupalẹ pipe ati lafiwe, iwọ yoo ni lati ṣeto akoko pataki si apakan fun alantakun lati rin nipasẹ subreddit.
  • Bot naa gbọdọ ṣiṣẹ lori olupin kan-o ko le kan ṣiṣẹ lori kọǹpútà alágbèéká rẹ, fi sii sinu apoeyin rẹ, ki o lọ nipa iṣowo rẹ. Nitorinaa Mo ran ohun gbogbo lori VPS kan. Lilo koodu ipolowo habrahabr10 o le fipamọ 10% miiran ti idiyele naa.
  • Airaye ti ara ti diẹ ninu awọn data (wọn han si awọn alabojuto tabi nira pupọ lati gba) - eyi gbọdọ ṣe akiyesi; ni ipilẹ, kii ṣe gbogbo data ni a le gba ni akoko to pe.
  • Awọn aṣiṣe nẹtiwọki: Nẹtiwọki jẹ irora.
  • Eyi n gbe data gidi - kii ṣe mimọ rara.

Nitoribẹẹ, o jẹ dandan lati ni awọn nuances wọnyi ninu idagbasoke. Awọn wakati pato / awọn ọjọ da lori iriri idagbasoke tabi iriri ti n ṣiṣẹ lori awọn iṣẹ ṣiṣe ti o jọra, sibẹsibẹ, a rii pe nibi iṣẹ-ṣiṣe jẹ imọ-ẹrọ odasaka ati pe ko nilo awọn agbeka ara lati yanju - ohun gbogbo le ṣe ayẹwo daradara, ṣeto ati ṣe.

Lafiwe awọn apakan Habr

Jẹ ki a tẹsiwaju si ọran ti o nifẹ diẹ sii ati ti kii ṣe bintin ti ifiwera awọn okun ati/tabi awọn apakan ti Habr.

Jẹ ki a ṣayẹwo akojọ ayẹwo idiju wa - nibi, lati le loye aaye kọọkan, iwọ yoo ni lati ma wà diẹ sinu iṣẹ naa funrararẹ ati ṣe idanwo.

  • Ni akọkọ o ro pe API wa, ṣugbọn ko si. Bẹẹni, bẹẹni, Habr ni API kan, ṣugbọn kii ṣe iraye si awọn olumulo (tabi boya ko ṣiṣẹ rara).
  • Lẹhinna o kan bẹrẹ itupalẹ html - “awọn ibeere agbewọle”, kini o le jẹ aṣiṣe?
  • Bawo ni lati ṣe itupalẹ lonakona? Ọna ti o rọrun julọ ati igbagbogbo ti a lo ni lati ṣe atunbere lori awọn ID, ṣe akiyesi pe kii ṣe daradara julọ ati pe yoo ni lati mu awọn ọran oriṣiriṣi - eyi jẹ apẹẹrẹ ti iwuwo ti awọn ID gidi laarin gbogbo awọn ti o wa tẹlẹ.

    Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ Data? Gbigba data
    Ya lati eyi ìwé.

  • Awọn data aise ti a we ni HTML lori oke wẹẹbu jẹ irora. Fun apẹẹrẹ, o fẹ lati gba ati ṣafipamọ iwọn nkan ti nkan kan: o fa Dimegilio naa kuro ninu html o pinnu lati fipamọ bi nọmba kan fun sisẹ siwaju: 

    1) int (Dimegilio) jabọ aṣiṣe kan: niwọn igba ti o wa lori Habré, iyokuro wa, bi, fun apẹẹrẹ, ninu laini “-5” - eyi jẹ dash en, kii ṣe ami iyokuro (lairotẹlẹ, otun?), bẹ ni diẹ ninu awọn ojuami Mo ni lati gbe awọn parser si aye pẹlu iru kan ẹru fix.

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

    O le jẹ ko si ọjọ, pluses ati minuses ni gbogbo (bi a ti ri loke ni check_date iṣẹ, yi sele).

    2) Awọn ohun kikọ pataki ti a ko padanu - wọn yoo wa, o nilo lati wa ni imurasilẹ.

    3) Eto naa yipada da lori iru ifiweranṣẹ.

    4) Atijọ posts le ni a ** isokuso be ***.

  • Ni pataki, mimu aṣiṣe ati ohun ti o le tabi ko le ṣẹlẹ yoo ni lati mu ati pe o ko le ṣe asọtẹlẹ daju ohun ti yoo jẹ aṣiṣe ati bii ọna miiran le jẹ ati kini yoo ṣubu ni ibiti - iwọ yoo kan ni lati gbiyanju ati ṣe akiyesi. awọn aṣiṣe ti awọn parser ju.
  • Lẹhinna o rii pe o nilo lati ṣe itupalẹ ni ọpọlọpọ awọn okun, bibẹẹkọ ṣiṣayẹwo ni ọkan yoo gba awọn wakati 30+ (eyi jẹ akoko ipaniyan nikan ti parser-asapo kan ti n ṣiṣẹ tẹlẹ, eyiti o sun ati pe ko ṣubu labẹ eyikeyi awọn wiwọle). IN eyi Nkan, eyi yorisi ni aaye kan si ero iru kan:

Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ Data? Gbigba data

Lapapọ akojọ ayẹwo nipasẹ idiju:

  • Nṣiṣẹ pẹlu nẹtiwọọki ati itupalẹ html pẹlu aṣetunṣe ati wiwa nipasẹ ID.
  • Awọn iwe aṣẹ ti oniruuru be.
  • Ọpọlọpọ awọn aaye wa nibiti koodu le ni rọọrun ṣubu.
  • O jẹ dandan lati kọ || koodu.
  • Awọn iwe pataki, awọn apẹẹrẹ koodu, ati/tabi agbegbe ti nsọnu.

Akoko ifoju fun iṣẹ-ṣiṣe yii yoo jẹ awọn akoko 3-5 ti o ga ju fun gbigba data lati Reddit.

Ifiwera ti awọn ẹgbẹ Odnoklassniki

Jẹ ki a lọ siwaju si ọran imọ-ẹrọ ti o nifẹ julọ ti a ṣalaye. Fun mi, o jẹ iyanilenu ni pipe nitori ni iwo akọkọ, o dabi ohun kekere, ṣugbọn ko yipada lati jẹ ọna yẹn rara - ni kete ti o ba ta ọpá kan.

Jẹ ki a bẹrẹ pẹlu atokọ ayẹwo iṣoro wa ki o ṣe akiyesi pe ọpọlọpọ ninu wọn yoo jẹ ki o nira pupọ ju ti wọn wo ni akọkọ:

  • API kan wa, ṣugbọn o fẹrẹ jẹ aini awọn iṣẹ pataki.
  • Si awọn iṣẹ kan o nilo lati beere iraye si nipasẹ meeli, iyẹn ni, fifunni wiwọle kii ṣe lẹsẹkẹsẹ.
  • O ti ni akọsilẹ pupọ (lati bẹrẹ pẹlu, awọn ofin Russian ati Gẹẹsi ti dapọ ni gbogbo ibi, ati ni aiṣedeede patapata - nigbakan o kan nilo lati gboju ohun ti wọn fẹ lati ọdọ rẹ ni ibikan) ati, pẹlupẹlu, apẹrẹ ko dara fun gbigba data, fun apẹẹrẹ. , iṣẹ ti a nilo.
  • Nilo igba kan ninu iwe, ṣugbọn ko lo ni otitọ - ati pe ko si ọna lati loye gbogbo awọn intricacies ti awọn ipo API yatọ si lilọ kiri ati nireti pe ohunkan yoo ṣiṣẹ.
  • Ko si awọn apẹẹrẹ ko si agbegbe; aaye atilẹyin nikan ni gbigba alaye jẹ kekere aṣọ wiwọ ni Python (laisi ọpọlọpọ awọn apẹẹrẹ ti lilo).
  • Selenium dabi pe o jẹ aṣayan iṣẹ ṣiṣe julọ, nitori ọpọlọpọ awọn data pataki ti wa ni titiipa.
    1) Iyẹn ni, aṣẹ gba nipasẹ olumulo airotẹlẹ (ati iforukọsilẹ nipasẹ ọwọ).

    2) Sibẹsibẹ, pẹlu Selenium ko si awọn iṣeduro fun iṣẹ ti o tọ ati atunṣe (o kere ju ninu ọran ok.ru fun daju).

    3) Oju opo wẹẹbu Ok.ru ni awọn aṣiṣe JavaScript ati nigbakan huwa ajeji ati aiṣedeede.

    4) O nilo lati ṣe pagination, awọn eroja ikojọpọ, bbl

    5) Awọn aṣiṣe API ti olupasilẹ yoo ni lati mu ni airọrun, fun apẹẹrẹ, bii eyi (ẹyọkan koodu idanwo kan):

    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
    

    Asise ayanfẹ mi ni:

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

    6) Nikẹhin, Selenium + API dabi aṣayan onipin julọ.

  • O jẹ dandan lati ṣafipamọ ipinle naa ki o tun bẹrẹ eto naa, mu ọpọlọpọ awọn aṣiṣe, pẹlu ihuwasi aisedede ti aaye naa - ati pe awọn aṣiṣe wọnyi nira pupọ lati fojuinu (ayafi ti o ba kọ awọn parsers ni agbejoro, dajudaju).

Iṣiro akoko ipo fun iṣẹ-ṣiṣe yii yoo jẹ awọn akoko 3-5 ti o ga ju fun gbigba data lati Habr. Bi o ti jẹ pe ni ọran Habr a lo ọna iwaju pẹlu HTML parsing, ati ninu ọran ti O dara a le ṣiṣẹ pẹlu API ni awọn aaye pataki.

awari

Laibikita bawo ni o ṣe nilo lati ṣe iṣiro awọn akoko ipari “lori aaye” (a n gbero loni!) Ti module opo gigun ti epo ti n ṣatunṣe data, akoko ipaniyan fẹrẹ ma ṣee ṣe lati ṣe iṣiro paapaa ni agbara laisi itupalẹ awọn aye ṣiṣe.

Lori akọsilẹ imọ-jinlẹ diẹ diẹ sii, awọn ilana iṣiro agile ṣiṣẹ daradara fun awọn iṣẹ ṣiṣe ẹrọ, ṣugbọn awọn iṣoro ti o jẹ idanwo diẹ sii ati, ni ọna kan, “ẹda” ati aṣawakiri, ie, kere si asọtẹlẹ, ni awọn iṣoro, bi ninu awọn apẹẹrẹ ti awọn akọle ti o jọra, eyi ti a ti jiroro nibi.

Nitoribẹẹ, ikojọpọ data jẹ apẹẹrẹ akọkọ - o jẹ igbagbogbo rọrun ati iṣẹ-ṣiṣe ti ko ni imọ-ẹrọ, ati pe eṣu nigbagbogbo wa ninu awọn alaye. Ati pe o jẹ deede lori iṣẹ-ṣiṣe yii ti a le ṣe afihan gbogbo ibiti o ti ṣee ṣe awọn aṣayan fun ohun ti o le lọ ti ko tọ ati deede bi o ṣe gun iṣẹ naa le gba.

Ti o ba wo awọn abuda ti iṣẹ-ṣiṣe laisi awọn idanwo afikun, lẹhinna Reddit ati OK wo iru: API kan wa, iwe-itumọ python, ṣugbọn ni pataki, iyatọ jẹ nla. Ni idajọ nipasẹ awọn aye wọnyi, Habr's pars dabi idiju diẹ sii ju O dara - ṣugbọn ni iṣe o jẹ idakeji, ati pe eyi ni deede ohun ti o le rii nipasẹ ṣiṣe awọn idanwo ti o rọrun lati ṣe itupalẹ awọn aye ti iṣoro naa.

Ninu iriri mi, ọna ti o munadoko julọ ni lati ṣe iṣiro ni aijọju akoko ti iwọ yoo nilo fun itupalẹ alakoko funrararẹ ati awọn adanwo akọkọ ti o rọrun, kika iwe - iwọnyi yoo gba ọ laaye lati funni ni iṣiro deede fun gbogbo iṣẹ naa. Ni awọn ofin ti ilana agile olokiki, Mo beere lọwọ rẹ lati ṣẹda tikẹti kan fun “iṣiro awọn iṣiro iṣẹ-ṣiṣe”, lori ipilẹ eyiti MO le fun ni igbelewọn ohun ti o le ṣee ṣe laarin “sprint” ati fun idiyele deede diẹ sii fun ọkọọkan iṣẹ-ṣiṣe.

Nitorinaa, ariyanjiyan ti o munadoko julọ dabi ẹni pe o jẹ ọkan ti yoo ṣafihan alamọja “ti kii ṣe imọ-ẹrọ” iye akoko ati awọn orisun yoo yatọ si da lori awọn aye ti a ko tii ṣe ayẹwo.

Kini o le jẹ aṣiṣe pẹlu Imọ-jinlẹ Data? Gbigba data

orisun: www.habr.com

Fi ọrọìwòye kun