ページ

2011年12月5日月曜日

Vimにvim-r-pluginをインストール

ubuntuで、VIMからRを使えるようにするため、vim-r-pluginをインストールする

まず必要なライブラリ等々をインストール
sudo apt-get install libevent-1.4-2 libevent-dev libncurses5-dev

tmux(>=1.3)も必要なのだが、ubuntuのリポジトリには1.1しかないので、ソースからインストール
tmuxのサイトから最新版(1.5)をダウンロード
適当なディレクトリに展開してインストール
$ .configure
$ make
$ sudo make install

screen.vim pluginもインストール
Screen (vim + gnu screen/tmux)のページからscreen.vbaの最新版をダウンロード

vimでscreen.vbaを開いて
$ vim screen.vba

インストール
:so %

Vim-R-plugin : Plugin to work with Rからvim-r-plugin-****.zipをダウンロード。
今日現在の最新版は、vim-r-plugin-111114.zip

ホームディレクトリ直下の.vim以下に展開
$ unzip vim-r-plugin-111114.zip -d ~/.vim

vimを起動してヘルプタグを追加
$ vim
:helptags ~/.vim/doc

.vimrcに以下を書き込にホームディレクトリに保存
set nocompatible
syntax enable
filetype plugin on
filetype indent on

以上で完了

使うにはスクリプトファイルをvimで読み込み\rfとタイプするとRが起動する
$ vim test.R
\rf



使い方を勉強しよう...

2011年11月22日火曜日

QGISアップデート 1.7.1→1.7.2

9月28日に記事を書いたばかりのような気もしますが、QGISがアップデートされました。

相変わらず、QGIS→Help→About QGIS→What's Newは空ですが、主な変更点は下記に掲載されています。

QGIS Version 1.7.2 'Wroclaw' is released
http://www.qgis.org/en/about-qgis/qgis-releases/135-qgis-1-7-2-releasehtml.html

すぐに気づいたことでは、ラスタ(GdalTool)のインターフェースが変更になり、メニューごとにまとめられています。

2011年11月14日月曜日

ターミナルで英辞郎 on the WEBをつかう

ALCの英辞郎 on the WEBは非常に使いやすいサービスですが、個人的に周囲の広告が煩わしい...

できれば、検索結果だけを表示したいと思っていました。
まあブラウザの設定で画像を非表示にすれば良いのですが、毎回ブラウザの設定を変更するのも面倒。

ということで、テキストブラウザのw3mを使って、ターミナルで使える簡易インターネット辞書(?)を作ってみました。

まずは適当なファイルに、以下を書きこんで名前をつけて(例えば ENSEARCH.sh)保存。

ENSEARCH(){
w3m http://eow.alc.co.jp/${2}/utf-8/?pg=${1} | lv +/*データの転載は禁じられています。
}


その後、ファイルを読み込む。
source ./ENSEARCH.sh


あとは端末から以下のように、調べたい単語名を入力するだけ。
ENSEARCH <ページ番号> <調べる単語>


例えば、testを調べる場合には
ENSEARCH 1 test


もしtestの2ページ目を調べる場合には、以下のようにページ番号の部分を変える。
ENSEARCH 2 test


熟語の場合には、単語と単語をプラス(+)でつなぐ。
ENSEARCH 1 as+soon+as


もちろん日本語も使える。

起動直後から毎回使えるようにするには、.bashrcなんかに以下を書きこんでおく。
source ./ENSEARCH.sh


これから工夫すると、調べた単語の単語帳なんかも作ることが出来る(けど今回はいいかな...)

2011年10月15日土曜日

臭い

台北に到着早々、先に講演会に参加していたメンバーと合流

その足で、市林夜市(シーリンのナイトマーケット)へ!!

目的はもちろんお決まりのコース↓

台湾の名物(珍味?)の臭豆腐!!

店の前で並んでいる時からかぐわしい香りが...あたり一面に...

一年ぶりの強烈な臭さ

ここのじゃないとこの香りには出会えません

In Taiwan

渓畔林研究会に参加するため、今日から台湾へ!!

見えづらいけど台北駅の様子!!


夕方空港について、台北市のホテルにチェックイン。

研究会自体は明日からなので、今から夜市でもさまよってきます。

2011年10月14日金曜日

地球環境研究推進費 S-5 シンポジウム

今日は地球環境研究推進費S-5の一般公開シンポジウム『実感!地球温暖化〜温暖化予測の「翻訳」研究は何を明らかにしたか〜』に参加してきた。

個人的には、江守さんの話(温暖化の「確率的予測」はどこまで可能か)が非常に面白かった。
現在気候値と将来気候値の再現性に関する研究で、完全には理解出来ていないけどチャレンジングな研究で、非常に参考になった。

あとは、高藪縁さんの話(暑いだけじゃない地球温暖化 ―世界の気候モデルから読む日本の将来―)は、自分たち(S-8)のプロジェクト研究でもすぐに使えそうでこれまた参考になった。
CMIP3で公開されている複数のGCMについて、再現性を比較・検討して将来の気候を解釈するというもの。
特に、全球での再現性が良いGCMは、からなずしも東アジア地域でも再現性が良いとは限らないというところと、各気候値(例、やませ、夏雨など)ごとに再現性のよいGCMが異なるということが参考になった。

さて、今日の発表を参考に、再来週の木曜日の発表資料を作らねば....(汗)


2011年10月10日月曜日

リジェクト

7月末に投稿していた論文がリジェクトで返ってきた...

非常に長いコメントをもらえたのはありがたい。

共著者と対応を考えるか...

2011年10月6日木曜日

国土地理院の10mDEMと50mDEM

