R言語(3)-3Dプロットとライブラリ

前回、R言語を活用して、2Dプロット表示でグラフを作成しました。

今回は3Dプロット表示でグラフを作成してみようと思います。

3Dプロット表示でグラフを作成するには、ライブラリを使う必要があります。

まずは3Dグラフ表示ののライブラリをインストールします。

必要なライブラリはrglライブラリです。

install.packages("rgl")

しかし、エラーが発生・・・。

checking for x... no
configure: error: x11 not found but required, confighre aborted.
ERROR: configuration failed for package 'rgl'

ようするに、x11ライブラリが無いみたいです。

それでは、一度Rコンソールを終了します。

q()

それではx11ライブラリのインストールを実施します。

sudo apt-get install libx11-dev

これでx11ライブラリのインストールは完了です。

それでは、再度rglライブラリのインストールを実施します。

またまた、エラーが発生・・・。

configure: error: missing required header GL/gl.h
ERROR: configuration failed for package 'rgl'

OpenGL系統のライブラリが足りないようです。

gl.h含まれているソフトウェアをインストール
sudo apt-get install freeglut3-dev

今度こそはと、rglライブラリのインストールを実施します。

無事にインストールに成功しました。

それでは、使用してみます。

下記のsample3D.txtファイルを作成します。

10.8,80.1,20,7,1
20.7,80.1,10.8,1
30.6,70.2,10.8,2
40.5,60.3,20.7,3
50.4,50.4,30.6,3
60.3,40.5,40.5,3
70.2,30.6,50.4,2

下記コマンドを実行して、rglライブラリを読み込みます。

library(rgl)

先程のテキストファイルを読み込みます。

data <- read.table("sample3D.txt", sep=",")

それでは、読み込んだデータを出力して確認してみます。

print(data)

下記のように表示されます。

    V1   V2   V3 V4
1 10.8 80.1 20.7  1
2 20.7 80.1 10.8  1
3 30.6 70.2 10.8  2
4 40.5 60.3 20.7  3
5 50.4 50.4 30.6  3
6 60.3 40.5 40.5  3
7 70.2 30.6 50.4  2

それでは、3Dプロット表示でグラフを作成します。

plot3d(data[,1:3],col=data[,4])

変数colは色を示しています。

3Dプロット表示ライブラリのおもしろい機能としてHTML出力があります。
writeWebGL(width=640, height=640)

下記URLをクリックするとHTML出力した結果を見る事ができます。
http://network-security.device-mobile.com/sample3D.html

R言語(2)-2Dプロット

前回、R言語のインストールを実施しました。

今回は2Dプロット表示でグラフを記載してみようと思います。

まずは下記のようなテキストファイルをを準備しておきます。
※ファイル名はsample.txtとしました。

NAME,Number of peaple
SATOU,1893000
SUZUKI,1802000
TAKAHASHI,1424000
TANAKA,1349000
ITOU,1084000

準備ができましたら、さっそくRコンソールを実行します。

sudo R

Rコンソールが起動したら、先程、作成したテキストファイルをインポートします。

data <- read.table("sample.txt", header=T, sep=",") read.tableにてdata変数にsample.txtのデータをインポートしました。 data変数の中身を見てみましょう。 print(data)


       NAME Number.of.peaple
1     SATOU          1893000
2    SUZUKI          1802000
3 TAKAHASHI          1424000
4    TANAKA          1349000
5      ITOU          1084000

print()でdata変数の中身を出力できます。

それでは、グラフに表示してみましょう。

plot(data)

2DPlot_160824

plot()で2Dグラフを表示する事ができます。

2016年8月24日 | カテゴリー : R | タグ : , | 投稿者 : net_sec

R言語(1)-インストール-

wiresharkにて、いくつかのプロトコルを見てきましたが、その中にSSLプロトコルがありました。

SSLは暗号化技術を使用して、クライアントとサーバ間で安全な通信環境を提供するプロトコルです。

