RとPythonを両方使っていると、「あれ?RのこれってPythonでどうやるんだっけ?」とよくなる (逆もまた然り) ので、自分用にメモ。
ひとまず、データ加工についてまとめてみます。
気付いたら適宜追記します。
略記
x: 任意の1次元配列 (Pythonはlistとarrayがある点に注意→コメント欄で補足)
n: 任意の整数値
str: 任意の文字列
df: 任意のデータフレーム
func: 任意の関数
(上記以外にfilenameとかvarとか唐突にでてきますが、なんとなく察して下さい)
前提
Rは{tidyverse}を使用 (library(tidyverse)
)
Pythonはnumpy, pandasを使用 (import numpy as np; import pandas as pd
)
バージョンは、執筆時点の最新版を使用
データの処理
やること | R | Python | コメント |
---|---|---|---|
論理値を表現する |
TRUE , FALSE
|
True , False
|
大文字小文字に注意 |
データ型を確認する | `str(x) | type(x) |
|
引数の有無を確認する | missing(var) |
var == None |
関数内で使用 |
配列の処理
やること | R | Python | コメント |
---|---|---|---|
2値化する | ifelse(x>=0.5, 1, 0) |
np.where(x >= 0.5, 1, 0) |
左記は0-1の範囲の配列を四捨五入する処理 |
配列の各要素を処理 | sapply(x, func) |
[func(r) for r in x] |
|
任意の長さの配列を作る (値は0) | numeric(length = n) |
[0 for _ in range(n)] または np.zeros(shape = n)
|
|
共通の要素を取り出す | x1[x1 %in% x2] |
set(x1) & set(x2) |
|
数値を0詰めしてn桁に揃える | formatC(x, width = n, flag = "0") |
str(x).zfill(n) |
xは数値型. 出力は文字列型 |
データフレームの処理
やること | R | Python | コメント |
---|---|---|---|
csvを読み込んでデータフレームにする | read_csv(filename, ...) |
pd.read_csv(filename, ...) |
|
配列をデータフレームにする | as.data.frame(x) |
pd.DataFrame(x, columns = ["colname"]) |
|
データの次元数を見る | dim(df) |
df.shape |
|
欠損のある行を除く | na.omit(df) |
df.dropna() |
|
論理値の配列で抽出して、行番号を振り直す | filter(df, boolean) |
df[boolean].reset_index(drop = True) |
|
行番号で抽出する | slice(df, x) |
df.ix[x] |
|
横向きに結合する | cbind(df1, df2) |
pd.concat([df1, df2], axis = 1) |
concatをaxis=0にするとRのrbindになる |
列ごとに集計関数を適用する | apply(df, 2, func) |
df.apply(func) |
|
csvに書き出す | write.csv(df, "filename.csv", ...) |
df.to_csv("filename.csv", ...) |