Excelの復習と発展的な正規表現の使い方

前回課題について:

  • 現在採点中。採点終了次第、評点を返却

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

  • 1. エクセルによるデータの並び替え・集計・グラフ作成に習熟する
  • 2. スクリーンキャプチャを使った画面の切り取りとPukiwikiページへの貼り付け
  • 3. 正規表現:後方参照に挑戦する
  • 4. Wordを使った文書作成: 見栄えの良いレポート作りの方法を練習する

エクセルによるデータの並び替え・集計・グラフ作成の復習: 課題データを用いて [smile]

前回の課題は、厚生労働省統計表データベースシステムで公開されている、「1C 上巻 死亡 第5.12表_ 死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から1986年以降の男女別死亡数のみ抜粋した表を使って課題の操作を行うことだった。多くの人ができていたが、並べ替え・集計はクラス全員に理解してもらいたい大事な項目なので、もう一度おさらいをする。また、関数とデータ型についても、少し説明する。

この説明はもう聞く必要がないという人は、次の正規表現のところを読んで、練習問題をやっておこう
  • 問1:表の中で、肺炎による死亡数が最も多いのは、どちらの性別の何年のデータですか?(ヒント:どれか1つの列をキーにして並べ替え)
    sort_.gif
  • 問2:男女それぞれについて、不慮の事故による死亡数の総計を集計して答えなさい。(ヒント:どれか2つのキーで並べ替えてから集計)
    sum_1.gif
  • 3:三代疾病による男女の死亡者数の合計の推移を1986年から2006年までグラフにする。
    • 並び替え:
      #3_1.gif
    • 集計:1
      #3_2.gif
    • グラフにするデータの選択
      #3_3.gif
    • グラフの表示
      #3_4.gif

データの選択を個別に行えば、グラフを自由に変更できる

先ほど作ったグラフをクリックすると、画面が「デザイン」タブに移動する。ここでデータの選択をクリックすれば、グラフに表示するデータを自由に追加・削除できる。

  • グラフを選択して「データの選択」をクリック
    graph_panel.GIF
    • 左側のパネルが、グラフとして表示したいデータ(系列値)、右側のパネルが横軸に表示する値になる(項目軸ラベル)
  • 新しいデータをグラフに表示したいときは、凡例項目で「追加」をクリック
    • 例:男女それぞれで結核による死亡者数の推移をグラフにする
      • 性別(降順)、年(昇順)でソート
      • 男性の結核死亡者数だけを選択して、折れ線グラフ作成。横軸が年になっていないが気にしない
        graph1.gif
      • 横軸(項目軸)の追加:グラフをクリックして、「データの選択」ウィンドウを表示
        右側のパネルで「編集」をクリックし、「軸ラベルの範囲」に「年」を指定。
        graph2.gif
      • 新しいデータ(系列値)の追加:「データの選択」ウィンドウで、
        左側の「凡例項目(系列)」のパネルで、「追加」をクリック
        系列名に「結核(女)」と入力
        系列値に女性の結核死亡者数を選択して入力
        graph3.gif
      • 男女それぞれの結核による死亡者数がグラフに表示された
        graph4.gif

セルの操作には関数を使おう!

エクセルの'関数'というはとても便利だ。たとえば、前々回の授業で使ったSUM()という関数は、()の範囲のセル中の値を合計してくれる。その他にも平均を出したければAVERAGE()という関数を使えばいいし、文字列の一部を抜き出したければLEFT()等の関数が使える。いろんな関数とその使い方は、ヘルプファイルに書かれているので見ておこう。~/ここも一緒に操作しておさらい。よくつかう関数として、

average()
round()
countif()

注意:関数は非常に沢山あるので、全部覚えようなどと思う必要は無い。
      こんなことができると知っていれば、使う時にヘルプを見れば良い!

スクリーンキャプチャを使った画面の切り取りとPukiwikiページへの貼り付け [smile]

われわれはこれまでに、画面に表示されたテキストデータをコピーして加工し、自分のデータとして使う方法を習得した。つまり、

コピー・ペースト

今日の授業では、画面に表示された情報を画像として再利用する方法を学ぶ。この方法をしっていると、画面に表示されたグラフや画像を切り取って、編集し、ウェブページやレポートに貼り付けることができるようになる。

ウィンドウズの基本: スクリーンキャプチャ

ウィンドウズにはキーボードに、画面の情報をそのまま画像としてコピーするキーがついている。この機能を使う方法を覚えておくと、とても便利

  1. まず、キーボードの一番最上段にある
    Prt Sc
    SysRq
    というキーを押してみよう。これで画面がキャプチャされたが、見た目には何も起こらない。
  2. 次に、画像を扱うウィンドウズの基本ソフトである、ペイントを立ち上げる
    kiritori_4.gif
    ペイントの画面が表示されたら Ctrl-Vで、ペーストしてみよう。そうすると、先ほどキャプチャされた画面が現れる。
  3. 範囲選択ツールなどを使って大きさを整えたり、色を変えたりしてみよう。
    kiritori_5.gif
  4. 終わったら、保存 。写真ならJPEG、色数の少ない図ならgif。

