Pythonの分析系コードを理解している人向けに、Rコードの対応まとめました。 ※随時更新中
(本記事では、Rのbaseパッケージのみ使用)
「pythonで書くあれって、Rでどう書くんだっけ?」っていう流れって多いんですよね。
ドキュメント内の命名規則
特に断りがなければ、モジュール名のエイリアスは下記の通り。
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
下記に登場する変数名称のイメージ。
df = pd.DataFrame()
df = data.frame()
PythonコードのRでの書き方
データフレームの生成
pd.DataFrame()
データフレームの作成
data.frame() #空のデータフレームを生成
data.frame(col1=c(x1, x2, x3), col2=c(y1, y2, y3)) #カラム
pd.read_csv()
CSVファイル(カンマ区切りデータ)読み込み
read.csv(ファイル名)
pd.read_table()
TSV、CSVファイル(タブ区切りデータ)読み込み
read.table(ファイル名)
df.index = [行名1, 行名2, ...]
行名の設定
rownames(df) <- c(行名1, 行名2, ...)
print(rownames(df)) #代入せず、呼び出せばベクトルとして取得できる
df.columns = [列名1, 列名2, ...]
列名の設定
colnames(df) <- c(列名1, 列名2, ...)
print(colnames(df)) #代入せず、呼び出せばベクトルとして取得できる
データフレームの内容確認
df.shape
行数、列数の取得
dim(df)
len(df)
行数の取得
ncol(df)
len(df.columns)
列数の取得
nrow(df)
df.head()
先頭行の出力
head(df) #引数で表示行数の指定も可
df.tail()
末尾行の出力
tail(df) #引数で表示行数の指定も可
df.info()
各カラムの数や型情報を表示する
str(df)
df.describe()
基本統計量の出力する
summary(df) #ただし、stdは出力されない
# stdは、例えば下のように取得する
sds = NULL
for(col in colnames(df)){
sds <- c(sds, sd(df[, col]))
}
names(sds) <- colnames(df)
df.isna()
欠損値(NA)を確認する
is.na(df)
df.isna().sum()
カラムごとの欠損値(NA)の個数を確認する
colSums(is.na(df))
# summary(df)でもNAの個数も出力されるので確認可能
df[df.isna().any(axis=1)]
欠損値(NA)が1つでもある行を抽出する
df[!complete.cases(df), ]
df.col.unique()
ある列に登場するユニークな(重複のない)値を返す
unique(df$col)
df.col.value_counts()
ある列に登場する値の登場回数を返す
table(df$col)
データ抽出
df.iloc[x1:x2, y1:y2]
行番号および列番号を用いて、範囲指定する
df[x1:x2, y1:y2] #Rはインデックスの開始が1である点に留意
df.iloc[[x1, x2, ...], [y1, y2, ...]]
行番号および列番号を用いて、リスト指定する
df[c(x1, x2, ...), c(y1, y2, ...)]
df.loc[行名1:行名2, 列名1:列名2]
行名および列名を用いて、範囲指定する
# 明確には存在しないようなので、やるならば下記
# 指定の行名および列名の位置(番号)を取得し、それを範囲指定に用いる
x1 <- which(rownames(df) == 行名1)
x2 <- which(rownames(df) == 行名2)
y1 <- which(colnames(df) == 列名1)
y2 <- which(colnames(df) == 列名2)
df[x1:x2, y1:y2]
df.loc[[行名1, 行名2, ...], [列名1, 列名2, ...]]
行名および列名を用いて、リスト指定する
df[c(行名1, 行名2, ...), c(列名1, 列名2, ...)]
df[df.col == x]
条件に合致する行を抽出する
df[df$col == x, ]
# または
subset(df, col == x)
データ加工
df[new_col] = x
データフレームに新しいカラムを追加する
df[, new_col] <- x
df.drop()
行や列を削除する
# 削除したい行や列を選択し、NULLを代入することで削除ができる
df[c(x1, x2), ] <- NULL #行を削除
df[, c(y1, y2)] <- NULL #列を削除
# インデックスを負の値にすると、その番号を除外した行列を返す性質を利用して、次のようにも書ける
df <- df[c(-1, -2), ] #行を削除
df <- df[, c(-1, -2)] #列を削除
df.fillna(x)
欠損値(NA)を埋める
df[is.na(df)] <- x
df.dropna()
欠損値(NA)が含まれる行を削除する
na.omit(df)
df.apply(func)
各要素1つずつに関数funcを適用する
sapply(df, FUN =func)
df.col.apply(func)
指定したカラムの各要素1つずつに関数funcを適用する
sapply(df$x, FUN =func)
df.T
行列を転置する
t(df)
pd.to_datetime()
日付型に変換する
as.Date(df$col) #日付のみ(例:'2020-01-01')
データ集計
df.max()、 df.min()
カラム毎の最大値、最小値を求める
sapply(df, FUN =max)
sapply(df, FUN =min)
# applyでも同等の処理が可能
apply(df, MARGIN=2, FUN =max) #MARGIN=1とすると行毎に関数(FUN)を適用する
apply(df, MARGIN=2, FUN =min) #max(df)とした場合、全要素の中で最大値を求める(minも同様)
df.groupby([x1, x2, ...]).agg(func)
グループ化して集計処理する
aggregate(. ~ x1+x2, df, FUN=sum) #「.」は全カラムに対し集計処理を行う
aggregate(x ~ x1+x2, df, FUN=sum) #「x」で指定したカラムに対し集計処理を行う
pd.pivot_table(df, index, columns, values)
baseパッケージにはない。たぶん。