LoginSignup
5
7

More than 1 year has passed since last update.

Python・R・VBAのまとめ

Last updated at Posted at 2021-02-11

はじめに

機械学習の勉強を始めたVBAユーザです。
備忘録としてPython・Rの文法をVBAと比較しながらまとめています。

いくつか記事を書きましたが、各言語で使用する関数等を比較した一覧表の部分をまとめました。
比較のために、EXCELでの計算も一部示しています。

目次

文法

基本的な文法

記事:https://qiita.com/swathci/items/97de2111e70c10205521

基本的な書き方

Python R VBA
変数の宣言 宣言しない 宣言しない Dim 変数名 As 変数型
大文字と小文字の区別 区別あり 区別あり 区別なし
複数行を1行にまとめて書く ;区切り ;区切り :区切り
1行を複数行に分けて書く /で改行 _で改行
スペース 自由 自由 自動的に調整
インデント 制御文でブロックを表す 自由 自由
コメントアウト #の後 #の後 'の後
文字列 ' '囲み
" "囲み
' '囲み
" "囲み
" "囲み

代入

Python R VBA
代入 = <-
=
->
=
複数同時代入 可能
複合代入演算子 あり
代入後出力 代入文を( )囲み

入出力

Python R VBA
出力 print() print()
cat()
Debug.Print
MsgBox
入力 input() InputBox()
Application.InputBox()

ディレクトリ

Python R VBA
カレントディレクトリの取得 import os
os.getcwd()
getwd() Debug.Print ThisWorkbook.Path
カレントディレクトリの変更 import os
os.chdir('C://.../...')
setwd("C:/.../...") ChDir "C:\...\..."
ファイル一覧の表示 import os
os.listdir('.')
dir()

繰り返し

記事:https://qiita.com/swathci/items/0a5a523480be5737cc2f

Python R VBA
for文 for i in ...:
 ...
for (i in ...) {
 ...
}
For i = ... To ...
 ...
Next i
while文 while ...:
 ...
while (...) {
 ...
}
Do While ...
 ...
Loop
until文 while not ...:
 ...
while (!(...)) {
 ...
}
Do Until ...
 ...
Loop
repeat文 while True:
 ...
repeat {
 ...
}
Do While True
 ...
Loop
break文 break break Exit For
Exit Do
continue文 continue next

条件分岐

記事:https://qiita.com/swathci/items/2dba6ebf683a11403f12

Python R VBA EXCEL
if文 if P:
 ...
elif Q:
 ...
elif R:
 ...
else:
 ...
if (P) {
 ...
} else if (Q) {
 ...
} else if (R) {
 ...
} else {
 ...
}
If P Then
 ...
ElseIf Q Then
 ...
ElseIf R Then
 ...
Else
 ...
End If
=IF(P,...,
IF(Q,...,
IF(R,...,
...)))
switch文 Select Case X
Case p
 ...
Case q
 ...
Case r
 ...
Case Else
 ...
End Select
=SWITCH(X,
p,...,
q,...,
r,...,
...)

演算

基本的な算術演算

記事:https://qiita.com/swathci/items/853b48ca75a0935378bb

演算 Python R VBA EXCEL 結果
加算 $1+2$ 1 + 2 1 + 2 1 + 2 =1+2 3
減算 $3-4$ 3 - 4 3 - 4 3 - 4 =3-4 -1
乗算 $5*6$ 5 * 6 5 * 6 5 * 6 =5*6 30
除算 $7/8$ 7 / 8 7 / 8 7 / 8 =7/8 0.875
べき乗 $2^3$ 2 ** 3 2 ^ 3 2 ^ 3 =2^3 8
整数商 $5/3$ 5 // 3 5 %/% 3 5 ¥ 3 =QUOTIENT(5,3) 1
剰余 $5/3$ 5 % 3 5 %% 3 5 Mod 3 =MOD(5,3) 2
divmod(5, 3) (1, 2)
符号反転 $-2$ -2 -2 -2 =-2 -2
絶対値 $|-2|$ abs(-2) abs(-2) Abs(-2) =ABS(-2) 2

VBAの「¥」は円マーク(全角の円マークを入れていますが、実際には半角の円マークです。)。

論理演算・比較演算

記事:https://qiita.com/swathci/items/dfd5e80060ff23416ce5

論理値

論理値 Python R VBA EXCEL
True TRUE
T
True TRUE
False False
F
False FALSE
データ型 bool logical Boolean

比較演算子

演算子 Python R VBA EXCEL
== == = =
< < < <
> > > >
>= >= >= >=
<= <= <= >=
!= != <> <>

論理演算子

演算子 Python R VBA EXCEL
否定
NOT
not P !P NOT P =NOT(P)
論理積
AND
P and Q P && Q
P & Q
P And Q =AND(P,Q)
論理和
OR
P or Q P || Q
P | Q
P Or Q =OR(P,Q)
排他的論理和
XOR
xor(P, Q) P Xor Q =XOR(P,Q)

論理演算の確認

演算 演算子 結果
否定 NOT NOT T
NOT F
F
T
論理積 AND T AND T
T AND F
F AND T
F AND T
T
F
F
F
論理和 OR T OR T
T OR F
F OR T
F OR T
T
T
T
F
排他的論理和 XOR T NOR T
T XOR F
F XOR T
F XOR T
F
T
T
F

注意)T:真(true)、 F:偽(false) と表記。

数学関数

記事:https://qiita.com/swathci/items/2d8e00d0e45874fc4686

丸め・整数化

Python R VBA EXCEL
丸め round(x,n) round(x,n) Round(x, n) =ROUND(X,n)
四捨五入 WorksheetFunction
.Round(x, n)
=ROUND(X,N)
天井 math.ceil(x) ceiling(x) -Int(-(x)) =-INT(-X)
math.floor(x) floor(x) Int(x) =INT(X)
整数部分 math.trunc(x) trunc(x) Fix(x)
WorksheetFunction
.RoundDown(x, 0)
=ROUNDDOWN(X,0)
整数部分切り上げ WorksheetFunction
.RoundUp(X, 0)
=ROUNDDOWN(X,0)

注意)丸めと四捨五入の違いについては、こちらを参照。
・天井      :切り上げ整数化
・床       :切り捨て整数化
・整数部分    :0に向かって整数化
・整数部分切り上げ:0から離れて整数化

符号と絶対値

Python R VBA EXCEL
符号反転 -x -x -x =-X
符号 sign(x) Sgn(x) =SIGN(X)
絶対値 abs(x)
math.fabs(x)
abs(x) Abs(x) =ABS(X)

べき乗と平方根

Python R VBA EXCEL
べき乗 x ** n
math.pow(x, n)
x ^ n x ^ n =X^N
平方根 math.sqrt(x)
x ** (1/2)
math.pow(x, 1/2)
sqrt(x)
x ^ (1/2)
x ^ (1/2)
WorksheetFunction
.Power(2, 10)
=SQRT(X)
=X^(1/2)
=POWER(X,1/2)

指数関数と対数関数

Python R VBA EXCEL
指数関数 $e^x$ math.exp(x) exp(x) Exp(x) =EXP(X)
$e^x-1$ math.exp(x)-1
math.expm1(x)
exp(x)-1
expm1(x)
Exp(x) - 1 =EXP(X) -1
$x^n$ math.pow(x,n)
x ** n
x ^ n x ^ n =X^N
自然対数 $\log x$ math.log(x) log(x) Log(x)
WorksheetFunction
.Ln(x)
=LN(X)
$\log (1+x)$ math.log(1+x)
math.log1p(x)
log(1+x)
log1p(x)
Log(1 + x) =LN(1+X)
常用対数 $\log_{10} x$ math.log10(x)
math.log(x,10)
log10(x)
log(x,10)
Log(x) / Log(10) =LOG(X)
=LOG(X,10)
$\log_{2} x$ math.log2(x)
math.log(x,2)
log2(x)
log(x, 2)
log10(x)
log(x, 2)
=LOG(X,2)
$\log_{a} x$ math.log(x,a) log(x,a) log10(x)
log(a, 10)
=LOG(X,A)