切り取る範囲がもう決まっていて、保存やコピーだけをしたいのなら、Snipping Tool

スクリーンキャプチャとペイントによる編集はとても便利なのだが、もしも、切り取り範囲がすでに決まっていて、それほど編集する必要は無く、ファイルとして保存したり、コピーだけをしたいのなら、Snipping Toolが便利。

  1. スタートメニューからSnipping Toolを立ち上げる
    kiritori_1.gif
  2. 切り取りたい範囲をマウスのドラッグで選択する。
  3. ファイルとして保存したり、コピー・ペーストしたりできる。
    kiritori_2.gif

Dropboxフォルダへのファイルの保存

上の方法で、自分で作ったグラフを、レポート提出用のDropboxフォルダに保存しよう。今後のレポートではこの方法で画像ファイルを提出することになるので、やり方を覚えておこう。

  • エクセルで作成したグラフをSnipping Toolを使って選択し、gif形式で保存する。ファイル名は
    学生証番号.gif
    にしておく
  • できたファイルを、前回課題で作ったDropboxの共有フォルダに保存する
    • 新規保存をすると、エクスプローラー画面から保存場所を指定できるので、次の手順でDropboxフォルダを指定しよう
      • 左側パネルから「お気に入り」の下の「Desktop」をクリック
      • 「Desktop」の中にある「自分のアカウント名のついたフォルダ(例12s00005のようなもの)をクリック
      • Dropboxフォルダへが表示されるので、クリックすると、共有フォルダを指定できる

発展的な正規表現:後方参照への挑戦 [smile]

これまでに基本的な正規表現の使い方をマスターした。今日は1つ上のレベルの正規表現「後方参照」にチャレンジしてみよう。K2Editorのヘルプで後方参照に関する項目を見てみると、次のように書かれている。

後方参照
正規表現の中で()を使ってグループ化された部分にマッチ文字列は、 \1,\2などの表現で、
再度正規表現の中に埋め込むことが可能です。 
\の後ろに続く数字は、何番目のグルーピングされた文字列かを示します。 
たとえば、(\w+)[ ]+\1 は "ABC ABC"や"ppp ppp"に対してマッチしますが、 
"ABC ppp"にはマッチしません。 
\の後ろに続く数字には制限はありません。ただし、1〜9までは常に後方参照と解されますが、
 \10以降は、その後方参照に対応するグループがない場合は、8進数のコントロール文字と
解されますので注意が必要です。 
また、本当に一桁の8進数のコントロール文字を書く場合には、 \001などという風に書きましょう。 
(K2Editorのヘルプファイルから後方参照の部分を抜粋)

ちょっと分かりにくいかも知れないが、半角の

()

の中で指定したパターンにマッチした文字列を、

¥1

などという記号を使うことで、呼び出すことができるということだ。
まず簡単な例で操作をしてみよう

テキストデータ: A9JA49K6  に対して、
1. Aの次の1文字と、Kの次の1文字をすべて削除したい。
2. Aの次の1文字と、そのAの並び順を入れ替えたい。

というような問題があったとする。
K2Editorで実際に試してみると:

テキストデータ  A9JA49K6
・AかKの次の1文字を削除
  検索文字列 ([AK]).
  置換文字列 ¥1
・Aに続く1文字とAの順序入れ替え
  検索文字列 (A)(.)
  置換文字列 ¥2¥1

書籍リストを出版年順に並び替える

