読者です 読者をやめる 読者になる 読者になる

広告/統計/アニメ/映画 等に関するブログ

広告/統計/アニメ/映画 等に関するブログ

Rの時系列分析で、日別の販売データのトレンドを掴む

R 統計 雑感

Excelではどうしても限界が来るからできるだけRを使うべきだというのが持論です。

Rを使えばこんなことも簡易に出来てしまうという例として、周期性のあるデータの可視化があります。

日別販売データは、土日が急に高くなって見辛い

総務省の「家計調査」から

例えば、「家計調査」には日別の集計項目が存在します。

統計局ホームページ/統計FAQ 19A-Q18 1世帯当たり1か月間の日別支出

(総務省統計局トップ > 統計データ > 分野別一覧 > 家計に関する統計 - 家計調査
   家計収支編 > 二人以上の世帯 > 詳細結果表 > 月次 > 表番号6-15 用途分類による日別支出、表番号6-16 品目分類による日別支出)

統計局ホームページ/家計調査(家計収支編) 調査結果

ここから2016年10月-2017年1月の「食料」のデータを引っ張りだして、普通に折れ線グラフにしたらこうなります。

f:id:yyhhyy:20170320193049p:plain

このままでは、いったいいつ頃が増加傾向にあって、いつ頃が減少傾向にあるのか、よくわかりません。

(参考)データを集計しグラフにするまでのコード

dplyr(集計用),reshape2,ggplot2(グラフのため),scales(日付の表示用)などを使う。

youto_10gatsu <- read.csv("youto_10gatsu.csv",header=T)
youto_11gatsu <- read.csv("youto_11gatsu.csv",header=T)
youto_12gatsu <- read.csv("youto_12gatsu.csv",header=T)
youto_1gatsu <- read.csv("youto_1gatsu.csv",header=T)

#データフレームの日付欄をDateデータに変更する関数
datetodate <- function(x){
  x$Date <- as.Date(x$Date)
  return(x)
}

youto_10gatsu <- datetodate(youto_10gatsu)
youto_11gatsu <- datetodate(youto_11gatsu)
youto_12gatsu <- datetodate(youto_12gatsu)
youto_1gatsu <- datetodate(youto_1gatsu)

#データを統合する
youto <- dplyr::full_join(youto_10gatsu,youto_11gatsu)
youto <- dplyr::full_join(youto,youto_12gatsu)
youto <- dplyr::full_join(youto,youto_1gatsu)

#ggplot用にデータを変換
youto_m <- melt(youto,id.vars = c("Date"))


#日付の軸の表示をわかりやすくしグラフにする
g <- ggplot(data=youto_m,aes(x=Date,y=value,color=variable))
g <- g + geom_line(size=1.2)
g <- g + theme_bw()
g <- g + scale_x_date(date_breaks="1 week",
                      date_minor_breaks="1 week",
                      date_labels = "%m/%d")
g <- g + scale_colour_manual(values= c("grey15"))
g <- g + ylab("")
plot(g)

明らかに一週間単位での動きがあるならば、それを除去する作業は簡単

先人の力を借ります。

qiita.com

tjo.hatenablog.com

などを参考にさせて頂きました。

日別データで7日ごとに周期があるのが明白そうであれば、ts関数で季節変動データにする時に「frequency」を「7」にし、stlパッケージでトレンドに分解するとそれらしい分解ができる筈です。

f:id:yyhhyy:20170320194605p:plain

そのコード

#時系列データにする。
youto_t<-ts(as.numeric(youto$食料),frequency=7)
plot(youto_t)

#トレンド等に分解する
youto_t_stl <- stl(youto[,2],s.window="periodic")
plot(youto_t_stl)

せっかくなので、元のデータとトレンドとを一つの線グラフで見てみる

stlパッケージのままでは、x軸が置き換えられてしまって、肝心の何月といった情報が一覧できませんので、改めてトレンド部分を取り出してggplot2などでグラフにするのが良いでしょう。

f:id:yyhhyy:20170320194817p:plain

年末の買い込み以外は平坦ですね。(食料ですから)

今回は地味なオープンデータでしたが、殆どの販売データというものは土日に偏りがあるものですので、日別のデータが手に入る立場にいる人にとっては使う機会がそこそこあるのではないでしょうか?

そのコード

headで適宜データの一部をのぞくと「trend」という項目が、time.seriesの2列めにあることがわかります。それをベクトルデータにして元のデータフレームに列名を付けて追加し、そのデータを元にggplot2でグラフにします。

#トレンドだけ取り出す
head(youto_t_stl)
head(youto_t_stl$time.series)
head(youto_t_stl$time.series[,2])

youto_trend <- youto_t_stl$time.series[,2]

#トレンド項をデータに追加する
youto$trend <- as.vector(youto_trend)

#トレンドをグラフに
youto_t_m <- melt(youto,id.vars =c("Date"))

g <- ggplot(data=youto_t_m,aes(x=Date,y=value,group=variable,color=variable))
g <- g + geom_line(size=1.2)
g <- g + theme_bw()
g <- g + scale_x_date(date_breaks="1 week",
                      date_minor_breaks="1 week",
                      date_labels = "%m/%d")