いまさらという感じですが、DEMについてのお話です。


最近、各所で国土地理院の10mDEMが使われるようになってきました。
この解像度のDEMが全国で整備されているのは非常にありがたいことです。

自分の調査でも使えないかと思って、10mDEMをダウンロードしてきたのですが、ふと思い立って10mと50mDEMを比べてみることにしました。


こちらは543912の10mDEM

こちらは同じ場所の50mDEM

どちらも煩雑なので、道路は除いています。
広域で見ると、大きな違いはありません。
10mのほうが解像度が細かい分、よく見えます。


さて、こちらは上の画像を拡大した私の調査地の様子。
標高の色は見やすく変えています。どちらも対応する標高を同じ色で示している(つもりです)。

まずは10mDEM。
2万5千分1地形図の等高線をもとに作成されているはずですが、基盤地図情報の等高線と比較すると、なにやらおかしな模様が浮かんでいます。
これは明らかに空間補間の模様ですよね〜!?

こちらは50mDEM
基盤地図情報の等高線と比較しても、それなりに(まともに)見えます。


10mと50mのDEMはどちらも2万5千分1地形図をもとに作られています。
以下は10mと50mDEMの概要。

10mDEMの概要(基盤地図情報HPより)

3-5 標高点のうち「数値標高モデル」はどのように整備しているものですか?
イ)2万5千分1地形図の等高線データ等を基に作成したもの
2万5千分1地形図のデータを基に、地表での経度差、緯度差0.4秒(約10m)間隔のメッシュの中心点の標高をJPGIS形式で作成したもので、北方地域を除く全国について整備しています

3-6 数値標高モデルの水平位置の精度と高さの精度を教えてください。
3) 10mメッシュ(標高)は、地形図、火山基本図の等高線データを基に、指定する位置の標高を算出するため、水平位置については精度を考慮する必要がありません。
4) 10mメッシュ(標高)の高さの精度は、基となる等高線データの精度に依存します。
イ)2万5千分1地形図の等高線データ等を基に作成したもの
基本図測量作業規程により作成された2万5千分1地形図の等高線(高さ精度は5m以内)を用いて作成していますので、高さの精度は、標高点の標準偏差で5m以内となっています。なお、標高値の記載は0.1m単位となっていますが、1m単位で求めたものが有効値であり、小数点以下については参考値として格納しています。


50mDEMの概要(地図センターHPより)

数値地図50mメッシュ(標高)は、2万5千分1地形図の等高線から計測・計算し求めた数値標高モデル(DEM)です。収録されているデータは標高のみで、道路や行政界といったその他の地図要素は含まれません。
2次メッシュ(2万5千分1地形図の区画)を経度方向及び緯度方向に200等分して得られる格子(地図上約2mm四方)の中心点の標高値を記録しています。標高点の間隔は南北方向で1.5秒、東西方向で2.25秒となり、実距離で約50mとなります。
標高値は5桁の数値で記録(標高1000mであれば「10000」)されていますが、1桁目(0.1mの位)は0で切り捨てられており、最小単位は「m」となります。また、海部には「-9999」というコードが振られています。



10mDEMの概要にはどこにも空間補間とは書かれていませんが...
さて、あの模様は何なのでしょうか?
もしかして、等高線以外に標高点のデータも入れているのでしょうか?


標高の精度が5mということなので、今回の10mDEMの模様は誤差の範囲内なのでしょうが...

2011年10月5日水曜日

パスワードの安全性

Yahooニュース(R25web)にあなたのパスワードが破られる確率はという記事があった。
パスワードの安全性について、このくらい丁寧に解説してもらえると、エンドユーザーとしては非常にありがたい。

興味深いのはパスワードを更新する機会とパスワードの安全性についての項目。
某国立大学の情報処理センターのパスワードの有効期限が半年な理由が理解できた。

もちろん、パスワード解析の精度が向上すれば危険性はかなり高まるのだろうが。
記事にもあるように、パスワードの桁数を増やす(8桁以上)ことが、手っ取り早いセキュリティ向上策なのだろう。

もっとも、ここに書かれていることは、あくまでも一人のユーザーの危険性。
セキュリティ管理者からすれば、状況はかなり変わってくる。

システムが巨大化すれば、ユーザーの数も増えてくる(どちらが先かは置いておいて)。
こうなると、システムのユーザーの一人もパスワードが破られない確率というのはかなり低くなるのだろう。

一人でもパスワードを破られてしまえば、そのシステム事態の信頼性に関わってくるので、セキュリティ管理者が神経質になるのは仕方のないことなのだろう。

2011年9月30日金曜日

ユネスコエコパーク申請 宮崎県綾町

昨日のニュースでも取り上げられていましたが、文部科学省が宮崎県の綾をユネスコエコパークに推薦することが決まりましたね。

日本MAB計画委員会
綾ユネスコエコパーク(Biosphere Reserve)推薦地の概要

Yahooニュース
ユネスコエコパークに宮崎県綾町の照葉樹林地域を推薦

日本では志賀高原、白山、大台ケ原大嶺山地、屋久島の四カ所が1980年に登録されて以来の新規候補地です。
綾町以外にもユネスコエコパークの新規登録に向けた動きが進んでいるので、国内のユネスコエコパークプロジェクトがさらに活性化することを期待しましょう!!




2011年9月28日水曜日

QGISアップデート 1.7.0 → 1.7.1

今日、パッケージ情報を更新したら、QGISが1.7.0から1.7.1に(マイナーとは呼ばないのかな?)アップデートされてました。



