ラベル R の投稿を表示しています。 すべての投稿を表示
ラベル R の投稿を表示しています。 すべての投稿を表示

2022-12-28

【備忘録】主成分分析 ~ R ~

主成分分析 (Principal Component Analysis, PCA) は、1観測あたり多数の次元/特徴を含む大規模データセットを分析し、最大限の情報量を保持しながらデータの解釈可能性を高め、多次元データの可視化を可能にする手法としてよく利用されています。形式的には、PCA はデータセットの次元を減少させる統計的手法です。これは、データの変動(の大部分)が、初期データよりも少ない次元で記述できるような新しい座標系にデータを線形変換することにより達成できます。

Wikipedia より引用、翻訳・編集

データ解析で頻繁に主成分分析 (PCA) を利用しています。主成分分析をはじめ、よく使用する機械学習の処理部分などは、いつも過去に使ったスクリプトから必要部分をコピペして使い回してしまっているので、思い違いや間違いがあれば、そのままずっと引きずってしまう可能性があります。ちょっと心配になってきたので、簡単なサンプルを使ってスクリプトを整理しようとしています。

今回は R で主成分分析を扱います。これは、本ブログ記事にまとめた Python / Scikit-Learn における主成分分析のやり方あるいは結果と比較するためです [1]。

下記の OS 環境で動作確認をしています。

Fedora Linux 37 Workstation x86_64
R 4.2.2

今回は JupyterLab の Notebook 上で動作確認をしています。JupyterLab 上で R を利用するには、本ブログの記事 [2] を参照してください。

最初にプロット関連のモジュールを読み込んでおきます。

library(ggplot2)
library(GGally)

解析用のサンプルデータを読み込みます。解析用のサンプルは有名な Iris のデータセットを使っています。Kaggle のサイトで公開されている CSV データ Iris.csv [3] をダウンロードして使用しています。

filename <- "Iris.csv"
df <- read.csv (filename)
head(df)

 

複数の変数(説明変数)x とターゲット(目的変数)y のカラムを定義しておきます。

cols.x <- colnames(df)[2:5]
print(cols.x)
col.y <- colnames(df)[6]
print(col.y)
[1] "SepalLengthCm" "SepalWidthCm"  "PetalLengthCm" "PetalWidthCm" 
[1] "Species"

元データ(説明変数)の分布を散布図にして確認しておきます。

p <- ggpairs(
    data = df,
    columns = cols.x,
    mapping = aes(color = Species, alpha = 0.5)
)
ggsave(
    filename = "iris_011_scatter.png", 
    plot = p, 
    width = 20, 
    height = 20, 
    units = "cm"
)
show(p)

 

主成分分析 (PCA) は、ここでは prcomp で計算します。

pca <- prcomp(df[cols.x], scale. = TRUE)
pca
Standard deviations (1, .., p=4):
[1] 1.7061120 0.9598025 0.3838662 0.1435538

Rotation (n x k) = (4 x 4):
                     PC1         PC2        PC3        PC4
SepalLengthCm  0.5223716 -0.37231836  0.7210168  0.2619956
SepalWidthCm  -0.2633549 -0.92555649 -0.2420329 -0.1241348
PetalLengthCm  0.5812540 -0.02109478 -0.1408923 -0.8011543
PetalWidthCm   0.5656110 -0.06541577 -0.6338014  0.5235463

計算した結果のオブジェクト pca の構造は以下の様になっています。

str(pca)
List of 5
 $ sdev    : num [1:4] 1.706 0.96 0.384 0.144
 $ rotation: num [1:4, 1:4] 0.522 -0.263 0.581 0.566 -0.372 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
  .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
 $ center  : Named num [1:4] 5.84 3.05 3.76 1.2
  ..- attr(*, "names")= chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
 $ scale   : Named num [1:4] 0.828 0.434 1.764 0.763
  ..- attr(*, "names")= chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
 $ x       : num [1:150, 1:4] -2.26 -2.08 -2.36 -2.3 -2.38 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
 - attr(*, "class")= chr "prcomp"

pca の summary は次の様になっています。

summary(pca)
mportance of components:
                          PC1    PC2     PC3     PC4
Standard deviation     1.7061 0.9598 0.38387 0.14355
Proportion of Variance 0.7277 0.2303 0.03684 0.00515
Cumulative Proportion  0.7277 0.9580 0.99485 1.00000

上表の3行目の Cumulative Proportion が、そのまま累積寄与率に使えそうです。summary(pca) の構造を確認します。

