こんにちは!
テービーテックの村松です。
「言語処理100本ノック2020]」
nlp100.github.io
に挑戦中!
途中でくじけないか見守ってください・・・。
そして、皆さんも一緒に挑戦してみましょう!
本日は第2章:UNIXコマンド 10~14です!
間違い・コード改善点などありましたら教えていただけると嬉しいです。
第2章:UNIXコマンド
「popular-names.txtは,アメリカで生まれた赤ちゃんの「名前」「性別」「人数」「年」をタブ区切り形式で格納したファイルである.以下の処理を行うプログラムを作成し,popular-names.txtを入力ファイルとして実行せよ.さらに,同様の処理をUNIXコマンドでも実行し,プログラムの実行結果を確認せよ.」
ここからはpopular-names.txtを使用して問題に取り組んでいきます。
データの読み込み
import pandas as pd # \t(水平タブ)区切り・カラム名の指定を行う(今回は該当の行がないのでNoneとして連番のカラム名) df = pd.read_csv('popular-names.txt', sep='\t', header=None) print(df.head()) ##結果 0 1 2 3 0 Mary F 7065 1880 1 Anna F 2604 1880 2 Emma F 2003 1880 3 Elizabeth F 1939 1880 4 Minnie F 1746 1880
10.行数のカウントPermalink
「行数をカウントせよ.確認にはwcコマンドを用いよ.」
# len()で行数を取得 print(len(df)) ##結果 2780
len()は色々な型のサイズや要素数を数えてくれます。
リストや辞書は要素数を数えてくれます。
今回のようなデータフレームの場合は行数を数えてくれます。
因みに、「確認にはwcコマンドを用いよ」とありますが、
Windowsの場合は、
Find /v /c "" *.txt ---------- POPULAR-NAMES.TXT: 2780
という風で返ってきます。
11.タブをスペースに置換
「タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ.」
#タブを半角スペースに変換(sep=' ')して「11ans.txt」として出力 #インデックス列とカラム名の行は含まないように指定する(index=False, header=None) df.to_csv('保存先/11ans.txt', sep=' ', index=False, header=None)
こちらが出力したテキストデータです。
各要素がちゃんと半角スペースで区切られていますね。
12.1列目をcol1.txtに,2列目をcol2.txtに保存
「各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ.」
#dfの1行目を抜き出して出力 df[0].to_csv('保存先/col1.txt', index=False, header=None) #dfの2行目を抜き出して出力 df[1].to_csv(’保存先/col2.txt', index=False, header=None)
#確認 ans1 = pd.read_csv('col1.txt', header=None) ans2 = pd.read_csv('col2.txt', header=None) print(ans1) print(ans2) ##結果 0 0 Mary 1 Anna 2 Emma 3 Elizabeth 4 Minnie ... ... 2775 Benjamin 2776 Elijah 2777 Lucas 2778 Mason 2779 Logan [2780 rows x 1 columns] 0 0 F 1 F 2 F 3 F 4 F ... .. 2775 M 2776 M 2777 M 2778 M 2779 M [2780 rows x 1 columns]
13.col1.txtとcol2.txtをマージ
「12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ.」
#12で作ったテキストファイルを読み込み df_1 = pd.read_csv('col1.txt', header=None) df_2 = pd.read_csv('/col2.txt', header=None) #df_1とdf_2を結合concat() df_ans = pd.concat([df_1, df_2], axis=1) print(df_ans.head()) ##結果 0 0 0 Mary F 1 Anna F 2 Emma F 3 Elizabeth F 4 Minnie F
#df_ansをタブ区切りで出力 df_ans.to_csv('保存先/13ans.txt', sep=('\t'), index=False, header=None)
↓こんな感じでタブ区切りで出力されています。
14.先頭からN行を出力
「自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ.」
#先頭N行を表示head(N) print(df.head(3)) ## 結果 0 1 2 3 0 Mary F 7065 1880 1 Anna F 2604 1880 2 Emma F 2003 1880
因みにNを指定しない場合はデフォルトの5で表示されます。
以上、第2章10~14でした!
ここまでご覧いただきありがとうございます。