g <- g + scale_colour_manual(values = c("grey65", "grey15"))
g <- g + ylab("")
plot(g)

何をやっているのか?

7日で周期性のあるとモデル化した部分とそれ以外のトレンド部分とに分けてモデリングしてあてはめているのでしょうか?日本語でググる限り詳解されたサイトはなかなか見つからないので、そう安々と理解できるものではなさそうです。 時系列分析の書籍をあたってアルゴリズムを確認しているうちに日が暮れるので、取り敢えず今は便利なツールとして使っておきましょう。

Rと時系列(3)

uncorrelated.hatenablog.com

Excelにしたければ、

他人と共有する上で、画像のグラフだけだと安心しない人が多いので、csvファイルで吐き出せばExcelで渡すこともできます。

write.csv(youto,"youto.csv",quote=F)

f:id:yyhhyy:20170320195422p:plain

今回のコード全体

library("dplyr", lib.loc="C:/r/R-3.3.2/library")
library("ggplot2", lib.loc="C:/r/R-3.3.2/library")
library("reshape2", lib.loc="C:/r/R-3.3.2/library")
library("scales", lib.loc="C:/r/R-3.3.2/library")
library("RColorBrewer", lib.loc="C:/r/R-3.3.2/library")

youto_10gatsu <- read.csv("youto_10gatsu.csv",header=T)
youto_11gatsu <- read.csv("youto_11gatsu.csv",header=T)
youto_12gatsu <- read.csv("youto_12gatsu.csv",header=T)
youto_1gatsu <- read.csv("youto_1gatsu.csv",header=T)

#データフレームの日付欄をDateデータに変更する
datetodate <- function(x){
  x$Date <- as.Date(x$Date)
  return(x)
}

youto_10gatsu <- datetodate(youto_10gatsu)
youto_11gatsu <- datetodate(youto_11gatsu)
youto_12gatsu <- datetodate(youto_12gatsu)
youto_1gatsu <- datetodate(youto_1gatsu)

#データを統合する
youto <- dplyr::full_join(youto_10gatsu,youto_11gatsu)
youto <- dplyr::full_join(youto,youto_12gatsu)
youto <- dplyr::full_join(youto,youto_1gatsu)

#とりあえずグラフにする
youto_m <- melt(youto,id.vars = c("Date"))

g <- ggplot(data=youto_m,aes(x=Date,y=value,color=variable))
g <- g + geom_line(size=1.2)
g <- g + theme_bw()
g <- g + scale_x_date(date_breaks="1 week",
                      date_minor_breaks="1 week",
                      date_labels = "%m/%d")
g <- g + scale_colour_manual(values= c("grey15"))
g <- g + ylab("")
plot(g)
ggsave(plot=g,file="20170320-1.png",dpi=300,width=4,height=3,scale=2)

#季節データ化
youto_t<-ts(as.numeric(youto$食料),frequency=7)
plot(youto_t)
#分解
youto_t_stl <- stl(youto[,2],s.window="periodic")
plot(youto_t_stl)

#トレンドだけ取り出す
head(youto_t_stl)
head(youto_t_stl$time.series)
head(youto_t_stl$time.series[,2])

youto_trend <- youto_t_stl$time.series[,2]

#トレンド項をデータに追加する
youto$trend <- as.vector(youto_trend)

#トレンドをグラフに
youto_t_m <- melt(youto,id.vars =c("Date"))

g <- ggplot(data=youto_t_m,aes(x=Date,y=value,group=variable,color=variable))
g <- g + geom_line(size=1.2)
g <- g + theme_bw()
g <- g + scale_x_date(date_breaks="1 week",
                      date_minor_breaks="1 week",
                      date_labels = "%m/%d")
g <- g + scale_colour_manual(values = c("grey65", "grey15"))
g <- g + ylab("")
plot(g)
ggsave(plot=g,file="20170320-2.png",dpi=300,width=4,height=3,scale=2)

write.csv(youto,"youto.csv",quote=F)

AI(人工知能)の本領は、「集合知」と「センシング」だと思う

雑感

最近はバズワードのように「AI(人工知能)」が流行っている。 とは言え、ニューロ家電やファジー家電と言っていた頃もあるし、一体今、何が重要で、何が重要でないのか?よくわからないというのが正直なところではないかと思う。

人工知能の歴史

人工知能の歴史については、この本が詳しい。

人工知能自体はずっと昔から研究されているもので、これまで何度も流行りがあった。

機械学習、深層学習、人工知能

現在流行っているAIというのは、ドラえもん鉄腕アトムのようなものではなく、「機械学習」「パターン認識」のものである。 感情を理解するお友達ロボットではなくて、与えられた情報を事前に学習した情報と照らし合わせて正しく分類しているだけで、 例えれば、受験勉強が得意な優等生タイプ、ということだ。

機械学習人工知能の言葉の包含関係はこちらの図を見て欲しい。 blogs.nvidia.co.jp