[ヘルプ]→[About]の[What's New]がカラになっているので、何が修正されたかすぐにはわかりませんが(HPをみればわかるのかもしれませんが)、最近、某所でコメントしたばかりのバグ(?)も修正されています。




もう少し全体的な安定性と操作性が向上してくれると良いのですが...

2011年9月27日火曜日

Textcheck

前回マイナーで返ってきた原稿を修正後、英文校閲(Textcheck)に出していたのだが、昨日返ってきた。

単語数4891で、US$448.00!!

前回の原稿で依頼したエディテージのプレミアムよりも、こっち(Textcheck)のほうが安いんですね〜
内容はというと...今回は原稿が原稿なのでよくわかりません。
というのも、自分の英語が共著者によってかなり改定されているので、前回のエディテージによる校閲とは単純には比べられないから...

前回教えてもらった、Uni-editも気になるし...
さて次回はどれを利用しよう

2011年9月13日火曜日

トリプルセブン

今日の朝、出勤前にコンビニで朝御飯とお昼の弁当を購入したら、777だった。

ちょっと嬉しい...!!

2011年9月8日木曜日

ひとくぎり

今日、この夏(7月末から8月はこれにかかりきりだった)の仕事にひとくぎり付けることができました。

何をしていたかというと、The Earth System Grid (ESG) で公開されている第3次結合モデル比較実験(CMIP3)の気候データを整備して、自分たちのプロジェクトで使えるようにするというもの。

 ひとくちに言うと、データ量が膨大なので、Fortranを使ってNetCDFを読み込んで、気候値の差比を計算して、空間補間をして、現在気候値にオーバーレーして、GMTでマップを出力して... というもの。

おかげさまで、Fortranをひと通り習得することができました!!

というか、日々かなりのことを習得できたので、ブログに公開するひまがなかった...(反省)

特にGMTを使いこなせるようになったのは大きいかも
なんてったって、GRASS、QGIS(その他GISソフト)とかRとかに頼らずにかなり凝った地図を作ることができるからね〜


Numerical Recipieを使えるようになったのも大きいいね〜


学生時代とは全く異なる作業をしているけど、PC技術に関して今年の夏は収穫が大きかったな〜



技術に幅ができて、研究にも幅ができてきたような気がする(妄想!?、いやそれとも妄想!?)

2011年9月5日月曜日

コメント

某英文誌に投稿していた論文がマイナーで返ってきた。
6月15日に投稿したので、2ヶ月ちょっとで返ってきた。


先日の記事でも書いたけど、給料をもらっている仕事なので...


  受理されないと...


     いろいろと...


         困る...(いや本当に...)



まあしょっぼい論文を書いている自分が悪いのだが、最近つくづく今のプロジェクトの研究分野では、自分は研究センスがないように思える...




審査を受け付けてくれたエディタとレビューアに感謝しつつ、早く修正&投稿しよう

2011年8月27日土曜日

大山沢に行ってきた

モニタリングサイト1000の定期調査(毎月のリター回収)のために大山沢に行ってきた!! 昨日はかなりの大雨だったので、大山沢林道のが土砂崩れで塞がれていないか気になっていたのだけど、なんとか調査地までたどり着くことができた。

2011年8月27日秩父大山沢 

大山沢試験地は一応沢沿いの渓畔林ということになっているけど、いつもは涸れ沢で水は流れていない。 だけど今日はさすがに昨日の大雨の影響で、一部で水が流れていた!!

2011年8月27日秩父大山沢

さて、この前シカの食害論文を投稿したのだけど、その論文ではオオバアサガラが結構食われていることを書いた。 こちらがその状況!!

2011年8月27日秩父大山沢

萌芽の枝葉だけじゃなく、樹皮剥ぎもちらほら見受けられる。
もちろん林床にも稚・実生なんてない。

オオバアサガラは丹沢ではシカの不嗜好植物として知られているけど....

毒がなければやっぱり何でも食べるんだろうな〜!!

2011年7月15日金曜日

Rで同じ名前の関数を実行

Rのいくつかのパッケージでは同じ名前の関数がある。

たとえば、gamパッケージとmgcvパッケージのgam()や、pROCパッケージとPresenceAbsenceパッケージのauc()など

これらの関数は基本的に後から読みだしたパッケージの関数名が上書きされるので、その前に読みだしたパッケージの関数を使いたいと思ってもそのままでは使えない。

この問題は、パッケージ名を指定して関数を実行することで回避できる。

パッケージ名::関数名

例えば
mgcv::gam()

英文校閲

ここ2,3日、共同研究者にコメントをお願いしていた原稿の改訂作業をしていた。

しかし、肝心の方からはコメントを頂けず....
が、投稿せよとのお言葉は頂けたので、本文の細々とした改訂やらデータの再確認やら図表の修正をして、今日ようやく英文校閲に出すことができた。
 
 業者はこれまでと同じくエディテージ
 プレミアムコースで、 \55,087(4029単語)!!

あぁ〜また財布からお金が飛んでいく...

2011年7月11日月曜日

ogr2ogrの使い方

ogr2ogrの使い方の防備録

ogr2ogrを使うとベクター(シェープ)ファイルの投影変換を行うことができる。
こちらを参考に

ogr2ogr -t_srs EPSG:[変換後のepsgコード] 変換後のファイル -s_srs EPSG:[元ファイルのepsgコード] 元ファイル

TokyoからWGS84への変換例
ogr2ogr -t_srs EPSG:4326 NewFile_wgs84.shp -s_srs EPSG:4301 original_tokyo.shp

2011年7月8日金曜日

投稿論文のその後

6月15日に投稿したプロジェクトの論文

その後長い間エディターが持っていたんだけど、今日、statusを見てみたら、6月30日にUnder Reviewになってた。
とりあえずエディターリジェクトではないみたい。

しょっぼい論文で、エディター・レビューアの皆様には申し訳ないですが...m(_ _)m

2011年7月5日火曜日

雑草学事典

今日、雑草学事典(雑草学会編 2011)が届いた。

2年ぐらい前に執筆依頼がきて、4項目ぐらい執筆した。

やはりこういうたぐいのものは出版されるまでにかなりの時間がかかるのですね...
編集者の皆様お疲れ様です。

2011年6月29日水曜日

ESSでアンダーバーを入力する

小一時間ぐらいはまってしまいました。

emacsでessでRを使おうとすると"_"(アンダーバー、アンダースコア)が奪われて、入力できなくなる。
アンダーバーはオブジェクト名によく使うので無効にしておく

こちらを参考に、.emacsに以下を追加
(ess-toggle-underscore nil)

2011年6月25日土曜日

CMIP3サーバーダウン

先週末ぐらいからCMIP3のサーバーがダウンしている

以下HPより抜粋
[6/24/2011] We are experiencing hardware problems with the CMIP3 data server. All CMIP3 datasets are unavailable. Due to the large volume of data to be restored, the server is expected to be down until mid-July. We regret the inconvenience.
24日のアナウンスだと復旧は7月中旬になる模様...

せっかく温暖化シナリオの整備にやる気を出していたのに...

もしかして、自分が無茶なFTPアクセス(SRES A1Bシナリオの全GCMの現在と将来のDailyの気温と降水量のデータをゲットせよ)をしかけたためかしら...

全部で400GBぐらいあるもんな...

2011年6月22日水曜日

ubuntuでrgdal

ubuntu上のRでspgrass6を使うときの防備録

通常ではrgdalのインストール中にエラーがでる。
こちらのサイトを参考に、以下のパッケージをインストール

sudo aptitude install gdal libgdal-dev libproj-dev

2011年6月17日金曜日

Netcdfではまる

心を入れ替えてしばらく温暖化の仕事も励むことに...

んで、温暖化の気候データの整備をすることになった..

とりあえずCMIP3から将来の気候変化シナリをダウンロードしてきて、見様見真似でFortranに読み込もうと思ったらかなりはまった...

ここここをを参考にコードを書いてコンパイルしようとしたらエラー...エラー...era-
$ f95 netcdf.f90
/tmp/ccG3fNB4.o: In function `MAIN__':
netcdf.f90:(.text+0x93): undefined reference to `nf_open_'
netcdf.f90:(.text+0xcf): undefined reference to `nf_inq_varid_'
netcdf.f90:(.text+0x107): undefined reference to `nf_get_var_real_'
netcdf.f90:(.text+0x133): undefined reference to `nf_close_'
collect2: ld returned 1 exit status

Netcdfのライブラリがうまく読み込めていないらしい...

いろいろとネットを徘徊していると、ライブラリの場所を指定してやれば良いとのこと
$ f95 -L/usr/include -lnetcdf netcdf.f90
/tmp/cclfbtkk.o: In function `MAIN__':
netcdf.f90:(.text+0x93): undefined reference to `nf_open_'
netcdf.f90:(.text+0xcf): undefined reference to `nf_inq_varid_'
netcdf.f90:(.text+0x107): undefined reference to `nf_get_var_real_'
netcdf.f90:(.text+0x133): undefined reference to `nf_close_'
netcdf.f90:(.text+0x1b6): undefined reference to `nf_strerror_'
collect2: ld returned 1 exit status

が、それでもエラーがでる。
またネットの徘徊を続けていると、ライブラリの指定が足りないみたい
hoge@Lynx:/media/hoge$ f95 -L/usr/include -lnetcdf -L/usr/lib/ -lnetcdff netcdf.f90

なんとかコンパイルはできるようになった。










...がまだ読み込めない...



いや〜先は長そうだ...

2011年6月15日水曜日

投稿

先日リジェクトされた論文を今日再投稿しました!!

プロジェクトのお仕事なので、通ってくれないと困るのですが...
まあ、しょぼい論文を書いている自分が悪いってはなしですが...

エディター、レビューアの皆様よろしくお願いします!!

2011年6月14日火曜日

最近のお仕事

当初の自分の予定を過ぎてしまいましたが、学振で一時中断していた論文が今日書きあがりました!!
今回は割と素直に書き上げることができたように思う。

おそらく自分の専門ではないからかな〜!?

コメントを待ってしばらく熟成させた後、7月末までには投稿したいですね〜

さて、これからしばらくは7月末締切りの論文にとりかからねば...
もちろんプロジェクトのお仕事もしなくちゃいけませんが....

QGISアップデート

QGISがアップデートされましたね!!
最新バージョンは1.7.0-Wroclawだそうです。


今日の朝、ubuntuのアップデートマネージャーが起動して、自動的にアップデートされました。
ちなみに、公式サイトではまだ1.6のままでした。Windowsユーザーはもうしばらく待ちでしょうか。

起動時のフラッシュでは、人文字でQが描かれています。


ヘルプのアバウトから変更点を確認することができます。


最近QGISを使うこともほとんどなくなったのですが、ちょっとファイルを確認したいときにはやっぱり便利ですね。

もう少し全体の安定性が改善されるといいのですが!!
今後に期待です。

2011年6月10日金曜日

我苦心

世の若手研究者の年間行事のひとつの学振!!

5月の中旬からやく3週間、いろいろな人に迷惑をかけつつ、ない知恵をしぼりつつ、ようやく申請書を書き上げました。

今回は少し方向転換して、新たな研究分野・計画の申請。
ほとんど専門外なので、かなり苦心したけど、勉強になりました。

通る見込みはないけれど、たまに自分の研究をまとめるといろいろなことがブラッシュアップされますね〜!!


さて、論文執筆に戻るとしますか。

2011年6月7日火曜日

リジェクト

またリジェクトされました...
プロジェクトのお仕事なのですが、最初の一歩がなかなか踏み出せません...

この前は、約3ヶ月待ってレビューアリジェクトでしたが、今回は3週間ちょっとでエディターリジェクトです。
リジェクトの理由(↓)も至ってシンプルです。
it does not fully fit the scope



さて、次を探しますか...

2011年5月31日火曜日

京都に行ってきた

締切りがいつもよりも1ヶ月遅いのですが、今年も学振の季節がやって来ました。

やっぱり申請書書きは苦しいですね...
勉強になるので書き上げると、それなりの達成感があるのですが...
やっぱり苦しいです。

特に今年は違う分野で新しい研究を始めようと提案するのでなおさらです。

ということで、今日は学振の受け入れ先に挨拶に伺うために京都にやってきました!!
昼前に京大について、打ち合わせは2時間ぐらいでした。
いろいろと話しを伺っていると、異分野出身ですが自分の研究提案が受け入れられるような、それなりに新規性もあるような気がしてきてきました。


研究室訪問の後は、久しぶりに京都の散策へ!!
まずは京大から近いこともあって、以前から興味のあった晴明神社へ学振の祈願もかねて行ってきました



安倍晴明公の銅像。願いを込めて!!
どうかきれいな文章が書けますように☆

もっと厳かな雰囲気かと思っていたら、以外にも境内の中はポップ(ファンシー)な雰囲気!!

式神像もかわいいですね〜



晴明神社の後は、ゴボウを探しに神社の前を流れる堀川へ!!
さすがにゴボウはなさそうな雰囲気。
きれいな護岸がされて親水公園になっていました!

久しぶりにゆったりした時間を過ごせました!!

2011年5月14日土曜日

増穂に行ってきた

今年もセンセーやります。
今日は学生実習のために山梨のとある山の中へ!!

今年は例年より少し気温が低い日が続いているように思いますが、増穂はもう山菜は盛りを過ぎた頃でした。

ちょうどツクバネウツギがきれいな花を咲かせていました!!
ツクバネウツギ Abelia spathulata Siebold et Zucc.
2011年5月14日山梨県富士川町平林

2011年5月5日木曜日

三頭山へ行ってきた

先週に引き続き今日も三頭山へ行ってきました。
先週から林床植物の植生調査をしているのですが、今年はちょっとサイズが小さいとのこと。

小さいとよく分からないですね...
精進しなければ

ミツバコンロンソウ Cardamine anemonoides O.E.Schulz
2011年5月5日三頭山

ミヤマエンレイソウ Trillium tschonoskii Maxim.
2011年5月5日三頭山

2011年4月29日金曜日

三頭山に行ってきた

今日から最大10連休の大型ゴールデンウィークがスタートしますが、今日は三頭山に行ってきました!!
下働きをさせていただいている研究者のお手伝い(!?冷やかしかな!?)のため

しかし、いい季節になりましたね〜
スミレが見頃を迎えています

また植物のお勉強が始まります

エイザンスミレ Viola eizanensis (Makino) Makino
2011年4月29日三頭山


ナガバノスミレサイシン Viola bissetii Maxim.
2011年4月29日三頭山

ハリモミ Picea torano (Siebold ex K.Koch) Koehne.
2011年4月29日三頭山

2011年4月12日火曜日

BAM

しばらく自粛していましたが,投稿を再開します。

今日はBAMについて

Rで一般化加法モデル(Generalized Additive Model)を使うにはmgcvを使うことが多いと思う。
mgcvでGAMを行うには,関数gam()を使うが,これとは別に関数bam()もある。


ヘルプページによると
Generalized additive models for very large datasets
とある。


詳しく説明を読むと
Description:

Fits a generalized additive model (GAM) to a very large data set,the term `GAM' being taken to include any quadratically penalized GLM. The degree of smoothness of model terms is estimated as part of fitting. In use the function is much like ‘gam’, except that the numerical methods are designed for datasets containing upwards of several tens of thousands of data. The advantage of ‘bam’ is much lower memory footprint than ‘gam’, but it can also be much faster, for large datasets.
gamとは推定方法が異なるが,どうも計算が速いらしい。


実際に使ってみると確かに速い。
(もう少し確認が必要だが...)結果はほとんど変わらないように見える。
自分のデータ(約7000件)では,これまで80秒ぐらいかかっていたが,約半分ぐらいまで短くなる。


もし大規模なデータを使っていて,さらにMuMInでモデル選択をしたい方はお試しあれ。
ただバージョンによってcontrolの指定方法が異なるので要注意。

1ヵ月

原発事故と余震でまだまだ余談を許さない状況ですが,震災からようやく1ヵ月が経ちました。
被災された方に心からお見舞い申し上げるとともに,一日も早い復興を心より祈っています。

2011年3月3日木曜日

GRASSのr.univarの出力をラスター演算(r.mapcalc)で使うには

今回もマニアックな内容です。

やりたいこと

GRASSのr.univarが出力する,あるラスターデータの最大値や最小値を使ってラスター演算(r.mapcalc)をする

方法
ターミナルユーザーであれば,awkを使うことで,問題なく処理をすることができる

あるラスターデータを "dummy" とする。
r.univarを実行すると,以下のように出力される。

$r.univar map=dummy
total null and non-null cells: 5157441
total null cells: 0
Of the non-null cells:
----------------------
n: 5157441
minimum: 0
maximum: 1
range: 1
mean: 0.0155387
mean of absolute values: 0.0155387
standard deviation: 0.123682
variance: 0.0152973
variation coefficient: 795.961 %
sum: 80140

出力結果を見てみると,最小値は7行目,最大値は8行目のそれぞれ2列目に出力される。

ということで,最大値のみを取り出すには次のようにする。
NRで取り出す行数を,\$で列数を指定している。
r.univar map=dummy | awk '{if(NR==8){printf(\$2); printf(RS)}}'

最小値の場合にはNRの部分を7にすればよい。
r.univar map=dummy | awk '{if(NR==7){printf(\$2); printf(RS)}}'

さて,値自体は取り出すことができたので,次はラスター演算(r.mapcalc)で使えるようにしたい。
単純に,取り出した値をシェル変数に代入する。
試しに,割合(%)を示すデータdummy2を作成してみる。
i=`r.univar map=dummy | awk '{if(NR==8){printf(\$2); printf(RS)}}'`
r.mapcalc "dummy2=(dummy/$i)*100"


これ以外にも方法はあると思う。単純にr.mapcalcの構文内に`r.univar map=dummy | awk '{if(NR==8){printf(\$2); printf(RS)}}'`を入れるだけでも良いかもしれない。

応用
次のようにすることで,r.univarの出力結果をテキストファイルに1行で書き出すことができる。
r.univar map=dummy | awk '{
if(NR==6){printf(\$2); printf(FS);}
else if(NR==7){printf(\$2); printf(FS);}
else if(NR==8){printf(\$2); printf(FS);}
else if(NR==9){printf(\$2); printf(FS);}
else if(NR==10){printf(\$2); printf(FS);}
else if(NR==11){printf(\$5); printf(FS);}
else if(NR==12){printf(\$3); printf(FS);}
else if(NR==13){printf(\$2); printf(FS);}
else if(NR==14){printf(\$3); printf(FS);}
else if(NR==15){printf(\$2); printf(FS);}}
END{printf(RS)}' > dummy2

