ハードルを下げる

NHKの『ガッテン』で慢性疼痛の特集をしていた。はっきりした原因がわからないのに激しい痛みで苦しめられている患者さんが、脳を訓練することで痛みから解放されるという内容だった。

慢性疼痛ははっきりした原因もないのに激しい痛みを感じる病気だ。痛みの原因がないので原因対策では痛みはとれない。ところがそういう病気の人の脳の PET をとってみると大脳皮質の広範な領域で血流が低下している。一方脳の中心部の扁桃核というところは逆に興奮が見られるようなのだ。扁桃核は恐怖や怒りや不安といった感情に関係する神経の領域だ。この領域が興奮することで広範囲の脳の活動が低下し、それが痛みにつながっているらしい。

これとは別に脳の中心部の近くにある側坐核という領域は、快感や報酬と関連している。モルヒネや覚せい剤が効果を発揮するのは最終的にこの側坐核を刺激するからだといわれている。ところで、この側坐核は抑制性の神経線維を扁桃核に送っており、側坐核が興奮すると、扁桃核の活動が低下し、大脳全体の活動が増加する。したがって、側坐核を興奮させてやれば、扁桃核の興奮を抑えることで慢性の疼痛を緩和させることができる。

この側坐核は、しかし、簡単な方法で興奮させることができる。つまり、課題を設定してそれを達成したときの達成感を感じるとき、この側坐核が興奮しているのだ。

先ほどの慢性疼痛の患者も、小さな目標を設定しそれを達成したときの達成感を繰り返すことで側坐核を刺激し慢性疼痛から解放された。激しい腰痛に悩まされていた男性の患者さんは軽い筋トレを繰り返すことで筋トレをやり切ったという達成感を繰り返しているうちに腰痛がなくなってしまった。腰痛で歩くのも大変だった若い女性は階段を1段のぼるという課題から初めて、課題をクリアしているうちに2回まで階段を登れるようになり、スキップできるまでに腰痛が焼失した。激しい頭痛に悩まされていた女性は、書道をしている間は頭痛がないことに気が付き、意識的に書道をするうちに頭痛から解放された。

学習目標がうまく達成できないときは、ほんを読むのもつらくなるが、上手にハードルを下げることによって苦手感を低減できるようになるのではないだろうか。学習の技術にはモチベーションを保つための技術も含まれるのではないか。

[PR]
# by tnomura9 | 2018-05-14 18:45 | 考えるということ | Comments(0)

文字の洪水

何か新しいことを学ぼうとすると、大量の文字の洪水に悩まされる。それらの中から自分に必要な情報を取り出すのは結構骨の折れる仕事だ。世に多くの勉強法の本が流布しているのも、この大量の情報の中から有意義な情報を取り出すにはどうすればいいのかという切迫感に答えてのことだろう。

しかし、本当に必要な情報は文字ではない。必要な情報は文字そのものではなく、文字によってあらわそうと試みられている文字以外の知識や情報なのだ。それらの知識を表現するのに文字は必ずしも適切ではない。実際、文字よりも、文字を使って著者が表現しようとした文字ではないイメージのようなものが本当は必要とされている。

文字情報から、文字ならざる情報を取り出すには、どうしても文字によって喚起される情報のイメージ化が必要だ。文字情報がこのようなイメージ的な知識を脳の中に生成できない限り情報の伝達は不可能だ。全ての文書の情報は一旦脳に取り込まれない限りは役に立たない。

この文字に非ざる情報は、一度文字の情報が脳の中に取り込まれて脳内でそのイメージを作られるまでは、理解されたとは言えない。ところが、脳というものは一度に大量の情報を取得するようにはできていない。また、書かれてあることを理解する速度もそんなには早くない。残念ながら大量の新しい情報を一気に処理する能力を脳は持ち合わせていない。

一方一旦脳に取り込まれた情報を利用するのは非常に高速にできる。神経の伝達速度は遅いかもしれないが、けた外れの並行処理によって、脳はそこに取り込まれた情報を効率的に取り出すことができる。

要するに、脳は全く初めての知識を理解するのは苦手だが、一度脳に取り込まれた知識を検索したり加工したりすることには長けているのだ。

