もうだめだはこのひとははやくやめるべきやめさせるべきにほんおわったとおもわれるぞぶちぎれるなどもってのほか
キラキラネームだね。みんな,喜んでダウンロード・インストールしてくれると思ったのかな?
そもそも,誰に通知が行ったかまでは個人情報保護の観点から把握しないのは当たり前だろうけど,何件くらい通知がされたかも把握していなかったのだろうか?
把握できていれば,通知が 0 なんて異常事態はすぐわかっただろうし。
どの地域でどれくらいの通知があったというのは感染状況把握の上で重大なデータだと思うのだけど,それすら把握していなかったのか?
というか,それくらいの情報は把握するように,厚労省なりなんなりが指示しなかったのだろうか???
アホの集団だったのだろうか。
指示されなくても,個人情報を保護しながらも,アプリが適切に動いているということも把握しようとしていなかったのか。
IT 企業ともてはやされているが,その頭のレベルがわかってしまった出来事だね。なさけない。
政府や厚労省には詫びなくてもいいけど,全国民にお詫びしなさい。全員,丸坊主にするのが手始めだね。
参照元
https://multivariatestatsjl.readthedocs.io/en/stable/lreg.html
julia> using MultivariateStats
julia> using Statistics
julia> using Plots
julia> using Random
julia> Random.seed!(123);
例示のためのデータの準備
julia> X = rand(1000, 3); # feature matrix
julia> a0 = rand(3); # ground truths
julia> y = X * a0 + 0.1 * randn(1000); # generate response
llsq の使用法
julia> a = llsq(X, y; bias=false);
julia> println(a)
[0.245462794630527, 0.39679768213855493, 0.8727270841084174]
それぞれが何を指すかは,あとの R スクリプトの結果を参照のこと
予測
julia> yp = X * a;
図を描いてみる
julia> scatter(y, yp, label="")
誤差の評価
julia> rmse = sqrt(mean(abs2.(y .- yp)));
julia> print("rmse = $rmse")
rmse = 0.1048730072098373
R であれば,
julia> using RCall
julia> R"""
options(digits=15)
lm($y ~$X+0)
"""
RObject{VecSxp}
Call:
lm(formula = `#JL`$y ~ `#JL`$X + 0)
Coefficients:
`#JL`$X1 `#JL`$X2 `#JL`$X3
0.245462794631 0.396797682139 0.872727084108
切片ありの場合(デフォルト) biase=true
julia> a = llsq(X, y)
julia> println(a)
[0.24257522344490817, 0.3941270828348356, 0.8700648276936214, 0.0044911156001156615]
R でやると
julia> R"lm($y ~$X)"
RObject{VecSxp}
Call:
lm(formula = `#JL`$y ~ `#JL`$X)
Coefficients:
(Intercept) `#JL`$X1 `#JL`$X2 `#JL`$X3
0.00449111560012 0.24257522344490 0.39412708283483 0.87006482769362
単回帰の場合にはちょっと面倒
julia> x1 = reshape(X[:, 1], size(X, 1), :);
julia> a = llsq(x1, y);
julia> println(a)
[0.19497651423072845, 0.6432936814951281]
R ならば,
julia> R"lm($y ~ $x1)"
RObject{VecSxp}
Call:
lm(formula = `#JL`$y ~ `#JL`$x1)
Coefficients:
(Intercept) `#JL`$x1
0.643293681495 0.194976514231
★★ 代替法として,GLM を使えば,R と同じような感じで分析できるよ。
(こっちがお勧め)
julia> using GLM
julia> using DataFrames
julia> df = DataFrame(X);
julia> insertcols!(df, 4, :y => y);
julia> lm(@formula(y ~ x1 + x2 + x3), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
y ~ 1 + x1 + x2 + x3
Coefficients:
───────────────────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────────────────
(Intercept) 0.00449112 0.0107952 0.42 0.6775 -0.0166928 0.025675
x1 0.242575 0.0118303 20.50
x2 0.394127 0.01155 34.12
x3 0.870065 0.0116234 74.85
───────────────────────────────────────────────────────────────────────────
julia> lm(@formula(y ~ x1 + x2 + x3 + 0), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
y ~ 0 + x1 + x2 + x3
Coefficients:
───────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
───────────────────────────────────────────────────────────────
x1 0.245463 0.0095763 25.63
x2 0.396798 0.00959782 41.34
x3 0.872727 0.00969927 89.98
───────────────────────────────────────────────────────────────
julia> lm(@formula(y ~ x1), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
y ~ 1 + x1
Coefficients:
────────────────────────────────────────────────────────────────────────
Coef. Std. Error t Pr(>|t|) Lower 95% Upper 95%
────────────────────────────────────────────────────────────────────────
(Intercept) 0.643294 0.0188953 34.05
x1 0.194977 0.0327767 5.95
────────────────────────────────────────────────────────────────────────
まあ,そんなところ。
決定係数を出したりはまた後で。
https://dataframes.juliadata.org/stable/man/getting_started/
の一番最後で以下が推奨されているので,それ以外の方法については書かない方がよい。
去年の夏の時点での記事や v. 1.5.2 ですら 今や deprecated なので,不適切な情報は広めないで欲しい。
using CSV
DataFrame(CSV.File(input))
CSV.write(output, df)
ただし,オプションを設定するためには,以下を使うべし。
CSV.read(input, DataFrame; kwargs)
某所で,Julia ではヒートマップを簡単に描くことができないとこぼしている人がいた。その人は行と列の並べ替えすらしないで,もっと簡単に描けないのかと言っている。
ヒートマップって,データのビジュアライゼーションという点ではそんなに優れているものとも思わないが,せめて適切に行と列を並べないと何の意味もないグラフができてしまうだけだ。
julia> using PyPlot, Plots, DataFrames, CSV
julia> pyplot()
julia> using Random
julia> Random.seed!(123)
julia> df = DataFrame(Location = ["NY", "SF", "NY", "NY", "SF", "SF", "TX", "TX", "TX", "DC", "DC", "DC"],
Class = ["M","M","H","L","L","H", "H","L","M","M","H","L"],
Score = rand(12))
12×3 DataFrame
Row │ Location Class Score
│ String String Float64
─────┼─────────────────────────────
1 │ NY M 0.768448
2 │ SF M 0.940515
3 │ NY H 0.673959
4 │ NY L 0.395453
5 │ SF L 0.313244
6 │ SF H 0.662555
7 │ TX H 0.586022
8 │ TX L 0.0521332
9 │ TX M 0.26864
10 │ DC M 0.108871
11 │ DC H 0.163666
12 │ DC L 0.473017
julia> CSV.write("data.csv", df)
縦軸にLocation, 横軸にClassを持つピボットテーブルに変形する
julia> pivot = DataFrames.unstack(data, :Location, :Class, :Score)
4×4 DataFrame
Row │ Location M H L
│ String Float64? Float64? Float64?
─────┼─────────────────────────────────────────
1 │ NY 0.768448 0.673959 0.395453
2 │ SF 0.940515 0.662555 0.313244
3 │ TX 0.26864 0.586022 0.0521332
4 │ DC 0.108871 0.163666 0.473017
ここまでだと,行も列も乱雑に並んでいるだけなので,適切に並べ替える。データフレームの操作は色々方法があるが,Query を使う例を挙げておく。
julia> using Query
julia> pivot2 = pivot |>
@select(1, 4, 2, 3) |>
@orderby(_.Location) |> DataFrame
4×4 DataFrame
Row │ Location L M H
│ String Float64? Float64? Float64?
─────┼─────────────────────────────────────────
1 │ DC 0.473017 0.108871 0.163666
2 │ NY 0.395453 0.768448 0.673959
3 │ SF 0.313244 0.940515 0.662555
4 │ TX 0.0521332 0.26864 0.586022
julia> x = names(pivot2)[2:end]
3-element Array{String,1}:
"L"
"M"
"H"
julia> y = pivot2.Location
4-element Array{String,1}:
"DC"
"NY"
"SF"
"TX"
julia> heatmap(x, y, Matrix(pivot2[:, 2:4]))
freqtable を使うやり方では行と列は辞書順になるが,任意の行と列の並べ替えはたいへんなので,そのまま描画。
julia> using DataFrames, FreqTables, NamedArrays
julia> using Plots
julia> pivot3 = freqtable(data, :Class, :Location, weights=-df.Score)
3×4 Named Array{Float64,2}
Class ╲ Location │ DC NY SF TX
─────────────────┼───────────────────────────────────────────
H │ 0.163666 0.673959 0.662555 0.586022
L │ 0.473017 0.395453 0.313244 0.0521332
M │ 0.108871 0.768448 0.940515 0.26864
julia> heatmap(pivot3)
行と列の並べ替えを簡単にできるように,意味のある並べ替えが自動的にできるように,色使いも選べるように,ブロック中に数値を描けるようにとか,要望は多々ある。
ないものは,作る,しか,ないの,かな?
いやいや,R がもうあるんだから,それでいいだろう。R の heatmap を使うべし。
julia> rownames, colnames = names(pivot3)
julia> using RCall
julia> R"""
mat = $pivot3
colnames(mat) = $colnames
rownames(mat) = $rownames
heatmap(mat)
"""
> 新型コロナウイルスの接触確認アプリ「COCOA」に不具合が見つかり、アンドロイド版で去年の秋以降、感染者と接触した可能性のあるアプリの利用者に通知が届いていないことがわかりました。
なんか,うさんくさかったねえ。
インストールしなくて,本当によかった。くそアプリというか,詐欺アプリじゃないか。金を取られなかっただけまだマシか(^_^;)
いかに,このアプリが信頼されていなかったかということにつきる。
信頼していないというか,気にも掛けていないから,インストールしようとも思わない。
別に気に掛けてもいないから,インストールしたとしても,アプリの動作結果がどうであるかしらない。
アプリの動作が変であったとしても,気づかないし,きづいても通知すらしない。
そもそも,アプリがちゃんと働いているかなんて,わかりようがない。
う??,そんなあぷり,あったの?
あったの知ってるけど,インストールしようなんて思わなかった。
インストールなんかしなくてよかったわあ。
これからも,おんなじようなアプリがあっても,インストールなんか絶対しないからな!!!ばかやろう。
もう,だめだわこりゃ。終わったな,日本政府。