テービーテックのデータサイエンス

未経験リケジョがゼロからデータサイエンティストを目指す姿を記す奮闘記です。2019/12/05文系出身者が共同で更新を開始

TAG index

▲心くじけず言語処理100本ノック==10~14==

f:id:TBT_matsu:20200515145048p:plain
こんにちは!
テービーテックの村松です。

「言語処理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)

こちらが出力したテキストデータです。
各要素がちゃんと半角スペースで区切られていますね。
f:id:TBT_matsu:20200519130633p:plain

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)

↓こんな感じでタブ区切りで出力されています。
f:id:TBT_matsu:20200519131359p:plain

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でした!
ここまでご覧いただきありがとうございます。