Manipulasi data besar untuk kesenangan dan keuntungan bagian 3

Manipulasi data besar untuk kesenangan dan keuntungan bagian 3

Ada dua artikel sebelumnya dalam seri ini, yang mungkin ingin Anda baca terlebih dahulu jika Anda belum membacanya; Manipulasi data besar untuk kesenangan dan keuntungan bagian 1 dan manipulasi data besar untuk kesenangan dan laba Bagian 2.

Dalam seri ini, kami membahas berbagai ide dan pendekatan praktis untuk menangani data besar, atau lebih khusus menangani, mentransformasikan, mangling, munging, parsing, perselisihan, mengubah dan memanipulasi data di baris perintah Linux.

Artikel ketiga ini dalam seri ini akan terus mengeksplorasi alat bash yang dapat membantu kami saat memproses dan memanipulasi data besar berbasis teks (atau dalam beberapa kasus biner). Seperti disebutkan dalam artikel sebelumnya, transformasi data secara umum adalah topik semi-endless karena ada ratusan alat untuk setiap format teks tertentu. Ingatlah bahwa kadang-kadang menggunakan alat bash mungkin bukan solusi terbaik, karena alat di luar rak dapat melakukan pekerjaan yang lebih baik. Yang mengatakan, seri ini khusus untuk semua (banyak) di waktu lain ketika tidak ada alat yang tersedia untuk mendapatkan data Anda dalam format pilihan Anda.

Akhirnya, jika Anda ingin mempelajari lebih lanjut tentang mengapa manipulasi data besar bisa menyenangkan dan menguntungkan ... silakan baca Bagian 1 terlebih dahulu.

Dalam tutorial ini Anda akan belajar:

  • Teknik Big Data Wrangling / Parsing / Handling / Manipulation / Transformation
  • Alat bash apa yang tersedia untuk membantu Anda, khususnya untuk aplikasi berbasis teks
  • Berbagai contoh, menunjukkan berbagai metode dan pendekatan
Manipulasi data besar untuk kesenangan dan keuntungan bagian 3

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


Contoh 1: WC, Head dan VI - Menjelajahi Data