s <- summary(pca)
str(s)
List of 6
 $ sdev      : num [1:4] 1.706 0.96 0.384 0.144
 $ rotation  : num [1:4, 1:4] 0.522 -0.263 0.581 0.566 -0.372 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
  .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
 $ center    : Named num [1:4] 5.84 3.05 3.76 1.2
  ..- attr(*, "names")= chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
 $ scale     : Named num [1:4] 0.828 0.434 1.764 0.763
  ..- attr(*, "names")= chr [1:4] "SepalLengthCm" "SepalWidthCm" "PetalLengthCm" "PetalWidthCm"
 $ x         : num [1:150, 1:4] -2.26 -2.08 -2.36 -2.3 -2.38 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : NULL
  .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
 $ importance: num [1:3, 1:4] 1.706 0.728 0.728 0.96 0.23 ...
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr [1:3] "Standard deviation" "Proportion of Variance" "Cumulative Proportion"
  .. ..$ : chr [1:4] "PC1" "PC2" "PC3" "PC4"
 - attr(*, "class")= chr "summary.prcomp"

行列 (matrix) s$importance を使えばよさそうです。

s$importance

 

累積寄与率の x 軸を 0 から始めたいので少し加工してプロットします。

contrib <- append(0, s$importance[3, ])
contrib
png("iris_012_contrib.png", width = 500, height = 500)
plot(c(0:4), contrib, type="l", col="blue", xlab="Principal Component", ylab="Cumlative Contribution Ratio", cex.lab=1.5, cex.axis=1.5)
grid(col="black")
dev.off()

 

ちなみに、主成分毎の寄与率をプロットするのであれば、screeplot(pca) で簡単にプロットできます。

png("iris_12_screeplot.png", width = 500, height = 500)
screeplot(pca)
dev.off()

 

主成分得点のプロットには pca$x を利用します。

head(pca$x)

 

プロット用に pca$x と Species を加えたデータフレーム df.pca を用意します。

df.pca <- as.data.frame(pca$x)
cols.pc <- colnames(df.pca)
print(cols.pc)
df.pca <- cbind(df.pca, df[col.y])
head(df.pca)

 

主成分を軸とした散布図を作成します。PC1 と PC2 だけで十分ですが、そもそも主成分は4つ(= 説明変数の数)までしかないので、全部の組み合わせをプロットしてしまいます。

p <- ggpairs(
    data = df.pca,
    columns = cols.pc,
    mapping = aes(color = Species, alpha = 0.5)
)
ggsave(
    filename = "iris_013_PCA_scatter.png", 
    plot = p, 
    width = 20, 
    height = 20, 
    units = "cm"
)
show(p)

 

主成分に対する説明変数の寄与を確認します(主成分負荷量)。行列 (matrix) pca$rotation に情報が入っています。

pca$rotation

 

 

biplot 関数を使えば、主成分分析のスコアと主成分負荷量を一緒にプロットできます。

png("iris_014_loading.png", width = 500, height = 500)
biplot(pca, cex = 1)
dev.off()

 

Python / Scikit-Learn で主成分分析を扱った本ブログの記事 [1] の結果と比べると PC1 以外は符号が逆になっていますが、主成分分析の計算を考えると、主成分軸の正負の取り方で符号変わるのは仕方がないことなのでしょう。処理系によって符号の違いが出てくるかもしれないと認識しておく必要があります。

GUI やデータ解析でもなんでも Python でできてしまうので、重宝してよく使うようになりましたが、久しぶりに R を使って同じことをやってみると、R の方が便利だなと感じる点もあります、なにより、このように検証用に別の環境でできるようにしておくことが必要だと感じています。JupyterLab 上で Python も R も、おまけに Julia も使えるようになったので、今後もこうやって簡単なサンプルを使って、複数のプログラミング言語で比較を続けていく予定です。

参考サイト

  1. bitWalk's: 【備忘録】主成分分析 ~ Python / Scikit-Learn ~ [2022-12-27]
  2. bitWalk's: JupyterLab で R を使う [2022-12-16]
  3. Iris.csv | Kaggle

 

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2022-12-16

JupyterLab で R を使う

最近、データ解析に JupyterLab の Notebook を使うことが多くなりました。解析作業が Python だけで済む場合は問題が無いのですが、それでも R でちょっと検証したいと思うときがあります。しかし、他のツールを起動するのが億劫で、後回しにしてしまうことが何度もありました。

たしか JupyterLab で R が使えたはずだと思い出して調べてみると、参考サイト [1] で紹介されていた方法ですぐに使えるようになりました。

下記の OS 環境で動作確認をしています。

Fedora Linux 37 Workstation x86_64
Python 3.11.0
R 4.2.2

参考サイトで紹介されていた方法では、必要な IRkernel (R kernel for Jupyter Notebook) を github のサイトから取ってきていましたが、CRAN(R のパッケージの配信システム)で IRkernel が利用できたので、こちらを利用した方法をまとめました。

なお、以下の作業は、JupyterLab を起動する Python venv の仮想環境内でおこなっています。また、JupyterLab は既に利用できる状態になっているものとします。