注意)対数関数のLogLnについて、Excelワークシート関数のみ自然対数にLn、常用対数にLogを用いることに注意。

三角関数と逆三角関数

Python R VBA EXCEL
$\sin t$ math.sin(t) sin(t) Sin(t) =SIN(T)
$\cos t$ math.cos(t) cos(t) Cos(t) =COS(T)
$\tan t$ math.tan(t) tan(t) Tan(t) =TAN(T)
$\arcsin (y/z)$ math.asin(y/z) asin(y/z) WorksheetFunction
.Asin(y / z)
=ASIN(Y/Z)
$\arccos (x/z)$ math.acos(x/z) acos(x/z) WorksheetFunction
.Acos(x / z)
=ACOS(X/Z)
$\arctan (y/x)$ math.acos(x/z)
math.atan2(y,x)
atan(y/x)
atan2(y,x)
Atn(y / x)
WorksheetFunction
.Atan2(x, y)
=ATAN(Y/X)
=ATAN2(X,Y)

注意)最後の atan2 は、Python・RとExcelワークシート関数で引数の順序が異なることに注意。

双曲線関数と逆双曲線関数

Python R VBA EXCEL
$\sinh x$ math.sinh(x) sinh(x) WorksheetFunction
.Sinh(x)
=SINH(X)
$\cosh x$ math.cosh(x) cosh(x) WorksheetFunction
.Cosh(x)
=COSH(X)
$\tanh x$ math.tanh(0) tanh(x) WorksheetFunction
.Tanh(x)
=TANH(X)
$\sinh^{-1}x$ math.asinh(x) asinh(x) WorksheetFunction
.Asinh(x)
=ASINH(X)
$\cosh^{-1}x$ math.acosh(x) acosh(x) WorksheetFunction
.Acosh(x)
=ACOSH(X)
$\tanh^{-1}x$ math.atanh(x) atanh(x) WorksheetFunction
.Atanh(x)
=ATANH(X)

ガンマ関数等

Python R VBA EXCEL
$\Gamma(x)$ math.gamma(x) gamma(x) WorksheetFunction
.Gamma(x)
=GAMMA(X)
$\log(\Gamma( x))$ math.lgamma(x) lgamma(x) WorksheetFunction
.GammaLn(x)
WorksheetFunction
.GammaLn_Precise(x)
=GAMMALN(X)
=GAMMALN.PRECISE(X)

数学定数

Python R VBA EXCEL
円周率 $\pi$ math.pi pi WorksheetFunction
.Pi()
=PI()
自然対数の底 $e$ math.e exp(1) Exp(1) =EXP(1)
タウ $\tau$ math.tau `` `` =
無限大 $\infty$ math.inf `` `` =
非数(not a number) math.nan `` `` =

文字列操作

記事:
https://qiita.com/swathci/items/910d976dfe63a10c2f96
https://qiita.com/swathci/items/e26bd7fa7eadf0842caa

s1 = "abc"
s2 = "def"
s3 = "ghij"
s = "abcdefghij"
t = "abcdefghijabcdefghij"
u = "abcDEFghij"
v = "abcDEFghij"
w = " d e f "
とします。また、EXCELのセルにそれぞれ
A1セル:="abc"
A2セル:="def"
A3セル:="ghij"
A4セル:="abcdefghij"
A5セル:="abcdefghijabcdefghij"
A6セル:="abcDEFghij"
A7セル:="abcDEFghij"
A8セル:=" d e f "
が入力されているものとします。

文字列の基本的操作

Python R R(stringr) VBA EXCEL 結果
結合 s1 + s2 + s3 paste0(s1, s2, s3)
paste(s1, s2, s3, sep="")
str_c(s1, s2, s3) s1 & s2 & s3 =A1&A2&A3
=CONCATENATE(
A1,A2,A3)
abcdefghij
長さ len(s) nchar(s) str_length(s) Len(s) =LEN(A4) 10
反転 s[::-1] StrReverse(s) jihgfedcba
繰り返し 'A' * 3 str_dup("A", 3) String(3, "A") =REPT("A",3) AAA
繰り返し 'def' * 3 str_dup("def", 3) =REPT("def",3) defdefdef

文字列の取り出し

Python R R(stringr) VBA EXCEL 結果
左から s[8:10]
s[0:2]
s[:2]
substr(s, 1, 2)
substring(s, 1, 2)
str_sub(s, 1, 2) Left(s, 2) =LEFT(A4,2) ab
右から s[len(s)-2:len(s)]
s[-2:]
substr(s,
nchar(s)-2+1,
nchar(s))
str_sub(s, -2, -1) Right(s, 2) =RIGHT(A4,2) ij
途中 s[3:6] substr(s, 4, 6) str_sub(s, 4, 6) Mid(s, 4, 3) =MID(A4,4,3) def

注意)「途中」の文字列の取り出しについて、Python, Rの関数では取り出す文字列を「どこからどこまで」と指定しますが、VBA, EXCELの関数では「どこから何文字分」と指定します。

文字列の検索

Python R R(stringr) VBA EXCEL 結果
検索 s.find('def') str_locate(s, "def") InStr(1, s, "def") =FIND("def",A4,1)
=SEARCH("def",A4,1)
3,4
後ろからの検索 t.rfind('def') InStrRev(t, "def") 13,14
カウント t.count('def') str_count(t, "def") 2

注意)str_detect, str_locate関数については、上記参照。

文字列の置換

Python R R(stringr) VBA EXCEL 結果
置換 s.replace('def', 'DEF') sub("def", "DEF", s) str_replace(s, "def", "DEF") Replace(s, "def", "DEF") =SUBSTITUTE(
A4,"def","DEF")
=REPLACE(A4,
FIND("def",A4),
LEN("def"),"DEF")
abcDEFghij
最初の1つだけ置換 sub("def", "DEF", t) str_replace(t, "def", "DEF") abcDEFghij
abcdefghij
すべて置換 t.replace('def', 'DEF') gsub("def", "DEF", t) str_replace_all(t, "def", "DEF") Replace(t, "def", "DEF") =SUBSTITUTE(
A5,"def","DEF")
abcDEFghij
abcDEFghij

文字列の変換

Python R R(stringr) VBA EXCEL 結果
大文字に u.upper() toupper(u) str_to_upper(u) UCase(u) =UPPER(A6) ABCDEFGHIJ
小文字に u.lower() tolower(u) str_to_lower(u) LCase(u) =LOWER(A6) abcdefghij
先頭のみ大文字・それ以外は小文字に u.capitalize() str_to_title(u)
str_to_sentence(u)
StrConv(u, vbProperCase) =PROPER(A6) Abcdefghij
大文字と小文字を入れ替え u.swapcase() chartr("A-Za-z", "a-zA-z", u) ABCdefGHIJ
大文字かどうかの判定 u.isupper() u == toupper(u) u == str_to_upper(u) False
小文字かどうかの判定 u.islower() u == tolower(u) u == str_to_lower(u) False
全角に chartr("A-Za-z", "A-Za-z", u) StrConv(u, vbWide) =JIS(A6) abcDEFghij
半角に chartr("A-Za-z", "A-Za-z", v) StrConv(v, vbNarrow) =ASC(A7) abcDEFghij