これは非常に使える方法で,例えば沢山のラスターデータの統計量をひとつのテキストファイルにまとめることができる。
結果を書き込むファイルを "result.txt" とする
#結果を書き込むファイルを作成し,ヘッダを書き込む
echo "n minimum maximum range mean MeanOfAbsoluteValues
StandardDeviation  Variance VariationCcoefficient Sum" > result.txt
#マップセット内のラスターデータすべてのr.univarの出力をresult.txtに書きこむ
for i in `g.mlist rast`
do
r.univar map=\$i | awk \'{if(NR==6){printf(\$2); printf(FS);}
else if(NR==7){printf(\$2); printf(FS);}
else if(NR==8){printf(\$2); printf(FS);}
else if(NR==9){printf(\$2); printf(FS);}
else if(NR==10){printf(\$2); printf(FS);}
else if(NR==11){printf(\$5); printf(FS);}
else if(NR==12){printf(\$3); printf(FS);}
else if(NR==13){printf(\$2); printf(FS);}
else if(NR==14){printf(\$3); printf(FS);}
else if(NR==15){printf(\$2); printf(FS);}}
END{printf(RS)}' >> result.txt
done

GRASSでもこの辺りを充実してくれると嬉しいのですが...

2011年2月22日火曜日

GPSゲット!!


