会社の方に色々教えてもらったりベースのコードいただきながら作りましたm(_ _)m
R言語でskypeのDB(SQLite)を操作し、グループチャットを選択するとそのチャット内の発言数を人ごとに集計して棒グラフにするスクリプトです。期間指定はしていません。
db_path = "~/Library/Application Support/Skype/(skypeID)/main.db"
library(RSQLite)
driver <- dbDriver("SQLite")
con <- dbConnect(driver, db_path)
convo <- dbGetQuery(con, "SELECT id, displayname from Conversations where type = 2")
id = menu(c(convo$displayname), title="0:exit")
if (id == c(0)) { cat("Nothing done\n")
} else {
convo_id = convo[id, 'id']
tbl <- dbGetQuery(con, paste("SELECT m.author, m.id, c.displayname from Messages m inner join Conversations c on m.convo_id = c.id where c.type = 2 and c.id = ", convo_id, " order by m.author"))
res <- tapply(tbl[,"id"], tbl[,"author"], length)
par(mar=c(15,4,4,4))
barplot(sort(res, decreasing=T), las=3, family="Osaka",cex.axis=0.7, cex=0.5)
}
なお、上記スクリプト内でDB操作系のパッケージを使うので、DBIとRSQLiteパッケージをインストールする必要があります。(インストール方法は後述)
パッケージインストール方法紹介ついでに、メモ代わりに自分の実行手順(あんまりちゃんと勉強していないのでオレオレ方法です)も書きます。
最初に次のスクリプトをどこかに保存しておきます。(コピペでもいいですが何回も実行するときに面倒なので)そしてRを起動します。
初回のみ、まず次のコードを実行してパッケージをインストールします。
options(repos="http://cran.md.tsukuba.ac.jp")
install.packages("DBI")
install.packages("RSQLite")
次に、↓のようにコードを実行してスクリプトを実行します。
source("/path/to/one_room_skype_graph.r")
すると、グループチャット名を選択するように指示されるので、表示したいチャットの該当する番号を入力してEnterすればグラフが表示されるはずです。(微妙に縦軸のメモリが足りないのがせつないですが。。)
ちなみにskypeが起動している状態でスクリプトを実行すると、DBがロックされていて途中でエラーになるので、skypeを切るかDBをコピーしてスクリプトを実行する必要があります。