裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia でコンソールから入力

2021年02月18日 | ブログラミング

コンソールから入力

基本は,

  • readline() で文字列を読む。
  • 複数のフィールドがあるなら,split(文字列)でフィールドを分ける。
  • 分割された文字列を,整数に変換するには parse(Int, 文字列),実数に変換するには parse(Float64, 文字列)。
  • 複数の整数,実数変換は parse.() のようにドット記法を使う。
  • 変換された要素を配列(ベクトル)に代入,または複数の変数に代入する。

文字列として 1 行入力

入力:"abcdefg 12345"

s = readline() # "abcdefg 12345"

区切り文字で区切って複数の文字列として配列(ベクトル)へ入力

デフォルトでは空白区切り

入力:"abcdefg 12345"

s = split(readline()) # 要素数 2 のベクトル: "abcdefg", "123"

カンマで区切るとき

入力:"123,456,789"

s = split(readline(), ",") # 要素数 3 のベクトル: "123", "456", "789"

複数の変数へ入力

入力:"123 456 789"

a, b, c = split(readline()) # 3 変数へ入力: "123", "456", "789"
a # "123"
b # "456"
c # "789"

1 行に整数 1 つ

入力:"12345"

n = parse(Int, readline()) # 12345

1 行に実数 1 つ

入力:"12345"

f = parse(Float64, readline()) # 12345.0

入力:"12.345"

f = parse(Float64, readline()) # 12.345

複数の整数を複数の変数へ入力

入力:"12345 67890 11 22"

i, j, k, l = parse.(Int, split(readline())) # i = 12345, j = 67890, k = 11, l = 22

複数の実数を複数の変数へ入力

入力:"0.12 4e2 -3.5e-3"

a, b, c = parse.(Float64, split(readline())) # a = 0.12, b = 400.0, c = -0.0035

複数の整数を配列(ベクトル)へ入力

入力:"12345 67890 11 22"

n = parse.(Int, split(readline())) # 要素数 4 のベクトル: 12345, 67890, 11, 22

複数の整数を配列(ベクトル)へ入力する(リスト内包表記; 非推奨)

入力:"23 45 67"

m = [parse(Int, x) for x in split(readline())] # 23, 45, 67

複数の実数を配列(ベクトル)へ入力

入力:"0.12 4e2 -3.5e-3"

f = parse.(Float64, split(readline())) # 要素数 3 のベクトル: 0.12, 400.0, -0.0035

複数の実数を配列(ベクトル)へ入力する(リスト内包表記; 非推奨)

入力:"23 45 67"

g = [parse(Float64, x) for x in split(readline())] # 23.0, 45.0, 67.0

読み込む変数の型が複数あるとき(文字列,整数,実数が混ざっているとき)

入力:"abc 123 45.67"

a, b, c = split(readline())
a # "abc"
b = parse(Int, b) # 123
c = parse(Float64, c) # 45.67

文字列を入力する(split() しない)と文字に分解されて集合に読み込まれる

入力:"qwretudhddhdhshkfh"

s = Set(readline()) # 'f', 'w', 'd', 'e', 'h', 's', 'u', 'r', 't', 'k', 'q'

文字列として集合に読み込ませるには,split() する

入力:"abc 123 *&* @@"

s2 = Set(split(readline())) # "abc", "*&*", "@@", "123"

複数行からの入力

1 行に 1 個ずつの整数を n 個(n 行から)入力する

n = 4 # これも入力するなら n = parse(Int, readline())
入力:
"123"
"456"
"789"
"111"

m = [parse(Int, readline()) for s in 1:n] # 123, 456, 789, 111

実数の入力なら parse(Float64, readline()),
文字列そのままを入力するなら readline() のまま

1 行に複数個の整数,別々の配列(ベクトル)の要素として入力

入力:
"1 2 3"
"4 5 6"
"7 8 9"
"0 1 2"

n = 4
a = zeros(Int, n)
b = zeros(Int, n)
c = zeros(Int, n)
for i = 1:n
    a[i], b[i], c[i] = parse.(Int, split(readline()))
end
a # 1, 4, 7, 0
b # 2, 5, 8, 1
c # 3, 6, 9, 2

1 行に複数,入力の都度,処理

n = 5
for i = 1:n
    a, b, c = parse.(Int, split(readline()))
    # a, b, c を使用する処理
end

2 次元配列(行列)へ入力

n x m 行列に読み込む。入力時には m の情報は使わない。1 行当たりの入力個数に注意。

入力:
"1 2 3 4 5"
"6 7 8 9 10"
"11 12 13 14 15"

n, m = 3, 5
A = zeros(Int, n, m)
for i =1:n
    A[i, :] = parse.(Int, split(readline()))
end
A
# 3×5 Array{Int64,2}:
#   1   2   3   4   5
#   6   7   8   9  10
#  11  12  13  14  15

特定の文字列を読むまで繰り返し入力

入力:
"1"
"2"
"3"
"finish"

s = 0
while true
    e = readline()
    e == "finish" && break
    s += parse(Int, e)
end
s # 6

空行が入力されるまで繰り返し入力

入力:
"1"
"2"
"3"
"finish"

s = 0
while true
    try
        e = readline()
        s += parse(Int, e)
    catch
        break
    end
end
s # 6

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Julia で GLM

2021年02月18日 | ブログラミング

############# R

> library(COUNT)
> example(affairs)

> glmaffp <- glm(naffairs ~ kids + yrsmarr2 + yrsmarr3 + yrsmarr4 + yrsmarr5,
+                family = poisson, data = affairs)
> summary(glmaffp)

Call:
glm(formula = naffairs ~ kids + yrsmarr2 + yrsmarr3 + yrsmarr4 + 
    yrsmarr5, family = poisson, data = affairs)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9668  -1.9364  -1.5412  -0.9274   7.0799  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  0.34038    0.09182   3.707  0.00021
