SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
第一回入門機械学習
読書会
2013.04.27
@kzfm
準備
!   R
!   http://www.r-project.org/
!   Rstudio
!   http://www.rstudio.com/
!   サンプルコード
!   https://github.com/johnmyleswhite/
ML_for_Hackers
!   source( package_installer.R )を実行
>	
  setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/")	
  
>	
  source("package_̲installer.R")	
  
私とR
@kzfm (http://blog.kzfmix.com/)
医療統計からテキストマイニングまで幅広くこなす
0章
R言語を簡単に説明
入門機械学習を読むために必要最低限の知識を
お届けします
Rとは? 
!   統計計算とグラフィックスのための言語・環境
!   多様な統計手法 (線形・非線形モデル、古典的統
計検定、時系列解析、判別分析、クラスタリング、
その他) とグラフィックスを提供し、広汎な拡張
が可能
!   オブジェクト指向
!   統計処理用の関数が豊富に用意されている
!   ベクトル、行列演算のためのデータ型が存在す
る
例)package_installer.R
options(repos=structure(c(CRAN="http://cran.stat.auckland.ac.nz/")))	
  
cran.packages	
  <-‐‑‒	
  c("e1071”,	
  "ggplot2”,	
  "glmnet",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "Hmisc”,	
  "igraph”,	
  "lme4",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "lubridate”,	
  "plyr”,	
  "RCurl",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "reshape”,	
  "RJSONIO",	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "scales”,	
  "tm”,	
  "XML")	
  