Untuk contoh ini, kami akan bekerja dengan file status JSON, dibuat oleh Wikipedia sebagai bagian dari dump data mereka (ref folder apa pun di https: // dumps.Wikimedia.org/enwiki/)

wget https: // dumps.Wikimedia.org/enwiki/20201020/dumpstatus.json $ head -c100 dumpstatus.json "versi": "0.8 "," Jobs ": " PagereStrictionStable ": " Status ":" Done "," Files ": " Enwiki-20201020-P $ WC -L Dumpstatus.JSON 1 

Itu wget Perintah mengambil file untuk kami (perintah ini juga berguna jika Anda harus mengunduh satu set besar file data dan ingin mengotomatiskannya di baris perintah Anda), dan head -c100 menunjukkan 100 karakter pertama dari file tersebut. Ini adalah cara yang bagus untuk dengan cepat memeriksa kepala bagian atas file.

Jika file itu entah bagaimana data biner, menggunakan head -c100 Perintah tidak akan membuat terlalu banyak kekacauan di terminal Anda, dan jika garisnya sangat panjang (seperti halnya untuk file ini), perintah ini memastikan kami tidak akan melihat banyak halaman menggulir teks yang lewat.

Itu WC -L Perintah menunjukkan jumlah baris.

Sebelum mulai bekerja dengan data besar apa pun, selalu merupakan ide yang baik untuk memeriksa konten file yang Anda kerjakan. Saya pribadi menggunakan dan lebih suka vi, tetapi Anda dapat editor teks apa pun yang terasa nyaman untuk Anda. Salah satu manfaat dari vi Apakah itu sangat baik dalam membuka dan mengedit file yang sangat besar. Buka file, dan lihatlah: berapa lama baris, data macam apa ini dll.?

Sangat menarik untuk dicatat di sini vi, Meskipun memiliki kurva belajar yang besar, juga sangat kuat dalam hal operasi massal. Misalnya, dapat lebih cepat menghasilkan file satu juta baris dengan hanya mengeksekusi beberapa perintah VI di dalam VI kemudian menulis sedikit skrip untuk melakukan hal yang sama. Salah satu aspek hebat tentang kurva pembelajaran VI adalah cenderung tumbuh bersama Anda, karena dan ketika Anda memerlukan metode atau prosedur tambahan.

Juga, hanya menggunakan dua perintah (head -c100 Dan WC -L), mencatat nama file, dan memeriksa dengan cepat vi Kami telah belajar banyak hal:

  1. Ini adalah file JSON (.ekstensi json)
  2. File ini memiliki baris yang sangat panjang (vi, tekan tombol ujung dan note counter di kanan bawah, hadir pada banyak instalasi VI): 110365 karakter
  3. File ini memiliki satu baris (WC -L)
  4. File ini sangat terstruktur (head -C100)

Meskipun ini adalah contoh sederhana, idenya adalah untuk menyoroti bahwa jika kami menghabiskan sedikit meneliti data sumber kami, kami dapat lebih mudah bekerja dengannya dan memahami cara mengubah atau memanipulasinya dengan lebih baik ke dalam format yang kami inginkan untuk berada di dalamnya. Pendekatan atau metodologi ini harus menjadi sifat kedua bagi insinyur data.

Bagian penting berikutnya dari proses manipulasi data besar adalah untuk membedakan alat mana yang paling membantu dengan tugas yang ada. Jika kami membuat ekstraksi generik dari atau manipulasi ke data ini, kami mungkin ingin terlebih dahulu mencari alat yang kompatibel dengan JSON, atau bahkan alat yang secara khusus dibuat untuk JSON. Ada banyak alat seperti itu, termasuk banyak yang bebas dan open source.

Dua tempat awal yang baik adalah pencarian di github.com (misalnya jenis 'edit json' untuk melihat alat generik apa yang ada di luar sana, atau sesuatu yang lebih spesifik seperti 'pohon json' untuk menemukan alat khusus untuk revisi pohon json), dan mesin pencari utama apa pun. Ada lebih dari 100 juta repositori di GitHub dan Anda hampir selalu akan menemukan setidaknya satu atau dua hal yang berhubungan langsung dengan, dan berpotensi membantu, tugas atau proyek Anda di tangan.

Untuk GitHub secara khusus, Anda akan ingin membuat kata kunci singkat dan generik untuk memiliki jumlah maksimum kecocokan yang relevan. Ingatlah bahwa sementara GitHub memang memiliki lebih dari 100 juta repositori, itu sangat kecil jika dibandingkan dengan mesin pencari utama dan karenanya pencarian yang terlalu spesifik (lebih dari 2-3 kata, atau kata-kata terperinci sampai tingkat apa pun) akan sering menyebabkan miskin atau tidak Hasil.

'Json' (untuk kesan umum dari 'pasar' gratis), 'json edit' dan 'json tree' adalah contoh yang baik. 'Json Tree Builder' dan 'Json Tree Edit' adalah batas, dan lebih spesifik dari ini mungkin tidak mengembalikan hasil yang bermanfaat.

Untuk proyek ini, kami akan berpura -pura menganalisis semua alat JSON yang tersedia dan tidak menemukan tidak ada yang cocok untuk apa yang ingin kami lakukan: kami ingin mengubah semua ke _ Dan " ke =, dan lepaskan semua ruang. Kami kemudian akan memberi makan data ini ke robot AI fiktif kami yang diprogram untuk memperbaiki kesalahan di JSON. Kami ingin melanggar JSON untuk melihat apakah robot berkinerja baik.

Mari selanjutnya mengubah beberapa data ini dan memodifikasi sintaks JSON menggunakan SED.



Contoh 2: sed

Stream Editor (SED) adalah utilitas yang kuat yang dapat digunakan untuk berbagai tugas manipulasi data besar, terutama dengan menggunakan ekspresi reguler (regex). Saya mengusulkan untuk memulai dengan membaca artikel kami Advanced Bash Regex dengan contoh, atau bash regexps untuk pemula dengan contoh jika Anda baru memulai dengan SED dan ekspresi reguler. Untuk belajar lebih banyak tentang ekspresi reguler secara umum, Anda juga dapat menemukan ekspresi reguler Python dengan contoh -contoh yang menarik.

Sesuai rencana pendekatan kita, kita akan mengubah semuanya ke _ Dan " ke =, dan lepaskan semua ruang. Ini mudah dilakukan dengan sed. Untuk memulai, kami akan mengambil sampel kecil dari file data yang lebih besar untuk menguji solusi kami. Ini adalah praktik umum saat menangani data dalam jumlah besar, karena orang ingin 1) memastikan solusinya secara akurat berfungsi, 2) sebelum mengubah file yang ada. Mari Tes:

$ echo '"status": "Done' | sed 's | | _ | g; s |" | = | g' _ = status =: = Done 

Bagus, sepertinya solusi kami sebagian berfungsi. Kami telah berubah ke _ Dan " ke =, tetapi belum menghapus ruang. Mari kita lihat instruksi sed dulu. Itu S Perintah dalam perintah SED keseluruhan (dienkapsulasi dengan tanda kutip tunggal) menggantikan satu bit teks dengan yang lain, dan itu adalah ekspresi reguler yang sadar. Kami dengan demikian mengubah dua karakter yang ingin kami ubah dalam pendekatan dari ke-ke. Kami juga membuat perubahan di seluruh input menggunakan G Opsi (Global) untuk sed.

Dengan kata lain orang bisa menulis instruksi sed ini sebagai: Pengganti | Dari | ke | Global, atau s | f | t | g (dalam hal ini F akan diganti dengan T). Mari selanjutnya tes penghapusan ruang:

$ echo '"status": "Done' | sed 's | | _ | g; s |" | = | g; s | *|| g '_ = status =: = selesai 


Perintah pengganti terakhir kami (s | *|| g) termasuk ekspresi reguler yang akan mengambil angka apa pun (*) spasi dan menggantinya menjadi 'tidak ada' (sesuai dengan bidang kosong 'ke').

Kami sekarang tahu solusi kami berfungsi dengan benar, dan kami dapat menggunakan ini pada file lengkap. Ayo lanjutkan dan lakukan:

$ sed -i 's | | _ | g; s | "| = | g' dumpstatus.json 

Di sini kami menggunakan -Saya opsi untuk sed, dan lulus file (dumpstatus.json) sebagai opsi di akhir baris. Ini akan melakukan inline (-Saya) Eksekusi Perintah SED langsung pada file. Tidak diperlukan file sementara atau di antara. Kami kemudian dapat menggunakan vi Sekali lagi untuk memverifikasi bahwa solusi kami bekerja dengan benar. Data kami sekarang siap untuk robot AI fiktif kami untuk menunjukkan bahwa itu adalah keterampilan memperbaiki json!

Juga sering merupakan ide yang baik untuk dengan cepat mengambil salinan file sebelum Anda mulai mengerjakannya, atau bekerja dengan file sementara jika perlu, meskipun dalam hal ini Anda mungkin lebih suka a Sed 's |… |… |' Infile> Outfile perintah berbasis.

Mempelajari cara menggunakan Sed dan Ekspresi Reguler dengan baik memiliki banyak manfaat, dan salah satu manfaat utama adalah Anda akan dapat lebih mudah menangani data tekstual besar dengan menggunakan sed untuk mengubah / memanipulasinya.

Kesimpulan

Jika Anda belum membaca dua artikel kami sebelumnya dalam seri ini, dan temukan topiknya yang menarik, saya sangat mendorong Anda untuk melakukannya. Tautan untuk ini ada di dalam pendahuluan di atas. Salah satu alasan untuk ini adalah peringatan yang disorot dalam dua artikel pertama untuk mengelola waktu dan keterlibatan Anda dengan teknologi ketika menangani data besar, dan/atau topik TI kompleks lainnya secara umum, seperti sistem AI yang kompleks. Menegakkan pikiran secara terus-menerus cenderung menghasilkan hasil jangka panjang yang buruk, dan (terlalu) proyek kompleks cenderung ke arah ini. Meninjau artikel ini, Anda juga dapat mempelajari tentang alat lain untuk digunakan untuk manipulasi data besar.

Untuk artikel ini, kami menjelaskan bagaimana insinyur data harus mencari untuk memahami data yang mereka kerjakan dengan baik, sehingga transformasi dan mantel lebih mudah dan lebih mudah. Kami juga melihat berbagai alat yang dapat membantu kami mempelajari lebih lanjut tentang data serta mengubahnya.

Pernahkah Anda menemukan set data besar yang menarik atau mengembangkan strategi penanganan data besar yang hebat (teknis dan/atau gaya hidup/pendekatan)? Jika demikian, tinggalkan kami komentar!

Tutorial Linux Terkait:

  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 1
  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 2
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Loop bersarang dalam skrip bash
  • Menguasai loop skrip bash
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Cara Dual Boot Kali Linux dan Windows 10
  • Ubuntu 20.04 trik dan hal -hal yang mungkin tidak Anda ketahui