kids         0.28809    0.09371   3.074  0.00211
yrsmarr2    -1.18431    0.17058  -6.943 3.84e-12
yrsmarr3    -0.45650    0.10536  -4.333 1.47e-05
yrsmarr4    -0.11823    0.09896  -1.195  0.23220
yrsmarr5     0.03119    0.09912   0.315  0.75303

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 2925.5  on 600  degrees of freedom
Residual deviance: 2797.0  on 595  degrees of freedom
AIC: 3303

Number of Fisher Scoring iterations: 7

> exp(coef(glmaffp))
(Intercept)        kids    yrsmarr2    yrsmarr3    yrsmarr4    yrsmarr5 
  1.4054793   1.3338755   0.3059569   0.6334955   0.8884915   1.0316802 

############# Julia

using GLM, RDatasets
affairs = dataset("COUNT", "affairs");

glmaffp = glm(@formula(NAffairs ~ Kids + YrsMarr2 + YrsMarr3 + YrsMarr4 + YrsMarr5),
  affairs, Poisson())

StatsModels.TableRegressionModel{GeneralizedLinearModel{GLM.GlmResp{Array{Float64,1},Poisson{Float64},LogLink},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

NAffairs ~ 1 + Kids + YrsMarr2 + YrsMarr3 + YrsMarr4 + YrsMarr5

Coefficients:
───────────────────────────────────────────────────────────────────────────
                  Coef.  Std. Error      z  Pr(>|z|)  Lower 95%   Upper 95%
───────────────────────────────────────────────────────────────────────────
(Intercept)   0.340379    0.0918004   3.71    0.0002   0.160453   0.520304
Kids          0.288088    0.0936936   3.07    0.0021   0.104452   0.471725
YrsMarr2     -1.18431     0.170531   -6.94    <1e-11  -1.51854   -0.850077
YrsMarr3     -0.456502    0.10535    -4.33    <1e-4   -0.662984  -0.250021
YrsMarr4     -0.11823     0.0989574  -1.19    0.2322  -0.312183   0.0757227
YrsMarr5      0.0311887   0.0991201   0.31    0.7530  -0.163083   0.225461
───────────────────────────────────────────────────────────────────────────

exp.(coef(glmaffp))

6-element Array{Float64,1}:
 1.4054795343529018
 1.333875284127698
 0.3059569619008904
 0.6334954669694786
 0.8884915158052847
 1.0316802145278257

############# R

> require(MASS)
> glmaffnb <- glm.nb(naffairs ~ kids + yrsmarr2 + yrsmarr3 + yrsmarr4 + yrsmarr5,
+                    data=affairs)
> summary(glmaffnb)

Call:
glm.nb(formula = naffairs ~ kids + yrsmarr2 + yrsmarr3 + yrsmarr4 + 
    yrsmarr5, data = affairs, init.theta = 0.1188516427, link = log)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.8253  -0.8155  -0.7611  -0.6002   1.9331  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  0.33180    0.31247   1.062  0.28830
kids         0.27309    0.31104   0.878  0.37995
yrsmarr2    -1.19445    0.42962  -2.780  0.00543
yrsmarr3    -0.38936    0.35449  -1.098  0.27205
yrsmarr4    -0.08137    0.38166  -0.213  0.83116
yrsmarr5     0.07220    0.40464   0.178  0.85838

(Dispersion parameter for Negative Binomial(0.1189) family taken to be 1)

    Null deviance: 344.44  on 600  degrees of freedom
Residual deviance: 332.40  on 595  degrees of freedom
AIC: 1504.6

Number of Fisher Scoring iterations: 1


              Theta:  0.1189 
          Std. Err.:  0.0127 

 2 x log-likelihood:  -1490.6260 
> exp(coef(glmaffnb))
(Intercept)        kids    yrsmarr2    yrsmarr3    yrsmarr4    yrsmarr5 
  1.3934701   1.3140193   0.3028717   0.6774934   0.9218498   1.0748732 

############# Julia

glmaffnb = glm(@formula(NAffairs ~ Kids + YrsMarr2 + YrsMarr3 + YrsMarr4 + YrsMarr5),
  affairs, NegativeBinomial(0.11), LogLink())

StatsModels.TableRegressionModel{GeneralizedLinearModel{GLM.GlmResp{Array{Float64,1},NegativeBinomial{Float64},LogLink},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}

NAffairs ~ 1 + Kids + YrsMarr2 + YrsMarr3 + YrsMarr4 + YrsMarr5

Coefficients:
──────────────────────────────────────────────────────────────────────────
                  Coef.  Std. Error      z  Pr(>|z|)  Lower 95%  Upper 95%
──────────────────────────────────────────────────────────────────────────
(Intercept)   0.331862     0.246782   1.34    0.1787  -0.151823   0.815546
Kids          0.273032     0.24558    1.11    0.2662  -0.208296   0.75436
YrsMarr2     -1.19469      0.33843   -3.53    0.0004  -1.858     -0.531382
YrsMarr3     -0.389315     0.280041  -1.39    0.1645  -0.938186   0.159557
YrsMarr4     -0.0813931    0.301714  -0.27    0.7873  -0.672741   0.509955
YrsMarr5      0.0721675    0.319973   0.23    0.8216  -0.554969   0.699304
──────────────────────────────────────────────────────────────────────────

exp.(coef(glmaffnb))

6-element Array{Float64,1}:
 1.3935600110230184
 1.3139428682448457
 0.3027969691945509
 0.6775210913867913
 0.9218312041654065
 1.0748353924095455

deviance(glmaffnb) # 314.9101838376581

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村