Apa sing salah karo Ilmu Data? Pangumpulan data

Apa sing salah karo Ilmu Data? Pangumpulan data
Saiki ana 100500 kursus Ilmu Data lan wis suwe dingerteni manawa paling akeh dhuwit ing Ilmu Data bisa dipikolehi liwat kursus Ilmu Data (kenapa dig nalika sampeyan bisa ngedol shovel?). Kerugian utama kursus kasebut yaiku ora ana hubungane karo karya nyata: ora ana sing bakal menehi data sing resik lan diproses ing format sing dibutuhake. Lan nalika sampeyan ninggalake kursus lan miwiti ngrampungake masalah nyata, akeh nuansa muncul.

Mulane, kita miwiti seri cathetan "Apa sing bisa salah karo Ilmu Data", adhedhasar acara nyata sing kedadeyan karo aku, kanca-kanca lan kanca-kanca. Kita bakal nganalisa tugas Ilmu Data khas nggunakake conto nyata: kepiye kedadeyan kasebut. Ayo diwiwiti dina iki kanthi tugas nglumpukake data.

Lan bab pisanan wong kesandhung nalika miwiti nggarap data nyata bener-bener ngumpulake data iki sing paling cocog karo kita. Pesen utama artikel iki:

Kita kanthi sistematis ngremehake wektu, sumber daya, lan gaweyan sing dibutuhake kanggo ngumpulake, ngresiki, lan nyiapake data.

Lan sing paling penting, kita bakal ngrembug apa sing kudu ditindakake kanggo nyegah iki.

Miturut macem-macem prakiraan, reresik, transformasi, pangolahan data, rekayasa fitur, lan sapiturute njupuk 80-90% wektu, lan analisis 10-20%, nalika meh kabeh materi pendidikan fokus ing analisis.

Ayo goleki masalah analitis sing gampang ing telung versi minangka conto khas lan deleng apa "kahanan sing mbebayani".

Lan minangka conto, maneh, kita bakal nimbang variasi sing padha karo tugas ngumpulake data lan mbandhingake komunitas kanggo:

  1. Loro subreddit Reddit
  2. Rong bagean saka Habr
  3. Rong klompok Odnoklassniki

Pendekatan kondisional ing teori

Bukak situs lan waca conto, yen wis jelas, nyisihake sawetara jam kanggo maca, sawetara jam kanggo kode nggunakake conto lan debugging. Tambah sawetara jam kanggo koleksi. Uncalan ing sawetara jam ing cadangan (pingan loro lan nambah N jam).

Titik Kunci: Perkiraan wektu adhedhasar asumsi lan guesswork babagan suwene wektu kasebut.

Sampeyan kudu miwiti analisis wektu kanthi ngira paramèter ing ngisor iki kanggo masalah kondisional sing diterangake ing ndhuwur:

  • Apa ukuran data lan jumlah sing kudu diklumpukake sacara fisik (*ndeleng ngisor*).
  • Apa wektu koleksi kanggo siji rekaman lan suwene sampeyan kudu ngenteni sadurunge bisa ngumpulake sing kapindho?
  • Coba nulis kode sing nyimpen negara lan miwiti maneh nalika (ora yen) kabeh gagal.
  • Temokake apa kita butuh wewenang lan nyetel wektu kanggo entuk akses liwat API.
  • Setel nomer kesalahan minangka fungsi saka kerumitan data - ngevaluasi kanggo tugas tartamtu: struktur, carane akeh transformasi, apa lan carane extract.
  • Ndandani kesalahan jaringan lan masalah karo prilaku project non-standar.
  • Nemtokake yen fungsi sing dibutuhake ana ing dokumentasi lan yen ora, banjur kepiye lan pira sing dibutuhake kanggo solusi.

Ingkang paling penting yaiku kanggo ngira-ngira wektu - sampeyan kudu nglampahi wektu lan gaweyan kanggo "pengintaian ing pasukan" - mung banjur rencana sampeyan bakal nyukupi. Mulane, ora ketompo carane akeh sing di-push kanggo ngomong "suwene wektu iku njupuk kanggo ngumpulake data" - tuku dhewe sawetara wektu kanggo analisis awal lan argue carane akeh wektu bakal beda-beda gumantung ing paramèter nyata saka masalah.

