r 資料探勘入門 最後一章 勘誤

花狸狐哨的kvm發表於2019-07-07

這本書寫的還是不錯的,都很基礎, 常見的內容也都涉及到了,就是最後一章這個程式碼呀。。。真的不敢恭維。 這裡做一個詳細的勘誤。 如果有不對的地方也歡迎指正。

首先,最後一章是譯者自己寫的吧。。。利用微博的api,不過微博這玩意那麼多限制。。。結果確實跟作者高的不同, 話不多說進入勘誤。

程式碼: 1. 原作者說了如果有問題需要用utf-8編碼重新開啟, 改成utf8也不麻煩,為什麼不能好好改一下呢? 中間大量的中文即使改成utf8 也有亂碼;

2.程式碼行26 sys.setlocale, 應該是Sys.setlocale。。。如果釋出之前程式碼跑過了,不知道為啥會出現這種情況?? 書上倒是沒印錯。

3.Rwordseg 包安裝採用了install.pacakges()的方式, 去網上查就知道這經常會報錯, 需要配合rjava安裝,然後之前需要配置好java環境,即使如此也會報錯= = , 畢竟R不是原來的R了。 只能下載然後從zip安裝= = 。 。。。

  1. 行 14/15 wobject <- fromJSON(data) length(wobject$statuses) 得不到100條微博, 而且最後結尾也不完整。

反正程式碼是公開的, 我po一下原來的第15章好了~

敘述部分: 上來就說建立一個應用,明明下面寫的是建立網頁應用,一開始還得點移動應用而不是網頁接入。。。

為什麼不能寫清楚一些, 說明一下點選移動應用 能廢多少時間啊摔

# 
# 第15章
# SNSデータの分析
#

# Twitter REST API
# GET search/tweets
# https://syncer.jp/twitter-api-matome/get/search/tweets

install.packages("twitteR")
install.packages("ROAuth")
install.packages("base64enc")

library(twitteR)
library(ROAuth)
library(base64enc)

APIKey <- "****"
APISecret <- "****"
accessToken <- "****"
accessSecret <- "****"

setup_twitter_oauth(APIKey, APISecret, accessToken, accessSecret)

searchword <- "ガラケー スマホ"
searchquery <- iconv(paste0(searchword," AND -filter:links AND -RT"), to="UTF-8")
tw.df <- twListToDF(searchTwitter(searchquery, 
                                  since=as.character(Sys.Date()-8),
                                  until=as.character(Sys.Date()), n=10000))

names(tw.df)

# ツイート數の集計

library(dplyr)
library(ggplot2)

# 日別の集計

tw.daily <- tw.df %>%
  mutate(twdate=as.Date(created)) %>%
  group_by(twdate) %>% summarize(cnt = n())
tw.daily
qplot(twdate, cnt, data=tw.daily, geom="bar", stat="identity")

# 印刷用グラフ
cairo_pdf("tw.daily.pdf", width=8, height=8, family="MixMix 1P")
qplot(twdate, cnt, data=tw.daily, geom="bar", stat="identity", fill=I("#666666")) +
  theme_bw(base_size=18)
dev.off()

# 時間別の集計

tw.hourly <- tw.df %>%
  mutate(twhour=as.POSIXct(format(created, "%Y-%m-%d %H:00:00"))) %>%
  group_by(twhour) %>% summarize(cnt = n())
tw.hourly
qplot(twhour, cnt, data=tw.hourly, geom="bar", stat="identity")

# 印刷用グラフ
cairo_pdf("tw.hourly.pdf", width=8, height=8, family="MixMix 1P")
qplot(twhour, cnt, data=tw.hourly, geom="bar", stat="identity", fill=I("#666666")) +
  theme_bw(base_size=18)
dev.off()


# RMeCabのインストール
install.packages ("RMeCab", repos = "http://rmecab.jp/R")

library(RMeCab)

# 前処理

tw.txt <- unique(tw.df$text)
tw.txt <- gsub("[[:print:]]", "", tw.txt, perl=TRUE)
tw.txt <- iconv(tw.txt, from="UTF-8", to="CP932", "")
tw.txt <- tw.txt[-grep("^RT", tw.txt)]

tw.dmat <- docMatrixDF(tw.txt, pos = c("名詞"))
dim(tw.dmat)

tw.wcnt <- as.data.frame(apply(tw.dmat, 1, sum))
tw.wcnt <- tw.wcnt[
  !(row.names(tw.wcnt) %in% unlist(strsplit(searchword, " "))),
  1, drop=FALSE]

tw.wcnt2 <- data.frame(word=as.character(row.names(tw.wcnt)),
                       freq=tw.wcnt[,1])
tw.wcnt2 <- subset(tw.wcnt2, rank(-freq)<25)
ggplot(tw.wcnt2, aes(x=reorder(word,freq), y=freq)) + 
  geom_bar(stat="identity", fill="grey",  color="black") +
  theme_bw(base_size=20) + coord_flip() + xlab("word")


cairo_pdf("wordcount.pdf", family="MigMix 1P", width=12, height=8)
ggplot(tw.wcnt2, aes(x=reorder(word,freq), y=freq)) + 
  geom_bar(stat="identity", fill="grey",  color="black") +
  theme_bw(base_size=20) + coord_flip() + xlab("word")
dev.off()


install.packages("wordcloud")
install.packages("RColorBrewer")
library(wordcloud)
library(RColorBrewer)

tw.wcnt <- subset(tw.wcnt, tw.wcnt[, 1] >= 30)
pal <- brewer.pal(8,"Dark2")
cairo_pdf("wordcloud.pdf", family="Meiryo", width=8, height=8)
wordcloud(row.names(tw.wcnt), tw.wcnt[, 1], scale = c(4, .2),
          random.order = T, rot.per = .15, colors = pal)
dev.off()

# ネットワーク分析

unlist(RMeCabC("安いガラケーに機種変更したい"))

tw.file <- tempfile()
write(gsub("\n", "", tw.txt), file=tw.file)
tw.bigram <- NgramDF(tw.file, type = 1, N = 2,
                     c("名詞", "形容詞", "動詞"))

sortlist <- order(tw.bigram[,3],decreasing = TRUE)
tw.bigram <- tw.bigram[sortlist,]
tw.bigram <- subset(tw.bigram, Freq>20)
head(tw.bigram)

install.packages("igraph")
library(igraph)
tw.graph <- graph.data.frame(tw.bigram)

# コミュニティーの抽出
eb <- edge.betweenness.community(tw.graph)

# グラフ描畫
cairo_pdf("network.pdf", family="Meiryo", width=8, height=8)
plot(tw.graph, vertex.label=V(tw.graph)$name,
     vertex.label.family="Meiryo",
     vertex.size=3*log(degree(tw.graph)),
     vertex.color=cut_at(eb, 10), edge.arrow.size=0.1,
     vertex.label.cex=1, edge.arrow.width=1)
dev.off()

plot(tw.graph, vertex.label=V(tw.graph)$name,
     vertex.size=3*log(degree(tw.graph)),
     vertex.color=cut_at(eb, 10), edge.arrow.size=0.1,
     vertex.label.cex=1, edge.arrow.width=1)

相關文章