前回授業の課題では、制限ページのPROJECTページで1人につき必ず1回はコメントを投稿するというのが課題の内容だった。期日までにコメントを投稿しなかった人が数名いて、評点から1点減点してある。
ところで、あのコメント投稿ページには、氏名を書かずに投稿した人もいたが、一体どうやってコメント投稿の有無を判断できたか、わかるだろうか?
答えは、ログファイル
皆さんインターネットを毎日のように使っている。インターネット上のページは自由に閲覧できて、自分がそのページを見ているなんて誰も知らないと思っているかもしれないが、実は、どのパソコンを経由して、どのページが閲覧されたかということは、すべて記録されている。
例えば、今回の課題では、Pukiwikiを使ってウェブサーバにコメントを送ってもらった。このとき、ウェブサーバには、
access_log
というファイルができる。このファイルの中身はテキストデータ(今、勉強中の文字データのこと)で、次のような情報が書かれている。
192.29.8.70 - xxxxx [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 - xxxxx [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 - xxxxx [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 - xxxxx [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 - keito [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 - xxxxx [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 - xxxxx [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 - xxxxx [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アドレス等のデータは適当に変更してある)
つまり、ログファイルを見れば、いつどのコンピュータから、ウェブサーバにアクセスがあったのか分かってしまうのだ(なので、この授業では出席をとっていない)。
さらに、大学などのネットワークでは、学内のどのコンピュータから、学外のどのコンピュータにアクセスがあったかということも、全てログファイルに残っている。
プライバシーの問題もあるので、通常、こういうデータはそうそう公にされることはないが、自分がインターネットを介してどのページにアクセスしたかは、ネットワークの管理者ならば知ることができるということは覚えておこう。
前回授業では、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つにうまく収まる
ということだ。これを、http://bean.bio.chiba-u.jp/joho/index.php?joho22に添付してある、ログファイルを使って操作してみよう。操作の流れは、
検索語: 半角スペース1つ 置換語: タブ (編集画面で1つタブを入力し、それをコピーして、置換語を入力する場所にペースト)
これだけの数の検索・置換も、一瞬で終わるはずだ。
作業が終わったら、アカウントのところに注目して、誰がどの発言をしているかを見てみよう。
以上のように。大量データの処理に、検索・置換は非常に有効!!であることは理解しておこう。
検索・置換はコンピュータの持つ最も基本的で便利な機能であり、Wordにも、Excelにも標準装備されている。
上の例では、 HumptyをLumptyに置き換えるという、ごく簡単な操作を行った。では、もっと複雑な処理をするにはどうすれば良いか?たとえば、前回の予習課題を考えてみよう。
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"(大文字・小文字を区別しない場合は当てはまる)
レポートでは、実際にこの検索置換をやってくれた人がいて、そういう人は、
検索語: Humpty 置換語: Pumpty
検索語: Dumpty 置換語:Pumpty
という検索置換を2回繰り返したはずだ。
たしかに、こうやって何度も検索・置換を繰り返すのも1つの方法だろう。しかし、もっと便利な方法もある。それが、正規表現を使った検索・置換だ。
正規表現は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 togethe r 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」などがマッチする。 * パターンに0回以上連続でマッチ 例: an*d aで始まり0回以上のnの繰り返しを含みdで終わる文字列。 「and」「annd」などがマッチする。 + 直前のパターンに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 改行 <<データ整形には必須>> \ 退避修飾 (エスケープ) 正規表現記号の有効/無効の制御 \^, \$, \*, \+, \?, \\ のように「^」「$」などメタ文字としての意味を打ち消して 単なる文字(リテラル)として指定したいときに使用。 <梶田注:日本語キーボードでは半角の¥マークです>※:上の解説はK2Editorのヘルプファイルとマック版JeditXのヘルプファイルを参考にして作成した。MS Wordのワイルドカード検索も正規表現の文法にかなり近いものを使っている。
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