2016年10月23日日曜日

D3.js : Bubbleチャートの利用

Bubbleチャート表示をやってみたくてやってみました。
http://bl.ocks.org/mbostock/4063269
を見てやってみようと思ったのですが、データ階層が面倒だったので簡単な方法で
http://www.openspc2.org/reibun/D3.js/code/graph/bubble-chart/0003/index.html
がシンプルだったのでこれを使わせてもらいました。

 1. jsファイルの作成
app]$ vi webroot/js/bubble.js
上記で使っているファイルに色をランダムにする部分を追加してあります。


2.viewへの取り込み
app]$ vi View/Keywords/graph.ctp


ここで使っている$countはコントローラで生成してあります。
if(count($weight) < 100 ) {
    $count = count($weight);
}else{
    $count = 100;
}
$this->set('count',$count);
100件未満だと表示されないようなので、その場合は配列数にしてあります。
これで表示するとこんな感じです。
16進数への変換は
http://d.hatena.ne.jp/DECKS/20100907/1283843862
を利用しています。

2016年10月20日木曜日

サーバ証明書の作成・設定

サーバ証明書の作成と設定をします。

1.設定したいサーバでCSR(証明書発行要求:Certificate Signing Request)を作成します。OpenSSLを用いて作成をします。
[OpenSSLのインストール]
# yum install openssl