このことから、初めての知識を習得する際には、その大量の文字情報の中から手掛かりとなるイメージを脳に作るということが大切になることが分かる。それは、大量の情報から限られた範囲の知識を脳に入力し、それに習熟するということで成し遂げられる。言い換えると大量の情報の中から少量の知識を選び出し、理解して、さらにそれが反射的に出てくるまで繰り返すということでその知識に慣れる必要があるということだ。

こうやって、理解のきっかけとなる少量の知識を自家薬籠中の物としておくことで、大量の文字情報に漕ぎ出すための橋頭保にすることができる。

新しい知識を学ぶときは一気に習得しようとせず、関連する小さな知識が簡単に理解できるようになるまで時間をかけて、それをアンカーにして知識を広げていくことが肝要だ。

[PR]
# by tnomura9 | 2018-05-03 16:02 | 考えるということ | Comments(0)

固定ページ毎にサイドバーの内容を変える。

WordPressでブログではなくてホームページを作成するときには、ページ毎にサイドバーの内容を変えたいときがある。例えば、親ページに複数の子ページがあるとき、子ページのリストを親ページや子ページのサイドバーに表示したい場合などだ。

これは、WordPress の標準の機能にはないので、WooSidebars というプラグインを使った。プラグインをインストールし有効化すると、外観メニューのサブメニューに「ウィジェットエリア」というメニューができている。

これををクリックして「新規ウィジェットエリア」を作る。ウィジェットを作成するときに条件を設定するが、条件が「固定ページ」の場合固定ページのリストが表示されるので、メニューをサイドバーに表示したい固定ページのチェックボックスをチェックする。

「有効化」ボタンで新しい「ウィジェットエリア」が作られるが、それは、「ウィジェット」-「ウィジェット一覧」を選ぶと表示される。そのウィジェットの中に「ウイジェット」の「ナビゲーションメニュー」をドラッグアンドドロップする。ナビゲーションメニューはあらかじめ「外観」-「メニュー」で作成していたものが使える。

じつは、WooSidbars でサイドバーをコントロールできるまでが結構大変だった。WordPress は定型的なサイトを作るときは何の問題もないが、カスタマイズしようとすると、それなりに探したり勉強したりしなくてはならない。できるだけ凝ったトリックを使わないで済むようなウェブサイトの構造設計をするのが、WordPress で作業するときのコツだろう。

[PR]
# by tnomura9 | 2018-04-23 03:22 | WordPress | Comments(0)

WordPress の投稿記事を固定ページにする。

WordPress でホームページを固定ページにしたが、今度はブログをメニューに登録できなくなった。しばらく格闘したが、解決法は本当に簡単だった。タイトルが「ブログ」で本文は白紙の固定ページを作り、メインメニューに登録する。次に、「設定」-「表示設定」メニューでホームページを固定ページにするラジオボタンをクリックし、「投稿ページ」のドロップダウンリストにその白紙の「ブログ」ページを設定するだけだった。簡単!

WordPress でウェブサイトを作ると、HTMLで作った時よりかなり反応が遅くなるが、作成が驚異的に簡単になる。しばらく、WordPress マイフィーバーが続きそうだ。

[PR]
# by tnomura9 | 2018-04-22 12:29 | WordPress | Comments(0)

XAMPP と WordPress

WordPress を使ってみたくなったので、XAMPPWordPress をダウンロードしてきた。

まず、日本語版 XAMPP をインストールした。Windows のスタートメニューで Apache と MySQL を起動してから XAMPP Control Panel ブラウザに localhost でアクセスしたら XAMPP のダッシュボードが無事表示された。

XAMPP のダッシュボードの phpMyAdmin リンクをクリックして phpMyAdmin 画面に移り、user accounts タブをクリックして user 管理画面を表示、add user account リンクをクリックし次の情報を入力、実行ボタンでアカウントを作成した。

User name : wpdb
Host name : localhost
パスワード :
同名のデータベースを作成してすべての特権を与えるにチェック
クローバル特権 check all にチェック

次に、ダウンロードフォルダー内の wordpress-4.9.5-ja.zip を選択し全てを展開する。展開先のターゲットは C:\xampp\htdocs にする。展開が終わったらブラウザで localhost/wordpress をするとインストール画面がでるので、

