前回の課題は、厚生労働省統計表データベースシステムで公開されている、「1C 上巻 死亡 第5.12表_ 死因年次推移分類別にみた性別死亡数・率(人口10万対)」の表から1986年以降の男女別死亡数のみ抜粋した表(2009_情報#05課題.xls)を使って課題の操作を行うことだった。多くの人ができていたが、並べ替え・集計はクラス全員に理解してもらいたい大事な項目なので、もう一度おさらいをする。また、関数とデータ型についても、少し説明する。
この説明はもう聞く必要がないという人は、次の正規表現のところを読んで、練習問題をやっておこう
先ほど作ったグラフをクリックすると、画面が「デザイン」タブに移動する。ここでデータの選択をクリックすれば、グラフに表示するデータを自由に追加・削除できる。
われわれはこれまでに、画面に表示されたテキストデータをコピーして加工し、自分のデータとして使う方法を習得した。つまり、
コピー・ペースト
今日の授業では、画面に表示された情報を画像として再利用する方法を学ぶ。この方法をしっていると、画面に表示されたグラフや画像を切り取って、編集し、ウェブページやレポートに貼り付けることができるようになる。
ウィンドウズにはキーボードに、画面の情報をそのまま画像としてコピーするキーがついている。この機能を使う方法を覚えておくと、とても便利
Prt Sc SysRq |
スクリーンキャプチャとペイントによる編集はとても便利なのだが、もしも、切り取り範囲がすでに決まっていて、それほど編集する必要は無く、ファイルとして保存したり、コピーだけをしたいのなら、Snipping Toolが便利。
上の方法で、自分で作ったグラフを、レポート提出用のPukiwikiページに張り付けることができる。今後のレポートではこの方法で画像ファイルを提出することになるので、やり方を覚えておこう。
学生証番号.gifにしておく
自分の学生証番号/05に添付する。やり方は、メニューから「添付」を選んで、ファイルを選択するだけ。
&ref(./ファイル名);と書き込むだけ。ファイル名のところに、先ほどアップロードしたファイル名を入れると、画面に画像が表示される。
これまでに基本的な正規表現の使い方をマスターした。今日は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で開いてみよう。書籍リスト.txt
このリストには、出版年が含まれているにも関わらず、出版年の順番に並んでない。どうすれば、出版年で並び替えられるだろうか?
リストをよく見てみると
タイトル・著者,出版年,ページ・価格
という順番で並んでいる。ここで、
出版年だけを切り出して、 出版年 <タブ> タイトル・著者,出版年,ページ・価格
というリストを作り、エクセルにペーストして並び替えれば良いということまでは、想像できるだろう。
では、出版年だけを切り出すにはどうすればいいだろうか?
まず、これまでにならった正規表現で表現できるところだけを書いてみると、
^ は行の先頭を表す [0-9]+年 は、数字の出版年を表す .*, は全角の,で終わる任意の文字列を表す $ は行の終わりを表すこれらを組み合わせて、
^.*,[0-9]+年.*$で1行の情報全てを表せるだろう。
検索文字列: ^.*,[0-9]+年で、
・琉球弧の成立と生物の渡来 木村政昭編著,沖縄タイムス社,2002年 ・植物の観察と実験を楽しむ−光と植物のくらし− 松田仁志著,裳華房,2004年 .....という出版年で終わる文字列は表せるけれど、これを年度に置換するときには、
置換文字列: 2002年 ^^^^今まで習った通りだと、何か置換文字列を指定しなければならない。
2002年 2004年 ....という異なる年度に置換したいので、一度の置換ではできそうにない。
検索文字列と一致した文字列を保存しておいて、置換文字列に使うということをやってくれるのが、後方参照だ。
前置きはともかく、まずやってみよう。新しく登場するのは、
( ) 半角のカッコで、検索文字列を囲んでおくと 置換文字列に半角の¥マークと数字を使うことで、 (例: ¥1 ¥2 こんな風に) 上でカッコで囲んだ検索文字列を呼び出せる。 では、上の書評リストを出版年と出版年以外のパートに分けて、カッコで囲んでみよう ^(.*,)([0-9]+年)(.*)$こうすることで、検索文字列で使われた( )内の文字列を、左から順番に置換文字列として指定することができる
(.*,) → \1 ([0-9]+年) → \2 (.*) → \3具体的に上の例の1行目で考えると
・絵でわかる細胞の世界 黒谷明美著,講談社, → ^(.*,) → \1 2001年 → ([0-9]+年) → \2 ,162ページ,2,000円 → (.*)$ → \3
出版年 <タブ> タイトル・著者,出版年,ページ・価格に置き換えてみよう。
検索文字列: ^(.*,)([0-9]+年)(.*)$ 置換文字列: \2\t\1\2\3
下に友達の誕生日リストが月、日、年の順で書かれている。
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
検索文字列:([A-Za-z]+) ([0-9]+), ([0-9]+) 置換文字列:¥3 ¥2 ¥1 あるいは 検索文字列:^([^ ]+) ([^ ]+), ([^ ]+)$ 置換文字列:¥3 ¥2 ¥1
また、上の例では
^ には2つの意味があるので注意!! ■検索文字列の最初においた場合は行頭から始まることを示す ^[A-Z].* で、行頭がアルファベット大文字で始まる任意の文字列 ■文字集合を表す[ ]の中で最初に置かれた場合、それに続く文字以外を表す [^a-z]+ で、英小文字以外の任意の文字からなる文字列 参考:$は検索文字列の最後に置かれた場合、行末であることを示す [a-z]+$ は、行末に続く英小文字の連続を示す正規表現の例のいくつかは、昨年度の学生の要望で作った、授業/H20/情報処理/正規表現熟語帳を参照してみよう。
下の1、2のいずれかの問題を選んでグラフを作成し、できたグラフを画像として保存し、レポート提出用Pukiwikiページに新しいページ 学籍番号/06 を作成し、ファイルを添付して、画面に表示させなさい。
./06
*第6回課題 ***氏名: ***課題2の答え -&ref(./ファイル名); -&ref(./ファイル名); ***課題3の答え:
この課題は http://bean.bio.chiba-u.jp/moodle から提出します。
この課題の答えは、上で作成したPukiwikiページに書き込んでください。
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)