まず R を起動して、IRkernel をインストールします。

(venv) [XXXXX ~]$ R
...
...
> install.packages("IRkernel")

次に IRkernel と JupyterLab をつなげます。

> IRkernel::installspec()

R を抜けて、JupyterLab を起動します。

> q()
ave workspace image? [y/n/c]: n
(venv) [XXXXX ~]$ jupyter lab

Launcher に R のアイコンが表示されていれば OK です。

R を利用できるようになった JupyterLab

使用例

一元配置の分散分析を例に、同じデータを使って R と Python で試してみました。

R の場合

Python の場合

参考サイト

  1. JupyterlabでRとJavascriptを使う - Qiita [2018-10-13]
  2. Installation · IRkernel
  3. IRkernel/IRkernel: R kernel for Jupyter

 

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2022-06-26

Fedora Linux で RStudio Server を使う

RStudio は R のための統合開発環境 (IDE) です。RStudio には 2 つのエディションがあります。デスクトップアプリケーションとして利用する RStudio Desktop と、Linux 上でサービスとして動作させてリモート PC からウェブブラウザでアクセスして利用する RStudio Server です。

以前は RStudio Server を公式サイトから RPM パッケージをダウンロードして Fedora へインストールすると、SELinux のアクセスコントロールエラーが何度も出ました。これを解消するための効果的な方法を知らなかったので、RStudio Server (rsession) に起因する SELinux のエラーが出る毎に ausearch コマンドで監査ログを確認、audit2allow コマンドででポリシー・モジュールを作成、semodule コマンドで適用するという作業を繰り返していました [1]。😭

ところが、Fedora Linux ではいつの間にか(少なくとも Fedora Linux 35 では利用できるようになっていました)RStudio をディストリビューションのパッケージとして利用できるようになっており、このパッケージをインストールすれば、SELinux のアクセスコントロールエラーが出ません。そこで、いまさらですが、インストール方法をまとめました。

下記の OS 環境で動作確認をしています。

Fedora Linux 36 x86_64

dnf search コマンドで、rstudio をキーワードにして RStudio パッケージを検索すると下記のように、rstudio-server と rstudio-desktop の二種類が利用できることが判ります。

[bitwalk@fedora-pc ~]$ sudo dnf search rstudio
メタデータの期限切れの最終確認: 0:33:48 時間前の 2022年06月25日 06時37分35秒 に実施しました。
========================== 名前 & 概要 一致: rstudio ===========================
rstudio.x86_64 : RStudio base package
R-rstudioapi.noarch : Safely Access the RStudio API
rstudio-server.x86_64 : Access RStudio via a web browser
============================== 名前 一致: rstudio ==============================
rstudio-desktop.x86_64 : Integrated development environment for the R
                       : programming language
[bitwalk@fedora-pc ~]$

本記事では RStudio Server (rstudio-server) をインストールする例を紹介します。

まず、下記のようにして RStudio Server と関連するパッケージをインストールします。

[bitwalk@fedora-pc ~]$ sudo dnf install rstudio-server
メタデータの期限切れの最終確認: 2:29:04 時間前の 2022年06月25日 06時37分35秒 に実施しました。
依存関係が解決しました。
================================================================================
 パッケージ                     Arch   バージョン                 Repo    サイズ
================================================================================
インストール:
 rstudio-server                 x86_64 2022.02.3+492-1.fc36       updates 1.4 M
依存関係のインストール:
 R-core                         x86_64 4.1.3-1.fc36               fedora   61 M
 biber                          noarch 2.17-2.fc36                fedora  302 k
     :
     :
     :
 yaml-cpp                       x86_64 0.6.3-6.fc36               fedora  123 k
弱い依存関係のインストール:
 perl-Class-XSAccessor          x86_64 1.19-26.fc36               fedora   46 k
 perl-GD-Barcode                noarch 1.15-40.fc36               fedora  595 k
 perl-List-MoreUtils            noarch 0.430-5.fc36               fedora   63 k
 perl-PerlIO-utf8_strict        x86_64 0.009-2.fc36               fedora   26 k

トランザクションの概要
================================================================================
インストール  463 パッケージ

ダウンロードサイズの合計: 311 M
インストール後のサイズ: 749 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/463): biber-2.17-2.fc36.noarch.rpm           511 kB/s | 302 kB     00:00    
(2/463): glyphography-newscycle-fonts-0.5.2-8.f 176 kB/s | 114 kB     00:00    
     :
     :
     :