データベース名 : wpdb
ユーザ名 : wpdb
パスワード :

を入力 WordPress をインストールする。ブラウザで localhost/wordpress/wp-login.php にアクセスすると WordPress のダッシュボードが現れる。あとは次のサイトを見ながら WordPress の使い方を学習することができる。


HTTPファイルをコツコツ書いていってもできないようなホームページが WordPress ダッシュボードだけでさくさく作れるのに驚かされる。localhost からしかアクセスできないが、WordPress の練習用には充分だろう。

[PR]
# by tnomura9 | 2018-04-20 08:30 | XAMPP | Comments(0)

ipython --pylab

ipython に --pylab コマンドラインオプションをつけて起動してみた。こうすると、次の例のように円周率の pi や linspace 関数や plot 関数や畳み込み関数の convolve など数学関連の関数がモジュール指定なしに動作しているようだ。数学の教科書を読むときに便利かもしれない。

C:\Users\******>ipython --pylab
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]

Type 'copyright', 'credits' or 'license' for more information
IPython 6.2.1 -- An enhanced Interactive Python. Type '?' for help.
Using matplotlib backend: TkAgg

In [1]: x = linspace(0,6*pi)

In [2]: y = sin(x)

In [3]: z = sin(2*x)

In [4]: a = exp(-0.25*x)

In [5]: plot(x,y)
Out[5]: [<matplotlib.lines.Line2D at 0x2498e0042b0>]

In [6]: plot(x,z)
Out[6]: [<matplotlib.lines.Line2D at 0x2498e071668>]

In [7]: plot(x,a)
Out[7]: [<matplotlib.lines.Line2D at 0x2498e06f780>]

In [8]: plot(x,convolve(a,y)[0:50])
Out[8]: [<matplotlib.lines.Line2D at 0x2498e07ffd0>]

In [9]: plot(x,convolve(a,z)[0:50])
Out[9]: [<matplotlib.lines.Line2D at 0x2498e085a20>]

In [10]: close()

インパルス応答関数が指数関数のCR回路に正弦波を入力すると、高周波のほうが振幅が小さくなることが分かる。

上の実行例でグラフが記述できるのだが、ipython の使い方のメモということで画像は添付していません。使い方が分かるようになるためには、こういう単純な例を繰り返し実行させて手になじませる必要があるようだ。


[PR]
# by tnomura9 | 2018-04-18 12:57 | Python | Comments(0)

Python によるデータ分析入門

『Pythonによるデータ分析入門』Wes Machinney 著を一通り通読した。この本は一体どういう本なのだろうか。それは、巻末の著者紹介を読めばわかる。以下に引用する。

著者紹介
Wes McKinney (ウェス・マッキニー)
ニューヨークを拠点に活動するデータハッカー兼起業家。MITで数学を専攻し、2007年に卒業した後は、コネチカット州グリニッジのAQR Capital Management でクオンツ運用に従事。使いにくいデータ分析ツールに辟易し、2008年に Python を覚えて、のちに pandas と呼ばれることになるプロジェクトを始める。現在 Python の科学コミュニティーのアクティブメンバーであり、データ分析、金融、統計計算アプリケーション部門での Python 推進者でもある。

つまり、この本は金融関係のデータマイニングに Python を使う人のための本だ。それ以外には、数値データを統計処理する研究者にも有用だろう。管理人は残念ながらそのどれにも該当しない。

この本は pandas を使いこなせるようになるための教科書だ。ただ、pandas というライブラリの使い方を学ぶだけでは使えるようにはならないようだ。pandas を使いこなせるようになるためには IPython、Numpy 、matplotlib などのライブラリの知識も必要だ。これらのライブラリが有機的に pandas と組み合わされることによって。数値データの統計的な分析を効率的に行うことができる。

この本では、Ipython、Numpy、pandas、matplotlib という4つの Python のモジュールが有機的に解説されていて、pandas を用いたデータ分析が実践的に行えるようなるように構成されている。

Python で金融データの処理や、統計計算をしてみたいと思う人にはお勧めの一冊ではないだろうか。また、AI を使ってみたいと思って Python を学ぶ人にも必読の書だろう。

