そもそも対応分析の結果に示される座標系はいったい何なんでしょう?そこからすでにわかりません。そこで,いろいろなサイトを調べてみました。わかりやすいかどうかは別にして,参考になりそうなものをいくつかリストします。
- コレスポンデンス分析とは
- コレスポンデンス分析/カテゴリー間の関係を視覚化する分析
- 対応分析法・数量化法III類の考え方
- 対応分析入門 原理から応用まで 解説◆Rで検算しながら理解する
- 【連載】記述的多変量解析 - 対応分析(コレスポンデンス・アナリシス)
基本的な症状は「痛み」です。 内膜症のある場所、大きさ、癒着の程度などによって症状はさまざまですが、主に生理痛や下腹部痛、腰痛、性交痛、排便痛、慢性骨盤痛などが現れます。 痛み以外では、不正出血が見られたり、経血量が多かったり、レバー状の塊が出ることもあります。その結果,このWebAPIは,次のようなXML形式でキーフレーズを返してきます。
<?xml version="1.0" encoding="UTF-8"?>
<ResultSet xmlns="urn:yahoo:jp:jlp:KeyphraseService" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:yahoo:jp:jlp:KeyphraseService http://jlp.yahooapis.jp/KeyphraseService/V1/extract.xsd">
<Result>
<Keyphrase>慢性骨盤痛</Keyphrase>
<Score>100</Score>
</Result>
<Result>
<Keyphrase>下腹部痛</Keyphrase>
<Score>99</Score>
</Result>
<Result>
<Keyphrase>症状</Keyphrase>
<Score>98</Score>
</Result>
<Result>
<Keyphrase>生理痛</Keyphrase>
<Score>97</Score>
</Result>
<Result>
<Keyphrase>不正出血</Keyphrase>
<Score>95</Score>
</Result>
<Result>
<Keyphrase>内膜症</Keyphrase>
<Score>95</Score>
</Result>
<Result>
<Keyphrase>性交痛</Keyphrase>
<Score>93</Score>
</Result>
<Result>
<Keyphrase>排便痛</Keyphrase>
<Score>91</Score>
</Result>
<Result>
<Keyphrase>経血量</Keyphrase>
<Score>89</Score>
</Result>
<Result>
<Keyphrase>癒着</Keyphrase>
<Score>89</Score>
</Result>
<Result>
<Keyphrase>レバー状</Keyphrase>
<Score>88</Score>
</Result>
<Result>
<Keyphrase>腰痛</Keyphrase>
<Score>64</Score>
</Result>
<Result>
<Keyphrase>塊</Keyphrase>
<Score>50</Score>
</Result>
<Result>
<Keyphrase>程度</Keyphrase>
<Score>47</Score>
</Result>
<Result>
<Keyphrase>以外</Keyphrase>
<Score>43</Score>
</Result>
<Result>
<Keyphrase>場所</Keyphrase>
<Score>39</Score>
</Result>
</ResultSet>
作成するアプリのスクリーンショットは以下のようになります。![]() |
| 初画面(id="page1")文章を入力する画面 |
![]() | |||
| キーフレーズを抽出して一覧表示する画面(id="page2") |
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<script src="components/loader.js"></script>
<script src="js/app.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="css/style.css">
<script>
ons.bootstrap();
</script>
</head>
<body>
<ons-navigator var="myNavigator" page="page1.html"></ons-navigator>
</body>
</html>
次にpage1.htmlは次のようになります。
<ons-page id="page1">
<ons-toolbar>
<div class="center">キーフレーズ抽出</div>
</ons-toolbar>
<br />
<div>
<textarea class="textarea" id="sentence" style="width: 100%; height: 300px">
</textarea>
</div>
<div>
<ons-button modifier="large--cta" id="keyphrase-button">キーフレーズ抽出</ons-button>
</div>
</ons-page>
キーフレーズ一覧画面は次のようになります。
<ons-page id="page2">
<ons-toolbar>
<div class="left"><ons-back-button>Back</ons-back-button></div>
<div class="center">キーフレーズ</div>
</ons-toolbar>
<div style="text-align: center">
<ons-list id="keyphrase-list">
</ons-list>
</div>
</ons-page>
最後にapp.jsです。
var gAPPID = 'ここにAPPIDを書く';
$(document).on('pageinit', '#page1', function(){
$('#sentence').val('基本的な症状は「痛み」です。 内膜症のある場所、大きさ、癒着の程度などによって症状はさまざまですが、主に生理痛や下腹部痛、腰痛、性交痛、排便痛、慢性骨盤痛などが現れます。 痛み以外では、不正出血が見られたり、経血量が多かったり、レバー状の塊が出ることもあります。');
});
$(document).on('click', '#keyphrase-button', function(){
var options = {
sentence: $('#sentence').val()
};
myNavigator.pushPage('page2.html', options);
});
$(document).on('pageinit', '#page2', function(){
var page = myNavigator.getCurrentPage();
var sentence = page.options.sentence;
var url = 'http://jlp.yahooapis.jp/KeyphraseService/V1/extract';
$.ajax({
url: url,
type: 'POST',
data: {
appid: gAPPID,
sentence: sentence
}
}).done(function(xml) {
listKeyphrase(xml);
}).fail(function(XMLHttpRequest, textStatus, errorThrown) {
alert("error");
});
});
function listKeyphrase(xml) {
var html = '';
$(xml).find('Result').each(function(){
var Keyphrase = $(this).find('Keyphrase').text();
console.log(Keyphrase);
html += '<ons-list-item modifier="chevron" class="keyphrase">' + Keyphrase + '</ons-list-item>';
});
$("#keyphrase-list").html(html);
var content = $("#keyphrase-list").get(0);
ons.compile(content);
}
ナイーブベイズ分類器を用いた症状から疾患を推定するアプリの開発と評価まず予備実験をやってこの研究を前に進めてよいかどうかを判断することとします。そのために以下の材料を集めます。
@メンタルヘルス無料で自分自身のこころの状態を知るための診断チェック。「メンタルヘルスの悩み相談と無料のメンタルヘルス診断」を謳っている。うつ病,アスペルガー症候群,社会不安障害,サイコパスなど,全部で15の診断ができる。そのほか同じ悩みを持つ話し相手を探すための「話し相手募集」という掲示板や自分の気持ちを自由に呟ける「つぶやき」など,利用者のコミュニケーションを促進する仕掛けがある。
ストレス度診断チェックテスト「全国約120万人のデータをもとに、あなたのストレス度を判定いたします。ストレスレベルに応じて対処法ページへリンクしています」と書いてあるが・・・。制作しているのは株式会社メンティグループという会社。業務内容は「コンテンツ提供」。「ストレス対応,メンタルヘルス対応」などのコンサルティングや研修なども業務内容に入っている。また,代表者はメンタルヘルス関係の著書もある。「主にマネジメントの観点から、官公庁・企業などでストレス・メンタルヘルス対策、パワハラ対策のコンサルティングや研修・講演などを行ってきた」とあるのでまがい物ではなさそう。少し掘り下げて調べてみる価値はあるかもしれない。
自分で出来るストレスチェック株式会社フィスメックという会社がやっている。事業内容は「メンタルヘルス事業,医療関連事業」取引先も警視庁など堅実なところが多い。「現在、多くの医療機関や施設で、ストレス状態を把握するためにさまざまなチェックリストが使用されています。このページでは比較的容易に利用できるセルフチェックリストを、順次紹介していきます」とあるがどのようなチェックリストがあるのか知りたいものだ。
うつ病のチェック診断「脳ナビ」これは辻メンタルクリニックという医療機関がやっているサイト。専門機関だから信用できるだろう。しかし,この診断の出典が記載されていないのは気になる。
うつ度チェック 簡易抑うつ症状尺度(QIDS-J)これはきちんとした根拠に基づいているようだ。
うつ病に使われる心理検査。ハミルトンうつ病評価尺度(HAM-D)とは?こういうのもある。これも「せせらぎメンタルクリニック」という医療機関がやっているので信頼できるだろう。
心理検査代表的な検査手法が紹介されている。これは役に立ちそう。
RESTful APIとは何なのかこのあたりから読んでみよう。さらに、「RESTful APIとは何なのか」からリンクが張られている「Web API」とは何なのか」、「リソース指向アーキテクチャ(ROA)とは何なのか」などにも目を通してほしい。
RESTful Webサービスの基本
https://www.hl7.org/fhir/index.htmlですが、全部英語で分かりづらいです。日本語の資料を見つけたのでリンクを貼っておきます。
http://www.hl7.jp/docs/49seminar_2_HL7.pdfしかし、正直なところ、わかりやすいとは言えません。結局FHIRって何なんだ、と叫びたくなるような内容でした。
Using FHIR to develop a healthcare mobile applicationFHIRだけでなくHL7の開発経緯なども分かってなかなか興味深い論文です。英語も比較的平易です。
http://openweathermap.org/apiこのWebAPIを利用するにはAPI key (APPID)が必要になります。API key を取得するにはユーザ登録が必要です。この画面から登録を行ってAPI key を入手してください。
var config = {
params: {
q: 'Tokyo,jp',
id: '[ユーザID]',
APPID: '[API key]'
}
}
{
"coord":{
"lon":139.69,
"lat":35.69
},
"weather":[
{
"id":803,
"main":"Clouds",
"description":"broken clouds",
"icon":"04n"
}
],
"base":"stations",
"main":{
"temp":275.93,
"pressure":1030,
"humidity":52,
"temp_min":271.15,
"temp_max":281.15
},
"visibility":10000,
"wind":{
"speed":5.7,
"deg":10
},
"clouds":{
"all":75
},
"dt":1480449600,
"sys":{
"type":1,
"id":7619,
"message":0.008,
"country":"JP",
"sunrise":1480368684,
"sunset":1480404486
},
"id":1850147,
"name":"Tokyo",
"cod":200
}
オープンデータ戦略の推進
e-Stat API機能
統計によるオープンデータの高度化これらを使って何ができるか考えてみるのもよいかもしれない。
HTML5モバイルアプリ開発講座 RSSリーダー編このアプリではAjaxを用いて外部のサーバから情報を取得する技術を学びます。
http://s3.asial.co.jp/~monaca/rss.zipダウンロードしたプロジェクトをMonacaでインポートしようとすると
Internal Server Error (500)というエラーメッセージが出ます。どうも古いようです。しかたがありません。チュートリアルを見ながらダウンロードしたソースコードを入力(コピペ)するしかありません。
Neither project_info.json nor config.xml was found. Maybe an old project?
<script>
$.ajax({
url: 'http://s3.asial.co.jp/~monaca/rss/blog.xml',
dataType: 'xml',
})
.done(function(data){
$(data).find('item').each(function(){
var title = $(this).find('title').text();
alert(title);
});
})
.fail(function(err){
alert(JSON.stringify(err));
})
</script>
このサンプルプログラムは以下のサイトから情報を取得しています。http://s3.asial.co.jp/~monaca/rss/blog.xml実は、これがRSSフィードです。ソースを見てください。XMLで情報が記述されれていることがわかるでしょう。
// アプリ起動時の処理
$(function(){
$.ajax({
url: 'http://s3.asial.co.jp/~monaca/rss/blog.xml',
dataType: 'xml',
})
.done(function(data){
var html = '';
$(data).find('item').each(function(){
var pubDate = $(this).find('pubDate').text();
var title = $(this).find('title').text();
var link = $(this).find('link').text();
var description = $(this).find('description').text();
html += createArticleNode(pubDate, link, title, description);
})
$('#articleList').html(html);
})
.fail(function(){
alert(JSON.stringify(err));
})
});
これは、アプリ起動時の処理です。Ajaxを使ってRSSフィード'http://s3.asial.co.jp/~monaca/rss/blog.xml'を読み込んで更新日 pubDate、タイトル title、記事URL link、そして本文 descriptionを取り出してcreateArticleNode関数を使ってhtmlタグ(li要素)を作っています。これをリストの数だけ作ってくっつけてそれをセレクタ'#articleList'で示されるulタグ内に挿入しています。 // 1件分の記事を表示するli要素を生成
function createArticleNode(pubDate, link, title, description) {
var date = new Date(pubDate);
var li =
'<li class="btn">' +
'<a href="' + link + '">' +
'<time>' +
'<span class="date">' + date.getFullYear() + '</span>' +
'<span class="month">' + (date.getMonth() + 1) + '</span>' +
'<span class="year">' + date.getDate() + '</span>' +
'</time>' +
'<div>' +
'<h2>' + title + '</h2>' +
'<p>' + description + '</p>' +
'</div>' +
'</a>' +
'</li>';
return li;
}
$(this).children().each(function(){
if($(this)[0].tagName == "dc:date") {
pubDate = $(this).text();
}
})
PHRを活用したヘルスケアサービス事例これは、第2回クラウド時代の医療ICTの在り方に関する懇談会の資料のようです。電子母子健康手帳の開発でよく目にする株式会社エムティーアイが作成した資料です。
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
<script src="components/loader.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="css/style.css">
<script>
ons.bootstrap();
var images = null;
// ギャラリーから画像のパスを取得する
var getPictureFromGallery = function(onSuccess) {
var options = {
quality: 50,
sourceType : Camera.PictureSourceType.PHOTOLIBRARY,
destinationType: Camera.DestinationType.FILE_URI
};
navigator.camera.getPicture(function(imageURI) {
onSuccess(imageURI);
}, onFail, options);
};
// 写真を撮影して保存する
var getPictureFromCamera = function(onSuccess) {
// デバイスのカメラアプリを利用して撮影し保存
var options = {
sourceType : Camera.PictureSourceType.CAMERA,
saveToPhotoAlbum: true,
correctOrientation:true,
destinationType: Camera.DestinationType.FILE_URI
};
// カメラアプリを起動し、撮影して保存
navigator.camera.getPicture(function(imageURI) {
onSuccess(imageURI);
}, onFail, options);
};
function onFail() {
console.log("写真を取得できませんでした");
}
$(document).on('pageinit', '#main-page', function() {
var onSuccess = function(pictureUrl) {
images = [];
var $img = $('<img>');
$img.attr('src', pictureUrl);
images.push({
element: $img,
label: '無加工'
});
myNavi.pushPage('image.html');
}
$(this).on('click', '.take-from-camera', function() {
getPictureFromCamera(onSuccess);
});
$(this).on('click', '.take-from-gallery', function() {
getPictureFromGallery(onSuccess);
});
});
$(document).on('pageinit', '#image-page', function() {
var elements = images.map(function(image) {
var element = $('<ons-carousel-item><div class="converted-image-label-wrapper"><div class="converted-image-label"></div></div></ons-carousel-item>');
$(image.element).addClass('converted-image');
element.prepend(image.element);
element.find('.converted-image-label').text(image.label);
return element[0];
});
elements.forEach(function(element) {
$('ons-carousel').append(element);
});
setTimeout(function() {
imageCarousel.refresh();
}, 100);
});
</script>
</head>
<body>
<ons-navigator var="myNavi">
<ons-page id="main-page">
<ons-toolbar>
<div class="center">画像変換アプリ</div>
</ons-toolbar>
<br>
<ons-list>
<ons-list-item modifier="chevron" class="take-from-gallery">
<ons-icon icon="ion-images"></ons-icon> ギャラリーから選ぶ
</ons-list-item>
<ons-list-item modifier="chevron" class="take-from-camera">
<ons-icon icon="ion-camera"></ons-icon> カメラで撮影
</ons-list-item>
</ons-list>
<br>
</ons-page>
</ons-navigator>
<ons-template id="image.html">
<ons-page id="image-page">
<ons-toolbar>
<div class="left">
<ons-back-button ons-if-platform="ios">Back</ons-back-button>
</div>
<div class="center">画像</div>
</ons-toolbar>
<ons-carousel var="imageCarousel" class="image-carousel" fullscreen auto-scroll overscrollable>
</ons-carousel>
</ons-page>
</ons-template>
</body>
</html>