2015年2月24日火曜日

Rのチートシート


RとRubyによるデータ解析入門
http://www.amazon.co.jp/dp/4873116155
2章を参考に。


環境周り


Rの導入(macportsで)
sudo port install R

ファイルをコマンドラインから実行
R --vanilla --slave < hoge.R

--vanilla : Rがこれまでに保存していたオブジェクトを読み込まない
--slave : 標準出力に表示を出さない

パッケージのインストール
install.packages('tree')

インストール済パッケージ一覧
installed.packages()

パッケージのアンインストール
remove.packages('hoge')

パッケージの使用
library(tree)

Rのシンタックス

コメント
#

代入演算子

x <-1
or
1 -> x
or
mean(x = 1:10)

=はトップレベルでのみ使うことができて、関数内で使った場合はスコープが関数内になる。
x <- 1:10
とすると関数外でも使うことができる。

関数定義

my_function <- function(x,y) {

}


関数作成時に初期値を設定するには下記のようにする

my_function <- function(x,y=5) {

}

関数呼び出し

my_function(1,2)

引数に初期値がある場合は、すべての引数を指定しなくても良い

my_function(1)


条件文とループ


条件文の例

x <- 10
if (x > 20) {
print("x is greater than 20")
} else {
print(x is less than 20")
}

ループ3つ

repeat {}

breakないと止まらないお


while () {}

for ( x in 1:10) {}


データ構造

ベクトル(1次元配列)

// 結合関数cでつくる
> height <- c(1,2,3)

// :演算子でつくる
> 1:10

// seq関数でつくる
> seq(0,100,by=10)

// ベクトルの長さを取る
> length(height)

// ベクトルにアクセス
> length[1]

ベクトルのインデックスは0からではなく、1からはじまる

// 複数要素を取ることもできる
> length[2,3]


リスト

// key/value的な感じ
> peater <- list(name='Peter', age=30, glasses=TRUE)

// 参照は、位置もしくは、名前
> peater[1]

> peater['name']

// exact=FALSEにすると、名前の部分一致でもアリらしい
> petaer['na',exact=FALSE]


行例

> m <- matrix(1:20,nrow=5,ncol=4)

// デフォルトは列方向につくられるので、行方向につくりたいとき
> m <- matrix(1:20,nrow=5,ncol=4,byrow=TRUE)


アクセス

// 10番目、の意
m[10]

// 位置
m[3,4]

// 行列3~5行目,2~3列目
m[3:5,2:3]


配列

ベクトルを2次元以上へ拡張したもの。array()で作成する。
行列を複数つくる感じ

> a <- array(1:24,c(2,3,4))


ファクタ

値には、名義値、順序値、連続値がある。
名義値と順序値をつくりたいためのファクタ。


> colors <- c('green', 'red', 'blue')
> factor(colors)
[1] green red   blue
Levels: blue green red

デフォルトではabc順。factor作成時に順序指定することもできる。
> factor(colors, order=TRUE, levels=colors)


データフレーム

名前のついた複数のベクトルからなるリスト

ちょい書きかけ...

2015年2月22日日曜日

MacOSXでの複数Java環境の管理

yosemiteにて

インストールされているJava一覧


$ /usr/libexec/java_home -V

Matching Java Virtual Machines (2):    1.8.0_25, x86_64:   "Java SE 8"     /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home    1.7.0_40, x86_64:   "Java SE 7"     /Library/Java/JavaVirtualMachines/jdk1.7.0_40.jdk/Contents/Home/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home


いまのJavaHome

$ /usr/libexec/java_home

/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home

余談

JavaHomeの切り替えなんだけど、

export JAVA_HOME=`/usr/libexec/java_home -v 1.8.0_25` 

みたいなversion指定で切り替えられるんだけど、個人的には、

 ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home /usr/local/java8

みたいにソフトリンクのほうが、
共存させててるときにわかりやすいなのでなんとなくそうしてる

2015年2月20日金曜日

MySQLでデッドロック検知したときに、とりあえず見るところ

お手本はこちら。
http://d.hatena.ne.jp/sh2/20090618

これはただの自分用のメモです。
5.5 later想定

デットロックが監視にひっかかったら!!


  • 心を落ち着かせる
  • show full process list;
    • 今流れてるクエリを眺める
  • show engine innodb status\G
    • LATEST DETECTED DEADLOCKのあたりを見よう
  • select * from information_schema.INNODB_TRX order by trx_id;
    • limitとかwhereとか適当に効かせて
    • ロックを引き起こしてる輩:information_schema.INNODB_LOCKSをみる
    • ロックで待たされちゃってる輩:information_schema.INNODB_LOCK_WAITS
  • ( ´ー`)フゥー...




2015年2月6日金曜日

2015年やること

1月中、いろんなことを調べたり、試したりしていて、今年やることを(今更)決めたので、残しておこうと思う。これはただのチラ裏。

いろいろ考えていたのは、今年というか、30代のテーマどうしようかなーと思っているのがあって、なかなかもやもやしていたのだった。

やることってか、学ぼうリストみたいな感じですね(言ったからにはやろうというか)

今年やること


英語

いい加減Google翻訳に頼る生活辞めたい。普通にTOEICの勉強しようと思う。

数学(統計)

ECサイトにいることもあって、手元にデータなんかいろいろあるので、いっちょセクシィなアウトプットを目指す。

Ruby

仕事は相変わらずJavaを書いてる気がするんだけど、趣味のものはなるべくRuby使おうかな、と。もう少し慣れたい。Rubyで仕事をしたいかというと特にそういうのもないんだけど。

関数型言語(Haskell ?) 

最近、情報が多いのがHaskellなので、これかなー


今年やるかも?


Go

swiftはたぶんやらない


ほか、仕事で必要になった知識は別途是是非でやっていくということで。

人生上の大きなイベントが昨年から今年にかけて多いので、勉強の時間取るのをうまくやっていかないとね。

おしまい

2015年2月2日月曜日

固定長リストへ循環アクセスするサンプル

タイトルまま



コード
package hoge;

import java.util.Arrays;
import java.util.List;

import org.junit.Test;

public class TestTest {

 @Test
 public void test1() {
  
  List list = Arrays.asList("a","b","c","d","e","f","g");
  
  for(int i=0;i< 10;i++) {
   System.out.println(list.get(i % list.size()));
  }
 }
}
実行結果
a
b
c
d
e
f
g
a
b
c

2015年1月16日金曜日

【補足あり】JavaCVでPixel操作サンプル

さて、昨日つくった環境で
http://blogger.shase.info/2015/01/javacv.html
公式のサンプル(といっても結局c++なんだけど…)っぽいことをしてみる。

https://code.google.com/p/javacv/wiki/OpenCV2_Cookbook_Examples_Chapter_2#Accessing_Pixel_Values
ここにある、Accessing Pixel Values ってやつ。

元画像


加工後















コード
package hoge;

import org.junit.Test;

import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_highgui.*;

public class HogeTest {

 @Test
 public void test1() {

  IplImage image = cvLoadImage("abc.jpg");
  CvMat cvMat = new CvMat();
  cvGetMat(image, cvMat);

  int div = 100;
  int nbElements = cvMat.rows() * cvMat.cols() * cvMat.channels();
  for (int i = 0; i < nbElements; i++) {
   double v = (int) cvMat.get(i);
   double newV = v / div * div + div / 2;
   cvMat.put(i, newV);
  }

  IplImage image2 = new IplImage(cvMat);
  cvSaveImage("abc2.jpg", image2);
  cvReleaseImage(image);
 }
}

CvMatのgetとputがduplicatedってどーゆーことー ?_?


【補足】
get,putの代わりにcvGet2Dとか、cvSet2Dとかあるのでこれでよいですね。
と、ここまで、やって、OpenCV使うにしてもJavaCVいろいろ微妙なんじゃないかな、と思い始めた俺ががいる。

MacOSでJavaCVが動かなくて悲しい思いをした

環境は、Mac OS

OpenCVやりたいー。
Javaだから、JavaCV使って見ようと思って、pom.xmlに追加するじゃないですか。

https://github.com/bytedeco/javacv

  <dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>javacv</artifactId>
    <version>0.10</version>
  </dependency>

公式サイトの通り。
で、公式サイトの通りテストプログラムを書いてみる。


import org.junit.Test;

import static org.bytedeco.javacpp.opencv_core.*;
import static org.bytedeco.javacpp.opencv_imgproc.*;
import static org.bytedeco.javacpp.opencv_highgui.*;

public class HogeTest {

  @Test
  public void test1() {

    IplImage image = cvLoadImage("/Users/hoge.jpg");
    if (image != null) {
      cvSmooth(image, image);
      cvSaveImage("/Users/hoge2.jpg", image);
      cvReleaseImage(image);
    }
  }

}

でもこんなエラーになるわけです。
java.lang.UnsatisfiedLinkError: no jniopencv_core in java.library.path
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
  at java.lang.Runtime.loadLibrary0(Runtime.java:845)
  at java.lang.System.loadLibrary(System.java:1084)
  at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:535)
  at org.bytedeco.javacpp.Loader.load(Loader.java:410)
  at org.bytedeco.javacpp.Loader.load(Loader.java:353)
  at org.bytedeco.javacpp.opencv_core.(opencv_core.java:10)
  at java.lang.Class.forName0(Native Method)
  at java.lang.Class.forName(Class.java:264)
  at org.bytedeco.javacpp.Loader.load(Loader.java:385)
  at org.bytedeco.javacpp.Loader.load(Loader.java:353)
  at org.bytedeco.javacpp.opencv_highgui.(opencv_highgui.java:13)
  at jp.co.cyberagent.dokusho.service.HogeTest.test1(HogeTest.java:17)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
  at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
  at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
  at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
  at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
  at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
  at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
  at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
  at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
  at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
  at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
  at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
  at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Caused by: java.lang.UnsatisfiedLinkError: no opencv_core in java.library.path
  at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
  at java.lang.Runtime.loadLibrary0(Runtime.java:845)
  at java.lang.System.loadLibrary(System.java:1084)
  at org.bytedeco.javacpp.Loader.loadLibrary(Loader.java:535)
  at org.bytedeco.javacpp.Loader.load(Loader.java:401)
  ... 31 more

悲しい。 結論から言うと、コイツ、いろんなjarが足りないらしい。ひどい! で、それらの足りないものを補ってくれるものが公開されてます。

ずばりここに書いてあった。

Making Computer Vision actually work
http://marellbox.marell.se/?p=687

で、書いてある回避用リポジトリをpom.xmlに追加すると動いたー。


<dependency>
    <groupid>org.bytedeco</groupid>
    <artifactid>javacv</artifactid>
    <version>0.10</version>
 </dependency>
 <dependency>
     <groupid>se.marell</groupid>
     <artifactid>opencv-macosx-x86_64</artifactid>
     <version>2.4.10-0.10</version>
     <scope>runtime</scope>
 </dependency>
 ...
 <repository>
   <id>marell</id>
   <url>http://marell.se/nexus/content/repositories/releases/</url>
 </repository>

( ´ー`)フゥー...