しかし、単に Python を使ってみるという目的のためにもこの本は示唆的だ。まず、IPython は、Python を対話的に使うだけでなく、シェルとしても使うことができるのが分かる。IPython 上でデータを扱うためのファイル操作を含めてすべてを行えるのだ。Numby は ndarray という多次元の数値データ型を提供し、複数の数値データを全くループを書くことなく自由に加工することが可能になっている。また、matplotlib を使うことによってこれらのデータを簡単に図表化することによって数値データの可視化を行える。pandas は Excel に似た表計算のデータを Python で簡単に処理するためのモジュールだ。pandas の最大の利点は欠落データのある数値データを簡単に取り扱えることだろう。実世界のデータを扱うときに欠落データの処理は必発だ。

対話的な環境で、複雑なデータをオブジェクトにくるんで、ループなどの制御構造なしにリアルタイムに処理するというスキーマは Python 以外のプログラム言語を使う際にも共通する重要な戦略になるような気がする。

[PR]
# by tnomura9 | 2018-04-11 22:11 | Python | Comments(0)

Python と JSON

Python では json モジュールをインポートすると、簡単に JSON のデータを Python のオブジェクトに変換できる。これをテストするのに自分で JSON データを作るのは面倒だし、面白くないのでオープンデータを利用してみた。次のサイトでは無料で API を使って鉄道路線に関する JSON データを利用することができる。


HeatRails Express のホームページの API タグをクリックすると路線データを取得するための API の説明が記載してある。今回は単に JSON データが欲しいだけなので、「駅情報取得 API」のサンプルレスポンスの「新宿」に合致する駅の情報の一覧のクエリのリンクを右クリックして JSON ファイル json.json をダウンロードした。ファイル名は sinjuku.json に変更した。

Windows のスタートメニューから [Anaconda3 (64-bit)] - [Anaconda Prompt] を選択。ダウンロードした sinjuku.json のあるディレクトリに移動し、ipython を起動した。

まずファイルのデータを文字列 sinjuku_file に取り込む。
In [1]: sinjuku_file = オープン('sinjuku.json','rt',encoding='utf-8').リード()

*オープンとリードは実際には英小文字で入力

json モジュールをインポートし、
In [2]: import json

文字列をオブジェクトの sinjuku に変換する。
In [3]: sinjuku = json.loads(sinjuku_file)