Lan saiki kita bakal nduduhake conto tartamtu ing ngendi paramèter kasebut bakal diganti.

Titik Kunci: Perkiraan kasebut adhedhasar analisis faktor kunci sing mengaruhi ruang lingkup lan kerumitan karya.

Estimasi adhedhasar guess minangka pendekatan sing apik nalika unsur fungsional cukup cilik lan ora akeh faktor sing bisa mengaruhi desain masalah. Nanging ing kasus sawetara masalah Ilmu Data, faktor kasebut dadi akeh banget lan pendekatan kasebut dadi ora nyukupi.

Perbandingan komunitas Reddit

Ayo diwiwiti kanthi kasus sing paling gampang (kaya mengko). Umumé, kanthi jujur, kita duwe kasus sing meh cocog, ayo mriksa dhaptar kerumitan kita:

  • Ana API sing rapi, jelas lan didokumentasikan.
  • Gampang banget lan sing paling penting, token dipikolehi kanthi otomatis.
  • Ana pambungkus python - karo akeh conto.
  • Komunitas sing nganalisa lan ngumpulake data babagan reddit (malah menyang video YouTube sing nerangake carane nggunakake bungkus python) Tuladhane.
  • Cara sing kita butuhake paling mungkin ana ing API. Kajaba iku, kode kasebut katon kompak lan resik; ing ngisor iki minangka conto fungsi sing ngumpulake komentar ing kiriman.

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

Dijupuk saka iki pilihan saka keperluan trep kanggo mbungkus.

Senadyan kasunyatan manawa iki minangka kasus sing paling apik, isih kudu dipikirake sawetara faktor penting saka urip nyata:

  • Watesan API - kita kepeksa njupuk data ing batch (turu antarane panjalukan, etc.).
  • Wektu koleksi - kanggo analisis lan perbandingan lengkap, sampeyan kudu nyisihake wektu sing penting mung kanggo laba-laba mlaku liwat subreddit.
  • Bot kudu mbukak ing server-sampeyan ora bisa mung mbukak ing laptop, sijine ing tas ransel, lan nindakake bisnis. Dadi aku mbukak kabeh ing VPS. Nggunakake kode promosi habrahabr10 sampeyan bisa nyimpen liyane 10% saka biaya.
  • Inaccessibility fisik sawetara data (padha katon kanggo pangurus utawa angel banget kanggo ngumpulake) - iki kudu dianggep, ing asas, ora kabeh data bisa diklumpukake ing wektu sing cukup.
  • Kesalahan jaringan: Jaringan pancen angel.
  • Iki data nyata urip - iku tau murni.

Mesthine, perlu kalebu nuansa kasebut ing pangembangan. Jam / dina tartamtu gumantung marang pengalaman pangembangan utawa pengalaman nggarap tugas sing padha, nanging kita weruh yen tugas kasebut murni rekayasa lan ora mbutuhake gerakan awak tambahan kanggo ngatasi - kabeh bisa ditaksir kanthi apik, dijadwal lan rampung.

Perbandingan bagean Habr

Ayo pindhah menyang kasus sing luwih menarik lan ora pati penting kanggo mbandhingake benang lan / utawa bagean saka Habr.

