![]() |
ノート/R/Pythonと行き来するhttp://pepper.is.sci.toho-u.ac.jp/pepper/index.php?%A5%CE%A1%BC%A5%C8%2FR%2FPython%A4%C8%B9%D4%A4%AD%CD%E8%A4%B9%A4%EB |
![]() |
ノート/ノート
ノート/R
訪問者数 2674 最終更新 2014-08-04 (月) 08:30:54
元はといえば、Rで相関行列を求めたい? なのだが、入力データを整形するのに、Pythonの方が慣れていそう、という理由。
整形が必要な理由は、文字データが含まれたフィールドがあると、関数corがエラーを返すから。
>>> x <- read.csv("s.csv") >>> > cor(x) 以下にエラー cor(x) : 'x' は数値でなければなりません
今対象とするデータには、たとえば学部の欄に「理学部」と書かれたり、選択肢A/Bに対して文字「A」や「B」が書かれているので、こういうところがエラーになるのだろう。これらの部分は、corを用いるには適当なる整形を必要とする(特にA/Bのフィールドなど)。
参考にしたサイト
整形の手段は、
参考にしたサイト
いずれも、
pip install <パッケージ名> <パッケージ名>はpyperとpandas
で終り。但し、pyperは大した処理をしないのに比べて、pandasはコンパイルをするので警告メッセージが出たりした。
参考書 Pythonによるデータ分析入門
参考ページ
Pandasのread_csvを使ってみる
>>> import pandas >>> x = pandas.read_csv('s.csv')
要素の取り出し
xに対してixを使い、要素のインデックスで指定。二次元なので
print x.ix[1:, 0:2] 基本情報 Unnamed: 1 1 NaN NaN 2 10 4432341 3 10 4432131 4 10 4434780 5 10 4432094 6 10 4432072 7 10 4432352 8 10 4432083
範囲指定は、普通はコロンを使うが、複数範囲を結合することはそのままでは出来ない。 それで、rangeジェネレータとリストの'+'演算を使って、こんなことをやってみる。
print x.ix[:, range(0,2)+range(7,12)] 基本情報 Unnamed: 1 Unnamed: 7 Unnamed: 8 Unnamed: 9 Unnamed: 10 Unnamed: 11 0 検査ID 回答用紙番号 学部コード 学科コード 漢字大学名 漢字学部名 漢字学科名 1 NaN NaN NaN NaN NaN NaN NaN 2 10 4432341 51 523 東邦 理 化学 3 10 4432131 51 523 東邦 理 化学 4 10 4434780 51 523 東邦 理 化学 5 10 4432094 51 523 東邦 理 化学 6 10 4432072 51 523 東邦 理 化学 7 10 4432352 51 523 東邦 理 化学 8 10 4432083 51 523 東邦 理 化学
よしこれで、不要の欄は削ることができる。