sinjuku オブジェクトの内容は次のようになる。
In [4]: sinjuku
Out[4]:
{'response': {'station': [{'line': 'JR中央線',
'name': '新宿',
'next': '大久保',
'postal': '1600022',
'prefecture': '東京都',
'prev': '代々木',
'x': 139.700464,
'y': 35.689729},
{'line': 'JR埼京線',
'name': '新宿',
'next': '池袋',
'postal': '1600022',
'prefecture': '東京都',
'prev': '渋谷',
'x': 139.700464,
'y': 35.689729},
.....

response と station のキーは不要なので取り除くと検索結果のオブジェクトのリストが得られる。
In [5]: sinjuku = sinjuku['response']['station']

このリストから内包表記で路線と前後の駅のタプルのリストを作る。
In [6]: [(stn['line'],stn['prev'],stn['next']) for stn in sinjuku]
Out[6]:
[('JR中央線', '代々木', '大久保'),
('JR埼京線', '渋谷', '池袋'),
('JR山手線', '代々木', '新大久保'),
('JR湘南新宿ライン', '池袋', '渋谷'),
('JR総武線', '大久保', '代々木'),
('京王線', None, '笹塚'),
('小田急小田原線', None, '南新宿'),
('東京メトロ丸ノ内線', '新宿三丁目', '西新宿'),
('都営大江戸線', '代々木', '都庁前'),
('都営新宿線', None, '新宿三丁目')]

JSON データをオブジェクトに変換するのも、オブジェクトの処理も簡単だった。

[PR]
# by tnomura9 | 2018-03-27 07:53 | Python | Comments(0)

jupyter notebook

Anaconda をインストールしたら、Python の対話環境である jupyter notebook を使うことができる。これはブラウザで Python のコードを入力し、実行、保存ができるようになっている。

起動はスタートメニューから [Anaconda3 (64-bit)] - [Jupyter Notebook] を選択する。ウェブベースのアプリケーションなのでウェブサーバーが立ち上がるまでしばらく待たされるが、やがて、ウェブのページが自動的に表示される。

これはエクスプローラと操作が似ている。フォルダーの名称をクリックするとそのフォルダーが開く。新しいフォルダーはツールバーの [New] ドロップダウンリストから Folder を選ぶ。フォルダーの名称は最初 Untitled になっているが、フォルダーのチェックボックスをクリックすると、ツールバーに Rename ボタンが現れるのでそれをクリックするとフォルダーの名称変更ができる。フォルダーの削除はゴミ箱アイコンをクリックする。

Python のコードを保存したいフォルダーを開いたら、ツールボックスの [New] ドロップダウンリストをクリックし Python 3 を選択すると、新しいノートブックが表示される。ノートブックのメニューバーの Help リストの User Interface Tour を選択すると notebook の各種のコントロールの簡単な説明を見ることができる。

Notebook のコード表示エリアには最初テキストボックスが一つしか表示されていないが、そこをクリックすると Python のコードを入力することができる。まず、

print('hello, world')

と入力してリターンキーを押すと、カーソルが次の行に移動するだけでコードは実行されない。これは入力が複数行のものも作成するためである。

テキストエリアのコードを実行するにはツールバーの [Run] ボタンをクリックするか、Ctrl-Enter と入力する。コードの実行結果はテキストボックスの下に表示される。入力したコードとその実行結果はひとかたまりで「セル」と呼ばれる。Shift-Enter のショートカットでもコードを実行できるが、コードが実行された後そのセルの下に新しいセルが作成される。

このように一つの notebook には複数のセルを作成できるので、複数のスニペットを一つの notebook で管理することができる。これらのセルはファイルとして保存できる。ツールバーのフロッピーディスクアイコンをクリックするといい。ノートブックの名称変更は Jupyter タイトルの横に表示されているノートブック名をクリックすると変更できる。

ノートブックを終了するときは File メニューの Close and Halt を選択すると、自動的にノートブックのタブも消滅する。フォルダーの表示に戻ると、そこにノートブックのファイルが、.ipynb の拡張子で表示されている。ファイル名をクリックするとノートブックを再び表示させることができる。

セルには Python のコードだけではなく、マークダウンによる文書を記述することができる。セルのタイプをマークダウンに変更するには Cell メニューから [Cell Type] - [Markdown] を選択する。マークダウンで入力した後コード実行と同じように Ctrl-Enter をおすとレンダリングして表示される。再編集はセルを選択し Enter キーをおす。

Jupyter notebook を触ってみた感想は、スニペットの管理には使いやすいかなという感じだ。

ちなみに木星は Jupiter で Jupyter ではない。Google 検索で使い方を検索するときに木星の情報が出てこないので便利だ。

ノートブックの本体はファイルのチェックボックスをチェックした後、ツールバーの [Edit] ボタンをクリックすると見ることができる。驚いたことにこれは普通の JSON のテキストファイルだ。Python の対話型環境の使いやすさはもちろんだが、Web アプリケーションのお手本になるかもしれない。

参考サイト




[PR]
# by tnomura9 | 2018-03-25 00:11 | Python | Comments(0)

Anaconda をインストールした。

『入門 Python 3』を一通り読み終わったので、いよいよ機械学習の勉強を始めようと思って『ゼロから作る Deep Learning』を読み始めたらいきなり NumPy や matplotlib などの外部モジュールが必要だった。Windows の Python では pip もついていないようなので、Windows では機械学習の勉強は無理かとがっかりしていたら、Window 用の Anaconda をインストールすればいいのが分かった。


インストール後に、『ゼロから作る Deep Learning』の次の例を実行してみたら、サインカーブが描画された。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 6, 0.1)
y = np.sin(x)

plt.plot(x, y)
plt.show()

Anaconda には必要なものが全部揃っているようだ。まさに、"batteries are included" だった。

追記

ユーザのディレクトリ名が日本語だとインストールできなかった。ascii 文字列のローカルアカウントを新しく作ったらそちらにはインストールできた。


[PR]
# by tnomura9 | 2018-03-19 08:04 | Python | Comments(0)