(462/463): rstudio-server-2022.02.3+492-1.fc36. 4.1 MB/s | 1.4 MB     00:00    
(463/463): rstudio-2022.02.3+492-1.fc36.x86_64. 6.7 MB/s |  11 MB     00:01    
--------------------------------------------------------------------------------
合計                                            4.8 MB/s | 311 MB     01:04     
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                        1/1 
  インストール中   : texlive-iftex-9:svn56594-55.fc36.noarch              1/463 
  インストール中   : texlive-amsmath-9:svn56514-55.fc36.noarch            2/463 
  インストール中   : texlive-url-9:svn32528.3.4-55.fc36.noarch            3/463 
     :
     :
     :
  検証             : rstudio-2022.02.3+492-1.fc36.x86_64                462/463 
  検証             : rstudio-server-2022.02.3+492-1.fc36.x86_64         463/463 

インストール済み:
  R-core-4.1.3-1.fc36.x86_64                                                    
  biber-2.17-2.fc36.noarch                                                      
  boost-chrono-1.76.0-11.fc36.x86_64                                            
     :
     :
     :
  tre-common-0.8.0-35.20140228gitc2f5d13.fc36.noarch                            
  yaml-cpp-0.6.3-6.fc36.x86_64                                                  

完了しました!
[bitwalk@fedora-pc ~]$ 

rstudio-server サービスを起動します。

[bitwalk@fedora-pc ~]$ sudo systemctl start rstudio-server
[bitwalk@fedora-pc ~]$ sudo systemctl enable rstudio-server
Created symlink /etc/systemd/system/multi-user.target.wants/rstudio-server.service → /usr/lib/systemd/system/rstudio-server.service.
[bitwalk@fedora-pc ~]$ 

RStudio Server のデフォルトのポート番号は 8787 です。ローカルの Web ブラウザで localhost:8787 にアクセスできることを確認します。

RStudio のログイン画面

Linux のユーザーアカウントとパスワードでログインします。

ログイン後の RStudio

参考サイト

  1. bitWalk's: RStudio Server と SELinux (Fedora) [2018-08-10]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加

2021-04-22

正規性の検定 (R)

データの集合が正規分布とみなせるかの検定を Python/SciPy で計算してみましたが、Shapiro-Wilk と Anderson-Darling で出力の形式が異なっていたことが気になったので [1] 、同じことを R でもやってみました。

normality_test.R

以下に実行例を示しました。

> library(nortest)
> 
> # sample dataset
> data <- rnorm(150, mean = 20, sd = 5)
> print(data)
  [1] 12.056125 12.501325 17.523703 15.480088 17.297640 20.316994 21.197035 20.667794 17.005183
 [10] 28.084337 21.317987 20.472167 17.468762 16.851357 27.206106 11.313712 18.710486 17.259417
...
...
[145] 16.199152 22.915103 20.473811 27.863051 23.514593 24.095631
> 
> # Shapiro-Wilk test
> result <- shapiro.test(data)
> print(result)

	Shapiro-Wilk normality test

data:  data
W = 0.99663, p-value = 0.9831

> 
> # Anderson-Darling test
> result <- ad.test(data)
> print(result)

	Anderson-Darling normality test

data:  data
A = 0.23304, p-value = 0.7945

R の nortest パッケージを使って、Anderson-Darling 検定をおこなうと、出力は Shapiro-Wilk 検定と同じく p-value で出力されます。このように、どちらも p-value で検定結果を得られる方が、運用上は都合が良いので、SciPy でも p-value で検定結果を得られるように変更します(次回)。

参考サイト

  1. bitWalk's: 正規性の検定 (SciPy) [2021-04-21]
  2. CRAN - Package nortest

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

2020-12-18

R のパッケージ依存問題は解消? ~ CentOS Stream ~

R を使うか、それとも Python を使うか?個人的には、状況や用途に応じて、使いやすい方を使えば良いと思っていますが、最近は Python を使う場面が多くなりました。とは言え、R が使えないと不便な場面もまだまだあります。

CentOS 8.3 から CentOS Stream 8 へ移行して R でトラブりましたが、crontab で毎日定時に動かしている R のスクリプトがあるので焦りました。また、なんとか SELinux を無効にせずに(Enforcing のままで)RStudio Server や Shiny Server のアプリケーションを動かせるようにしたのだから、R が使えなくなるのはやはり困ります。

そういうわけで、パッケージの依存性問題を解消するためにあれこれリビルドしたのでした [1]。

RStudio (Server) の画面

今日、CentOS Stream の更新可能なパッケージを調べました。

