clew

どっかの誰かの役にたてばうれしい。

python に自作データを読み込ませる。いろいろ試してみたことの記録。

PYTHON にデータを読み込ませるのは意外に分かりづらいのね。。

さて、PYTHON を使っていざ分類とか回帰分析をやってみようと思っていますが、これが意外に厄介なんですね。

何が分かりづらいかというと、データタイプ とか、日本語での表示とか。。
文字コードを”utf-8"に合わせたりして、やってみるけどこれが上手くいかない。。
原因は簡単なものだろうけど、知識が無いからよく分からんのですね。。
何やかんやとウェブをうろつきまわってたどり着いたのが”PANDAS”というもの。

http://pandas.pydata.org/

とりあえずは上のリンクがそのページ。
その前にデータについてちょこっと書いてみます。

SCIKIT LEARN では”数値タイプ”でのサンプルしかないのか?


>>> import numpy as np
>>> X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
>>> y = np.array([1, 1, 2, 2])
>>> from sklearn.svm import SVC
>>> clf = SVC()
>>> clf.fit(X, y)
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,
gamma=0.0, kernel='rbf', max_iter=-1, probability=False,
shrinking=True, tol=0.001, verbose=False)
>>> print(clf.predict(-0.8, -1))
[1]

えーと、これは SCIKIT LEARN のSVM のサンプルコードです。
このなかの”np.array"の箇所、括弧等でくくってある数字ですね、これがいわゆるデータ部分だと思います。

この例と同じようにデータを与えれば良いというのは簡単に理解できます。
しかしですね・・・自作データってのは、こういうように数値ばかりで構成はされていない。

文字ありの、数値あり、小数点もあり、記号もあるわけで、PYTHONでいうところの”データタイプってのが混在しているわけです。

私の理解不足ももちろんあるわけですが、基本的に np.array は「同じデータ型で書かなければならない」らしい。

WEKAにおいては上で述べた”データ型混在タイプ”のファイルでもすんなり読み込んでアルゴリズムを走らせることが出来ます。

いったいどうすればWEKAのようにすんなりデータを読み込んでプログラムを走らせる事ができるのか?

これが今ぶちあたっている問題なわけです。

PANDAS では何ができたのか?

と、ここで PANDAS に戻ります。
この PANDAS 、データフレームというという形式でCSVなどのファイルを読み込むことができる。他にもエクセルとかHTML?とか・・いろいろ。
過去に”R”を使った事があるので、どういう感じかは分かっていました。

「これなら多分正常に読み込めるんじゃないか?」

という期待のもとやってみたところ、みごとに漢字も表示してくれたわけです。
以下にやり方を記録しておきます。

まずは”PANDAS”のインストールから。

http://pandas.pydata.org/getpandas.html

このリンクがダウンロードページです。
自分の環境に合わせてヴァージョンを選びます。私の環境はウインドウズ32ビットPYTHON27ですから、該当箇所をクリック、ダウンロードします。

ウインドウズインストーラーファイルですから、そのまま表示にしたがって一気にインストールします。

C:\Python27\Lib\site-packages\pandas

上のアドレスは私のPCのディレクトリ構成です。
インストール時は、おそらくこんな感じで自動でインストールディレクトリが表示されてるはずです。

IPYTHON を開く。

IPYTHONを立ち上げて以下のコマンドを入力。


In [1]: import pandas as pd

In [2]: import numpy as np

次はファイルを開きます。
現在のカレントディレクトリを確認して、そこに開きたいファイルを置きます。
もしくは、ファイル置き場所へディレクトリを移動する。
で、次のコマンドを入れます。

 print open('?.csv').read() 

”?”は自分のファイル名に置き換えてください。

ちなみにCSVファイルは”utf-8"で保存してください。
これで、とりあえずは漢字もカタカナもちゃんと表示されるはずです。

データフレームとして読み込みさせる。


df = pd.read_csv('toto.csv')

df
Out[10]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 478 entries, 0 to 477
Data columns (total 5 columns):
home 478 non-null values
away 478 non-null values
st 478 non-null values
hg 477 non-null values
ag 477 non-null values
dtypes: object(5)

これでデータフレームとして認識されてるはずです。
今回はここまで。
これからは”分析予測に使えるよう”データを加工します。まだまだよく分かりませんが頑張りましょう。

追記・・ダメ元でやってみた記録。

誰か同じところでつまずいているかも知れない方のために”ダメサンプル”を残しておきます。

 np.array (df) Out[7]: array([['\xef\xbb\xbfhome', 'away', 'st', 'hg', 'ag'], ['\xe4\xbb\x99\xe5\x8f\xb0 ', '\xe7\x94\xb2\xe5\xba\x9c ', '\xe3\x83\xa6\xe3\x82\xa2\xe3\x82\xb9\xe3\x82\xbf ', '1', '1'], ['\xe6\xa8\xaa\xe6\xb5\x9cFM ', '\xe6\xb9\x98\xe5\x8d\x97 ', '\xe6\x97\xa5\xe7\x94\xa3\xe3\x82\xb9 ', '4', '2'], ..., ['\xe5\xb2\x90\xe9\x98\x9c ', '\xe7\xa6\x8f\xe5\xb2\xa1 ', '\xe9\x95\xb7\xe8\x89\xaf\xe5\xb7\x9d ', '?', '?'], ['\xe6\x84\x9b\xe5\xaa\x9b ', '\xe5\x8d\x83\xe8\x91\x89 ', '\xe3\x83\x8b\xe3\x83\xb3\xe3\x82\xb9\xe3\x82\xbf ', '?', '?'], ['\xe5\x8c\x97\xe4\xb9\x9d\xe5\xb7\x9e ', '\xe4\xba\xac\xe9\x83\xbd ', '\xe6\x9c\xac\xe5\x9f\x8e ', '?', '?']], dtype=object) 

これは、何をやろうとしたのか?

つまり、array型 に データを変換させようと思ったわけです。。
アホですね。。データタイプが違うから上手くいかないことは分かっていたのですが、無理やりするとこうなります。
このままでは使えないし、意味もまったく分かりません。