文字列のスペース

Python R R(stringr) VBA EXCEL 結果
スペース ' ' * 3 str_dup(" ", 3) Space(3) =REPT(" ",3) " "
両側スペース削除 w.strip(' ') str_trim(s, side="both") Trim(w) =TRIM(A8) "d e f"
左スペース削除 w.lstrip(' ') str_trim(s, side="left") LTrim(w) "d e f "
右スペース削除 w.rstrip(' ') str_trim(s, side="right") RTrim(w) " d e f"

注意)EXCELのTRIM関数は文字列の中のスペースも1つを除いて削除されてd e fとなります。

アスキーコード

Python R VBA EXCEL 結果
AのASCIIコード ord('A') strtoi(charToRaw("A"), 16L) Asc("A") =CODE("A") 65
ZのASCIIコード ord('Z') strtoi(charToRaw("Z"), 16L) Asc("Z") =CODE("Z") 90
aのASCIIコード ord('a') strtoi(charToRaw("a"), 16L) Asc("a") =CODE("a") 97
zのASCIIコード ord('z') strtoi(charToRaw("z"), 16L) Asc("z") =CODE("a") 122
ASCIIコード65の文字 chr(65) rawToChar(as.raw(65)) Chr(65) =CHAR(65) A
ASCIIコード90の文字 chr(90) rawToChar(as.raw(90)) Chr(90) =CHAR(90) Z
ASCIIコード97の文字 chr(97) rawToChar(as.raw(97)) Chr(97) =CHAR(97) a
ASCIIコード122の文字 chr(122) rawToChar(as.raw(122)) Chr(122) =CHAR(122) z

ベクトル

記事:https://qiita.com/swathci/items/24091938c172e1d6f8df

ベクトルの作成

Python Python(Numpy) R VBA EXCEL 結果
ベクトル
の作成
[1,2,3,4,5] np.array([1,2,3,4,5]) c(1,2,3,4,5) Array(
1, 2,
3, 4,
5)
セル入力 1,2,3,4,5
1,...,n list(
range(1,10+1))
np.arange(1,10+1) seq(10) =1つ前+1 1,2,...,10
連続する
整数列
list(
range(1,10+1,1))
np.arange(1,10+1,1) 1:10
seq(1,10)
=1つ前+1 1,2,...,10
連続する
整数列
list(
range(10,1-1,-1))
np.arange(10,1-1,-1) 10:1
seq(1,10,-1)
=1つ前-1 10,9,...,1
等差数列 list(
range(0,10+1,2))
np.arange(0,10+1,2) seq(0,10,by=2) =1つ前+2 0,2,4,6,8,10
等差数列 np.linspace(0,10,
num=5+1)
seq(0,10,
length=5+1)
0,2,4,6,8,10
繰り返し [1] * 10 np.full(10,1) rep(1,10) =1つ前 1,1,...,1
繰り返し [1,2,3] * 5 rep(1:3,times=5) =3つ前 1,2,3,...,1,2,3
繰り返し rep(1:3,length=5) 1,2,3,...,2,3,1
繰り返し rep(1:3,each=5) 1,...,1,2,...,3,...
0を
繰り返し
[0]*10 np.zeros(10) numeric(10)
rep(0,10)
=0 0,0,...,0
1,1,2,
1,2,3,...
sequence(1:3)
c(seq(1),seq(2),
seq(3))
c(1:1,1:2,1:3)
1,1,2,1,2,3
重複削除 list(set(
[1,2,2,3,3,3]))
unique(
c(1,2,2,3,3,3))
1,2,3

ベクトルの属性

Python Python(Numpy) R VBA EXCEL
長さ len(v) len(v) length(v) UBound(v, 1)
- LBound(v, 1)
+ 1
要素の型 typeof(v)
mode(v)

要素へのアクセス

$v=(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)$

Python Python(Numpy) R VBA EXCEL 結果
v[3-1] v[3] =INDEX( ,3) 3
v[2-1:5] v[2:5] 2,3,4,5
v[[1-1,3-1,5-1]] v[c(1,3,5)] 1,3,5
v[-1] 2,3,...,10
v[c(-1,-3,-5)]
v[-c(1,3,5)]
2,4,6,7
,8,9,10
v[v < 5] v[v < 5] 1,2,3,4
v[v % 2 == 0] v[v %% 2 == 0] 2,4,6,8,10
v[(v > 3) & (v < 7)] v[v > 3 & v < 7] 4,5,6
v[(v < 3)|(v > 7)] v[v < 3|v > 7] 1,2,8,9,10
v[is.na(v)]
v[:n] head(v,n) 1,2,...
v[-n:] tail(v,n) ...,9,10

要素の検索

Python Python(Numpy) R VBA EXCEL
条件に合う要素番号 np.argwhere(v==1) which(v==1)
which(v<50)
=MATCH(1, ,0)
 
条件に合う要素 v[v<5] v[which(v<5)]
v[v < 5]
要素にあるか 1 in v 1 %in% v =MATCH(1, ,0)>0
条件に合う要素のカウント v.count(0) len(v[v==0])
NAか is.na(v)

ベクトルの操作

$v = (2,4,1,3,5)$

Python Python(Numpy) R VBA EXCEL 結果
逆順 v[::-1]
v.reverse()
v[::-1] rev(v) 5,3,1,4,2
昇順順位 np.argsort(v) order(v) 3,1,4,2,5
降順順位 np.argsort(v)[::-1] order(v)
昇順ソート sorted(v)
v.sort()
np.sort(v) sort(v)
v[order(v)]
1,2,3,4,5
降順ソート sorted(v,
reverse=True)
v.sort(
reverse=True)
np.sort(v)[::-1] rev(sort(v))
sort(v,
decreasing=T)
v[rev(order(v))]
5,4,3,2,1
最大要素番号 np.argmax(v) 4
最小要素番号 np.argmin(v) 2
最大要素 max(v) np.max(v) max(v) =MAX(V) 5
最小要素 min(v) np.min(v) min(v) =MIN(V) 1
中央値 np.median(v) median(v) =MEDIAN(V) 3
範囲 range(v) 1,5
範囲 np.ptp(v) 4
四分位 np.percentile(v,
[0,25,50,75,100])
np.quantile(v,
[0,0.25,0.5,0.75,1])
quantile(v) =QUARTILE( ,n)
n: 0,1,2,3,4
第1四分位:2,
第3四分位:4
summary summary(v)

集合演算

\begin{eqnarray*}
v &=& (2,2,4,4,4,4,1,3,3,3,5,5,5,5,5) \\
A &=& \{2,4,1,3,5\} \\
B &=& \{1,3,5,7,9\} \\
a &=& 1
\end{eqnarray*}
\begin{eqnarray*}
A \cup B &=& \{2,4,1,3,5,7,9\} \quad &和集合 \\
A \cap B &=& \{1,3,5\} &積集合 \\
A \cap B^{c} = A \setminus B &=& \{2,4\} &差集合 \\
(A \setminus B) \cup (B \setminus A) = A \triangle B &=& \{2,4,7,9\} &対称差集合 \\
A = B && &集合として等しい \\
a \in A && &要素
\end{eqnarray*}
Python R VBA EXCEL 結果
重複削除 set(v) unique(v) 2,4,1,3,5
和集合 A | B union(A,B) 2,4,1,3,5,7,9
積集合 A & B intersect(A,B) 1,3,5
差集合 A - B setdiff(A,B) 2,4
対称差集合 A ^ B 2,4,7,9
集合として等しい A == B setequal(A,B) False
要素 a in A is.element(a,A)
a %in% A
True