新しいGPS(GPSmap 62S)を購入しました。
右側ののやつが先代,左側のフェイスが最新型!!

英語版なので,4万2000円!!
お手頃価格ですね~!!

早速今週末の調査から導入しよう!!

2011年2月14日月曜日

誤ってフォーマットしたデジカメのメモリーカードを復旧!!

もう半年も昔に誤ってフォーマットしてしまったデジカメのメモリーカードをようやく復旧しました!!

これぐらい復元できることはわかっていたので,いつか復元しようと思っていたのですが,気がついたらもう半年もたってしまいました...

またいつか必要になるかもしれないので,念のため手順を書いておきます。
本当は必要にならないと良いのだけど...
このページを参考にされる方は,自己責任でお願いします。



まずは必要なソフトのインストール!!
今回はPhotoRecを使用した。
このソフトはubuntuのリポジトリにも登録されているので端末から以下のコマンドでOK!


sudo aptitude install testdisk

インストールしたら起動

photorec

すると以下の画面が表示される。
なになに,管理者権限で実行しなければならないとのこと
実行するには[sudo]に進む。











するとパスワードの入力が求められる。
パスワードを入力しEnter














復元したいメディアを選択する。
内蔵ハードディスクと,USBフラッシュメモリが表示されている。
ここは必ず慎重に確認してから進む












