• トップ
  • ブログ一覧
  • Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】
  • Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】

    広告メディア事業部広告メディア事業部
    2020.11.10

    IT技術

    Jupyter Notebookを使ったグラフ描画編~Juliaに入門してみよう~

    前回は、Julia の Web フレームワーク、「Genie」について紹介しました。

    【Webフレームワーク編】Julia入門~高速な動的型付け言語~2020.11.03【Webフレームワーク編】Julia入門~高速な動的型付け言語~Webフレームワーク編~Juliaに入門してみよう~前回は、Julia の環境構築の方法や、文法などを紹介しました。今...

    今回は、インタプリタ言語と相性がバッチリな、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
    「IJulia」をインストールする

    このように、Julia が選択できるようになっているはずです。

    「Plots」もインストールする

    「Plots」は、Julia でよく使われる、グラフ描画のフレームワークです。

    特徴は、シンプルな記述で複雑なグラフが描ける、といったところでしょうか。

    もし、まだインストールしていなければ、パッケージモードで

    1(@v1.5) pkg> add Plots

    と、してください。

    Jupyter Notebookを使ってグラフを描画してみる

    それでは早速、Jupyter でコーディングしてみましょう。

    動作確認

    まずは、簡単なコードで動作を確認します。

    1using Plots

    Plots を、「Shift + Enter」でインポートします。

    ちょっと時間がかかりますが、終わったら、以下のコードを実行してみましょう。

    1plot(sin)

    すると、

    Jupyter Notebookを使ってグラフを描画してみる

    このように、かなり引数は省略していますが、きちんと正弦波がプロットされました!

    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)
    plot() グラフ

    ちなみに画像は、 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での機械学習編はこちら!

    Julia入門~高速な動的型付け言語~【Fluxでの機械学習編】2020.11.23Julia入門~高速な動的型付け言語~【Fluxでの機械学習編】Fluxで機械学習編~Juliaに入門してみよう~前回は、Julia と Jupyter Notebook を連携して...

    こちらの記事もオススメ!

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...
    featureImg2020.07.28機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    広告メディア事業部

    広告メディア事業部

    おすすめ記事