データベースのお話

2,709 views

Published on

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

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,709
On SlideShare
0
From Embeds
0
Number of Embeds
51
Actions
Shares
0
Downloads
32
Comments
0
Likes
7
Embeds 0
No embeds

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
  • データベースのお話

    1. 1. データベースのお話 2012.07.07 Tokyo.R #24 by @holidayworking
    2. 2. 自己紹介• Hidekazu Tanaka• システムエンジニア• 好きなもの • T-SQUARE • F1
    3. 3. Rを使っていると
    4. 4. こんな経験がありますよね?
    5. 5. ファイルがたくさん
    6. 6. どのファイルにデータが あるのか分からない
    7. 7. そんな人に今回紹介するのは
    8. 8. データベース
    9. 9. データベースとは?• 大量のデータを一定の規則に従って蓄積し、一元 的に管理できるようにしたもの• データベースを構築することによって、データの 重複や散逸を防ぎ、ある項目に着目して特定の データを抽出するといった、効率的なデータ利用 が可能になる
    10. 10. データモデル• データベースに格納するデータをどのように配置 するか理論的・物理的な側面から規定するもの• 代表的なデータモデル • 階層型データモデル • ネットワーク型データモデル • 関係モデル • オブジェクトデータモデル
    11. 11. データモデル• データベースに格納するデータをどのように配置 するか理論的・物理的な側面から規定するもの• 代表的なデータモデル • 階層型データモデル • ネットワーク型データモデル • 関係モデル • オブジェクトデータモデル
    12. 12. 関係モデル• E.F.Codd が集合論と述語理論に基づいて考案し たモデル• 基本的な前提は、あらゆるデータは n 項の関係で 表現されるということ• 詳細は Wikipedia で!!
    13. 13. RDBMS• 関係モデルに基づいて設計されたデータが格納さ れ、管理されるシステムのこと• データは2次元の表として格納し、データ間の関連 をデータを使って表現される• データの操作や定義を行うためには SQL と呼ば れる言語を使うのが一般的
    14. 14. RDBMS• 商用、オープンソースを含め様々な実装が存在 • Oracle Database • Microsoft SQL Server • MySQL • PostgreSQL • SQLite
    15. 15. SQL• RDBMS において、データの操作や定義を行うた めの問い合わせ言語• ISO で言語仕様の標準化が行われているため、異 なる RDBMS でも同じように使うことができる• 標準規格の対応の程度は RDBMS によって異な ることがあるため、特定の RDBMS では使えな い構文もあることもある
    16. 16. SQL• DDL : Data Definition Language • CREATE • DROP • ALTER • TRUNCATE
    17. 17. SQL• DML : Data Manipulation Language • SELECT • INSERT • UPDATE • DELETE
    18. 18. Rから操作する方法• R から RDBMS を操作する方法は2種類存在 • RODBC パッケージ • DBI パッケージ
    19. 19. RODBC パッケージ• ODBC で RDBMS を操作するパッケージ • ODBC : Open Database Connectivity • Microsoft が提案した RDBMS にアクセス するための共通インターフェイス • Windows 環境で利用されることが多い• Windows で R を使っている場合は、このパッ ケージを使ったほうが良い
    20. 20. DBI パッケージ• R から RDBMS を操作するためのインターフェ イスを定義したパッケージ• RDBMS に対応したパッケージのインストールが 必要• Mac OS X や Linux を使っている場合は、この パッケージを使ったほうが良い
    21. 21. ドライバパッケージ• RMySQL• RPostgreSQL• RSQLite• ROracle• RJDBC
    22. 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. 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. 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. 25. 実践編• R と RDBMS を組み合わせの例としてテキスト マイニングをやってみます• 「Rによるテキストマイニング入門」の第9章のテ キスト分類• 上記の本では新聞記事をファイルに保存し解析し ているが、今回は RDBMS に保存し解析をする
    26. 26. 新聞記事収集スクリプト• 某新聞の RSS から記事を取得、RDBMS に保存• 収集スクリプトは Ruby で実装• スクリプトは GitHub で公開 • http://github.com/holidayworking/ sankei
    27. 27. テーブル構成
    28. 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))

    ×