1.準備

1_5 エディタの活用(2019/2/14)

1)エディタを活用する対象

テキストエディタ(以降では、「エディタ」と呼びます。)は、データ分析には無くてはならない相棒です。エディタでは、テキストファイルを扱います。
テキストファイルとは、ファイルタイプが「.txt」となっているファイルが一般的ですが、ファイルタイプが「.csv」となっているcsvファイル等もテキストファイルの仲間です。共通しているのは、文字コードだけで表せているということです。文字コードとは、asciiに代表されるもので、JIS、シフトJIS、EUC、Unicode等があります。コンピュータで扱うデータは、bit単位で表され、1bitでは「0」または「1」のいずれかが表せます。そして文字は、通常1byte又は2byteで表されます。1byteで表されるのは、asciiやUTF-8(unicodeの1つ)であり、2byteで表されるのは、シフトJISやUTF-16(unicodeの1つ)になります。1byteは8ビットですので、最大2の8乗(256)種類が表せ、2byteは16bitですので、最大2の16乗(256×256=65536)種類の文字が表せることになります。日本語は漢字を含むために2bayte文字でないと表せないことになります。文字コードは、使用されているパソコンの種類等によって異なり、インターネット上のデータ等を利用する時には注意してください。作成された文字コード以外の文字コードで表示させようとするとデタラメな内容が表示されます。俗に「文字化け」と言われる現象です。Sublime Textでは、ファイルメニューの「Reload with Encoding」で文字化けが解消できます。
テキストファイル以外のファイルは、バイナリファイルと呼ばれます。EXCELやWORD等のプログラム固有のファイル、圧縮ファイル、暗号化ファイル等です。バイナリファイルは、文字コードで表されていませんので、エディタでは内容を確認することはできません。エディタで開くと、文字化けした場合と同様にデタラメな内容が表示されますが、文字コードでは無いので、対応する文字コードがありませんのでどの様にしても本来の内容を表示させることはできません。

データ分析でエディタを活用するのは、第一に、プログラミング(Pythonのプログラム(pyファイル)をコーディングする)時に使用します。第二に、データ(csvファイル)を確認する際や、データの一部を加工する際に使用します。第三に、データ分析に対するコメントを残す場合等に使用します。コメントファイルは、EXCELやWORD等で残すことも可能ですが、本ブログでは、テキストファイル(txtファイル)で残すということを前提に説明します。
コメントファイルは、ReadMe.txtとNotes.txtの2種類を使用します。いずれも、該当するプロジェクトのフォルダに格納されます。それ以外については、当該事項をファイル名としたコメントファイルを残すことになります。
ReadMe.txtには、当該プロジェクトの解説を記載します。プログラムファイル内に記載してしまうことで、ReadMe.txtを作成しないという選択肢もあります。解説には、作成者、作成時期、作成の目的、発注者、入力の説明、プロセスの説明、出力の説明、更新履歴、注意事項等を記載します。
Notes.txtには、当該プロジェクトの分析記録を記載します。プログラムファイル内に記載してしまうことで、Notes.txtを作成しないという選択肢もあります。記録には、実施日、データ件数、所要時間、データの修正内容、プログラム作成・実行時の留意事項、その他の注意事項等を記載します。
これら以外には、データのレイアウト情報、調査対象情報、利用ライブラリ等の使用方法情報等があります。

2)Sublime Text3の特徴

Sublime Text3(以下、「ST3」と言います)は、Pythonにとても相性が良いエディタで、拡張機能がPythonで記述されているそうです。豊富な機能が備わっていますが、とても軽いと評判です。しかも、現時点では無償で使用できます。恋に落ちるエディタと呼ばれています。
インストール時に気が付かれたと思いますが、豊富なパッケージが備わっています。Python以外についても対応するパッケージが豊富です。インストール時に紹介していないパッケージについては、個人の好みで追加してください。
入力の補完機能が豊富で、候補を選択したらTABキーで決定するだけで入力できます。自分で入力した方が速いと考えられる方もいますが、プログラミング時には入力ミスがつきものですので、入力補完機能によりミスが軽減できます。単純に括弧等の引用符補完も行ってくれ、開きの記号を入力するだけで閉じの記号を保管してくれます。また、閉じられていない文章を強調表示する等してミスを知らせてくれます。
ST3では、複数のファイルを開くと対応した複数のタブが開かれます。そして、ST3を終了しても、次にST3を実行すると以前に開いていたタブが開かれたままになります。新しいファイルを開いたのであれば、新しいファイルと以前のファイルのタブが表示されることになります。ファイルを閉じるのであれば、タブを閉じる必要があります。面倒な様でもありますが、複数のファイルを同時にチェックしながら編集するのに便利です。
ST3は、開いたファイルの拡張子(EXCELファイルならば、”.xlsx”等です)により、適用するシンタックスを自動判別してくれます。例えば、Pythonのプログラムの拡張子は、”.py”ですが、Pythonプログラムであると判別すれば、Pythonの文法に応じた編集を容易にするシンタックスを適用してくれます。もし、適用されない場合は、最初に手動でシンタックスの設定を行えば、次回からは自動的に設定してくれます。適用されているシンタックスは、メニューの「表示」を選択し、シンタックスを選択すれば表示されますので、左側にチェックマークがついているシンタックスを探していただければわかります。但し、右側に大なり記号”>”が付いているシンタックスは、階層形式になっていますので注意が必要です。沢山のシンタックスがありますが、Pythonのプログラム編集では、シンタックスがPython3となっていることを確認してください。
ST3の特徴に複数カーソル(分身の術?)という機能があります。Ctrlキーを押しながら異なる場所をクリックすることで、カーソルがどんどん増えていきます。その後、キーボード入力すれば、それぞれのカーソル位置では、同じ編集処理が行われます。同じ文章を複数入力する場合や、同一の修正を複数行う場合にとても便利です。
また、ST3では、文字列を選択し、その状態でCtrl+Dを入力すると次の当該文字列が選択されてカーソルが現れ、Ctrl+Dを押す度に次の文字列にカーソルを追加します。Ctrl+Uを入力するとカーソルがキャンセルされていきますので、行き過ぎた場合に使用します。この様にして同一の文字列にカーソルを追加し、同一の修正をすることができるようになります。右矢印を入力すると選択が介助されますが、カーソルは分身したままですので、文字列に文字を追加したり、部分的な変更をすることができます。キャンセルしたい場合は、Escキーを押すか関係ないところをクリックすれば、最初のカーソルだけに戻ります。
この様にST3では、多くのショートカットキーが設定されていますので、慣れると使いやすくなっていきます。ネット上に、ショートカットキーの説明が沢山ありますので少しずつ覚えて使ってみてください。ST3には、編集の実行歴を記録することでマクロ登録する等の高度な機能もありますが、必要に応じてネットで勉強してください。

最後に、検索と置換について説明します。ショートカットキーでも可能ですが、メニューの”検索”から、”検索…”や”置換…”を選択することで処理する方法を説明します。”検索…”は”置換…”の置換文字列の指定が無いだけですので、”置換…”について説明します。
“置換…”を選択すると”Find:”と”Replace:”の入力エリアが画面の下に現れます。”Find:”に指定した文字列を”Replace:”に指定した文字列に置き換えることができます。”Replace:”に文字列を指定しないで検索機能だけ使うこともできます。
Findボタンでは、カーソルのある位置の次の検索文字列を検索します。文字列を1つずつ検索することができます。”Find ALL”ボタンでは、全ての検索文字列を選択状態にし、更にカーソルを全てに追加します。これで、検索した文字列の編集が可能になります。Replaceボタンは、カーソル位置から1つずつ検索文字列を置換文字列に置換し、”Rplace All”ボタンでは、全ての置換処理をまとめて行います。
左側にある、.*等のボタンは、高度な置換処理に活用します。各ボタンは、マウスオーバーで英語の説明が現れます。
それぞれの意味は、クリックしてハイライトされている状態で以下が可能になるということです。
 ・Regular expression:正規表現を利用
 ・Case sensitive:大文字小文字を区別
 ・Whole word:完全一致のみを検索
 ・Wrap:ファイルの最後まで検索したらファイルの先頭に戻って検索
 ・In selection:選択範囲内を検索・置換
 ・Preserve case:検索対象の最初の文字と同じ形式にして置換
 ・Highlight matches:検索キーワードにマッチした箇所をハイライト