注意)Pythonではset型を使う。Rではベクトルを集合とみなして集合演算ができる。

ベクトルの要素の置換・結合・挿入

Python R VBA EXCEL
置換 replace(v,要素,w)
結合 u + v + w c(u,v,w)
append(u,v)
挿入 append(u,v,after=n)
挿入 v.append(3) append(v,3)
削除 v.remove(3)

要素ごとの計算

Python Python(Numpy) R VBA EXCEL
v+w v + w v + w =V+W
v-w v - w v - w =V-W
v*w v * w v * w =V*W
v/w v / w v / w =V/W
v+1 v + 1 v + 1 =V+1
v*2 v * 2 v * 2 =V*2
1/v 1 / v 1 / v =1/V
v < 3 v < 3 v < 3 =V<3
v = 3 v == 3 v == 3 =V=W
v/2の余り=0 v % 2 == 0 v %% 2 == 0 =MOD(V,2)=0
$\sqrt{v}$ np.sqrt(v) sqrt(v) =SQRT(V)
$\exp{v}$ np.exp(v) exp(v) =EXP(V)

統計量の計算

\begin{eqnarray*}
&x &=& (x_i)^{n}_i &= (2,4,1,3,5) \\
&y &=& (y_i)^{n}_i &= (1,3,5,7,9)
\end{eqnarray*}
\begin{eqnarray*}
\mathrm{max}(x) &=& \max_{i=1}^n x_i &最大値\\
\mathrm{min}(x) &=& \min_{i=1}^n x_i &最小値\\
\mathrm{sum}(x) &=& \sum_{i=1}^n x_i &総和\\
\mathrm{prod}(x) &=& \prod_{i=1}^n x_i &総積\\
\overline{x} &=& \frac{1}{n} \sum_{i=1}^n x_i &平均\\
s_x^2 &=& \frac{1}{n} \sum_{i=1}^n \left( x_i - \overline{x} \right)^2 &分散\\
var(x) = u_x^2 &=& \frac{1}{n-1} \sum_{i=1}^n \left( x_i - \overline{x} \right)^2 &不偏分散\\
s_x =  \sqrt{s_x^2} &=& \sqrt{ \frac{1}{n} \sum_{i=1}^n \left( x_i - \overline{x} \right)^2 } &標準偏差\\
\sqrt{var(x)} = u_x = \sqrt{u^2} &=& \sqrt{ \frac{1}{n-1} \sum_{i=1}^n \left( x_i - \overline{x} \right)^2 } &不偏標準偏差\\
s_{xy} &=& \frac{1}{n} \sum_{i=1}^n \left( x_i - \overline{x} \right) \left( y_i - \overline{y} \right) \quad &共分散 \\
cov(x,y) &=& \frac{1}{n-1} \sum_{i=1}^n \left( x_i - \overline{x} \right) \left( y_i - \overline{y} \right) &不偏共分散 \\
r_{xy} = \frac{s_{xy}}{s_x s_y} = \frac{cov(x,y)}{\sqrt{var(x)var(y)}} &=& \frac{\sum_{i=1}^n \left( x_i - \overline{x} \right) \left( y_i - \overline{y} \right)}{\sqrt{\sum_{i=1}^n \left( x_i - \overline{x} \right)^2}\sqrt{\sum_{i=1}^n \left( y_i - \overline{y} \right)^2}} \quad &相関係数 \\
Cov(x,y) &=& \begin{pmatrix}
   var(x) & cov(x,y) \\
   cov(x,y) & var(y)
\end{pmatrix} &分散共分散行列 \\
C_{xy} &=& \begin{pmatrix}
   1 & r_{xy} \\
   r_{xy} & 1
\end{pmatrix} &相関係数行列 \\
\end{eqnarray*}

Excelシートにはセル範囲 B2:B6, C2:C6 にベクトル $x,y$ の値が入力されているとする。

Python Python(Numpy) R VBA EXCEL 結果
最大値 max(x) np.max(x) max(x) =MAX(B2:B6) 5
最小値 min(x) np.min(x) min(x) =MIN(B2:B6) 1
中央値 np.median(x) median(x) =MEDIAN(B2:B6) 3
範囲 np.ptp(x) 4
四分位 np.percentile(x,25)
np.quantile(x,0.25)
2
総和 sum(x) np.sum(x) sum(x) =SUM(B2:B6) 15
総積 np.prod(x) prod(x) =PRODUCT(B2:B6) 120
平均 np.mean(x) mean(x) =AVERAGE(B2:B6) 3
分散 np.var(x) var(x)*(n-1)/n =VAR.P(B2:B6)
=VARP(B2:B6)
2
不偏分散 np.var(x,ddof=1) var(x) =VAR.S(B2:B6)
=VAR(B2:B6)
2.5
標準偏差 np.std(x) sd(x)*sqrt(
var(x)*(n-1)/n)
=STDEV.P(B2:B6)
=STDEVP(B2:B6)
1.414
不偏標準偏差 np.std(x,ddof=1) sd(x) =STDEV.S(B2:B6)
=STDEV(B2:B6)
1.581
共分散 cov(x,y)*(n-1)/n =COVARIANCE.P(
B2:B6,C2:C6)
=COVAR(
B2:B6,C2:C6)
2
不偏共分散 cov(x,y) =COVARIANCE.S(
B2:B6,C2:C6)
2.5
相関係数 cor(x,y) =CORREL(
B2:B6,C2:C6)
0.5
分散共分散行列 np.cov(x,y)
相関係数行列 np.corrcoef(x,y)
summary summary(v)

累積計算

Python Python(Numpy) R VBA EXCEL 結果
cumsum 累積和 注意) np.cumsum(x) cumsum(x) =SUM($B$2:$B2) 2,6,7,10,15
cumprod 注意) np.cumprod(x) cumprod(x) =PRODUCT($B$2:$B2) 2,8,8,24,120
cummax 注意) cummax(x) =MAX($B$2:$B2) 2,4,4,4,5
cummin 注意) cummin(x) =MIN($B$2:$B2) 2,2,1,1,1
階差数列
前進差分
注意) np.diff(x) diff(x) =B3-B2 2,-3,2,2
第n階差 np.diff(x,n=n) =B3-B2 2,-3,2,2

注意)リスト内包表記で可能。

線形代数の計算

\begin{eqnarray*}
&x &=& (x_i)^{n}_i &= (2,4,1,3,5) \\
&y &=& (y_i)^{n}_i &= (1,3,5,7,9)
\end{eqnarray*}
\begin{eqnarray*}
(x,y) &=& \sum_{i=1}^n x_iy_i &内積 \\
\|x\| = \sqrt{(x,x)} &=& \sqrt{\sum_{i=1}^n {x_i}^2} \quad &ノルム \\
\end{eqnarray*}
Python Python(Numpy) R VBA EXCEL 結果
内積 np.dot(v,w)
np.sum(v*w)
sum(x*y) =SUMPRODUCT(
B2:B6,C2:C6)
85
ノルム np.linalg.norm(v)
np.sqrt(np.sum(v*v))
sqrt(sum(x*x)) =SQRT(
SUMPRODUCT(
B2:B6,B2:B6))
7.416

行列

記事:https://qiita.com/swathci/items/715aba6db368f53b3a2e

Pythonでは、Numpyを使います(import numpy as np)。

行列の作成