次にパーティションテーブルのタイプを選択する。今回は「Intel」を選択した。














次に復元したい領域を選択する。














ファイルシステムを選択する。FATなので「Other」を選択。














次に,解析対象を空き領域のみにするか,それともディスク全体にするか選択する。ここでは全体を選択。












次に復元したファイルを格納するディレクトリを選択する。













そしたら後は自動で解析が進む















ファイルサイズにもよるが,今回は結構早く終わりました














実際に指定した復元用のディレクトリを見ると,何かしら復元されているのがわかります。












ディレクトリを開いてみるとこのとおり。
ちゃんと復元されています。
ただ,ファイル名は変わってしまっていますが....












でもファイルのプロパティを確認してみると画像情報はちゃんと残っていました。



















すごいですね~
作業も楽で,とても便利です。

さて,今回は説明していませんが,作業は実際にはddこまんどでメモリーカードのデータをUSBフラッシュに移してから,USBフラッシュにたいして復元作業を行っています。
いろいろ検索してみるとわかりますが,そのほうが安全です。

2011年2月2日水曜日

RとFortranの演算速度の比較

そろそろFortranもお勉強しようかとおもい、プログラムをしてみることに!!

作業は、2地点間の距離と角度を求めるというシンプルなもの
ただ、データ数が多く、組み合わせが全部で22,232,390もある。