ここ最近発達してきた理由

では、昔からあった筈の人工知能が何故この数年急速に発達してきたのか?というと、その技術的理由は、 - コンピュータの性能が上がって、これまで計算できなかった量の計算ができるようになったこと。 - 乱数によって擬似的に学習用データを自動生成する、という手法を思いついたこと。 である。

人工知能の得意分野を俯瞰で見る

人工知能が人の仕事を奪うのか?誰の仕事を奪うのか?を議論することに意味は薄い。今も昔も技術革新で職を失う人は居たし、これらかも同じだ。 そんな心配をしている暇があったら、人工知能で人間がより豊かになるにはどうしたらいいのか?を考える方が建設的である。

大量のデータが処理できるなら「集合知」が重要である

インターネットで世界が繋がり、Wikipediaが流行りだした頃によく言われていたのが「集合知」という概念である。 Amazonのレコメンド機能が始まったとき、その精度の高さに驚いた頃を思い出して欲しい。過去にその本を買った人が他にどんな本を買っていたのか?という情報を大量に集めれば集める程、「この本を買った人は、この本もチェックしています」の精度が上がる。

となるど、とにかくデータを集めることが重要で、自社だけで頑張って集めるよりも、如何に外部と協力してデータを集めるか?或いは、何かのサービスのついでにデータを収集するか?が人工知能の性能に直結する。

そういう意味で、個人のデータを記録し学習し気の利いたタイミングで何かをサジェストしてくれる人工知能家電、というのは、人工知能のメリットを活かせていないと言えるだろう。

情報が共有されていない分野の情報をつなぐことが重要

今、医療分野に人工知能が入ろうとしている。これまで属人的な個人のスキルとして蓄積されていたものを繋げてみんなで一緒に考えることができるようになる。そういう分野こそ活躍の場があると思われる。

例えば、「小さい子どもの子育て」という分野は、人類が産まれてこの方、うん十年とあるわけだがいつまでたっても正解がなく、毎年のように説は新しくなる。個人にとっては、人生の中で数年間のことで、老人になると必要の薄い知識になる。一方で社会全体では、いつも大量にその情報を欲している人がいる。

そういった問題を解決するために使われるべきだろう。

人間を超えるには「センシング」技術の応用が重要である

このことについて分かり易いのは、落合陽一先生のこの本の最後の方である。

魔法の世紀

魔法の世紀

人間の知覚を超える技術としては、今はおなじみの赤外線が代表的だが、センシング技術が発展することによって、人間の閾値を超えた範囲の空気の振動が測定できるようになった。つまりそれが落合陽一先生の言う「魔法」の世界である。

センシングは既に役立っている

経験と勘に頼っていた農業がセンシングデータによって手軽になってきたことは、周知の事実だと思われる。 もっと身近な例で言えば、デジタルカメラが自動的に人間の顔を認識して自動でピントを併せてくれる、といったものも普通に使っている筈だ。ちょっと前までは人間がマニュアルで焦点距離・光量・シャッタースピード全て調整していた。

人間には感知できないセンシングが重要

相手が怒っているのか? 個人の経験では判断に限界があることがある。

しかし人間よりも細かく声の抑揚を感知できれば、感情も認識できるようになる。

nlab.itmedia.co.jp

「勘のいい人」「気の利く人」すらも人工知能の力でバックアップできる時代が来るかもしれない。

人間がデータとして普段意識していないこともデータベース化する

入館IDの行動ログをとって、誰と誰との会話量が多いか?など組織や個人が普段集計していないデータも収集することによって組織変更に応用できる

或いは、こちらの本にある、バルーンチャレンジの例のように、情報提供のアシストだけをして結果に一見コミットしていないように見えるけれど実際には重要な役割をした人、に注目すると良い場合がある。

ソーシャル物理学:「良いアイデアはいかに広がるか」の新しい科学

ソーシャル物理学:「良いアイデアはいかに広がるか」の新しい科学

こういったことは既に実用化されていて、客先とのメールの回数によって担当営業がそろそろ営業に行くべきクライアントを見つけてアラートを出す、みたいなシステムも存在する。そういった個人では気がつかないデータを活躍することも重要と思われる。

まとめ

  • 色々な人が経験している筈なのに知識が共有されていないなぁという分野
  • 誰かの勘に頼っているなぁという分野
  • データを取ることなんて無理だと思っていた分野

が今後人工知能が伸びる分野だと思われる。

個人の購買履歴を追ってターゲティングされた広告を打つ、或いは、課金ユーザーを維持する、という狭い範囲で統計学が活かされても余り社会を良くするとは思えないし、そういう分野は大きなイノベーションには繋がらない。社会全体の役に立つように統計学を生かして欲しいと思う。

当選確率nのくじをn回ひいた時に少なくとも1回は当る確率の計算について

R python 統計 雑感

先日このツイートを見て、念のためそれを確かめてみた。

n回中、少なくとも1回は当る確率