A = \begin{pmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12
\end{pmatrix}
,
I_3 = \begin{pmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{pmatrix}
O = \begin{pmatrix}
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0 \\
0 & 0 & 0 & 0
\end{pmatrix}
,
D = \begin{pmatrix}
1 & 0 & 0 \\
0 & 2 & 0 \\
0 & 0 & 3
\end{pmatrix}
行列 Python R VBA EXCEL
mxn行列
$A$
np.array(range(1,12+1)).
reshape(3,4)
np.array([
 [1,2,3,4],
 [5,6,7,8],
 [9,10,11,12]])
matrix(1:12,3,4,TRUE)
rbind(c(1,2,3,4),
    c(5,6,7,8),
    c(9,10,11,12))
cbind(c(1,5,9),
    c(2,6,10),
    c(3,7,11),
    c(4,8,12))
単位行列
$I_3$
np.eye(3) diag(3)
diag(1, 3)
diag(1, 3, 3)
WorksheetFunction.
Munit(3)
MUNIT(3)
ゼロ行列
$O$
np.zeros((3,4)) matrix(0, 3, 4)
diag(0, 3, 4)
diag(0, 3)
対角行列
$D$
np.diag([1,2,3] diag(c(1,2,3))
1埋め行列 np.ones((3,4))
数値埋め行列 np.full((3,4), 5)

行列の属性

A = \begin{pmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12
\end{pmatrix}
Python R VBA EXCEL 結果
A.shape dim(A) 3, 4
行数 len(A)
A.shape[0]
nrow(A) UBound(A, 1) 3
列数 A.shape[1] ncol(A) UBound(A, 2) 4
次元(=2) A.ndim 2
タイプ type(A) class(A)
データ型 A.dtype typeof(A)

行列の要素

A = \begin{pmatrix}
1 & 2 & 3 & 4 \\
5 & 6 & 7 & 8 \\
9 & 10 & 11 & 12
\end{pmatrix}
Python R VBA EXCEL
(1,2)成分 A[0,1]
A[0][1]
A[1,2] A(1,2) =INDEX(A,1,2)
1行目の行ベクトル A[0,:]
A[[0],:]
A[1,]
2列目の列ベクトル A[:,1]
A[:,[1]]
A[,2]
1~2行 A[0:2,] A[1:2,]
3~4列 A[:,2:4]
A[:,-2:]
A[,3:4]
1~2行,3~4列 A[0:2,2:4]
A[:2,-2:]
A[1:2,3:4]
1・3行 A[[0,2],:] A[c(1,3),]
2・4列 A[:,[1,3]] A[,c(2,4)]
1・3行,2・4列 A[np.ix_([0,2],[1,3])] A[c(1,3),c(2,4)]
全行,全列 A[:,:] A[,]
head head(A)
head(A, 2)
tail tail(A)
tail(A, 2)

線形代数の計算

A = \begin{pmatrix}
1 & 2  \\
3 & 4
\end{pmatrix}
,
B = \begin{pmatrix}
5 & 6  \\
7 & 8
\end{pmatrix}
k = 2,
kA = \begin{pmatrix}
2 & 4 \\
6 & 8
\end{pmatrix}
A + B = \begin{pmatrix}
6 & 8 \\
10 & 12
\end{pmatrix}
,
AB = \begin{pmatrix}
19 & 22 \\
43 & 50
\end{pmatrix}
A^T = \begin{pmatrix}
1 & 3 \\
2 & 4
\end{pmatrix}
,
A^{-1} = \begin{pmatrix}
-2 & 1 \\
1.5 & -0.5
\end{pmatrix}
detA = -2
,
trA = 5
Python R VBA EXCEL
スカラー倍
$kA$
A * k A * k =セル*k
行列の和
$A+B$
A + B A + B =セル+セル
行列の積
$AB$
A @ B
np.dot(A, B)
A %*% B WorksheetFunction.
MMult(A, B)
=MMULT(A,B)
転置行列
$A^T$
A.transpose()
A.T
t(A) WorksheetFunction.
Transpose(A)
=Transpose(A)
逆行列
$A^{-1}$
np.linalg.inv(A) solve(A) WorksheetFunction.
MInverse(A)
=MINVERSE(A)
単位行列
$I_2$
np.eye(2) diag(2) WorksheetFunction.
Munit(2)
=MUNIT(2)
行列式
$detA$
np.linalg.det(A) det(A) WorksheetFunction.
MDeterm(A)
=MDETERM(A)
トレース
$trA$
sum(np.diag(A)) sum(diag(A)) WorksheetFunction.
SumProduct(A,Eye2)
対角成分 np.diag(A) diag(A)
行列のフラット化 A.flatten()
行列の変形 A.reshape(1,4)

行列の要素ごとの演算

Python R VBA EXCEL
A + B A + B =セル+セル
A - B A - B =セル-セル
A * B A * B =セル*セル
A / B A / B =セル/セル
スカラー倍 A * 2 A * 2 =セル*2
べき乗 A ** 2 A ^ 2 =セル^2
符号反転 -A -A =-セル
等号 A == B A == B =セル=セル
不等号 A < B A < B =セル<セル
不等号 A > 2 A > 2 =セル>2
余り0 A % 2 == 0 A %% 2 == 0 =MOD(セル,2)=0
平方根 np.sqrt(A) sqrt(A) =SQRT(セル)
exp np.exp(A) exp(A) =EXP(セル)
log np.log(A) log(A) =LN(セル)

データフレーム

記事:
・PythonのpandasとRとSQLの比較: https://qiita.com/swathci/items/3489b9886799e2f61c4f
・PythonのpandasとRのdplyrの比較: https://qiita.com/swathci/items/4d3469a413fb5a9f2212
Rのデータフレーム操作について
・行の操作: https://qiita.com/swathci/items/04f4c1bb2c3c380cae94
・列の操作: https://qiita.com/swathci/items/9bf403dca7c428fc3e7d
・集計操作: https://qiita.com/swathci/items/d13be09a7ed73c1a8d94
・pivot操作: https://qiita.com/swathci/items/4ce25faddfeff3a29a5f
・データフレームの関数: https://qiita.com/swathci/items/8d626865638079d13665
・R標準で集計操作: https://qiita.com/swathci/items/f6e2f737d9388603bcd7

Python(pandas) R RDB(Access) Excel 行列
オブジェクト DataFrame data.frame テーブル テーブル 行列(matrix)
index(axis=0) 行(row) レコード 行(ROW) 行(row)
columns(axis=1) 列(col) フィールド 列(COLUMN) 列(column)
要素 values CELL 要素
列の正体 pandasのSeries ベクトル 同じデータ型の値

データフレームdf

X Y Z
1 20 100.1 AAA
2 40 200.2 BBB
3 10 300.3 CCC
4 30 400.4 DDD
5 50 500.5 EEE

データフレームの作成

Python(pandas) R SQL
データフレームの作成 pd.DataFrame({
'X': x,
'Y': y,
'Z': z})
data.frame(
X = x,
Y = y,
Z = z)
CREATE TABLE

データフレームの属性

Python(pandas) R SQL 結果
クラス type(df) class(df)
構造 df.info() str(df)
df.columns
df.columns.values
names(df)
colnames(df)
'X', 'Y', 'Z'
df.index
df.index.values
rownames(df)
row.names(df)
df.values
列数 len(df.columns) length(df)
ncol(df)
3
行数 len(df.index)
len(df)
nrow(df) 5
形(行数, 列数) df.shape dim(df) (5, 3)
全要素数 df.size 15=5*3

注意)pandasのlen()は行数に、Rのdata.frameのlength()は列数。

データフレームへのアクセス

Python(pandas) R SQL 結果
列ベクトル df.X
df['X']
df$X
df[["X"]]
df[[1]]
ベクトル
(20,40,
10,30,50)
列指定 df[['X']]
df.loc[:,['X']]
df[1]
df["X"]
SELECT X
FROM df;
データフレーム
複数列指定 df[['X','Z']]
df.loc[:,['X','Z']]
df.iloc[:,
[1-1,3-1]]
df[c(1,3)]
df[c("X","Z")]
SELECT Z, X FROM df; データフレーム
df[['Z','Y','X']]
df.loc[:,
['Z','Y','X']]
df.iloc[:,
[3-1,2-1,1-1]]
df[c(3,1,2)]
df[c("Z","X","Y")]
SELECT Z, X, Y FROM df; データフレーム
先頭n行 df.head(n) head(df, n) データフレーム
末尾n行 df.tail(n) tail(df, n) データフレーム
要素 df.iat[1-1,1-1]
df.at[1-1,'X']
df.iloc[1-1,1-1]
df.loc[1-1,'X']
df['X'][1-1]
df.X[1-1]
df[1,1]
df[1,"X"]
df[[1,1]]
df[[1,"X"]]
df$X[1]
df[["X"]][1]

20
複数行・複数列指定 df.iloc[
[1-1,3-1],[1-1,3-1]]
df.loc[
[1-1,3-1],['X','Z']]
df[c(1,3),c(1,3)]
df[c(1,3),c("X","Z")]
df[c(T,F,T,F,F),
c(T,F,T)]
データフレーム
複数列指定 df.iloc[:,[1-1,3-1]]
df.loc[:,['X','Z']]
df[['X','Z']]
df[,c(1,3)]
df[,c("X","Z")]
df[,c(T,F,T)]
データフレーム
複数行指定 df.iloc[[1-1,3-1],:]
df.loc[[1-1,3-1],:]
df.iloc[[1-1,3-1]]
df.loc[[1-1,3-1]]
df[c(1,3),]
df[c(T,F,T,F,F),]
データフレーム

注意)

データフレームの操作

Python(pandas) R SQL
列の選択 df[['Z','Y','X']] df[c("Z","X","Y")] SELECT Z, X, Y
FROM df;
列の追加 df['X3'] = df['X'] * 3 df$X3 <- df$X * 3 SELECT X, Y, Z,
X * 3 AS X3
FROM df;
列名変更 df.rename(
columns={'X':'xx',
'Y':'yy',
'Z':'zz'})
names(df) <-
c("xx", "yy", "zz")
SELECT
X AS xx,
Y AS yy,
Z AS zzz
FROM df;
行の条件抽出フィルタ df['X'] < 30
df.query('X < 30')
df[df$X < 30,] SELECT *
FROM df
WHERE
X < 30;
df[(df['X'] > 10) & (df['X'] < 50)]
df.query('10 < X < 50')
df[df$X > 10
& df$X < 50,]
SELECT *
FROM df
WHERE
X > 10
AND
X < 50;
行のソート df.sort_values(by='X') df[order(df$X), ] SELECT *
FROM df
ORDER BY X ASC;
行のソート df.sort_values(by='X', ascending=False) df[order(df$X, decreasing = TRUE),] SELECT *
FROM df
ORDER BY X DESC;
行のソート df.sort_values(by=['S','X']) df[order(df$S, df$X), ] SELECT *
FROM df
ORDER BY S ASC, X ASC;

データフレームの集計

Python(pandas) R SQL
基本統計量 df.describe()
df.describe().T
summary(df)
グループ化 df.groupby('S') GROUP BY S;
グループ化 df.groupby(['S','Z']) GROUP BY S, Z;

データフレームの結合

Python(pandas) R SQL
横に並べる pd.concat([df1, df2],
axis=1)
cbind(df1, df2)
縦に並べる pd.concat([df1, df2],
axis=0)
pd.concat([df1, df2],
ignore_index=True)
df1.append(df2,
ignore_index=True)
rbind(df1, df2) UNION ALL
内部結合
(INNER JOIN)
pd.merge(df1, df2,
on='k')
pd.merge(df1, df2,
on='k',
how='inner')
merge(df1, df2)
merge(df1, df2,
by="k")
FROM df1
INNER JOIN df2
ON df1.k = df2.k
左外部結合
(LEFT OUTER JOIN)
pd.merge(df1, df2,
on='k',
how='left')
merge(df1, df2,
by="k",
all.x=T)
FROM df1
LEFT JOIN df2
ON df1.k = df2.k
右外部結合
(RIGHT OUTER JOIN)
pd.merge(df1, df2,
on='k',
how='right')
merge(df1, df2,
by="k",
all.y=T)
FROM df1
RIGHT JOIN df2
ON df1.k = df2.k
完全外部結合
(FULL OUTER JOIN)
pd.merge(df1, df2,
on='k',
how='outer')
merge(df1, df2,
by="k",
all=T)
FROM df1
FULL JOIN df2
ON df1.k = df2.k
名前の異なるキーで結合 pd.merge(df1, df2,
left_on='k1',
right_on='k2',
how='left')
merge(df1, df2,
by.x="k1",
by.y="k2",
all.x=T)
FROM df1
LEFT JOIN df2
ON df1.k1 = df2.k2
複数のキーで結合 pd.merge(df1, df2,
on=['k1','k2'],
how='left')
merge(df1, df2,
by=c("k1","k2"),
all.x=T)
FROM df2
LEFT JOIN df2
ON df1.k1 = df2.k1
AND df1.k2 = df2.k2

確率分布

記事:
・確率分布:https://qiita.com/swathci/items/7d528fcb34a2e31a8127
・乱数:https://qiita.com/swathci/items/c2f0bf1d684099963c61

確率分布

記事:https://qiita.com/swathci/items/7d528fcb34a2e31a8127

  • $X$ :確率変数
  • $f_{X}(x)$ :確率密度関数(probability density function; PDF)
  • $F_{X}(x)$ :累積分布関数(cumulative distribution function; CDF)
  • $\bar{F_X}(x)$ :相補累積分布関数(complementary cumulative distribution function; CCDF)(上側確率(upper-tail probability), 生存関数(survival function))
  • $G_{X}(p)$ :分位関数(quantile function)(分位点関数)
\begin{eqnarray*}
F_{X}(x) &=& \mathrm{P}(X \le x) = \int_{-\infty}^{x} f_{X}(t)\,dt \quad (x \in \mathbb{R}) \\
\bar{F_X}(x) &=& \mathrm{P}(X > x) = 1-F_{X}(x) = \int_{x}^{\infty} f_{X}(t)\\
G_{X}(p) &=& {F_{X}}^{-1}(p) \quad (p \in [0,1])
\end{eqnarray*}
Python R VBA EXCEL
確率密度関数
(pdf)$f(x)$
xxx.pdf(x, ...) dxxx(x, ...)
確率分布関数
(cdf)$F(x)$
xxx.cdf(x, ...) pxxx(x, ...)
分位関数
(ppf)$G(p)$
xxx.ppf(p, ...) qxxx(p, ...)
乱数
(random numbers)
xxx.rvs(..., size=N) rxxx(n=N, ...)

注意)xxx部分は各分布の名称、...は各分布のパラメータ。例えば、正規分布$N(m,s^2)$なら、Pythonではnorm.pdf(x, m, s), norm.cdf(x, m, s), norm.ppf(p, m, s), norm.rvs(m, s, size=N)、Rではdnorm(x, m, s), pnorm(x, m, s), qnorm(p, m, s), rnorm(n=N, mean=m, sd=s) など。
注意)乱数については、こちら参照。
注意)Pythonでは、scipy.statsから、必要な関数をインポートしたうえで使用。
from scipy.stats import uniform, norm, chi2, t, f, beta, gamma, lognorm, exponfrom scipy.stats import bernoulli, binom, poisson, nbinom, geom, hypergeom, randint

乱数

記事:https://qiita.com/swathci/items/c2f0bf1d684099963c61

Python R VBA EXCEL
一様分布
$U(a,b)$
uniform.rvs(loc=a, scale=b-a, size=N) runif(n=N, min=a, max=b) (b - a) * Rnd + a =(b-a)*RAND()+b
正規分布
$N(m,s^2)$
norm.rvs(loc=m, scale=s, size=N) rnorm(n=N, mean=m, sd=s) WorksheetFunction.
Norm_Inv(Rnd, m, s)
=NORM.INV(
RAND(),m,s)
t分布
$t(n)$
t.rvs(df=n, size=N) rt(n=N, df=n) WorksheetFunction.
T_Inv(Rnd, n)
=T.INV(
RAND(),n)
カイ二乗分布
$\chi^2(n)$
chi2.rvs(df=n, size=N) rchisq(n=N, df=n) WorksheetFunction.
ChiSq_Inv(Rnd, n)
=CHISQ.INV(
RAND(),n)
F分布
$F(n,m)$
f.rvs(dfn=n, dfd=m, size=N) rf(n=N, df1=n, df2=m) WorksheetFunction.
F_Inv(Rnd, n, m)
=F.INV(
RAND(),n,m)
ベータ分布
$Be(a,b)$
beta.rvs(a=a, b=b, size=N) rbeta(n=N, shape1=a, shape2=b) WorksheetFunction.
Beta_Inv(Rnd, a, b)
=BETA.INV(
RAND(),a,b)
ガンマ分布
$Ga(k,theta)$
gamma.rvs(a=k, scale=theta, size=N) rgamma(n=N, shape=k, scale=theta) WorksheetFunction.
Gamma_Inv(Rnd, a, b)
=GAMMA.INV(
RAND(),a,b)
指数分布
$Exp(L)$
expon.rvs(loc=0, scale=1/L, size=N) rexp(n=N, rate=L) WorksheetFunction.
Gamma_Inv(Rnd, 1, L)
=GAMMA.INV(
RAND(),1,L)
対数正規分布
$LN(mu,s)$
lognorm.rvs(s=s, scale=np.exp(m), size=N) rlnorm(n=N, meanlog=m, sdlog=s) WorksheetFunction.
LogNorm_Inv(Rnd, m, s)
=LOGNORM.INV(
RAND(),m,s)
ベルヌーイ試行
$Bernoulli(p)$
bernoulli.rvs(p=p, size=N) rbinom(n=N, size=1, prob=p)
二項分布
$B(n,p)$
binom.rvs(n=n, p=p, size=N) rbinom(n=N, size=n, prob=p)
ポアソン分布
$Po(L)$
poisson.rvs(mu=L, size=N) rpois(n=N, lambda=L)
負の二項分布
$NB(n,p)$
nbinom.rvs(n=n, p=p, size=N) rnbinom(n=N, size=n, prob=p)
幾何分布
$G(p)$
geom.rvs(p=p, size=N) rgeom(n=N, prob=p)
超幾何分布 $HG(M,n,N)$ hypergeom.rvs(M=M, n=n, N=N, size=N) rhyper(nn=N, n=M, m=n, k=N)
一様分布(整数) randint.rvs(low=a, high=b+1, size=N) sample(1:6, size=N, replace=T)
sample.int(n=6, size=N, replace=T)
Int((b - a + 1) * Rnd + a) =INT((b-a+1)*RAND()+a)

