Tietotieteilijöiden komentorivit

Monille tietotieteilijöille datan manipulointi alkaa ja päättyy Pandaan tai Tidyverseen. Teoriassa tässä ajatuksessa ei ole mitään vikaa. Loppujen lopuksi on miksi nämä välineet ovat olemassa. Nämä vaihtoehdot voivat kuitenkin usein olla ylenmääräisiä yksinkertaisissa tehtävissä.

Komentorivin hallitsemisen tulisi olla jokaisen kehittäjän luettelossa, erityisesti tietotekijöiden. Terminaalisi hyvien puolien oppiminen tekee sinusta kiistatta tuottavamman. Tämän lisäksi komentorivi toimii hienona historian opetuksena laskennassa. Esimerkiksi awk - datavetoinen skriptikieli. Awk ilmestyi ensimmäisen kerran vuonna 1977 Brian Kernighanin, K: n avulla legendaarisessa K&R -kirjassa. Nykyään, noin 50 vuotta myöhemmin, awk on edelleen ajankohtainen, kun uusia kirjoja ilmestyy edelleen joka vuosi! Siksi on turvallista olettaa, että pieneen komentorivin velhoihin sijoittaminen ei heikennä pian.

Mitä peitämme

  • iconv
  • PÄÄ
  • TR
  • WC
  • JAKAA
  • SORT & UNIQ
  • LEIKATA
  • PASTE
  • LIITTYÄ SEURAAN
  • GREP
  • SED
  • AWK

iconv

Tiedostojen koodaukset voivat olla hankalia. Nykyään kaikki tiedostot ovat UTF-8-koodattuja. Tutustu tähän erinomaiseen videoon ymmärtääksesi joitain UTF-8: n taikuutta. Siitä huolimatta joskus saamme tiedoston, joka ei ole tässä muodossa. Tämä voi johtaa hienoisiin yrityksiin vaihtaa koodausmalli. Täällä iconv on hengenpelastaja. Iconv on yksinkertainen ohjelma, joka vie tekstin yhdessä koodauksessa ja tulostaa tekstin toisessa.

# -F (alkaen) latin1: n muuntaminen (ISO-8859-1)
# -t (to) vakio UTF_8
iconv -f ISO-8859-1 -t UTF-8  output.txt

Hyödyllisiä vaihtoehtoja:

  • iconv -l luettele kaikki tunnetut koodaukset
  • iconv -c hylkää hiljaa merkit, joita ei voi muuntaa

PÄÄ

Jos olet usein Panda-käyttäjä, silloin pää tunnetaan. Usein käsittelemällä uusia tietoja ensimmäinen asia, jonka haluamme tehdä, on saada käsitys olemassaolosta. Tämä johtaa pandaiden ampumiseen, tietojen lukemiseen ja soittamiseen sitten df.head () - vähintäänkin rasittava. Pää, ilman lippuja, tulostaa tiedoston 10 ensimmäistä riviä. Pään todellinen voima on puhdistustoimintojen testaamisessa. Esimerkiksi, jos halusimme muuttaa tiedoston rajaa pilkuista putkiksi. Yksi nopea testi olisi: pää mydata.csv | sed 's /, / | / g'.

# Tulostaa 10 ensimmäistä riviä
pää tiedostonimi.csv
# Tulosta 3 ensimmäistä riviä
head -n 3 tiedostonimi.csv

Hyödyllisiä vaihtoehtoja:

  • head -n tulostaa tietyn määrän rivejä
  • head-c tulostaa tietyn määrän tavuja

TR

Tr on analoginen käännettäessä. Tämä tehokas apuohjelma on työhevonen tiedostojen puhdistamiseen. Ihanteellinen käyttötapa on tiedoston rajoittimien vaihtamiseen.

# Välilehdellä erotetun tiedoston muuttaminen pilkuiksi
kissa tab_delimited.txt | tr "\\ t" ","> comma_delimited.csv

Toinen tr: n ominaisuus on kaikki käytettävissänne olevat sisäänrakennetut [: luokka:] -muuttujat. Nämä sisältävät:

