投稿

10月, 2018の投稿を表示しています

julia で整数の Array に、任意の整数が含まれるか調べる方法

julia で整数の Array に、任意の整数が含まれるか調べてみます。 in を使う方法 ∈ (\in ) を使う方法 == と sum を使う方法 思いつくのは、この位でしょうか。 in を使う方法 julia> A = [1 2 ; 3 4] 2×2 Array{Int64,2}: 1 2 3 4 julia> 1 in A true julia> in(1, A) true julia> in(A, 1) false julia> in.(1,A) 2×2 BitArray{2}: true false false false Int64 の "1" の代り 1x1 の Array であるところの [1] を使うと上手くできません。 julia> x = [1] 1-element Array{Int64,1}: 1 julia> x in A false julia> x[1] in A true ∈ (\in ) を使う方法 "\in" と入力して直後にタブキーを押すと変換されます。使い方は in 同じです。 julia> 1∈A true julia> A∈1 false == と sum を使う方法 ちょっと邪道かもしれませんが、出来ないことはありません。ただし true, false の代わりに 1以上 , 0 が出力になります。ブリーアン型の Array になる時は、この方法が使えます。 julia> sum( true, false) ERROR: MethodError: objects of type Bool are not callable julia> sum( [true, false]) 1 julia> sum( [true, false, true]) 2 というのを使います。"1.==A" ではなく、"1 .=A" です。1の直後にスペースが必要です。 julia> sum(1 .==A) 2

julia で、flowcytometry のデータを plot する

イメージ
julia で、flowcytometry のデータを plot してみましょう。 julia の速さがあれば、flowcytometry の解析も、基本的な解析ができます。 読み込みは、julia native であれば、FileIO.jl + FCSFiles が julia 1.0 でも動きます。 この方法では、julia の dictionary 形式で、データを読み込んでくれます。 dictionary を Array に変換する方法は、 別のブログ に記載してありますので、ご参照下さい。 生の FSC データは log や biexpornential への変換が必要になります。 読み込みから、このあたりの操作は、別の機会に記載させて頂きます。 今回は、簡便性のため、正規化された疑似データを plot することにします。 plot の方法は、業界標準の FlowJo の Dot, Pseudocolor, Contour の3種の plot を表現することにします。 まず、パッケージの読み込みと、正規化された疑似データを作ります。 速度の面等では、Plots ですが、Contour が不安定です。 Contour には、PyPlot を使うことにします。 using Plots, PyCall , PyPlot using KernelDensity using Distributions using StatsBase @pyimport seaborn as sns data = vcat( rand(Normal(),10000,2), rand(Normal(3,0.8),10000,2), rand(Normal(-2,2),10000,2).+[0 2], rand(TDist(10),1000,2) )[rand(1:31000,100000) ,:]; xdata = data[:,1]; ydata = data[:,2]; 散布図 (Dot) の描画 まずは Dot を描きましょう。 Plots.plot(data[:,1],data[:,2], t=:scatter, ...

julia のヒストグラムに、カーネル密度推定からの予測曲線を重ねる方法

イメージ
julia でヒストグラムを書いて、カーネル密度推定からの予測度数の曲線を重ねてみます。 カーネル密度推定は、KernelDensity.jl を用いて行います。推定値は、確率 (0から1の値) で出てきます。ヒストグラムに重ねる時には、ヒストグラムの最も観測数が多かった階級の観測数を求める必要があります。この直前のブログの fit(Histogram, ...) というのを使います。 PyPlot と seaborn を呼び出して、 sns.distplot(data) で終りでしょう。と、おっしゃる方がいらっしゃると思います そのとおりです。上記の図をヒストグラムと曲線に分けて書いてみようというわけです。 では、パッケージとランダムサンプルの作製をします。サンプルは、2次元ですが、1列目だけを今回は使います。グラフは最近注目の Plots.jl を使うことにします。 using Plots using KernelDensity using Distributions using StatsBase data = vcat( rand(Normal(),10000,2), rand(Normal(3,0.8),10000,2), rand(Normal(-2,2),10000,2).+[0 2], rand(TDist(10),1000,2) )[rand(1:31000,100000) ,:]; xdata = data[:,1]; まずは、fit(Histogram, ...) を使って最頻階級の度数 xn_max と、観測値の最小値 x_min と、最大値 x_max を求めておきます。カーネル密度推定は、観測範囲外ではできないので、x_mimは大きめ, x_min は小さめにしておきます x_hist = fit(Histogram, xdata, nbins=100) xn_max = maximum(x_hist.weights) x_min = floor(minimum(xdata))+1 x_max = floor(maximum(xdata)) カーネル密度推定を、KernelDensity.jl を用いて行います。実際に曲線を描く時は、観測値に対して推定値を返すのではなく、グ...

julia での度数分布の求め方

イメージ
julia で、数値ベクトルの度数分布を求めてみましょう。文字列なら、StatsBase.countmap() で足りることが多いでしょう。 まずは、パッケージの読み込みと、テストサンプルデータを作ります。これからしばらく2次元データを使うので、2次元で作ります。 using Plots using KernelDensity using Distributions using StatsBase data = vcat( rand(Normal(),10000,2), rand(Normal(3,0.8),10000,2), rand(Normal(-2,2),10000,2).+[0 2], rand(TDist(10),1000,2) )[rand(1:31000,100000) ,:]; xdata = data[:,1]; ydata = data[:,2]; はじめに、10000個ずつ3通りの正規分布を縦に並べて、最後の t 分布はノイズで入れています。そして、この中から、ランダムで選ぶ方法を採りました。ランダムで採り直す方が現実に近いと考えています。 1列目を xdata として、使います。 次に、xdata のヒストグラムを作ります。 histogram(xdata, nbins=100) このヒストグラムのそれぞれの階級のデータの数 (棒グラフの高さ) を求めたいということです。 それぞれのデータの個数は、fit(Histogram, xdata, ...) を使います。 julia> x_hist = fit(Histogram, xdata, nbins=100) ┌ Warning: Default for keyword argument "closed" has changed from :right to :left. │ To avoid this warning, specify closed=:right or closed=:left as appropriate. │ caller = ip:0x0 └ @ Core :-1 Histogram{Int64,1,Tuple{StepRangeLen{Float64,Base....

Julia の Dict(辞書) を Array や DataFrame に組み直す方法

今さらですが、Julia の Dict(辞書) を Array や DataFrame に組み直す方法です。悩んでいる人が、どの位いらっしゃるかは不明ですが... keys() と values() に対して、collect() を使えば良いようです。 julia> dict = Dict("a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5); julia> keys(dict) Base.KeySet for a Dict{String,Int64} with 5 entries. Keys: "c" "e" "b" "a" "d" julia> keys(dict)[1] ERROR: MethodError: no method matching getindex(::Base.KeySet{String,Dict{String,Int64}}, ::Int64) Stacktrace: [1] top-level scope at none:0 julia> collect(keys(dict)) 5-element Array{String,1}: "c" "e" "b" "a" "d" julia> collect(keys(dict))[1] "c" Array にする方法が分れば、Array だの DataFrame だのは簡単です。 julia> hcat(collect(keys(dict)), collect(values(dict))) 5×2 Array{Any,2}: "c" 3 "e" 5 "b" 2 "a" 1 "d" 4 ...