注意)
Pythonでは、scipy.statsから、必要な関数をインポートしたうえで使用。
from scipy.stats import uniform, norm, chi2, t, f, beta, gamma, lognorm, exponfrom scipy.stats import bernoulli, binom, poisson, nbinom, geom, hypergeom, randint

Pythonのライブラリの比較

Python(random) Python(numpy.random) Python(scipy.stats)
import import random import numpy as np from scipy.stats import norm
seedの固定 random.seed(0) np.random.seed(0) 関数の引数でrandom_state=0
一様分布
$U(0,1)$
random.random() np.random.
rand(N)
np.random.
random_sample(size=N)
np.random.
random(size=N)
np.random.
ranf(size=N)
np.random.
sample(size=N)
uniform.rvs(loc=a, scale=b-a, size=N)
一様分布
$U(a,b)$
random.
uniform(a, b)
np.random.
uniform(low=a, high=b, size=N)
uniform.rvs(loc=a, scale=b-a, size=N)
標準正規分布
$N(0,1)$
random.
gauss(0, 1)
random.
normalvariate(0, 1)
np.random.
randn(N)
np.random.
standard_normal(size=N)
norm.rvs(loc=m, scale=s, size=N)
正規分布
$N(m,s^2)$
random.
gauss(mu=m, sigma=s)
random.
normalvariate(mu=m, sigma=s)
np.random.
normal(loc=m, scale=s, size=N)
norm.rvs(loc=m, scale=s, size=N)
t分布
$t(n)$
np.random.
standard_t(df=n, size=N)
t.rvs(df=n, size=N)
カイ二乗分布
$\chi^2(n)$
np.random.
chisquare(df=n, size=N)
chi2.rvs(df=n, size=N)
F分布
$F(n,m)$
np.random.
f(dfnum=n, dfden=m, size=N)
f.rvs(dfn=n, dfd=m, size=N)
ベータ分布
$Be(a,b)$
random.
betavariate(alpha, beta)
np.random.
beta(a, b, size=N)
beta.rvs(a=a, b=b, size=N)
ガンマ分布
$Ga(k,theta)$
random.
gammavariate(alpha, beta)
np.random.
gamma(shape, scale, size=N)
gamma.rvs(a=k, scale=theta, size=N)
指数分布
$Exp(L)$
random.
expovariate(lambd)
np.random.
exponential(scale=1/L, size=N)
expon.rvs(loc=0, scale=1/L, size=N)
対数正規分布
$LN(mu,s)$
random.
lognormvariate(mu=m, sigma=s)
np.random.
lognormal(mean=m, sigma=s, size=N)
lognorm.rvs(s=s, scale=np.exp(m), size=N)
ベルヌーイ試行
$Bernoulli(p)$
bernoulli.rvs(p=p, size=N)
二項分布
$B(n,p)$
np.random.
binomial(n=n, p=p, size=N)
binom.rvs(n=n, p=p, size=N)
ポアソン分布
$Po(L)$
np.random.
poisson(lam=L, size=N)
poisson.rvs(mu=L, size=N)
負の二項分布
$NB(n,p)$
np.random.
negative_binomial(n=n, p=p, size=N)
nbinom.rvs(n=n, p=p, size=N)
幾何分布
$G(p)$
np.random.
geometric(p=p, size=N)
geom.rvs(p=p, size=N)
超幾何分布 $HG(M,n,N)$ np.random.
hypergeometric(ngood, nbad, nsample, size=N)
hypergeom.rvs(M=M, n=n, N=N, size=N)
一様分布(整数) random.
randint(a,b)
random.
randrange(start=a, stop=b, step=1)
np.random.
randint(low=a, high=b+1, size=N)
np.random.
random_integers(low=a, high=b, size=N)
randint.rvs(low=a, high=b+1, size=N)
サンプリング(1個) random.
choice(seq=x)
サンプリング(重複あり)復元抽出 random.
choices(population=x, k=N)
np.random.
choice(a=x, size=N, replace=True, p)
サンプリング(重複なし)非復元抽出 random.
sample(population=x, k=N)
np.random.
choice(a=x, size=N, replace=False, p)
シャッフル random.
shuffle(x)
np.random.
shuffle(x)
np.random.
permutation(x)