Ayo dipriksa dhaptar kerumitan kita - ing kene, kanggo ngerti saben titik, sampeyan kudu digali sethithik menyang tugas kasebut lan eksperimen.

  • Ing kawitan sampeyan mikir ana API, nanging ora ana. Ya, ya, Habr duwe API, nanging mung ora bisa diakses dening pangguna (utawa bisa uga ora bisa digunakake).
  • Banjur sampeyan mung miwiti parsing html - "panyuwunan impor", apa sing salah?
  • Kepiye carane ngurai? Pendekatan sing paling gampang lan paling kerep digunakake yaiku ngulang ID, elinga yen iki dudu sing paling efisien lan kudu nangani kasus sing beda-beda - ing ngisor iki minangka conto kerapatan ID nyata ing antarane kabeh sing wis ana.

    Apa sing salah karo Ilmu Data? Pangumpulan data
    Dijupuk saka iki artikel.

  • Data mentah kebungkus HTML ing ndhuwur web punika pain. Contone, sampeyan pengin ngumpulake lan nyimpen rating artikel: sampeyan nyuwek skor saka html lan mutusake kanggo nyimpen minangka nomer kanggo proses luwih: 

    1) int(skor) mbuwang kesalahan: amarga ing Habré ana minus, kayata, contone, ing baris "-5" - iki en dash, dudu tandha minus (ora dikarepke, bener?), Dadi ing sawetara titik aku kudu mundhakaken parser kanggo urip karo fix elek kuwi.

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

    Ora ana tanggal, plus lan minus ing kabeh (kaya sing kita deleng ing ndhuwur ing fungsi check_date, kedadeyan kasebut).

    2) Karakter khusus sing ora bisa lolos - bakal teka, sampeyan kudu siyap.

    3) Owah-owahan struktur gumantung saka jinis kiriman.

    4) Tulisan lawas bisa uga duwe **struktur aneh**.

  • Ateges, penanganan kesalahan lan apa sing bisa kedadeyan utawa ora kedadeyan kudu ditangani lan sampeyan ora bisa prédhiksi manawa apa sing bakal salah lan kepiye struktur kasebut lan apa sing bakal tiba ing endi - sampeyan mung kudu nyoba lan nimbang. kasalahan sing parser mbalang.
  • Banjur sampeyan nyadari yen sampeyan kudu ngurai sawetara utas, yen ora, parsing siji banjur bakal njupuk 30+ jam (iki mung wektu eksekusi parser siji-Utas sing wis digunakake, sing turu lan ora ana larangan). ING iki artikel, iki mimpin ing sawetara titik kanggo rencana padha:

Apa sing salah karo Ilmu Data? Pangumpulan data

Daftar priksa total miturut kerumitan:

  • Nggarap jaringan lan parsing html kanthi pengulangan lan telusuran kanthi ID.
  • Dokumen struktur heterogen.
  • Ana akeh panggonan sing kode bisa gampang tiba.
  • pêrlu angandika || kode.
  • Dokumentasi sing dibutuhake, conto kode, lan/utawa komunitas ora ana.

Wektu kira-kira kanggo tugas iki bakal 3-5 kaping luwih dhuwur tinimbang ngumpulake data saka Reddit.

Perbandingan klompok Odnoklassniki

Ayo pindhah menyang kasus sing paling menarik kanthi teknis sing diterangake. Kanggo kula, iki pancen menarik amarga sepisanan katon ora pati penting, nanging ora kaya ngono - sanalika sampeyan ngethok tongkat kasebut.