「n回の試行中、少なくとも1回は当たりが出る確率」は、「n回の試行中、1回も当たらない確率」を「1(=100%)」から引けばいい。 *1

当る確率が「p」だとして、1回の試行で当たらない確率は「1- 1/p」。 n回連続で当たらない確率は、「(1-1/p)n」(累乗計算)となります。

試しにPythonで数式計算をしてみる

Pythonで数式計算をするライブラリは「sympy」

from sympy import *

sympyでは先ず使用する変数を定義します。 ここでは1回の当選確率を「p」。求めたい値であるn回試行中1回は当る確率を「p1」。試行回数を「n」としました。

n,p,p1=symbols("n p p1")

先ほどの計算式を記述

p1 = 1 - (1-1/p)**n

また、今の設定では、当選確率の逆数の回数分だけくじを引くことになっているので「p == n」を代入し、それを新たに「p1_2」と定義します。

p1_2 = p1.subs(p,n)
print(p1_2)

すると、「1/n」の確率で当るくじを「n」回ひいた時に、少なくとも1回は当るが出る確率は

「-(1 - 1/n)**n + 1」

とわかりました。 先ほどの手計算の数式と同じです。

このp1_2に具体的に「n==2」なり「n==100」なりを代入した結果を出力すれば、求めたい数値が出てきます。 「evalf()」で分数が小数点表示になります

print(p1_2.subs(n,2).evalf())
print(p1_2.subs(n,6).evalf())
print(p1_2.subs(n,100).evalf())

当選確率1/2で2回だと「0.750000000000000」 1/6の確率で6回だと「0.665102023319616」 1/100の確率で100回だと「0.633967658726771」

値を求めるだけならRでできる

数式を求めることに意義が薄いと思えば最初からRを使えば手っ取り早いです。

当たり/外れ の2種類しかない試行は二項分布になります。 確率を求めるのは、「d~」で、二項分布は「binom」。 引数は、「当たりの確率」、「試行回数」、「当る確率」の3つで、先ほど同様、1回も当たらない(==0)確率を1から引けば良いです。

1-dbinom(0,2,1/2)
1-dbinom(0,4,1/4)
1-dbinom(0,6,1/6)
1-dbinom(0,100,1/100)
> 1-dbinom(0,2,1/2)
[1] 0.75
> 1-dbinom(0,4,1/4)
[1] 0.6835938
> 1-dbinom(0,6,1/6)
[1] 0.665102
> 1-dbinom(0,100,1/100)
[1] 0.6339677

それはそうと、さっきと数字が違うじゃないですか?

さっきのツイートの数字は、63%と断言されていましたが、実際には違う、、、でも1/100で100回の時はとても近い

Rで繰り返し処理

というわけで、n==2 から n==100 までの夫々の確率をデータフレームに格納して、プロットしてみます。

繰り返し処理でデータフレームに追記していく場合、rbindを使います。

df <- data.frame()
for (n in 2:100){
  dat <- data.frame(1- dbinom(0,n,1/n))
  df <- rbind(df,dat)
}
colnames(df) <- c("prob")
df$x <- rep(2:100)

結果を出力すると、試行回数が上がるに連れて一定の数字に修練しているようです。

> head(df)
       prob x
1 0.7500000 2
2 0.7037037 3
3 0.6835938 4
4 0.6723200 5
5 0.6651020 6
6 0.6600833 7
> tail(df)
        prob   x
94 0.6340653  95
95 0.6340450  96
96 0.6340250  97
97 0.6340055  98
98 0.6339864  99
99 0.6339677 100

グラフにしてみる

ggpotでグラフ化

p <- ggplot(data=df,aes(x=x,y=prob))
p <- p + geom_bar(stat="identity")
p <- p + ggtitle("当たりの確率の逆数と同じ回数だけひいたら1回は辺りが出る確率")
p <- p + geom_text(aes(x=100,
                       y=df[df$x==100,]$prob,
                       label=round(df[df$x==100,]$prob*100,2)),
                   vjust=-1)
plot(p)
ggsave(plot=p,file="20170115.png",h=4,w=6,scale=2)

ほぼほぼ63.4%に収斂しています。

f:id:yyhhyy:20170115172459p:plain

それでは、「3n回」や「5n回」は?

繰り返し計算中の確率計算部分で試行回数を「n3」や「n5」にするだけです

dat <- data.frame(1- dbinom(0,n*3,1/n))

3倍の回数なら

f:id:yyhhyy:20170115172557p:plain

5倍の回数なら

f:id:yyhhyy:20170115172609p:plain

実際のところ、確率1%であっても100回も引く人はいないと思いますが、、、

これだけ回数を増やせばポアソン分布である

ガチャの確率が一般的にどれくらいなのか知りませんが、 二項分布は確率が低く、試行回数が増えればポアソン分布で近似できる、ということがわかっています。

二項分布 - Wikipedia

dskjal.com

qiita.com

例えば、当選確率pが「1/100」で試行回数nが「100回」なのであれば、

lambda = n * p は、「100*(1/100)」

同様に「300回」なら「100(1/300)」、「500回」なら「500(1/100)」を引数として

