Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】
2021.12.20
Jupyter Notebookを使ったグラフ描画編~Juliaに入門してみよう~
前回は、Julia の Web フレームワーク、「Genie」について紹介しました。
今回は、インタプリタ言語と相性がバッチリな、Jupyter Notebook を使っていきます。
また、そのサンプルコードとして、グラフ描画フレームワークも一緒に学んでいきましょう!
※本記事で使用するのは、「Julia ver 1.5」です。
「IJulia」をインストールする
「IJulia」とは、Jupyter 環境に適応させるために、バックエンドで動作するフレームワークです。
特に Julia は、一つ一つのモジュールが重いので、なるべく負担は軽くしたいもの。
一つのセッションで、一度だけ最初にフレームワークを読み込めば、あとは快適に作業できますよね。
IJulia では、そういった使い方ができるのです。
インストールの方法
Jupyter のインストールは次の通り。
pip 環境であれば、
1 | $ pip install jupyter |
とすれば完了。
IJulia のインストールも、とても簡単にできます。
次のように、パッケージモードで追加するだけです。
1 2 3 | $ julia julia> ] (@v1.5) pkg> add IJulia |
そうしたら実際に、Jupyter で使用できるようになっているか、確認してみましょう!
1 2 3 4 | $ jupyter kernelspec list Available kernels: julia-1.5 /Users/username/Library/Jupyter/kernels/julia-1.5 python3 /usr/local/share/jupyter/kernels/python3 |
このようになっていれば、Julia が使えるようになっているはずです。
立ち上げてみる
早速、以下のコマンドで立ち上げてみると、
1 | $ jupyter notebook |
このように、Julia が選択できるようになっているはずです。
「Plots」もインストールする
「Plots」は、Julia でよく使われる、グラフ描画のフレームワークです。
特徴は、シンプルな記述で複雑なグラフが描ける、といったところでしょうか。
もし、まだインストールしていなければ、パッケージモードで
1 | (@v1.5) pkg> add Plots |
と、してください。
Jupyter Notebookを使ってグラフを描画してみる
それでは早速、Jupyter でコーディングしてみましょう。
動作確認
まずは、簡単なコードで動作を確認します。
1 | using Plots |
Plots を、「Shift + Enter」でインポートします。
ちょっと時間がかかりますが、終わったら、以下のコードを実行してみましょう。
1 | plot(sin) |
すると、
このように、かなり引数は省略していますが、きちんと正弦波がプロットされました!
plot()の各種引数を指定してみる
先ほどは、ほとんどの引数を端折りましたが、以下のように細かく描画をコントロールできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 | plot( x->x^3+x^2+x, # 無名関数で描画する関数を決定 xlabel="x", # x軸凡例 ylabel="y", # y軸凡例 label="y=x³+x²+x", # グラフラベル xlims=(-3, 3), # x軸範囲 ylims=(-10, 10), # y軸範囲 xticks=-3:0.5:3, # x軸目盛り表示刻み title="Plot()", # グラフタイトル linecolor=:orange, # 色 linewidth=3, # 太さ linestyle=:dot, # 描画スタイル ) |
ちなみに画像は、 savefig("figure_name.png") で保存できます。
もちろん、png に留まらず、pdf 形式でも保存できますよ!
複数のグラフを描画する
複数のグラフを個別で描画する場合は、以下のようにします。
1 2 3 4 5 | plt1 = plot(x->x) plt2 = plot(x->x^2) plt3 = plot(x->x^3) plot(plt1, plt2, plt3, layout=(1, 3), size=(800, 400)) |
全て、 plot() で済んでしまうのは便利ですね!
重ねて描画する
もし、複数のグラフを重ねて描画したいときは、以下のように記述しましょう!
1 2 3 | plot(sin, label="sin()") plot!(cos, label="cos()") plot!(x->0.1x^2, label="0.1x²", ylim=(-1, 1)) |
これを実行すると、キレイに重なったグラフが描画されます。
ちなみに、 plot!() を使えば、いくつでも重ねて描画できます。
本来は、第一引数に重ねて描画するプロットを引数にとりますが、今回のように省略することもできるのです。
つまり、
1 2 3 | plt = plot(sin, label="sin()") plot!(plt, cos, label="cos()") plot!(plt, x->0.1x^2, label="0.1x²", ylim=(-1, 1)) |
は、「同じ」となるわけですね!
「!」が最後についた関数
「!」が最後についた関数は、Julia の慣例の一つで、その関数の引数を変更するときに使用します。
つまり、以下のようにすれば、後からグラフタイトルをつけたり、描画範囲を変更したりできるわけです。
1 | plot!(title="The comparison", xlim=(-4, 4)) |
その他のグラフ
連続的な折れ線グラフに留まらず、ヒストグラムや 3D グラフなども、簡単に描画できます。
これも、サンプルコードを見ていきましょう!
1 | using StatsPlots # randn() 描画用: なければ Pkg> add StatsPlots |
1 2 3 4 5 6 7 8 9 10 11 12 | p1 = bar(rand(50), title="bar") p2 = pie(rand(8), title="pie") p3 = histogram(randn(1000), title="histogram") p4 = scatter(rand(20), rand(20), title="scatter") x = y = -10:0.1:10 z = sin.(x) * cos.(y') # "."を使った関数呼び出しは、配列に対して一括で関数処理を行うJuliaの記法 p5 = heatmap(z, title="heatmap") p6 = surface(z, title="surface", color=palette(:ice)) # カラーパレットの変更 plot(p1, p2, p3, p4, p5, p6, layout=(3, 2), size=(1000, 800)) |
グラフが、キレイに描画できていますね!
「他のも見てみたい!」という方は、Plots の公式ドキュメントにも、目を通してみましょう。
【Plots 公式ドキュメント】
http://docs.juliaplots.org/latest/
バックエンドライブラリを変更する
Plots のデフォルトでは、描画ライブラリは「GR」が呼ばれるので、必要に応じて変更します。
例えば、PyPlot であれば、以下のような設定をすれば完了です。
1 2 | (@v1.5) pkg> add PyPlot (@v1.5) pkg> build PyCall |
あとは、バックエンドを変更して、描画するだけです。
1 | pyplot() # バックエンドライブラリの変更 |
1 2 | plot(sin.(x)) plot!(cos.(x)) |
ちなみに、PyPlot の特徴は、出力が PNG 形式であること。
GR では SVG なので、キレイに描画されます。
ところが PyPlot では、DPI を調整しないと、やや粗めの出力になってしまうのです。
SVG 形式は、パッとみた感じは良いのですが、複雑なグラフをたくさん描画するほど、ページは重くなってしまいます。
つまり、目的によって、使い分けるのが良いということですね!
ただ、普段使いであれば、デフォルトの GR で問題ありません。
Fluxでの機械学習編へつづく!
今回は、Julia を Jupyter Notebook で使えるようにする手順と、描画ライブラリの Plots を紹介しました。
レポートや論文などに載せるグラフを、手早く作成したい場合は、Python より優秀かもしれません。
そう考えてみると、Julia の「研究者向け言語」といわれる意味が、バッチリ伝わってきますね!
さて次回は、Julia の機械学習フレームワーク「Flux」を、紹介していこうと思います。
では、次回もお楽しみに!
Fluxでの機械学習編はこちら!
こちらの記事もオススメ!
書いた人はこんな人
- 「好きを仕事にするエンジニア集団」の(株)ライトコードです!
ライトコードは、福岡、東京、大阪の3拠点で事業展開するIT企業です。
現在は、国内を代表する大手IT企業を取引先にもち、ITシステムの受託事業が中心。
いずれも直取引で、月間PV数1億を超えるWebサービスのシステム開発・運営、インフラの構築・運用に携わっています。
システム開発依頼・お見積もり大歓迎!
また、現在「WEBエンジニア」「モバイルエンジニア」「営業」「WEBデザイナー」「WEBディレクター」を積極採用中です!
インターンや新卒採用も行っております。
以下よりご応募をお待ちしております!
https://rightcode.co.jp/recruit
- ライトコードの日常2月 29, 2024座談会はじめました!ライトコードの話ちょっと聞いてみませんか?
- ライトコードの日常12月 27, 2023年忘れ!ライトコード大忘年会2023
- ライトコードの日常12月 1, 2023ライトコードクエスト〜東京オフィス歴史編〜
- ITエンタメ10月 13, 2023Netflixの成功はレコメンドエンジン?