Manipulasi data besar untuk kesenangan dan keuntungan bagian 1

Manipulasi data besar untuk kesenangan dan keuntungan bagian 1

Hari -hari ini semua orang tampaknya berbicara tentang data besar - tetapi apa artinya sebenarnya? Istilah ini digunakan dengan sangat ambigu dalam berbagai situasi. Untuk keperluan artikel ini, dan seri ini, kami akan merujuk ke data besar kapan pun kami maksudkan 'sejumlah besar data tekstual, dalam format apa pun (misalnya teks ASCII biasa, XML, HTML, atau apa pun yang dapat dibaca manusia atau semi lainnya format-yang dapat dibaca manusia). Beberapa teknik yang ditampilkan mungkin bekerja dengan baik untuk data biner juga, bila digunakan dengan hati -hati dan pengetahuan.

Jadi, mengapa menyenangkan (judul ref)?

Menangani gigabyte data tekstual mentah dalam skrip yang cepat dan efisien, atau bahkan menggunakan perintah satu-lapisan (lihat Linux Complex Bash One Liner contoh untuk mempelajari lebih lanjut tentang satu lapisan secara umum), bisa sangat menyenangkan, terutama ketika Anda mendapatkan sesuatu sesuatu untuk bekerja dengan baik dan dapat mengotomatisasi hal -hal. Kita tidak akan pernah bisa cukup belajar tentang cara menangani data besar; Parse teks yang menantang berikutnya akan selalu dekat.

Dan, mengapa untung?

Banyak data dunia disimpan dalam file datar tekstual besar. Misalnya, Anda tahu Anda dapat mengunduh database Wikipedia lengkap? Masalahnya adalah bahwa sering kali data ini diformat dalam beberapa format lain seperti HTML, XML atau JSON, atau bahkan format data hak milik! Bagaimana Anda mendapatkannya dari satu sistem ke sistem lainnya? Mengetahui cara mengurai data besar, dan menguraikannya dengan baik, menempatkan semua kekuatan di ujung jari Anda untuk mengubah data dari satu format ke format lainnya. Sederhana? Seringkali jawabannya adalah 'tidak', dan karenanya membantu jika Anda tahu apa yang Anda lakukan. Mudah? Idem. Menguntungkan? Secara teratur, ya, terutama jika Anda menjadi pandai menangani dan menggunakan data besar.

Menangani Big Data juga disebut sebagai 'Data Wrangling'. Saya mulai bekerja dengan Big Data lebih dari 17 tahun yang lalu, jadi semoga ada satu atau dua hal yang dapat Anda ambil dari seri ini. Secara umum, transformasi data sebagai topik adalah semi-endless (ratusan alat pihak ketiga tersedia untuk setiap format teks tertentu), tetapi saya akan fokus pada satu aspek spesifik yang berlaku untuk penguraian data tekstual; Menggunakan Baris Perintah Bash untuk mengurai semua jenis data. Kadang -kadang, ini mungkin bukan solusi terbaik (i.e. Alat yang telah diciptakan sebelumnya dapat melakukan pekerjaan yang lebih baik), tetapi seri ini khusus untuk semua (banyak) di waktu lain ketika tidak ada alat yang tersedia untuk mendapatkan data Anda 'tepat'.

Dalam tutorial ini Anda akan belajar:

Manipulasi data besar untuk kesenangan dan keuntungan bagian 1
  • Cara Memulai dengan Big Data Wrangling / Parsing / Handling / Manipulation / Transformation
  • Alat bash apa yang tersedia untuk membantu Anda, khususnya untuk aplikasi berbasis teks
  • Contoh menunjukkan metode dan pendekatan yang berbeda

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Lainnya Utilitas apa pun yang tidak termasuk dalam shell bash secara default dapat diinstal menggunakan sudo apt-get install-name utilitas (atau instalasi yum untuk sistem berbasis redhat)
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Biarkan kami berasumsi bahwa Anda telah siap;
- A: File input data (tekstual) Anda, dalam format apa pun (JSON, HTML, MD, XML, Teks, TXT, CSV, atau serupa)
- B: Gagasan tentang bagaimana data target harus mencari aplikasi target atau penggunaan langsung Anda

