個人開発者応援団

top
オンライン職業適性診断を構築

管理番号8
PostgreSQLの用意をしよう





今回のオンライン辞書はPostgreSQLというデータベースを使うので、PostgreSQLをサポートしているレンタルサーバーを探してください。
広告のレンタルサーバーでなくてもいいですが、コスパを考えたらコアサーバーが一番だと思います。

データーベースにMySQLを使う人は多いですが、PostgreSQLは商用利用もされている本格派タイプなので、是非とも検討してください。
今回はPostgreSQLを使いますが、基本的な構文は一致していることが多いです。
ただ若干文法が違ったり、関数が違います。

それでもPostgreSQLでデータベースの基礎を学べば、MySQLは簡単に習得できると思います。
今回は解説させてもらったことを基本に、職業診断システムを構築します。
管理番号9
まずは大まかな設計図を考えよう

システムというのはプログラム言語で構築しますが、構築する前に大まかな設計図をつくることが大切です。
あとからでも微調整はできるので、この時点では細かいところは考えなくても大丈夫です。

今回はオンライン職業適性システムを構築しますが、選択の種類によって適切な職業を導くようにします。
データベースなしでも構築は可能ですが、のちのちのことを考えたらデータベースを使用した方が賢明です。

大まかな設計図を見ます。

・ユーザーの性格を判断します。
・ユーザーの得意分野を診断します。

これらの情報の結果は点数化し、点数によって適した職業を割り出します。
このあたりのアルゴリズムは煎じ詰めたら凄く難しいですが、今回は学習ということで、あまり深掘りはしないようにします。

設計図ができたら次はプログラム言語で実装していきますが、微調整しやすいようにプログラムにはコメントを付けましょう。
phpのコメントは「/」の後に書くだけです。
複雑なコーディングをしていると自分が何をしているか分からなくなることがありますが、コメントアウトすることで思考は整理されますよ。
管理番号10
カラムをつくる(職業)

まずはデータベースのカラムをつくりましょう。
カラムとはデータの入れ物だとイメージしたらいいと思いますが、ここはしっかり入れ物の数と種類を考えなくてはいけません。

今回は職業系統をデータベースに格納しますが、ハローワークの資料を参考にしましたが、一部変更しました。

・管理業務
・研究業務
・技術業務
・医療業務
・教育業務
・介護ケア業務
・事務業務
・販売業務
・営業業務
・サービス業務
・警備・保安業務
・運転業務
・タクシー運転手
・肉体労働業務
・工場業務
・工事業務

他にもあると思いますが、今回は大雑把に職業系統を決めました。
これらをデーターベースに格納しますが、カラム名は英文字にします。

今回はA,B,C,D...というカラム名で格納しますが、文章が長くなると予想されるので、型はtextを選択します。

こちらの職種(職業系統)を一部変更しました。
管理番号11
カラムにデータを入れる時はhtmlでフォームを作成した方が便利

直接データベースにデータを入れることも可能ですが、後々のことを考えたらhtmlフォームから登録した方が便利です。

流れとしてはname属性の値を別ファイルに渡す。(同じファイルでもいいが、別ファイルにした方がスッキリする)
受け取った後はデータベースに登録しますが、最初にデータベースを呼び出す必要があります。

//ホスト名 データベース名 ユーザー名 パスワードを指定するが別ファイルで管理した方が使いまわし出来るので楽です
$conn = pg_connect(“host=$dserver dbname=$dbname user=$duser password=$dpass”) or die(“bad”);

このような書式でデータベースを読み出してから、insert文でデータベースに登録します。

$conn = pg_connect(“host=$dserver dbname=$dbname user=$duser password=$dpass”)
or die(“接続不可”);
$sql = “insert into table名 (A,B) values (‘$A’, ‘$B’)”;
$result = pg_query($conn, $sql) or die(“クエリー不可”);

実際に登録するときはすべての職業系統のカラムに登録します。
管理番号12
条件分岐で振り分け

診断内容をデータベースに保存した後は、結果を条件分岐で振り分けます。
いろいろな方法があると思いますが、ここでは比較的単純な条件分岐で振り分けます。

アルゴリズムは性格と得意分野にで結果を決めますが、簡単に説明すれば以下のような条件分岐になります。


if (性格==活発) {
肉体労働業務や工事現場に点数を付与します。
}else if(性格==思慮深い) {
研究業務や技術業務に点数を付与します。
} else {
}

すべては書きませんでしたが、職業診断テストのアルゴリズムについて解説しました。

管理番号13
職業適性診断テストの答えは一つではない

診断テストの結果で向いている職業はある程度分かると思いますが、性格や得意分野だけで職業を決めてしまうのは、少々乱暴だと思っています。
そのため、こちらの職業適性診断テストでは複数の、職業を提案します。
そうすることで、ミスマッチが少なくなる思うからです。

技術的な話に戻ります。

診断テストの結果は別のテーブルに記録しますが、点数が高い方が向いていると判断するアルゴリズムです。
でも点数が高い職業分野をどのように選べばいいのでしょうか?

PostgreSQLにはRANKウィンドウ関数というのがあり、それを利用すると点数が高いものだけ抽出できそうです。

詳しい解説は実際に完成したときに、させていただきます。
暫くお待ちください。