Help us understand the problem. What is going on with this article?

Juliaで遊んでみた - 準備編

最近流行りつつある科学計算処理向けの高水準言語「Julia」の基本操作をまとめていきます。
1.準備編
2.確率分布・仮説検定と可視化編
3.データフレーム操作編

chapter.0 利用環境の準備

1.Julia install

Macユーザー向けです。
Juliaをインストールするには、公式サイトhttp://www.julialang.org からディスクイメージ(.dmg)をダウンロードし、内容をアプリケーション・フォルダにコピーするだけです。インストールしたJulia.appを起動すると、ターミナルの中でJuliaが立ち上がり、すぐに利用開始できます。

brew があればターミナルから以下が簡単です。

$ brew cask install julia

2.起動

ターミナルから以下で起動( "Julia-1.2" の箇所は install 時のバージョンを入れる)

$ /Applications/Julia-1.2.app/Contents/Resources/julia/bin/julia

PATHを通す

$ export PATH=${PATH}:/Applications/Julia-1.2.app/Contents/Resources/julia/bin
$ source .bash_profile

起動してみる

$ julia
              _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.2.0 (2019-08-20)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> 

3.juliaの各種モードとjupyter notebookでの利用

juliaはいくつかモードがあって、それを切り替えながら使用します。
まずは、jupyter notebook で使用するために IJulia パッケージを install してみたいと思います。

パッケージ isntall

まずターミナルから julia 起動

$ julia

で " ] " と入力すると

(v1.2)pkg>

上記のようにパッケージ管理などを行える REPL モードに移るので

(v1.2)pkg> add IJulia 

で IJulia の install ができます。これだけで jupyter notebook で使用する準備はOKです。
※jupyter notebook 未 install の方は install しましょう。
なお、Anaconda から jupyter を install した方は設定方法が異なるかも。ご注意を
念のため jupyter の kernel 一覧を確認してみると...

$ jupyter kernelspec list
Available kernels:
  julia-1.2       /Users/xxxx/Library/Jupyter/kernels/julia-1.2

なお、install 済みパッケージの確認は "st" コマンドで。

(v1.2)pkg> st
  Status `~/.julia/environments/v1.2/Project.toml`
 [xxxxxxxx] IJulia v1.20.2

ちなみに各種パッケージやライブラリのinstallはこのREPLモードで行うようです。
他にもモードがあるので、ちょっと紹介。

shell モード

その名の通りですが、shell (bash)入力が可能なモード

$ julia

で、" ; "と入力。

shell>

ためしに、

shell> pwd
/Users/xxxx

こんな感じ。

helpモード

Rの "?" や python の "help()" に相当するモード

$ julia

で、" ? "と入力。

help?>

ためしに、

help?> sum
## ドキュメント

こんな感じ。

jupyter notebook でのモード切り替え

notebook セル内でそのまま入力。
スクリーンショット 2019-12-01 14.37.28.png

スクリーンショット 2019-12-01 14.38.37.png

chapter.1 基本操作

1.基本的な算術

julia> 1 + 2 + 3
6
julia> 1 - 2
-1
julia> 3 * 2 / 12
0.5
julia> 3 ^ 2 # 3の二乗 Excelっぽい
9
julia> x = 1
1
julia> x += 4
5
julia> x % 3
2
julia> div(17, x) # python で言う所の 17//5
3
julia> x = 2 ; y = 3 #  一行で複数の変数を定義することも
3
julia> x + y
5
julia> z = (x = 1; y = 2; x + y) # このような記述方法もある
3

2.配列

julia> [1 2 3]
1×3 Array{Int64,2}:
 1  2  3

julia> Int64[1 2 3] # 配列の型指定
1×3 Array{Int64,2}:
 1  2  3

julia> Float64[1 2 3]
1×3 Array{Float64,2}:
 1.0  2.0  3.0

julia> String["A" "B" "C"]
1×3 Array{String,2}:
 "A"  "B"  "C"

julia> Any[1 "A"]
1×2 Array{Any,2}:
 1  "A"

julia> size([1 2 3 4 5]) # pandas の".shape"や R の"dim"に相当
(1, 5)

julia> length([1 2 3 4 5]) # python の "len()"に相当

julia> a = [1 2 3 4 5]
julia> a[1] # index は 1 から
1

julia> a[[2 4]] # 複数 index
1×2 Array{Int64,2}:
 2  4

julia> a[1:3] スライス
3-element Array{Int64,1}:
 1
 2
 3

julia> maximum(a)
5

julia> minimum(a)
1

julia> sum(a)
15

julia> A = [1 2 3 ; 4 5 6] # 行列
2×3 Array{Int64,2}:
 1  2  3
 4  5  6
# 以下も同じ意味
# A = [1 2 3
#      4 5 6]

julia> A' #  転置
3×2 Adjoint{Int64,Array{Int64,2}}:
 1  4
 2  5
 3  6

julia> A[5] # 次元数を気にせず一つのindexで要素アクセス。Rのmatrixっぽい
3

julia> A[:, 2] # index指定。numpy,Rっぽい
2-element Array{Int64,1}:
 2
 5

3.ベクトルの演算

julia> a = [1 2 3] ; b = [4 5 6]
julia> a + b
1×3 Array{Int64,2}:
 5  7  9

julia> a - b
1×3 Array{Int64,2}:
 -3  -3  -3

julia> a .* b # a * b ではない点に注意
1×3 Array{Int64,2}:
 4  10  18

julia> a .+ 1
1×3 Array{Int64,2}:
 2  3  4

julia> a .* 5
1×3 Array{Int64,2}:
 5  10  15

線形代数のパッケージもある
なお、ライブラリの import は using [ライブラリ名称]

julia> using LinearAlgebra
julia> dot(a ,b) # 内積
32
julia> cosineθ = dot(a, b) / (sqrt(dot(a, a)) * sqrt(dot(b, b)))
0.9746318461970762

他の配列データ型

julia> tuple(1,2) # python と一緒
(1,2)
julia> Set([1 1 2 3 4 4]) # 集合 S が大文字!!
Set([4, 2, 3, 1])

julia> my_profile = Dict([("name", "Hiro"), ("age", 35)]) # 辞書
Dict{String,Any} with 2 entries:
  "name" => "Hiro"
  "age"  => 35

julia> my_profile = Dict("name" => "Hiro", "age" => 35) # これも一緒
Dict{String,Any} with 2 entries:
  "name" => "Hiro"
  "age"  => 35
julia> user_profile["name"]
"Hiro"

その他

julia> π
π = 3.1415926535897...

julia> 
 = 2.7182818284590...

julia> 1 / (1 + ^-2)
0.8807970779778823

julia> x = [1 2 3 4] # 配列の場合
julia> 1 ./ (1 .+ .^-x) # 演算子の先頭に . を付ける
1×4 Array{Float64,2}:
 0.731059  0.880797  0.952574  0.982014

julia> 日本語変数もできる = 10
10
julia> 日本語変数もできる + 1
11

4.制御フロー

ここからは jupyter notebook
スクリーンショット 2019-12-01 15.27.00.png
スクリーンショット 2019-12-01 15.27.30.png
スクリーンショット 2019-12-01 15.28.33.png
for文
スクリーンショット 2019-12-01 15.29.29.png
スクリーンショット 2019-12-01 15.29.52.png
スクリーンショット 2019-12-01 15.31.06.png
スクリーンショット 2019-12-01 15.31.35.png
関数
スクリーンショット 2019-12-01 15.32.35.png

※思いの外、量が多くなってしまったので、何回かに分けます。次回は確率分布と可視化の予定

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした