正規表現の応用&エクセルを使ったデータ解析

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

  • 1. 発展的な正規表現:後方参照への挑戦
  • 2. Excel(エクセル)の操作の基本:表計算
  • 3. 正規表現検索・置換とエクセルの合わせ技に慣れる
  • 4. サンプルデータの並び替え
  • 5. 並び替えたデータの集計

グループワーク:あなたにとって研究者って何? [smile]

この授業の前が体育であることもあり、授業の最初から全員がコンピュータの操作をすぐに始めるのは、なかなか難しい。そこで、授業の始めには、たいてい、グループディスカッションを持ってくるようにしている。
今日の最初の演習は、自分にとって研究者というのはどういうものかという意見をグループで話し合ってみること。まず、5分ぐらいで(遅れてきた人は、その間にログインしておくこと)
 自分が「研究者」とはどういうものだと思っているか?
 「研究者」になるためには、今からどんな準備をすればよいか?
を話し合ってみよう。また、ディスカッションの後、 授業のmoodleにアクセスして、「演習1」の質問に答えてほしい。

研究者を目指す人のための長期計画

例年、1年生の中には、将来、研究者になることを志望している人が多い。また、学部生から修士にかけて生物を学ぶ間に、新たに研究者を目指す学生もでてくるだろう。そこで、一つの事例として、研究者になるために知っておくと得をするかもしれない、いくつかの事例を紹介しておこう。
題して、学部生から研究者を目指す学生が、今から知っておきたいこと

事項\年2014201520162017201820192020 ... 2023..
学年学部1年学部2年学部3年学部4年修士1年修士2年博士1年...博士4年
主な活動授業授業授業研究・院入試・卒論研究研究・修論研究・論文...研究...
目標自分次第自分次第自分次第院入試で上位
奨学金に影響)
投稿論文を
目指した卒研
投稿論文発表
(投稿規定・論文書式)
学振DC申請(5月)論文作成、学振PD申請...研究職応募..
サポート各種留学制度各種留学制度各種留学制度各種留学制度奨学金返還免除各種助成学振DC1奨学金
各種助成...
学振PD申請・
海外学振申請、
助成金, 、奨学金返還免除.
Word・Excelの利用実験・レポート実験・レポート実験・レポート研究・卒論研究・論文・申請書研究・学振申請書・修論研究・論文・申請書・報告書...研究・論文・
申請書...


もしも、修士で第一種奨学金をもらえてそれが免除され、さらに、学振DC1ももらえたら、修士課程と博士課程での収入は、

事項\年201820192020202120222023
学年修士1年修士2年博士1年博士2年博士3年博士4年
奨学金,学振DC11,056,0001,056,0002,400,0002,400,0002,400,0002,400,000


その他にも、学内、学内のいろんな制度で、海外学会に参加したり、留学したりできる(トビタテ留学!の募集要項は、共有しているDropBoxフォルダに入れておいた)。
学振の話しや、申請書の話しはまた次回以降にするが、皆さんに知っておいて欲しい大事なことは、

  • 近い将来にいろんなチャンスが待っていること
  • チャンスは、つかもうと思えば、つかめること
  • そのためには、現状認識と計画が不可欠であること

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

まずは、前回のおさらいから。

授業のmoodleページにアクセスして、演習2をやろう。

後方参照とは?

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

後方参照
正規表現の中で()を使ってグループ化された部分にマッチ文字列は、 ¥1,¥2などの表現で、
再度正規表現の中に埋め込むことが可能です。 

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

()

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

¥1

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

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


K2Editorで実際に試してみると:

テキストデータ  A9JA49K6
・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
  • 演習:3 今までの解説に従って、添付の書籍リストで後方参照による検索置換を行って、
    出版年 <タブ> タイトル・著者,出版年,ページ・価格
    に置き換えてみよう。
  • 答え:
    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/情報処理/正規表現熟語帳を参照してみよう。自分でこういう単語帳を作ってみると、正規表現への理解がますます高まるだろう。
    やりたいこと検索文字列対象文字列の例置換文字列置換された結果例コメント
    1行に含まれる全ての文字列を置換^.*$abcdefg hijklmn 12345
    opqrstu vwzya 98765
    Replaced!Replaced!
    Replaced!
    連続する半角スペースをタブに置換[ ]+abc def hij k¥tabc<tab>def<tab>hij<tab>k
    AまたはKをZに置換[AK]BACK BaKery KABAZBZCZ BaZery ZZBZ
    AまたはKとそれに続く任意の1文字をZに[AK].BACK BaKery KABAZBZZBaZry ZBA
    スペース以外の文字列の連続をtangoに置き換え[^ ]+I am a boy. You are a girl.tangotango tango tango tango tango tango tango tango
    1行を行頭からスペースで4つのパートに区切り、順序を逆に並べ替え^([^ ]+) ([^ ]+) ([^ ]+) (.*)$12 34 56 78 90
    Que sera, sera. Whatever will be.
    ¥4 ¥3 ¥2 ¥178 90 56 34 12
    Whatever will be. sera. sera, Que

発展演習: DNAの塩基配列データの整形処理

添付されているファイルfilesequence_Pdic.fastaには、Pedicularisという植物のDNA塩基配列データがFASTA形式で入っている。GenBankからダウンロードしたままの形式なので、

>gi|310769146|gb|HM596759.1| Pedicularis procera tRNA-Leu (trnL) gene
 (GenBankID, データベース、Accession No.、種名、遺伝子の種類...)

が、それぞれのデータを示すラベル情報として入っている。これを、よりシンプルに、

>種名の省略形_Accession No.
という形に整形したい。上の例だと、
>P_procera_HM596759

に置換したい。どのようにすれば良いか、考えてみよう。
この操作は、実際にDNAデータベースのデータを使って、系統解析を行うときに、知っていると大変役に立つ。

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関数は、エクセルを利用する上で最も頻繁に用いられる関数。使い方をよく覚えておこう。

正規表現検索・置換とエクセルの操作に習熟 [smile]

これまで何回か出てきた話だが、

テキストデータを"タブ"で区切れば、エクセルの表に簡単に移せる

ということだけは、覚えていてくれていると思う。今日もこの技をつかって、テキストデータをエクセルに移し、様々な操作をしてみよう。


Last-modified: 2017-10-30 (月) 12:31:23 (659d)