[bitwalk@centos-pc ~]$ sudo dnf check-update
[sudo] bitwalk のパスワード:
CentOS Stream 8 - AppStream                                                             4.9 kB/s | 4.4 kB     00:00
CentOS Stream 8 - AppStream                                                             4.0 MB/s | 6.3 MB     00:01
CentOS Stream 8 - BaseOS                                                                6.5 kB/s | 3.9 kB     00:00
CentOS Stream 8 - BaseOS                                                                1.6 MB/s | 2.4 MB     00:01
CentOS Stream 8 - Extras                                                                4.7 kB/s | 1.5 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                                   10 kB/s | 9.6 kB     00:00
Extra Packages for Enterprise Linux Modular 8 - x86_64                                  162 kB/s | 104 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                           12 kB/s | 9.7 kB     00:00
Extra Packages for Enterprise Linux 8 - x86_64                                          4.0 MB/s | 8.6 MB     00:02
nginx stable repo                                                                       3.8 kB/s | 2.9 kB     00:00
nginx mainline repo                                                                     5.5 kB/s | 2.9 kB     00:00
nginx mainline repo                                                                      39 kB/s |  58 kB     00:01
PostgreSQL 12 for RHEL/CentOS 8 - x86_64                                                2.0 kB/s | 3.8 kB     00:01

autocorr-en.noarch                                                  1:6.4.7.2-4.el8                            appstream
autocorr-ja.noarch                                                  1:6.4.7.2-4.el8                            appstream
libreoffice-core.x86_64                                             1:6.4.7.2-4.el8                            appstream
libreoffice-data.noarch                                             1:6.4.7.2-4.el8                            appstream
libreoffice-graphicfilter.x86_64                                    1:6.4.7.2-4.el8                            appstream
libreoffice-gtk3.x86_64                                             1:6.4.7.2-4.el8                            appstream
libreoffice-help-en.x86_64                                          1:6.4.7.2-4.el8                            appstream
libreoffice-help-ja.x86_64                                          1:6.4.7.2-4.el8                            appstream
libreoffice-langpack-en.x86_64                                      1:6.4.7.2-4.el8                            appstream
libreoffice-langpack-ja.x86_64                                      1:6.4.7.2-4.el8                            appstream
libreoffice-ogltrans.x86_64                                         1:6.4.7.2-4.el8                            appstream
libreoffice-opensymbol-fonts.noarch                                 1:6.4.7.2-4.el8                            appstream
libreoffice-pyuno.x86_64                                            1:6.4.7.2-4.el8                            appstream
libreoffice-ure.x86_64                                              1:6.4.7.2-4.el8                            appstream
libreoffice-ure-common.noarch                                       1:6.4.7.2-4.el8                            appstream
libreoffice-x11.x86_64                                              1:6.4.7.2-4.el8                            appstream
poppler.x86_64                                                      20.11.0-1.el8                              appstream
poppler-utils.x86_64                                                20.11.0-1.el8                              appstream
texlive-ae.noarch                                                   7:20180414-20.el8                          appstream
texlive-algorithms.noarch                                           7:20180414-20.el8                          appstream
...
(途中省略)
...
texlive-zapfchan.noarch                                             7:20180414-20.el8                          appstream
texlive-zapfding.noarch                                             7:20180414-20.el8                          appstream

SRPMS をリビルドするのに必要な依存パッケージが多く、やむなく CentOS 8.3 の RPM パッケージを持ってきてインストールした poppler、パッケージが多すぎて既存のパッケージを使うしかなかった texlive のパッケージ群が更新対象になっています。

今回は出来るかもしれないと思いアップデートしようとしたところ、あいかわらずのパッケージの依存性の問題でエラーになりましたが、前回とはちょっと様子が異なりました。

[bitwalk@centos-pc ~]$ sudo dnf update
メタデータの期限切れの最終確認: 0:00:40 時間前の 2020年12月18日 16時28分08秒 に実施しました。
エラー:
 問題: cannot install both poppler-20.11.0-1.el8.x86_64 and poppler-0.66.0-27.el8.x86_64
  - package poppler-devel-0.66.0-27.el8.x86_64 requires libpoppler.so.78()(64bit), but none of the providers can be installed
  - package poppler-devel-0.66.0-27.el8.x86_64 requires poppler(x86-64) = 0.66.0-27.el8, but none of the providers can be installed
  - cannot install the best update candidate for package poppler-0.66.0-27.el8.x86_64
  - problem with installed package poppler-devel-0.66.0-27.el8.x86_64
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
[bitwalk@centos-pc ~]$ 

今回は poppler 関係の問題だけのようです。誘いに乗って --allowerasing オプションを付けて更新する価値があるかもしれないと思い切ってやってみました。

[bitwalk@centos-pc ~]$ sudo dnf --allowerasing update
メタデータの期限切れの最終確認: 0:01:11 時間前の 2020年12月18日 16時28分08秒 に実施しました。
依存関係が解決しました。
========================================================================================================================
 パッケージ                                   Arch            バージョン                   リポジトリー           サイズ
========================================================================================================================
アップグレード:
 autocorr-en                                  noarch          1:6.4.7.2-4.el8              appstream              175 k
 autocorr-ja                                  noarch          1:6.4.7.2-4.el8              appstream              148 k
 libreoffice-core                             x86_64          1:6.4.7.2-4.el8              appstream              109 M