Anda telah meneliti alat yang tersedia yang relevan dengan format data sumber, dan belum menemukan alat yang sudah ada sebelumnya yang dapat membantu Anda mendapatkan dari A ke B.

Bagi banyak pengusaha online, inilah titik di mana sering, mungkin sayangnya, petualangan berakhir. Untuk orang yang berpengalaman dengan penanganan data besar, inilah titik di mana petualangan manipulasi data besar yang menyenangkan dimulai :-).

Penting untuk memahami alat apa yang dapat membantu Anda melakukan apa, dan bagaimana Anda dapat menggunakan setiap alat untuk mencapai langkah Anda selanjutnya dalam proses transformasi data, jadi untuk menendang seri ini, saya akan mencari, satu per satu, di banyak alat yang tersedia dalam bash yang dapat membantu. Kami akan melakukan ini dalam bentuk contoh. Kami akan mulai dengan contoh yang mudah, jadi jika Anda sudah memiliki beberapa pengalaman, Anda mungkin ingin membaca ini dan melanjutkan ke artikel lebih lanjut dalam seri ini.

Contoh 1: File, kucing, kepala dan ekor

Saya memang mengatakan kita akan mulai sederhana, jadi mari kita dapatkan dasar -dasarnya dengan benar terlebih dahulu. Kita perlu memahami bagaimana data sumber kita terstruktur. Untuk ini, kami menggunakan orang bodoh mengajukan, kucing, kepala Dan ekor. Untuk contoh ini, saya mengunduh bagian acak dari database Wikipedia.

$ ls enwiki-latest-halaman-artikel-multi-index19.txt-p30121851p31308442.bz2 $ bzip2 -d enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442.bz2 $ ls enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442 $ file enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442 enwiki-latest-halaman-artikel-multistream-index19.TXT-P30121851P31308442: UTF-8 Teks Unicode $ 


Setelah membuka ritsleting unduhan BZ2 file (bzip2), kami menggunakan mengajukan Perintah untuk menganalisis konten file. File ini berbasis teks, format UTF-8 Unicode, seperti yang dikonfirmasi oleh Teks UTF-8 Unicode output setelah nama file. Hebat, kita dapat bekerja dengan ini; itu adalah 'teks' dan yang perlu kita ketahui untuk saat ini. Mari kita lihat konten yang digunakan kucing, kepala Dan ekor:

$ cat enwiki-latest-halaman-artikel-multi-index19.txt-p30121851p31308442 | head -n296016 | Tail -N1 269019710: 31197816: Linux adalah teman saya 

Saya ingin mencontohkan cara menggunakan kucing, Tetapi perintah ini juga bisa dibangun lebih sederhana sebagai:

$ head -n296016 enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442 | Tail -N1 269019710: 31197816: Linux adalah teman saya 

Kami mencicipi, ehrm, acak ... (atau tidak terlalu acak bagi mereka yang mengenal saya;) ... baris dari file untuk melihat jenis teks apa yang ada di sana. Kita dapat melihat bahwa tampaknya ada 3 bidang, dipisahkan oleh :. Dua yang pertama terlihat numerik, yang ketiga berdasarkan teks. Ini adalah momen yang baik untuk meningkatkan poin bahwa seseorang harus berhati -hati dengan asumsi semacam ini. Asumsi (dan/atau anggapan) adalah ibu dari semua kesalahan. Seringkali masuk akal untuk mengambil langkah -langkah berikut, terutama jika Anda kurang akrab dengan data;

  1. Teliti Struktur Data Online - Apakah ada beberapa legenda data resmi, definisi struktur data?
  2. Teliti contoh online jika data sumber tersedia secara online. Sebagai contoh, untuk contoh di atas, seseorang dapat mencari Wikipedia untuk '269019710', '31197816' dan 'Linux adalah teman saya'. Adalah referensi untuk angka -angka ini? Apakah angka -angka ini digunakan dalam URL dan/atau ID artikel, atau apakah mereka merujuk pada hal lain dll.

Alasan untuk ini adalah pada dasarnya mempelajari lebih lanjut tentang data, dan secara khusus strukturnya. Dengan contoh ini, semua terlihat cukup mudah, tetapi jika kita jujur ​​dengan diri kita sendiri, kita tidak tahu apa arti dua angka pertama dan kita tidak tahu apakah teks 'Linux adalah teman saya' mengacu pada judul artikel, judul DVD DVD , atau sampul buku dll. Anda dapat mulai melihat bagaimana penanganan data besar bisa berupa petualangan, dan struktur data bisa dan memang menjadi jauh lebih kompleks daripada ini.