1 - dpois(0,(100*(1/100)))
1 - dpois(0,(300*(1/100)))
1 - dpois(0,(500*(1/100)))

とすれば、先ほど収束していった値が出てきます。

> 1 - dpois(0,(100*(1/100)))
[1] 0.6321206
> 1 - dpois(0,(300*(1/100)))
[1] 0.9502129
> 1 - dpois(0,(500*(1/100)))
[1] 0.9932621

コード全体

from sympy import *
n,p,p1=symbols("n p p1")
p1 = 1 - (1-1/p)**n
p1_2 = p1.subs(p,n)
print(p1_2)
print(p1_ans.evalf())
print(p1_2.subs(n,6).evalf())
print(p1_2.subs(n,100).evalf())
library("dplyr", lib.loc="C:/hogehoge/r/R-3.3.2/library")
library("reshape2", lib.loc="C:/hogehoge/r/R-3.3.2/library")
library("ggplot2", lib.loc="C:/hogehoge/r/R-3.3.2/library")

1-dbinom(0,2,1/2)
1-dbinom(0,4,1/4)
1-dbinom(0,6,1/6)
1-dbinom(0,100,1/100)

df <- data.frame()
for (n in 2:100){
  dat <- data.frame(1- dbinom(0,n,1/n))
  df <- rbind(df,dat)
}
colnames(df) <- c("prob")
df$x <- rep(2:100)
head(df)
tail(df)

p <- ggplot(data=df,aes(x=x,y=prob))
p <- p + geom_bar(stat="identity")
p <- p + ggtitle("当たりの確率の逆数と同じ回数だけひいたら1回は辺りが出る確率")
p <- p + geom_text(aes(x=100,
                       y=df[df$x==100,]$prob,
                       label=round(df[df$x==100,]$prob*100,2)),
                   vjust=-1)
plot(p)
ggsave(plot=p,file="20170115.png",h=4,w=6,scale=1)

df_3 <- data.frame()
for (n in 2:100){
  dat <- data.frame(1- dbinom(0,n*3,1/n))
  df_3 <- rbind(df_3,dat)
}
colnames(df_3) <- c("prob")
df_3$x <- rep(2:100)
print(df_3)

p3 <- ggplot(data=df_3,aes(x=x,y=prob))
p3 <- p3 + geom_bar(stat="identity")
p3 <- p3 + ggtitle("当たりの確率の逆数との3倍の回数をひいたら1回は辺りが出る確率")
p3 <- p3 + geom_text(aes(x=100,
                       y=df_3[df_3$x==100,]$prob,
                       label=round(df_3[df_3$x==100,]$prob*100,2)),
                   vjust=-1)
plot(p3)
ggsave(plot=p3,file="20170115_3.png",h=4,w=6,scale=1)


df_5 <- data.frame()
for (n in 2:100){
  dat <- data.frame(1- dbinom(0,n*5,1/n))
  df_5 <- rbind(df_5,dat)
}
colnames(df_5) <- c("prob")
df_5$x <- rep(2:100)
print(df_5)

p5 <- ggplot(data=df_5,aes(x=x,y=prob))
p5 <- p5 + geom_bar(stat="identity")
p5 <- p5 + ggtitle("当たりの確率の逆数との3倍の回数をひいたら1回は辺りが出る確率")
p5 <- p5 + geom_text(aes(x=100,
                         y=df_5[df_5$x==100,]$prob,
                         label=round(df_5[df_5$x==100,]$prob*100,2)),
                     vjust=-0.5)
plot(p5)
ggsave(plot=p5,file="20170115_5.png",h=4,w=6,scale=1)

1 - dpois(0,(100*(1/100)))
1 - dpois(0,(300*(1/100)))
1 - dpois(0,(500*(1/100)))

*1:数学が面白いのはこの手の逆転の発想が普通に出てくることですよね

【夢を見た】VMWareとEl Capitanのメモ

PC

夢を見た話。

以前に、

yyhhyy.hatenablog.com

という記事を書きましたが、今はVMwarePlayerを使用しています。

PCを新しくしたのでこれを機会にMavericksからEl Capitanに変更したので、その時に参考にしたリンク集。これらに従えば簡単に使用できるようになります。

参考サイト一覧

El CapitanのISOイメージファイルを手に入れるまで

MacOSはISOイメージの形で頒布されていないので以下の手法でISOイメージファイルを作る

Windows で VMWare に Mac OSX El Capitan を入れるには - Enjoi Blog

※当然ですがMacOSを持っていないとMaxOSはダウンロードできません。

その際の画面等

基本はソフトウェアの指示の通り。

seedofhack.wp.xdomain.jp

MacOSインストール後

VMWare toolsのインストール方法

英語ですがここがわかりやすいです。

www.wikigain.com

キーボードの配列の有効化

(*何故か私は上手く行きませんでした。)

ichitaso.com

LinuxVMware

インストールまで

そもそもLinuxVMwareを入れる方法がわかりにくい

itlx.ldblog.jp