...
(途中省略)
...
 libreoffice-x11                              x86_64          1:6.4.7.2-4.el8              appstream              314 k
 poppler                                      x86_64          20.11.0-1.el8                appstream              1.1 M
 poppler-utils                                x86_64          20.11.0-1.el8                appstream              247 k
 texlive-ae                                   noarch          7:20180414-20.el8            appstream              113 k
 texlive-algorithms                           noarch          7:20180414-20.el8            appstream              317 k
...
(途中省略)
...
 texlive-zapfchan                             noarch          7:20180414-20.el8            appstream              111 k
 texlive-zapfding                             noarch          7:20180414-20.el8            appstream               73 k
依存関係パッケージの削除:
 poppler-devel                                x86_64          0.66.0-27.el8                @@commandline          1.1 M

トランザクションの概要
========================================================================================================================
アップグレード  233 パッケージ
削除              1 パッケージ

ダウンロードサイズの合計: 487 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/233): autocorr-ja-6.4.7.2-4.el8.noarch.rpm                                           842 kB/s | 148 kB     00:00
...
(途中省略)
...
(233/233): texlive-zapfchan-20180414-20.el8.noarch.rpm                                  1.7 MB/s | 111 kB     00:00
------------------------------------------------------------------------------------------------------------------------
合計                                                                                    9.9 MB/s | 487 MB     00:49
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                1/1
  scriptletの実行中: texlive-base-7:20180414-20.el8.noarch                                                        1/467
  アップグレード中 : texlive-base-7:20180414-20.el8.noarch                                                        1/467
...
(途中省略)
...
  検証             : texlive-zapfding-7:20180414-19.el8.noarch                                                  466/467
  検証             : poppler-devel-0.66.0-27.el8.x86_64                                                         467/467
Installed products updated.

アップグレード済み:
  autocorr-en-1:6.4.7.2-4.el8.noarch
  autocorr-ja-1:6.4.7.2-4.el8.noarch
  libreoffice-core-1:6.4.7.2-4.el8.x86_64
...
(途中省略)
...
  texlive-zapfchan-7:20180414-20.el8.noarch
  texlive-zapfding-7:20180414-20.el8.noarch

削除しました:
  poppler-devel-0.66.0-27.el8.x86_64

完了しました!
[bitwalk@centos-pc ~]$

リビルドしてインストールした R 関係のパッケージは削除されませんでした。

よく確認もせずに --allowerasing オプションを付けて更新した結果、本来必要なパッケージまでアンインストールされてしまった、という悲劇にはならず、やれやれといったところです。

R 関係のトラブルは、たまたまピンポイントで踏んでしまったのかもしれませんが、もしかすると CentOS Stream はまだそれほど成熟しておらず、パッケージの更新頻度も CentOS に比べればかなり高いのかもしれないと思いました。パッケージの更新頻度については使い続ける中で確認していきます。

参考サイト

  1. bitWalk's: CentOS Stream を使い始めて [2020-12-16]
  2. Rocky Linux

 

ブログランキング・にほんブログ村へにほんブログ村

2020-12-16

CentOS Stream を使い始めて

CentOS から CentOS Stream へ移行がすんなり終わり [1]、やれやれと思っていたところ、R のパッケージの更新でエラーが出ました。調べてみると、R-core-devel が消えていました。dnf コマンドでインストールしようとしても R-core-devel がレポジトリに無く、それでは SRPM をリビルドしようと dnf download --source を試しましたがダウンロードができませんでした。仕方が無いので、CentOS などから R と openblas の SRPM を入手して、リビルドしてインストールし直しました。依存するパッケージ全部をリビルドしようとするとキリが無いので、リビルドするのに必要な RPM パッケージを CentOS から持ってきてそのままインストールしました。

日を改め、念のため、確認してみたところちゃんと欲しいパッケージがインストールできるようになっていました😱。

