データベースのお話

  • 1,710 views
Uploaded on

第24回R勉強会@東京(#TokyoR)で発表したスライド

第24回R勉強会@東京(#TokyoR)で発表したスライド

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,710
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
27
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Transcript

  • 1. データベースのお話 2012.07.07 Tokyo.R #24 by @holidayworking
  • 2. 自己紹介• Hidekazu Tanaka• システムエンジニア• 好きなもの • T-SQUARE • F1
  • 3. Rを使っていると
  • 4. こんな経験がありますよね?
  • 5. ファイルがたくさん
  • 6. どのファイルにデータが あるのか分からない
  • 7. そんな人に今回紹介するのは
  • 8. データベース
  • 9. データベースとは?• 大量のデータを一定の規則に従って蓄積し、一元 的に管理できるようにしたもの• データベースを構築することによって、データの 重複や散逸を防ぎ、ある項目に着目して特定の データを抽出するといった、効率的なデータ利用 が可能になる
  • 10. データモデル• データベースに格納するデータをどのように配置 するか理論的・物理的な側面から規定するもの• 代表的なデータモデル • 階層型データモデル • ネットワーク型データモデル • 関係モデル • オブジェクトデータモデル
  • 11. データモデル• データベースに格納するデータをどのように配置 するか理論的・物理的な側面から規定するもの• 代表的なデータモデル • 階層型データモデル • ネットワーク型データモデル • 関係モデル • オブジェクトデータモデル
  • 12. 関係モデル• E.F.Codd が集合論と述語理論に基づいて考案し たモデル• 基本的な前提は、あらゆるデータは n 項の関係で 表現されるということ• 詳細は Wikipedia で!!
  • 13. RDBMS• 関係モデルに基づいて設計されたデータが格納さ れ、管理されるシステムのこと• データは2次元の表として格納し、データ間の関連 をデータを使って表現される• データの操作や定義を行うためには SQL と呼ば れる言語を使うのが一般的
  • 14. RDBMS• 商用、オープンソースを含め様々な実装が存在 • Oracle Database • Microsoft SQL Server • MySQL • PostgreSQL • SQLite
  • 15. SQL• RDBMS において、データの操作や定義を行うた めの問い合わせ言語• ISO で言語仕様の標準化が行われているため、異 なる RDBMS でも同じように使うことができる• 標準規格の対応の程度は RDBMS によって異な ることがあるため、特定の RDBMS では使えな い構文もあることもある
  • 16. SQL• DDL : Data Definition Language • CREATE • DROP • ALTER • TRUNCATE
  • 17. SQL• DML : Data Manipulation Language • SELECT • INSERT • UPDATE • DELETE
  • 18. Rから操作する方法• R から RDBMS を操作する方法は2種類存在 • RODBC パッケージ • DBI パッケージ
  • 19. RODBC パッケージ• ODBC で RDBMS を操作するパッケージ • ODBC : Open Database Connectivity • Microsoft が提案した RDBMS にアクセス するための共通インターフェイス • Windows 環境で利用されることが多い• Windows で R を使っている場合は、このパッ ケージを使ったほうが良い
  • 20. DBI パッケージ• R から RDBMS を操作するためのインターフェ イスを定義したパッケージ• RDBMS に対応したパッケージのインストールが 必要• Mac OS X や Linux を使っている場合は、この パッケージを使ったほうが良い
  • 21. ドライバパッケージ• RMySQL• RPostgreSQL• RSQLite• ROracle• RJDBC
  • 22. RDBMS への接続方法# 接続> conn <- dbConnect(MySQL(), host = "localhost",            user = "scott", password = "tiger", dbname = "ellison")# 接続情報の確認> summary(conn)<MySQLConnection:(49423,0)> User: scott Host: localhost Dbname: ellison Connection type: localhost via TCP/IP No resultSet available# 切断> dbDisconnect(conn)
  • 23. 簡単な使用方法# データフレームをテーブルに保存> dbWriteTable(conn, name="iris", value=iris)[1] TRUE# テーブルからデータフレームを作成> data <- dbReadTable(conn, name="iris")> head(data) Sepal_Length Sepal_Width Petal_Length Petal_Width Species1 5.1 3.5 1.4 0.2 setosa2 4.9 3.0 1.4 0.2 setosa3 4.7 3.2 1.3 0.2 setosa4 4.6 3.1 1.5 0.2 setosa5 5.0 3.6 1.4 0.2 setosa6 5.4 3.9 1.7 0.4 setosa# テーブルの削除> dbRemoveTable(conn, name="iris")[1] TRUE
  • 24. SQLの使用方法# dbGetQuery 関数を使う方法> data <- dbGetQuery(conn, "select * from quakes")> dim(data)[1] 1000 6# 大規模なデータを扱う場合は、クエリを分割して取得する dbSendQuery を使うのが安全> rs <- dbSendQuery(conn, "select * from quakes")> data <- fetch(rs)> dim(data)[1] 500 6# 残りの結果を全て取得> data <- fetch(rs, n=-1)> dim(data)[1] 500 6# 全て取得されているか> dbHasCompleted(rs)[1] TRUE
  • 25. 実践編• R と RDBMS を組み合わせの例としてテキスト マイニングをやってみます• 「Rによるテキストマイニング入門」の第9章のテ キスト分類• 上記の本では新聞記事をファイルに保存し解析し ているが、今回は RDBMS に保存し解析をする
  • 26. 新聞記事収集スクリプト• 某新聞の RSS から記事を取得、RDBMS に保存• 収集スクリプトは Ruby で実装• スクリプトは GitHub で公開 • http://github.com/holidayworking/ sankei
  • 27. テーブル構成
  • 28. テキスト分類# 記事の取得> news <- dbGetQuery(conn, "select news.id, news.title, news.content,categories.name as category from news inner join categories onnews.category_id = categories.id order by news.id")# ターム・文書行列の作成> library(RMeCab)> res <- docMatrixDF(news[,"content"], pos=c("名詞","動詞","形容詞"))# クラスター分析> hc <- hclust(dist(t(res)))> library(ggdendro)# デンドログラムの作成> hcdata <- dendro_data(hc)> ggplot() + geom_segment(data=segment(hcdata), aes(x, y, xend=xend,yend=yend)) + geom_text(data=label(hcdata), aes(x, y, label=label,hjust=0), size=3) +coord_flip() + scale_y_reverse(expand=c(0.2, 0))