[Python]転置行列を作成する
NumPyモジュールによるndarrayを使用した例。T属性(「アトリビュート」とも)を使う。モジュールはnpという別名を与えて使っている。
>>> import numpy as np
>>> a = np.array([[1, 2, 3], [4, 5, 6], [9, 9, 8]])
>>> print(a)
[[1 2 3]
[4 5 6]
[9 9 8]]
>>> print(a.T)
[[1 4 9]
[2 5 9]
[3 6 8]]
« 2020年8月 | トップページ | 2020年10月 »
NumPyモジュールによるndarrayを使用した例。T属性(「アトリビュート」とも)を使う。モジュールはnpという別名を与えて使っている。
>>> import numpy as np
>>> a = np.array([[1, 2, 3], [4, 5, 6], [9, 9, 8]])
>>> print(a)
[[1 2 3]
[4 5 6]
[9 9 8]]
>>> print(a.T)
[[1 4 9]
[2 5 9]
[3 6 8]]
numpyモジュールによる行列を使用した例。モジュールはnpという別名を与えて使っている。
>>> import numpy as np
>>> a1 = np.array([[1, 2], [3, 4]])
>>> a2 = np.array([[5, 6, 7], [8, 9, 10]])
>>> print(a1)
[[1 2]
[3 4]]
>>> print(a2)
[[ 5 6 7]
[ 8 9 10]]
>>> np.dot(a1, a2)
array([[21, 24, 27],
[47, 54, 61]])
1から10までの10個の数値における、平均、偏差平方和、分散、標準偏差を求める。それぞれ、組み込み関数をなるべく使わない方法と、組み込み関数を使う方法を示す。
計算対象の数値ベクトルをd、その数値の数をn、平均からの偏差平方和をdss、分散をs2、標準偏差をsとする。
> d <- 1:10
> d
[1] 1 2 3 4 5 6 7 8 9 10
> n <- length(d)
> n
[1] 10
平均を求めるときはmean関数を使う。
> sum(d) / n
[1] 5.5
> m <- mean(d)
> m
[1] 5.5
分散を求めるときはvar関数、標準偏差を求めるときはsd関数を使う。
> dss / (n - 1)
[1] 9.166667
> s2 <- var(d)
> s2
[1] 9.166667
> sqrt(dss / (n - 1))
[1] 3.02765
> s <- sd(d)
> s
[1] 3.02765
ただし、var関数で得られる値は上記のとおりに不偏分散(偏差平方和を「標本数-1」で割った値)、sd関数で得られる値は不偏分散の平方根であることに注意。
偏差平方和を標本数で割った分散と標準偏差を求めるための自作関数vari、stdをそれぞれ作って試してみる。
> dss / n
[1] 8.25
> vari <- function(d) sum((d - mean(d)) ^ 2 / length(d))
> vari(d)
[1] 8.25
> sqrt(dss / n)
[1] 2.872281
> std <- function(d) sqrt(sum((d - mean(d)) ^ 2 / length(d)))
> std(d)
[1] 2.872281
as.matrix関数を使う。ただ変換しただけでは列名が残ってしまう。列名を消すにはunname関数を使う。
以下のようなテキストファイルdata.txtがカレントディレクトリにあったとする。
1,165,53,86,56,92
2,160,47,84,52,92
3,166,55,86,64,89
4,164,56,90,60,95
5,168,55,87,56,87
6,164,54,87,57,92
7,168,54,94,58,97
8,169,55,88,57,92
9,169,53,86,58,93
10,166,56,84,57,90
read.csv関数で読み込むとデータフレームになるが、それを行列に変換する。
> dtf <- read.csv("data.txt", header = FALSE)
> dtf
V1 V2 V3 V4 V5 V6
1 1 165 53 86 56 92
2 2 160 47 84 52 92
3 3 166 55 86 64 89
4 4 164 56 90 60 95
5 5 168 55 87 56 87
6 6 164 54 87 57 92
7 7 168 54 94 58 97
8 8 169 55 88 57 92
9 9 169 53 86 58 93
10 10 166 56 84 57 90
> mx <- as.matrix(dtf)
> mx
V1 V2 V3 V4 V5 V6
[1,] 1 165 53 86 56 92
[2,] 2 160 47 84 52 92
[3,] 3 166 55 86 64 89
[4,] 4 164 56 90 60 95
[5,] 5 168 55 87 56 87
[6,] 6 164 54 87 57 92
[7,] 7 168 54 94 58 97
[8,] 8 169 55 88 57 92
[9,] 9 169 53 86 58 93
[10,] 10 166 56 84 57 90
> mx <- unname(mx)
> mx
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 165 53 86 56 92
[2,] 2 160 47 84 52 92
[3,] 3 166 55 86 64 89
[4,] 4 164 56 90 60 95
[5,] 5 168 55 87 56 87
[6,] 6 164 54 87 57 92
[7,] 7 168 54 94 58 97
[8,] 8 169 55 88 57 92
[9,] 9 169 53 86 58 93
[10,] 10 166 56 84 57 90
old.packages関数を使う。この関数を実行すると、パッケージをインストールするときと同じように、CRANのミラーサイトを選ぶ必要がある。選ぶと、以下の例のように、インストールされているパッケージのうち、指定をしたミラーサイトで、新しいバージョンが公開されているものが一覧表示される。
> old.packages()
Package LibPath Installed Built ReposVer Repository
(表示省略)
ggplot2 "ggplot2" "C:/○○○" "3.3.0" "3.6.3" "3.3.2" "○○○"
(表示省略)
この例の場合は、ggplot2パッケージは、3.3.0がインストールされているが、Rのバージョン3.6.3でビルドされた新バージョン3.3.2が公開されている、ということ。
Rに標準で搭載されているdatasetsパッケージにUKDriverDeathsという名前で含まれている。
> UKDriverDeaths
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1969 1687 1508 1507 1385 1632 1511 1559 1630 1579 1653 2152 2148
1970 1752 1765 1717 1558 1575 1520 1805 1800 1719 2008 2242 2478
1971 2030 1655 1693 1623 1805 1746 1795 1926 1619 1992 2233 2192
1972 2080 1768 1835 1569 1976 1853 1965 1689 1778 1976 2397 2654
1973 2097 1963 1677 1941 2003 1813 2012 1912 2084 2080 2118 2150
1974 1608 1503 1548 1382 1731 1798 1779 1887 2004 2077 2092 2051
1975 1577 1356 1652 1382 1519 1421 1442 1543 1656 1561 1905 2199
1976 1473 1655 1407 1395 1530 1309 1526 1327 1627 1748 1958 2274
1977 1648 1401 1411 1403 1394 1520 1528 1643 1515 1685 2000 2215
1978 1956 1462 1563 1459 1446 1622 1657 1638 1643 1683 2050 2262
1979 1813 1445 1762 1461 1556 1431 1427 1554 1645 1653 2016 2207
1980 1665 1361 1506 1360 1453 1522 1460 1552 1548 1827 1737 1941
1981 1474 1458 1542 1404 1522 1385 1641 1510 1681 1938 1868 1726
1982 1456 1445 1456 1365 1487 1558 1488 1684 1594 1850 1998 2079
1983 1494 1057 1218 1168 1236 1076 1174 1139 1427 1487 1483 1513
1984 1357 1165 1282 1110 1297 1185 1222 1284 1444 1575 1737 1763
> class(UKDriverDeaths)
[1] "ts"
時系列オブジェクト(time-series objects)で格納されている。Rのヘルプによれば、1969年1月から1984年12月までのデータ。