[bitwalk@centos-pc ~]$ dnf search R-core
メタデータの期限切れの最終確認: 2 days, 10:11:00 時間前の 2020年12月14日 07時56分39秒 に実施しました。
================================================ 名前 完全一致: R-core =================================================
R-core.x86_64 : The minimal R components necessary for a functional runtime
================================================== 名前 一致: R-core ===================================================
R-core-devel.x86_64 : Core files for development of R packages (no Java)
sagator-core.noarch : Antivirus/anti-spam gateway for smtp server, core files
[bitwalk@centos-pc ~]$ dnf search openblas
=============================================== 名前 完全一致: openblas ================================================
openblas.x86_64 : An optimized BLAS library based on GotoBLAS2
openblas.i686 : An optimized BLAS library based on GotoBLAS2
============================================== 名前 & 概要 一致: openblas ==============================================
openblas-devel.x86_64 : Development headers and libraries for OpenBLAS
openblas-srpm-macros.noarch : OpenBLAS architecture macros
================================================= 名前 一致: openblas ==================================================
openblas-openmp.x86_64 : An optimized BLAS library based on GotoBLAS2, OpenMP version
openblas-openmp64.x86_64 : An optimized BLAS library based on GotoBLAS2, OpenMP version
openblas-openmp64_.x86_64 : An optimized BLAS library based on GotoBLAS2, OpenMP version
openblas-serial.x86_64 : An optimized BLAS library based on GotoBLAS2, serial version
openblas-serial64.x86_64 : An optimized BLAS library based on GotoBLAS2, serial version
openblas-serial64_.x86_64 : An optimized BLAS library based on GotoBLAS2, serial version
openblas-threads.x86_64 : An optimized BLAS library based on GotoBLAS2, pthreads version
openblas-threads.i686 : An optimized BLAS library based on GotoBLAS2, pthreads version
openblas-threads64.x86_64 : An optimized BLAS library based on GotoBLAS2, pthreads version
openblas-threads64_.x86_64 : An optimized BLAS library based on GotoBLAS2, pthreads version
[bitwalk@centos-pc ~]$

パッケージの依存関係を含め、最低でも黄色にマーカーを入れたパッケージをインストールしたかったのですが、それができずに止むを得ずリビルドしました。ところが、今日はちゃんとあります。自分のせいにするとすれば、きっとなにか考え違いをしていたのでしょう。しっかり証拠のログを残していなかったので、ちょっとショックです😭。不具合をブログ記事にしようと考えていたのに、アテが外れてしまいました。それでも納得がいかず、結局、記事にしてしまいました。

ちなみに、この状態でパッケージを更新をしようとすると次のように競合によるエラーが表示されるようになりました。これは、リビルドするためにあれこれ(CentOS Stream ではなく)CentOS などから、一部バージョンを下げたパッケージを持ってきてインストールし直したためです。

[bitwalk@centos-pc x86_64]$ sudo dnf update
[sudo] bitwalk のパスワード:
メタデータの期限切れの最終確認: 1 day, 4:53:46 時間前の 2020年12月15日 13時51分56秒 に実施しました。
エラー:
 問題 1: package texlive-luatex-7:20180414-19.el8.x86_64 requires libpoppler.so.78()(64bit), but none of the providers can be installed
  - cannot install both poppler-20.11.0-1.el8.x86_64 and poppler-0.66.0-27.el8.x86_64
  - cannot install the best update candidate for package texlive-luatex-7:20180414-19.el8.x86_64
  - cannot install the best update candidate for package poppler-0.66.0-27.el8.x86_64
 問題 2: cannot install both poppler-20.11.0-1.el8.x86_64 and poppler-0.66.0-27.el8.x86_64
  - package texlive-pdftex-7:20180414-19.el8.x86_64 requires libpoppler.so.78()(64bit), but none of the providers can be installed
  - package poppler-utils-20.11.0-1.el8.x86_64 requires libpoppler.so.104()(64bit), but none of the providers can be installed
  - package poppler-utils-20.11.0-1.el8.x86_64 requires poppler(x86-64) = 20.11.0-1.el8, but none of the providers can be installed
  - cannot install the best update candidate for package texlive-pdftex-7:20180414-19.el8.x86_64
  - cannot install the best update candidate for package poppler-utils-0.66.0-27.el8.x86_64
(競合するパッケージを置き換えるには、コマンドラインに '--allowerasing' を追加してみてください または、'--skip-broken' を追加して、インストール不可のパッケージをスキップしてください または、'--nobest' を追加して、最適候補のパッケージのみを使用しないでください)
[bitwalk@centos-pc x86_64]$

エラーメッセージの誘いに乗って--allowerasing を付けると、リビルドしてまでインストールした R がアンインストールされてしまうので、週末までこのまま運用します。

以下のようなメッセージが気になっています。

  - package texlive-pdftex-7:20180414-19.el8.x86_64 requires libpoppler.so.78()(64bit), but none of the providers can be installed
  - package poppler-utils-20.11.0-1.el8.x86_64 requires libpoppler.so.104()(64bit), but none of the providers can be installed

週末の時間があるときにじっくり取り組みます。

CentOS Stream の位置づけ

Red Hat 社のブログに、CentOS Stream の詳しい説明がありましたので紹介します。

いままでの CentOS のように RHEL をリビルドしたものを(Red Hat 社から)無料で入手するという選択肢は無くなりました。自分を含めて、無料で使おうとするユーザや企業の全てが、プロジェクトの成果に対して積極的になにか貢献で返しているわけではないでしょうから、(営利を追求しなければならない)企業のプロジェクトの在り方を考えると、今回の方針転換は当然のように思います。