itlx.ldblog.jp

インストール後

バーチャルウィンドウは、Ctrl + Alt + Enter で全画面表示に切り替わりますが、 微妙に画面の端っこをクリックするとUbuntuのLauncherの方が反応してしまいます。

UbuntuのLauncherは、このように下側に配置し、

Ubuntu 16.04 LTSのLauncherを画面下に配置する

MacのDockの方は、Dockの環境設定で右か左にしておけば、操作中に誤ってホストOS側に移ってしまう、ということもないでしょう。

日本の労働者の低い生産性_再現可能なものへの転換

雑感 統計

年末年始最初に読んだ本は、

デービッド・アトキンソン 新・所得倍増論

デービッド・アトキンソン 新・所得倍増論

でした。

昨今では日本の高度経済成長の要員はモーレツ社員の頑張りだけでなく、「円の固定相場制」「人口ボーナス」などの影響が大きかった、というのは通説になりつつあるのではないかと思いますが、本書は「人口ボーナス」の要員の大きさを自覚すべきだという主張でした。

そしてこのまま生産性が低いママでは各国に置いてけぼりになります。

では、どうしたら生産性は上がるのか?

デービッド アトキンソン氏の本は、アナリストらしく、具体的な改善方法というよりも、マネジメント層が改革をせざるを得なくなるように株式市場のプレッシャーを与えるように構造を変えよう、という主張で、その先は経営者が自分で考えることになっています。

普段、日経CPの元編集長 木村さんのツイートをよく見ていますが、日本は”失われた20年”の間に随分と効率化から置いてけぼりになっているのだと毎朝思い知らされる事例をツイートしてくれます。

カスタマイズするのは、悪

何年か前に読んでなるほど!と思った本に

があります。

小説ですがとてもためになります。

本書では効率化を図るために、部品のカスタマイズ=「すり合わせ」を止めて、共通して売れるものを生産し、それを買ってくれる客を探すのだ、という主張をしていました。

「すり合わせ」とは逆方向に進むインダストリー4.0

中間部品の標準化の重要性は世界的に肯定されている流れです。

にも、ドイツのインダストリー4.0は工場の自動化などではなく、中小企業が納品する中間生産財の規格を標準化していることの方が重要であるという指摘がありました。

再利用可能という考え方

規格化や標準化による効率化は、再利用可能と言い換えても良いと思います。

一つ一つ、個別対応してすり合わせをした部品は他の顧客には使えませんが、標準化した部品は他の顧客にも使えます。

プログラムの世界

例えば、統計のレポーティングをExcelではなくRなどプログラムで行うのは、コードが再利用可能だからです。

qiita.com

お酒の世界

職人芸の世界でも獺祭のような事例がありました。職人の技を再利用可能にした取組です。

tjo.hatenablog.com

jp.fujitsu.com

広告デザインにおける再利用可能性について

では広告の世界ではどのような分野で再利用可能なものへの変革が可能でしょうか?

例えば、デザインの世界では、一文字一文字字間を詰めるだとか、手作業で調整しているところが大変沢山あります。

一方でAdobeは最先端の技術を道入してどんどん人間の手間を省いています。

japanese.engadget.com

因みについ最近、人間の切抜き作業をしたのですが一昔前とは全然切抜きの精度が向上していて、小さいサイズであれば全くのおまかせでも大丈夫そうなくらいでした。

手間がかかっている方が良いという信仰

この人のツイートもよく読んでいますが、例えばこういうことなのだと思います。

一つ一つ特別仕様にすることが良いことだと思っている人は多いのではないかと思います。

「これは手間がかかっている!」ということを良しとするのをやめるべきでしょう。

手間がかかっていないことは消費者のメリットになる

最近のスマートフォンのオススメはHUAWEIです。

生産ロットが多いということは、イニシャルコストが薄く分散されているため、同じ値段のスマートフォンでもロット数が多いものほど、良い機能が突っ込まれているわけです。

getnews.jp

China eyes breakthroughs in SOE reform - Business - Chinadaily.com.cn

工芸品と工業製品は異なるものですので、手間がかかっていることが良い場合と悪い場合とがあるということだと思います。


参考

固定相場制の影響の重要性について

経済は世界史から学べ!

経済は世界史から学べ!

人口ボーナスについて

デザインの職人芸について

ルイ・マル『死刑台のエレベーター』に見るこだわり

映画 雑感

オールナイトでルイ・マルの『死刑台のエレベーター』『地下鉄のザジ』『さよなら子供たち』を鑑賞しました。(『鬼火』は寝ました)

地下鉄のザジ』しか観たことがなかったので、勝手にサイケデリックな人だという先入観がありましたが、『死刑台のエレベーター』はとてもロマンチックな話でしたし、『さよなら子供たち』はしみじみとした美しい作品でした。

死刑台のエレベーター』の音楽との相性、『地下鉄のザジ』の劇伴と絵のタイミングの併せ方など、色々と特徴があって関心をしましたが、ポイントポイントでの力の入れよう拘りようが半端ない人だと感じました。 これを機会に是非色んな人に観て欲しい映画です。

