Swingアプリケーションの導入


Swingを用いてWindowを表示させるだけのアプリケーションの作成をしてみます。
AWT(Abstract Window Toolkit)とはJavaが初めてリリースされたときから存在しているJava Core APIのGUIコンポーネントです。
Java Core APIとはJavaの開発環境であるJDKに含まれる、プログラム作成に必要となる基本的なクラスを集めた道具箱のようなものです。
SwingはAWTを進化させる形で、1998年にリリースされました。ちなみにJava自体は、1995年にSun Microsystem社よりリリースされています。
それでは、Swingを用いたアプリケーションを行いたいと思います。

$ vim Hello.java



//Hello.java
//パッケージのインポート
import javax.swing.*;

public class Hello{
 public static void main(String[] args){
  //JFrameクラスのオブジェクトを作成する
  JFrame frame = new JFrame("こんにちは");
  //ウィンドウが閉じるときの動作を設定
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //ウィンドウのサイズを指定
  frame.setSize(500,300);
  //ウィンドウを可視化
  frame.setVisible(true);
 }
}



#コンパイルして実行してみます。
$ javac Hello.java
$ java Hello




【参考文献】
丸の内とら『Java入門教室』SE SHOEISHA 2012 318-325pp

Javaのswingアプリケーションの文字化けの解決方法

Javaの日本語を含むSwingアプリケーションを作るときにハマってしまいました。
解決策も合わせて書きたいと思います。

まず、私のMac OS XのJavaの環境は以下の通りです。

$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-10M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)

とりあえず、Java以下のソースをコンパイルして実行すると文字化けはおこりません。

$ vim Hello.java

public class Hello{
        public static void main(String[] args){
                System.out.println("Hello in English\n");
                System.out.println("こんにちは in English\n");
        }
}

$ javac Hello.java
$ java Hello


Hello in English

こんにちは in English


コンソールではうまくいくようです。
しかしSwingではうまくいきません。


$ vim Hello.java


import javax.swing.*;

public class Hello{
        public static void main(String[] args){
                JFrame frame = new JFrame("こんにちは");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                frame.setSize(500,300);
                frame.setVisible(true);
        }
}

$ javac Hello.java
$ java Hello

題名が見事な文字化けをしています。
すこし調べた結果、以下のようにするとうまくいくことがわかりました。
文字コードをUTF8 と明示することがミソのようです。

$ javac -J-Dfile.encoding=UTF-8 Hello.java
$ java -Dfile.encoding=UTF-8 Hello

無事解決しました。
エイリアスを設定しておくと便利です。

$ vim ~/.bashrc

#この一行を追記する
alias javac='javac -J-Dfile.encoding=UTF-8'
alias java='java -Dfile.encoding=UTF-8'

【参考文献】
jitsu102の日記

Facebookの友達ネットワークを測定してR + igraphで描写する

今回は、NameGenWebというアプリケーションを使ったFacebookの友達ネットワークの解析について紹介します。

NameGenWebのプライバシーポリシーを記します。

Privacy Policy
NameGenWeb is a research application developed at the Oxford Internet Institute, University of Oxford by Joshua R. Melville and Bernie Hogan based on earlier code from Bernie Hogan and Arber Ceni. This application is designed principally as a research and teaching utility for accessing a particular social network, classically referred to as the 'personal network'. The principal motivation is to help individuals make sense of the connections within their own network, and to familiarize themselves with network analysis as an analytical technique.

要するに、オックスフォードの研究グループの個人ネットワークの研究のアプリケーションだそうです。アカデミアがベースになっているのは安心感があります。

今回は、NameGenDevで自分の友達ネットワークを解析し、解析結果をGraphML形式で取得。最後に、R + igraph環境で可視化をします。


# Step  0
Facebookの検索窓で"NameGenDev"を検索します。


# Step1
開発者からのコンタクトを希望するならば、下のチェックを入れます。


# Step 3
適当に属性を入れます。今回はデフォルトのFull Name & Facebook User IDだけを使用します。



# Step 3
ファイルをダウンロードします。
 # step 4
ダウンロードのファイル形式を選択します。今回は、GraphMLを選択します。また、プライバシーの観点からAnonymise Networkにチェックを入れました。

ダウンロードしたファイルをカレントディレクトリに移動させて(今回はmygraph.graphmlとする)、Rによる可視化作業に移行します。


##############以下 Rのスクリプト###############
#Rの起動
$ R

#igraphのロード
library(igraph)

#ダウンロードしたgraphmlファイルをロードしてgというオブジェクトにする
g <- read.graph("./mygraph.graphml", format=c("graphml"))

#vertexの大きさを1に統一
V(g)$size <- 1

#グラフを描写
png("mygraph.png")
plot(g, main = "My Facebook Friends Network")
dev.off()

大きなクラスターが3つと、小さなクラスターが4つ存在することがわかります。これは私の所属大学や出身高校のクラスターを反映しています。