まずRでプログラミング
特に変なことはしていないと思いますが...

Tree<-read.csv("TreePlot",header=T)
IncW3<-read.table("IncW3Th10S3",header=T,sep=" ")
IncW5<-read.table("IncW5Th10S3",header=T,sep=" ")
IncW11<-read.table("IncW11Th10S3",header=T,sep=" ")

Tree<-as.matrix(Tree[,1:5])
IncW3<-as.matrix(IncW3)
IncW5<-as.matrix(IncW5)
IncW11<-as.matrix(IncW11)

DistW3<-matrix(rep(NA,nrow(Tree)*nrow(IncW3)*7),ncol=7)
DistW5<-matrix(rep(NA,nrow(Tree)*nrow(IncW5)*7),ncol=7)
DistW11<-matrix(rep(NA,nrow(Tree)*nrow(IncW11)*7),ncol=7)

for (i in 1:nrow(Tree)){
 for (j in 1:nrow(IncW3)){
 DistW3[i*j,1:4]<-c(Tree[i,4:5],IncW3[j,1:2])
 DistW3[i*j,5]<-sqrt((Tree[i,4]-IncW3[j,1])^2+(Tree[i,5]-IncW3[j,2])^2)
 DistW3[i*j,6]<-atan((Tree[i,5]-IncW3[j,2])/(Tree[i,4]-IncW3[j,1]))
 DistW3[i*j,7]<-atan((Tree[i,5]-IncW3[j,2])/(Tree[i,4]-IncW3[j,1]))*180/pi
 }
 for (j in 1:nrow(IncW5)){
 DistW5[i*j,1:4]<-c(Tree[i,4:5],IncW5[j,1:2])
 DistW5[i*j,5]<-sqrt((Tree[i,4]-IncW5[j,1])^2+(Tree[i,5]-IncW5[j,2])^2)
 DistW5[i*j,6]<-atan((Tree[i,5]-IncW5[j,2])/(Tree[i,4]-IncW5[j,1]))
 DistW5[i*j,7]<-atan((Tree[i,5]-IncW5[j,2])/(Tree[i,4]-IncW5[j,1]))*180/pi
 }
 for (j in 1:nrow(IncW11)){
 DistW11[i*j,1:4]<-c(Tree[i,4:5],IncW11[j,1:2])
 DistW11[i*j,5]<-sqrt((Tree[i,4]-IncW11[j,1])^2+(Tree[i,5]-IncW11[j,2])^2)
 DistW11[i*j,6]<-atan((Tree[i,5]-IncW11[j,2])/(Tree[i,4]-IncW11[j,1]))
 DistW11[i*j,7]<-atan((Tree[i,5]-IncW11[j,2])/(Tree[i,4]-IncW11[j,1]))*180/pi
 }
}

結果
ユーザ   システム       経過  
  1522.730      1.510   1528.272 

約25分ぐらいですか

次にFortranの場合
コードはこちら
program DistCalc
 implicit none
 real,dimension(1565,5)::Tree
 real,dimension(7146,3)::IncW3
 real,dimension(4952,3)::IncW5
 real,dimension(2108,3)::IncW11
 real pi
 real DistW3(1565*7146),AngW3(1565*7146)
 real DistW5(1565*4952),AngW5(1565*4952)
 real DistW11(1565*2108),AngW11(1565*2108)
 integer i,j 

 open(10, file='Tree')
 open(20, file='IncW3')
 open(30, file='IncW5')
 open(40, file='IncW11')
 read(10,*) ((Tree(i,j),j=1,5),i=1,1565) !iは行、jは列
 read(20,*) ((IncW3(i,j),j=1,3),i=1,7146)
 read(30,*) ((IncW5(i,j),j=1,3),i=1,4952)
 read(40,*) ((IncW11(i,j),j=1,3),i=1,2108)

 do i=1,1565
  do j=1,7146
  DistW3(i*j) = sqrt((Tree(i,4)-IncW3(j,1))**2 + (Tree(i,5)-IncW3(j,2))**2)
  AngW3(i*j) = atan2((Tree(i,5)-IncW3(j,2)),(Tree(i,4)-IncW3(j,1)))
  end do
 end do

 do i=1,1565
  do j=1,4952
  DistW5(i*j) = sqrt((Tree(i,4)-IncW5(j,1))**2 + (Tree(i,5)-IncW5(j,2))**2)
  AngW5(i*j) = atan2((Tree(i,5)-IncW5(j,2)),(Tree(i,4)-IncW5(j,1)))
  end do
 end do

 do i=1,1565
  do j=1,2108
  DistW11(i*j) = sqrt((Tree(i,4)-IncW11(j,1))**2 + (Tree(i,5)-IncW11(j,2))**2)
  AngW11(i*j) = atan2((Tree(i,5)-IncW11(j,2)),(Tree(i,4)-IncW11(j,1)))
  end do
 end do

 pi=4*atan(1.0)

 open(50,file="DistW3")
 do i=1,1565
  do j=1,7146
  write(50,*) Tree(i,4), Tree(i,5), IncW3(j,1), IncW3(j,2),&
   DistW3(i*j), AngW3(i*j), (AngW3(i*j)*180)/pi
  end do
 end do

 open(70,file="DistW5")
 do i=1,1565
  do j=1,4952
  write(70,*) Tree(i,4), Tree(i,5), IncW5(j,1), IncW5(j,2),&
   DistW5(i*j), AngW5(i*j), (AngW5(i*j)*180)/pi
  end do
 end do

 open(80,file="DistW11")
 do i=1,1565
  do j=1,2108
  write(80,*) Tree(i,4), Tree(i,5), IncW11(j,1), IncW11(j,2),&
   DistW11(i*j), AngW11(i*j), (AngW11(i*j)*180)/pi
  end do
 end do

