sage/RとPandas(Sage)でのデータフレームの相互変換
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[FrontPage]]
#contents
2014/03/16からのアクセス回数 &counter;
ここで紹介したSageワークシートは、以下のURLからダウンロー...
http://www15191ue.sakura.ne.jp:8000/home/pub/37/
また、Sageのサーバを公開しているサイト(http://www.sagenb...
アップロードし、実行したり、変更していろいろ動きを試すこ...
* RとPandas(Sage)でのデータフレームの相互変換 [#gafaa199]
これまで、RのグラフをSageで表示したり、RとSage間でのデー...
Rでもっともよく使われるデータフレームについて、まったく考...
しかし、Pandasの機能が強力であり、とても使えるツールであ...
を相互変換することに挑戦してみます。
また、Rのグラフ表示で使っていたRUtil.pyもPNGファイルベー...
の相互変換機能を追加することになりました。
新たに追加したデータフレーム変換関数は、以下の2個です。
- RDf2PandaDf: RのデータフレームをPandasのデータフレーム...
- PandaDf2RDf: PandasのデータフレームをRのデータフレーム...
** データ変換で使用するパッケージとライブラリ [#td17d16a]
データフレーム変換で使用するSageのライブラリーは、pandas...
Rは、jsonliteをパッケージを使用します。
sageへの入力:
#pre{{
# RとPandasのデータフレームを相互に変換する方法
# Sageでは、numpyとpandasをインポート
import pandas as pd
import numpy as np
# Rではjsonliteパッケージを使用
r('library(jsonlite)')
# 例としてR Graphic Cookbookのデータを使用
#r("install.packages('gcookbook')")
r('library(gcookbook)')
}}
#pre{{
[1] "jsonlite" "gcookbook" "stats" "graphics" "grDe...
[9] "base"
}}
** RからPandasへのデータフレーム変換 [#j9d59b2a]
RからPandasにデータフレームを変換するために、jsonliteのto...
以下にgcookbookのサンプルデータheightweightをRからPandas...
sageへの入力:
#pre{{
# RからJSON形式でデータを持ってくる方法
# 例として、gcookbookのサンプルデータをRから取得する
test_json = r('toJSON(heightweight, pretty=FALSE)')
heightweight = pd.read_json(sageobj(test_json)); heightwe...
}}
#pre{{
ageMonth ageYear heightIn sex weightLb
0 143 11.92 56.3 f 85.0
1 155 12.92 62.3 f 105.0
2 153 12.75 63.3 f 108.0
3 161 13.42 59.0 f 92.0
4 191 15.92 62.5 f 112.5
[5 rows x 5 columns]
}}
*** 関数にまとめる [#g2e218b3]
上記の処理をRDfPandasDfという関数にまとめると以下の様にな...
sageへの入力:
#pre{{
# これを関数にまとめる
# Rのデータフレームをpandasのデータフレームに変換する
def RDf2PandaDf(name):
json_str = r('toJSON(%s, pretty=FALSE)' % name)
return pd.read_json(sageobj(json_str))
}}
*** RDf2PandasDfの使用例 [#u9e0761e]
RDf2PandasDfを使ってgcookbookのサンプルデータheightweight...
にデータを持ってくる場合の例です。
Rのデータフレーム名をRDf2PandasDfの引数とするとPandasのデ...
sageへの入力:
#pre{{
print RDf2PandaDf('heightweight').head()
}}
#pre{{
ageMonth ageYear heightIn sex weightLb
0 143 11.92 56.3 f 85.0
1 155 12.92 62.3 f 105.0
2 153 12.75 63.3 f 108.0
3 161 13.42 59.0 f 92.0
4 191 15.92 62.5 f 112.5
[5 rows x 5 columns]
}}
** PandasからRへのデータフレームに変換 [#q686ce53]
今度は、逆にPandasのデータフレームをRのデータフレームに変...
いろいろ試したのですが、writeJSONを使った変換では上手く処...
もっともオーソドックスなカラム名とデータフレームのvalues...
使って辞書の配列に変換する方式に行き着きました。
sageへの入力:
#pre{{
# 同様に関数にまとめる
# pandasのデータフレームをRに渡す
def PandaDf2RDf(df, name):
l = [dict(zip(df.columns, x)) for x in df.values.toli...
json_str = str(l)
json_str = json_str.replace("'", '\\"')
r('%s <- fromJSON("%s")' % (name, json_str))
}}
*** PandaDf2RDfの使用例 [#hb5f4e28]
年齢と性別のデータフレームをPandasで作成し、それをPandaDf...
Rのデータフレームに変換します。
sageへの入力:
#pre{{
# PandasのデータをRに渡す
age = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
sex = ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'M', ...
df = pd.DataFrame({'age': age, 'sex': sex}); df.head()
}}
#pre{{
age sex
0 20 F
1 22 M
2 25 M
3 27 M
4 21 F
[5 rows x 2 columns]
}}
PandaDf2RDfの引数は、変換するデータフレームとRでのデータ...
以下の例では、上記で作成したdfをRのデータフレームに変換し...
それをSageのr関数を使って表示しています。きちんと変換でき...
sageへの入力:
#pre{{
PandaDf2RDf(df, "a")
r('a')
}}
#pre{{
age sex
1 20 F
2 22 M
3 25 M
4 27 M
5 21 F
6 23 M
7 37 F
8 31 M
9 61 F
10 45 M
11 41 F
12 32 M
}}
** コメント [#p46ea21d]
#vote(おもしろかった[4],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- rpy2/R interface に DataFrame の変換が書いてあり ipytho...
- $sage -ipython notebook で実行してみました。残念んsが...
- $sage -ipython notebook で動かした例を次ぎに載せました...
- ysatoさま、Sageのnotebookの中でFile..., Action, Data......
- Sage 6.3 のnotebook で実行してみました。「# RからJSON形...
- ysatoさま、Sage6.3ではsageobjの戻り値に['DATA']をつけて...
- url をクリックしたのですが次のメッセージでアクセスでき...
- ysatoさま、失礼しました。リンクを間違えました。http://w...
- 成功しました。ありがとうございました。 -- [[ysato]] &ne...
#comment_kcaptcha
終了行:
[[FrontPage]]
#contents
2014/03/16からのアクセス回数 &counter;
ここで紹介したSageワークシートは、以下のURLからダウンロー...
http://www15191ue.sakura.ne.jp:8000/home/pub/37/
また、Sageのサーバを公開しているサイト(http://www.sagenb...
アップロードし、実行したり、変更していろいろ動きを試すこ...
* RとPandas(Sage)でのデータフレームの相互変換 [#gafaa199]
これまで、RのグラフをSageで表示したり、RとSage間でのデー...
Rでもっともよく使われるデータフレームについて、まったく考...
しかし、Pandasの機能が強力であり、とても使えるツールであ...
を相互変換することに挑戦してみます。
また、Rのグラフ表示で使っていたRUtil.pyもPNGファイルベー...
の相互変換機能を追加することになりました。
新たに追加したデータフレーム変換関数は、以下の2個です。
- RDf2PandaDf: RのデータフレームをPandasのデータフレーム...
- PandaDf2RDf: PandasのデータフレームをRのデータフレーム...
** データ変換で使用するパッケージとライブラリ [#td17d16a]
データフレーム変換で使用するSageのライブラリーは、pandas...
Rは、jsonliteをパッケージを使用します。
sageへの入力:
#pre{{
# RとPandasのデータフレームを相互に変換する方法
# Sageでは、numpyとpandasをインポート
import pandas as pd
import numpy as np
# Rではjsonliteパッケージを使用
r('library(jsonlite)')
# 例としてR Graphic Cookbookのデータを使用
#r("install.packages('gcookbook')")
r('library(gcookbook)')
}}
#pre{{
[1] "jsonlite" "gcookbook" "stats" "graphics" "grDe...
[9] "base"
}}
** RからPandasへのデータフレーム変換 [#j9d59b2a]
RからPandasにデータフレームを変換するために、jsonliteのto...
以下にgcookbookのサンプルデータheightweightをRからPandas...
sageへの入力:
#pre{{
# RからJSON形式でデータを持ってくる方法
# 例として、gcookbookのサンプルデータをRから取得する
test_json = r('toJSON(heightweight, pretty=FALSE)')
heightweight = pd.read_json(sageobj(test_json)); heightwe...
}}
#pre{{
ageMonth ageYear heightIn sex weightLb
0 143 11.92 56.3 f 85.0
1 155 12.92 62.3 f 105.0
2 153 12.75 63.3 f 108.0
3 161 13.42 59.0 f 92.0
4 191 15.92 62.5 f 112.5
[5 rows x 5 columns]
}}
*** 関数にまとめる [#g2e218b3]
上記の処理をRDfPandasDfという関数にまとめると以下の様にな...
sageへの入力:
#pre{{
# これを関数にまとめる
# Rのデータフレームをpandasのデータフレームに変換する
def RDf2PandaDf(name):
json_str = r('toJSON(%s, pretty=FALSE)' % name)
return pd.read_json(sageobj(json_str))
}}
*** RDf2PandasDfの使用例 [#u9e0761e]
RDf2PandasDfを使ってgcookbookのサンプルデータheightweight...
にデータを持ってくる場合の例です。
Rのデータフレーム名をRDf2PandasDfの引数とするとPandasのデ...
sageへの入力:
#pre{{
print RDf2PandaDf('heightweight').head()
}}
#pre{{
ageMonth ageYear heightIn sex weightLb
0 143 11.92 56.3 f 85.0
1 155 12.92 62.3 f 105.0
2 153 12.75 63.3 f 108.0
3 161 13.42 59.0 f 92.0
4 191 15.92 62.5 f 112.5
[5 rows x 5 columns]
}}
** PandasからRへのデータフレームに変換 [#q686ce53]
今度は、逆にPandasのデータフレームをRのデータフレームに変...
いろいろ試したのですが、writeJSONを使った変換では上手く処...
もっともオーソドックスなカラム名とデータフレームのvalues...
使って辞書の配列に変換する方式に行き着きました。
sageへの入力:
#pre{{
# 同様に関数にまとめる
# pandasのデータフレームをRに渡す
def PandaDf2RDf(df, name):
l = [dict(zip(df.columns, x)) for x in df.values.toli...
json_str = str(l)
json_str = json_str.replace("'", '\\"')
r('%s <- fromJSON("%s")' % (name, json_str))
}}
*** PandaDf2RDfの使用例 [#hb5f4e28]
年齢と性別のデータフレームをPandasで作成し、それをPandaDf...
Rのデータフレームに変換します。
sageへの入力:
#pre{{
# PandasのデータをRに渡す
age = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
sex = ['F', 'M', 'M', 'M', 'F', 'M', 'F', 'M', 'F', 'M', ...
df = pd.DataFrame({'age': age, 'sex': sex}); df.head()
}}
#pre{{
age sex
0 20 F
1 22 M
2 25 M
3 27 M
4 21 F
[5 rows x 2 columns]
}}
PandaDf2RDfの引数は、変換するデータフレームとRでのデータ...
以下の例では、上記で作成したdfをRのデータフレームに変換し...
それをSageのr関数を使って表示しています。きちんと変換でき...
sageへの入力:
#pre{{
PandaDf2RDf(df, "a")
r('a')
}}
#pre{{
age sex
1 20 F
2 22 M
3 25 M
4 27 M
5 21 F
6 23 M
7 37 F
8 31 M
9 61 F
10 45 M
11 41 F
12 32 M
}}
** コメント [#p46ea21d]
#vote(おもしろかった[4],そうでもない[0],わかりずらい[0])
皆様のご意見、ご希望をお待ちしております。
- rpy2/R interface に DataFrame の変換が書いてあり ipytho...
- $sage -ipython notebook で実行してみました。残念んsが...
- $sage -ipython notebook で動かした例を次ぎに載せました...
- ysatoさま、Sageのnotebookの中でFile..., Action, Data......
- Sage 6.3 のnotebook で実行してみました。「# RからJSON形...
- ysatoさま、Sage6.3ではsageobjの戻り値に['DATA']をつけて...
- url をクリックしたのですが次のメッセージでアクセスでき...
- ysatoさま、失礼しました。リンクを間違えました。http://w...
- 成功しました。ありがとうございました。 -- [[ysato]] &ne...
#comment_kcaptcha
ページ名:
SmartDoc