[: alnum:] kaikki kirjaimet ja numerot
[: alfa:] kaikki kirjaimet
[: tyhjä:] kaikki vaakasuuntaiset välilyönnit
[: cntrl:] kaikki ohjausmerkit
[: numero:] kaikki numerot
[: kuvaaja:] kaikki tulostettavat merkit ilman välilyöntiä
[: pienet:] kaikki pienet kirjaimet
[: tulosta:] kaikki tulostettavat merkit, välilyönnit mukaan lukien
[: punct:] kaikki välimerkit
[: välilyönti:] kaikki vaaka- tai pystysuuntaiset välilyönnit
[: iso:] kaikki isot kirjaimet
[: xdigit:] kaikki heksadesimaaliluvut

Voit ketjuttaa erilaisia ​​näitä yhdessä säveltääksesi tehokkaita ohjelmia. Seuraava on perussanalaskentaohjelma, jonka avulla voit tarkistaa READMEsi liikakäytön.

kissa README.md | tr "[: punct:] [: space:]" "\ n" | tr "[: ylempi:]" "[: alempi:]" | grep. | lajitella | uniq -c | lajitella -nr

Toinen esimerkki perusregexistä:

# Muuta kaikki isot kirjaimet pieniksi
kissan tiedostonimi.csv | tr '[A-Z]' '[a-z]'

Hyödyllisiä vaihtoehtoja:

  • tr -d poistaa merkit
  • tr-s purista merkkejä
  • \ b askelpalautin
  • \ f lomakesyöte
  • \ v pystyvälilehti
  • \ NNN merkki, jonka oktaaliarvo on NNN

WC

Sanamäärä. Sen arvo johdetaan ensisijaisesti -l-lipusta, joka antaa sinulle rivimäärä.

# Palauttaa rivien määrän CSV: ssä
wc-l gigantic_comma.csv

Tämä työkalu on kätevä vahvistaa eri komennot. Joten jos konvertoisimme erottajat tiedostossa ja suorittaisimme sitten wc-l, odotamme kokonaisrivien olevan samat. Jos ei, niin tiedämme, että jokin meni pieleen.

Hyödyllisiä vaihtoehtoja:

  • wc -c tulostaa tavulaskelmat
  • wc -m tulostaa merkkimäärä
  • wc -L tulostuspituus pisin rivi
  • wc -w tulostaa sanaa

JAKAA

Tiedostokoko voi vaihdella dramaattisesti. Ja työstä riippuen voi olla hyödyllistä jakaa tiedosto - siten jakaa. Jaon perussintaksi on:

# Jaamme CSV-tiedostomme uudeksi_tiedostonimeksi 500 rivin välein
split -l 500 tiedostonimi.csv uusi_tiedoston_
# tiedostonimi.csv
# tuloste
# uusi_tiedoston_aaa
# uusi_tiedoston_aab
# uusi_tiedoston_aac

Kaksi omituisuutta ovat nimeämiskäytäntö ja tiedostotunnisteiden puute. Jälkiliite voi olla numeerinen -d-lipun kautta. Jotta voit lisätä tiedostopäätteitä, sinun on suoritettava seuraava Etsi-komento. Se muuttaa nykyisen hakemiston kaikkien tiedostojen nimet lisäämällä .csv, joten ole varovainen.

löytö . -tyyppinen f -exec mv '{}' '{}'. csv \;
# tuloste
# tiedostonimi.csv.csv
# uusi_tiedoston_aaa.csv
# uusi_tiedostonimi_aab.csv
# uusi_tiedoston_aac.csv

Hyödyllisiä vaihtoehtoja:

  • split -b jaettu tietyn tavun koon mukaan
  • split - tuottaa N pituiset jälkiliitteet
  • split -x split käyttämällä hex-päätteitä

SORT & UNIQ

Edelliset käskyt ovat ilmeiset: he tekevät mitä sanovat tekevänsä. Nämä kaksi tarjoavat eniten lyöntiä samanaikaisesti (ts. Ainutlaatuiset sanamäärät). Tämä johtuu uniqista, joka toimii vain kahtena viereisenä rivinä. Siksi syy lajitella ennen lähdön läpivientiä. Yksi mielenkiintoinen huomautus on, että sort -u saavuttaa samat tulokset kuin tyypillinen lajittelutiedosto.txt | uniq-malli.

Lajittelulla on tietotieteilijöille erittäin hyödyllinen kyky: kyky lajitella koko CSV tietyn sarakkeen perusteella.

# CSV-tiedoston lajittelu toisen sarakkeen perusteella aakkosjärjestyksessä
lajitella -t, -k2 tiedostonimi.csv
# Numeerisesti
lajitella -t, -k2n tiedostonimi.csv
# Käänteinen järjestys
lajitella -t, -k2nr tiedostonimi.csv