参考サイト

  1. bitWalk's: CentOS から CentOS Stream へ移行してみた [2020-12-14]
  2. Rocky Linux

 

ブログランキング・にほんブログ村へにほんブログ村

2020-04-04

R の quantmod パッケージと Yahoo! Japan

R の quantmod (Quantitative Financial Modelling Framework) パッケージは、クオンツ取引 (qualitative trading) において、統計的手法に基づいた取引モデルの構築、検証および運用の支援ができるように提供されています [1]。

株価予測に機械学習を応用

本ブログの以前の記事 [2] などで、 このパッケージの getSymbols() 関数を使うと、Yahoo!ファイナンス のサイトから指定した証券コードの株価データを取得することができると紹介しました。自分も廉価なファンレスのミニ PC を買って、cron で日々の株価情報の取得をして、機械学習を応用した予測プログラムを実験的に稼働させていました。

ところが、3 月 19 日を最後にデータの更新が止まってしまいました。R を起動、quantmod パッケージをロードして getSymbols() を試してみるも、下記のように内部関数 getSymbols.yahooj() でエラーが出ていて読み込みません。

> library(quantmod)
 要求されたパッケージ xts をロード中です 
 要求されたパッケージ zoo をロード中です 

 次のパッケージを付け加えます: ‘zoo’ 

 以下のオブジェクトは ‘package:base’ からマスクされています: 

     as.Date, as.Date.numeric 

 要求されたパッケージ TTR をロード中です 
Version 0.4-0 included new data defaults. See ?getSymbols.
> getSymbols("9984.T", src = "yahooj")
‘getSymbols’ currently uses auto.assign=TRUE by default, but will
use auto.assign=FALSE in 0.5-0. You will still be able to use
‘loadSymbols’ to automatically load data. getOption("getSymbols.env")
and getOption("getSymbols.auto.assign") will still be checked for
alternate defaults.

This message is shown once per session and may be disabled by setting 
options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.

 getSymbols.yahooj(Symbols = "9984.T", env = , verbose = FALSE,  でエラー: 
  Unable to import “9984.T”.
XML content does not seem to be XML: '1'
> 

quantmod パッケージのバージョンの問題かもしれないと、ダウングレードして試しましたがうまくいきませんでした。もしかして Yahoo! Japan のサービスが無くなった!? 少々自棄になって R から Python に切り替えてアプリケーションを作り直し始めたのですが、Python では Yahoo! Japan ではなく、US の Yahoo! から株価データを取得していることから、もしかすると R でもデータを取れるかもしれないと考えて試したところ、ちゃんとできました。

> tmp <- getSymbols("9984.T", src = "yahoo", auto.assign = FALSE)
 警告メッセージ: 
9984.T contains missing values. Some functions will not work if objects contain
missing values in the middle of the series. Consider using na.omit(), na.approx(
), na.fill(), etc to remove or replace them. 
> tmp
           9984.T.Open 9984.T.High 9984.T.Low 9984.T.Close 9984.T.Volume
2007-01-04    1192.500    1222.500   1180.000      1220.00      41067400
2007-01-05    1210.000    1247.500   1207.500      1245.00      57432400
2007-01-09    1247.500    1252.500   1225.000      1237.50      33023400
2007-01-10    1247.500    1275.000   1237.500      1242.50      75507600
2007-01-11    1247.500    1257.500   1227.500      1242.50      29319000
...
(以下省略)
> chartSeries(tmp, theme="white")
ソフトバンクグループ (9984.T) の株価チャート作成例

Yahoo! Japan (yahooj) では日経平均株価のコードが 998407.O であったのに対し、Yahoo! (yahoo) では ^N225 になるなど若干の違いがありますので、その部分を対応させればあとは変更なしにアプリケーションを動かせそうです。

現行の quantmod パッケージのバージョンは 0.4-17 ですが、古いバージョン 0.4-15 がインストールされている環境があったので、yahooj からデータを読み出せるか確認したところ、普通にデータをダウンロードできました。Yahoo! Japan のサービスが止まってしまったというわけではなさそうです。

R のパッケージ全体を更新して quantmod パッケージのバージョンを 0.4-17 にすると、yahooj のデータを読み込めない問題が発生し、quantmod パッケージだけバージョンを 0.4-15 にダウングレードしても、yahooj を読み込めない問題は改善しません。なにか他のパッケージに問題がありそうですが、よくわかりませんでした。

参考サイト

  1. quantmod: Quantitative Financial Modelling Framework
  2. bitWalk's: 機械学習と株価
  3. bitwalk123/stock-explorer: prediction for tomorrow's open price of specific stock

 

ブログランキング・にほんブログ村へにほんブログ村