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

    メディアチームメディアチーム
    2020.11.10

    IT技術

    Julia入門~高速な動的型付け言語~【Jupyter Notebookを使ったグラフ描画編】

    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機械学習 特集知識編人工知能・機械学習でよく使われるワード徹底まとめ!機械学習の元祖「パーセプトロン」とは?【人工知能】ニューラルネ...

    ライトコードでは、エンジニアを積極採用中!

    ライトコードでは、エンジニアを積極採用しています!社長と一杯しながらお話しする機会もご用意しております。そのほかカジュアル面談等もございますので、くわしくは採用情報をご確認ください。

    採用情報へ

    メディアチーム
    メディアチーム
    Show more...

    おすすめ記事

    エンジニア大募集中!

    ライトコードでは、エンジニアを積極採用中です。

    特に、WEBエンジニアとモバイルエンジニアは是非ご応募お待ちしております!

    また、フリーランスエンジニア様も大募集中です。

    background