Tt-vaihtoehto on tässä pilkun määrittäminen erottimeksi. Useimmiten oletetaan, että välilyöntejä tai välilehtiä ei ole. Lisäksi -k-lippu on tarkoitettu avaimen määrittämiseen.

Hyödyllisiä vaihtoehtoja:

  • lajitella -f ohittaa tapaus
  • lajitella -r käänteinen lajittelujärjestys
  • sort-R sekoitusjärjestys
  • uniq -c laskee tapahtumien lukumäärän
  • uniq -d tulostaa vain kaksoisrivit

LEIKATA

Leikkaus on sarakkeiden poistaminen. Havainnollistaaksemme, jos haluamme vain ensimmäisen ja kolmannen sarakkeen.

cut -d, -f 1,3 tiedostonimi.csv

Voit valita jokaisen muun sarakkeen kuin ensimmäisen.

cut -d, -f 2 - tiedostonimi.csv

Yhdessä muiden komentojen kanssa leikkaus toimii suodattimena.

# Tulosta sarakkeen 1 ja 3 ensimmäiset 10 riviä, joissa "jotkut_merkkiarvo" on läsnä
pää tiedostonimi.csv | grep "some_string_value" | leikattu -d, -f 1,3

Selvitetään toisessa sarakkeessa olevien ainutlaatuisten arvojen lukumäärä.

kissan tiedostonimi.csv | leikattu -d, -f 2 | lajitella | uniq | wc-l
# Luku ainutlaatuisten arvojen esiintymisistä, rajoittuneena 10 ensimmäiseen tulokseen
kissan tiedostonimi.csv | leikattu -d, -f 2 | lajitella | uniq -c | pää

PASTE

Liitä on niche-komento, jolla on mielenkiintoinen toiminto. Jos sinulla on kaksi tiedostoa, jotka tarvitset yhdistää, ja ne on jo lajiteltu, liitä, niin olet suojannut.

# nimet.txt
Aatami
Johannes
Zach
# job.txt
lakimies
YouTuber
kehittäjä
# Liity kaksi CSV: hen
liitä -d ',' names.txt job.txt> person_data.txt
# Tulos
Adam asianajaja
John, YouTuber
Zach, kehittäjä

Katso lisää SQL-esque-varianttia alla.

LIITTYÄ SEURAAN

Liity on yksinkertainen, lähes tangentiaalinen, SQL. Suurimmat erot ovat, että yhdistäminen palauttaa kaikki sarakkeet ja ottelut voivat olla vain yhdessä kentässä. Oletuksena liittyminen yrittää käyttää ensimmäistä saraketta vastaavuusavaimena. Eri tulokselle tarvitaan seuraava syntaksi:

# Liity ensimmäiseen tiedostoon (-1) toisen sarakkeen avulla
# ja toinen tiedosto (-2) ensimmäisenä
Liity -t, -1 2 -2 1 ensimmäinen_tiedosto.txt toinen_tiedosto.txt

Tavallinen liitos on sisäinen liitos. Ulkoinen liitos on kuitenkin myös elinkelpoinen -a-lipun kautta. Toinen huomionarvoinen kierto on -e-lippu, jota voidaan käyttää korvaamaan arvo, jos puuttuva kenttä löytyy.

# Korvaa ulompi liitos ja korvaa aihiot NULL sarakkeissa 1 ja 2
# -o mitkä kentät korvataan - 0 on avain, 1.1 on ensimmäinen sarake jne ...
liity -t, -1 2 -a 1 -a2 -e 'NULL' -o '0,1.1,2,2' ensimmäinen_tiedosto.txt toinen_tiedosto.txt

Ei käyttäjäystävällisin komento, mutta epätoivoiset ajat, epätoivoiset toimenpiteet.

Hyödyllisiä vaihtoehtoja:

  • join - tulosta parittomat rivit
  • join -e korvaa puuttuvat syöttökentät
  • liity -j, joka vastaa -1 KENTTÄ -2 KENTTÄ

GREP

Säännöllisen lausekkeen ja tulosteen tai grep-haun maailmanlaajuinen haku; todennäköisesti tunnetuin komento ja syystä. Grepillä on paljon voimaa, etenkin kun etsit tiesi isojen tietokantojen ympäriltä. Tietotekniikan alueella se toimii muiden komentojen tarkennusmekanismina. Vaikka sen vakiokäyttö on myös arvokasta.

