Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
- 1310
- 154
- Daryl Wilderman
Hari -hari ini semua orang nampaknya bercakap mengenai data besar - tetapi apa maksudnya? Istilah ini digunakan secara samar -samar dalam pelbagai situasi. Untuk tujuan artikel ini, dan siri ini, kami akan merujuk kepada Data Besar setiap kali kami bermaksud 'sejumlah besar data tekstual, dalam mana-mana format (contohnya teks ASCII biasa, XML, HTML, atau mana-mana manusia yang boleh dibaca atau separuh lain -format yang boleh dibaca). Beberapa teknik yang ditunjukkan mungkin berfungsi dengan baik untuk data binari juga, apabila digunakan dengan penjagaan dan pengetahuan.
Jadi, mengapa menyeronokkan (tajuk ref)?
Mengendalikan gigabait data tekstual mentah dalam skrip yang cepat dan cekap, atau bahkan menggunakan perintah satu liner (lihat contoh Linux Complex Bash One Liner untuk mengetahui lebih lanjut mengenai satu lapisan secara umum), boleh menjadi sangat menyeronokkan, terutama apabila anda mendapat sesuatu untuk berfungsi dengan baik dan dapat mengotomatisasi sesuatu. Kita tidak boleh belajar cukup tentang cara mengendalikan data besar; Purse teks yang mencabar seterusnya akan sentiasa berada di sudut.
Dan, mengapa keuntungan?
Banyak data dunia disimpan dalam fail rata tekstual yang besar. Contohnya, adakah anda tahu anda boleh memuat turun pangkalan data Wikipedia penuh? Masalahnya ialah sering data ini diformat dalam beberapa format lain seperti HTML, XML atau JSON, atau format data proprietari! Bagaimana anda mendapatkannya dari satu sistem ke sistem yang lain? Mengetahui bagaimana menghuraikan data besar, dan menghuraikannya dengan baik, meletakkan semua kuasa di hujung jari anda untuk menukar data dari satu format ke format yang lain. Mudah? Selalunya jawapannya adalah 'tidak', dan dengan itu ia membantu jika anda tahu apa yang anda lakukan. Lurus? Idem. Menguntungkan? Kerap, ya, terutamanya jika anda menjadi baik dalam mengendalikan dan menggunakan data besar.
Mengendalikan Data Besar juga dirujuk sebagai 'Data Wrangling'. Saya mula bekerja dengan data besar lebih 17 tahun yang lalu, jadi semoga ada satu atau dua perkara yang anda boleh pickup dari siri ini. Secara umum, transformasi data sebagai topik adalah separa tidak berkesudahan (beratus-ratus alat pihak ketiga tersedia untuk setiap format teks tertentu), tetapi saya akan memberi tumpuan kepada satu aspek tertentu yang terpakai kepada parsing data teks; Menggunakan baris arahan bash untuk menghuraikan sebarang jenis data. Kadang -kadang, ini mungkin bukan penyelesaian terbaik (i.e. Alat yang telah dibuat sebelum ini boleh melakukan pekerjaan yang lebih baik), tetapi siri ini khusus untuk semua (banyak) masa lain apabila tiada alat yang tersedia untuk mendapatkan data anda 'tepat'.
Dalam tutorial ini anda akan belajar:
Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1- Cara Bermula Dengan Big Data Wrangling / Parsing / Pengendalian / Manipulasi / Transformasi
- Apa alat bash yang tersedia untuk membantu anda, khususnya untuk aplikasi berasaskan teks
- Contoh menunjukkan kaedah dan pendekatan yang berbeza
Keperluan perisian dan konvensyen yang digunakan
Kategori | Keperluan, konvensyen atau versi perisian yang digunakan |
---|---|
Sistem | Pengedaran linux-bebas |
Perisian | Baris perintah bash, sistem berasaskan linux |
Yang lain | Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat) |
Konvensyen | # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa |
Marilah kita menganggap bahawa anda mempunyai siap sedia;
- A: Fail input data sumber anda (tekstual), dalam mana -mana format (JSON, HTML, MD, XML, Teks, TXT, CSV, atau serupa)
- B: Idea bagaimana data sasaran harus mencari aplikasi sasaran anda atau penggunaan langsung
Anda telah meneliti sebarang alat yang tersedia yang berkaitan dengan format data sumber, dan tidak terdapat sebarang alat yang sedia ada yang boleh membantu anda mendapatkan dari a ke b.
Bagi kebanyakan usahawan dalam talian, ini adalah titik di mana sering, mungkin dikesali, pengembaraan berakhir. Bagi orang yang berpengalaman dengan pengendalian data yang besar, ini adalah titik di mana pengembaraan manipulasi data besar yang menyeronokkan bermula :-).
Adalah penting untuk memahami alat apa yang boleh membantu anda melakukan apa, dan bagaimana anda boleh menggunakan setiap alat untuk mencapai langkah seterusnya dalam proses transformasi data, jadi untuk menendang siri ini, saya akan mencari, satu demi satu, di banyak alat yang terdapat di bash yang boleh membantu. Kami akan melakukan ini dalam bentuk contoh. Kami akan bermula dengan contoh yang mudah, jadi jika anda mempunyai pengalaman, anda mungkin mahu melangkah ke atasnya dan bergerak maju ke artikel lanjut dalam siri ini.
Contoh 1: Fail, Kucing, Kepala dan Ekor
Saya mengatakan bahawa kita akan mula mudah, jadi mari kita dapatkan asas -asas yang betul terlebih dahulu. Kita perlu memahami bagaimana data sumber kita disusun. Untuk ini, kami menggunakan orang bodoh fail
, kucing
, kepala
dan ekor
. Untuk contoh ini, saya memuat turun bahagian rawak pangkalan data Wikipedia.
$ ls enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442.bz2 $ bzip2 -d enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442.bz2 $ ls enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442 $ file enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 ENWIKI-LATEST-PAGES-ARTICLES-MULTISTISTREAM-INTEX19.TXT-P30121851P31308442: UTF-8 UNICODE TEXT $
Setelah tidak memuat turun muat turun BZ2
(bzip2) fail, kami menggunakan fail
perintah untuk menganalisis kandungan fail. Fail ini berasaskan teks, format UTF-8 Unicode, seperti yang disahkan oleh Teks UTF-8 Unicode
output selepas nama fail. Hebat, kita boleh bekerja dengan ini; Ini 'teks' dan yang perlu kita ketahui buat masa ini. Mari kita lihat kandungan menggunakan kucing
, kepala
dan ekor
:
$ Cat enwiki-latest-pages-artikel-multistream-index19.TXT-P30121851P31308442 | Ketua -N296016 | Tail -N1 269019710: 31197816: Linux adalah kawan saya
Saya mahu mencontohkan cara menggunakan kucing
, Tetapi perintah ini juga boleh dibina lebih mudah seperti:
$ HEAD -N296016 ENWIKI-LATEST-PAGES-ARTICLES-MULTISTREAM-INTEX19.TXT-P30121851P31308442 | Tail -N1 269019710: 31197816: Linux adalah kawan saya
Kami mencuba, ehrm, rawak ... (atau tidak begitu rawak bagi mereka yang mengenali saya;) ... garis dari fail untuk melihat jenis teks yang ada. Kita dapat melihat bahawa terdapat 3 bidang, dipisahkan oleh :
. Dua yang pertama kelihatan angka, yang ketiga berasaskan teks. Ini adalah momen yang baik untuk meningkatkan titik bahawa seseorang harus berhati -hati dengan andaian semacam ini. Asumsi (dan/atau anggapan) adalah ibu kepada semua kesilapan. Ia sering masuk akal untuk mengambil langkah -langkah berikut, terutamanya jika anda kurang akrab dengan data;
- Penyelidikan Struktur Data dalam talian - Adakah terdapat beberapa legenda data rasmi, definisi struktur data?
- Menyelidiki contoh dalam talian jika data sumber tersedia dalam talian. Sebagai contoh, untuk contoh di atas, seseorang boleh mencari Wikipedia untuk '269019710', '31197816' dan 'Linux adalah kawan saya'. Adalah rujukan kepada nombor ini? Adakah nombor -nombor ini digunakan dalam id url dan/atau artikel, atau adakah mereka merujuk kepada sesuatu yang lain dll.
Sebabnya adalah untuk mempelajari lebih lanjut mengenai data, dan khususnya strukturnya. Dengan contoh ini, semua kelihatan agak mudah, tetapi jika kita jujur dengan diri kita sendiri, kita tidak tahu apa maksud dua nombor pertama dan kita tidak tahu sama ada teks 'Linux adalah kawan saya' merujuk kepada tajuk artikel, tajuk DVD , atau penutup buku dll. Anda boleh mula melihat bagaimana pengendalian data besar dapat menjadi pengembaraan, dan struktur data dapat dan dapatkan lebih banyak lebih kompleks maka ini.
Marilah kita sebentar bahawa kita bertindak item 1 dan 2 di atas dan kita belajar lebih banyak mengenai data dan strukturnya. Kami belajar (fiktif) bahawa nombor pertama adalah kumpulan klasifikasi untuk semua karya sastera, dan yang kedua adalah ID artikel khusus dan unik. Kami juga belajar dari penyelidikan kami bahawa :
memang pemisah medan yang jelas dan mantap yang tidak dapat digunakan kecuali pemisahan medan. Akhirnya, teks di medan ketiga menyenaraikan tajuk sebenar karya sastera. Sekali lagi, ini adalah definisi yang dibuat, yang akan membantu kita untuk terus meneroka alat yang boleh kita gunakan untuk pengendalian data besar.
Sekiranya tiada data tersedia pada data atau strukturnya, anda boleh mulakan dengan membuat beberapa andaian mengenai data (melalui penyelidikan), dan tuliskannya, kemudian sahkan andaian terhadap semua data yang tersedia untuk melihat apakah andaian berdiri. Secara kerap, jika tidak kerap, ini adalah satu -satunya cara untuk benar -benar mula memproses data besar. Pada masa -masa, gabungan kedua -duanya boleh didapati; beberapa penerangan sintaks ringan digabungkan dengan penyelidikan dan andaian ringan mengenai data, contohnya pemisah bidang, rentetan penamatan (selalunya \ n
, \ r
, \ r \ n
, \\ 0
) dan lain-lain. Semakin tepat anda mendapatkannya, semakin mudah dan lebih tepat kerja -kerja pertarungan data anda!
Seterusnya, kami akan mengesahkan betapa tepatnya peraturan yang ditemui. Sentiasa sahkan kerja anda dengan data sebenar!
Contoh 2: Grep dan WC
Dalam Contoh 1, kami membuat kesimpulan bahawa bidang pertama adalah kumpulan klasifikasi untuk semua karya sastera. Mari kita cuba untuk memeriksa ini ..
$ grep '269019710' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | wc -l 100 $ wc -l enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 329956 ENWIKI-LATEST-PAGES-Articles-Multistream-INTEX19.TXT-P30121851P31308442
Hmmm. Kami mempunyai 100 karya sastera dalam fail dengan kira -kira 330k baris. Itu nampaknya betul. Namun, ketika kami memuat turun hanya sebahagian kecil pangkalan data Wikipedia, masih mungkin ... mari kita periksa item seterusnya; medan kedua ID yang unik.
$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 269019710: 31197816: Linux adalah kawan saya
Sangat hebat. Pada pandangan pertama, nampaknya tepat kerana hanya ada satu baris yang sesuai.
Bidang ketiga tidak begitu mudah untuk disahkan, walaupun kita boleh menyemak sama ada teks itu unik sekurang -kurangnya:
$ grep-binary-files = text 'linux adalah rakan saya' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 269019710: 31197816: Linux adalah kawan saya
Ok, jadi tajuknya kelihatan unik.
Perhatikan juga bahawa pilihan baru ditambah kepada grep iaitu --File binari = teks
, yang merupakan pilihan yang sangat penting untuk digunakan pada semua grep
arahan, bermula hari ini, untuk setiap grep
Perintah yang anda tulis di akhirat, dalam semua data anda yang tidak sesuai (namun istilah yang berkenaan) berfungsi. Saya tidak menggunakannya pada sebelumnya grep
Perintah untuk menjimatkan kerumitan. Jadi mengapa begitu penting anda boleh bertanya? Sebabnya, selalunya, apabila fail tekstual mengandungi watak khas, terutamanya alat seperti grep mungkin melihat data sebagai binari sedangkan ia sebenarnya teks.
Kadang -kadang, ini membawa kepada grep
tidak berfungsi dengan betul, dan hasilnya menjadi tidak jelas. Setiap kali saya menulis grep, hampir selalu (kecuali saya cukup yakin data itu bukan binari) --File binari = teks
akan dimasukkan. Ia hanya memastikan bahawa jika data kelihatan binari, atau kadang -kadang adalah binari, grep
masih akan berfungsi dengan betul. Perhatikan bahawa ini kurang menjadi kebimbangan untuk beberapa alat lain seperti sed
yang nampaknya lebih sedar/mampu secara lalai. Ringkasan; Sentiasa gunakan --File binari = teks
untuk arahan grep anda.
Ringkasnya, kami telah menemui kebimbangan dengan penyelidikan kami; Bilangan dalam bidang pertama tidak dengan apa -apa cara seolah -olah semua karya sastera yang disenaraikan di Wikipedia, walaupun ini adalah subset dari jumlah data, walaupun mungkin.
Ini kemudian menyoroti keperluan untuk proses back-and-forth yang sering menjadi sebahagian daripada data besar (ya ... istilah lain!). Kita boleh merujuk ini sebagai 'pemetaan data besar' dan memperkenalkan satu lagi istilah untuk lebih kurang proses keseluruhan yang sama; memanipulasi data besar. Ringkas.
Lebih baik kita memahami data kita, semakin baik kita dapat mengatasinya. Pada satu ketika, lengkung pembelajaran ke arah alat baru secara beransur -ansur menurun, dan lengkung pembelajaran ke arah pemahaman yang lebih baik setiap set data baru ditangani meningkat. Ini titik di mana anda tahu anda pakar transformasi data besar, kerana tumpuan anda tidak lagi pada alat - yang anda tahu sekarang - tetapi pada data itu sendiri, yang membawa kepada hasil akhir yang lebih cepat dan lebih baik secara keseluruhan!
Di bahagian seterusnya siri (di mana ini adalah artikel pertama), kami akan melihat lebih banyak alat yang boleh anda gunakan untuk manipulasi data besar.
Anda juga mungkin berminat membaca halaman web pengambilan semula yang berkaitan dengan pendek menggunakan artikel Wget Curl dan Lynx, yang menunjukkan cara mengambil halaman web dalam format HTML dan Teks/TXT berasaskan. Sentiasa gunakan pengetahuan ini secara bertanggungjawab (i.e. Jangan terlalu banyak pelayan dan hanya dapatkan domain awam, tiada hak cipta, atau CC-0 dll. data/halaman), dan selalu periksa sama ada terdapat pangkalan data/dataset yang boleh dimuat turun dari data yang anda minati, yang lebih disukai untuk mendapatkan halaman web secara individu.
Kesimpulan
Dalam artikel pertama ini dalam siri ini, kami menentukan manipulasi Big Data sejauh yang berkaitan dengan siri artikel kami dan mendapati mengapa manipulasi data besar boleh menjadi menyeronokkan dan bermanfaat. Seseorang boleh, sebagai contoh, ambil - dalam sempadan undang -undang yang berkenaan! - dataset teks domain awam yang besar, dan gunakan utiliti bash untuk mengubahnya menjadi format yang dikehendaki dan menerbitkan dalam talian yang sama. Kami mula melihat pelbagai alat bash yang boleh digunakan untuk manipulasi data besar dan meneroka contoh berdasarkan pangkalan data Wikipedia yang tersedia secara umum.
Nikmati perjalanan, tetapi sentiasa ingat bahawa Big Data mempunyai dua sisi untuknya; sisi di mana anda berada dalam kawalan, dan ... baik ... sisi di mana data berada dalam kawalan. Simpan masa yang berharga untuk keluarga, rakan dan banyak lagi (31197816!), sebelum hilang menghuraikan pelbagai data besar di luar sana!
Apabila anda sudah bersedia untuk mengetahui lebih lanjut, terdapat manipulasi data besar untuk keseronokan dan keuntungan bahagian 2.
Tutorial Linux Berkaitan:
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 3
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2
- Perkara yang hendak dipasang di Ubuntu 20.04
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Gelung bersarang dalam skrip bash
- Menguasai Gelung Skrip Bash
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- Asas matematik komputer: binari, perpuluhan, heksadesimal, oktal
- Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu
- « Cara Memasang Adobe Flash Player di Linux
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2 »