Python・R・VBAのまとめ

# はじめに

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

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


**目次**

- [文法](#文法)
    - [基本的な文法](#基本的な文法)
        - [基本的な書き方](#基本的な書き方)
        - [代入](#代入)
        - [入出力](#入出力)
        - [ディレクトリ](#ディレクトリ)
    - [繰り返し](#繰り返し)
    - [条件分岐](#条件分岐)
- [演算](#演算)
    - [基本的な算術演算](#基本的な算術演算)
    - [論理演算・比較演算](#論理演算比較演算)
        - [論理値](#論理値)
        - [比較演算子](#比較演算子)
        - [論理演算子](#論理演算子)
    - [数学関数](#数学関数)
        - [丸め・整数化](#丸め整数化)
        - [符号と絶対値](#符号と絶対値)
        - [べき乗と平方根](#べき乗と平方根)
        - [指数関数と対数関数](#指数関数と対数関数)
        - [三角関数と逆三角関数](#三角関数と逆三角関数)
        - [双曲線関数と逆双曲線関数](#双曲線関数と逆双曲線関数)
        - [ガンマ関数等](#ガンマ関数等)
        - [数学定数](#数学定数)
- [文字列操作](#文字列操作)
    - [文字列の基本的操作](#文字列の基本的操作)
    - [文字列の取り出し](#文字列の取り出し)
    - [文字列の検索](#文字列の検索)
    - [文字列の置換](#文字列の置換)
    - [文字列の変換](#文字列の変換)
    - [文字列のスペース](#文字列のスペース)
    - [アスキーコード](#アスキーコード)
- [ベクトル](#ベクトル)
    - [ベクトルの作成](#ベクトルの作成)
    - [ベクトルの属性](#ベクトルの属性)
    - [要素へのアクセス](#要素へのアクセス)
    - [要素の検索](#要素の検索)
    - [ベクトルの操作](#ベクトルの操作)
    - [集合演算](#集合演算)
    - [ベクトルの要素の置換・結合・挿入](#ベクトルの要素の置換結合挿入)
    - [要素ごとの計算](#要素ごとの計算)
    - [統計量の計算](#統計量の計算)
    - [累積計算](#累積計算)
    - [線形代数の計算](#線形代数の計算)
- [行列](#行列)
    - [行列の作成](#行列の作成)
    - [行列の属性](#行列の属性)
    - [行列の要素](#行列の要素)
    - [線形代数の計算](#線形代数の計算)
    - [行列の要素ごとの演算](#行列の要素ごとの演算)
- [データフレーム](#データフレーム)
    - [データフレームの作成](#データフレームの作成)
    - [データフレームの属性](#データフレームの属性)
    - [データフレームへのアクセス](#データフレームへのアクセス)
    - [データフレームの操作](#データフレームの操作)
    - [データフレームの集計](#データフレームの集計)
    - [データフレームの結合](#データフレームの結合)
- [確率分布](#確率分布)
    - [確率分布](#確率分布)
    - [乱数](#乱数)
        - [Pythonのライブラリの比較](#pythonのライブラリの比較)
- [日時操作](#日時操作)
    - [日時のデータ型](#日時のデータ型)
    - [現在の日時](#現在の日時)
    - [日時型の変換](#日時型の変換)
        - [日付型⇒シリアル値](#日付型シリアル値)
        - [シリアル値⇒日時型](#シリアル値日時型)
        - [文字列型⇒日時型](#文字列型日時型)
        - [日時型⇒文字列型](#日時型文字列型)
        - [日時の要素⇒日時型](#日時の要素日時型)
        - [日時型⇒日時の要素](#日時型日時の要素)
    - [日時の計算](#日時の計算)
        - [日時の加算](#日時の加算)
        - [日時の差](#日時の差)
        - [日時の大小関係](#日時の大小関係)
        - [日時の丸め処理](#日時の丸め処理)
- [References](#references)
    - [Python](#python)
    - [R](#r)
    - [VBA](#vba)
    - [Excel](#excel)



# 文法

## 基本的な文法
記事：https://qiita.com/swathci/items/97de2111e70c10205521

### 基本的な書き方

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


### 代入

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


### 入出力

||Python|R|VBA|
|:--|:--|:--|:--|
|出力|`print()`|`print()`<br>`cat()`|`Debug.Print`<br>`MsgBox`|
|入力|`input()`||`InputBox()`<br>`Application.InputBox()`|


### ディレクトリ

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


## 繰り返し
記事：https://qiita.com/swathci/items/0a5a523480be5737cc2f

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


## 条件分岐
記事：https://qiita.com/swathci/items/2dba6ebf683a11403f12

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


# 演算

## 基本的な算術演算
記事：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 <br> T|True|TRUE|
|偽|False|False <br> F|False|FALSE|
|データ型|bool|logical|Boolean||

### 比較演算子

|演算子|Python|R|VBA|EXCEL|
|:-:|:-:|:-:|:-:|:-:|
|＝|==|==|=|=|
|＜|<|<|<|<|
|＞|>|>|>|>|
|≦|>=|>=|>=|>=|
|≧|<=|<=|<=|>=|
|≠|!=|!=|<>|<>|

### 論理演算子

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

***論理演算の確認***

|演算|演算子|式|結果|
|:-:|:-:|:-:|:-:|
|否定|NOT|NOT T<br>NOT F|F<br>T|
|論理積|AND|T AND T<br>T AND F<br>F AND T<br>F AND T|T<br>F<br>F<br>F|
|論理和|OR|T OR T<br>T OR F<br>F OR T<br>F OR T|T<br>T<br>T<br>F|
|排他的論理和|XOR|T NOR T<br>T XOR F<br>F XOR T<br>F XOR T|F<br>T<br>T<br>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`<br>`.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)`<br>`WorksheetFunction`<br>`.RoundDown(x, 0)`|`=ROUNDDOWN(X,0)`|
|整数部分切り上げ|||`WorksheetFunction`<br>`.RoundUp(X, 0)`|`=ROUNDDOWN(X,0)`|

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


### 符号と絶対値

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


### べき乗と平方根

||Python|R|VBA|EXCEL|
|:-:|:--|:--|:--|:--|
|べき乗|`x ** n`<br>`math.pow(x, n)`|`x ^ n`|`x ^ n`|`=X^N`|
|平方根|`math.sqrt(x)`<br>`x ** (1/2)`<br>`math.pow(x, 1/2)`|`sqrt(x)`<br>`x ^ (1/2)`|`x ^ (1/2)`<br>`WorksheetFunction`<br>`.Power(2, 10)`|`=SQRT(X)`<br>`=X^(1/2)`<br>`=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`<br>`math.expm1(x)`|`exp(x)-1`<br>`expm1(x)`|`Exp(x) - 1`|`=EXP(X) -1`|
|$x^n$|`math.pow(x,n)`<br>`x ** n`|`x ^ n`|`x ^ n`|`=X^N`|
|自然対数 $\log x$|`math.log(x)`|`log(x)`|`Log(x)`<br>`WorksheetFunction`<br>`.Ln(x)`|`=LN(X)`|
|$\log (1+x)$|`math.log(1+x)`<br>`math.log1p(x)`|`log(1+x)`<br>`log1p(x)`|`Log(1 + x)`|`=LN(1+X)`|
|常用対数 $\log_{10} x$|`math.log10(x)`<br>`math.log(x,10)`|`log10(x)`<br>`log(x,10)`|`Log(x) / Log(10)`|`=LOG(X)`<br>`=LOG(X,10)`|
|$\log_{2} x$|`math.log2(x)`<br>`math.log(x,2)`|`log2(x)`<br>`log(x, 2)`|`log10(x)`<br>`log(x, 2)`|`=LOG(X,2)`|
|$\log_{a} x$|`math.log(x,a)`|`log(x,a)`|`log10(x)`<br>`log(a, 10)`|`=LOG(X,A)`|

注意）対数関数の`Log`と`Ln`について、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`<br>`.Asin(y / z)`|`=ASIN(Y/Z)`|
|$\arccos (x/z)$|`math.acos(x/z)`|`acos(x/z)`|`WorksheetFunction`<br>`.Acos(x / z)`|`=ACOS(X/Z)`|
|$\arctan (y/x)$|`math.acos(x/z)`<br>`math.atan2(y,x)`|`atan(y/x)`<br>`atan2(y,x)`|`Atn(y / x)`<br>`WorksheetFunction`<br>`.Atan2(x, y)`|`=ATAN(Y/X)`<br>`=ATAN2(X,Y)`|

注意）最後の [`atan2`](https://ja.wikipedia.org/wiki/Atan2) は、Python・RとExcelワークシート関数で引数の順序が異なることに注意。


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

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


### ガンマ関数等

||Python|R|VBA|EXCEL|
|:-:|:--|:--|:--|:--|
|$\Gamma(x)$|`math.gamma(x)`|`gamma(x)`|`WorksheetFunction`<br>`.Gamma(x)`|`=GAMMA(X)`|
|$\log(\Gamma( x))$|`math.lgamma(x)`|`lgamma(x)`|`WorksheetFunction`<br>`.GammaLn(x)`<br>`WorksheetFunction`<br>`.GammaLn_Precise(x)`|`=GAMMALN(X)`<br>`=GAMMALN.PRECISE(X)`|


### 数学定数

||Python|R|VBA|EXCEL|
|:--|:--|:--|:--|:--|
|円周率 $\pi$|`math.pi`|`pi`|`WorksheetFunction`<br>`.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 = "ａｂｃＤＥＦｇｈｉｊ"
w = "  d   e    f     "
とします。また、EXCELのセルにそれぞれ
A1セル：="abc"
A2セル：="def"
A3セル：="ghij"
A4セル：="abcdefghij"
A5セル：="abcdefghijabcdefghij"
A6セル：="abcDEFghij"
A7セル：="ａｂｃＤＥＦｇｈｉｊ"
A8セル：="  d   e    f     "
が入力されているものとします。

### 文字列の基本的操作

||Python|R|R(stringr)|VBA|EXCEL|結果|
|:--|:--|:--|:--|:--|:--|:--|
|結合|s1 + s2 + s3|paste0(s1, s2, s3)<br>paste(s1, s2, s3, sep="")|str_c(s1, s2, s3)|s1 & s2 & s3|=A1&A2&A3<br>=CONCATENATE(<br>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]<br>s[0:2]<br>s[:2]|substr(s, 1, 2)<br>substring(s, 1, 2)|str_sub(s, 1, 2)|Left(s, 2)|=LEFT(A4,2)|ab|
|右から|s[len(s)-2:len(s)]<br>s[-2:]|substr(s, <br>nchar(s)-2+1, <br>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)<br>=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(<br>A4,"def","DEF")<br>=REPLACE(A4,<br>FIND("def",A4),<br>LEN("def"),"DEF")|abcDEFghij|
|最初の1つだけ置換||sub("def", "DEF", t)|str_replace(t, "def", "DEF")|||abcDEFghij<br>abcdefghij|
|すべて置換|t.replace('def', 'DEF')|gsub("def", "DEF", t)|str_replace_all(t, "def", "DEF")|Replace(t, "def", "DEF")|=SUBSTITUTE(<br>A5,"def","DEF")|abcDEFghij<br>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)<br>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", "Ａ-Ｚａ-ｚ", u)||StrConv(u, vbWide)|=JIS(A6)|ａｂｃＤＥＦｇｈｉｊ|
|半角に||chartr("Ａ-Ｚａ-ｚ", "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|結果|
|:--|:--|:--|:--|:--|:--|:--|
|ベクトル<br>の作成|`[1,2,3,4,5]`|`np.array([1,2,3,4,5])`|`c(1,2,3,4,5)`|`Array(`<br>`1, 2,`<br>` 3, 4,`<br>` 5)`|セル入力|1,2,3,4,5|
|1,...,n|`list(`<br>`range(1,10+1))`|`np.arange(1,10+1)`|`seq(10)`||`=1つ前+1`|1,2,...,10|
|連続する<br>整数列|`list(`<br>`range(1,10+1,1))`|`np.arange(1,10+1,1)`|`1:10`<br>`seq(1,10)`||`=1つ前+1`|1,2,...,10|
|連続する<br>整数列|`list(`<br>`range(10,1-1,-1))`|`np.arange(10,1-1,-1)`|`10:1`<br>`seq(1,10,-1)`||`=1つ前-1`|10,9,...,1|
|等差数列|`list(`<br>`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,`<br>`num=5+1)`|`seq(0,10,`<br>`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を<br>繰り返し|`[0]*10`|`np.zeros(10)`|`numeric(10)`<br>`rep(0,10)`||`=0`|0,0,...,0|
|1,1,2,<br>1,2,3,...|||`sequence(1:3)`<br>`c(seq(1),seq(2),`<br>`seq(3))`<br>`c(1:1,1:2,1:3)`|||1,1,2,1,2,3|
|重複削除|`list(set(`<br>`[1,2,2,3,3,3]))`||`unique(`<br>`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) `<br>`- LBound(v, 1)`<br>` + 1`||
|要素の型|||`typeof(v)`<br>`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)]`<br>`v[-c(1,3,5)]`|||2,4,6,7<br>,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)`<br>`which(v<50)`||`=MATCH(1, ,0)`<br>　|
|条件に合う要素||`v[v<5]`|`v[which(v<5)]`<br>`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]`<br>`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)`<br>`v.sort()`|`np.sort(v)`|`sort(v)`<br>`v[order(v)]`|||1,2,3,4,5|
|降順ソート|`sorted(v,`<br>`reverse=True)`<br>`v.sort(`<br>`reverse=True)`|`np.sort(v)[::-1]`|`rev(sort(v))`<br>`sort(v,`<br>`decreasing=T)`<br>`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,`<br>`[0,25,50,75,100])`<br>`np.quantile(v,`<br>`[0,0.25,0.5,0.75,1])`|`quantile(v)`||`=QUARTILE( ,n)`<br>n： 0,1,2,3,4|第1四分位:2,<br>第3四分位:4|
|summary|||`summary(v)`||||


### 集合演算

```math
\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*}
```

```math
\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)`<br>`a %in% A`|||True|

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


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

||Python|R|VBA|EXCEL|
|:--|:--|:--|:--|:--|
|置換||`replace(v,要素,w)`|||
|結合|`u + v + w`|`c(u,v,w)`<br>`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)`|


### 統計量の計算

```math
\begin{eqnarray*}
&x &=& (x_i)^{n}_i &= (2,4,1,3,5) \\
&y &=& (y_i)^{n}_i &= (1,3,5,7,9)
\end{eqnarray*}
```

```math
\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)`<br>`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)`<br>`=VARP(B2:B6)`|2|
|不偏分散||`np.var(x,ddof=1)`|`var(x)`||`=VAR.S(B2:B6)`<br>`=VAR(B2:B6)`|2.5|
|標準偏差||`np.std(x)`|`sd(x)*sqrt(`<br>`var(x)*(n-1)/n)`||`=STDEV.P(B2:B6)`<br>`=STDEVP(B2:B6)`|1.414|
|不偏標準偏差||`np.std(x,ddof=1)`|`sd(x)`||`=STDEV.S(B2:B6)`<br>`=STDEV(B2:B6)`|1.581|
|共分散|||`cov(x,y)*(n-1)/n`||`=COVARIANCE.P(`<br>`B2:B6,C2:C6)`<br>`=COVAR(`<br>`B2:B6,C2:C6)`|2|
|不偏共分散|||`cov(x,y)`||`=COVARIANCE.S(`<br>`B2:B6,C2:C6)`|2.5|
|相関係数|||`cor(x,y)`||`=CORREL(`<br>`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|
|階差数列<br>前進差分|注意）|`np.diff(x)`|`diff(x)`||`=B3-B2`|2,-3,2,2|
|第n階差||`np.diff(x,n=n)`|||`=B3-B2`|2,-3,2,2|

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


### 線形代数の計算

```math
\begin{eqnarray*}
&x &=& (x_i)^{n}_i &= (2,4,1,3,5) \\
&y &=& (y_i)^{n}_i &= (1,3,5,7,9)
\end{eqnarray*}
```

```math
\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)`<br>`np.sum(v*w)`|`sum(x*y)`||`=SUMPRODUCT(`<br>`B2:B6,C2:C6)`|85|
|ノルム||`np.linalg.norm(v)`<br>`np.sqrt(np.sum(v*v))`|`sqrt(sum(x*x))`||`=SQRT(`<br>`SUMPRODUCT(`<br>`B2:B6,B2:B6))`|7.416|



# 行列
記事：https://qiita.com/swathci/items/715aba6db368f53b3a2e

Pythonでは、Numpyを使います（`import numpy as np`）。

### 行列の作成

```math
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}
```
```math
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行列<br>$A$|`np.array(range(1,12+1)).`<br>`reshape(3,4)`<br>`np.array([`<br>　`[1,2,3,4],`<br>　`[5,6,7,8],`<br> 　`[9,10,11,12]])`|`matrix(1:12,3,4,TRUE)`<br>`rbind(c(1,2,3,4),`<br>　　　 `c(5,6,7,8),`<br>　　　 `c(9,10,11,12))`<br>`cbind(c(1,5,9),`<br>　　　 `c(2,6,10),`<br>　　　 `c(3,7,11),`<br>　　　 `c(4,8,12))`||
|単位行列<br>$I_3$|`np.eye(3)`|`diag(3)`<br>`diag(1, 3)`<br>`diag(1, 3, 3)`|`WorksheetFunction.`<br>`Munit(3)`|`MUNIT(3)`|
|ゼロ行列<br>$O$|`np.zeros((3,4))`|`matrix(0, 3, 4)`<br>`diag(0, 3, 4)`<br>`diag(0, 3)`|||
|対角行列<br>$D$|`np.diag([1,2,3]`|`diag(c(1,2,3))`|||
|１埋め行列|`np.ones((3,4))`||||
|数値埋め行列|`np.full((3,4), 5)`||||


### 行列の属性

```math
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)`<br>`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)`|||


### 行列の要素

```math
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]`<br>`A[0][1]`|`A[1,2]`|`A(1,2)`|=INDEX(A,1,2)|
|1行目の行ベクトル|`A[0,:]`<br>`A[[0],:]`|`A[1,]`|||
|2列目の列ベクトル|`A[:,1]`<br>`A[:,[1]]`|`A[,2]`|||
|1~2行|`A[0:2,]`|`A[1:2,]`|||
|3~4列|`A[:,2:4]`<br>`A[:,-2:]`|`A[,3:4]`|||
|1~2行,3~4列|`A[0:2,2:4]`<br>`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)`<br>`head(A, 2)`|||
|tail||`tail(A)`<br>`tail(A, 2)`|||


### 線形代数の計算

```math
A = \begin{pmatrix}
1 & 2  \\
3 & 4
\end{pmatrix}
,
B = \begin{pmatrix}
5 & 6  \\
7 & 8
\end{pmatrix}
```

```math
k = 2,
kA = \begin{pmatrix}
2 & 4 \\
6 & 8
\end{pmatrix}
```

```math
A + B = \begin{pmatrix}
6 & 8 \\
10 & 12
\end{pmatrix}
,
AB = \begin{pmatrix}
19 & 22 \\
43 & 50
\end{pmatrix}
```

```math
A^T = \begin{pmatrix}
1 & 3 \\
2 & 4
\end{pmatrix}
,
A^{-1} = \begin{pmatrix}
-2 & 1 \\
1.5 & -0.5
\end{pmatrix}
```

```math
detA = -2
,
trA = 5
```

||Python|R|VBA|EXCEL|
|:--|:--|:--|:--|:--|
|スカラー倍<br>$kA$|`A * k`|`A * k`||`=セル*k`|
|行列の和<br>$A+B$|`A + B`|`A + B`||`=セル+セル`|
|行列の積<br>$AB$|`A @ B`<br>`np.dot(A, B)`|`A %*% B`|`WorksheetFunction.`<br>`MMult(A, B)`|`=MMULT(A,B)`|
|転置行列<br>$A^T$|`A.transpose()`<br>`A.T`|`t(A)`|`WorksheetFunction.`<br>`Transpose(A)`|`=Transpose(A)`|
|逆行列<br>$A^{-1}$|`np.linalg.inv(A)`|`solve(A)`|`WorksheetFunction.`<br>`MInverse(A)`|`=MINVERSE(A)`|
|単位行列<br>$I_2$|`np.eye(2)`|`diag(2)`|`WorksheetFunction.`<br>`Munit(2)`|`=MUNIT(2)`|
|行列式<br>$detA$|`np.linalg.det(A)`|`det(A)`|`WorksheetFunction.`<br>`MDeterm(A)`|`=MDETERM(A)`|
|トレース<br>$trA$|`sum(np.diag(A))`|`sum(diag(A))`|`WorksheetFunction.`<br>`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({`<br>`'X': x, `<br>`'Y': y, `<br>`'Z': z})`|`data.frame(`<br>`X = x, `<br>`Y = y, `<br>`Z = z)`|`CREATE TABLE`|


### データフレームの属性

||Python(pandas)|R|SQL|結果|
|:--|:--|:--|:--|:--|
|クラス|`type(df)`|`class(df)`|||
|構造|`df.info()`|`str(df)`|||
|列|`df.columns`<br>`df.columns.values`|`names(df)`<br>`colnames(df)`||'X', 'Y', 'Z'|
|行|`df.index`<br>`df.index.values`|`rownames(df)`<br>`row.names(df)`|||
|値|`df.values`||||
|列数|`len(df.columns)`|`length(df)`<br>`ncol(df)`||3|
|行数|`len(df.index)`<br>`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`<br>`df['X']`|`df$X`<br>`df[["X"]]`<br>`df[[1]]`||ベクトル<br>(20,40,<br>10,30,50)|
||||||
|列指定|`df[['X']]`<br>`df.loc[:,['X']]`|`df[1]`<br>`df["X"]`|`SELECT X `<br>`FROM df;`|データフレーム|
|複数列指定|`df[['X','Z']]`<br>`df.loc[:,['X','Z']]`<br>`df.iloc[:,`<br>`[1-1,3-1]]`|`df[c(1,3)]`<br>`df[c("X","Z")]`|`SELECT Z, X FROM df;`|データフレーム|
||`df[['Z','Y','X']]`<br>`df.loc[:,`<br>`['Z','Y','X']]`<br>`df.iloc[:,`<br>`[3-1,2-1,1-1]]`|`df[c(3,1,2)]`<br>`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]`<br>`df.at[1-1,'X']`<br>`df.iloc[1-1,1-1]`<br>`df.loc[1-1,'X']`<br>`df['X'][1-1]`<br>`df.X[1-1]`|`df[1,1]`<br>`df[1,"X"]`<br>`df[[1,1]]`<br>`df[[1,"X"]]`<br>`df$X[1]`<br>`df[["X"]][1]`||値<br>20|
|複数行・複数列指定|`df.iloc[`<br>`[1-1,3-1],[1-1,3-1]]`<br>`df.loc[`<br>`[1-1,3-1],['X','Z']]`|`df[c(1,3),c(1,3)]`<br>`df[c(1,3),c("X","Z")]`<br>`df[c(T,F,T,F,F),`<br>`c(T,F,T)]`||データフレーム|
|複数列指定|`df.iloc[:,[1-1,3-1]]`<br>`df.loc[:,['X','Z']]`<br>`df[['X','Z']]`|`df[,c(1,3)]`<br>`df[,c("X","Z")]`<br>`df[,c(T,F,T)]`||データフレーム|
|複数行指定|`df.iloc[[1-1,3-1],:]`<br>`df.loc[[1-1,3-1],:]`<br>`df.iloc[[1-1,3-1]]`<br>`df.loc[[1-1,3-1]]`|`df[c(1,3),]`<br>`df[c(T,F,T,F,F),]`||データフレーム|

注意）


### データフレームの操作

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


### データフレームの集計

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


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

### 確率分布
記事：https://qiita.com/swathci/items/7d528fcb34a2e31a8127

- $X$ ：[確率変数](https://ja.wikipedia.org/wiki/確率変数) 
- $f_{X}(x)$ ：[確率密度関数](https://ja.wikipedia.org/wiki/確率密度関数)（probability density function; PDF）
- $F_{X}(x)$ ：[累積分布関数](https://ja.wikipedia.org/wiki/累積分布関数)（cumulative distribution function; CDF）
- $\bar{F_X}(x)$ ：[相補累積分布関数](https://ja.wikipedia.org/wiki/累積分布関数#相補累積分布関数)（complementary cumulative distribution function; CCDF)（上側確率（upper-tail probability）, 生存関数（survival function））
- $G_{X}(p)$ ：[分位関数](https://ja.wikipedia.org/wiki/累積分布関数#分位関数)（quantile function）（分位点関数）

```math
\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|
|:--|:--|:--|:--|:--|
|確率密度関数<br>（pdf）$f(x)$|`xxx.pdf(x, ...)`|`dxxx(x, ...)`|||
|確率分布関数<br>（cdf）$F(x)$|`xxx.cdf(x, ...)`|`pxxx(x, ...)`|||
|分位関数<br>（ppf）$G(p)$|`xxx.ppf(p, ...)`|`qxxx(p, ...)`|||
|乱数<br>（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)` など。
注意）乱数については、[こちら](https://qiita.com/swathci/items/c2f0bf1d684099963c61#%E4%B8%80%E8%A6%A7)参照。
注意）Pythonでは、`scipy.stats`から、必要な関数をインポートしたうえで使用。
`from scipy.stats import uniform, norm, chi2, t, f, beta, gamma, lognorm, expon`、`from scipy.stats import bernoulli, binom, poisson, nbinom, geom, hypergeom, randint`


### 乱数
記事：https://qiita.com/swathci/items/c2f0bf1d684099963c61

||Python|R|VBA|EXCEL|
|:--|:--|:--|:--|:--|
|[一様分布](https://ja.wikipedia.org/wiki/一様分布) <br>$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`|
|[正規分布](https://ja.wikipedia.org/wiki/正規分布) <br>$N(m,s^2)$|`norm.rvs(loc=m, scale=s, size=N)`|`rnorm(n=N, mean=m, sd=s)`|`WorksheetFunction.`<br>`Norm_Inv(Rnd, m, s)`|`=NORM.INV(`<br>`RAND(),m,s)`|
|[t分布](https://ja.wikipedia.org/wiki/T分布) <br>$t(n)$|`t.rvs(df=n, size=N)`|`rt(n=N, df=n)`|`WorksheetFunction.`<br>`T_Inv(Rnd, n)`|`=T.INV(`<br>`RAND(),n)`|
|[カイ二乗分布](https://ja.wikipedia.org/wiki/カイ二乗分布) <br>$\chi^2(n)$|`chi2.rvs(df=n, size=N)`|`rchisq(n=N, df=n)`|`WorksheetFunction.`<br>`ChiSq_Inv(Rnd, n)`|`=CHISQ.INV(`<br>`RAND(),n)`|
|[F分布](https://ja.wikipedia.org/wiki/F分布) <br>$F(n,m)$|`f.rvs(dfn=n, dfd=m, size=N)`|`rf(n=N, df1=n, df2=m)`|`WorksheetFunction.`<br>`F_Inv(Rnd, n, m)`|`=F.INV(`<br>`RAND(),n,m)`|
|[ベータ分布](https://ja.wikipedia.org/wiki/ベータ分布) <br>$Be(a,b)$|`beta.rvs(a=a, b=b, size=N)`|`rbeta(n=N, shape1=a, shape2=b)`|`WorksheetFunction.`<br>`Beta_Inv(Rnd, a, b)`|`=BETA.INV(`<br>`RAND(),a,b)`|
|[ガンマ分布](https://ja.wikipedia.org/wiki/ガンマ分布) <br>$Ga(k,theta)$|`gamma.rvs(a=k, scale=theta, size=N)`|`rgamma(n=N, shape=k, scale=theta)`|`WorksheetFunction.`<br>`Gamma_Inv(Rnd, a, b)`|`=GAMMA.INV(`<br>`RAND(),a,b)`|
|[指数分布](https://ja.wikipedia.org/wiki/指数分布) <br>$Exp(L)$|`expon.rvs(loc=0, scale=1/L, size=N)`|`rexp(n=N, rate=L)`|`WorksheetFunction.`<br>`Gamma_Inv(Rnd, 1, L)`|`=GAMMA.INV(`<br>`RAND(),1,L)`|
|[対数正規分布](https://ja.wikipedia.org/wiki/対数正規分布) <br>$LN(mu,s)$|`lognorm.rvs(s=s, scale=np.exp(m), size=N)`|`rlnorm(n=N, meanlog=m, sdlog=s)`|`WorksheetFunction.`<br>`LogNorm_Inv(Rnd, m, s)`|`=LOGNORM.INV(`<br>`RAND(),m,s)`|
|[ベルヌーイ試行](https://ja.wikipedia.org/wiki/ベルヌーイ試行) <br>$Bernoulli(p)$|`bernoulli.rvs(p=p, size=N)`|`rbinom(n=N, size=1, prob=p)`|||
|[二項分布](https://ja.wikipedia.org/wiki/二項分布) <br>$B(n,p)$|`binom.rvs(n=n, p=p, size=N)`|`rbinom(n=N, size=n, prob=p)`|||
|[ポアソン分布](https://ja.wikipedia.org/wiki/ポアソン分布) <br>$Po(L)$|`poisson.rvs(mu=L, size=N)`|`rpois(n=N, lambda=L)`||||
|[負の二項分布](https://ja.wikipedia.org/wiki/負の二項分布) <br>$NB(n,p)$|`nbinom.rvs(n=n, p=p, size=N)`|`rnbinom(n=N, size=n, prob=p)`|||
|[幾何分布](https://ja.wikipedia.org/wiki/幾何分布) <br>$G(p)$|`geom.rvs(p=p, size=N)`|`rgeom(n=N, prob=p)`|||
|[超幾何分布](https://ja.wikipedia.org/wiki/超幾何分布) $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)`<br>`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, expon`、`from 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`|
|[一様分布](https://ja.wikipedia.org/wiki/一様分布) <br>$U(0,1)$|`random.random()`|`np.random.`<br>`rand(N)`<br>`np.random.`<br>`random_sample(size=N)`<br>`np.random.`<br>`random(size=N)`<br>`np.random.`<br>`ranf(size=N)`<br>`np.random.`<br>`sample(size=N)`|`uniform.rvs(loc=a, scale=b-a, size=N)`|
|[一様分布](https://ja.wikipedia.org/wiki/一様分布) <br>$U(a,b)$|`random.`<br>`uniform(a, b)`|`np.random.`<br>`uniform(low=a, high=b, size=N)`|`uniform.rvs(loc=a, scale=b-a, size=N)`|
|標準正規分布 <br>$N(0,1)$|`random.`<br>`gauss(0, 1)`<br>`random.`<br>`normalvariate(0, 1)`|`np.random.`<br>`randn(N)`<br>`np.random.`<br>`standard_normal(size=N)`|`norm.rvs(loc=m, scale=s, size=N)`|
|[正規分布](https://ja.wikipedia.org/wiki/正規分布) <br>$N(m,s^2)$|`random.`<br>`gauss(mu=m, sigma=s)`<br>`random.`<br>`normalvariate(mu=m, sigma=s)`|`np.random.`<br>`normal(loc=m, scale=s, size=N)`|`norm.rvs(loc=m, scale=s, size=N)`|
|[t分布](https://ja.wikipedia.org/wiki/T分布) <br>$t(n)$||`np.random.`<br>`standard_t(df=n, size=N)`|`t.rvs(df=n, size=N)`|
|[カイ二乗分布](https://ja.wikipedia.org/wiki/カイ二乗分布) <br>$\chi^2(n)$||`np.random.`<br>`chisquare(df=n, size=N)`|`chi2.rvs(df=n, size=N)`|
|[F分布](https://ja.wikipedia.org/wiki/F分布) <br>$F(n,m)$||`np.random.`<br>`f(dfnum=n, dfden=m, size=N)`|`f.rvs(dfn=n, dfd=m, size=N)`|
|[ベータ分布](https://ja.wikipedia.org/wiki/ベータ分布) <br>$Be(a,b)$|`random.`<br>`betavariate(alpha, beta)`|`np.random.`<br>`beta(a, b, size=N)`|`beta.rvs(a=a, b=b, size=N)`|
|[ガンマ分布](https://ja.wikipedia.org/wiki/ガンマ分布) <br>$Ga(k,theta)$|`random.`<br>`gammavariate(alpha, beta)`|`np.random.`<br>`gamma(shape, scale, size=N)`|`gamma.rvs(a=k, scale=theta, size=N)`|
|[指数分布](https://ja.wikipedia.org/wiki/指数分布) <br>$Exp(L)$|`random.`<br>`expovariate(lambd)`|`np.random.`<br>`exponential(scale=1/L, size=N)`|`expon.rvs(loc=0, scale=1/L, size=N)`|
|[対数正規分布](https://ja.wikipedia.org/wiki/対数正規分布) <br>$LN(mu,s)$|`random.`<br>`lognormvariate(mu=m, sigma=s)`|`np.random.`<br>`lognormal(mean=m, sigma=s, size=N)`|`lognorm.rvs(s=s, scale=np.exp(m), size=N)`|
|[ベルヌーイ試行](https://ja.wikipedia.org/wiki/ベルヌーイ試行) <br>$Bernoulli(p)$|||`bernoulli.rvs(p=p, size=N)`|
|[二項分布](https://ja.wikipedia.org/wiki/二項分布) <br>$B(n,p)$||`np.random.`<br>`binomial(n=n, p=p, size=N)`|`binom.rvs(n=n, p=p, size=N)`|
|[ポアソン分布](https://ja.wikipedia.org/wiki/ポアソン分布) <br>$Po(L)$||`np.random.`<br>`poisson(lam=L, size=N)`|`poisson.rvs(mu=L, size=N)`|
|[負の二項分布](https://ja.wikipedia.org/wiki/負の二項分布) <br>$NB(n,p)$||`np.random.`<br>`negative_binomial(n=n, p=p, size=N)`|`nbinom.rvs(n=n, p=p, size=N)`|
|[幾何分布](https://ja.wikipedia.org/wiki/幾何分布) <br>$G(p)$||`np.random.`<br>`geometric(p=p, size=N)`|`geom.rvs(p=p, size=N)`|
|[超幾何分布](https://ja.wikipedia.org/wiki/超幾何分布) $HG(M,n,N)$||`np.random.`<br>`hypergeometric(ngood, nbad, nsample, size=N)`|`hypergeom.rvs(M=M, n=n, N=N, size=N)`|
|一様分布（整数）|`random.`<br>`randint(a,b)`<br>`random.`<br>`randrange(start=a, stop=b, step=1)`|`np.random.`<br>`randint(low=a, high=b+1, size=N)`<br>`np.random.`<br>`random_integers(low=a, high=b, size=N)`|`randint.rvs(low=a, high=b+1, size=N)`|
|サンプリング（１個）|`random.`<br>`choice(seq=x)`|||
|サンプリング（重複あり）復元抽出|`random.`<br>`choices(population=x, k=N)`|`np.random.`<br>`choice(a=x, size=N, replace=True, p)`||
|サンプリング（重複なし）非復元抽出|`random.`<br>`sample(population=x, k=N)`|`np.random.`<br>`choice(a=x, size=N, replace=False, p)`||
|シャッフル|`random.`<br>`shuffle(x)`|`np.random.`<br>`shuffle(x)`<br>`np.random.`<br>`permutation(x)`|

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

- Python標準ライブラリの[random](https://docs.python.org/ja/3/library/random.html)モジュール
- Numpyの[numpy.random](https://docs.scipy.org/doc/numpy-1.12.0/reference/routines.random.html)モジュール
- SciPyの[scipy.stats](https://docs.scipy.org/doc/scipy/reference/stats.html)モジュール


# 日時操作
記事：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().<br>time()||Time||
|現在の日時|datetime.datetime.now()|now()|Now|=NOW()|

## 日時型の変換

### 日付型⇒シリアル値

||Python (datetime)|R (lubridate)|VBA|EXCEL|
|:-|:-|:-|:-|:-|
|日付||as.numeric(d)<br>unclass(d)|CLng(d)||
|時刻||as.numeric(t)<br>unclass(t)|CDbl(t)||
|日時|dt.timestamp()|as.numeric(dt)<br>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.<br>fromtimestamp(d)|as_datetime(dt)|CDate(dt)|=A1|

### 文字列型⇒日時型

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

### 日時型⇒文字列型

||Python (datetime)|R (lubridate)|VBA|EXCEL|
|:-|:-|:-|:-|:-|
|日付|d.strftime('%Y/%m/%d') <br>'{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') <br>'{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') <br>'{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) <br>+ TimeSerial(12, 34, 56)|=DATE(2004,3,21)<br>+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) <br>as_date(dt)|||
|時刻|dt.time()||||
|曜日|dt.weekday()|wday(dt) <br>wday(d, label = T)|Weekday(dt) <br>WeekdayName(<br>Weekday(dt))|=WEEKDAY(A1)|
|年の通算日||yday(dt)|DatePart("y", dt)||
|四半期の通算日||qday(dt)|||
|月の通算日<br>＝日||mday(dt)|DatePart("d", dt)||
|週の通算日<br>＝曜日||wday(dt) <br>wday(d, label = T)|DatePart("w", dt)||
|年の通算週<br>＝週|||DatePart("ww", dt)|=WEEKNUM(A1)|
|四半期||quarter(dt) <br>quarter(dt, with_year = T)|||
|半期||semester(dt) <br>semester(dt, with_year = T)|||
|閏年||leap_year(dt)|||
|午前||am(dt)|||
|午後||pm(dt)|||
|タイムゾーン||tz(dt)|||
|タイムゾーン変更||with_tz(dt, <br>"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 + <br>datetime.timedelta(weeks=1)|dt + weeks(1)|DateAdd("ww", 1, dt)|=A1+7|
|日|dt + <br>datetime.timedelta(days=1)|dt + days(1) <br>d + 1|DateAdd("d", 1, dt) <br>dt + 1|=A1+1|
|時間|dt + <br>datetime.timedelta(hours=1)|dt + hours(1)|DateAdd("h", 1, dt) <br>dt + 1/24|=A1+1/24|
|分|dt + <br>datetime.timedelta(minutes=1)|dt + minutes(1)|DateAdd("n", 1, dt) <br>dt + 1/24/60|=A1+1/24/60|
|秒|dt + <br>datetime.timedelta(seconds=1)|dt + seconds(1)<br>dt + 1|DateAdd("s", 1, dt) <br>dt + 1/24/60/60|=A1+1/24/60/60|

### 日時の差

||Python (datetime)|R (lubridate)|VBA|EXCEL|
|:-|:-|:-|:-|:-|
|日付|(d1 - d2).days|d1 - d2 <br>interval(dt1, dt2) <br>dt1 %--% dt2|d1 - d2|=A1-A2 <br>=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
- [Python ドキュメント](https://docs.python.org/ja/3/)
    - [Python チュートリアル](https://docs.python.org/ja/3/tutorial/index.html)
    - [Python 標準ライブラリ](https://docs.python.org/ja/3/library/index.html)
        - [組み込み関数](https://docs.python.org/ja/3/library/functions.html)
        - [組み込み定数](https://docs.python.org/ja/3/library/constants.html)
        - [組み込み型](https://docs.python.org/ja/3/library/stdtypes.html)
        - [テキスト処理サービス](https://docs.python.org/ja/3/library/text.html)
        - [データ型](https://docs.python.org/ja/3/library/datatypes.html)
        - [数値と数学モジュール](https://docs.python.org/ja/3/library/numeric.html)
        - [ファイルとディレクトリへのアクセス](https://docs.python.org/ja/3/library/filesys.html)
    - [Python 言語リファレンス](https://docs.python.org/ja/3/reference/index.html)
- [Python ドキュメント](https://docs.python.org/ja/3/)
    - [Python チュートリアル](https://docs.python.org/ja/3/tutorial/index.html)
- [NumPy Documentation](https://numpy.org/doc/)
    - [NumPy Documentation](https://numpy.org/doc/stable/)
        - [Quickstart tutorial](https://numpy.org/doc/stable/user/quickstart.html)
        - [Absolute Beginners Tutorial](https://numpy.org/doc/stable/user/absolute_beginners.html)
        - [Tutorials](https://numpy.org/doc/stable/user/tutorials_index.html)
        - [NumPy Reference](https://numpy.org/doc/stable/reference/)
            - [Array objects](https://numpy.org/doc/stable/reference/arrays.html)
            - [Constants](https://numpy.org/doc/stable/reference/constants.html)
            - [Universal functions](https://numpy.org/doc/stable/reference/ufuncs.html)
            - [Routines](https://numpy.org/doc/stable/reference/routines.html)
                - [Array creation routines](https://numpy.org/doc/stable/reference/routines.array-creation.html)
                - [Array manipulation routines](https://numpy.org/doc/stable/reference/routines.array-manipulation.html)
                - [Mathematical functions](https://numpy.org/doc/stable/reference/routines.math.html)
                - [Linear algebra](https://numpy.org/doc/stable/reference/routines.linalg.html)
                - [Matrix library](https://numpy.org/doc/stable/reference/routines.matlib.html)
                - [Random sampling](https://numpy.org/doc/stable/reference/random/index.html)
                - [Statistics](https://numpy.org/doc/stable/reference/routines.statistics.html)
                - [Sorting, searching, and counting](https://numpy.org/doc/stable/reference/routines.sort.html)
- [Numpy and Scipy Documentation](https://docs.scipy.org/doc/)
    - [Scipy Reference Guide](https://docs.scipy.org/doc/scipy/reference/)
        - [SciPy Tutorial](https://docs.scipy.org/doc/scipy/reference/tutorial/index.html)
        - [API Reference](https://docs.scipy.org/doc/scipy/reference/#api-reference)
- [pandas](https://pandas.pydata.org/)
    - [Getting started](https://pandas.pydata.org/docs/getting_started/index.html)
    - [User Guide](https://pandas.pydata.org/docs/user_guide/index.html)
        - [10 minutes to pandas](https://pandas.pydata.org/pandas-docs/stable/user_guide/10min.html)
        - [Intro to data structures](https://pandas.pydata.org/pandas-docs/stable/user_guide/dsintro.html)
        - [Essential basic functionality](https://pandas.pydata.org/pandas-docs/stable/user_guide/basics.html)
    - [API reference](https://pandas.pydata.org/docs/reference/index.html)
        - [Series](https://pandas.pydata.org/docs/reference/series.html)
        - [DataFrame](https://pandas.pydata.org/docs/reference/frame.html)
        - [General functions](https://pandas.pydata.org/docs/reference/general_functions.html)

### R
- [The R Project for Statistical Computing](https://www.r-project.org/index.html)
    - [The Comprehensive R Archive Network](https://cran.r-project.org/index.html)
    - [Getting Help with R](https://www.r-project.org/help.html)
    - [The R Manuals](https://cran.r-project.org/manuals.html)
        - [An Introduction to R](https://cran.r-project.org/doc/manuals/r-release/R-intro.html)
        - [R Data Import/Export](https://cran.r-project.org/doc/manuals/r-release/R-data.html)
        - [The R language definition](R Language Definition)
        - [The R Reference Index: contains all help files of the R standard and recommended packages in printable form.](https://cran.r-project.org/doc/manuals/r-release/fullrefman.pdf)
- [RjpWiki](http://www.okadajp.org/RWiki/)
    - [RjpWiki カテゴリー別見取り図](http://www.okadajp.org/RWiki/?RjpWiki+カテゴリー別見取り図)
        - [Tips](http://www.okadajp.org/RWiki/?RjpWiki+カテゴリー別見取り図#j9c658ce)
            - 一般
            - R プログラミング Tips
                - [RプログラミングTips大全](http://www.okadajp.org/RWiki/?RプログラミングTips大全)
                - [ベクトル・行列・配列・リストTips大全](http://www.okadajp.org/RWiki/?ベクトル・行列・配列・リストTips大全)
                - [ベクトルTips大全](http://www.okadajp.org/RWiki/?ベクトルTips大全)
                - [行列Tips大全](http://www.okadajp.org/RWiki/?行列Tips大全)
                - [配列Tips大全](http://www.okadajp.org/RWiki/?配列Tips大全)
                - [配列の外積、クロネッカー積](http://www.okadajp.org/RWiki/?配列の外積、クロネッカー積)
                - [リストTips大全](http://www.okadajp.org/RWiki/?リストTips大全)
                - [Rの統計解析関数Tips](http://www.okadajp.org/RWiki/?Rの統計解析関数Tips)
                - [Rの確率分布システム](http://www.okadajp.org/RWiki/?Rにおける確率分布)
                - [乱数Tips大全](http://www.okadajp.org/RWiki/?乱数Tips大全)
                - [NA,NaN,NULL,Inf](http://www.okadajp.org/RWiki/?NA%2CNaN%2CNULL%2CInf)
                - [Rの関数定義の基本](http://www.okadajp.org/RWiki/?Rの関数定義の基本)
                - [データフレーム Tips 大全](http://www.okadajp.org/RWiki/?データフレームTips大全)
            - 文字列処理
            - Rコードの最適化
            - 他言語利用
        - [Rの基本パッケージ中の関数一覧](http://www.okadajp.org/RWiki/?RjpWiki+カテゴリー別見取り図#z4c1cae0)
            - Rの基本パッケージ中の回帰、分散分析関数一覧
            - Rの基本パッケージ中の確率分布、乱数関数一覧
            - Rの基本パッケージ中の古典的検定関数一覧
            - Rの基本パッケージ中の行列分解関数一覧
            - Rの基本パッケージ中の最適化関数一覧
            - Rの基本パッケージ中の時系列オブジェクト一覧
            - Rの基本パッケージ中の多変量解析関数一覧
            - Rの基本パッケージ中の平滑化関数一覧
            - R の標準パッケージ中の統計関連オブジェクトのカテゴリ化された簡易説明
            - Rの古典的検定関数一覧
            - 時系列パッケージtsの内容一覧
    - [Rの組み込み定数文字ベクトル、定数値](http://www.okadajp.org/RWiki/?Rの組み込み定数文字ベクトル、定数値)
    - [ページの一覧](http://www.okadajp.org/RWiki/?cmd=list)
        - [base(基本)一覧](http://www.okadajp.org/RWiki/?base%28基本%29一覧)
            - データセット(52種類)
            - 確率分布・乱数
            - モデル・回帰分析・分散分析・実験計画法
            - 算術・基本演算
            - 数学関数
            - 論理演算
            - プログラミング
            - グラフィックスデバイス
            - プロット
            - ユーティリティー
            - 諸関数
            - カテゴリカルデータ
            - 環境
            - ファイル操作・入出力
            - ベクトル・行列・配列・データフレーム
            - 行列分解・最適化
            - 文字列操作
            - オブジェクト・クラス・メソッド
            - 時系列 (より本格的な時系列解析用の関数はパッケージ ts に入っています)
            - プリント
            - インタフェイス・ドキュメント・その他
            - 日付・時刻
        - [base(基本)一覧(ABC順)](http://www.okadajp.org/RWiki/?base%28基本%29一覧%28ABC順%29)
- [R-Tips](http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html)
    - 入 門 篇
    - ベクトル篇
    - 行列・配列・リスト篇
    - 関数とプログラミング篇
    - 数値計算篇
    - データフレーム篇
    - グラフィックス篇
    - 統計解析篇
 - [PDF版 R-Tips](http://cse.naro.affrc.go.jp/takezawa/r-tips.pdf)
- [R for Data Science (r4ds)](https://r4ds.had.co.nz/)
- パッケージ
    - Rの標準機能：[Package Index](https://stat.ethz.ch/R-manual/R-devel/doc/html/packages.html)
    - 用途別パッケージの紹介：[CRAN Task Views](https://cran.r-project.org/web/views/)
    - [R Packages](https://rstudio.com/products/rpackages/)
        - [Tidyverse]()
        - [ggplot2 — きれいなグラフを簡単に合理的に](https://heavywatal.github.io/rstats/ggplot2.html)
        - [dplyr — 高速data.frame処理](https://heavywatal.github.io/rstats/dplyr.html)
        - [tidyr — シンプルなデータ変形ツール](https://heavywatal.github.io/rstats/tidyr.html)
        - [purrr — ループ処理やapply系関数の決定版](https://heavywatal.github.io/rstats/purrr.html)
        - [readr — 高速で柔軟なテーブル読み込み](https://heavywatal.github.io/rstats/readr.html)
        - [stringr — Rの文字列をまともな方法で処理する](https://heavywatal.github.io/rstats/stringr.html)
- [biostatistics](https://stats.biopapyrus.jp/)
    - [biostatistics R](https://stats.biopapyrus.jp/r/)

### VBA
- [Office VBA リファレンス](https://docs.microsoft.com/ja-jp/office/vba/api/overview/)
    - [Excel VBA リファレンス](https://docs.microsoft.com/ja-jp/office/vba/api/overview/excel)
        - オブジェクト モデル
            - [WorksheetFunction オブジェクト](https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheetfunction)
                - [メソッド](https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheetfunction#methods)
    - [言語リファレンス](https://docs.microsoft.com/ja-jp/office/vba/api/overview/language-reference)
        - 概念
            - [Visual Basic の概念](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/visual-basic-conceptual-topics)
            - [Microsoft Forms の概念](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/concepts-microsoft-forms)
        - [リファレンス](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/visual-basic-language-reference)
            - [文字セット](https://docs.microsoft.com/ja-jp/office/vba/language/reference/character-sets)
            - [定数](https://docs.microsoft.com/ja-jp/office/vba/language/reference/constants-visual-basic-for-applications)
            - [データ型](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/data-type-summary)
            - [ディレクティブ](https://docs.microsoft.com/ja-jp/office/vba/language/reference/directives)
            - [イベント](https://docs.microsoft.com/ja-jp/office/vba/language/reference/events-visual-basic-for-applications)
            - [関数](https://docs.microsoft.com/ja-jp/office/vba/language/reference/functions-visual-basic-for-applications)
            - [キーワード](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/keywords-by-task)
            - [Microsoft Forms](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/reference-microsoft-forms)
            - [オブジェクト (Visual Basic for Applications)](https://docs.microsoft.com/ja-jp/office/vba/language/reference/objects-visual-basic-for-applications)
            - [演算子](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/operator-summary)
            - [ステートメント](https://docs.microsoft.com/ja-jp/office/vba/language/reference/statements)
            - [Visual Basic アドイン モデル](https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/visual-basic-add-in-model-reference)
        - 用語集
            - [VBA 用語集](https://docs.microsoft.com/ja-jp/office/vba/language/glossary/glossary-vba)
            - [VBE 用語集](https://docs.microsoft.com/ja-jp/office/vba/language/glossary/vbe-glossary)
    - [ライブラリ リファレンス](https://docs.microsoft.com/ja-jp/office/vba/api/overview/library-reference)


### Excel
- [Excel のヘルプとラーニング](https://support.microsoft.com/ja-jp/excel)
    - [数式と関数](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP)
        - [数式](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#ID0EAABAAA=Formulas)
        - [関数](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#id0eaabaaa=functions)
           - [Excel 関数 (アルファベット順)](https://support.microsoft.com/ja-jp/office/excel-関数-アルファベット順-b3944572-255d-4efb-bb96-c6d90033e188)
           - [Excel 関数 (機能別)](https://support.microsoft.com/ja-jp/office/excel-関数-機能別-5f91f4e9-7b42-46d2-9bd1-63f26a86c0eb)
        - [論理](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#ID0EAABAAA=Logical)
        - [行列](https://support.microsoft.com/ja-jp/office/%e6%95%b0%e5%bc%8f%e3%81%a8%e9%96%a2%e6%95%b0-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#ID0EAABAAA=Reference)
        - [その他の関数](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#ID0EAABAAA=More_functions)
        - [エラー](https://support.microsoft.com/ja-jp/office/数式と関数-294d9486-b332-48ed-b489-abe7d0f9eda9?ui=ja-JP&rs=ja-JP&ad=JP#ID0EAABAAA=Errors)
    - リファレンス
        - [論理関数 (リファレンス)](https://support.microsoft.com/ja-jp/office/論理関数-リファレンス-e093c192-278b-43f6-8c3a-b6ce299931f5)
        - [検索/行列関数 (リファレンス)](https://support.microsoft.com/ja-jp/office/検索-行列関数-リファレンス-8aa21a3a-b56a-4055-8257-3ec89df2b23e)
        - [日付と時刻の関数 (リファレンス)](https://support.microsoft.com/ja-jp/office/日付と時刻の関数-リファレンス-fd1b5961-c1ae-4677-be58-074152f97b81)
        - [文字列関数 (リファレンス)](https://support.microsoft.com/ja-jp/office/文字列関数-リファレンス-cccd86ad-547d-4ea9-a065-7bb697c2a56e)
        - [統計関数 (リファレンス)](https://support.microsoft.com/ja-jp/office/統計関数-参照-624dac86-a375-4435-bc25-76d659719ffd)