httpsプロトコルもSSLプロトコルを活用したものであり、インターネットをしているとよく見かけます。

SSLは共通鍵や秘密鍵、公開鍵、電子証明などさまざまな仕組みが組み合わさっています。

SSLにつてい見ていくと、統計学的な要素もある事がわかりました。

例えば、頻度分析などです。

だんだんと統計学に興味がわいてきたので、統計学に関係した言語はないかなと探したところ、R言語にたどりつきました。

R言語はオープンソースで提供されている言語です。

フリーで入手、利用も可能な統計分析に使用できるプログラミング言語の1つです。

OSはWindows、Mac、linuxと幅広く対応しています。

それでは、R言語をインストールしようと思います。

今回は、Linux(Ubuntu)の場合の手順です。

R言語のダウンロードとインストールをします。

ターミナルにて、

sudo apt-get install r-base

後は、自動でダウンロード、インストールをしてくれます。

ターミナルにて、

sudo Rと入力すると、Rが実行されます。

2016年7月25日 | カテゴリー : R | タグ : , | 投稿者 : net_sec

PostgreSQL(6)-MDB2とPDO-

MDB2PEARというクラスライブラリ郡の中にあるクラスです。

MDB2は以前記載させて頂いた様々なデータベースを共通のコードでコントロールできるクラスです。

では、MDB2をインストールします。

下記コマンドを実行します。

pear install MDB2

見事にエラーが発生しました。

おそらくPHP5.5以降に対応していないのではないかと思います。

うーん、どうしたものかと、検討していたら、PDOというクラスがある事がわかりました。

では、早速試してみたいと思います。

PostgreSQLとの接続は、クラスのインスタンスを作成することで、確立されます。


//PDOクラスのインスタンスを作成する事でデータベースと接続します。
define('DSN','pgsql:dbname=samplesql;user=samplesql;password=samplesql');
$link = new PDO(DSN);

if(!$link){
	die('error');
}else{
	echo "connect<br/>\n";
}

//queryメソッドでPostgreSQLを操作
$sql = sprintf("select * from test");
$res = $link->query($sql);

//fetch(PDO::FETCH_ASSOC)メッソドで連想配列を1行ずつ取得
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
	foreach($row as $filed_name => $value){
		print "[{$filed_name}] = {$value}<br/>\n";
	}
}

//PDOクラスにNULLを代入する事でデータベースとの接続を切断する
$link = NULL;

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

Wireshark(10)-TCPストリーム表示-

TCPストリーム表示機能は、TCPの接続で送受信されたデータをまとめて確認できる機能です。

今回は、メールを送信した際のキャプチャファイルを用意しましたので、このパケットに対して、TCPストリーム機能を実行してみます。

Filterに「smtp」と入力して、smtpプロトコルのパケットのみの表示にします。

smtpのパケットを選択した後、右クリックメニューより、「Follow TCP Stream」を選択します。

メニューバーの[Analyze]-[Follow TCP Stream]からも実行できます。

実行すると、Follow TCP Streamのダイアログ画面が表示され、メールを送信した際の一連のパケットの流れが確認できます。

ASCIIやEBCDIC、HexDump、C Arrays、Rawで表示形式を切りかえる事ができます。

Rawを選択した状態で、名前を付けて保存を実行します。

拡張子を「.eml」にして保存して、メーラーで開くと、メールの中身が表示されます。

画像を添付してあれば、画像も表示されます。

セキュリティが弱いとメールの中身も簡単に見る事が可能です。

メールの中身を見られないようにする為には、SSL/TLSのような盗聴、改ざんから通信データを守る設定をしておく必要があります。

参考書籍

パケットキャプチャ無線LAN編 [ 竹下恵 ]

PostgreSQL(5)-POSTとSESSION-

PostgresSQLの接続を維持する為の手段として、POSTの仕組みを使用する事ができます。