cat("This	
  script	
  will	
  now	
  attempt	
  to	
  install	
  all	
  of	
  the	
  R	
  packages	
  used	
  in	
  'Machine	
  
Learning	
  for	
  Hackers'")	
  
for(p	
  in	
  cran.packages)	
  {	
  
	
  	
  	
  	
  if(!suppressWarnings(require(p,	
  character.only	
  =	
  TRUE,	
  quietly	
  =	
  TRUE)))	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  cat(paste(p,	
  "missing,	
  will	
  attempt	
  to	
  installn"))	
  
	
  	
  	
  	
  	
  	
  	
  	
  install.packages(p,	
  dependencies	
  =	
  TRUE,	
  type	
  =	
  "source")	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  else	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  cat(paste(p,	
  "installed	
  OKn"))	
  
	
  	
  	
  	
  }	
  
}	
  
print("###	
  All	
  required	
  packages	
  installed	
  ###")	
  
代入が<- になったjavascriptだと思えばOK
javascriptとの違い
!   function
!   セミコロンは不要
!   引数にデフォルトを与えることができる
!   最後に評価された値が返る
!   returnは関数(括弧が必要)
!   集合型の添字が1からはじまる
!   ココらへんに気をつければ、Rのコードは読める
と思います
混乱しがちなデータ構造
!  ベクトル
!  リスト
!  データフレーム
ベクトル
!   皆さんが想像する通りの
ものです
!   c()で生成
!   均質
!   要素の種類は同じでな
いといけない
!   インデックス付けできる
!   v[1]でアクセスできる
!   名前付けできる
!   namesを使う
>	
  MLer	
  <-‐‑‒	
  c("kzfm",	
  "tomof",	
  "harumakiyukko")	
  
>	
  names(MLer)	
  <-‐‑‒	
  NULL	
  
>	
  MLer	
  
[1]	
  "kzfm"	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "tomof"	
  	
  	
  	
  	
  	
  	
  	
  	
  "harumakiyukko"	
  
>	
  MLer[2]	
  
[1]	
  "tomof"	
  
>	
  names(MLer)	
  <-‐‑‒	
  c("user1","user2","user3")	
  
>	
  MLer	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user1	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user2	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user3	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "kzfm"	
  	
  	
  	
  	
  	
  	
  	
  	
  "tomof"	
  "harumakiyukko"	
  	
  
リスト
!   皆さんが想像するものとは
ちがいます
!   どっちかというと辞書や
ハッシュ
!   list()で生成
!   異質
!   要素の種類は異なってい
て良い
!   インデックス付けできる
!   v[[1]]でアクセスできる
!   名前付けできる
!   lst[[ name ]]の省略記
法としてlst$nameが使
える(javascriptみたい
なもん)
>shizudev	
  <-‐‑‒	
  list(title="⼊入⾨門機械学習読書会",	
  
users=MLer)	
  
>	
  shizudev[[1]]	
  
[1]	
  "⼊入⾨門機械学習読書会"	
  
>	
  shizudev[[2]]	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user1	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user2	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user3	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "kzfm"	
  	
  	
  	
  	
  	
  	
  	
  	
  "tomof"	
  "harumakiyukko"	
  	
  
>	
  shizudev$title	
  
[1]	
  "⼊入⾨門機械学習読書会"	
  
>	
  shizudev$users	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user1	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user2	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  user3	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  "kzfm"	
  	
  	
  	
  	
  	
  	
  	
  	
  "tomof"	
  "harumakiyukko"	
  	
  
ベクトルとリストの違い
!   均質か異質か
!   リストがハッシュっぽいのは異質なデータ集合の
添字に名前を付けられるから
1	
 2	
 3	
 4	
 5	
 6	
lst[[1]] or lst[[ name1 ]] or lst$name1
lst
ベクトル操作と型変換
!   ベクトル操作はこん
な感じ
!   型を調べるのはis
!   型変換はas
!   Factor
!   列挙型とかEnum
!   SQLだと正規化し
たイメージ
>	
  v	
  <-‐‑‒	
  1:5	
  
>	
  v	
  
[1]	
  1	
  2	
  3	
  4	
  5	
  
>	
  v	
  +	
  5	
  
[1]	
  	
  6	
  	
  7	
  	
  8	
  	
  9	
  10	
  
>	
  v[3]	
  +	
  5	
  
[1]	
  8	
  
>	
  v[3]	
  <-‐‑‒	
  v[3]	
  +	
  5	
  
>	
  v	
  
[1]	
  1	
  2	
  8	
  4	
  5	
  
>	
  v2	
  <-‐‑‒	
  1:5	
  
>	
  v2	
  +	
  v2	
  
[1]	
  	
  2	
  	
  4	
  	
  6	
  	
  8	
  10	
  
>	
  v3	
  <-‐‑‒	
  c("F","M","F","F")	
  
>	
  v3	
  
[1]	
  "F"	
  "M"	
  "F"	
  "F"	
  
>	
  is.vector(v3)	
  
[1]	
  TRUE	
  
>	
  v4	
  <-‐‑‒	
  as.factor(v3)	
  
>	
  v4	
  
[1]	
  F	
  M	
  F	
  F	
  
Levels:	
  F	
  M	
  
データフレーム
!   Excelでいうところの
ワークシート
!   列の要素は均質でな
いといけない
!   列の要素数は同じで
ないといけない
!   行が揃っているとい
うこと
!   列には名前が必要
!   A,B,Cのとこ
データフレーム
>	
  langs	
  <-‐‑‒	
  read.csv("lang.csv",	
  header=TRUE)	
  
>	
  langs	
  
	
  	
  	
  	
  	
  	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  	
  	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  1.0	
  1.000	
  
2	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.000	
  
3	
  	
  	
  Fortran	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  0.800	
  
4	
  	
  	
  	
  	
  	
  Java	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.500	
  
5	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.000	
  
6	
  	
  	
  	
  Python	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.500	
  
7	
  Smalltalk	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  0.625	
  
>	
  langs[[1]]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
>	
  langs[1,]	
  
	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  1	
  	
  	
  	
  	
  1	
  
>	
  langs[,1]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
データフレーム
>	
  langs	
  <-‐‑‒	
  read.csv("lang.csv",	
  header=TRUE)	
  
>	
  langs	
  
	
  	
  	
  	
  	
  	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  	
  	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  1.0	
  1.000	
  
2	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.000	
  
3	
  	
  	
  Fortran	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  0.800	
  
4	
  	
  	
  	
  	
  	
  Java	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.500	
  
5	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.000	
  
6	
  	
  	
  	
  Python	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.500	
  
7	
  Smalltalk	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  0.625	
  
>	
  langs[[1]]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
>	
  langs[1,]	
  
	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  1	
  	
  	
  	
  	
  1	
  
>	
  langs[,1]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
データフレーム
>	
  langs	
  <-‐‑‒	
  read.csv("lang.csv",	
  header=TRUE)	
  
>	
  langs	
  
	
  	
  	
  	
  	
  	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  	
  	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  1.0	
  1.000	
  
2	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.000	
  
3	
  	
  	
  Fortran	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  0.800	
  
4	
  	
  	
  	
  	
  	
  Java	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.500	
  
5	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.000	
  
6	
  	
  	
  	
  Python	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.500	
  
7	
  Smalltalk	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  0.625	
  
>	
  langs[[1]]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
>	
  langs[1,]	
  
	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  1	
  	
  	
  	
  	
  1	
  
>	
  langs[,1]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
データフレームは特殊なリスト
!   列はリストの表記でアクセス可能
!    df[[name]] or df$name
!   要素がベクトルかファクタ
!   要素の数が同じ -> 表形式
!   列には名前が必要
リストの記法でアクセス
>	
  langs	
  <-‐‑‒	
  read.csv("lang.csv",	
  header=TRUE)	
  
>	
  langs	
  
	
  	
  	
  	
  	
  	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  	
  	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  1.0	
  1.000	
  
2	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.000	
  
3	
  	
  	
  Fortran	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  0.800	
  
4	
  	
  	
  	
  	
  	
  Java	
  	
  	
  	
  	
  	
  	
  	
  2.5	
  1.500	
  
5	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.000	
  
6	
  	
  	
  	
  Python	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  6.500	
  
7	
  Smalltalk	
  	
  	
  	
  	
  	
  	
  	
  6.0	
  0.625	
  
>	
  langs[[1]]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
>	
  langs[1,]	
  
	
  	
  lang	
  statements	
  lines	
  
1	
  	
  	
  	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  1	
  	
  	
  	
  	
  1	
  
>	
  langs[,1]	
  
[1]	
  C	
  	
  	
  	
  	
  	
  	
  	
  	
  C++	
  	
  	
  	
  	
  	
  	
  Fortran	
  	
  	
  Java	
  	
  	
  	
  	
  	
  Perl	
  	
  	
  	
  	
  	
  Python	
  	
  	
  	
  
Smalltalk	
  
Levels:	
  C	
  C++	
  Fortran	
  Java	
  Perl	
  Python	
  Smalltalk	
  
Rはベクトルで処理
するjavascript
と思っておけば多分なんとかなります
(深く知りたければリゲス本を読みましょう)
1章
Rを利用する
UFO目撃情報を視覚化する
章の目的
アメリカの各州での
1990-2010年における
UFO目撃頻度を視覚化する
Rのインストール
!   省略します
!   Rstudioを使います
!   ヘルプ
!   ?をつける
!   個人的にはCRANのpdfを
CRAN
!   perlでいうところのCPAN
!   http://cran.r-project.org/
!   パッケージが登録されている
!   Rstudioの場合
!   Tools -> install Packagesでインストール
!   対話環境の場合
!   install.packages関数
!   パッケージを使う
!   library関数 #jsでいうrequire
ここからデータの処理
!   本ではRで前処理していますが、他のプログラミ
ング言語で行ったほうがいいかも
!   perl,ruby,pythonでおこなってread.csvで
読みこむ
!   Excelで綺麗にしてread.xlsで読み込む
!   一応やるけど、覚える必要はあまりないかも
!   他言語のスキルとの兼ね合いで考えてください
Rstudio
headで中身を確認しなくても
どのくらいのデータ数と変数があるか表示される
スプレッドシートのアイコンをクリックすると
中身が表示される
データを綺麗にする
setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/01-‐‑‒Introduction/")	
  
ufo	
  <-‐‑‒	
  read.delim("data/ufo/ufo_̲awesome.tsv",	
  sep="t",	
  stringsAsFactors=FALSE,	
  header=FALSE,	
  
na.strings="")	
  
names(ufo)	
  <-‐‑‒	
  c("DateOccurred",	
  "DateReported",	
  "Location",	
  "ShortDescription",	
  "Duration",	
  "LongDescription")	
  
good.rows	
  <-‐‑‒	
  ifelse(nchar(ufo$DateOccurred)	
  !=8	
  |	
  nchar(ufo$DateReported)	
  !=8,	
  FALSE,	
  TRUE)	
  
ufo	
  <-‐‑‒	
  ufo[good.rows,]	
  
ufo$DateOccurred	
  <-‐‑‒	
  as.Date(ufo$DateOccurred,	
  format="%Y%m%d")	
  
ufo$DateReported	
  <-‐‑‒	
  as.Date(ufo$DateReported,	
  format="%Y%m%d")	
  
get.location	
  <-‐‑‒	
  function(l)	
  {	
  
	
  	
  split.location	
  <-‐‑‒	
  tryCatch(strsplit(l,",")[[1]],	
  error=	
  function(e)	
  return(c(NA,	
  NA)))	
  
	
  	
  clean.location	
  <-‐‑‒	
  gsub("^	
  ",	
  "",	
  split.location)	
  
	
  	
  if(length(clean.location)	
  >	
  2)	
  {	
  
	
  	
  	
  	
  return(c(NA,	
  NA))	
  
	
  	
  }	
  else	
  {	
  
	
  	
  	
  	
  return(clean.location)	
  
	
  	
  }	
  
}	
  
city.state	
  <-‐‑‒	
  lapply(ufo$Location,	
  get.location)	
  
location.matrix	
  <-‐‑‒	
  do.call(rbind,	
  city.state)	
  
ufo	
  <-‐‑‒	
  transform(ufo,	
  USCity=location.matrix[,1],	
  USState=location.matrix[,2],stringsAsFactors=FALSE)	
  
ufo$USState	
  <-‐‑‒	
  state.abb[match(ufo$USState,	
  state.abb)]	
  
ufo$USCity[is.na(ufo$USState)]	
  <-‐‑‒	
  NA	
  
ufo.us	
  <-‐‑‒	
  subset(ufo,	
  !is.na(USState))	
  
ML_for_Hackers/01-Introduction/ufo_sightings.R
を参考に
コードの説明
!   TAB区切りのデータ読み込み
!   ヘッダを設定
!   日付のフォーマットがおかしい行を捨てる
!   位置情報を綺麗にする
!   目撃された場所がアメリカ(州コード)のもの
のみにする
!   (*) 表に対する操作を意識するとより分かりやす
いかも
lapply, do.call
!   jQuery.mapみたいな
!   高階関数を使ってforループ
を回さないのがRの作法
!   lapply
!   (DataFrame -> list)
!   do.call
!   (list -> DataFrame) lapply(iris[1:4],	
  mean)	
  	
  
描画していきます(1.1.4.5-)
library(ggplot2)	
  
library(plyr)	
  
library(scales)	
  	
  
!   この章で使うパッケージは以下の3つ
!   ggplot2: 綺麗な描画
!   plyr: mapreduceっぽい操作用
!   scales: グラフのためのスケール操作
ggplot2とは
!   良い感じのグラフを手軽にかけるライブラリ
!   オブジェクト指向っぽくグラフを作る
!   Photoshopのレイヤーを重ねるようにグラフ
を作成していく
!   ggplot2のためにRを使うとかありがち
!   私とか
(例)IRIS
散布図
g	
  <-‐‑‒	
  ggplot(data=iris,	
  aes_̲string(x='Sepal.Length',	
  y='Sepal.Width',	
  color='Petal.Length'))	
  
g	
  +	
  geom_̲point()	
  
種毎に分ける
g	
  +	
  geom_̲point()	
  +	
  facet_̲wrap(~∼Species)	
  
ラベルを変更
g	
  +	
  geom_̲point()	
  +	
  facet_̲wrap(~∼Species)	
  +	
  xlab("Length")	
  +	
  ylab("Width")	
  
線形回帰
g	
  +	
  geom_̲point()	
  +	
  facet_̲wrap(~∼Species)	
  +	
  geom_̲smooth(method='lm')	
  
(おまけ)お手軽プロット
qplot(Sepal.Length,	
  Petal.Length,	
  data	
  =	
  iris,	
  color	
  =	
  Species,	
  size	
  =	
  Petal.Width)	
  
ヒストグラム
library(ggplot2)	
  
library(scales)	
  
ggplot(ufo.us,	
  aes(x=DateOccurred))	
  	
  
+	
  geom_̲histogram()	
  	
  
+	
  scale_̲x_̲date(breaks="50	
  years")	
  
1990-1-1以降の月ごとのヒ
ストグラム
ufo.us	
  <-‐‑‒	
  subset(ufo.us,	
  DateOccurred	
  >=	
  as.Date("1990-‐‑‒01-‐‑‒01"))	
  
ufo.us$YearMonth	
  <-‐‑‒	
  strftime(ufo.us$DateOccurred,	
  format="%Y-‐‑‒%m")	
  
ggplot(ufo.us,	
  aes(x	
  =	
  DateOccurred))	
  +	
  
	
  	
  geom_̲histogram(aes(fill='white',	
  color='red'))	
  +	
  
	
  	
  scale_̲fill_̲manual(values=c('white'='white'),	
  guide="none")	
  +	
  
	
  	
  scale_̲color_̲manual(values=c('red'='red'),	
  guide="none")	
  +	
  
	
  	
  scale_̲x_̲date(breaks	
  =	
  "50	
  years")	
  
時系列と頻度の処理
sightings.counts	
  <-‐‑‒	
  ddply(ufo.us,	
  .(USState,YearMonth),	
  nrow)	
  
date.range	
  <-‐‑‒	
  seq.Date(from	
  =	
  as.Date(min(ufo.us$DateOccurred)),	
  
	
  	
  to	
  =	
  as.Date(max(ufo.us$DateOccurred)),	
  
	
  	
  by	
  =	
  "month")	
  
date.strings	
  <-‐‑‒	
  strftime(date.range,	
  "%Y-‐‑‒%m")	
  
states.dates	
  <-‐‑‒	
  lapply(state.abb,	
  function(s)	
  cbind(s,	
  date.strings))	
  
states.dates	
  <-‐‑‒	
  data.frame(do.call(rbind,	
  states.dates),	
  stringsAsFactors	
  =	
  FALSE)	
  
#	
  left	
  outer	
  join	
  
all.sightings	
  <-‐‑‒	
  merge(states.dates,	
  
	
  	
  sightings.counts,	
  
	
  	
  by.x	
  =	
  c("s",	
  "date.strings"),	
  
	
  	
  by.y	
  =	
  c("USState",	
  "YearMonth"),	
  
	
  	
  all	
  =	
  TRUE)	
  
names(all.sightings)	
  <-‐‑‒	
  c("State",	
  "YearMonth",	
  "Sightings")	
  
all.sightings$Sightings[is.na(all.sightings$Sightings)]	
  <-‐‑‒	
  0	
  
all.sightings$YearMonth	
  <-‐‑‒	
  as.Date(rep(date.range,	
  length(state.abb)))	
  
all.sightings$State	
  <-‐‑‒	
  as.factor(all.sightings$State)	
  
欠けている月の目撃情報を0として追加
州の要素を文字列から因子に変更する
描画する
ggplot(all.sightings,	
  aes(x	
  =	
  YearMonth,y	
  =	
  Sightings))	
  +	
  
	
  	
  geom_̲line(aes(color	
  =	
  "darkblue"))	
  +	
  
	
  	
  facet_̲wrap(~∼State,	
  nrow	
  =	
  10,	
  ncol	
  =	
  5)	
  +	
  	
  
	
  	
  theme_̲bw()	
  +	
  	
  
	
  	
  scale_̲color_̲manual(values	
  =	
  c("darkblue"	
  =	
  "darkblue"),	
  guide	
  =	
  "none")	
  +	
  
	
  	
  scale_̲x_̲date(breaks	
  =	
  "5	
  years",	
  labels	
  =	
  date_̲format('%Y'))	
  +	
  
	
  	
  xlab("Years")	
  +	
  
	
  	
  ylab("Number	
  of	
  Sightings")	
  +	
  
	
  	
  opts(title="Number	
  of	
  UFO	
  sightings	
  by	
  Month-‐‑‒Year	
  and	
  U.S.	
  State	
  (1990-‐‑‒2010)")	
  
一章まとめ
!   可視化による分析をしました
!   (考察は本を読むべし)
!   Rでやるのもいいですがperl,ruby,pythonで処理して
からread.csvで読み込むのが普通かなと
!   Pythonistaだったらpandasという選択肢もあります
!   dataframe実装してある
!   joinできる
!   速い(numpy)
2章
データの調査
身長と体重
本書での「データセット」
!   数値と文字列からなる巨大な表データであり、
それぞれの行は実世界の1つの観察結果を表す
!   データベースのテーブル構造のようなもの
!   確証的データ分析はやらない、探索的なデータ
分析のみ
要約
!   行か列の圧縮
!   要約統計量
!   行の圧縮
!   平均とか中央値とか
!   次元削減
!   列の圧縮
!   PCA,MDS
!   全部読み終わったらあらためて考えるとイイ
平均、中央値
setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/
02-‐‑‒Exploration/")	
  
heights.weights	
  <-‐‑‒	
  read.csv("data/
01_̲heights_̲weights_̲genders.csv")	
  
heights	
  <-‐‑‒	
  with(heights.weights,	
  Height)	
  
boxplot(heights)	
  
summary(heights.weights$Height)	
  
Min.	
  1st	
  Qu.	
  	
  Median	
  	
  	
  	
  Mean	
  3rd	
  Qu.	
  	
  	
  	
  Max.	
  	
  
	
  	
  54.26	
  	
  	
  63.51	
  	
  	
  66.32	
  	
  	
  66.37	
  	
  	
  69.17	
  	
  	
  79.00	
  	
  
標準偏差と分散
!   データの広がりを表現したい
!   バラツキを表現する
>	
  var(heights)	
  
[1]	
  14.80347	
  
>	
  mean(heights)	
  
[1]	
  66.36756	
  
>	
  c(mean(heights)-‐‑‒var(heights),	
  mean(heights)+var(heights))	
  
[1]	
  51.56409	
  81.17103	
  
あとで
探索的データの可視化
!   2-9から順番にやっていく
分布
!   分布の種類
!   正規分布
!   ガンマ分布
!   コーシー分布
!   単峰性か否か
!   双峰性の分布が重なって見かけ上単峰性になっていな
いか?
!   ヒストグラムよりは密度推定のほうがよいとおもう
!   バイオリンプロットとかbean-plotもおすすめ
データの可視化(plot)
男女を予測
c	
  <-‐‑‒	
  coef(logit.mode)	
  
ggplot(height.weights,	
  aes(x	
  =	
  Weight,	
  y=Height,	
  color=Gender))	
  +	
  geom_̲point()	
  
+	
  stat_̲abline(intercept	
  =	
  -‐‑‒c[1]/c[2],	
  slope=-‐‑‒c[3]/c[2],	
  geom='abline',	
  color='black')	
  
2章まとめ
!   要約統計量の説明
!   ggplot2によるグラフ描画
!   ちょっと予測モデルで遊んだ

Más contenido relacionado

La actualidad más candente

Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門Shintaro Fukushima
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42Atsushi Hayakawa
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)Hiromu Shioya
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwToshi Harada
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~Miki Shimogai
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)Satoshi Yamada
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会Nao Minami
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装__nakamichi__
 
Tokyo Webmining #12 Hapyrus
Tokyo Webmining #12 HapyrusTokyo Webmining #12 Hapyrus
Tokyo Webmining #12 HapyrusKoichi Fujikawa
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術Koichi Fujikawa
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるShintaro Fukushima
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwToshi Harada
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with PythonAtsushi Hayakawa
 
TensorFlow White Paperを読む
TensorFlow White Paperを読むTensorFlow White Paperを読む
TensorFlow White Paperを読むYuta Kashino
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」de:code 2017
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jlShintaro Fukushima
 

La actualidad más candente (20)

Rユーザのためのspark入門
Rユーザのためのspark入門Rユーザのためのspark入門
Rユーザのためのspark入門
 
R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42R入門(dplyrでデータ加工)-TokyoR42
R入門(dplyrでデータ加工)-TokyoR42
 
20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)20090107 Postgre Sqlチューニング(Sql編)
20090107 Postgre Sqlチューニング(Sql編)
 
Pgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdwPgunconf 20121212-postgeres fdw
Pgunconf 20121212-postgeres fdw
 
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
PostgreSQLクエリ実行の基礎知識 ~Explainを読み解こう~
 
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
PostgreSQLの実行計画を読み解こう(OSC2015 Spring/Tokyo)
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
Rの高速化
Rの高速化Rの高速化
Rの高速化
 
RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会RailsエンジニアのためのSQLチューニング速習会
RailsエンジニアのためのSQLチューニング速習会
 
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
 
Tokyo Webmining #12 Hapyrus
Tokyo Webmining #12 HapyrusTokyo Webmining #12 Hapyrus
Tokyo Webmining #12 Hapyrus
 
R3.0.0 is relased
R3.0.0 is relasedR3.0.0 is relased
R3.0.0 is relased
 
クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術クラウド時代の並列分散処理技術
クラウド時代の並列分散処理技術
 
データサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみるデータサイエンスワールドからC++を眺めてみる
データサイエンスワールドからC++を眺めてみる
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
Lt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdwLt ingaoho-jsonb+postgeres fdw
Lt ingaoho-jsonb+postgeres fdw
 
Intoroduction of Pandas with Python
Intoroduction of Pandas with PythonIntoroduction of Pandas with Python
Intoroduction of Pandas with Python
 
TensorFlow White Paperを読む
TensorFlow White Paperを読むTensorFlow White Paperを読む
TensorFlow White Paperを読む
 
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
 
Why dont you_create_new_spark_jl
Why dont you_create_new_spark_jlWhy dont you_create_new_spark_jl
Why dont you_create_new_spark_jl
 

Destacado

Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用nmaro
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみたKazuya Wada
 
ClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅKazufumi Ohkawa
 
neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo Daichi Morifuji
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践智之 村上
 
今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門toilet_lunch
 
機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレストTeppei Baba
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33horihorio
 
トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定Takashi Kaneda
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木 Miyoshi Yuya
 
SVMについて
SVMについてSVMについて
SVMについてmknh1122
 
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-Naoki Yanai
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京Koichi Hamada
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
Simple perceptron by TJO
Simple perceptron by TJOSimple perceptron by TJO
Simple perceptron by TJOTakashi J OZAKI
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Yasutomo Kawanishi
 

Destacado (19)

Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用
 
Rでウォーリを探してみた
Rでウォーリを探してみたRでウォーリを探してみた
Rでウォーリを探してみた
 
ClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅ
 
neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo neural network introduction yapc asia tokyo
neural network introduction yapc asia tokyo
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践
 
決定木学習
決定木学習決定木学習
決定木学習
 
今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門
 
機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33
 
一般向けのDeep Learning
一般向けのDeep Learning一般向けのDeep Learning
一般向けのDeep Learning
 
トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木
 
SVMについて
SVMについてSVMについて
SVMについて
 
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Simple perceptron by TJO
Simple perceptron by TJOSimple perceptron by TJO
Simple perceptron by TJO
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 
Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~Pythonによる機械学習入門 ~Deep Learningに挑戦~
Pythonによる機械学習入門 ~Deep Learningに挑戦~
 

Similar a 入門機械学習1,2章

10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perlJiro Nishiguchi
 
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Teiko Suzuki
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索Akio Ishida
 
CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011Shuyo Nakatani
 
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章Haruki Eguchi
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと Haruka Ozaki
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016wada, kazumi
 
The overview of Server-ide Bulk Loader
 The overview of Server-ide Bulk Loader The overview of Server-ide Bulk Loader
The overview of Server-ide Bulk LoaderTreasure Data, Inc.
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書くHideyuki Tanaka
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編wada, kazumi
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)Masahiro Hayashi
 

Similar a 入門機械学習1,2章 (20)

Introduction of Python
Introduction of PythonIntroduction of Python
Introduction of Python
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
Write good parser in perl
Write good parser in perlWrite good parser in perl
Write good parser in perl
 
講座Java入門
講座Java入門講座Java入門
講座Java入門
 
Rの初歩: 5. 入出力
Rの初歩: 5. 入出力Rの初歩: 5. 入出力
Rの初歩: 5. 入出力
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
PandasとSQLとの比較
PandasとSQLとの比較PandasとSQLとの比較
PandasとSQLとの比較
 
textsearch_jaで全文検索
textsearch_jaで全文検索textsearch_jaで全文検索
textsearch_jaで全文検索
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011CRF を使った Web 本文抽出 for WebDB Forum 2011
CRF を使った Web 本文抽出 for WebDB Forum 2011
 
[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章[第2版]Python機械学習プログラミング 第8章
[第2版]Python機械学習プログラミング 第8章
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと 12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
 
統計環境R_データ入出力編2016
統計環境R_データ入出力編2016統計環境R_データ入出力編2016
統計環境R_データ入出力編2016
 
The overview of Server-ide Bulk Loader
 The overview of Server-ide Bulk Loader The overview of Server-ide Bulk Loader
The overview of Server-ide Bulk Loader
 
R intro
R introR intro
R intro
 
IdrisでWebアプリを書く
IdrisでWebアプリを書くIdrisでWebアプリを書く
IdrisでWebアプリを書く
 
Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編Rプログラミング02 データ入出力編
Rプログラミング02 データ入出力編
 
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
 

Más de Kazufumi Ohkawa

ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67Kazufumi Ohkawa
 
SAR精度70% その先へ
SAR精度70% その先へSAR精度70% その先へ
SAR精度70% その先へKazufumi Ohkawa
 
視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけること視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけることKazufumi Ohkawa
 
量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMO量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMOKazufumi Ohkawa
 
あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史Kazufumi Ohkawa
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おうKazufumi Ohkawa
 
実践コンピュータビジョン8章
実践コンピュータビジョン8章実践コンピュータビジョン8章
実践コンピュータビジョン8章Kazufumi Ohkawa
 
エンジョイ☆スクレイピング
エンジョイ☆スクレイピングエンジョイ☆スクレイピング
エンジョイ☆スクレイピングKazufumi Ohkawa
 
Redmineでもめない会議☆
Redmineでもめない会議☆Redmineでもめない会議☆
Redmineでもめない会議☆Kazufumi Ohkawa
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画Kazufumi Ohkawa
 
入門機械学習読書会9章
入門機械学習読書会9章入門機械学習読書会9章
入門機械学習読書会9章Kazufumi Ohkawa
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptKazufumi Ohkawa
 
入門機械学習読書会二回目
入門機械学習読書会二回目入門機械学習読書会二回目
入門機械学習読書会二回目Kazufumi Ohkawa
 
Sphinxでドキュメントを書こう
Sphinxでドキュメントを書こうSphinxでドキュメントを書こう
Sphinxでドキュメントを書こうKazufumi Ohkawa
 
pythonでつくるiPhoneアプリ
pythonでつくるiPhoneアプリpythonでつくるiPhoneアプリ
pythonでつくるiPhoneアプリKazufumi Ohkawa
 

Más de Kazufumi Ohkawa (20)

圏論walker
圏論walker圏論walker
圏論walker
 
ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67
 
SAR精度70% その先へ
SAR精度70% その先へSAR精度70% その先へ
SAR精度70% その先へ
 
視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけること視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけること
 
量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMO量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMO
 
あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おう
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
実践コンピュータビジョン8章
実践コンピュータビジョン8章実践コンピュータビジョン8章
実践コンピュータビジョン8章
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
 
Unigram mixtures
Unigram mixturesUnigram mixtures
Unigram mixtures
 
エンジョイ☆スクレイピング
エンジョイ☆スクレイピングエンジョイ☆スクレイピング
エンジョイ☆スクレイピング
 
Redmineでもめない会議☆
Redmineでもめない会議☆Redmineでもめない会議☆
Redmineでもめない会議☆
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
入門機械学習読書会9章
入門機械学習読書会9章入門機械学習読書会9章
入門機械学習読書会9章
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScript
 
入門機械学習読書会二回目
入門機械学習読書会二回目入門機械学習読書会二回目
入門機械学習読書会二回目
 
Sphinxでドキュメントを書こう
Sphinxでドキュメントを書こうSphinxでドキュメントを書こう
Sphinxでドキュメントを書こう
 
pythonでつくるiPhoneアプリ
pythonでつくるiPhoneアプリpythonでつくるiPhoneアプリ
pythonでつくるiPhoneアプリ
 
Shizupptx
ShizupptxShizupptx
Shizupptx
 

Último

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Último (7)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

入門機械学習1,2章

  • 2. 準備 !   R !   http://www.r-project.org/ !   Rstudio !   http://www.rstudio.com/ !   サンプルコード !   https://github.com/johnmyleswhite/ ML_for_Hackers !   source( package_installer.R )を実行 >  setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/")   >  source("package_̲installer.R")  
  • 5. Rとは?  !   統計計算とグラフィックスのための言語・環境 !   多様な統計手法 (線形・非線形モデル、古典的統 計検定、時系列解析、判別分析、クラスタリング、 その他) とグラフィックスを提供し、広汎な拡張 が可能 !   オブジェクト指向 !   統計処理用の関数が豊富に用意されている !   ベクトル、行列演算のためのデータ型が存在す る
  • 6. 例)package_installer.R options(repos=structure(c(CRAN="http://cran.stat.auckland.ac.nz/")))   cran.packages  <-‐‑‒  c("e1071”,  "ggplot2”,  "glmnet",                                                            "Hmisc”,  "igraph”,  "lme4",                                                            "lubridate”,  "plyr”,  "RCurl",                                                            "reshape”,  "RJSONIO",                                                            "scales”,  "tm”,  "XML")   cat("This  script  will  now  attempt  to  install  all  of  the  R  packages  used  in  'Machine   Learning  for  Hackers'")   for(p  in  cran.packages)  {          if(!suppressWarnings(require(p,  character.only  =  TRUE,  quietly  =  TRUE)))  {                  cat(paste(p,  "missing,  will  attempt  to  installn"))                  install.packages(p,  dependencies  =  TRUE,  type  =  "source")          }          else  {                  cat(paste(p,  "installed  OKn"))          }   }   print("###  All  required  packages  installed  ###")   代入が<- になったjavascriptだと思えばOK
  • 7. javascriptとの違い !   function !   セミコロンは不要 !   引数にデフォルトを与えることができる !   最後に評価された値が返る !   returnは関数(括弧が必要) !   集合型の添字が1からはじまる !   ココらへんに気をつければ、Rのコードは読める と思います
  • 9. ベクトル !   皆さんが想像する通りの ものです !   c()で生成 !   均質 !   要素の種類は同じでな いといけない !   インデックス付けできる !   v[1]でアクセスできる !   名前付けできる !   namesを使う >  MLer  <-‐‑‒  c("kzfm",  "tomof",  "harumakiyukko")   >  names(MLer)  <-‐‑‒  NULL   >  MLer   [1]  "kzfm"                    "tomof"                  "harumakiyukko"   >  MLer[2]   [1]  "tomof"   >  names(MLer)  <-‐‑‒  c("user1","user2","user3")   >  MLer                      user1                      user2                      user3                      "kzfm"                  "tomof"  "harumakiyukko"    
  • 10. リスト !   皆さんが想像するものとは ちがいます !   どっちかというと辞書や ハッシュ !   list()で生成 !   異質 !   要素の種類は異なってい て良い !   インデックス付けできる !   v[[1]]でアクセスできる !   名前付けできる !   lst[[ name ]]の省略記 法としてlst$nameが使 える(javascriptみたい なもん) >shizudev  <-‐‑‒  list(title="⼊入⾨門機械学習読書会",   users=MLer)   >  shizudev[[1]]   [1]  "⼊入⾨門機械学習読書会"   >  shizudev[[2]]                      user1                      user2                      user3                      "kzfm"                  "tomof"  "harumakiyukko"     >  shizudev$title   [1]  "⼊入⾨門機械学習読書会"   >  shizudev$users                      user1                      user2                      user3                      "kzfm"                  "tomof"  "harumakiyukko"    
  • 11. ベクトルとリストの違い !   均質か異質か !   リストがハッシュっぽいのは異質なデータ集合の 添字に名前を付けられるから 1 2 3 4 5 6 lst[[1]] or lst[[ name1 ]] or lst$name1 lst
  • 12. ベクトル操作と型変換 !   ベクトル操作はこん な感じ !   型を調べるのはis !   型変換はas !   Factor !   列挙型とかEnum !   SQLだと正規化し たイメージ >  v  <-‐‑‒  1:5   >  v   [1]  1  2  3  4  5   >  v  +  5   [1]    6    7    8    9  10   >  v[3]  +  5   [1]  8   >  v[3]  <-‐‑‒  v[3]  +  5   >  v   [1]  1  2  8  4  5   >  v2  <-‐‑‒  1:5   >  v2  +  v2   [1]    2    4    6    8  10   >  v3  <-‐‑‒  c("F","M","F","F")   >  v3   [1]  "F"  "M"  "F"  "F"   >  is.vector(v3)   [1]  TRUE   >  v4  <-‐‑‒  as.factor(v3)   >  v4   [1]  F  M  F  F   Levels:  F  M  
  • 13. データフレーム !   Excelでいうところの ワークシート !   列の要素は均質でな いといけない !   列の要素数は同じで ないといけない !   行が揃っているとい うこと !   列には名前が必要 !   A,B,Cのとこ
  • 14. データフレーム >  langs  <-‐‑‒  read.csv("lang.csv",  header=TRUE)   >  langs                lang  statements  lines   1                  C                1.0  1.000   2              C++                2.5  1.000   3      Fortran                2.5  0.800   4            Java                2.5  1.500   5            Perl                6.0  6.000   6        Python                6.0  6.500   7  Smalltalk                6.0  0.625   >  langs[[1]]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk   >  langs[1,]      lang  statements  lines   1        C                    1          1   >  langs[,1]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk  
  • 15. データフレーム >  langs  <-‐‑‒  read.csv("lang.csv",  header=TRUE)   >  langs                lang  statements  lines   1                  C                1.0  1.000   2              C++                2.5  1.000   3      Fortran                2.5  0.800   4            Java                2.5  1.500   5            Perl                6.0  6.000   6        Python                6.0  6.500   7  Smalltalk                6.0  0.625   >  langs[[1]]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk   >  langs[1,]      lang  statements  lines   1        C                    1          1   >  langs[,1]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk  
  • 16. データフレーム >  langs  <-‐‑‒  read.csv("lang.csv",  header=TRUE)   >  langs                lang  statements  lines   1                  C                1.0  1.000   2              C++                2.5  1.000   3      Fortran                2.5  0.800   4            Java                2.5  1.500   5            Perl                6.0  6.000   6        Python                6.0  6.500   7  Smalltalk                6.0  0.625   >  langs[[1]]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk   >  langs[1,]      lang  statements  lines   1        C                    1          1   >  langs[,1]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk  
  • 17. データフレームは特殊なリスト !   列はリストの表記でアクセス可能 !    df[[name]] or df$name !   要素がベクトルかファクタ !   要素の数が同じ -> 表形式 !   列には名前が必要
  • 18. リストの記法でアクセス >  langs  <-‐‑‒  read.csv("lang.csv",  header=TRUE)   >  langs                lang  statements  lines   1                  C                1.0  1.000   2              C++                2.5  1.000   3      Fortran                2.5  0.800   4            Java                2.5  1.500   5            Perl                6.0  6.000   6        Python                6.0  6.500   7  Smalltalk                6.0  0.625   >  langs[[1]]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk   >  langs[1,]      lang  statements  lines   1        C                    1          1   >  langs[,1]   [1]  C                  C++              Fortran      Java            Perl            Python         Smalltalk   Levels:  C  C++  Fortran  Java  Perl  Python  Smalltalk  
  • 22. Rのインストール !   省略します !   Rstudioを使います !   ヘルプ !   ?をつける !   個人的にはCRANのpdfを
  • 23. CRAN !   perlでいうところのCPAN !   http://cran.r-project.org/ !   パッケージが登録されている !   Rstudioの場合 !   Tools -> install Packagesでインストール !   対話環境の場合 !   install.packages関数 !   パッケージを使う !   library関数 #jsでいうrequire
  • 24. ここからデータの処理 !   本ではRで前処理していますが、他のプログラミ ング言語で行ったほうがいいかも !   perl,ruby,pythonでおこなってread.csvで 読みこむ !   Excelで綺麗にしてread.xlsで読み込む !   一応やるけど、覚える必要はあまりないかも !   他言語のスキルとの兼ね合いで考えてください
  • 26. データを綺麗にする setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/01-‐‑‒Introduction/")   ufo  <-‐‑‒  read.delim("data/ufo/ufo_̲awesome.tsv",  sep="t",  stringsAsFactors=FALSE,  header=FALSE,   na.strings="")   names(ufo)  <-‐‑‒  c("DateOccurred",  "DateReported",  "Location",  "ShortDescription",  "Duration",  "LongDescription")   good.rows  <-‐‑‒  ifelse(nchar(ufo$DateOccurred)  !=8  |  nchar(ufo$DateReported)  !=8,  FALSE,  TRUE)   ufo  <-‐‑‒  ufo[good.rows,]   ufo$DateOccurred  <-‐‑‒  as.Date(ufo$DateOccurred,  format="%Y%m%d")   ufo$DateReported  <-‐‑‒  as.Date(ufo$DateReported,  format="%Y%m%d")   get.location  <-‐‑‒  function(l)  {      split.location  <-‐‑‒  tryCatch(strsplit(l,",")[[1]],  error=  function(e)  return(c(NA,  NA)))      clean.location  <-‐‑‒  gsub("^  ",  "",  split.location)      if(length(clean.location)  >  2)  {          return(c(NA,  NA))      }  else  {          return(clean.location)      }   }   city.state  <-‐‑‒  lapply(ufo$Location,  get.location)   location.matrix  <-‐‑‒  do.call(rbind,  city.state)   ufo  <-‐‑‒  transform(ufo,  USCity=location.matrix[,1],  USState=location.matrix[,2],stringsAsFactors=FALSE)   ufo$USState  <-‐‑‒  state.abb[match(ufo$USState,  state.abb)]   ufo$USCity[is.na(ufo$USState)]  <-‐‑‒  NA   ufo.us  <-‐‑‒  subset(ufo,  !is.na(USState))   ML_for_Hackers/01-Introduction/ufo_sightings.R を参考に
  • 27. コードの説明 !   TAB区切りのデータ読み込み !   ヘッダを設定 !   日付のフォーマットがおかしい行を捨てる !   位置情報を綺麗にする !   目撃された場所がアメリカ(州コード)のもの のみにする !   (*) 表に対する操作を意識するとより分かりやす いかも
  • 28. lapply, do.call !   jQuery.mapみたいな !   高階関数を使ってforループ を回さないのがRの作法 !   lapply !   (DataFrame -> list) !   do.call !   (list -> DataFrame) lapply(iris[1:4],  mean)    
  • 29. 描画していきます(1.1.4.5-) library(ggplot2)   library(plyr)   library(scales)     !   この章で使うパッケージは以下の3つ !   ggplot2: 綺麗な描画 !   plyr: mapreduceっぽい操作用 !   scales: グラフのためのスケール操作
  • 30. ggplot2とは !   良い感じのグラフを手軽にかけるライブラリ !   オブジェクト指向っぽくグラフを作る !   Photoshopのレイヤーを重ねるようにグラフ を作成していく !   ggplot2のためにRを使うとかありがち !   私とか
  • 32. 散布図 g  <-‐‑‒  ggplot(data=iris,  aes_̲string(x='Sepal.Length',  y='Sepal.Width',  color='Petal.Length'))   g  +  geom_̲point()  
  • 33. 種毎に分ける g  +  geom_̲point()  +  facet_̲wrap(~∼Species)  
  • 34. ラベルを変更 g  +  geom_̲point()  +  facet_̲wrap(~∼Species)  +  xlab("Length")  +  ylab("Width")  
  • 35. 線形回帰 g  +  geom_̲point()  +  facet_̲wrap(~∼Species)  +  geom_̲smooth(method='lm')  
  • 36. (おまけ)お手軽プロット qplot(Sepal.Length,  Petal.Length,  data  =  iris,  color  =  Species,  size  =  Petal.Width)  
  • 37. ヒストグラム library(ggplot2)   library(scales)   ggplot(ufo.us,  aes(x=DateOccurred))     +  geom_̲histogram()     +  scale_̲x_̲date(breaks="50  years")  
  • 38. 1990-1-1以降の月ごとのヒ ストグラム ufo.us  <-‐‑‒  subset(ufo.us,  DateOccurred  >=  as.Date("1990-‐‑‒01-‐‑‒01"))   ufo.us$YearMonth  <-‐‑‒  strftime(ufo.us$DateOccurred,  format="%Y-‐‑‒%m")   ggplot(ufo.us,  aes(x  =  DateOccurred))  +      geom_̲histogram(aes(fill='white',  color='red'))  +      scale_̲fill_̲manual(values=c('white'='white'),  guide="none")  +      scale_̲color_̲manual(values=c('red'='red'),  guide="none")  +      scale_̲x_̲date(breaks  =  "50  years")  
  • 39. 時系列と頻度の処理 sightings.counts  <-‐‑‒  ddply(ufo.us,  .(USState,YearMonth),  nrow)   date.range  <-‐‑‒  seq.Date(from  =  as.Date(min(ufo.us$DateOccurred)),      to  =  as.Date(max(ufo.us$DateOccurred)),      by  =  "month")   date.strings  <-‐‑‒  strftime(date.range,  "%Y-‐‑‒%m")   states.dates  <-‐‑‒  lapply(state.abb,  function(s)  cbind(s,  date.strings))   states.dates  <-‐‑‒  data.frame(do.call(rbind,  states.dates),  stringsAsFactors  =  FALSE)   #  left  outer  join   all.sightings  <-‐‑‒  merge(states.dates,      sightings.counts,      by.x  =  c("s",  "date.strings"),      by.y  =  c("USState",  "YearMonth"),      all  =  TRUE)   names(all.sightings)  <-‐‑‒  c("State",  "YearMonth",  "Sightings")   all.sightings$Sightings[is.na(all.sightings$Sightings)]  <-‐‑‒  0   all.sightings$YearMonth  <-‐‑‒  as.Date(rep(date.range,  length(state.abb)))   all.sightings$State  <-‐‑‒  as.factor(all.sightings$State)   欠けている月の目撃情報を0として追加 州の要素を文字列から因子に変更する
  • 40. 描画する ggplot(all.sightings,  aes(x  =  YearMonth,y  =  Sightings))  +      geom_̲line(aes(color  =  "darkblue"))  +      facet_̲wrap(~∼State,  nrow  =  10,  ncol  =  5)  +        theme_̲bw()  +        scale_̲color_̲manual(values  =  c("darkblue"  =  "darkblue"),  guide  =  "none")  +      scale_̲x_̲date(breaks  =  "5  years",  labels  =  date_̲format('%Y'))  +      xlab("Years")  +      ylab("Number  of  Sightings")  +      opts(title="Number  of  UFO  sightings  by  Month-‐‑‒Year  and  U.S.  State  (1990-‐‑‒2010)")  
  • 41. 一章まとめ !   可視化による分析をしました !   (考察は本を読むべし) !   Rでやるのもいいですがperl,ruby,pythonで処理して からread.csvで読み込むのが普通かなと !   Pythonistaだったらpandasという選択肢もあります !   dataframe実装してある !   joinできる !   速い(numpy)
  • 43. 本書での「データセット」 !   数値と文字列からなる巨大な表データであり、 それぞれの行は実世界の1つの観察結果を表す !   データベースのテーブル構造のようなもの !   確証的データ分析はやらない、探索的なデータ 分析のみ
  • 44. 要約 !   行か列の圧縮 !   要約統計量 !   行の圧縮 !   平均とか中央値とか !   次元削減 !   列の圧縮 !   PCA,MDS !   全部読み終わったらあらためて考えるとイイ
  • 45. 平均、中央値 setwd("/Users/kzfm/lang/rcode/ML_̲for_̲Hackers/ 02-‐‑‒Exploration/")   heights.weights  <-‐‑‒  read.csv("data/ 01_̲heights_̲weights_̲genders.csv")   heights  <-‐‑‒  with(heights.weights,  Height)   boxplot(heights)   summary(heights.weights$Height)   Min.  1st  Qu.    Median        Mean  3rd  Qu.        Max.        54.26      63.51      66.32      66.37      69.17      79.00    
  • 46. 標準偏差と分散 !   データの広がりを表現したい !   バラツキを表現する >  var(heights)   [1]  14.80347   >  mean(heights)   [1]  66.36756   >  c(mean(heights)-‐‑‒var(heights),  mean(heights)+var(heights))   [1]  51.56409  81.17103   あとで
  • 48. 分布 !   分布の種類 !   正規分布 !   ガンマ分布 !   コーシー分布 !   単峰性か否か !   双峰性の分布が重なって見かけ上単峰性になっていな いか? !   ヒストグラムよりは密度推定のほうがよいとおもう !   バイオリンプロットとかbean-plotもおすすめ
  • 50. 男女を予測 c  <-‐‑‒  coef(logit.mode)   ggplot(height.weights,  aes(x  =  Weight,  y=Height,  color=Gender))  +  geom_̲point()   +  stat_̲abline(intercept  =  -‐‑‒c[1]/c[2],  slope=-‐‑‒c[3]/c[2],  geom='abline',  color='black')  
  • 51. 2章まとめ !   要約統計量の説明 !   ggplot2によるグラフ描画 !   ちょっと予測モデルで遊んだ