編集中です: 正規表現を用いたテキストデータの一括検索・置換

第4回授業の獲得目標: [worried]

  1. ウェブページ経由で送信されるデータを知り、セキュリティに関心を持つ
  2. 大量データ一括処理には検索・置換が有効であることを理解する
  3. 正規表現とはどのようなものかを理解し、テキストエディタによる正規表現検索、置換の便利さを実感する
  4. テキストエディタとエクセルの間でのデータの共有方法を習得する
  5. エクセルによる簡単な表計算の方法を習得する

【セキュリティ】ウェブページ経由で送信されるデータ: [smile]

私達は日常的にインターネットを、様々な方法で利用している。ネットを利用する場合、多くの場合、

このとき、インターネット上のサーバと、自分の使っているコンピュータの間で、どのような通信記録が残るか知っているだろうか?今日、最初のグループワークがmoodleにあるので見て欲しい。演習1(出席確認演習)に書かれた事例について、グループディスカッションを5分程度行い、その後、自分の判断をmoodle経由で送信しよう。

ログファイル

皆さんがインターネット上のページは閲覧するとき、自分がそのページを見ているなんて誰も知らないと思っているかもしれないが、実は、どのパソコンを経由して、どのページが閲覧されたかということは、すべてログファイルに記録されている

例えば、この授業では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アドレスを或る程度は隠すことができる。しかし、信用できるプロキシサーバを使わないと、かえって、自分が送受信している個人情報を、第三者に知られてしまうことにもなりかねない。

大量データ一括処理には検索・置換が有効!! [smile]

前回授業では、K2Editorというテキストエディタを使って、テキストデータの検索・置換を体験してもらった。「検索・置換」がよく分からなかったという人もかなりの数いたので、もう一度簡単におさらいしておこう。(前回授業を「おそい」と感じた人は、この部分は飛ばしてもいい。今日の課題でもやっていてほしい)。

検索と置換 はいろんなソフトウェアで使える 便利技

コンピュータはとても便利だが、扱うデータがすぐに膨大になってしまい、人間の頭だけでは情報の整理が追いつかなくなることがある。例えば、コンピュータの中から自分の必要とするファイルを見つけ出すのは、一つ一つフォルダを目で探すと、けっこう時間のかかる作業になってしまう。そんなとき便利なのが、前回学習した

検索 と 置換

だ。下に演習を3つ用意しておいたので、各自、やってみて欲しい。

K2Editorでの検索・置換 :【復習】

同じように、検索・置換をK2Editorでやってみよう。この後、正規表現を使った検索置換を勉強するが、まずは、通常の置換から。

  1. 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に修正したい。
    数が少なければ手作業でやってもいいが、こういうときには、迷わず、一括検索・置換。
  2. メニューバーの「検索」から「置換」を選んで、検索ウィンドウを開き、検索語と置換語を入力
    検索語: Lumpty
    置換語:  Humpty
    (大文字小文字の区別、ファイルの先頭からの横のボックスをチェックすることも忘れずに。正規表現をチェックしてあっても、この場合は影響は無い)
  3. 「全置換」のボタンをクリックすると、対象としているテキストの中から、「Lumpty」が全て検索され、「Humpty」に置換される。
    こんな簡単な操作だが、大切なのは、

    非常に大きなデータファイルであっても、検索・置換は一瞬にして終わる

    ということだ。もし検索・置換をやらなかったとしたら、

    1行ずつ目で検索語を探し、
    見つかった検索語を消して、置換語を1つずつペーストする

    なんていう面倒なことをしなくてはならない。

もう1つの演習: テキストデータをタブ区切りにして、エクセルで閲覧

前回授業でやったもう一つの大事な点は、

タブで区切られたテキストデータをエクセルにコピーペーストすると、マス目の1つ1つにうまく収まる

ということだ。
タブというのは、キーボードの左端にある「Tab」と書かれたキーを押すことで入力できる、ある種の空白文字のことだ。この空白文字の扱いはアプリケーションソフトの種類によって異なっており、