注意)指数分布のrandom.expovariate(lambd)の引数lambdは $Exp(\lambda)$ の $\lambda$ (平均の値の逆数)で、本来は "lambda" だが、Pythonの予約語で使えないためこのような表記になっている。

日時操作

記事:https://qiita.com/swathci/private/4dabbfa206ee09766293

日時のデータ型

Python (datetime) R (lubridate) VBA EXCEL
日付 date オブジェクト "Date" クラス Date型(整数部分) Date型(整数部分)
時刻 time オブジェクト "hms" "difftime" クラス Date型(小数部分) Date型(小数部分)
日時 datetime オブジェクト "POSIXct" "POSIXt" クラス Date型 Date型

現在の日時

Python (datetime) R (lubridate) VBA EXCEL
現在の日付 datetime.date.today() today() Date =TODAY()
現在の時刻 datetime.datetime.now().
time()
Time
現在の日時 datetime.datetime.now() now() Now =NOW()

日時型の変換

日付型⇒シリアル値

Python (datetime) R (lubridate) VBA EXCEL
日付 as.numeric(d)
unclass(d)
CLng(d)
時刻 as.numeric(t)
unclass(t)
CDbl(t)
日時 dt.timestamp() as.numeric(dt)
unclass(dt)
CDbl(dt)

シリアル値⇒日時型

Python (datetime) R (lubridate) VBA EXCEL
日付 as_date(d) CDate(d) =A1
時刻 hms::as_hms(t) CDate(t) =A1
日時 datetime.datetime.
fromtimestamp(d)
as_datetime(dt) CDate(dt) =A1

文字列型⇒日時型

Python (datetime) R (lubridate) VBA EXCEL
日付 datetime.datetime.
strptime('s', '%Y/%m/%d').date()
as_date(s)
as.Date(s, "%Y/%m/%d")
ymd(s) 等
CDate(s)
DateValue(s)
=DATEVALUE(A1)
時刻 datetime.datetime.
strptime(s, '%H:%M:%S').time()
hms::as_hms(s) CDate(s)
TimeValue(s)
=TIMEVALUE(A1)
日時 datetime.datetime.
strptime(s, '%Y/%m/%d %H:%M:%S')
as_datetime(s)
ymd_hms(s) 等
CDate(s)

日時型⇒文字列型

Python (datetime) R (lubridate) VBA EXCEL
日付 d.strftime('%Y/%m/%d')
'{0:%Y/%m/%d}'.format(d)
strftime(d, format="%Y/%m/%d") Format(d, "yyyy/mm/dd") =TEXT(A1,"yyyy/mm/dd")
時刻 t.strftime('%H:%M:%S')
'{0:%H:%M:%S}'.format(t)
strftime(t, format="%H:%M:%S") Format(t, "hh:nn:ss") =TEXT(A1,"hh:nn:ss")
日時 dt.strftime('%Y/%m/%d %H:%M:%S')
'{0:%Y/%m/%d %H:%M:%S}'.format(dt)
strftime(dt, format="%Y/%m/%d %H:%M:%S") Format(dt, "yyyy/mm/dd hh:nn:ss") =TEXT(A1,"yyyy/mm/dd hh:nn:ss")

日時の要素⇒日時型

Python (datetime) R (lubridate) VBA EXCEL
日付 datetime.date(2004, 3, 21) make_date(2004, 3, 21) DateSerial(2004, 3, 21) =DATE(2004,3,21)
時刻 datetime.time(12, 34, 56) TimeSerial(12, 34, 56) =TIME(12,34,56)
日時 datetime.datetime(2004, 3, 21, 12, 34, 56) make_datetime(2004, 3, 21, 12, 34, 56) DateSerial(2004, 3, 21)
+ TimeSerial(12, 34, 56)
=DATE(2004,3,21)
+TIME(12,34,56)

日時型⇒日時の要素

Python (datetime) R (lubridate) VBA EXCEL
dt.year year(dt) Year(dt) =YEAR(A1)
dt.month month(dt) Month(dt) =MONTH(A1)
dt.day day(dt) Day(dt) =DAY(A1)
dt.hour hour(dt) Hour(dt) =HOUR(A1)
dt.minute minute(dt) Minute(dt) =MINUTE(A1)
dt.second second(dt) Second(dt) =SECOND(A1)
マイクロ秒 dt.microsecond
日付 dt.date() date(dt)
as_date(dt)
時刻 dt.time()
曜日 dt.weekday() wday(dt)
wday(d, label = T)
Weekday(dt)
WeekdayName(
Weekday(dt))
=WEEKDAY(A1)
年の通算日 yday(dt) DatePart("y", dt)
四半期の通算日 qday(dt)
月の通算日
=日
mday(dt) DatePart("d", dt)
週の通算日
=曜日
wday(dt)
wday(d, label = T)
DatePart("w", dt)
年の通算週
=週
DatePart("ww", dt) =WEEKNUM(A1)
四半期 quarter(dt)
quarter(dt, with_year = T)
半期 semester(dt)
semester(dt, with_year = T)
閏年 leap_year(dt)
午前 am(dt)
午後 pm(dt)
タイムゾーン tz(dt)
タイムゾーン変更 with_tz(dt,
"America/Chicago")

日時の計算

日時の加算

Python (datetime) R (lubridate) VBA EXCEL
dt + years(1) DateAdd("yyyy", 1, dt)
半期
四半期 DateAdd("q", 1, dt)
dt + months(1) DateAdd("m", 1, dt) =EDATE(A1,1)
dt +
datetime.timedelta(weeks=1)
dt + weeks(1) DateAdd("ww", 1, dt) =A1+7
dt +
datetime.timedelta(days=1)
dt + days(1)
d + 1
DateAdd("d", 1, dt)
dt + 1
=A1+1
時間 dt +
datetime.timedelta(hours=1)
dt + hours(1) DateAdd("h", 1, dt)
dt + 1/24
=A1+1/24
dt +
datetime.timedelta(minutes=1)
dt + minutes(1) DateAdd("n", 1, dt)
dt + 1/24/60
=A1+1/24/60
dt +
datetime.timedelta(seconds=1)
dt + seconds(1)
dt + 1
DateAdd("s", 1, dt)
dt + 1/24/60/60
=A1+1/24/60/60

日時の差

Python (datetime) R (lubridate) VBA EXCEL
日付 (d1 - d2).days d1 - d2
interval(dt1, dt2)
dt1 %--% dt2
d1 - d2 =A1-A2
=DAYS(A2,A1)
時刻 (d1 - d2).seconds d1 - d2 =A1-A2
日時 (d1 - d2).total_seconds() d1 - d2 =A1-A2

日時の大小関係

Python (datetime) R (lubridate) VBA EXCEL
d1 > d2 dt1 > dt2 dt1 > dt2 =A1>A2
d1 >= d2 dt1 >= dt2 dt1 >= dt2 =A1>=A2
dt1 == dt2 dt1 == dt2 dt1 = dt2 =A1>A2
dt1 < dt2 dt1 < dt2 dt1 < dt2 =A1<A2
dt1 <= dt2 dt1 <= dt2 dt1 <= dt2 =A1<=A2

日時の丸め処理

Python (datetime) R (lubridate) VBA EXCEL
ラウンド round_date(dt, unit = "day")
天井 ceiling_date(dt, unit = "month")
floor_date(dt, unit = "minute")

References

Python

R

VBA

Excel

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7