以降、ネタバレを少し含みます

ここが良かった!というのを忘れずに備忘録的にメモします。

オープニングがお洒落

死刑台のエレベーター』は、電話をしている男女のドアップから、徐々にカメラが引いていき、建物まで見えて行く間にテロップが載ります。『地下鉄のザジ』では、パリまで行く列車からの流れる景色がずーっと流れます。 後から、ここをオープニングにしようとしたのではなくて、最初からオープニングに使うことを意識して撮っているなと思います。

死刑台のエレベーター』の写真が泣ける

昨晩観た中で一番強く印象に残っているのがこのシーンです。

現像中の写真が出て来るシーンがあるのですが、幸せそうな2人の写真が何枚も何枚も何枚も出てきます。

本編の動画とは別撮りでスチールを撮っている筈です。 ストーリーのオチとして使うだけであれば1枚でも済むシーンなのですが、彼が何枚も撮ったのは、本作が推理やサスペンスをテーマとしているのではなく男女の純愛をテーマとしているからだと考えられます。

さよなら子供たち』の本の交換シーンが泣ける

大切な友達との繋がりである本をお互い交換し絆を確かめ合うシーンがあります。僕はこういう脚本の作り方がとても好きです。

話の流れ上は、なくても成立します(伏線にもなっていません)。 しかしここがあるのとないのとでは、2人の絆の印象は全然違うと言えるでしょう。

以前、良い脚本というものは存在する、というエントリーを書きましたが、ルイ・マルもまた、その勘所が泣けるほど素晴らしいです。

yyhhyy.hatenablog.com

拘ると効くところとそうでもないところ。

2016年に大ヒットアニメ映画となった『君の名は』は、CGのカメラワークでVコンを作ってから美術の絵を発注することで、アニメの絵の中をカメラが動いて撮影してきたような美しさが目をひく作品でした。その圧倒的な絵の美しさが全体を引っ張ったと思います。

一方で、タイプラプスのシーンは、周りの実写映像系の人からは、”え?何でわざわざアニメでやったの?”という反応がちょいちょい見られます。言われてみてから気が付きましたが、確かに美しいは美しいのですが、何か強く印象に残るシーンでもありません。

ストーリー上、そのシーンで最も伝えたいことは何か?から逆算した上での拘りがルイ・マルの拘りだと思います。撮りたかったから、やってみたかったから、といったプロダクト・アウトな発想ではなく、とてもマーケット・インな発想です。

日々の文章、企画書、記念写真、あらゆる局面で共通して持っておきたい意識だと思いました。


死刑台のエレベーター(完全版)

死刑台のエレベーター(完全版)

音楽もいいですが、雷の音のタイミングも良いです。25才で撮ったとは思えない程に細部に拘りがあります

さよなら子供たち【HDニューマスター版】 [DVD]

さよなら子供たち【HDニューマスター版】 [DVD]

2人の少年がとにかくイケメンです。何でもないような日々なのに2人の仲がゆっくりつまっていくのが、とても良いです。 本の交換のシーンもそうですが、タイトルのセリフが出て来るシーンでは泣いてしまいました。

地下鉄のザジ [DVD]

地下鉄のザジ [DVD]

当時これをどうやって作ったのか??という程、切り貼りが凄い、サイケデリックな作品です。シュルレアリストだと言われてもおかしくない飛びようです。笑いの中に哀愁があります。 可変させているところなどはどうやっているのでしょう?

RStudioからLaTeXを使ってPDFやHTMLでプレゼンテーション資料として出力したい時の設定について

Markdown R

以前、「RStudioからLaTeXを使ってPDFで出力したい時の日本語設定について」というエントリーを書いた時は、RStudioではSweaveが便利だと言いました。

yyhhyy.hatenablog.com

ところが最近はエラーが多く、RMarkdownを使うようになったので、その場合の設定についてメモします。

RMarikdownを使う場合

新規ファイル作成

New FileからRMarkdownでbeamerプレゼンテーションを選びます

f:id:yyhhyy:20161029180617j:plain

プリアンブルを丸っと入れ替える

注意点が幾つかあります

  • Beamerは変なサイズをしているので"\usepackage[size=a4,scale=3.5]{beamerposter}"でA4サイズになるようにする
  • 日本語のフォントを指定する"\usepackage{zxjatype}"," \setjamainfont{Noto Sans CJK JP}"
  • latexのエンジンをデフォルトから変更する。私の場合はxelatexが日本語との相性が良いと思いますので、"latex_engine: xelatex"を追記。 この際にインデントをするのも重要です。
---
title: "年齢別インターネットの利用機器状況"
author: "yhy"
date: "2016/10/29"
header-includes:
   - \usepackage[size=a4,scale=3.5]{beamerposter}
   - \usepackage{zxjatype}
   - \setjamainfont{Noto Sans CJK JP}
   - \usetheme{boxes}
   - \usecolortheme{seagull}
output:
  beamer_presentation:
    latex_engine: xelatex
---