では、もう少し具体的な例をつかって、段階的に説明してみよう。
まず、次のような書籍のリストがある。このリストを、K2Editorで開いてみよう。file書籍リスト.txt

  • 次のようなリストが入っているはずだ(一部のみを表示)(データは、生物科学ニュースホームページhttp://bsj.or.jp/nc2/htdocs/から拝借した)。
    ・絵でわかる細胞の世界 黒谷明美著,講談社,2001年,162ページ,2,000円
    ・細胞工学別冊 植物細胞工学シリーズ19 新版 分子レベルから見た植物の耐病性 島本 功・渡辺雄一郎・柘植尚志 監修
    ・琉球弧の成立と生物の渡来 木村政昭編著,沖縄タイムス社,2002年,206ページ,8,200円
    ・植物ゲノム機能のダイナミズム  —転写因子による発現調節— 岩淵雅樹・篠崎一雄編,シュプリンガ−・フェアラーク東京,2001年,256ページ,5,000円
    ・森林の環境・森林と環境 地球環境問題へのアプローチ 吉良竜夫,新思索社,2001年,358ページ,3,800円
    ・植物の観察と実験を楽しむ−光と植物のくらし− 松田仁志著,裳華房,2004年,159頁,1,600円

まずは、これまでに習った正規表現で、どこまで解決できるか考えてみる

このリストには、出版年が含まれているにも関わらず、出版年の順番に並んでない。どうすれば、出版年で並び替えられるだろうか?
リストをよく見てみると

タイトル・著者,出版年,ページ・価格

という順番で並んでいる。ここで、

出版年だけを切り出して、
出版年 <タブ> タイトル・著者,出版年,ページ・価格

というリストを作り、エクセルにペーストして

出版年タイトル・著者,出版年,ページ・価格

という表を作り、出版年で並び替えれば良いということまでは、想像できるだろう。
では、出版年だけを切り出すにはどうすればいいだろうか? まず、これまでにならった正規表現で表現できるところだけを書いてみると、

  • ファーストネームは、行の先頭から始まって、空白で終わる文字列だから、これまでに習った
    ^     は行の先頭を表す
    [0-9]+年    は、数字の出版年を表す
    .*,   は全角の,で終わる任意の文字列を表す
    $   は行の終わりを表す
    これらを組み合わせて、
    ^.*,[0-9]+年.*$
    で1行の情報全てを表せるだろう。
    なので、例えば、
    検索文字列: ^.*,[0-9]+年
    で、
    ・琉球弧の成立と生物の渡来 木村政昭編著,沖縄タイムス社,2002年
    ・植物の観察と実験を楽しむ−光と植物のくらし− 松田仁志著,裳華房,2004年
    .....
    という出版年で終わる文字列は表せるけれど、これを年度に置換するときには、
    置換文字列:  2002年
           ^^^^
    今まで習った通りだと、何か置換文字列を指定しなければならない
    上の例だと、
    2002年
    2004年
    ....
    という異なる年度に置換したいので、一度の置換ではできそうにない。

    もしも、このとき、最初の行で、当てはまった「2002年」をどこかどこかにコピーして保存しておいて、自分の置換文字列に指定できれば、いいだろう。
    この、
    検索文字列と一致した文字列を保存しておいて、置換文字列に使う
    ということをやってくれるのが、後方参照だ。

    前置きはともかく、まずやってみよう。新しく登場するのは、

    ( ) 半角のカッコで、検索文字列を囲んでおくと
    置換文字列に半角の¥マークと数字を使うことで、 (例: ¥1  ¥2  こんな風に)
    上でカッコで囲んだ検索文字列を呼び出せる。
     では、上の書評リストを出版年と出版年以外のパートに分けて、カッコで囲んでみよう
    ^(.*,)([0-9]+年)(.*)$
    こうすることで、検索文字列で使われた( )内の文字列を、左から順番に置換文字列として指定することができる
    (.*,)      → \1
    ([0-9]+年)  → \2
    (.*)      → \3
    具体的に上の例の1行目で考えると
    ・絵でわかる細胞の世界 黒谷明美著,講談社, → ^(.*,)    → \1
    2001年                    → ([0-9]+年) → \2
    ,162ページ,2,000円             → (.*)$    → \3
  • 演習:1 今までの解説に従って、添付の書籍リストで後方参照による検索置換を行って、
    出版年 <タブ> タイトル・著者,出版年,ページ・価格
    に置き換えてみよう。
  • 答え:
    1. K2Editorに上のリストをコピーする
    2. 置換ウィンドウで、次のように指定する
      検索文字列: ^(.*,)([0-9]+年)(.*)$
      置換文字列: \2\t\1\2\3
    3. 置換を実行
    4. エクセルにコピーペーストして、一番左の列で並び替え

練習:日付データの形式変更

下に友達の誕生日リストが月、日、年の順で書かれている。

April 29, 1984
March 20, 1987
September 23, 1980	
December 23, 1982
February 11, 1984
January 1, 1999
May 3, 1988
May 4, 1993
May 5, 1987
November 23, 1985
November 3, 1994
  • このリストを正規表現検索置換を使って、
    1. 年・月・日の順(例:1984 April 29)に並び替えなさい
    2. 日、月、年の順(例:29 April, 1984)に並び替えなさい
    • この課題が簡単すぎて暇をもてあました人は、エクセルを使って同じことをやってみよう(この場合は実はエクセルの方が簡単 列全体を選択して、コピー・ペーストするだけ)
  • 解答例
    検索文字列:([A-Za-z]+) ([0-9]+), ([0-9]+)
    置換文字列:¥3 ¥2 ¥1
     あるいは
    検索文字列:^([^ ]+) ([^ ]+), ([^ ]+)$
    置換文字列:¥3 ¥2 ¥1
    • 補足:2番目の例では、([^ ]+)(意味:空白以外の1回以上の連続)が改行を含んでしまってるため、最後に1行の終わりを示す$をつけないと、うまく行かない。
  • また、上の例では

    ^  には2つの意味があるので注意!!
    
    ■検索文字列の最初においた場合は行頭から始まることを示す
      ^[A-Z].* で、行頭がアルファベット大文字で始まる任意の文字列
    ■文字集合を表す[ ]の中で最初に置かれた場合、それに続く文字以外を表す
     [^a-z]+     で、英小文字以外の任意の文字からなる文字列
     参考:$は検索文字列の最後に置かれた場合、行末であることを示す
      [a-z]+$  は、行末に続く英小文字の連続を示す
    正規表現の例のいくつかは、昨年度の学生の要望で作った、授業/H20/情報処理/正規表現熟語帳を参照してみよう。

第6回授業の課題


Last-modified: 2015-05-13 (水) 16:44:48 (3497d)