例えば、ファイル内の置換対象としたい部分を選択した後、In selectionを選択してからRplace Allボタンを実行すると、選択範囲内だけの文字列が置換され、選択範囲外は置換対象になりません。部分的な置換としてとても重宝します。
以上の様に、ST3は慣れるほどに使い易くなるエディタだと思います。

3)csvファイルでの活用

本ブログでの分析対象データは、csvファイル形式のファイル(テキストファイル)になります。つまり、テキストエディタであるST3でファイルの中身をチェックすることができるということです。分析を始める前には、先ず、ST3でファイルの中身をチェックするようにしてください。プログラムでもデータのチェックは可能ですが、人間の眼のチェック能力は偉大です。思わぬ想定外の事象は、眼で見ることで確認することが可能になります。
通常は、ビッグデータでもST3で中身を見ることができます。ファイルが大きな場合は、プログレスバーが表示されますので表示準備に時間が掛かっていることが分かります。パソコンの性能によって表示できる規模や時間は変わりますが、プログレスバーが進んでいれば、バーが最後まで進めば表示されます。
ファイルが表示されれば、中身の確認に時間は掛かりません。とても軽いエディタであることが実感できます。1行が画面に入りきらない場合、初期状態では、画面サイズで折り返して表示されます。1画面内に1行の情報がすべて表示されるというメリットがありますが、データの全体のチェックをするのであれば、折り返さない方が並びのチェックまで可能になり有効です。この場合は、メニューの”表示”を選択し、折り返しを選択することで折り返しが解除できます。再度表示させるとプルダウン上に表示されていた折り返しの前のチェックが外れていることが確認できます。再選択すれば、再度折り返しの状態になります。
データのチェックは、折り返しが無い状態で行いますので、画面の下に表示される横のスクロールバーを移動させることで、横の位置を調整してください。横の位置を調整した状態で、縦のスクロールバーを移動させることでファイルの全てをチェックしてください。ファイルが大きくなければ、スクロールバーのノブの下をクリックすることで、1画面ずつ正確にした方向にチェックしていけますが、ビッグデータの場合は、最初の方と最後の方以外については、ノブをクリックして時間の許す範囲でゆっくりと移動させて眼で確認してください。それなりに速い速度でスクロールしても大体の形式チェックは可能です。
ビッグデータでなければ、メニューの”表示”からシンタックスを選択し、rainbow_csvを選択し、右にスライドして下位のシンタックスを表示させ、一番上の”CSV(Rainbow)”を選択してください。csvファイルの中身を列毎に色を変えて表示してくれますので、列の内容を確認するのが容易になります。ビッグデータの場合は、本シンタックスを実行しようとするとST3がハングアップして応答しなくなることがありますので注意してください。
ST3は、csvファイルの中身を確認するだけでなく、データの修正をするケースや、ヘッダーの追加修正に活用します。ST3の機能を使って、ミスのない編集作業を行うようにしてください。しかし、データの中身を変更する場合は、必ず変更する前のデータのコピーを作成してから行うようにしてください。元のデータを無くしてしまうことだけは絶対に避けてください。やり直しがきかなくなります。

4)プログラミングでの活用

