*Excelの復習と正規表現の後方参照 [#fbd57347]

#contents

**前回課題について: [#a4a9b2d1]
-現在採点中。採点終了次第、評点を返却

**第6回授業の獲得目標:&worried; [#l1e415de]
-''1. エクセルによるデータの並び替え・集計・グラフ作成に習熟する''
-''2.  スクリーンキャプチャを使った画面の切り取りとPukiwikiページへの貼り付け''
-''3.  正規表現:後方参照に挑戦する''
-''4.  Wordを使った文書作成: 見栄えの良いレポート作りの方法を練習する''


**エクセルによるデータの並び替え・集計・グラフ作成の復習: 課題データを用いて⌣ [#h69424df]
前回の課題は、[[厚生労働省統計表データベースシステム>http://wwwdbtk.mhlw.go.jp/toukei/cgi/sse_kensaku]]で公開されている、「1C 上巻 死亡 第5.12表_  	死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から1986年以降の男女別死亡数のみ抜粋した表(&ref(授業/H21/情報処理/05/2009_情報#05課題.xls);)を使って課題の操作を行うことだった。多くの人ができていたが、''並べ替え・集計はクラス全員に理解してもらいたい大事な項目なので''、もう一度おさらいをする。また、関数とデータ型についても、少し説明する。~
 この説明はもう聞く必要がないという人は、次の正規表現のところを読んで、練習問題をやっておこう
-問1:表の中で、肺炎による死亡数が最も多いのは、どちらの性別の何年のデータですか?(ヒント:どれか1つの列をキーにして並べ替え)~
&ref(./sort_.gif,60%);
-問2:男女それぞれについて、不慮の事故による死亡数の総計を集計して答えなさい。(ヒント:どれか2つのキーで並べ替えてから集計)~
&ref(./sum_1.gif,60%);
-3:三代疾病による男女の死亡者数の合計の推移を1986年から2006年までグラフにする。
--並び替え:~
&ref(./#3_1.gif,60%);
--集計:1~
&ref(./#3_2.gif,60%);
--グラフにするデータの選択~
&ref(./#3_3.gif,60%);
--グラフの表示~
&ref(./#3_4.gif,60%);

***データの選択を個別に行えば、グラフを自由に変更できる [#a0ef3dc1]
先ほど作ったグラフをクリックすると、画面が「デザイン」タブに移動する。ここで''データの選択''をクリックすれば、グラフに表示するデータを自由に追加・削除できる。
-グラフを選択して「データの選択」をクリック~
&ref(./graph_panel.GIF,60%);
--左側のパネルが、グラフとして表示したいデータ(系列値)、右側のパネルが横軸に表示する値になる(項目軸ラベル)
-新しいデータをグラフに表示したいときは、凡例項目で「追加」をクリック
--例:男女それぞれで結核による死亡者数の推移をグラフにする
---性別(降順)、年(昇順)でソート
---男性の結核死亡者数だけを選択して、折れ線グラフ作成。横軸が年になっていないが気にしない~
&ref(./graph1.gif,60%);
---横軸(項目軸)の追加:グラフをクリックして、「データの選択」ウィンドウを表示~
右側のパネルで「編集」をクリックし、「軸ラベルの範囲」に「年」を指定。~
&ref(./graph2.gif,60%);
---新しいデータ(系列値)の追加:「データの選択」ウィンドウで、~
左側の「凡例項目(系列)」のパネルで、「追加」をクリック~
系列名に「結核(女)」と入力~
系列値に女性の結核死亡者数を選択して入力~
&ref(./graph3.gif,60%);
---男女それぞれの結核による死亡者数がグラフに表示された~
&ref(./graph4.gif,60%);


//***セルの操作には関数を使おう! [#gc73d42c]
//エクセルの'関数'というはとても便利だ。たとえば、前々回の授業で使ったSUM()という関数は、()の範囲のセル中の値を合計してくれる。その他にも平均を出したければAVERAGE()という関数を使えばいいし、文字列の一部を抜き出したければLEFT()等の関数が使える。いろんな関数とその使い方は、ヘルプファイルに書かれているので見ておこう。~
//ここも一緒に操作しておさらい。よくつかう関数として、
// average()
// round()
// countif()
// 
// 注意:関数は非常に沢山あるので、全部覚えようなどと思う必要は無い。
//       こんなことができると知っていれば、使う時にヘルプを見れば良い!

** スクリーンキャプチャを使った画面の切り取りとPukiwikiページへの貼り付け⌣ [#bd2a6de2]
われわれはこれまでに、画面に表示されたテキストデータをコピーして加工し、自分のデータとして使う方法を習得した。つまり、
 コピー・ペースト
今日の授業では、画面に表示された情報を画像として再利用する方法を学ぶ。この方法をしっていると、画面に表示されたグラフや画像を切り取って、編集し、ウェブページやレポートに貼り付けることができるようになる。
***ウィンドウズの基本: スクリーンキャプチャ [#ac0d043e]
ウィンドウズにはキーボードに、画面の情報をそのまま画像としてコピーするキーがついている。この機能を使う方法を覚えておくと、とても便利~
+まず、キーボードの一番最上段にある~
|&size(16){''Prt Sc&br;SysRq''};|
というキーを押してみよう。これで画面がキャプチャされたが、見た目には何も起こらない。
+次に、画像を扱うウィンドウズの基本ソフトである、''ペイント''を立ち上げる~
&ref(./kiritori_4.gif,60%);~
ペイントの画面が表示されたら ''Ctrl-V''で、ペーストしてみよう。そうすると、先ほどキャプチャされた画面が現れる。
+範囲選択ツールなどを使って大きさを整えたり、色を変えたりしてみよう。~
&ref(./kiritori_5.gif,60%);~
+終わったら、保存 。写真ならJPEG、色数の少ない図ならgif。
--画像の形式の違いは、http://www5e.biglobe.ne.jp/~komichan/webdesign/mame_gazouyoryo.html を参照のこと。
***切り取る範囲がもう決まっていて、保存やコピーだけをしたいのなら、Snipping Tool [#ee4f8c88]
スクリーンキャプチャとペイントによる編集はとても便利なのだが、もしも、切り取り範囲がすでに決まっていて、それほど編集する必要は無く、ファイルとして保存したり、コピーだけをしたいのなら、''Snipping Tool''が便利。
+スタートメニューからSnipping Toolを立ち上げる~
&ref(./kiritori_1.gif,60%);~
+切り取りたい範囲をマウスのドラッグで選択する。
+ファイルとして保存したり、コピー・ペーストしたりできる。~
&ref(./kiritori_2.gif,60%);~

***Pukiwikiページへの貼り付け [#u2d7ecc7]
上の方法で、自分で作ったグラフを、レポート提出用のPukiwikiページに張り付けることができる。今後のレポートではこの方法で画像ファイルを提出することになるので、やり方を覚えておこう。
-エクセルで作成したグラフをSnipping Toolを使って選択し、gif形式で保存する。ファイル名は
 学生証番号.gif
にしておく
-できたファイルを、前回課題で作ったページ
 自分の学生証番号/05
に添付する。やり方は、メニューから「添付」を選んで、ファイルを選択するだけ。
-添付した画像を画面に表示させるには、まず、ページの「編集」画面に入り、
 &ref(./ファイル名);
と書き込むだけ。ファイル名のところに、先ほどアップロードしたファイル名を入れると、画面に画像が表示される。


**今日の正規表現:後方参照への挑戦⌣ [#y9e5bcd3]
これまでに基本的な正規表現の使い方をマスターした。今日は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

***書籍リストを出版年順に並び替える [#w1a1c765]
では、もう少し具体的な例をつかって、段階的に説明してみよう。~
まず、次のような書籍のリストがある。このリストを、K2Editorで開いてみよう。&ref(授業/H22/情報処理/06/書籍リスト.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円~

***まずは、これまでに習った正規表現で、どこまで解決できるか考えてみる [#pe3fd028]
このリストには、出版年が含まれているにも関わらず、出版年の順番に並んでない。どうすれば、出版年で並び替えられるだろうか?~
リストをよく見てみると
 タイトル・著者,出版年,ページ・価格
という順番で並んでいる。ここで、
 出版年だけを切り出して、
 出版年 <タブ> タイトル・著者,出版年,ページ・価格
というリストを作り、エクセルにペーストして並び替えれば良いということまでは、想像できるだろう。~
では、出版年だけを切り出すにはどうすればいいだろうか?
まず、[[これまでにならった正規表現>http://bean.bio.chiba-u.jp/lab/index.php?%E6%8E%88%E6%A5%AD%2FH22%2F%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%2F04#b81c6886]]で表現できるところだけを書いてみると、
-ファーストネームは、行の先頭から始まって、空白で終わる文字列だから、これまでに習った
 ^     は行の先頭を表す
 [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'' 今までの解説に従って、添付の書籍リストで後方参照による検索置換を行って、
 出版年 <タブ> タイトル・著者,出版年,ページ・価格
に置き換えてみよう。

--答え:
+++K2Editorに上のリストをコピーする
+++置換ウィンドウで、次のように指定する
 検索文字列: ^(.*,)([0-9]+年)(.*)$
 置換文字列: \2\t\1\2\3
+++置換を実行
+++エクセルにコピーペーストして、一番左の列で並び替え

***練習:日付データの形式変更 [#j5d74a08]
下に友達の誕生日リストが月、日、年の順で書かれている。
 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
-このリストを正規表現検索置換を使って、
++年・月・日の順(例:1984 April 29)に並び替えなさい
++日、月、年の順(例: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回授業の課題 [#mb0c7171]
-提出期限:6月1日水曜正午
***課題1.意見調査 [#uf35e90a]
-http://bean.bio.chiba-u.jp/moodle から提出

***課題2 エクセルを用いたグラフの作成およびPukiwikiページでの画像の提出 [#wa6d3314]
下の1、2のいずれかの問題を選んでグラフを作成し、できたグラフを画像として保存し、レポート提出用Pukiwikiページに新しいページ
 学籍番号/06
を作成し、ファイルを添付して、画面に表示させなさい。
-1. 添付のエクセル書類は、[[東京都健康安全研究センター>http://ftp.jaist.ac.jp/pub/emergency/monitoring.tokyo-eiken.go.jp/pub/emergency/monitoring.tokyo-eiken.go.jp/monitoring/index.html]]で公表されている環境放射線量測定結果を表にまとめたものです。このデータを使って、3月から現在までの、環境放射線量の変化をグラフにしなさい。&ref(../05/放射線.xlsx);。(注:左のエクセルファイルがうまく開けない人は、このテキストファイル(&ref(./環境放射線.txt);)のデータを使ってください。)
-2. [[千葉県のホームページ>http://www.pref.chiba.lg.jp/taiki/h23touhoku/houshasen/list-kekka-tapwater1104.html]]には、千葉県における上水(蛇口水)の核種分析結果が掲載されています( [[4月分>http://www.pref.chiba.lg.jp/taiki/h23touhoku/houshasen/list-kekka-tapwater1104.html]]、[[3月分>http://www.pref.chiba.lg.jp/taiki/h23touhoku/houshasen/list-kekka-tapwater1103.html]])。3月分と4月分のデータをエクセルの上であわせて、上水核種分析結果をグラフにしなさい。
-評価:
--どちらかの1つの課題を提出していれば、基本点が得られます。両方の課題を提出してあれば、ボーナス点が得られます。
--グラフでは、複数の放射性同位体元素の放射線量の変化がわかるように工夫してください。
--グラフは見やすく編集してあるほど、評価は高くなります。
~
提出方法の補足
-手順
++個人ページのトップページ(上の方のページタイトルに、「joho23/自分の番号」のみが書かれているページ)に入る
++画面の上の方にある〔 新規 〕をクリック
++ページ名を尋ねる入力スペースが表示されるので、半角英数字で、ドット・スラッシュ・0・6を下のように入力(※必ず半角文字を用いること)
 ./06
+上で作成したレポート提出ページ(「自分のID/06」 )にアクセスし、「編集」リンクをクリック
+下の囲みの中をコピー・ペーストし、回答を書き込む
 *第6回課題
 ***氏名:
 ***課題2の答え
 -&ref(./ファイル名);
 -&ref(./ファイル名);
 ***課題3の答え:


***課題3. 発展課題:<希望者のみ提出してください:通常点に加点します> [#b7fc779c]
%%この課題は http://bean.bio.chiba-u.jp/moodle から提出します。%%~
''この課題の答えは、上で作成したPukiwikiページに書き込んでください。''
-下に、アメリカ合衆国大統領の完全なリストがあります。このリストには、大統領の名前が、「ファーストネーム、 ミドルネーム(あるいはイニシャル)、ファミリーネーム、在籍年」の順で並んでいます。このリストについて、K2Editorを用いてどのような正規表現検索・置換を行えば、「ファミリーネーム、 ファーストネーム、ミドルネーム(あるいはイニシャル)、在籍年」という順番にできるかを考えて、検索文字列と置換文字列をmoodleのレポート提出ページに書き込みなさい。
-下に、アメリカ合衆国大統領の完全なリストがあります。このリストには、大統領の名前が、「ファーストネーム、 ミドルネーム(あるいはイニシャル)、ファミリーネーム、在籍年」の順で並んでいます。このリストについて、K2Editorを用いてどのような正規表現検索・置換を行えば、「ファミリーネーム、 ファーストネーム、ミドルネーム(あるいはイニシャル)、在籍年」という順番にできるかを考えて、検索文字列と置換文字列を%%moodleの%%レポート提出ページに書き込みなさい。
 George Washington (1789-1797)
 John Adams (1797-1801)
 Thomas Jefferson (1801-1809)
 James Madison (1809-1817)
 James Monroe (1817-1825)
 John Quincy Adams (1825-1829)
 Andrew Jackson (1829-1837)
 Martin Van Buren (1837-1841)
 William Henry Harrison (1841)
 John Tyler (1841-1845)
 James K. Polk (1845-1849)
 Zachary Taylor (1849-1850)
 Millard Fillmore (1850-1853)
 Franklin Pierce (1853-1857)
 James Buchanan (1857-1861)
 Abraham Lincoln (1861-1865)
 Andrew Johnson (1865-1869)
 Ulysses S. Grant (1869-1877)
 Rutherford B. Hayes (1877-1881)
 James A. Garfield (1881)
 Chester Arthur (1881-1885)
 Grover Cleveland (1885-1889)
 Benjamin Harrison (1889-1893)
 Grover Cleveland (1893-1897)
 William McKinley (1897-1901)
 Theodore Roosevelt (1901-1909)
 William Howard Taft (1909-1913)
 Woodrow Wilson (1913-1921)
 Warren G. Harding (1921-1923)
 Calvin Coolidge (1923-1929)
 Herbert Hoover (1929-1933)
 Franklin D. Roosevelt (1933-1945)
 Harry S Truman (1945-1953)
 Dwight D. Eisenhower (1953-1961)
 John F. Kennedy (1961-1963)
 Lyndon B. Johnson (1963-1969)
 Richard Nixon (1969-1974)
 Gerald Ford (1974-1977)
 Jimmy Carter (1977-1981)
 Ronald Reagan (1981-1989)
 George Bush (1989-1993)
 Bill Clinton (1993-2001)
 George W. Bush (2001-2009)
 Barack Obama (2009-present)