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