次数分布も求めてみます。
ただし、ここで描写されるのは"私の友達ネットワーク"における次数分布であることに注意しなくてはなりません。このネットワーク内で多くの次数を持っている方(vertex)は、私の人生の様々なところで関わってくださった方と言えるかもしれません。

###########Rのソースコード : 次数分布を求める#############


#g次数分布の配列を計算
#握手問題を考慮して1/2倍している。
degree <- degree(g)/2

#次数分布を描写
png("degree-dsit.png")
hist(degree, xlab = "degree", ylab="Frequency")


次数中心度をノードの大きさに反映させる


#igraphのロード
library(igraph)

#n=50、p = 0.1の無向ランダムグラフを作成する。
g <- random.graph.game(50, p=0.1, direct=F)

#次数中心を計算する
c <- dgree(g)

#各vertexの次数中心度をvertexの大きさに反映させて描写
png("dgree.png")
 plot(g, vertex.size=c, main="random graph : n = 50, p = 0.1")
dev.off()

ClustalWを用いてマルチプルアラインメントを作成する

ClustalxとはGUIベースのマルチプルアラインメントソフトウェアです。今回は、ヒト、マウス、ゼブラフィッシュのrhodopsinのアミノ酸配列のアラインメントを行いたいと思います。

########ClustalX2.1のダウンロード###########

以下のサイトからclustalxのmac用のバイナリファイルをダウンロードして開きます。(clustalx-2.1-macosx.dmg)
http://www.clustal.org/clustal2/#Download

clustalx-2.1-macosx.dmgダブルクリックすると開いたフォルダの中にclustalx.appが入っているので、/Applicationsにコピーします
$ cp -r ~/Desktop/clustalx.app /Applications

clustalxを起動するにはopenコマンドを使用します。
$ open -a clustalx



########マルティプルアラインメントの作成##########

次にrhodopsinのアミノ酸配列を記述した次の配列ファイルを読み込みます。



$ cat rho.fasta
>gi|4506527|ref|NP_000530.1| rhodopsin [Homo sapiens]
MNGTEGPNFYVPFSNATGVVRSPFEYPQYYLAEPWQFSMLAAYMFLLIVLGFPINFLTLYVTVQHKKLRT
PLNYILLNLAVADLFMVLGGFTSTLYTSLHGYFVFGPTGCNLEGFFATLGGEIALWSLVVLAIERYVVVC
KPMSNFRFGENHAIMGVAFTWVMALACAAPPLAGWSRYIPEGLQCSCGIDYYTLKPEVNNESFVIYMFVV
HFTIPMIIIFFCYGQLVFTVKEAAAQQQESATTQKAEKEVTRMVIIMVIAFLICWVPYASVAFYIFTHQG
SNFGPIFMTIPAFFAKSAAIYNPVIYIMMNKQFRNCMLTTICCGKNPLGDDEASATVSKTETSQVAPA

>gi|21717805|ref|NP_663358.1| rhodopsin [Mus musculus]
MNGTEGPNFYVPFSNVTGVVRSPFEQPQYYLAEPWQFSMLAAYMFLLIVLGFPINFLTLYVTVQHKKLRT
PLNYILLNLAVADLFMVFGGFTTTLYTSLHGYFVFGPTGCNLEGFFATLGGEIALWSLVVLAIERYVVVC
KPMSNFRFGENHAIMGVVFTWIMALACAAPPLVGWSRYIPEGMQCSCGIDYYTLKPEVNNESFVIYMFVV
HFTIPMIVIFFCYGQLVFTVKEAAAQQQESATTQKAEKEVTRMVIIMVIFFLICWLPYASVAFYIFTHQG
SNFGPIFMTLPAFFAKSSSIYNPVIYIMLNKQFRNCMLTTLCCGKNPLGDDDASATASKTETSQVAPA

>gi|18859317|ref|NP_571159.1| rhodopsin [Danio rerio]
MNGTEGPAFYVPMSNATGVVRSPYEYPQYYLVAPWAYGFVAAYMFFLIITGFPVNFLTLYVTIEHKKLRT
PLNYILLNLAIADLFMVFGGFTTTMYTSLHGYFVFGRLGCNLEGFFATLGGEMGLKSLVVLAIERWMVVC
KPVSNFRFGENHAIMGVAFTWVMACSCAVPPLVGWSRYIPEGMQCSCGVDYYTRTPGVNNESFVIYMFIV
HFFIPLIVIFFCYGRLVCTVKEAARQQQESETTQRAEREVTRMVIIMVIAFLICWLPYAGVAWYIFTHQG
SEFGPVFMTLPAFFAKTSAVYNPCIYICMNKQFRHCMITTLCCGKNPFEEEEGASTTASKTEASSVSSSS



1)ファイルのロード
File -> Load sequence
でファイルを選択。
2)マルティプルアラインメントの実行
Alignment -> Do complete Alignment
3)アラインメントの画像を出力
File -> Write alignment as postscript

以下の画像は結果を一部切り出しています。