end program DistCalc

で結果はというと、一目瞭然ですね!!
$ f95 DistCalc.f90
$ ./a.out

real 3m20.994s
user 3m14.140s
sys 0m5.330s

今回の場合には、Fortranのコードを書くだけで結構時間がかかった(まだ初心者なので)ので、Rだけで作業しても良かったかもしれません。
ですが、今後のことを考えてもFortranをお勉強したほうが良いですね〜
できればC++もお勉強したいのですが...

2011年1月21日金曜日

GRASSのr.mapcalcのifの取り扱い

r.mapcalcにおけるifの取り扱いについて
結構忘れやすいのでメモしておく

マニュアルには以下の4つが記載されている

1)     $if(x)$
2)     $if(x, a)$
3)     $if(x, a, b)$
4)     $if(x, a, b, c)$
  1. もし$x$が0(ゼロ)でない場合は1を、それ以外は0(ゼロ)とする
  2. もし$x$が0(ゼロ)でない場合は$a$を、それ以外は0(ゼロ)とする
  3. もし$x$が0(ゼロ)でない場合は$a$を、それ以外は$b$とする
  4. もし$x$が0(ゼロ)より大きい場合場合は$a$を、0(ゼロ)の場合は$b$を、0(ゼロ)未満の場合は$c$とする

$x$の部分には比較演算子が利用可能。
また、ifのなかにifを使うこともできる。

1)     $if(x \textgreater 5, 1)$
2)     $if(x \textgreater 5, 1, if(x \textgreater 10, 2))$

  1. もし$x$が5より大きい場合は1を、それ以外は0(ゼロ)とする
  2. もし$x$が5より大きい場合は1を、10より大きい場合は2を、それ以外は0(ゼロ)とする

2011年1月20日木曜日

シカ襲来

ここ数日、(妄想の中で)シカの襲来にあっていました
というのも、締切り間際になって森林学会の要旨を登録するための解析をしていたため!!
今度の森林学会(ちなみに初参加)ではシカの食害の発表をします。

要旨を書き始めたのは、昨日のアフターファイブ(←もしかして死語?)を過ぎてから...
でも、結果はすでに出ていたので、なんとか昨日のうちに書き終えて共同研究者に送ることができました。

にわかシカ研究ですが、よかったら聞きに来てください。

2011年1月7日金曜日

subversionで一括でファイルを追加または削除

Subversionで一括でファイルを追加または削除についての防備録

ぐぐるといろいろと情報がでてくるけどファイル名に空白が含まれる場合には対応できない

ということで自作する。

追加する場合
svn status | grep ^? | sed 's/?//g' | awk '{sub(/^[ ]+/,"");print "#",$0,"#"}' | sed -e "s/ #/'/g" | sed -e "s/# /'/g" | xargs svn add
svn commit -m "Data added!!"

削除する場合
svn status | grep ^! | sed 's/!//g' | awk '{sub(/^[ ]+/,"");print "#",$0,"#"}' | sed -e "s/ #/'/g" | sed -e "s/# /'/g" | xargs svn delete
svn commit -m "Data deleted!!"

やたらパイプが多いですね....
まあ,初めからファイル名に空白を使わなければ良いのですが...

2011年1月6日木曜日

逆距離荷重補間(IDW)について調べてみた

最近,GISで空間補間関係の作業がやたら多い。
どれも,空から降ってきた仕事たちですが...

これまでは,特に気にもとめずいろいろ使っていたけど,ちょっと気になることがあって,すこし調べてみた。

空間補間の方法は主に以下の4つが使われる

  • ボロノイ(voronoi)多角形補間
  • 逆距離荷重補間(inverse distance weighted interpolation: IDW)
  • 平滑化スプライン
  • 各種クリギング


それぞれ,向き不向きがあって,例えばボロノイ多角形はカテゴリ変数に使われる(らしい...)。
IDWは,簡単に利用できる空間補間手法の一つで,かなり広く使われている。
以下の式で求まる。

\[F(r) = \sum_{i=1}^{m}w_{i}z(r_{i}) = \frac{\sum_{i=1}^{m}z(r_{i})/\mid r-r_{i} \mid^{p}}{\sum_{j=1}^{m}1/\mid r-r_{j} \mid^{p}}\]

このとき,$p$は累乗(power)パラメーター,$m$はある地点の値を求める際に使用する最近接点の数である。
$r$はサンプリングされいない地点$r=(x,y)$である。

つまり,この二つのパラメーターをいじれば,補間結果が変わってくるわけである。
GRASSのv.surf.idwでは,デフォルトでそれぞれ $p=2$, $m=12$ である。

式をみたら分かるが,$p$の値を大きくすれば,距離に応じてウェイトが変化(近いところの影響をより受ける)する。
また,$m$を大きくすると,全体がなめらかになり,大きくし過ぎると,細部では情報が失われることになる。GRASSの場合,$m=1$ではボロノイダイアグラムが適用される。

実際の作業では,2つのパラメータをいじってみて,どれが現実に近いか比較する必要がある(見えるデータのみですが...)