テキストデータの一括検索・置換と、エクセルの使い方

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

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

ウェブページ経由で送信されるデータ: [smile]

前回授業の課題では、制限ページのPROJECTページで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アドレス等のデータは適当に変更してある)
  • 授業の閲覧制限つきPukiwikiページ(http://bean.bio.chiba-u.jp/joho/index.php?joho23)に添付してある、ログファイルを見てみよう。
    1つ1つを詳しく見て行くと
  • 最初の数字: 192.29.8.69等は IPアドレスという、ネットワークに接続されているコンピュータにつけられた固有の番号。この番号を使うことで、どのコンピュータからウェブサーバにアクセスがあったか分かる。
  • 09s40xx: アカウント: 皆さんがページへのアクセスに使ったアカウント
  • [30/Apr/2009:15:41:26 +0900] : アクセス日時
  • POST: 行った操作。この場合はデータを投稿したことを示している。
  • "Mozilla/5.0 (Windows; U; Windows NT: 使ったブラウザやコンピュータの種類

つまり、ログファイルを見れば、いつどのコンピュータから、ウェブサーバにアクセスがあったのか分かってしまうのだ。この授業では出席をとらなくても、出席しているかどうかはログファイルから分かってしまう。

注: 出席点も成績評価の対象

さらに、大学などのネットワークでは、学内のどのコンピュータから、学外のどのコンピュータにアクセスがあったかということも、全てログファイルに残っている。
プライバシーの問題もあるので、通常、こういうデータはそうそう公にされることはないが、自分がインターネットを介してどのページにアクセスしたかは、ネットワークの管理者ならば知ることができるということは覚えておこう。

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

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

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

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

検索 と 置換

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

  • 演習1: ブラウザからの文字列の検索
    今見ているこのページの中で、「置換」という文字列を探してみる。「編集」メニューから「検索」を選び(あるいは、コントロール+Fキー)、「置換」と入力。
  • 演習2: スタートメニューからのファイルやプログラムの検索
    スタートメニューからファイルやプログラムの検索のところに、探したいファイル名の一部を入力してみる。 Untitled-1.gif
  • 演習3: MS Word内の文書で検索と置換
    右のファイルを開き、Wordの検索機能を使って、「芋」  という文字列を探す。 fileexample1.docx
    また、その文字列を「茶」 に置換する。
  • 演習4: MS Escelの文書内での検索と置換
検索と置換は、ほとんどのソフトウェアで使える基本技だ
大きい文書の中で特定の文字を探したいときなどは、すぐに検索しよう

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」と書かれたキーを押すことで入力できる、ある種の空白文字のことだ。この空白文字の扱いはアプリケーションソフトの種類によって大きく変わり、

テキストエディタ: スペースよりも広い空白が挿入
MSワード: スペースよりも広い空白が挿入される。ルーラーで幅を変えられる
MSエクセル: タブキーを押すことによって、カーソルを一つ右のセルに移動できる

というようなもの。
では、http://bean.bio.chiba-u.jp/joho/index.php?joho23に添付してある、ログファイルを使って操作してみよう。操作の流れは、

  • 1. ログファイルの内容をK2Editorにコピー・ペースト
  • 2. K2Editorで 半角のスペース を 全てタブに置換する
    検索語: 半角スペース1つ
    置換語: タブ (編集画面で1つタブを入力し、それをコピーして、置換語を入力する場所にペースト)
  • 3. 一括置換できたら、全てを選択してコピーして、エクセルにペースト

これだけの数の検索・置換も、一瞬で終わるはずだ。
作業が終わったら、アカウントのところに注目して、誰がどの発言をしているかを見てみよう。

以上のように。大量データの処理に、検索・置換は非常に有効!!であることは理解しておこう。
検索・置換はコンピュータの持つ最も基本的で便利な機能であり、Wordにも、Excelにも標準装備されている。

正規表現と友達になろう [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. 

という内容のテキストに対して、

  • 1. 「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」を検索文字列に指定し、「Pumpty」を置換文字列に指定して一括置換を行った場合、上のテキストはどうなるか?
  • 2. 「空白以外の任意の文字が任意の数だけ連続してallを含む文字列」を検索文字列に指定し、「ball」を置換文字に指定して一括置換を行った場合、対象とするテキストはどうなるか?

前回課題の内容は、「」の中の言葉の意味を考えてもらうことがポイントだった。例えば、

 「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」

とはどういうものかというと、上の例では、  Humpty  Dumpty がそれに対応する。他にどんな文字列が 「空白以外の任意の文字が任意の数だけ連続してptyを含む文字列」になりうるか、自分で考えてみよう。

当てはまる語: "empty"  "ptylos"  "optymous"
当てはまらない語: "emp ty"  "puty"  "Ptylo"(大文字・小文字を区別しない場合は当てはまる)

レポートでは、実際にこの検索置換をやってくれた人がいて、そういう人は、

検索語: Humpty
置換語: Pumpty
検索語: Dumpty
置換語:Pumpty

という検索置換を2回繰り返したはずだ。
たしかに、こうやって何度も検索・置換を繰り返すのも1つの方法だろう。しかし、もっと便利な方法もある。それが、正規表現を使った検索・置換だ。

正規表現は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    togethe       r again. 

このテキストでは、手入力するときに、半角スペースをいくつも連続で入力してしまったようだ。
そこで、2つ以上半角スペースが連続しているところは、全て半角スペース1つにしたい。
これを正規表現を使ってやってみよう。

他の正規表現も見てみよう: K2Editorのヘルプファイル

正規表現には、上に示した以外にも様々な命令がある。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のワイルドカード検索も正規表現の文法にかなり近いものを使っている。

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

  • 次の囲みの中のテキストデータを、K2Editorの新しいページにコピー・ペースト
      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. 
  • 1. 上のテキスト中、 "pty" で終わる単語を全て"Pumpty"に置き換える。
  • 2. 上のテキスト中、 "all" で終わる単語を全て"ball"に置き換える。
  • 3. 上のテキスト中、大文字で始まる単語を削除する
  • 4. 上のテキスト中、2文字以上連続する半角スペースを1つに置き換える

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

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

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

  • 練習: 下の囲みの中のデータはタブで区切られたテキスト。コピーして、エクセルにペースト(貼り付け)してみよう
    リンゴ	ミカン	ナシ
    スイカ	モモ	ブドウ
    サクランボ	イチゴ	バナナ
    • ※エクセルできれいな表として貼り付けられなかった場合、一度、K2Editorにペーストしてから、再度コピーし、エクセルにペーストしてみよう。
  • 練習: 下の囲みの中のデータは複数の半角空白で区切られたテキスト。コピーしてそのままエクセルにペーストしても、きれいな表にはならない。そこで、正規表現を使って、複数の空白をタブ1つに置換してみよう。
    リンゴ     ミカン       ナシ
    スイカ   モモ       ブドウ
    サクランボ  イチゴ        バナナ
    • 問題:複数の半角空白の連続を表す正規表現は何か?置換文字に指定する文字は何か?
  • 方法:
  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( と入力し、マウスで合計したい数値の範囲をドラッグし、最後に ) を入力してリターン
  • (合計を入力したいところにカーソルを持っていって、ツールバーのΣをクリックしてリターンでもよい)

    sum.gif → sum2.gif
    今つかったsum関数は、エクセルを利用する上で最も頻繁に用いられる関数。使い方をよく覚えておこう。

第4回授業の課題


添付ファイル: fileexample1.docx 1885件 [詳細] fileUntitled-1.gif 1316件 [詳細]

Last-modified: 2015-05-13 (水) 16:43:55 (3481d)