Manipulasi data besar untuk keseronokan dan keuntungan bahagian 3
- 3718
- 261
- Clarence Tromp
Terdapat dua artikel sebelumnya dalam siri ini, yang mungkin anda ingin baca terlebih dahulu jika anda belum membacanya; Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1 dan manipulasi data besar untuk keseronokan dan keuntungan bahagian 2.
Dalam siri ini, kami membincangkan pelbagai idea dan pendekatan praktikal untuk mengendalikan data besar, atau lebih khusus pengendalian, mengubah, merendahkan, merungut, parsing, bertengkar, mengubah dan memanipulasi data di baris arahan Linux.
Artikel ketiga ini dalam siri ini akan terus meneroka alat bash yang dapat membantu kami ketika memproses dan memanipulasi data besar (atau dalam beberapa kes). Seperti yang disebutkan dalam artikel sebelumnya, transformasi data secara umum adalah topik separa tanpa endless kerana terdapat beratus-ratus alat untuk setiap format teks tertentu. Ingatlah bahawa kadang-kadang menggunakan alat bash mungkin bukan penyelesaian terbaik, sebagai alat luar boleh melakukan pekerjaan yang lebih baik. Yang mengatakan, siri ini khusus untuk semua (banyak) masa lain apabila tiada alat tersedia untuk mendapatkan data anda dalam format pilihan anda.
Akhirnya, jika anda ingin mengetahui lebih lanjut tentang mengapa manipulasi data besar boleh menjadi keseronokan dan menguntungkan ... sila baca bahagian 1 terlebih dahulu.
Dalam tutorial ini anda akan belajar:
- Teknik Big Big Data / Parsing / Pengendalian / Manipulasi / Transformasi
- Apa alat bash yang tersedia untuk membantu anda, khususnya untuk aplikasi berasaskan teks
- Pelbagai 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 |
Contoh 1: WC, Ketua dan VI - Meneroka Data
Untuk contoh ini, kami akan bekerjasama dengan fail status JSON, yang dibuat oleh Wikipedia sebagai sebahagian daripada sampah data mereka (ref mana -mana folder dalam https: // dumps.Wikimedia.org/enwiki/)
wget https: // dumps.Wikimedia.org/enwiki/20201020/dumpstatus.JSON $ HEAD -C100 DUMPSTATUS.json "versi": "0.8 "," pekerjaan ": " pagerestrictionStable ": " status ":" selesai "," fail ": " enwiki-20201020-p $ wc -l dumpstatus.JSON 1
The wget
perintah mengambil fail untuk kami (arahan ini juga berguna jika anda perlu memuat turun satu set fail data yang besar dan ingin mengautomasikannya pada baris arahan anda), dan kepala -c100
menunjukkan 100 aksara pertama fail. Ini adalah cara terbaik untuk memeriksa kepala fail dengan cepat.
Sekiranya fail itu entah bagaimana data binari, menggunakan kepala -c100
Perintah tidak akan membuat terlalu banyak kekacauan di terminal anda, dan jika garis -garisnya sangat panjang (seperti yang berlaku untuk fail ini), perintah ini memastikan kita tidak akan melihat banyak halaman teks menatal yang lewat.
The WC -L
Perintah menunjukkan bilangan baris.
Sebelum mula bekerja dengan sebarang data besar, selalu ada idea yang baik untuk menyemak kandungan fail yang anda bekerjasama. Saya secara peribadi menggunakan dan lebih suka vi
, Tetapi anda boleh mana -mana editor teks yang merasa selesa untuk anda. Salah satu faedah dari vi
adakah ia sangat baik pada pembukaan dan penyuntingan fail yang sangat besar. Buka fail, dan lihatlah: Berapa lama garis, jenis data ini dan lain -lain.?
Sangat menarik untuk diperhatikan di sini vi
, Walaupun ia mempunyai lengkung pembelajaran yang besar, juga sangat kuat ketika datang ke operasi pukal. Contohnya, ia boleh lebih cepat untuk menghasilkan satu juta fail baris dengan hanya melaksanakan beberapa arahan vi di dalam vi kemudian menulis skrip kecil untuk melakukan perkara yang sama. Salah satu aspek yang hebat tentang lengkung pembelajaran VI adalah bahawa ia cenderung tumbuh dengan anda, apabila dan ketika anda memerlukan kaedah atau prosedur tambahan.
Juga, hanya menggunakan dua arahan (kepala -c100
dan WC -L
), mencatat nama fail, dan memeriksa dengan cepat dengan vi
Kami telah mempelajari pelbagai perkara:
- Ini adalah fail JSON (.pelanjutan json)
- Fail ini mempunyai garis yang sangat panjang (vi, tekan kekunci akhir dan kaunter nota di sebelah kanan bawah, hadir pada banyak pemasangan VI): 110365 aksara
- Fail ini mempunyai satu baris (WC -L)
- Failnya sangat berstruktur (kepala -c100)
Walaupun ini adalah contoh yang mudah, idea itu adalah untuk menyerlahkan bahawa jika kita menghabiskan sedikit meneliti data sumber kita, kita dapat lebih mudah bekerja dengannya dan memahami cara mengubah atau memanipulasinya dengan lebih baik ke dalam format yang kita inginkan. Pendekatan atau metodologi ini harus menjadi sifat kedua bagi jurutera data.
Bahagian penting seterusnya proses manipulasi data besar adalah untuk membezakan alat mana yang paling akan membantu tugas di tangan. Sekiranya kami membuat pengekstrakan generik dari atau manipulasi ke data ini, kami mungkin ingin mencari alat yang serasi dengan JSON, atau alat yang khusus dibuat untuk JSON. Terdapat banyak alat seperti itu, termasuk banyak sumber percuma dan terbuka.
Dua tempat permulaan yang baik adalah carian di GitHub.com (contohnya jenis 'JSON EDIT' untuk melihat alat generik di luar sana, atau sesuatu yang lebih spesifik seperti 'Json Tree' untuk mencari alat khusus untuk semakan pokok JSON), dan mana -mana enjin carian utama. Terdapat lebih banyak 100 juta repositori di GitHub dan anda hampir selalu akan menemui sekurang -kurangnya satu atau dua perkara yang secara langsung berkaitan dengan, dan berpotensi membantu, tugas atau projek anda di tangan.
Untuk GitHub secara khusus, anda akan mahu menyimpan kata kunci pendek dan generik untuk mempunyai bilangan maksimum perlawanan yang relevan. Ingatlah bahawa sementara GitHub memang lebih 100 juta repositori, ia sangat kecil jika dibandingkan dengan enjin carian utama dan dengan itu terlalu spesifik carian (lebih dari 2-3 perkataan, atau kata-kata terperinci ke mana-mana) akan sering menyebabkan miskin atau tidak hasilnya.
'JSON' (untuk kesan generik 'Marketplace' percuma), 'Json Edit' dan 'Json Tree' adalah semua contoh yang baik. 'Json Tree Builder' dan 'Json Tree Edit' adalah sempadan, dan lebih spesifik maka ini mungkin tidak dapat kembali hasil yang berguna.
Untuk projek ini, kami akan berpura -pura menganalisis semua alat JSON yang ada dan tidak dapat dijumpai untuk apa yang kami mahu lakukan: kami mahu mengubah semua ke
_
dan "
ke =
, dan keluarkan semua ruang. Kami kemudian akan memberi makan data ini ke robot AI fiktif kami yang diprogramkan untuk menyelesaikan kesilapan di JSON. Kami mahu memecahkan json untuk melihat apakah robot itu berfungsi dengan baik.
Mari seterusnya mengubah beberapa data ini dan mengubah suai sintaks JSON menggunakan sed.
Contoh 2: sed
Editor Stream (SED) adalah utiliti yang kuat yang boleh digunakan untuk pelbagai tugas manipulasi data besar, terutama dengan menggunakan ungkapan biasa (regex). Saya mencadangkan untuk memulakan dengan membaca artikel kami Advanced Bash Regex dengan contoh, atau Bash Regexps untuk pemula dengan contoh jika anda baru bermula dengan SED dan ungkapan biasa. Untuk mempelajari sedikit lebih lanjut mengenai ungkapan biasa secara umum, anda juga boleh mencari ungkapan biasa python dengan contoh -contoh yang menarik.
Mengikut rancangan pendekatan kami, kami akan mengubah semua ke
_
dan "
ke =
, dan keluarkan semua ruang. Ini mudah dilakukan dengan sed. Untuk memulakan, kami akan mengambil sampel kecil dari fail data yang lebih besar untuk menguji penyelesaian kami. Ini adalah amalan biasa ketika mengendalikan sejumlah besar data, seperti yang ingin 1) pastikan penyelesaiannya berfungsi dengan tepat, 2) sebelum menukar fail di tangan. Mari uji:
$ echo '"status": "selesai' | sed 's | | _ | g; s |" | = | g' _ = status =: = selesai
Hebat, ia kelihatan seperti penyelesaian kami sebahagiannya berfungsi. Kami telah berubah ke
_
dan "
ke =
, tetapi belum mengeluarkan ruang. Mari lihat arahan sed terlebih dahulu. The s
perintah dalam perintah SED keseluruhan (dikemas dengan petikan tunggal) menggantikan sedikit teks dengan yang lain, dan ia adalah ungkapan biasa yang sedar. Oleh itu, kami mengubah kedua-dua watak yang kami mahu berubah dalam pendekatan berasaskan dari. Kami juga membuat perubahan di seluruh input menggunakan g
(global) pilihan untuk sed.
Dengan kata lain seseorang boleh menulis arahan sed ini sebagai: pengganti | dari | ke | global
, atau s | f | t | g
(dalam hal ini f
akan digantikan oleh t
). Mari kita menguji penyingkiran ruang:
$ echo '"status": "selesai' | sed 's | | _ | g; s |" | = | g; s | *|| g '_ = status =: = selesai
Perintah pengganti akhir kami (S | *|| g
) merangkumi ungkapan biasa yang akan mengambil nombor (*
) ruang dan menggantinya ke 'tidak ada' (sepadan dengan medan kosong 'ke').
Kami sekarang tahu penyelesaian kami berfungsi dengan betul, dan kami boleh menggunakannya pada fail penuh. Mari teruskan dan buat begitu:
$ sed -I 's | | _ | g; s | "| = | g' dumpstatus.json
Di sini kita menggunakan -i
pilihan untuk sed, dan lulus fail (Dumpstatus.json
) sebagai pilihan pada akhir baris. Ini akan melakukan sebaris (-i
) pelaksanaan perintah sed secara langsung pada fail. Tidak ada fail sementara atau di antara fail. Kita kemudian boleh menggunakan vi
sekali lagi untuk mengesahkan bahawa penyelesaian kami berfungsi dengan betul. Data kami kini bersedia untuk robot AI fiktif kami untuk menunjukkan kemahiran Mending Json itu!
Ia juga sering merupakan idea yang baik untuk cepat merebut salinan fail sebelum anda mula mengusahakannya, atau bekerja dengan fail sementara jika perlu, walaupun dalam hal ini anda mungkin lebih suka a sed's | ... | ... | '' Infile> Outfile
arahan berasaskan.
Belajar Cara Menggunakan Sed Dan Ekspresi Biasa Baik mempunyai banyak faedah, dan salah satu manfaat utama ialah anda akan dapat lebih mudah mengendalikan data teks besar dengan menggunakan sed
untuk mengubah / memanipulasinya.
Kesimpulan
Sekiranya anda belum membaca dua artikel sebelumnya dalam siri ini, dan dapatkan topik yang menarik, saya sangat menggalakkan anda untuk melakukannya. Pautan untuk ini ada dalam pengenalan di atas. Salah satu sebab untuk ini adalah amaran yang diketengahkan dalam dua artikel pertama untuk menguruskan masa dan pertunangan anda dengan teknologi ketika mengendalikan data besar, dan/atau topik IT kompleks lain secara umum, seperti sistem AI yang kompleks. Menegaskan minda secara berterusan cenderung menghasilkan hasil jangka panjang yang lemah, dan (terlalu banyak) projek kompleks cenderung ke arah ini. Mengkaji artikel ini, anda juga boleh belajar tentang alat lain untuk digunakan untuk manipulasi data besar.
Untuk artikel ini, kami menjelaskan bagaimana jurutera data harus berusaha memahami data yang mereka kerjakan dengan baik, supaya transformasi dan keruntuhan lebih mudah dan lebih mudah. Kami juga melihat pelbagai alat yang dapat membantu kami mempelajari lebih lanjut mengenai data serta mengubahnya.
Pernahkah anda menemui set data besar yang menarik atau mengembangkan strategi pengendalian data besar yang besar (teknikal dan/atau gaya hidup/pendekatan)? Jika ya, tinggalkan komen kami!
Tutorial Linux Berkaitan:
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
- Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2
- Perkara yang hendak dipasang di Ubuntu 20.04
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Gelung bersarang dalam skrip bash
- Menguasai Gelung Skrip Bash
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- Cara Dual Boot Kali Linux dan Windows 10
- Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu