Pythonでスクレイピング

これで、画像の収集をやってみる。
第7章で、牛丼画像を、フォト蔵からスクレイピングする例があるので収集。

はまったところ

  • httpsのアクセスは、python2.7以降は不可らしい。
    • 下記をすると(自己責任だけど)アクセス可能になるらしい。*1

import ssl
ssl._create_default_https_context = ssl._create_unverified_context

  • マルチバイト文字エラー
    • このおまじないが必要らしい。

# vim:fileencoding=utf-8

続・Selenium Grid設定メモ

どうも、LINUX上のFirefoxはうまくいかない、というコメントがいくつかあるみたいなので環境を変えてみる

  • node

- Chrome On Windows 10 (実機)

  • hub

- Mac OS X (前回と同じ)

nodeの立ち上げ

java -jar selenium-server-standalone-2.48.2.jar -role node -hub http://192.168.0.1x:4444/grid/register -Dwebdriver.chrome.driver=.\chromedriver.exe

hubがちゃんと認識してるっぽい

Registered a node http://192.168.0.xx:5555


macからテストスクリプトを実行(Windows, Chromeを指定)
→実行された!

環境確認用のアドレスにアクセスした時に、下記のアドレスにでる画面で、

http://192.168.0.1x:4444//grid/console

Linuxの環境は「failed: Operation timed out」って画面にでるんだよなあ
なんかうまく登録できていなかったということかな。

まあLINUXでブラウザバリエーションテストなんかしないからいいか、、、、^^;

Selenium Grid 設定メモ

ホスト:MacBook Air (w/z FireFox 44)
ゲスト:Oracle LINUX (w/z FireFox 17)

ゲストOSのネットワークをブリッジ接続とする。
(NATだと、ホストと繋がらないらしい)

ホスト側のhub立ち上げ

java -jar selenium-server-standalone-2.53.0.jar -role hub


ホスト側の、node.jsonの設定

{
"capabilities":
[
{
"platform": "MAC",
"browserName": "firefox",
"maxInstances": 2,
"version": "44.0",
"seleniumProtocol": "WebDriver"
}
],
"configuration":
{
"hub": "http://localhost:4444/grid/register"
}
}
~

ホスト側の、nodeの起動

java -jar selenium-server-standalone-2.53.0.jar -role node -hub http://localhost:4444/grid/register -nodeConfig node.json

この状態で、

DesiredCapabilities capability = DesiredCapabilities.chrome();
capability.setBrowserName("firefox");
capability.setPlatform(org.openqa.selenium.Platform.MAC);
capability.setVersion("44.0");
driver = new RemoteWebDriver(new URL("http://192.168.9x.1:5555/wd/hub"), capability);

driver.get("http://www.google.com");

とりあえずGoogle先生を開くことができた

つぎに、VirtualBoxの中

調べてでてくる書き方では常に、下記のエラー

Caused by: org.openqa.grid.common.exception.GridException: Error forwarding the new session Error forwarding the request Connect to 192.168.12x.1:5555

configurationを少しいじってみる

{
"capabilities":
[
{
"browserName": "firefox",
"maxInstances": 1,
"version": "17.0",
"seleniumProtocol": "WebDriver"
}
],
"configuration":
{
"hub": "http://192.168.0.1x:4444/grid/register", //hubのURL
"remoteHost": "http://192.168.0.2x:5558",
"url": "http://192.168.0.2x:5558",
"host": "http://192.168.0.2x"

}
}


この動画*1を参考に、
設定を真似みたら、

org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure.

どうやら届いたようだ。ちょっと進化した感じ。

つぎはゲストOSの中にブラウザパスを設定してみる予定。

Developer Summit 2016で感銘を受けた、 Mikasaをインストールしてみる

mikasaフルインストールマニュアル

  • 環境(無理かもと思いつつ、手持ちのsakuraのVPNサーバに)
    • 512 MB
    • SSD 20 GB
    • 1コア
  • まあ無理だったんだけれども、、、、
  • さくさく書いてある通りにインストール
  • 実行した時に、次のようなエラーが出る。

replicated to only 0 peer(s) instead of 1 peers

SparkのUIも一向に動かない

ググってみたら、こんな記述が。

The warning in your case means that incoming data from stream are not replicated at all. The reason for that may be that you run the app with just one instance of Spark worker or running in local mode. Try to start more Spark workers and see if the warning is gone.

ワーカーノードをもっと作って、ということらしい。

「EC2へのSpark導入とiPython Notebookの連携」ではまったところをメモ

EC2へのSpark導入とiPythonNotebookの連携

  • python3ではwithあたりでアラートが出た(virtualenvで、source bin/activateしてから実行できた)
  • keyファイルの位置をパスで書けない ( ~/xxxx.pemに置いていたけど、コマンドを打つファイルの直下に移動)
  • ユーザを作ったリージョンを間違えた( us-eastに作ったのに、コマンド通りのus-westで実行してしまった)
  • sshでアクセスできんって途中でループ
  • おそらく、sshでログインした時に確認されるアレがでてそう
  • 起動のたびにドメインは変わるしどうしようかな

↓これが良さそう
http://qiita.com/grgrjnjn/items/8ca33b64ea0406e12938

  • 起動したけどアクセス不可となったが、セキュリティグループでポートを解放すればできた。

タイタニックをネタにRの使い方を学ぶ(その3)

判別分析をしてみます。

数値型に変える必要があるようですので型変換をします。

titanic$Sex <- ifelse(titanic$Sex=="male", "0",titanic$Sex)

おっと、この指定だとcharacter型のようでした

> mode(data3$Sex)
charactor

型変換はこうやってするようです。

titanic$Sex = as.numeric(titanic$Sex)

ほかにも、Sex="female", Embarked列も変換しています。
もともと数値でデータが入っていたら変換する必要はなさそう。

あと、NA列があるとダメなようですので排除します。

data_rm_na <- na.omit(data)

判別分析のコマンドはこれ

rlt1_1 <- lda(data, grouping)

data ・・・・・もとのデータから、判別元としたいデータを抜き出す
grouping ・・・もとのデータから、判別結果を抜き出す

加工したデータから、dataとgroupingを作ります。

grouping <- as.matrix(subset(titanic_rm_na, Survived == 0 | Survived == 1, select=1))
data <- subset(titanic, Survived == 0 | Survived ==1, select=c(3,5:8,10,12))

転置が必要のようです。

t(grouping)

やっとデータができたので判別分析

>rlt1-1 <- lda(data, grouping)
>rlt1_2 <-predict(rlt1_1)
> head(rlt1_2$x, 3)
LD1
1 -1.2909017
2 2.1018931
3 0.8351778

> head(rlt1_2$posterior, 3)
0 1
1 0.94216346 0.05783654
2 0.05411463 0.94588537
3 0.32060872 0.67939128

> head(rlt1_2$class, 3)
[1] 0 1 1
Levels: 0 1

どのくらい正確に判別できるんだろうか、、、、

> table(grouping2, rlt1_2$class)

grouping2 0 1
0 363 61
1 84 206
> (61+84)*100/(363+206+61+84)
[1] 20.30812

20%くらい間違ってる
テスト用のデータではやっていないけど、訓練用データでこの正確さだと、
決定木の76%とどっちが勝つんだろう、、、、

テスト用のデータにもNA値はあるし、、、、

判別に使う変数を変えてみるとまた違うかもしれませんね。