ST3は、非常にPythonのプログラミングに適しています。例えば、シンタックスに応じて入力文字の色分けをしてくれます。Pythonのコメントは、グレー表示されますので、プログラムとの対比が分かり易くなっていますし、予約語、イコール記号やクーテーション指定を色付けしてくれますので、見易くなっています。また、Pythonのプログラミングでは、インデントが非常に重要ですが、自動的にインデントを行ってくれますのでミスが少なくなります。
本ブログでは、Pythonのプログラムをエディタで編集し、エディタ内のプログラムをインタープリタであるIPythonにコピペして実行します。コピーする場合は、対象範囲をマウスで選択することも可能ですが、左側に表示されている行番号をクリックすることで当該行が選択できますし、Shiftキーを押しながら行番号を選択することで複数行の選択も可能です。選択した後、Ctrl+Cでコピーして、IPythonの画面を選択してから、Ctrl+Vでペーストしてください。その後、IPythonでEnterキーを入力することで当該プログラムが実行できます。但し、複数行をコピペした場合は、カーソルが行の先頭に来るまで複数回(3回)、Enterキーを入力する必要があります。カーソルが行の先頭に来ていない状態では、プログラムは実行されていませんので、どれだけ待っても処理は開始されませんので注意してください。
ST3では、プログラミングにおいて、括弧やコーテーションの入力で、閉じる側が自動的に補完されるだけでなく、プログラムを入力している途中でも、入力している状態に応じて、入力候補のリストをプルダウンで表示してくれます。矢印キーで選択して、タブキーで決定することで自動的に入力してくれます。これは、PythonのシンタックスをST3が理解した上で候補となる文字列を表示してくれますので、正しいスペルを覚えていない場合に有効ですし、入力ミスの軽減にもなりますので、活用してください。
データ分析においては、複数の変数に対して、同じ分析処理を実行することが多くあります。この様な場合は、先ず、1つの変数に対する処理のプログラムを記述し、その後、同様の処理を実施する数だけ、当該処理をコピペします。その後、2つ目の処理のプログラム範囲を選択した状態で、置換処理で、元の変数名から次に処理の変数名にすべて置換します。置換の”In selection”の機能を活用することになります。そして、この置換処理を対象となる変数の分だけ実行します。
但し、この場合には、2つの注意点があります。1つは、検索対象の変数名と同じ文字列が対象変数以外に無い事に注意する必要があります。もし存在したら、関係のない文字列部分も置換されて今います。2つ目は、”In selection”のボタン選択を忘れないということです。もし忘れてしまったら、ファイル内の全ての検索文字列が置き換わってしまいます。置換を実行する度に、所望の対象文字列以外が置換されていないことに注意してください。もし、対象外の置換をしてしまった場合は、慌てずに、メニューの”編集”の”元に戻す”を選択して、置換する前の状態に戻してください。
プログラムの作成には、履歴管理が重要です。間違えて修正削除してしまうことがありますし、修正中にファイルを消してしまうケースもあり得ます。ST3は自動保存の機能がありますが、注意してください。自動保存の機能があっても、間違えた修正後に保存してしまったら元には戻せなくなります。大きな修正をする際には、元のファイルをコピーしておく等の対策を取るようにしてください。定期的なバックアップも重要です。個人情報の保護等と同様、仕事上のリスク管理を怠らないようにしてください。

5)正規表現の活用