index.php

//formタグのmethod属性で送信方法を指定、action属性で移動先ページを指定
<form method="post" action="login.php">
//inputタグのtype属性で移動先ページへ渡す情報入力欄を作成
<table>
<tr><td>データベース名</td><td><input type="text" name="dbname" value='$dbname'></td></tr>
<tr><td>ユーザ名</td><td><input type="text" name="user" value='$user'></td></tr>
<tr><td>password</td><td><input type="text" name="pass" value='$pass'></td></tr>
</table>
//inputタグのtype属性をsubmitとして、送信ボタンを作成
<input type="submit" name="start" value="実行">

login.php

//index.phpで入力されたデータを取得
$dbname = $_POST['dbname'];
$user = $_POST['user'];
$pass = $_POST['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "dbに接続できました<br/>\n";}

このようにPOSTを使用する事で、dbnameやuser、passwordを別のページヘ送り、PostgreSQLとの接続を維持する事ができます。

しかし、POSTはURLに属性情報を追加する事で、inputタグに付与した情報を送付するので、セキュリティ上、問題もあります。

毎回、データベースを接続する為に、URLに情報を付与するのは問題です。

そこで、SESSION機能を使用します。

login.phpを少々改良します。
login.php

//SESSIONを開始する
session_start();
//index.phpで入力されたデータを取得
$dbname = $_POST['dbname'];
$user = $_POST['user'];
$pass = $_POST['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "dbに接続できました<br/>\n";}
$_SESSION['dbname'] = $_POST['dbname'];
$_SESSION['user'] = $_POST['user'];
$_SESSION['pass'] = $_POST['pass'];
header( "Location: ./session.php" ) ;

session.php

//login.phpで入力されたデータを取得
$dbname = $_SESSION['dbname'];
$user = $_SESSION['user'];
$pass = $_SESSION['pass'];
//dbに接続
$con = pg_connect("dbname='$dbname1' user='$user1'password='$pass'");
if ($con == true) {echo "引き続きdbに接続できました<br/>\n";}
session_destroy();

このように入力した情報を保持する事ができます。

SESSIONはサーバー側に必要な情報を保持するので、POSTより安全です。

POSTとSESSIONについて見てきましたが、あとCOOKIEも関係してきます。

実際にSESSIONを使用して、情報を取得するにしても、何かしらのキーが必要です。

このキーはCOOKIEに保存される事が多いです。

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

PostgreSQL(4)-PHPから接続-

PHPからPsotgresSQLを操作してみたいと思います。

試しにPHPでコードを作成して動作させてみましたが、動きませんでした。

ライブラリーが必要です。

下記コマンドを実行して、ライブラリーをインストールします。

sudo apt-get install php5-pgsql;

apache2のリスタートをします。

sudo service apache2 restart;

PHPからPostgresSQLを操作するコードが動作しました。


//pg_connectでデータベースと接続します。
$link = pg_connect("host=localhost dbname=samplesql user=samplesql password=samplesql");

if(!$link){
	//pg_last_errorでデータベースに接続けいなかった際のエラー情報を表示
	die('error.'.pg_last_error());
}else{
	print("connect success\n");
}

//pg_queryでPostgreSQLを操作
$str_sql = "select * from test";
$rs = pg_query($link, $str_sql);

//pg_fetch_assocで連想配列を1行ずつ取得
while($arr_record = pg_fetch_assoc($rs)){
	foreach($arr_record as $filed_name => $value){
		print "[{$filed_name}] = {$value}</br>\n";
	}
}

//pg_closeでデータベースとの接続を切断する
$close_flg = pg_close($link);

if($close_flg){
	print("close success\n");
}

参考書籍

今すぐ導入! PHP×PostgreSQLで作る最強Webシステム改訂版 [ 石井達夫 ]

PostgreSQL(3)-テーブルへの挿入・削除・表示-

前回、データベースの箱を作成しましたので、箱の中にテーブルを追加していこうと思います。

create table test (no integer, name varchar(20));

testという名前のテーブルをが作成されました。

下記コマンドでテーブル一覧を表示できます。

\d

また、testの()の中は列の情報となります。

no integerは、integer型のnoという名前の列となります。

name varchar(20)は、varchar型のnameという名前の列なります。

下記コマンドでテーブルの列の情報を表示できます。

\d test

テーブルに値を挿入します。

insert into test(no, name) values(1, 'aiueo');

テーブルに挿入した値を表示してみます。

select * from test;

テーブルに挿入した値が確認できると思います。

行を削除する場合は、下記のSQL言語を実行します。

delete from test WHERE no = 1;

列を挿入する場合は、下記のSQL言語を実行します。

alter table test add column detail varchar(100);

列を削除する場合は、下記のSQL言語を実行します。

alter table test drop column detail;

テーブルの列に制約をつける事もできます。

create table test (no int NOT NULL, name text);

下記のSQL言語は主キーの設定です。

alter table test add PRIMARY KEY(no);

参考書籍

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

PostgreSQL(2)-役割と認証-

前回、PostgreSQLのインストールを実施しました。

では、早速、データベースに接続してみようと思います。

sudo psql

と接続を試みたところ、

psql: FATAL: password authentication failed for user "root"

と表示されました。

権限が無い様なので、ユーザーを変更します。

su – postgres

postgresユーザーに変更されました。

それでは、もう一度、

sudo psql

psql (9.3.11)

と接続できたようです。

下記コマンドを実行すると、

\du

役割一覧が表示されます。

現在は、postgresのみ割り当てられているので、新規に追加してみます。

CREATE ROLE samplesql LOGIN CREATEDB PASSWORD '******';

もう一度、役割一覧を見てみると、samplesqlが追加されています。

posgresと違い、samplesqlはCreate DBの役割属性のみ割り当てられています。

データベースを作成してみます。

CREATE DATABASE samplesql OWNER samplesql;

CREATE DATABASE

下記コマンドでデータベースを一覧を表示します。

\l

新規にデータベースが作成された事が確認できます。

作成したDBに接続してみます。

psql --username=samplesql --password --dbname=******

psql: FATAL: Peer authentication failed for user "samplesql"

Peer認証である為、接続できません。

下記のファイルを編集して認証の設定を変更します。

/etc/postgresql/9.3/main/pg_hba.conf

参考書籍

SQL 第2版 ゼロからはじめるデータベース操作 (プログラミング学習シリーズ)

PostgreSQL(1)-インストール-

リレーショナルデータベースという種類のデータベースがあります。

アルファベットで書くとRelational Databaseとなります。

英語の意味通り、「関係データベース」とも呼ばれます。

列、行からなる表の形式でデータは管理されております。

SQL言語を使用して、データベースを操作する事が可能です。

リレーショナルデータベースとして下記のようなデータベースがあります。

①Oracle Database

②SQL Server

③DB2

④PostgreSQL

⑤MySQL

この中で、今回はPostgreSQLを使用したいと思います。

まずは、PostgreSQLのインストールです。

下記のコマンドを実行して、PostgreSQLをインストールします。

sudo apt-get install postgresql

次にPHP言語からデータベースの操作もしたいので、PHP5をインストールします。

まずは下記のコマンドを実行して、apache2をインストールします。

sudo apt-get install apache2

次に下記のコマンドを実行して、PHP5をインストールします。

sudo apt-get install PHP5

PHP5がインストールされているか確認を実施します。

下記コマンドを実行して、対話シェルを実行します。

sudo php5 -a

php > echo "abcde\n";

abcde

php > echo "abcde\n"

PHP言語が動作している事がわかります。

次にapacheのルートフォルダ(\var\www\)にPHPファイルを作成して、ブラウザ上で表示できれば、動作確認完了です。