機械学習
NLP
python3
Jupyter
Kaggle

Kaggleのデータからbag of wordsを作ってみた(1/3)

初めに

この記事はKaggleのデータ「Bag of Words Meets Bags of Popcorn」のデータでbag of wordsを作り、Random Forestで予測するまでを説明する初心者向けの記事です。
英語記事でいいものを見つけたので、英語が苦手な方向けに和訳+初心者向けに補足したものになっております。
また、投稿自体が初めてのなのでアドバイスをいただければ幸いです。

Kaggleのデータからbag of wordsを作ってみた(2/3)
Kaggleのデータからbag of wordsを作ってみた(3/3)

環境

  • Python 3.6.0 :: Anaconda custom (x86_64)
  • Mac OS X 10.12.5

データの読み込み

import pandas as pd       
train = pd.read_csv("labeledTrainData.tsv", header=0, \
                    delimiter="\t", quoting=3)

これで、"labeledTrainData.tsv"がtrainに読み込まれます。
細かい補足
- header=0, 最初の一列目は各行の名前であることを示している。
- delimiter="\t", データはタブによって別れていることを示す。
- quoting=3, Python用のエラー防止

train.shape #学習データのデータ数と次元数の確認
(25000, 3)

これでこのデータはデータ数25000,次元数3であることがわかります。
以下のようにtrainと打ち込むだけでも見ることもできます。

train

スクリーンショット 2017-07-11 15.22.49.png

データのクリーニング

まずは一番最初の人のレビューを見てみます。

print (train["review"][0])

スクリーンショット 2017-07-11 15.31.18.png

実はこのデータは汚い状態(扱いにくい)にあります。
これから、このデータを綺麗にしていきます。具体的には以下のことをします。
- タブの消去
- 文字以外(?,.,')の処理
- 大文字、小文字の処理

BeautifulSoupを使ったタブの消去

スクリーンショット 2017-07-11 15.45.33.png

ちゃんとタブが消えているのが確認できます。

reを使った文字以外の処理
ここからは、(?,.,/,#,",')のような文字以外のものを処理していきます。

import re
letters_only = re.sub("[^a-zA-Z]",           #この条件に合致するものを
                      " ",                   #これ(今回は空白)に置換する
                      example1.get_text() )  #対象とするテキストデータ
print(letters_only) 

ちょっと見えにくいですが、「.」や「"」が消えているのが確認できます。
スクリーンショット 2017-07-11 15.55.49.png

大文字、小文字の処理
最後に全ての文字を小文字にします。このままだた、Withとwithが別の文字として処理されてしまうためです。

lower_case = letters_only.lower()        #全て小文字に変換する
print(lower_case)

スクリーンショット 2017-07-11 16.02.29.png

ちゃんと小文字になっていますね。
今回はこれで終わりです。
次回から本格的にbag of wordsを作っていきます。

参考文献

Part 1: For Beginners - Bag of Words