では、下のデータ(東葛地域における空間放射線量の測定結果 単位は μSv/h。http://www.pref.chiba.lg.jp/taiki/press/2011/230602-toukatsu.htmlから抜粋)を使って実際に操作してみよう。操作の流れは、

これだけの数の検索・置換も、一瞬で終わるはずだ。
作業が終わったら、放射線量の順に並び替えてみよう

測定値*(μ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日曇り  

以上のように。大量データの処理に、検索・置換は非常に有効!!であることは、忘れないでおこう

正規表現と友達になろう [smile]

上の例では、 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"(大文字・小文字を区別しない場合は当てはまる)

「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」という表現がどうして便利かというと、もし、この表現で検索文字を指定できたら、上のテキストに対して1回の置換操作で、HumptyDumptyの両方をPumptyに置換できる。
こういう便利な表現が、正規表現だ。

正規表現はIT用語辞典によると、

文字列のパターンを表現する表記法。文字列の検索・置換を行なうときに利用される。

検索や置換で文字そのものを検索・置換するのでは無く、パターンを検索・置換するものということだ。(「正規」という言葉に特に意味があるわけでは無いので、気にしなくてもよい)
正規表現による検索・置換はテキストエディタを利用する醍醐味であると言える。
習得できれば、大学生活中も、社会に出てからも、様々な場面で役立つこと間違いない!、なぜなら、

手作業で一つ一つ繰り返さなければならない作業が、検索パターン置換パターンを考えるという知的作業に一変する

この授業で是非とも習得して欲しい。

正規表現の演習1:

  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

などには一致しない。

正規表現の演習2: + を使って連続するアンダーバー(_)を一括検索・置換

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のヘルプファイル

正規表現には、上に示した以外にも様々な命令がある。K2Editorを立ち上げて、メニューバーからヘルプを表示させ、画面をスクロールして検索・置換に関する説明を見ると、正規表現について様々なことが書いてある。ヘルプにある説明はかなり分かりやすく書かれているのだが、これまで全く正規表現に触れたことの無い人が、この説明を理解するのは不可能だろう。前回の予習課題は、ヘルプファイルに書かれているような言葉の意味を考えて貰ったものだ。そこで、ヘルプファイルから、重要な点をいくつか抜き出して、例をあげて説明する。

注) 例年、「マッチする」という言葉が分かりにくいという質問が出るので、下に正規表現を使った検索語がマッチする場合と、マッチしない場合の例を挙げておく。

正規表現を使った検索語:  an+d (意味:aで始まり、nが1回以上、任意の数繰り返し、dで終わる文字列)
上の検索語にマッチする文字列の例: and, annd,  annnd, annnnnnnnnnnnnnnnnd
上の検索語にマッチしない文字列の例: ad, aid, acid, answered

正規表現を使った演習問題 3

正規表現を使った検索・置換の練習2 [smile]

※一緒に操作すること。今回復習課題に出す操作の多くが含まれている。なお、ポイントは
        テキストデータにおける"タブ"はExcelの"カラム(列)の区切りに相当する

ということ。タブで区切られたテキストデータは、エクセルにコピー・ペーストすることで、カラム(列)で区分されたデータとして扱う事が出来る。
 Untitled-1.gif というテキストをコピーして、エクセルにペーストすると、Untitled-2.gif

リンゴ     ミカン       ナシ
スイカ   モモ       ブドウ
サクランボ  イチゴ        バナナ
  1. K2Editorを開いて、新規ページに上のデータをペースト
  2. データの並びをじーっと見る
    リンゴ     ミカン       ナシ
  3. 下のようなパターンが見えてくる
     リンゴ<複数の半角空白の連続>ミカン<複数の半角空白の連続>ナシ

    <複数の半角空白の連続>をタブに置き換えればいいということだから、

  4. 正規表現検索・置換を使って
    (正規表現チェック)
    検索文字 [ ]+
    置換文字 \t
  5. 全体を選択してコピーする。

      ここまででK2Editorでの操作は終わり。次はエクセルでの操作 

  6. エクセルで新しいページを開き、左上角のセルをクリックして、
  7. ワークシートの中の左上のセルをクリックして、ペースト。【テキストファイルのデータをエクセルに移動できた

テキストファイルとエクセルの間でのデータのやりとり [smile]

いまやった操作は、テキストデータをK2Editorで編集して、エクセルの表にしたというもの。皆さんは簡単にできたけど、実はわりと高度な技。千葉大生100人に聞いて、10人知っているかどうか。。。

これほど世の中でパソコンが普及していても、大半の人は、テキストファイルを編集したことが無いみたい。だから、タブ区切りテキストとエクセルのセルの関係も知らない人が大勢いる。

今後、皆さんは学習や研究の過程でいろんなデータを扱うことになるが、

      テキストデータにおけるタブはエクセルのセル間の区切りに対応する

ということを知っているだけで、

      大量のデータの一括処理処理やデータの書式統一がとても楽になる [bigsmile]

一つ一つコピー・ペーストしたり、目で探しだすのもいいけれど、テキストエディタによる一括整形でラクしたいものだ。

Excel(エクセル)の操作の基本:表計算 [smile]

今日から2回ほど、表計算ソフトの代表ともいえるExcel(エクセル)の操作を習得する。表計算ソフトは、コンピュータに作らせた表の上に数値を記入して計算させるもの。手計算では、表の中の一つの数値を変更したら他の数値も全てもう一度計算し直さなければならない場合も、表計算ソフトを使うと、他の数値は自動的に再計算される。このアイデアは、ハーバード大学の学生であったDaniel Bricklinが1979年が思いつき、VISICALCというソフトウェアとして実現したものだ。その後、表計算ソフトは、DOS/V機(日本ではPC-98)におけるLOTUS-1-2-3やWindowsにおけるMicrosoft Excelとして発展してきた。表計算ソフトは、ハードウェアの普及を促進したということで、パーソナルコンピュータにおけるキラーソフト(キラーアプリ)と呼ばれている。

Microsoft Excelの各部の名称

excelmeisho.gif

値・数式の入力と計算

  1. セルを一つクリックして、 =1+2 という式を入力 sushiki.gif

セルの参照

  1. セルA1に5, セルB1に8を入力
  2. セルC1をクリックして半角=を入力し、セルA1、せるB1をクリック
    • (あるいは、セルC1をクリックして、=A1+B1と入力しても同じ)

      sansho.gif

      5	8

式(参照)のコピー・ペースト

  1. 式を入力したセル(例ではC1)をクリックしてコピー(ctrl+c):選択されたセルが波線で囲まれる
  2. 同じ法則(例では「左側の2つのセルの値を足すこと」)を適用したいセルをマウスドラッグで選択
  3. ペースト(ctrl+v)すると、選択範囲に全て式がコピーされる

    sanshocopy.gif

    5	8
    1	2
    3	4
    5	6
    7	8

絶対参照

  1. 下の例のようにエクセルに果物の個数を入力して合計を求める
    • soutaierr1.gif
  2. りんごの個数の全体に対する比率を =B2/B5 で計算。書式をパーセントにする(あるいは、パーセントの計算式を入れる。関数を使っても良い)。
  3. りんごの比率の入ったセルをコピーして、他の項目の比率のセルにペーストしてもうまく行かない
    • soutaierr2.gif
  4. これは、通常のコピー・ペーストでは、セルが相対的な位置関係で参照されるため
  5. リンゴの比率を計算するときに、分母のセル指定を $B$6 と$記号をつけて参照することで、絶対参照できる
    • zettai1.gif → zettai2.gif
      	個数	比率
      りんご	10	
      みかん	15	
      ばなな	25	
      合計	50	

関数の利用

  1. 合計を入力したいセルをクリック(例ではC6)
  2. =sum( と入力し、マウスで合計したい数値の範囲をドラッグし、最後に ) を入力してリターン

第4回授業の課題

Dropbos課題再提出

4039
4001
4002
4004
4005
4007
4008
4012
4013
4016
4017
4020
4021
4024
4025
4029
4032
4033
4036
4037
4038