ggplotの中でフォントを指定する

ggplotの中でもRが認識できる日本語フォントを使用する必要があります

riyoukiki_nenrei_g <- riyoukiki_nenrei_g + theme_bw(base_family="Japan1GothicBBB")

表はxtableの方が便利

表は、kableと xtableがありますが、xtableの方が便利だと感じました。主な注意点は以下です

  • xtableをprintする時にscaleboxでサイズを調整する
  • xtableをprintする時にlatexと明示する
  • xtableをprintする時にcommentをFALSEにしておく
  • 個別のセルのサイズを「p{~cm}」で固定すると横幅が入りきる

チャンクの中のコードは以下のようになります

{r echo=FALSE,warning=FALSE,error=FALSE,message=FALSE,results="asis"}
library("xtable", lib.loc="C:/hogehoge/r/R-3.2.3/library")
riyoukiki_nenrei_tb <- xtable(riyoukiki_nenrei,caption="%")
align(riyoukiki_nenrei_tb) <- "|l|l|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|"
print(riyoukiki_nenrei_tb,type="latex",comment = FALSE,scalebox=0.7)

※xtableの設定について

https://cran.r-project.org/web/packages/xtable/vignettes/xtableGallery.pdf

出力結果イメージ

f:id:yyhhyy:20161029182839j:plain

f:id:yyhhyy:20161029183503j:plain

コード全体

今回は総務省のデータを加工して使用しました

統計表一覧 政府統計の総合窓口 GL08020103

※コードの前後は、チャンク「```」で囲んでいます

---
title: "年齢別インターネットの利用機器状況"
author: "yhy"
date: "2016/10/29"
header-includes:
   - \usepackage[size=a4,scale=3.5]{beamerposter}
   - \usepackage{zxjatype}
   - \setjamainfont{Noto Sans CJK JP}
   - \usetheme{boxes}
   - \usecolortheme{seagull}
output:
  beamer_presentation:
    latex_engine: xelatex
---

## 日本語の入ったグラフ

総務省「平成27年通信利用動向調査」補問 インターネットの利用機器(加工2)

{r echo=FALSE,warning=FALSE,error=FALSE,message=FALSE}
library("dplyr", lib.loc="C:/hogehoge/R-3.2.3/library")
library("reshape2", lib.loc="C:/hogehoge/R-3.2.3/library")
library("ggplot2", lib.loc="C:/hogehoge/R-3.2.3/library")
library("RColorBrewer", lib.loc="C:/hogehoge/R-3.2.3/library")
riyoukiki_nenrei <- read.csv("kosein15_2_1.csv",header = TRUE)
riyoukiki_nenrei_m <- melt(riyoukiki_nenrei,id.vars = c("Age"))
riyoukiki_nenrei_g <- ggplot(data=riyoukiki_nenrei_m,
                             aes(x=variable,y=value,fill=variable,color=variable))
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + geom_bar(stat="identity",position="dodge")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + theme_bw(base_family="Japan1GothicBBB")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + ggtitle("インターネットの利用機")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g  + ylab("%")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + xlab("")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + geom_text(aes(x=variable,y=value,label=value),vjust=-0.5,color="black",size=4)
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + scale_fill_brewer(palette = "Spectral")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + scale_color_brewer(palette = "Spectral")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + facet_wrap(~Age,scales = "fixed")
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + theme(axis.text.x=element_blank())
riyoukiki_nenrei_g <- riyoukiki_nenrei_g + scale_y_continuous(breaks=seq(0,100,by=10),limits = c(0,100))
plot(riyoukiki_nenrei_g)

## 日本語の入った表

総務省「平成27年通信利用動向調査」補問 インターネットの利用機器(加工2)

{r echo=FALSE,warning=FALSE,error=FALSE,message=FALSE,results="asis"}
library("xtable", lib.loc="C:/hogehoge/R-3.2.3/library")
riyoukiki_nenrei_tb <- xtable(riyoukiki_nenrei,caption="%")
align(riyoukiki_nenrei_tb) <- "|l|l|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|p{3cm}|"
print(riyoukiki_nenrei_tb,type="latex",comment = FALSE,scalebox=0.7)

「reveal.js」でも出力できます

最近流行りのHTMLでのプレゼンテーションに出力することもRMarkdownなら簡単です

プリアンブルの変更

最初に「revealjs」パッケージをインストールしておきます。 アウトプットの出力をrevealjsに変更して、テーマを選べば終わりです。

---
title: "年齢別インターネットの利用機器状況"
author: "yhy"
date: "2016/10/29"
output:
  revealjs::revealjs_presentation:
    theme: default
    center: true
    fig_height: 5
    reveal_options:
      slideNumber: true
---

諸々の設定についてはこちら

Presentations with reveal.js

出力例

f:id:yyhhyy:20161029185246j:plain

表について

プリアンブルの下にCSSの指定を入れるとカスタマイズできて、文字色や背景色は変更できるのですが、表のサイズを上手く変更できませんでした。 こちらは、詳しい人にお願いします!!