Katakanlah sejenak bahwa kami bertindak item 1 dan 2 di atas dan kami belajar lebih banyak tentang data dan strukturnya. Kami belajar (secara fiktif) bahwa angka pertama adalah kelompok klasifikasi untuk semua karya sastra, dan yang kedua adalah ID artikel yang spesifik dan unik. Kami juga belajar dari penelitian kami : memang pemisah lapangan yang jelas dan mapan yang tidak dapat digunakan kecuali untuk pemisahan lapangan. Akhirnya, teks di bidang ketiga mencantumkan judul sebenarnya dari karya sastra. Sekali lagi, ini adalah definisi yang dibuat-buat, yang akan membantu kami terus mengeksplorasi alat yang dapat kami gunakan untuk penanganan data besar.

Jika tidak ada data yang tersedia pada data atau strukturnya, Anda dapat mulai dengan membuat beberapa asumsi tentang data (melalui penelitian), dan menuliskannya, kemudian verifikasi asumsi terhadap semua data yang tersedia untuk melihat apakah asumsi berdiri. Secara teratur, jika tidak sering, ini adalah satu -satunya cara untuk benar -benar mulai memproses data besar. Kadang -kadang, kombinasi keduanya tersedia; Beberapa deskripsi sintaks ringan dikombinasikan dengan penelitian dan asumsi ringan tentang data, misalnya pemisah lapangan, string terminasi (sering kali \N, \R, \ r \ n, \\ 0) dll. Semakin benar Anda mendapatkannya, semakin mudah dan semakin akurat, pekerjaan bertengkar data Anda!

Selanjutnya, kami akan memverifikasi seberapa akurat aturan yang kami temukan. Selalu verifikasi pekerjaan Anda dengan data aktual!

Contoh 2: Grep dan WC

Dalam Contoh 1, kami menyimpulkan bahwa bidang pertama adalah kelompok klasifikasi untuk semua karya sastra. Mari secara logis mencoba memeriksa ini…

$ GREP '269019710' Enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442 | wc -l 100 $ wc -l enwiki-latest-halaman-artikel-multictream-index19.txt-p30121851p31308442 329956 enwiki-latest-halaman-artikel-multi-index19.txt-p30121851p31308442 


hmmm. Kami memiliki 100 karya sastra secara total dalam file dengan sekitar 330 ribu baris. Itu sepertinya tidak benar. Namun, karena kami hanya mengunduh sebagian kecil dari database Wikipedia, masih mungkin ... mari kita periksa item berikutnya; bidang ID yang unik.

$ GREP '31197816' Enwiki-latest-halaman-artikel-multictream-index19.TXT-P30121851P31308442 269019710: 31197816: Linux adalah teman saya 

Sangat keren. Sekilas, itu tampaknya akurat karena hanya ada satu baris yang cocok.

Bidang ketiga tidak akan mudah diverifikasi, meskipun kami dapat memeriksa apakah teksnya setidaknya unik:

$ grep-biner-files = teks 'linux adalah teman saya' enwiki-latest-halaman-artikel-multistream-index19.TXT-P30121851P31308442 269019710: 31197816: Linux adalah teman saya 

Oke, jadi judulnya tampaknya unik.

Perhatikan juga bahwa opsi baru ditambahkan ke grep yaitu --file biner = teks, yang merupakan pilihan yang sangat penting untuk digunakan pada semua grep perintah, mulai hari ini, untuk setiap grep Perintah yang Anda tulis selanjutnya, dalam semua data Anda Mangling (Lainnya Istilah yang berlaku) berfungsi. Saya tidak menggunakannya di sebelumnya grep Perintah untuk Menghemat Kompleksitas. Jadi mengapa begitu penting sehingga Anda mungkin bertanya? Alasannya adalah bahwa sering kali, ketika file tekstual berisi karakter khusus, terutama alat -alat seperti GREP mungkin melihat data sebagai biner sedangkan itu sebenarnya teks.

