私達は日常的にインターネットを、様々な方法で利用している。ネットを利用する場合、多くの場合、
このとき、インターネット上のサーバと、自分の使っているコンピュータの間で、どんな情報がやり取りされているか、知っているだろうか?例えば、インターネット上の匿名掲示板に、匿名で記事を投稿した場合、個人が特定される場合はあるだろうか?
皆さんがインターネット上のページは閲覧するとき、自分がそのページを見ているなんて誰も知らないと思っているかもしれないが、実は、どのパソコンを経由して、どのページが閲覧されたかということは、すべてログファイルに記録されている。
例えば、この授業ではmoodleを使ってレポートを提出してもらっているが、moodleからは次のような情報が閲覧できる。
こういう記録のことを、'アクセスログ''と呼ぶ。また、moodleに限らず、インターネットを介してウェブサーバにアクセスすると、ウェブサーバには、
access_log
というファイルができる。このファイルの中身はテキストデータ(今、勉強中の文字データのこと)で、次のような情報が書かれている。
192.29.8.70 - john [30/Apr/2009:15:41:26 +0900] "POST /joho/index.php HTTP/1.1" 200 18644 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" 192.29.8.69 - tom [30/Apr/2009:15:42:18 +0900] "POST /joho/index.php HTTP/1.1" 200 6124 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1)" 192.29.8.69 - tom [30/Apr/2009:15:43:17 +0900] "POST /joho/index.php HTTP/1.1" 302 - http://bean.bio.chiba-u.jp/joho/index.php?cmd=edit&page=joho21%2FXXXXXX "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; InfoPath.1)" 192.29.8.70 - jane [30/Apr/2009:15:43:39 +0900] "POST /joho/index.php HTTP/1.1" 302 - http://bean.bio.chiba-u.jp/joho/index.php?cmd=edit&page=joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" 192.29.8.1 - jane [30/Apr/2009:15:52:38 +0900] "POST /joho/index.php HTTP/1.1" 200 18516 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" 192.29.8.50 - john [30/Apr/2009:15:52:42 +0900] "POST /joho/index.php HTTP/1.1" 200 6124 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" 192.29.8.8 - john [30/Apr/2009:15:52:45 +0900] "POST /joho/index.php HTTP/1.1" 200 6124 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" 192.29.8.50 - tom [30/Apr/2009:15:52:47 +0900] "POST /joho/index.php HTTP/1.1" 200 6124 http://bean.bio.chiba-u.jp/joho/index.php?joho21%2FXXXXXX "Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8" (IPアドレス等のデータは適当に変更してある)
この中のIPアドレスというのは、インターネットに繋がっているコンピュータ1台1台につけられた、番号のことだ。つまりログファイルを見れば、いつどのコンピュータから、ウェブサーバのどのページにアクセスがあったのか、さらには、どんな文字が入力されて送信されてきたかが分かってしまう。
さらに、大学などのネットワークでは、学内のどのコンピュータから、学外のどのコンピュータにアクセスがあったかということも、全てログファイルに残っている。自分がインターネットを介してどのページにアクセスしたかは、ネットワークの管理者ならば知ることができるということは覚えておこう。
試しに、右のページにアクセスしてみよう → http://seki.jpn.org/ssi/env.html 。皆さんのコンピュータから、インターネットを介して送信されている情報の一部が、表示されるだろう。
ただ、安心してほしい。これらの情報は、インターネットを介した接続を正常に行うためにやりとりされているものであって、IPアドレスが分かったからといって、個人が特定される訳では無い。しかし、刑事事件などの大きな問題があって、警察などからサーバの管理者に情報公開の要請があった場合は別だ。
また、プロキシーサーバを中間におけば、自分のコンピュータのIPアドレスを或る程度は隠すことができる。しかし、信用できるプロキシサーバを使わないと、かえって、自分が送受信している個人情報を、第三者に知られてしまうことにもなりかねない。
前回授業では、K2Editorというテキストエディタを使って、テキストデータの検索・置換を体験してもらった。「検索・置換」がよく分からなかったという人もかなりの数いたので、もう一度簡単におさらいしておこう。(前回授業を「おそい」と感じた人は、この部分は飛ばしてもいい。今日の課題でもやっていてほしい)。
コンピュータはとても便利だが、扱うデータがすぐに膨大になってしまい、人間の頭だけでは情報の整理が追いつかなくなることがある。例えば、コンピュータの中から自分の必要とするファイルを見つけ出すのは、一つ一つフォルダを目で探すと、けっこう時間のかかる作業になってしまう。そんなとき便利なのが、前回学習した
検索 と 置換
だ。下に演習を3つ用意しておいたので、各自、やってみて欲しい。
検索と置換は、ほとんどのソフトウェアで使える基本技だ 大きい文書の中で特定の文字を探したいときなどは、すぐに検索しよう また、同じ文字をいくつも変更する場合は、置換しよう
同じように、検索・置換をK2Editorでやってみよう。この後、正規表現を使った検索置換を勉強するが、まずは、通常の置換から。
Lumpty Dumpty sat on a wall. Lumpty Dumpty had a great fall. All the king's horses and all the king's men Couldn't put Lumpty together again.このテキストの中のLumptyは実はスペルミスで、Humptyだった。そこで、全てのLumptyをHumptyに修正したい。
検索語: Lumpty 置換語: Humpty(大文字小文字の区別、ファイルの先頭からの横のボックスをチェックすることも忘れずに。正規表現をチェックしてあっても、この場合は影響は無い)
非常に大きなデータファイルであっても、検索・置換は一瞬にして終わる
ということだ。もし検索・置換をやらなかったとしたら、
1行ずつ目で検索語を探し、 見つかった検索語を消して、置換語を1つずつペーストする
なんていう面倒なことをしなくてはならない。
前回授業でやったもう一つの大事な点は、
タブで区切られたテキストデータをエクセルにコピーペーストすると、マス目の1つ1つにうまく収まる
ということだ。
タブというのは、キーボードの左端にある「Tab」と書かれたキーを押すことで入力できる、ある種の空白文字のことだ。この空白文字の扱いはアプリケーションソフトの種類によって異なっており、
では、下のデータ(東葛地域における空間放射線量の測定結果 単位は μSv/h。http://www.pref.chiba.lg.jp/taiki/press/2011/230602-toukatsu.htmlから抜粋)を使って実際に操作してみよう。操作の流れは、
検索語: , 置換語: タブ (編集画面で1つタブを入力し、それをコピーして、置換語を入力する場所にペースト)
これだけの数の検索・置換も、一瞬で終わるはずだ。
作業が終わったら、放射線量の順に並び替えてみよう
測定値*(μSv/h) ,,,, 測定地点名,地上 1.0m,地上 0.5m,地面の形状 ,測定日天候 野田市桐ヶ作(二川小学校),0.09,0.1,土,5月31日晴 野田市野田(野田幼稚園),0.13,0.13,土,5月31日曇り 野田市木野崎(福田保育所),0.23,0.25,土,5月31日晴 柏市松葉町(松葉第一公園),0.49,0.54,土,5月31日晴 柏市千代田(千代田町公園),0.42,0.47,土,5月31日晴 柏市大津ヶ丘(大津ヶ丘中央公園),0.33,0.35,土,5月31日晴 我孫子市白山(我孫子第四小学校),0.3,0.31,土,5月31日曇り 我孫子市中里(湖北小学校),0.2,0.2,土,5月31日晴 我孫子市布佐平和台(布佐南小学校),0.35,0.33,土,5月31日晴 松戸市常盤平西窪町(常盤平保育所),0.18,0.19, 土,6月1日曇り 松戸市小金(小金保育所),0.24,0.24,土, 6月1日曇り 松戸市二十世紀が丘梨本町(二十世紀公園),0.34,0.36, 芝生, 6月1日曇り 流山市江戸川台東(江戸川台保育所),0.24,0.26, 土, 6月1日曇り 流山市流山(流山小学校),0.32,0.34, 土, 6月1日曇り 流山市名都借(名都借保育所),0.28,0.28, 土,6月1日曇り 鎌ケ谷市粟野(北部小学校),0.27,0.29, 土,6月1日曇り 鎌ケ谷市中央(鎌ヶ谷小学校),0.24,0.25, 土,6月1日曇り 鎌ケ谷市道野辺中央(道野辺保育園),0.17,0.17, 土, 6月1日曇り
以上のように。大量データの処理に、検索・置換は非常に有効!!であることは、忘れないでおこう
Humpty Dumpty sat on a wall. Humpty Dumpty had a great fall. All the king's horses and all the king's men Couldn't put Humpty together again.という内容のテキストに対して、
前回課題の内容は、「」の中の言葉の意味を考えてもらうことがポイントだった。例えば、
「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」
とはどういうものかというと、上の例では、 Humpty Dumpty がそれに対応する。他にどんな文字列が 「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」になりうるか、自分で考えてみよう。
当てはまる語: "empty" "ptylos" "optymous" 当てはまらない語: "emp ty" "puty" "Ptylo"(大文字・小文字を区別しない場合は当てはまる)
「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」という表現がどうして便利かというと、もし、この表現で検索文字を指定できたら、上のテキストに対して1回の置換操作で、HumptyDumptyの両方をPumptyに置換できる。
こういう便利な表現が、正規表現だ。
正規表現はIT用語辞典によると、
文字列のパターンを表現する表記法。文字列の検索・置換を行なうときに利用される。
検索や置換で文字そのものを検索・置換するのでは無く、パターンを検索・置換するものということだ。(「正規」という言葉に特に意味があるわけでは無いので、気にしなくてもよい)
正規表現による検索・置換はテキストエディタを利用する醍醐味であると言える。
習得できれば、大学生活中も、社会に出てからも、様々な場面で役立つこと間違いない!、なぜなら、
手作業で一つ一つ繰り返さなければならない作業が、検索パターンと置換パターンを考えるという知的作業に一変する
この授業で是非とも習得して欲しい。
Humpppppty Dumpppppppty sat on a wall. Humpppty Dumpppppty had a great fall. All the king's horses and all the king's men Couldn't put Humpppppppppppty together again.
上の テキストをみると、pがたくさん連続している場所があることが分かる。どうも、手入力するときに、"p"をいくつも連続で入力してしまったようだ。
2つ以上pが連続しているところは、全てpを1つにしたい。
そんなとき、例えば
1回目 検索語:pp 置換語: p 2回目 検索語:pp 置換語: p
という検索置換を何度も繰り返すのも1つの手ではあるが、次のような正規表現を使えば、1回で処理が済む
検索語: p+ 置換語: p
ここで出てきた
+
という記号が正規表現の基本表現のうちの1つだ。この"+"の意味は、
直前のパターン(文字そのものや、正規表現で表された文字列)の1回以上連続するもの
ということだ。例えば、
an+d
という正規表現は、 and annd annnnnnnnnnnd には一致するが(このことを、「マッチ」するという)、 ad
add adn
などには一致しない。
Humpty Dumpty sat on a wall. Humpty Dumpty had a great fall. All the king's horses and all the king's men Couldn't put Humpty together again.
このテキストでは、手入力するときに、半角スペースをいくつも連続で入力してしまったようだ。
そこで、2つ以上半角スペースが連続しているところは、全て半角スペース1つにしたい。
これを正規表現を使ってやってみよう。
ヒントは、
[ ]+ |
正規表現には、上に示した以外にも様々な命令がある。K2Editorを立ち上げて、メニューバーからヘルプを表示させ、画面をスクロールして検索・置換に関する説明を見ると、正規表現について様々なことが書いてある。ヘルプにある説明はかなり分かりやすく書かれているのだが、これまで全く正規表現に触れたことの無い人が、この説明を理解するのは不可能だろう。前回の予習課題は、ヘルプファイルに書かれているような言葉の意味を考えて貰ったものだ。そこで、ヘルプファイルから、重要な点をいくつか抜き出して、例をあげて説明する。
注) 例年、「マッチする」という言葉が分かりにくいという質問が出るので、下に正規表現を使った検索語がマッチする場合と、マッチしない場合の例を挙げておく。
正規表現を使った検索語: an+d (意味:aで始まり、nが1回以上、任意の数繰り返し、dで終わる文字列) 上の検索語にマッチする文字列の例: and, annd, annnd, annnnnnnnnnnnnnnnnd 上の検索語にマッチしない文字列の例: ad, aid, acid, answered
. | 注:半角ドット1つ | (改行以外の) すべての文字にマッチする |
例: a.d | ||
aで始まり、つぎになにか1文字つづき、dで終わる文字列。 | ||
「and」「add」「a漢d」などがマッチする。 | ||
* | 注:アスタリスク1つ | 直前のパターンに0回以上の連続にマッチ |
例: an*d | ||
aで始まり0回以上のnの繰り返しを含みdで終わる文字列。 | ||
「and」「annd」などがマッチする。 | ||
+ | 注:プラス記号1つ | 直前のパターンに1回以上連続でマッチ |
例: an+d | ||
aで始まり1回以上のnの繰り返しを含みdで終わる文字列。 | ||
「and」「annd」はマッチするが「advance」「add」などはマッチしない。 | ||
[...] | 〔〕の中の文字のグループ | 複数の文字を指定してもいいし、「-」で範囲や、「^」で否定をあらわす |
例: [abc] | ||
文字a,b,cのどれかに一致する文字 | ||
上に挙げた「+」と組み合わせて使われることが多い | ||
例: [abc]+ | ||
「abc」 「abacabcb」 「cccaaabbb」などがマッチ | ||
例: [a-z]+ 半角英文字小文字のみからなる文字列 | ||
例: [A-Za-z0-9]+ 半角英数字のみからなる文字列 | ||
[の次ぎに^をいれると、「文字集合以外」 をあらわすことができる。 | ||
例: [^a-z]+ 半角英数字以外の文字からできている文字列 | ||
文字aからz(半角小文字)以外の文字にマッチ。 | ||
\t | タブ <<エクセルとの合わせ技に必須!>> | |
\n | 改行 |
Humpty Dumpty sat on a wall. Humpty Dumpty had a great fall. All the king's horses and all the king's men Couldn't put Humpty together again.
※一緒に操作すること。今回復習課題に出す操作の多くが含まれている。なお、ポイントは
テキストデータにおける"タブ"はExcelの"カラム(列)の区切りに相当する
ということ。タブで区切られたテキストデータは、エクセルにコピー・ペーストすることで、カラム(列)で区分されたデータとして扱う事が出来る。
というテキストをコピーして、エクセルにペーストすると、
リンゴ ミカン ナシ スイカ モモ ブドウ サクランボ イチゴ バナナ
リンゴ ミカン ナシ スイカ モモ ブドウ サクランボ イチゴ バナナ
リンゴ ミカン ナシ
リンゴ<複数の半角空白の連続>ミカン<複数の半角空白の連続>ナシ
<複数の半角空白の連続>をタブに置き換えればいいということだから、
(正規表現チェック) 検索文字 [ ]+ 置換文字 \t
ここまででK2Editorでの操作は終わり。次はエクセルでの操作
いまやった操作は、テキストデータをK2Editorで編集して、エクセルの表にしたというもの。皆さんは簡単にできたけど、実はわりと高度な技。千葉大生100人に聞いて、10人知っているかどうか。。。
これほど世の中でパソコンが普及していても、大半の人は、テキストファイルを編集したことが無いみたい。だから、タブ区切りテキストとエクセルのセルの関係も知らない人が大勢いる。
今後、皆さんは学習や研究の過程でいろんなデータを扱うことになるが、
テキストデータにおけるタブはエクセルのセル間の区切りに対応する
ということを知っているだけで、
大量のデータの一括処理処理やデータの書式統一がとても楽になる
一つ一つコピー・ペーストしたり、目で探しだすのもいいけれど、テキストエディタによる一括整形でラクしたいものだ。
今日から2回ほど、表計算ソフトの代表ともいえるExcel(エクセル)の操作を習得する。表計算ソフトは、コンピュータに作らせた表の上に数値を記入して計算させるもの。手計算では、表の中の一つの数値を変更したら他の数値も全てもう一度計算し直さなければならない場合も、表計算ソフトを使うと、他の数値は自動的に再計算される。このアイデアは、ハーバード大学の学生であったDaniel Bricklinが1979年が思いつき、VISICALCというソフトウェアとして実現したものだ。その後、表計算ソフトは、DOS/V機(日本ではPC-98)におけるLOTUS-1-2-3やWindowsにおけるMicrosoft Excelとして発展してきた。表計算ソフトは、ハードウェアの普及を促進したということで、パーソナルコンピュータにおけるキラーソフト(キラーアプリ)と呼ばれている。
5 8 1 2 3 4 5 6 7 8