Ayo diwiwiti kanthi dhaptar priksa kesulitan lan cathet yen akeh sing bakal dadi luwih angel tinimbang sing katon ing wiwitan:

  • Ana API, nanging meh rampung kurang fungsi perlu.
  • Kanggo fungsi tartamtu, sampeyan kudu njaluk akses liwat mail, yaiku, menehi akses ora langsung.
  • Didokumentasikan banget (kanggo diwiwiti, istilah Rusia lan Inggris dicampur ing endi wae, lan ora konsisten - kadhangkala sampeyan mung kudu ngira apa sing dikarepake saka sampeyan ing endi wae) lan, luwih-luwih, desain kasebut ora cocog kanggo entuk data, contone. , fungsi sing kita butuhake.
  • Mbutuhake sesi ing dokumentasi, nanging ora bener nggunakake - lan ora ana cara kanggo ngerti kabeh intricacies saka mode API liyane poking watara lan ngarep-arep soko bakal bisa.
  • Ora ana conto lan komunitas; mung titik dhukungan kanggo ngumpulake informasi mung cilik bungkus ing Python (tanpa akeh conto panggunaan).
  • Selenium katon minangka pilihan sing paling bisa ditindakake, amarga akeh data sing dibutuhake dikunci.
    1) Yaiku, wewenang ditindakake liwat pangguna fiktif (lan registrasi kanthi tangan).

    2) Nanging, karo Selenium ora ana jaminan kanggo karya sing bener lan bisa diulang (paling ora ing kasus ok.ru mesthi).

    3) Situs web Ok.ru ngemot kesalahan JavaScript lan kadhangkala tumindak aneh lan ora konsisten.

    4) Sampeyan kudu nindakake pagination, loading unsur, etc ...

    5) Kesalahan API sing diwenehake pambungkus kudu ditangani kanthi kikuk, umpamane, kaya iki (potongan kode eksperimen):

    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
    

    Kesalahan favoritku yaiku:

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

    6) Pungkasane, Selenium + API katon minangka pilihan sing paling rasional.

  • Sampeyan perlu kanggo nyimpen negara lan miwiti maneh sistem, nangani akeh kasalahan, kalebu prilaku inconsistent saka situs - lan kasalahan iki cukup angel mbayangno (kajaba sampeyan nulis parsers profesional, mesthi).

Perkiraan wektu kondisional kanggo tugas iki bakal 3-5 kaping luwih dhuwur tinimbang kanggo ngumpulake data saka Habr. Senadyan kasunyatan manawa ing kasus Habr kita nggunakake pendekatan frontal karo parsing HTML, lan ing kasus OK kita bisa nggarap API ing panggonan kritis.

temonan

Ora ketompo carane akeh sing dibutuhake kanggo ngira tenggat wektu "ing titik" (kita planning dina iki!) Modul pipo Processing data voluminous, wektu eksekusi meh tau bisa kanggo ngira malah qualitatively tanpa nganalisa paramèter tugas.

Ing cathetan sing rada filosofis, strategi ngira-ngira tangkas bisa digunakake kanthi apik kanggo tugas-tugas teknik, nanging masalah sing luwih eksperimental lan, ing pangertèn, "kreatif" lan eksplorasi, yaiku, kurang bisa ditebak, duwe kesulitan, kaya ing conto topik sing padha , kang wis kita rembugan ing kene.

Mesthine, koleksi data mung minangka conto utama - biasane tugas sing gampang banget lan ora rumit sacara teknis, lan setan asring ana ing rincian. Lan sabenere ing tugas iki kita bisa nuduhake kabeh macem-macem opsi kanggo apa bisa salah lan persis suwene karya bisa njupuk.

Yen sampeyan ndeleng karakteristik tugas tanpa eksperimen tambahan, mula Reddit lan OK katon padha: ana API, bungkus python, nanging sejatine bedane gedhe. Miturut paramèter kasebut, pars Habr katon luwih rumit tinimbang OK - nanging ing praktik kasebut cukup ngelawan, lan iki persis sing bisa ditemokake kanthi nindakake eksperimen sing prasaja kanggo nganalisa paramèter masalah kasebut.

Ing pengalamanku, pendekatan sing paling efektif yaiku kira-kira ngira wektu sing dibutuhake kanggo analisis awal dhewe lan eksperimen pisanan sing prasaja, maca dokumentasi - iki bakal ngidini sampeyan menehi perkiraan sing akurat kanggo kabeh karya. Ing babagan metodologi agile sing populer, aku njaluk sampeyan nggawe tiket kanggo "parameter tugas ngira-ngira", kanthi dhasar aku bisa menehi penilaian babagan apa sing bisa ditindakake sajrone "sprint" lan menehi perkiraan sing luwih akurat kanggo saben. tugas.

Mulane, argumentasi sing paling efektif kaya sing bakal nuduhake spesialis "non-teknis" pira wektu lan sumber daya bakal beda-beda gumantung saka parameter sing durung ditaksir.

Apa sing salah karo Ilmu Data? Pangumpulan data

Source: www.habr.com

Add a comment