Kadang -kadang, ini mengarah ke grep tidak bekerja dengan benar, dan hasilnya menjadi tidak terdefinisi. Setiap kali saya menulis grep, hampir selalu (kecuali saya cukup yakin data itu bukan biner) --file biner = teks akan dimasukkan. Itu hanya memastikan bahwa jika data terlihat biner, atau bahkan kadang -kadang adalah biner, grep akan tetap bekerja dengan benar. Perhatikan bahwa ini kurang menjadi perhatian untuk beberapa alat lain seperti sed yang tampaknya lebih sadar/mampu secara default. Ringkasan; selalu gunakan --file biner = teks untuk perintah grep Anda.

Singkatnya, kami telah menemukan kekhawatiran dengan penelitian kami; Angka di bidang pertama tidak dengan cara apa pun tampaknya semua karya sastra yang tercantum di Wikipedia, bahkan jika ini adalah subset dari total data, meskipun mungkin.

Ini kemudian menyoroti perlunya proses bolak-balik yang sering menjadi bagian dari munging data besar (ya ... istilah lain!). Kami dapat menyebut ini sebagai 'pemetaan data besar' dan memperkenalkan istilah lain untuk proses keseluruhan yang kurang lebih sama; memanipulasi data besar. Singkatnya, proses bolak -balik antara data aktual, alat yang bekerja dengan Anda, dan definisi data, legenda atau sintaks adalah bagian integral dari proses manipulasi data.



Semakin baik kita memahami data kita, semakin baik kita bisa menanganinya. Pada titik tertentu, kurva pembelajaran menuju alat baru secara bertahap menurun, dan kurva belajar menuju pemahaman yang lebih baik setiap set data baru ditangani meningkat. Inilah titik di mana Anda tahu bahwa Anda adalah ahli transformasi data besar, karena fokus Anda tidak lagi pada alat - yang Anda ketahui sekarang - tetapi pada data itu sendiri, yang mengarah ke hasil akhir yang lebih cepat dan lebih baik secara keseluruhan!

Pada bagian selanjutnya dari seri (yang ini adalah artikel pertama), kami akan melihat lebih banyak alat yang dapat Anda gunakan untuk manipulasi data besar.

Anda mungkin juga tertarik untuk membaca halaman web pengambilan semi-terkait kami yang singkat menggunakan artikel WGET CURL dan LYNX, yang menunjukkan cara mengambil halaman web dalam format berbasis HTML dan Text/TX. Selalu gunakan pengetahuan ini secara bertanggung jawab (i.e. Jangan berlebihan server dan hanya mengambil domain publik, tidak ada hak cipta, atau CC-0 dll. data/halaman), dan selalu periksa apakah ada database/dataset data yang Anda minati, yang lebih disukai untuk mengambil halaman web secara individual.

Kesimpulan

Dalam artikel pertama ini dalam seri ini, kami mendefinisikan manipulasi data besar sejauh ini berkaitan dengan seri artikel kami dan menemukan mengapa manipulasi data besar bisa menyenangkan dan bermanfaat. Seseorang dapat, misalnya, mengambil - dalam batasan hukum yang berlaku! - dataset tekstual domain publik yang besar, dan gunakan utilitas bash untuk mengubahnya menjadi format yang diinginkan dan menerbitkan yang sama secara online. Kami mulai melihat berbagai alat bash yang dapat digunakan untuk manipulasi data besar dan mengeksplorasi contoh berdasarkan database Wikipedia yang tersedia untuk umum.

Nikmati perjalanan, tetapi selalu ingat bahwa data besar memiliki dua sisi untuk itu; sisi tempat Anda memegang kendali, dan ... yah ... sisi tempat data memegang kendali. Simpan waktu yang berharga tersedia untuk keluarga, teman, dan lainnya (31197816!), sebelum tersesat mem -parsing segudang data besar di luar sana!

Saat Anda siap mempelajari lebih lanjut, ada manipulasi data besar untuk kesenangan dan keuntungan bagian 2.

Tutorial Linux Terkait:

  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 3
  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 2
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Loop bersarang dalam skrip bash
  • Menguasai loop skrip bash
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Dasar -dasar matematika komputer: biner, desimal, heksadesimal, oktal
  • Ubuntu 20.04 trik dan hal -hal yang mungkin tidak Anda ketahui