VS Codeでvenvがうまく動作しなくなった話

結論 venvをあきらめて、Pipenvを導入すればなぜか解決した。 経緯 Pythonの開発環境にVS Codeを使っていましたが、ある日突然、venvで作った環境が見えなくなりました。 PowerShellからは切り替えができるので、venv自体は正しく動いているようでした。 PythonとVS Codeをクリーンインストールしても状況は変わりませんでした[1]。 Pipenvの使い方 最近はPipenvというものがあるらしいので、それを導入することとしました[2][3]。 pip install pipenv 以下のように環境変数を設定することで、プロジェクトのフォルダ直下に仮想環境を構築してくれます。 PIPENV_VENV_IN_PROJECT=true VS Code上にフォルダを作成し、その直下で仮想環境を作成します。 コマンドはVS Code上のPowerShellで行いました。 例えば以下のようになります。パスやPythonのバージョンはご自身の環境に合わせてください。 *pythonの後に半角スペースがあるのでうっかり詰めないでください。 *venvファイルが作成されるという情報もありますが、私の場合はPipfileのみ作られました。 PS PS C:\Users\User Name\Documents\CODE\Python\Test> pipenv install --python 3.8 VS Code上でF1キーを押して、「reload」を検索して実行します。 これで左下のPythonのバージョンセレクトから環境選択できるはずです。 仮想環境から抜けるときは以下のコマンドを使います。 deactivate 参考文献 [1] sota0726 「VScodeを完全にアンインストールする方法(windows10)「拡張機能のホストが予期せずに終了しました。」を改善するために」閲覧日:2020/09/13 https://www.atmarkit.co.jp/ait/articles/1810/12/news026.html [2] KRiver1 「pyenv、pyenv-virtualenv、venv、Anaconda、Pipenv。私はPipenvを使う。」閲覧日:2020/09/13 h

ggplot2を使ってみる

最近,機械学習の勉強会でRをいじる機会がありました.
Rは機械学習や統計に関するパッケーが充実しているのは大変魅力的です.
そして,ggplot2という強力なグラフの描画用のパッケーがすごいです.
Excelではこんな見栄えのよいグラフを作れないよなと感動してしまいます.
今日はそんなRのggplot2で基本的な図の描画をしてみます.

まずggplot2をインストールしていない場合は,以下の用なコードでインストールしてください.
コードを入力するとCRAN mirrorというウィンドウが現れるので,Japanあたりのミラーを指定してください.
install.packages("ggplot2", dependencies = TRUE)
package ‘ggplot2’ successfully unpacked and MD5 sums checked
というメッセージがでればインストール成功です.
インストールが無事終わったら,以下のようにライブラリをロードします.
library('ggplot2')
まずは,データフレームを作ります.
set.seed(1)
x.1 <- rnorm(1000)
y.1 <- rnorm(1000)
label.1 <- ifelse(rbinom(1000, size = 1, prob = 0.5), TRUE, FALSE)

data.1 <- data.frame(X = x.1, Y = y.1, L = label.1)
x.1とy.1には正規分布に従う乱数を1000個ずつ生成して格納します.
label.1には,二項分布に従う乱数を生成し,1ならTRUE,0ならFALSEを格納します.
これらのベクトルからデータフレーム data.1を作成します.

データフレームの準備が出来たので,まずはXを0.4ずつに区切ってヒストグラムを描画します.
ggplot()にデータフレームと使用するデータのラベルを指定し,描画する環境を設定します.
その環境にgeom_histogram()で生成したヒストグラムを重ねることで,グラフを描画します.
hist.1 <- ggplot(data.1, aes(x = X)) + geom_histogram(binwidth = 0.4)
hist.1

次に,geom_density()を使って確率密度関数を描画します.
dens.1 <- ggplot(data.1, aes(x = X)) + geom_density()
dens.1

最後に,散布図を描画します.
x軸にラベルXのデータを,y軸にラベルYのデータ,各点の色にラベルLのデータを使用します.
散布図はgeom_point()関数で描画できます.
scatter.1 <- ggplot(data.1, aes(x = X, y = Y, color = L)) + geom_point()
scatter.1

ラベルごとに色が変わっており,さらに凡例もしっかりとついています.
軸のラベルや凡例のラベルを変更するには以下のように,labs()を使用します.
scatter.1 <- scatter.1 + labs(color = 'Label')

このように,よくあるグラフを簡単に,しかも見栄え良く描画することができます.

今度は,別のデータフレームを使って,任意の関数の描画方法を見てみましょう.
x.2 = runif(1000)
y.2 <- x.2 + rnorm(1000, sd = 0.05)

data.2 <- data.frame(X = x.2, Y = y.2)
y = xの1次関数に従うデータを生成します.
x.2には一様乱数を1000個生成して格納しています.
y.2にはx.2の値に標準偏差0.05,平均0のガウスノイズを加えたデータを格納しています.
まずは,このデータの散布図を描画します.
scatter.2 <- ggplot(data.2, aes(x = X, y = Y, color = L)) + geom_point()
scatter.2

次に,任意の関数をこの散布図に重ねてみます.
描画するのは,このデータの回帰直線を描画します.
回帰直線はlm()を使って以下のように簡単に求めることが出来ます.
fit <- with(data.2, lm(Y ~ X))
intercept <- coef(fit)[1]
slope <- coef(fit)[2]
この回帰直線をstat_function()関数の引数funに,ラムダ式を使って回帰直線の1次関数の計算式を与えます.
先ほどの散布図に重ねるには,この直線をscatter.2に足し合わせることで重ねることが出来ます.
scatter.2 <- scatter.2 + 
stat_function(colour = "orange", fun = function(x) slope * x + intercept, size = 1)
scatter.2

この回帰直線はy = xの関数にノイズを加えたものなので,回帰直線はy = xに近いことがわかります.
最後に,scatter.2を画像ファイルに保存します.
ggsave(plot = scatter.2, filename = "scatter_2.png", height = 8, width = 8)
以上のように,簡単に見栄えのするグラフが描画できました.
正直,ggplot2だけでもRを使う価値があると思います.
三次元のグラフのように見栄えのするグラフも描画できるようですので,みなさんも是非使ってみてください.

参考文献:
Drew Conwayら 『入門 機械学習』オライリージャパン (2012/12/22)
「乱数Tips大全」『RjpWiki』 (2015/02/09アクセス)

コメント

このブログの人気の投稿

C++11のためにGCCの最新版をインストールする

分解:Logicool M570

MOCO'Sキッチンのフォントに似せるβ版