最後に、エディタの活用上、重要な役割を果たす正規表現について説明します。エディタの置換処理の方法については、上述しましたが、その中の機能の一つである”Regular expression”(正規表現)は、データ分析作業で重要になります。
データ分析作業は、同じような作業を何度もすることになりますが、人間は同じ作業をしていると思わぬミスを犯してしまうことが多々あります。この様なミスを減らすのが、エディタ活用の重要なポイントです。例えば、前項(プログラミングでの活用)では、同じような処理をする際、”In selection”の機能を利用して置換処理をするという説明をしました。これも、自分の手で置換対象を1つずつ修正していくことも可能ですが、どうしても修正ミスや修正漏れが発生してしまいます。この様な方法に慣れることで、人為的なミスを減らせることができると思ってください。
こうした繰り返しの置換処理で有効になるのが正規表現です。複雑な置換処理を正規表現で指定することで、通常は人手で行わなければならなかった置換処理が自動化することができるようになるということです。ここでは、正規表現の解説をしませんが、どういうものかが分かる程度の簡単な説明をします。ネット上に多くの説明がありますので、探して学習してください。できることが少しずつ増えていくと思います。
先ず、ファイル内の各行の先頭に”ABC”という3文字を追加する方法を説明します。何もないところに追加するのですから、通常の置換では対応できませんが、正規表現を使えば対応できるようになります。置換の”Find:”の欄(検索条件)と”Replace:”の欄(置換条件)の指定を正規表現で行い、”Regular expression”のボタンを押してから”Rplace All”ボタンを押せばよいということです。具体的には、以下の様になります。
 検索条件:^
 置換条件:ABC
これでOKです。検索条件の”^”(ハット記号)は、正k表現では行の先頭を意味します。つまり、行の先頭をABCに置換するという指定になり、結果として、各行の先頭に”ABC”という3文字を追加することができたということです。
各行の最後にABCを追加する場合は、正規表現では行の最後を意味するのが”$”(ドル記号)なので、以下になります。
 検索条件:$
 置換条件:ABC
次に、簡単な応用問題を説明します。例えば、変数名だけが各行に記載されているファイルがあった場合、このファイルから各変数をダブルクォーテーションで囲み、更にそれぞれをコンマで接続した1行の情報にしたいとします。この様な作業は、Pythonのプログラムを記載する場合に有用になることがあります。人手でもできますが、変数が沢山あると面倒ですし、ミスのもとになります。以下の様に3段階で行います。
1回目の置換処理は、以下です。
 検索条件:^
 置換条件:”
これで、各行の変数名の前にダブルクォーテーションが追加されます。
2回目の置換処理は、以下です。
 検索条件:$
 置換条件:”,
これで、各行の最後にダブルクォーテーションとコンマが追加されます。
3回目の置換処理は、以下です。
 検索条件:\n
 置換条件:
これで、行の最後の\n(改行の正規表現)を何もない状態に置換することで、改行が無くなり、1つの行となったダブルクォーテーションで囲まれた変数名が、コンマで区切られます。但し、最後のコンマ等が余分になりますので削除しなければなりません。また、改行のコードは、ファイルが作成されたパソコンによっては、\nでは無く、\rであったり、\r\nであったりしますので、ファイルに合わせて変える必要があります。改行コードを調べなくても3回やってみればわかります。尚、2回目と3回目の処理は、1回で行ってしまうことも可能ですがここでは説明しません。考えてみてください。

最後に、少し複雑な方法を1つ説明します。各行の最初に現れる決まった文字列(1文字でも複数文字でも良い)だけを置換する場合についてです。例えば、各行の最初の”,”(コンマ)だけを”_”(アンダースコア)に置換するには、工夫が必要です。難しいのは、各行では、最初から何かしらの文字がいくつかあって、コンマがあるという部分です。この置換は、以下の様になります。
 検索条件:(^.*?)(,)
 置換条件:$1_
検索条件では、最初の括弧で、行の最初にいくつかの文字があって、次の括弧内の文字列を検索することを指定しています。そして、置換条件では、検索で最初の括弧で示した文字列までに相当したのが$1であって、それをそのまま置き換えて、次の括弧の文字列をアンダースコアに置換するという指定になります。あら不思議、最初のコンマまではそのままで、コンマがアンダースコアに置き換わります。尚、コンマから始まる行についても、最初のコンマがアンダースコアに置き換わります。
色々できそうだということが分かってもらえたでしょうか?これに慣れてしまうと、正規表現の機能が無いエディタでは物足りなくなってしまいます。やりたいことがあったら、ネットで調べてみてください。先ずは、簡単な方法を覚えて、段々と慣れていけば良いと思います。