# Etsi ja lue kaikki hakemiston tiedostot rekursiivisesti sisältäen 'sana'
grep -lr 'sana'.
# Listaa tiedostoja, jotka sisältävät sanan
grep -lr 'sana'. | wc-l

Laske sanaa / kuviota sisältävien rivien kokonaismäärä.

grep -c 'some_value' tiedostonimi.csv
# Sama asia, mutta kaikissa nykyisen hakemiston tiedostoissa tiedostonimen mukaan
grep -c 'some_value' *

Grep useille arvoille käyttämällä tai operaattoria - \ |.

grep "ensimmäinen_arvo \ | toinen_arvo" tiedostonimi.csv

Hyödyllisiä vaihtoehtoja

  • alias grep = "grep --color = auto" tekevät grepistä värikkäitä
  • grep -E käytä laajennettuja regeksejä
  • grep -w vastaa vain kokonaisia ​​sanoja
  • grep -l tulostaa tiedostojen nimet, joilla on vastaavuus
  • grep -v käänteinen haku

Isot aseet

Sed ja Awk ovat kaksi tehokkainta komentoa tässä artikkelissa. Lyhyyden vuoksi en aio mennä tyhjentäviin yksityiskohtiin kummastakaan. Sen sijaan käsittelen erilaisia ​​komentoja, jotka todistavat niiden vaikuttavan voiman. Jos haluat tietää enemmän, on olemassa kirja juuri sille.

SED

Sen ytimessä on stream-editori, joka toimii rivi riviltä. Se on erinomainen vaihdoksissa, mutta sitä voidaan hyödyntää myös kaikessa refaktoroinnissa.

Perustoiminnallisin sed-komento koostuu s / old / new / g. Tämä tarkoittaa, että etsitään vanhaa arvoa, korvataan kaikki esiintymiset rivillä uusilla. Ilman / g: n komento lopetetaan ensimmäisen kerran linjalla.

Saadaksesi nopeasti maun voimasta, voit sukeltaa esimerkkiin. Tässä skenaariossa sinulle on annettu seuraava tiedosto:

tasapaino, nimi
$ 1.000 John
$ 2.000 jack

Ensimmäinen asia, jonka haluamme tehdä, on poistaa dollarimerkit. -I-lippu osoittaa paikallaan. '' Tarkoittaa, että tiedostopääte on nolla, jolloin ylimääräinen alkuperäinen tiedosto korvataan. Ihannetapauksessa kokeilet kutakin näistä erikseen ja tulostaa sitten uuteen tiedostoon.

sed -i '' 's / \ $ // g' data.txt
# tasapaino, nimi
# 1000, john
# 2000, jack

Seuraavaksi pilkut saldo-sarakkeen arvoissa.

sed -i '' 's / \ ([0-9] \), \ ([0-9] \) / \ 1 \ 2 / g' data.txt
# tasapaino, nimi
# 1000, john
# 2000, jack

Viimeiseksi Jack ylös ja päätti lopettaa yhden päivän. Joten, au revoir, mon ami.

sed -i '' '/ jack / d' data.txt
# tasapaino, nimi
# 1000, john

Kuten näette, sed-pakkauksissa on melko lyönti, mutta hauskaa ei lopu siihen.

AWK

Paras viimeksi. Awk on paljon enemmän kuin yksinkertainen komento: se on täysi kieli. Kaikista tämän artikkelin aiheista awk on ylivoimaisesti tyylikkäin. Jos löydät vaikuttuneesi, siellä on paljon suuria resursseja - katso täältä, täältä ja täältä.

ÄK: n yleisiä käyttötapoja ovat:

  • Tekstin käsittely
  • Alustettu tekstiraportit
  • Aritmeettisten toimintojen suorittaminen
  • Suoritetaan merkkijono-operaatioita

Awk voi rinnastaa grep-muodon syntyvässä muodossaan.

awk '/ sana /' tiedostonimi.csv

Tai hieman enemmän taikuutta yhdistämällä grepi ja leikkaus. Täällä awk tulostaa kolmannen ja neljännen sarakkeen, välilehti erotettuna, kaikille riveille sanallamme. -F, vain muuttaa rajamerkin pilkuksi.

awk -F, '/ word / {print $ 3 "\ t" $ 4}' tiedostonimi.csv