[鍵ペアの生成]
# cd /etc/httpd/conf
# mkdir ssl.key   作業ディレクトリの作成
# vi random1.txt    鍵生成用ランダムファイル
# vi random2.txt
# vi random3.txt
# openssl genrsa -des3 -rand random1.txt:random2.txt:random3.txt 2048 >test.sample.ac.jp.key
[CSRの生成]
ssl.key]# openssl req -new -key test.sample.ac.jp.key -sha256 -out test.sample.ac.jp.csr
Enter pass phrase for test.sample.ac.jp.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:.
Locality Name (eg, city) [Default City]:Fukuroi
注意(2019/4/1変更) Academe固定は廃止されました。
2018年7月9日以降、L=Academeを指定するとエラーとなります
Organization Name (eg, company) [Default Company Ltd]:Shizuoka Institute of Science and Technology
Organizational Unit Name (eg, section) []:sist.ac.jp
Common Name (eg, your name or your server's hostname) []:test.sample.ac.jp
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
 内容確認
# openssl req -noout -text -in cloud02.sist.ac.jp.csr
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=JP, L=Academe, O=Shizuoka Institute of Science and Technology, OU=sist.ac.jp, CN=test.sample.ac.jp
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:bd:fe:3a:13:dc:fb:b3:8d:bd:67:00:12:bf:b4:

このcsrファイルをダウンロードします。

2.申請用TSVファイルの作成
https://certs.nii.ac.jp/tsv-tool/
にアクセスしてtsvファイルを作成します。


補足(2019/4/1)
しているFQDNのホスト名以外でも利用する場合、(例:office365.sist.ac.jpで登録しておいて、fsecure.sist.ac.jpでも使う場合、dNSNameの部分に例のように書き込む:記入例:dNSName=xxx.example.ac.jp,dNSName=yyy.example.ac.jp)


ここでtsvファイルを作成し、NIIのサイトへアップロードし、証明書を発行します。
NIIからメールで送られてくる。

リンクからダウンロードしファイル名.crtで保存する。

3.証明書のインストール
[mod_sslインストール]
# yum install mod_ssl

# vi /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/httpd/conf/ssl.crt/cloud02.sist.ac.jp.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/cloud02.sist.ac.jp.key
SSLCertificateChainFile  /etc/httpd/conf/ssl.crt/nii-odca3sha2.cer

 
[中間証明書のインストール]
https://repo1.secomtrust.net/sppca/nii/odca3/index.html
より中間証明書を取得します。
/etc/httpd/conf/ssl.crt/nii-odca3sha2.cer  に設置します。
# mkdir  /etc/httpd/conf/ssl.crt
# cp nii-odca3sha2.cer /etc/httpd/conf/ssl.crt/

[サーバ証明書の設置]
# cp cloud02.sist.ac.jp.crt /etc/httpd/conf/ssl.crt/

サーバを再起動
# service httpd restart

[確認]
設定したサーバにhttpsでアクセスします。
https://サーバ名/
サーバ証明書の確認ができました。

参考
https://certs.nii.ac.jp/?action=pages_view_main&active_action=repository_view_main_item_detail&item_id=1&item_no=1&page_id=85&block_id=439

2016年10月6日木曜日

WordCloudの利用

形態素解析した結果を表示するのにWordCloudを使ってみました。

1.ライブラリの設置
今回使ったファイルは
d3.layout.cloud.js
word-cloud.js
d3.v3.min.js
です。app/webroot/jsに配置します。またはURL指定です。
ダウンロードは
https://github.com/shprink/d3js-wordcloud
https://github.com/jasondavies/d3-cloud/tree/master/build
からしました。

2.形態素解析した結果を取り込みます。
今回は View/graph.ctpに書きました。


オリンピックのtweet結果を形態素分析して、WordCloudで表示するとそれなりでした。



2016年9月21日水曜日

RStudio : Bonferroni Test

Bartlettテストで等分散性が棄却されなかったのでBonferroniの多重比較を実施します。

1.データインポート
> score_value=c(11,11.15384615,11.56521739,10.63636364,11.13157895,10.55555556,9.833333333,9.571428571,9.838709677,7.678571429,9.176470588,7.333333333,6.909090909,10.38461538,10.69230769,11.7826087,10.72727273,11.15789474,11,9.666666667,9.214285714,9.612903226,7.607142857,8.352941176,7.333333333,7,11.38461538,11.92307692,11.7826087,10.61363636,10.57894737,10.55555556,9,9.571428571,9.387096774,7.464285714,8.352941176,8.111111111,6.545454545,10.76923077,10.61538462,11.73913043,10.40909091,10.28947368,10,9.166666667,8.285714286,9.096774194,7.035714286,7.823529412,6.555555556,6.545454545)

2.グループ作成
> group=factor(rep(c('awareness', 'decision', 'communication', 'leadership'), c(13, 13, 13, 13)))

3.検定実行
> pairwise.t.test(score_value, group, p.adjust.method='bonferroni',paired=TRUE)

結果

 Pairwise comparisons using paired t tests 

data:  score_value and group 

              awareness communication decision
communication 1.0000    -             -       
decision      1.0000    1.0000        -       
leadership    0.0010    0.0227        0.0054  

P value adjustment method: bonferroni 
 
leadershipが他の要素と有意差があることがわかった。 

2016年9月20日火曜日

RStudio : Boxplot

RStudioでBoxplotを書きます。

1.データのインポート
> awareness_mean1=c(11,11.15384615,11.56521739,10.63636364,11.13157895,10.55555556,9.833333333,9.571428571,9.838709677,7.678571429,9.176470588,7.333333333,6.909090909)
> decision_mean1=c(10.38461538,10.69230769,11.7826087,10.72727273,11.15789474,11,9.666666667,9.214285714,9.612903226,7.607142857,8.352941176,7.333333333,7)
> comunication_mean1=c(11.38461538,11.92307692,11.7826087,10.61363636,10.57894737,10.55555556,9,9.571428571,9.387096774,7.464285714,8.352941176,8.111111111,6.545454545)
> leadership_mean1=c(10.76923077,10.61538462,11.73913043,10.40909091,10.28947368,10,9.166666667,8.285714286,9.096774194,7.035714286,7.823529412,6.555555556,6.545454545)

2.グラフの描画
> boxplot(awareness_mean1,decision_mean1,comunication_mean1,leadership_mean1, main='BoxPlot for mean of each category',names = c('Awareness', 'Decision', 'Communica','Leadership'))


もう一つ例
> awareness_variance1=c(1.976331361,3.146683673,3.167533819,3.244897959,2,2.851211073,0.805555556,2.082644628,1.135802469,1.538461538,1.685950413,1.114265928,0.767485822)
> decision_variance1=c(1.905325444,5.095663265,4.172736733,3.168367347,1.777777778,2.46366782,1.222222222,2.727272727,1.111111111,2.236686391,1.652892562,0.922437673,0.691871456)
> comunication_variance1=c(0.071005917,5.677295918,4.172736733,3.673469388,2.987654321,3.404844291,1.333333333,2.975206612,1.135802469,1.621301775,1.646177686,0.822714681,0.517958412)
> leadership_variance1=c(10.23668639,6.605867347,5.635796046,4.918367347,3.135802469,2.851211073,2.472222222,1.884297521,1.777777778,1.562130178,1.559917355,1.100415512,0.801512287)
> boxplot(awareness_variance1,decision_variance1,comunication_variance1,leadership_variance1, main='BoxPlot for variance of each category',names = c('Awareness', 'Decision', 'Communica','Leadership'))


RStudio : Bartlett Test

RStudioを使って多重比較のための等分散性の検定を実施します。

帰無仮説:全てのカテゴリの母分散が等しい
対立仮説:少なくとも一つの母分散が他の母分散と異なる

1.データを入力
> score=c(11,10.38461538,11.38461538,10.76923077,11.15384615,10.69230769,11.92307692,10.61538462,11.56521739,11.7826087,11.7826087,11.73913043,10.63636364,10.72727273,10.61363636,10.40909091,11.13157895,11.15789474,10.57894737,10.28947368,10.55555556,11,10.55555556,10,9.833333333,9.666666667,9,9.166666667,9.571428571,9.214285714,9.571428571,8.285714286,9.838709677,9.612903226,9.387096774,9.096774194,7.678571429,7.607142857,7.464285714,7.035714286,9.176470588,8.352941176,8.352941176,7.823529412,7.333333333,7.333333333,8.111111111,6.555555556,6.909090909,7,6.545454545,6.545454545)
 
2. ラベルと標本数
> group=factor(rep(c("Awareness", "Decision", "Comunication", "Leadership"), c(13, 13, 13, 13)))
 
3.テスト実施 
> bartlett.test(score ~ group)

 Bartlett test of homogeneity of variances

data:  score by group
Bartlett's K-squared = 5.9198, df = 3, p-value = 0.1156
 
4.結果
p-value = 0.1156なので各群の母分散は等しくないと言えない(等しいとして次の検定を実施)。この場合は Bonferroniを実施

もう1件例を書いておく
> score_v=c(1.976331361,1.905325444,0.071005917,10.23668639,3.146683673,5.095663265,5.677295918,6.605867347,3.167533819,4.172736733,4.172736733,5.635796046,3.244897959,3.168367347,3.673469388,4.918367347,2,1.777777778,2.987654321,3.135802469,2.851211073,2.46366782,3.404844291,2.851211073,0.805555556,1.222222222,1.333333333,2.472222222,2.082644628,2.727272727,2.975206612,1.884297521,1.135802469,1.111111111,1.135802469,1.777777778,1.538461538,2.236686391,1.621301775,1.562130178,1.685950413,1.652892562,1.646177686,1.559917355,1.114265928,0.922437673,0.822714681,1.100415512,0.767485822,0.691871456,0.517958412,0.801512287)
> group=factor(rep(c("Awareness", "Decision", "Comunication", "Leadership"), c(13, 13, 13, 13)))
> bartlett.test(score_v ~ group)

 Bartlett test of homogeneity of variances

data:  score_v by group
Bartlett's K-squared = 40.782, df = 3, p-value = 7.274e-09

今回は有意差ありなので、等分散性は棄却される。この場合は  Steel–Dwass nonparametric testを実施。

参考
http://bio-info.biz/tips/r_bartlett_test.html

2016年7月6日水曜日

形態素解析の方法

YahooデベロッパーネットワークのAPIで日本語形態素解析をやってみました。
http://developer.yahoo.co.jp/webapi/jlp/ma/v1/parse.html

1.アプリケーションIDの準備
https://e.developer.yahoo.co.jp/register
からアプリケーション情報の入力をして、アプリケーションIDを取得します。
取得したIDで試しに動かしてみます。
http://jlp.yahooapis.jp/MAService/V1/parse?appid=取得したID&results=uniq&sentence=解析したい文章
これをブラウザで動かしてみると
のようになります。

2.格納用テーブルの用意
今回は、下記を使います。
・claims(文章が入っているテーブル)
・morphems(解析結果が入るテーブル)
・categories(品詞が入っているテーブル)
morphemsテーブルの構造は図のようになっています。





3.コードの追加
今回はController/ClaimsController.phpのviewアクションを利用してやりました。



public function view2($id = null) {
                if (!$this->Claim->exists($id)) {
                        throw new NotFoundException(__('Invalid claim'));
                }
                $options = array('conditions' => array('Claim.' . $this->Claim->primaryKey => $id));
                $this->set('claim', $this->Claim->find('first', $options));

                $claim = $this->Claim->find('first', $options);
                if($claim['Claim']['chk'] == 0 ){

                $appid = '自分のID';
                $url = "http://jlp.yahooapis.jp/MAService/V1/parse?appid=".$appid."&results=uniq";
                $url .= "&sentence=".urlencode($claim['Claim']['naiyou']);
                $xml  = simplexml_load_file($url);

                APP::import('Model', 'Morphem');
                $this->Morphem = new Morphem;
                APP::import('Model', 'Category');
                $this->Category = new Category;

                foreach ($xml->uniq_result->word_list->word as $cur){

                        $category_id = $this->Category->find('first',
                                array(
                                        'fields' => array('id'),
                                        'conditions' => array('Category.name' => (string)$cur->pos),
                                )
                        );

                        $this->Morphem->create();
                        $data = array(
                                'claim_id' => $id,
                                'word' =>(string)$cur->surface,
                                'category_id' => (int)$category_id['Category']['id'],
                                'count' =>(int)$cur->count,
                        );

                        $this->Morphem->save($data);

                 
                }

                        $data1 = array(
                                'id' => $id,
                                'chk' => 1
                        );
                        $this->Claim->save($data1);
                }
        }

図のように作成され、テーブルに保存します。






2016年7月5日火曜日

MySQLの移行

サーバーを移行するにあたって、MySQLの移行をしました。

バックアップ取得
SSHでログイン後、対象ユーザに一応なっておいてやります。
mysqldump -uuser_name -puser_password -r backup.sql --single-transaction DB_name
プロンプトが返ってくるとbackup.sqlができています。
これを(ローカルにダウンロードしてから)対象サーバにアップロードします。

サーバ間でファイルをFTPで送る場合は、クライアントのインストールが必要でした。
 yum -y install ftp

アップロード後、移行先サーバでデータベースをインポートします(ユーザは発行済で)
mysql -uuser_name -puser_password DB_name < backup.sql

参考
http://qiita.com/rato303/items/2e614f23e5feee150ffc
http://d.hatena.ne.jp/pospome/20130604/1370333526

2016年5月21日土曜日

Office365:(2)ユーザのログイン情報の取得

PowerShellから各ユーザのログイン情報を取得します。

1.PowerShell ISEを管理者で立ち上げ、次のリモート接続設定をします。
 > Set-ExecutionPolicy RemoteSigned
「この設定は、コンピューターで一度だけ構成すれば、接続ごとに行う必要はありません。」とのことです。

2.Exchange Online に接続します。
> $UserCredential = Get-Credential
管理者のIDとパスを入力

> $Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://outlook.office365.com/powershell-liveid/ -Credential $UserCredential -Authentication Basic -AllowRedirection
(1行で入れる)

> Import-PSSession $Session

3.ログイン情報確認
> Get-MailboxStatistics -Identity mizuno@sample.ac.jp | FL LastLogonTime

LastLogonTime : 2016/05/21 6:00:36
と出力されます。


Remove-PSSession $Session
で終了です。

参考
https://technet.microsoft.com/ja-jp/library/jj984289(v=exchg.160).aspx

2016年5月2日月曜日

Cakephp : リレーションテーブルの表示並び替え

findする時に、orderで並び変えるのは簡単ですが、viewなどでリレーションテーブルの内容を表示する時に並び替える方法です。

例えば subjectsテーブルの外部キーを持つsimilaritiesテーブルの情報をsubjects/viewで表示する場合

のようになりますが、この前に

を入れておくと、valueの値で降順で表示できます。
参考
http://net-labo.net/?p=155


2016年4月20日水曜日

消防署データの内容

消防署データが必要でダウンロードして得られたデータを検証しました。

ダウンロード
http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-P17.html
ここから静岡県をダウンロードしました。

ファイル名:P17-12_22.xml
1.タグ[gml : Point id = pt_fsnXXX]

これは消防署の場所を表していて緯度、経度を持つ。このIDで検索すると
タグ[ksj : FireStation gml : id=fs_XXX]の中に
となり、消防署名前、市町村コード、種別、住所が得られる。
2.次に消防署管轄の情報を見てみると
タグ[gml : Surface gml : id =sf_fsnYYYY]
このsf_fsnYYYYの少し上にcvZZがあって、これが管轄の緯度経度を表している。つまりIDがある直上が管轄の緯度経度。




このsf_fsnYYYYで検索すると
となる。
この1と2を紐付けるのは「消防署名」しかないのかな?日本語でのマッチングはいろいろ問題あるのでやりたくありません。いい方法が欲しい。

2016年4月19日火曜日

Office365 : PowerShell環境設定とパスワード変更

Windows7にPowerShellの環境を整え、Office365ユーザのパスワードを変更します。

1.PoserShell環境設定
Microsoft Online Services サインイン アシスタントの導入
https://www.microsoft.com/ja-jp/download/details.aspx?id=41950
からダウンロードし、インストールします。
 
Windows PowerShell 用 Windows Azure Active Directory モジュールのインストール
http://social.technet.microsoft.com/wiki/contents/articles/28552.microsoft-azure-active-directory-powershell-module-version-release-history.aspx
から今回はVersion 8362.1をダウンロード、インストールします。

Windows Management Framework 3.0 (Windows7で必要ならば)
https://www.microsoft.com/en-us/download/details.aspx?id=34595
からダウンロードし、インストールします。

2.PowerShellでの操作
すべてのプログラム->アクセサリ->Windows PowerShell->Windows PowerShell ISEを管理者で起動
Import-Module  MSOnline
Connect-MsolService
Office365のユーザ名とパスワードを入力します(管理者のID)。 
パスワードを変更します。
Set-MsolUserPassword -ForceChangePassword $False -UserPrincipalName username@domein.jp -NewPassword "password"

上記はパスワードを指定して、ログイン時にパスワード変更が入らないコマンドです。これでPowerShellからパスワード変更ができました。

参考
http://news.mynavi.jp/series/365/009/
Office 365 PowerShell ガイド

2016年4月18日月曜日

Cakephp : 類似度関数(similar_text関数利用)

PHPの関数 : similar_text関数を用いて、2つのテキストの類似度を算出しました。
今回は課題テーブルsubjectsのviewで類似度を算出し、similaritiesテーブルに格納しました。


        public function view($id = null) {
                if (!$this->Subject->exists($id)) {
                        throw new NotFoundException(__('Invalid subject'));
                }
                $options = array('conditions' => array('Subject.' . $this->Subject->primaryKey => $id));
                $this->set('subject', $this->Subject->find('first', $options));

                $subject = $this->Subject->find('first', $options);

                App::import('Model', 'Similarity');
                $this->Similarity = new Similarity;

                for($i = 0; $i < count($subject['Report']) - 1 ; $i++){
                        for($j = $i + 1; $j < count($subject['Report']);$j++){

                                similar_text($subject['Report'][$i]['answer'], $subject['Report'][$j]['answer'], $diff);
                                $data = array('Similarity' =>
                                                array('fromid' => $subject['Report'][$i]['id'],
                                                        'toid' => $subject['Report'][$j]['id'],
                                                        'value' => $diff
                                                )
                                        );
                                $this->Similarity->create();
                                $fields = array('fromid', 'toid', 'value');
                                $this->Similarity->save($data, false, $fields);
                        }

                }
        }


参考
http://php.net/manual/ja/function.similar-text.php
http://nitou.dip.jp/blog/archives/4238

2016年4月14日木曜日

Cakephp:動画を表示

Cakephpにビデオタグを実装して、実際に画面で動画を見る方法です。


4行加えるだけなので実装は簡単。 載せるページのview.ctpに以下のコードを加えます。

今回はContentテーブルにpathを格納しているので、アドレスの呼び出しは$content['Content']['path']になっています。





pathは「 /movie/動画ファイル名.mp4 」でテーブルに格納してあります。





contents画面からviewボタンで詳細ページに移動すると、画像のように動画が表示されます。

2016年3月29日火曜日

Android : FireTVのセットアップ

デジタルサイネージ用にFireTVを購入したのでそのセットアップです。鈴木歩検証。

1.FireTVの設定
FireTVを立ち上げて、ネットワークの設定Amazonアカウントの登録をします。
セットアップの動画が始まります。 その後、動画のプレミア設定してやっと終了です。

2.FireTV用のSDKをインストール
SDKマネージャを開いて、FireTV用のURLを登録
SDK UpdateSitesを開き、アマゾンのURLを追加
https://s3.amazonaws.com/android-sdk-manager/redist/addon.xml
SDKプラットフォームズを開き、Show Package Detalsにチェックをいれる。
android4.2.2の中に、Amazon Fire TV SDKがあるため、チェックをいれてインストールする。

3.FireTVへのアプリ転送
FireTVのリモコンで設定->システム->開発者オプション->ADBデバッグ->オンにする。
USBで接続しAndroidStudioからFireTVに接続してみる。
アプリを転送。うまく表示できました。

参考サイト
https://developer.amazon.com/public/solutions/devices/fire-tv/docs/setting-up-your-development-environment
http://tabkul.com/?p=14666
http://www.aftvnews.com/how-to-sideload-apps-to-your-amazon-fire-tv-using-a-mac-with-os-x/

Office Mix : インストールと使いかた

Office Mixを使うためにまとめておきました。
Office MixはWindows版のOffice2013以降にしかないので、それでインストールします。
https://mix.office.com/ja-jp/Home
にアクセスしサインインします(今回はsist.ac.jpのOffice365アカウントを利用しました)
同意して、インストールします。
インストールが終了すると、次の画面が出てきます。
4〜5月の予定表を作って見ました。

今回は単に2枚のスライドを10秒間隔で表示するだけなので、「ビデオにエクスポート」(1枚表示秒数指定)して完成です。mp4でエクスポートされます。今回は一番上のフルHD(1080p)で合計20秒の動画を作りました。ファイルサイズは2.3MB程度。
 今回は静止画を動画にしただけなので、Mixでなくてもいいですが、今後動きをつけた動画を作っていき、デジタルサイネージを運用したいと思います。
 まずこの動画をAndroidで動くか検証です。

2016年3月28日月曜日

RStudio (3): RMySQLのデータからクラスタ化

RMySQLでDBからデータを取得し、そのデータからクラスタ化しました。
距離関数を作成するときに試行錯誤したのですが、DBから得られたデータでそのまま行けました。


dbconnector <- dbConnect(dbDriver("MySQL"),dbname="xxxxxxxx",user="yyyyyyyyy", password="zzzzzzzzz")
zones.table <- dbGetQuery(dbconnector, "SELECT zone_nondpc, zone_nontrans, zone_nonhospital , zone_hospital FROM zones where prefecture_id = 22")
zones.c <- cbind(c(zones.table$zone_nondpc), c(zones.table$zone_nontrans), c(zones.table$zone_nonhospital), c(zones.table$zone_hospital))
zones.d <- dist(zones.c)
print(zones.d)
zones.h <- hclust(zones.d)
plot(zones.h)




グラフにタイトルを入れる場合は

plot(zones.h, main="Cluster in a secondary medical care zone", xlab ="Zone ID", ylab="Distance")
のようになります。

クラスタ作成時に、領域でクラスタを表示する場合は、次のようにやります。最初の部分は同じ


cluster = hclust(dist(zones.d), method="ward")
rect.hclust(cluster, k=3, border="red")

2016年3月25日金曜日

RStudio (2): RMySQLの設定

RStudioをインストールし、ログインできるようになったので次はRMySQLのインストールを行った。
資料を見るとRを起動し、
> install.packages("DBI")
> install.packages("RMySQL")
とすればいいと書いてあるが、どうしてもインストールできない。下記のようなエラーが出てしまった。
警告:  リポジトリー https://cloud.r-project.org/src/contrib に対する索引にアクセスできません 
 警告メッセージ:
package ‘DBI’ is not available (for R version 3.0.2)

といいうことで、通常のコマンドラインから(Rではない)から次を発行
# wget http://cran.r-project.org/src/contrib/DBI_0.3.1.tar.gz
# wget http://cran.r-project.org/src/contrib/RMySQL_0.10.8.tar.gz
# R CMD INSTALL DBI_0.3.1.tar.gz
# yum install mysql-devel  (これが入ってないとRMySQLでエラー)
R CMD INSTALL RMySQL_0.10.8.tar.gz
これでインストール完了。RStudioにログインし、コマンドを発行してみる。
> library(DBI)
> library(RMySQL)

> dbconnector <- dbConnect(dbDriver("MySQL"),dbname="naisyo",user="naisyo", password="oshieteagenai")
> zones.table <- dbGetQuery(dbconnector, "select * from zones")
<- dbconnect="" dbdriver="" dbname="naisyo" password="oshieteagenai" span="" user="naisyo" ysql=""><- dbconnector="" dbgetquery="" from="" select="" span="" zones="">

これでRStudio上でDBからの情報を扱えるようになった。これで解析を進めてみる。

参考
http://www.geovanie.me/installing-r-and-rmysql-in-centos-6-6/
http://rindai87.hatenablog.jp/entry/20110406/1302101132

2016年3月23日水曜日

RStudio : RStudioのインストール

rJavaに挫折したので、RStudioをインストールし、rを使うことにしました。

RのCentOSへのインストール
http://mizunolab.sist.ac.jp/2015/12/centosr.html
を参照

RStudioのインストール(今回はCentOS6.5)
# wget http://download2.rstudio.org/rstudio-server-rhel-0.99.441-x86_64.rpm
# yum -y install --nogpgcheck rstudio-server-rhel-0.99.441-x86_64.rpm
# rstudio-server verify-installation (インストールの確認)

[root@ip-10-0-0-213 ~]# rstudio-server verify-installation
rstudio-server start/running, process 2173

 これでインストールができたがデフォルトポートが8787のため、学内からアクセスできない。ポートを443を使うように変更する。
# vi /etc/rstudio/rserver.conf
 # Server Configuration File
www-port=443

この後
# rstudio-server verify-installation
とすると反映される(と思う)。
ダメなら
# rstudio-server restart

これで http://ホスト名:443 でアクセスするとログイン画面が出てくる
 Linuxのユーザでログインすると、Rの画面が出てくる

次はRStudioとMySQLの連携をして、データベースの内容をそのままRで使えるようにする。

参考
http://qiita.com/jcs502ulf/items/2f6b2ea3e9273f052365
http://memorandum2015.sakura.ne.jp/docs/server/configuration.html

2016年3月20日日曜日

rJava : プログラミング(13) クラスタ分析

rjavaで二次医療圏のクラスタ化をしてみました。
流れとしては
1. DBに接続しデータを持ってくる(344医療圏×4項目)
2. R配列作成
3. Rで距離行列作成
4. クラスタを計算
5. 樹形図で表示

結果は表示できましたが、件数が多くなんだかわからない状態に。表示を工夫する必要があります。ひとまず出来たようでよかったです。





[Medical2_Cluster01.java]

import org.rosuda.JRI.REXP;
import org.rosuda.JRI.Rengine;
import java.sql.*;
import java.util.Arrays;

public class Medical2_Cluster01 {

        public static void main(String[] args)
        {
                MySQL mysql = new MySQL();
                Rengine re = new Rengine( new String[]{"--no-save"}, false, null );
                ResultSet rs = mysql.selectZones();

                double values [][] = new double[344][4];
                int index = 0;
                try {
                        while(rs.next()){
                                values[index][0] = rs.getDouble("zone_nontrans")/rs.getDouble("zone_eventnum")*100;
                                values[index][1] = rs.getDouble("zone_dpc")/rs.getDouble("zone_eventnum")*100;
                                values[index][2] = rs.getDouble("zone_event4")/rs.getDouble("zone_totalnum")*100;
                                values[index][3] = rs.getDouble("zone_eventnum")/rs.getDouble("zone_population")*100;
                                System.out.println("Rate for Non-Transition("+rs.getString("id")+")"+values[index][0]);
                                System.out.println("Rate for DPC-Transition("+rs.getString("id")+")"+values[index][1]);
                                System.out.println("Rate for Contact more than 4 times("+rs.getString("id")+")"+values[index][2]);
                                System.out.println("Rate for Occurance of events("+rs.getString("id")+")"+values[index][3]);
                                System.out.println("");
                                index++;
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                }

                StringBuffer buf1 = new StringBuffer();
                buf1.append("c_values<-c(");
                for(int i = 0; i < values.length; i++){
                        if(i == values.length-1)
                                buf1.append(values[i][0]+","+values[i][1]+","+values[i][2]+","+values[i][3]+")");
                        else
                                buf1.append(values[i][0]+","+values[i][1]+","+values[i][2]+","+values[i][3]+",");
                }
                String c_values = buf1.toString();
                re.eval(c_values);
                re.eval("colnames(c_values)<-c('non-trans','doc','4times,'event)");
                re.eval("c_values.d<-dist(c_values)");
                re.eval("c_values.h<-hclust(c_values.d)");
                REXP x1 = re.eval("round(c_values.d)");
                System.out.println(x1);

                re.eval("png('Medical2_Cluster01.png', 640, 480)");
                re.eval("plot(c_values.h)");
                re.eval("dev.off()");

                re.end();
        }
}


参考
http://midoriit.com/2014/05/r%E3%81%AB%E3%82%88%E3%82%8B%E7%B5%B1%E8%A8%88%E8%A7%A3%E6%9E%901.html
https://www1.doshisha.ac.jp/~mjin/R/28/28.html

2016年3月8日火曜日

Java : exp4jライブラリ利用

フォームから数式を打ち込んで、それの値を出したかったのですが、exp4jというライブラリがあったので使ってみました。

http://projects.congrace.de/exp4j/
から-> Download -> Binary Jar をダウンロードして、Eclipse で外部jarファイルの登録をします。
そのページにあるexample1を試してみると、うまくいったので、ちょっと複雑な式でやってみました。


package math;

import net.objecthunter.exp4j.Expression;
import net.objecthunter.exp4j.ExpressionBuilder;

public class Math_main {

 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Expression e = new ExpressionBuilder("1 / 2 * (x1 -x2^2)^2 + 1 / 4 * (x2 - 2)^4")
          .variables("x1", "x2")
          .build()
          .setVariable("x1", 1.4693877551020404)
          .setVariable("x2", 1.3061224489795917);
  double result = e.evaluate();
  System.out.println(result);
 }

}


次は、標準入力(キーボード)やフォームから入力した式の値が出てくるかチェックします。式を入力した時に数式が表示されるようなスクリプトあったらフォームでの入力が楽なので、探してみたいです。

プロジェクト全体

2016年3月4日金曜日

ネットワーク:コメンドメモ

# show processes cpu
CPU利用統計




CPU utilization for five seconds: 23%/0%; one minute: 13%; five minutes: 13%
今回この部分が99%だった。

#show logging
Mar  4 17:19:43: %SEC-6-IPACCESSLOGP: list 144 denied udp 133.SS.XXX.2(53) -> 133.SS.YYY.48(62895), 1 packet

%SEC-6-IPACCESSLOGP は IPv4 TCP (6) and UDP (17)で何か起きたことを意味する





Mar  4 16:39:06: %SW_MATM-4-MACFLAP_NOTIF: Host ABCD.EFGH.e5ac in vlan 120 is flapping between port Gi1/0/9 and port Gi1/0/1
ネットワークループが起きている可能性


参考
http://www.cisco.com/cisco/web/support/JP/docs/SW/LANSWT-Access/CAT3750-ESWT/SMG/001/9777_01_2.html?bid=0900e4b182529d82
http://www.cisco.com/c/en/us/about/security-center/access-control-list-logging.html
http://www.cisco.com/cisco/web/support/JP/100/1007/1007988_showproc_cpu-j.html

2016年2月27日土曜日

Android : 端末固有のIDを取得

端末から上がってくる情報を自動で仕分けするのに端末情報が必要でしたので、試してみました。候補としては
デバイスID(IMEI/MEID/ESN): SIMないとダメ
シリアル番号:端末固有の製造番号。取得できる
Android_ID:初期化時に与えられる番号
ということでシリアル番号かAndroid_IDでやってみます。
 シリアル番号とAndroid_idは取得できたので、当面これをキーにして端末情報を整理していきます。

 ソースコード

参考
http://iridge.jp/blog/201404/4836/
https://thinkit.co.jp/story/2012/03/09/3467?page=0%2C2
http://d.hatena.ne.jp/takigawa401/20110512/1305209808

2016年2月17日水曜日

rJava : プログラミング(12) T-Test

対象者の評価の前後の期間をグループとし、http://mizunolab.sist.ac.jp/2016/01/rjava-10-f-test.htmlで等分散性が得られたとし、2つのグループの違いをt.testで確かめる。

$ vi JRITest15.java
$ javac JRITest15.java
$ java -Djava.library.path=/usr/lib64/R/library/rJava/jri/ JRITest15

[VECTOR ([REAL* (-3.842989125314249)], [REAL* (42.0)], [REAL* (4.0495738809968483E-4)], [REAL* (-6.5858030454480865, -2.0505605909155538)], [REAL* (40.22727272727273, 44.54545454545455)], [REAL* (0.0)], [STRING "two.sided"], [STRING " Two Sample t-test"], [STRING "c_group1 and c_group2"])]

この場合, p-value = 4.0495738809968483E-4 となり帰無仮説が棄却。2つの期間グループに差があることがわかる。

今回利用するSQL文
SELECT * FROM operations WHERE category = 0 and operator =6


public class JRITest15 {

        public static void main(String[] args)
        {
                MySQL mysql = new MySQL();
                Rengine re = new Rengine( new String[]{"--no-save"}, false, null );
                ResultSet rs = mysql.selectOperations();

                int N = 44;
                double group1 [] = new double[N/2];
                double group2 [] = new double[N/2];//**注意i:奇数の時は+1**

                int index = 0;
                try {
                        while(rs.next()){
                                if(index < (int)(N/2)){
                                        group1[index] = rs.getDouble("value");
                                }else if(index >= (int)(N/2)){
                                        group2[index-(int)(N/2)] = rs.getDouble("value");
                                }
                                index ++;
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                }

                System.out.println(Arrays.toString(group1));
                System.out.println(Arrays.toString(group2));

                StringBuffer buf1 = new StringBuffer();
                buf1.append("c_group1<-c(");
                for(int i = 0; i < group1.length; i++){
                        if(i == group1.length-1)
                                buf1.append(group1[i]+")");
                        else
                                buf1.append(group1[i]+",");
                }
                String c_group1 = buf1.toString();
                re.eval(c_group1);

                REXP x1 = re.eval("summary(c_group1)");
                System.out.println(x1);
                double [] ary1 = x1.asDoubleArray();
                for (int i = 0; i < ary1.length; i++) {
                        System.out.println(ary1[i]);
                }

                StringBuffer buf2 = new StringBuffer();
                buf2.append("c_group2<-c(");
                for(int i = 0; i < group2.length; i++){
                        if(i == group2.length-1)
                                buf2.append(group2[i]+")");
                        else
                                buf2.append(group2[i]+",");
                }
                String c_group2 = buf2.toString();
                re.eval(c_group2);

                REXP x2 = re.eval("summary(c_group2)");
                System.out.println(x2);
                double [] ary2 = x2.asDoubleArray();
                for (int i = 0; i < ary2.length; i++) {
                        System.out.println(ary2[i]);
                }

                REXP x3 = re.eval("t.test(c_group1, c_group2, var.equal=T)");
                System.out.println(x3);
                re.end();
        }
}


p

2016年2月16日火曜日

Linux : SSHのパスワード設定許可

通常は証明書認証しているのですが、作業上パスワード認証の時が便利なので、その時のメモです。

# vi /etc/ssh/sshd_config




# service sshd restart

これでホスト側から
$ ssh -l ユーザ名 ホスト名
でログイン出来ます。