随時加筆修正
・頻繁に加筆修正するので、無駄に通知が飛ぶと思います。
・自分用なので、読みにくいと思ったタイミングで適宜構造を変えていきます。
必要なライブラリの読み込み
libs <- c('tidyverse', 'rvest', 'plotly')
sapply(libs, library, character.only = T)
データ取得 / 書き込み ( rvest, httr, etc )
rvestによるスクレイピング
html <- read_html('https://medium.com/tag/data-science/latest')
divs <- html %>% html_nodes(xpath = '//div[contains(@class, "streamItem")]')
div %>% html_nodes(xpath='//h3') %>% html_text()
httrでGET/POST
# GET
headers <- add_headers(Authorization=paste0('Key ', api_key))
resp <- GET(paste0(base_url, '/api/queries'), headers)
cont <- content(resp, 'parsed') # parsedでコンテントタイプを見て適切に変換してくれる
# POST
POST(hook_url,
encode = 'form',
add_headers(`Content-Type` = "application/x-www-form-urlencoded", Accept = "*/*"),
body = URLencode(sprintf('payload={"text": "%s", "username": "%s", "icon_url":"%s"}', text, username, icon_url)))
DBIとSQLiteの初期化
conn <- dbConnect(SQLite(), 'url_db.sqlite', synchronous = 'off')
tbls <- dbListTables(conn)
# すでにテーブルがあるかどうか確認
if (!(table_name %in% tbls)) {
dbSendQuery(conn, sprintf('CREATE TABLE %s(url text, bkm int)', table_name))
}
データ加工 ( dplyr, tidyr, etc )
数字列のみを抽出
df <- data.frame(
a=1:10,
b=rep('y', 10)
)
df %>% select_if(is.numeric)
CSVを読み込む時にcol_types指定
csv <- read_csv('test.csv', col_types=list(col_integer(), col_character()))
データフレームの行ごとに処理を行う
df <- data_frame(X=1:9)
df %>% rowwise() %>% mutate(new_val=X)
データフレーム中にベクターがある時のフィルタリング
d <- data.frame(X=c(1, 2, 3))
d$Y <- list(c(1, 2), c(2, 3), c(4, 5))
d %>% dplyr::filter(sapply(Y, function(vec) 2 %in% vec)) #Y列に2がある行だけフィルタリング
行の値ごとの集計
d <- data.frame(X=c(1, 2, 2, 3, 4, 5, 6))
dplyr::count(d, X)
id列で整列
df <- data.frame(id=c(3,5,6,8,1),data=rep(1,5))
df
odf <- df[order(df$id),]
odf
データフレームの行ごとのfor
色々やり方はあるようだけど、それほど行がなければfor&nrowでいける。
issues <- orig_issues[pic == orig_issues$`担当者`,]
df_issues <- rbind(df_issues, c(1, 0, paste0('===== 担当者:', pic, ' ====='), '-----', pic, 'Version 1'))
for (i in 1:nrow(issues)) {
iss <- issues[i,]
if (is_invalid_issue(iss)) next
df_issues <- rbind(df_issues, c(2, to_id(iss) + 10000, to_desc(iss), '-----', pic, to_wiki(iss), 'Version 1'))
}
データ分析
データがどのくらい正規分布と差異があるのか調べる
qqnorm(diamonds$carat)
データ可視化 ( ggplot2, etc )
グラフ内ラベルで日本語文字を使う
oldに代入しているのは、テーマを戻す時用。
old <- theme_set(theme_gray(base_family="HiraKakuProN-W3"))
主成分分析をggplotで描画
autoplotを使うと綺麗に固有値ベクトルまで描画してくれる。
df.prc <- data.frame(
x=rnorm(100),
y=rnorm(100),
c=c(rep(1.0, 50), rep(2.0, 50))
)
autoplot(prcomp(df.prc, scale=T, center=T), data=df.prc, colour='c', loadings=T, loadings.label=T)
同じ系統のデータを一つのグラフに別々に描画
gatherでデータフレームの形状を変化させて描画。
df_plot <- df_dau %>% gather('key', `描画用データ`)
g <- ggplot(df_plot, aes(x=date, y=`描画用データ`))
g + geom_bar(aes(fill = key), stat='identity') + labs(title='テストグラフ') + scale_x_date(labels = date_format('%Y/%m/%d')) + theme_gray(base_family = "HiraKakuPro-W3")
# scale_x_dateで、横軸にいい感じに日付のラベルを書く