kaggleのtitanicで0.81340を出した話
はじめに
みんな大好き(?)kaggleのtitanicコンペ
Titanic: Machine Learning from Disaster | Kaggle
で0.81340のスコアを出したので色々まとめてみましたという記事です。
このコンペはtitanic号が沈没したときのデータを使用して、乗客が生存したか死亡したかを予測するモデル構築し、そのモデルの予測精度を競うコンペです。
一般に80%の精度を超えると良いとされているコンペのようですので、この記事がそこを目指している方々への参考となればよいかと思います。
【python】beautifulsoupでYahoo! ファイナンスから日経平均のデータをスクレイピング
ずっっっっっと前にbeautifulsoupでスクレイピングしたことがあったけど、使い方を完全に忘れてたので再び入門的なことをやってみた。
とりあえずYahoo! Financeから日経225に関するデータを引っ張ってこようかと思います。
from bs4 import BeautifulSoup import urllib.request import time # 今回は30ページ分のデータを取得してみる。 page_num = 30 stock_temp = [] for i in range(page_num): # Yahoo Financeのページ。url末尾の数字を変更すると日経225の過去のデータが取得できる。 url = "http://info.finance.yahoo.co.jp/history/?code=998407.O&sy=2010&sm=12&sd=4&ey=2017&em=3&ed=4&tm=d&p=" + str(i+2) html = urllib.request.urlopen(url) soup = BeautifulSoup(html, "lxml") # 上記urlのソースをみると<td>~~~</td>にほしい数値が入っているっぽいから、soup.find_all("td")でその部分を抽出する。 # soup.find_all("td")では<td>~~~</td>といったタグと一緒にリスト型で結果を抽出してくるので、 # リストのそれぞれの要素に対してget_textメソッドを使って数値だけにする。 stock_extract = [value.get_text() for value in soup.find_all("td")[3:103]] stock_temp.extend(stock_extract) time.sleep(0.5) stock_temp = np.array(stock_temp) stock = stock_temp.reshape(int(len(stock_temp)/5), 5) stock = pd.DataFrame(stock[:,1:5], columns=["start", "high", "low", "end"], index=stock[:,0]) # 株価のカラムが文字列になっていて、かつカンマが入っているのでカンマを除去してfloat型にする。 for i in range(4): stock.ix[:,i] = stock.ix[:,i].str.replace(",", "").astype(float)
結果として
stock
こんな感じ。いいんじゃないですかね?
【R】ダミー変数を一度に生成する関数
探せばあるんだろうけど、データフレームを引数に複数列を一度にダミー変数化する関数を作りました。
よければ使ってください。
使い方:
(0) {dummies} パッケージをインストールする
(1) 引数 data にダミー変数化したいデータフレームを入れる
(2) 回帰等で多重共線性を避けるために1列除きたい場合は is.drop = TRUE とする
convDummies <- function(data, is.drop = FALSE){ library(dummies) N <- ncol(data) row_names <- names(data) names_list <- c() new_data <- rep(NA, nrow(data)) for(n in 1:N){ unique_value <- sort(unique(data[,n])) dummied_data <- dummy(data[,n]) if(is.drop == TRUE){ new_data <- cbind(new_data, dummied_data[,-ncol(dummied_data)]) names_list <- c(names_list, paste(row_names[n], unique_value, sep = ".")[-ncol(dummied_data)]) } else { new_data <- cbind(new_data, dummied_data) names_list <- c(names_list, paste(row_names[n], unique_value, sep = ".")) } } new_data <- as.data.frame(new_data) names(new_data) <- c("temp", names_list) return(new_data[,-1]) }