Awk sisältää paljon hienoja muuttujia. Esimerkiksi NF - kenttien lukumäärä - ja NR - tietueiden lukumäärä. Viisikymmentäkolmannen tietueen hakeminen tiedostoon:

awk -F, 'NR == 53' tiedostonimi.csv

Lisätty ryppy on kyky suodattaa yhden tai useamman arvon perusteella. Seuraava ensimmäinen esimerkki tulostaa rivinumeron ja sarakkeet tietueille, joissa ensimmäinen sarake vastaa merkkijonoa.

awk -F, '$ 1 == "merkkijono" {print NR, $ 0}' tiedostonimi.csv
# Suodata numeerisen arvon perusteella toisessa sarakkeessa
awk -F, '$ 2 == 1000 {print NR, $ 0}' tiedostonimi.csv

Useita numeerisia lausekkeita:

# Tulosta rivinumero ja sarakkeet, joissa sarake on kolme suurempi
# kuin vuosi 2005 ja sarake viisi alle tuhat
awk -F, '$ 3> = 2005 && $ 5 <= 1000 {tulosta NR, $ 0}' tiedostonimi.csv

Laske yhteen kolmas sarake:

awk -F, '{x + = $ 3} END {print x}' tiedostonimi.csv

Kolmannen sarakkeen summa arvoille, joissa ensimmäinen sarake on ”jotain”.

awk -F, '$ 1 == "jotain" {x + = $ 3} LOPPU {tulosta x}' tiedostonimi.csv

Hanki tiedoston mitat:

awk -F, 'END {print NF, NR}' tiedostonimi.csv
# Mukavampi versio
awk -F, 'ALKU {tulosta "PYRNÄT", "RIVAT"}; END {print NF, NR} 'tiedostonimi.csv

Tulosta rivit kahdesti:

awk -F, '++ seen [$ 0] == 2' tiedostonimi.csv

Poista päällekkäiset rivit:

# Peräkkäiset rivit
awk 'a! ~ $ 0; {A = $ 0}]
# Ei-peräkkäiset rivit
herä! [$ 0] ++ 'tiedostonimi.csv
# Tehokkaampi
awk '! (0 dollaria a) {a [$ 0]; tulosta}

Korvaa useita arvoja sisäänrakennetulla toiminnolla gsub ().

awk '{gsub (/ scarlet | ruby ​​| puce /, "punainen"); Tulosta}'

Tämä awk-komento yhdistää useita CSV-tiedostoja, jättämättä otsikon pois ja liittämällä sen sitten loppuun.

awk 'FNR == 1 && NR! = 1 {seuraava;} {tulosta}' * .csv> final_file.csv

Pitäisikö pienentää massiivista tiedostoa? Hei, awk pystyy käsittelemään sitä sed: n avulla. Tarkemmin sanottuna tämä komento jakaa yhden suuren tiedoston useiksi pienemmiksi rivimäärän perusteella. Tämä yksi vuoraus lisää myös laajennuksen.

sed '1d; $ d' tiedostonimi.csv | awk 'NR% NUMBER_OF_LINES == 1 {x = "tiedostonimi -" ++ i ".csv";} {tulosta> x}'
# Esimerkki: big_data.csv: n jakaminen dataksi (n) .csv 100 000 rivin välein
sed '1d; $ d' big_data.csv | awk 'NR% 100000 == 1 {x = "data _" ++ i ".csv";} {tulosta> x}'

SULKEMINEN

Komentorivillä on loputon teho. Tässä artikkelissa käsitellyt komennot riittävät nostamaan sinut nollasta sankariksi nopeasti. Kattujen lisäksi on monia apuohjelmia, jotka on otettava huomioon päivittäisessä dataoperaatiossa. Csvkit, xsv ja q ovat kolme huomautusta. Jos haluat vielä syvemmälle sukeltaa komentorivitietojen tieteeseen, älä katso enää tätä kirjaa. Se on myös saatavana verkossa ilmaiseksi!

Lisää blogiini!

LINKIT

  • Sed yksi vuori
  • Awk Yhden vuoteen
  • Työskentely komentorivillä CSV-tiedostojen kanssa
  • Tiedostotunnisteiden lisääminen
  • Parhaat AWK-temppuni
  • Bioinformatiikan yksivuoraus
  • UNIX-koulu
  • Sed - Johdanto ja opas