青竹雑記帖(6代目)

テキスト処理をメインとしたIT解説をします。

コンピュータの奴隷にならないために(大層なタイトルに比して中身スカスカ)

はじめに

2020年代、仕事をする人の多くは何かしらパソコンを触ることと思います*1。その際、コンピュータに使われないよう心がけてみてください。

どうしたらいいか

自分が処理すべき仕事を観察し、そのために必要なことを明らかにしてください。その結果、もしかしたら『パソコンいらんやんけ』という結論に至るかもしれません。その時は遠慮なくパソコンを窓の外に投げ捨て……るのはもったいないので、押入にしまってもかまいません。

私が勝手に奉じる「異端」の学派・ユニケージ手法の思想を説明する『ユニケージ原論』の一節において、「まずそこに仕事がある。それを片付けるためにコンピュータがあり、プログラムがある」という趣旨の記述があり、大変感銘を受けました。最初はKindle Unlimitedで読みましたが、そちらのサブスクを解約したため、現在紙の書籍の調達を図っています。きちんとした記述は本が届き次第確認して引用追記します。この記述は至極当然のことですが、昨今は意外と忘れられがちではないでしょうか。コンピュータは人を楽にするためにあるべき相棒であり、人を苦しめる悪鬼羅刹が詰まった箱にしてはなりません。

とはいえ目の前のコンピュータシステムが我々を呵責する

「俺の仕事にはパソコンがいらんとわかった!」となったところで、会社組織だと社内の業務システムで計画と進捗を入れろだの、経費精算は自分で入力しろだの、管理職は諸事の決裁をシステム経由でやれだの、使用を強制される場面はあるわけです。少し入力を間違えるとシステムが「貴様は間違っているッッッッ!!!!!」と絞め上げに来ます。こわい。パソコンが心身と融合しているような自分でさえ、そういうシステムを滅ぼさねばならないと敵視するくらいなので、一般の人は大変面倒くさいと思いつつ使っているんだろうなと思います。

結論:つよくいきてください

結局それかよ。でも心掛けがあるのと無いのとでは、違ってくるものがあると思います。自分の仕事を整理してみて、なんかこれパソコン使う意味ある? というのが見つかったらチャンスです。最終的にパソコンでカタカタ打ち込まなければならないにせよ、そこに至るまでに散々パソコンに使われまくるより、パソコンから離れて思い通りに仕事をする部分があると精神衛生上よろしいかと存じます。

おまけ:発注側への外野からの居丈高な説教

社内システム部門に発注するにせよ、社外のベンダーに発注するにせよ、発注の際は自分の会社の業務を箸の上げ下ろしまで明らかにして、業務を整理することです。ふわっとした中身だけを投げて、後からあれやりたいこれやりたい、あれが欠けていたこれを入れられないか……そのようなことをやっていたらちぐはぐなことになり、最終的に機能実装希望を出したはずの社内の人間から突き上げを食らうことになります。もちろん受注側も発注側がコロコロ言い分を変えたらイラッと来ます。会社と会社の付き合いだから唯々諾々と従いますが、終業後会社から一歩外に出てただの人とただの人になった時には、夜道に気をつけることです。……脅しではありません。世間一般の心がけを述べたまでです。

※この話はフィクションです。実在のウンタラカンタラとはホゲホゲフガフガ云々。

*1:実は私の身の回りにはそうでない人も結構います。うちの母はパソコンを全く触りませんし、私の行きつけの理髪店のわりと若いマスターは、顧客名簿や会計帳簿をすべて手書きで管理しており、年賀状作りの時だけパソコンを引っ張り出すそうです。

文字だけで扱うコンピュータの世界(12):テキストデータの料理道具

仕切り直し

はい、論文は未だ終わっていません。ゴミです。ただ、ゴミを散らかしてゴミ屋敷にするくらいなら、せめてゴミ袋にまとめて不法投棄すべきなので、その敗戦処理を進めています。同じものにばかり向かい合っていると頭が凝り固まるので、そろそろ再開します。なんと前回の第11回からもう23日経っています。毎日書いたらとっくに34回目になっていたことでしょう。この連載は全255回なので。

blog.aotake91.net

おさらい:テキストデータの形を揃える重要性!

前回、CSVファイル(カンマ区切りファイル)というテキストデータの形式を紹介しました。種々の情報をカンマ記号によって区切って並べて表現するという、簡易的なデータベースのひとつともいえる形式です。このように整えると、今から話すデータ処理がとてもやりやすくなります。

……ところで、実は私、CSVファイルがあまり好きではありません。区切り記号がカンマであるというのは、実はかなり厄介です。とりわけ、カンマが文の区切りとして現れる分、日本語圏よりも英語圏の方が大変かもしれません。どのくらい厄介かを一例として示しますと、

  • 数字を3ケタごとに区切って表示したものをそのまま保存できない。
  • 文章の区切りとして現れるカンマを、データ区切りのカンマと分ける必要がある。
  • 上記の問題を解決するため、データを1つずつ "(ダブルクォート)で囲む方法があるが、データ中にダブルクォートが出てくると、それをデータ囲みのダブルクォートと分ける必要が出てくる。

……やる気なくしました? 奇遇ですね、私もです。CSVファイルは単純な分さまざまな記述法が乱立し、2005年10月にようやくそれらをまとめる形のメモとして、RFC4180 (Common Format and MIME Type for Comma-Separated Values (CSV) Files) が出されました。ただ、これは他の多くのRFCと異なり、標準を定める文書ではありません。単に、CSVファイルがどのようなものであるかを示した情報提供文書の位置付けです。

https://www.ietf.org/rfc/rfc4180.txt

でも、こういう一定の区切り記号でデータを記述すること自体は好きです。私が持つIT的十徳ナイフ・シェルスクリプトAWKの組み合わせで刻みやすいので。区切り記号がカンマ以外、できればデータ中に出て来ないものでありさえすれば良いのです。こうした場合の区切り文字として、よく使われるのが「タブ文字」(ASCII 0x09)です。タブ文字は通常、データ中に使われることはありません。それでいて、キーボードからは「Tab」キーを打つだけで入るので大変入力しやすい文字です。……あー、でもスマートフォンタブレット端末からは入力しづらいと思われます。端末のソフトウェアキーボードにタブ入力のボタンが無いので。

みなさんがタブ区切りを目にする機会のひとつは、ウェブブラウザ(Google Chrome系でもFirefoxでも)で表形式のものをコピーしたときでしょうか。このとき、セルの区切りがタブ文字に変換されてクリップボードに入ります。そのまま貼り付けると、タブ区切りのデータが完成です。せっかくなので、だいぶ前に語ったテキストエディタをどれかひとつ開いて、データを貼りつけて保存してみてください。

料理道具の紹介

ここからは、テキストデータの料理道具を紹介していきます。基本的にはプログラミング言語の紹介になります。正直ありきたりな言語しか取り上げません。あまりエッジの効いた言語を紹介しても応用がまだ難しいと思われますし、なにより私自身が書けません。Haskellまじでこわい。

1. Pythonプログラミング言語

……あまり好きではありませんが、おそらくいろいろなことができて、応用も効いて、あなたのイットライフ(ITライフ)を豊かにするものですから、それを紹介しないのは信義則にもとります。ですから一番手に出します。

www.python.jp

いろいろできます。ここで話していくテキストデータの処理はもちろん、最近流行りの機械学習(ちっとも正しくないけれども世の人に通じやすい呼び方はAI)も、この言語を利用してライブラリを呼び出せば実現できます。これがあれば日常用途はだいたい解決します。めっちゃくやしいですが。惜しむらくは、公式ドキュメントが大してやさしくないことです。あれを読んだだけで物を作れたら君は天才です。今すぐに大学の情報系学科に来るか、会社を立ち上げて億万長者への第一歩を踏み出してください。私とて別に本を読んで学んだわけではありませんが、初学者にとっつきやすそうな本は次の通りです。でも、ここでいきなりポチるより、本屋さんで現物を手にとってパラパラめくってから選んだ方が良いです。最近は私の故郷みたいなクソ田舎のちっこい本屋にもたまに置いてあるようになりましたので。

問題があるとしたら、入門書を読んで学んだだけでは、プログラムとして何を書いたらいいか分からないという点です。日本語の五十音や漢字、主語や述語を学んだだけでは論文や物語が書けないのと同様、作りたいものに向いた思考法や、処理手順規則のようなものを学ぶ必要があります。本連載ではしばらく先でその部分へ入ろうと思います。

2. Rubyプログラミング言語

超大好きです。全人類使いたまへ。

これもいろいろできます。かなり気が効いたメソッド(データを処理するための命令)が豊富に揃っており、Pythonだと面倒な記述が必要な部分でも、Rubyですと1行で済むことは往々にしてあります。ウェブ系プログラミングでは「Ruby on Rails」というフレームワークRubyを利用してプログラムを作るようになっています。惜しむらくは、機械学習系の環境の面ではPythonが世界に覇を唱えていて、Rubyだけでは実質的に機械学習の環境が整わない(整えられなくはないが、Pythonだと数個の手順で済むところを数百個の手順を要してしかも構築失敗しやすい)点があるため、そちらに興味がある人を誘いづらい点にあります。まあ、RubyからPythonやCのライブラリを呼び出す仕組みを利用したり、機械学習のライブラリを呼び出す直前までのデータ整形をRubyで書く(わたしです)などすれば良いのですが……

www.ruby-lang.org

rubyonrails.org

3. AWKプログラミング言語

ja.wikipedia.org

私が初手で使う言語です。

    1. お前Rubyが超大好きだって言ったじゃねえか、初手で使わんのか。
    1. 最近Bashコマンドラインから直接いろいろ書いてデータを刻むようになりまして。

正直に申しまして、この言語をいきなり使う人間は奇怪の具現です。真似をしてはいけません。でも、サーバサイドのプログラミングや保守管理を実施する人は学ぶべきです。仕事の能率が18,446,744,073,709,551,616倍(64ビット)になります。成立が1977年なのでもう46歳です。2年一昔とされる(当社調べ)の情報技術の世界では二十三昔の枯れに枯れたプログラミング言語です。でもバージョンアップが続いています。AWKを使うと、CSVのようなデータを区切り文字で分けて、フィルタリングや集計を実施することができます。手軽ながら強いです。

4. UNIXコマンド群

AWKと組み合わせて、いろいろなコマンドを利用してテキストデータを刻むこともよくやります。UNIXmacOS)やLinuxで利用できます。Windowsでも、WSL(Windows Subsystem for Linux)を利用してLinuxをインストールすると使えます。いくつか出しますと。

  • すぐに使えるもの
    • grep : 特定の語を検索して抽出する。
    • sed : 1行ごとに、与えられた命令に従ってテキストデータを処理する。
    • sort : ファイルの行を指定した一定の基準で並べ替える。
    • uniq : 重複した行を1行にまとめる。
    • join : 2つのファイルについて、指定したフィールドの値が一致するものを結合する。(SQLにおけるJOIN句に類似)
  • 追加インストールで使えるもの
    • jq : JSONJavaScript Object Notation)形式のテキストデータを処理・抽出ができる。
    • xmllint : XML形式のテキストデータを処理・抽出ができる。

このあたりのこともベラベラ喋りたいのですが、連載回的にはしばらく先のことになりそうです。

5. LibreOffice Calc(表計算ソフト)

ここまで来て突然表計算ソフトが出てきましたが、プログラミングがいっちょんわからん(←肥筑方言。共通語訳の一例:まったくもってわからない)人には大変有力、プログラミングがわかる人にも有力な選択肢です。視覚的にデータが処理できるので最高です。でも数百万件もあるデータは扱えないので、その場合はプログラミング言語を学んでいただく必要があります。

次回予告

Pythonを使って郵便番号データをいろいろやります。たぶん。

ふりだしにもどっています

連載は年明けまでおやすみ

お久しぶりです。現在進行形で \(^o^)/ やってます。端的に言えば、論文が実質的に振り出しに戻ってしまいました。全部反故になったわけではありませんが、ほぼ書き直し、組み直しなので先行き不透明です。少々連載ネタを思いつけないのもあって、思いきって年明けまで連載を休むことにしました。青竹先生の次回作にご期待ください!

その他の近況

西鉄天神大牟田線で今年も大晦日終夜臨時列車が運転され、正月ダイヤも三が日に施行されるので、論文の息抜きがてらそのデータ整備に勤しんでいます。文章に向かいつつ息抜きに数字に向かい合っており、結局パソコンから離れられないわけですが。……一応、終夜臨時の一覧形式の時刻表を作り、さらに通常ダイヤ分の車両運用関係資料3点セットもPDF原稿が出来上がりました。あとは資金調達をすれば印刷を発注して本ができるという算段です。来月下旬頃の頒布開始を考えています。

文字だけで扱うコンピュータの世界(11):テキストデータの料理準備(素材の形を揃えよ)

承前

ここまで10回 + おまけ1回の記事を読んでくださり、1世紀……いえ、1週間でしたか、それくらいの期間にわたるお試し活用をしたことで、テキストデータを作る方法のひとつである「テキストエディタを活用した文章などの記録」に関する基礎的な技が習得できたと信じています。まだテキストエディタを3分しか開いていない方は、少なくとも30分くらい遊んでみてください。すると明日のご飯が真鯛の刺身になります。高級なものはなかなか食べられませんが、近所のスーパーには養殖真鯛のサクが数百円くらいで並んでいたりします。九州は真鯛が全国よりも安いらしいのですが、詳細を調べたことはないので地域価格差を調べてみたいですね。15年前くらいの統計しか見つからなかったのでそれで比較しますと、10都市(札幌・仙台・東京・横浜・名古屋・京都・大阪・神戸・広島・福岡)の卸売1kgあたり平均価格が1,007円、各都市別には札幌2,009円、東京1,056円、大阪986円のところ、福岡が885円でした。他の項目も見ると、福岡だけで全国平均値を大きく引き下げているような価格水準でした。今もたぶん安めの水準だと思うので、みんな魚を食べに来てください。

www.e-stat.go.jp

食材の調理はここではできないので、テキストデータを調理します

閑話休題。みなさんの手元にテキストデータがたくさん生成されたと期待したいところですが、とにかく先を読んでみたい! という方に、面白そうなデータを探して持ってきてみることにします。最近は「オープンデータ」という取り組みで、たとえば郵便番号と住所の対応表ですとか、地域の災害時避難場所の一覧ですとか、先ほど述べた政府統計などが自由に利用できるようになっています。それらも、かつてはにっくきExcelワークシート形式でしたが、最近では、Excelでも読み込むことができて、それ以外の方法でも読み込んだり、幅広い活用が実現できるCSV(Comma Separated Values・カンマ区切りデータ)という、テキストデータで提供されるようになってきています。ありがたい話し!

ここでは、日本郵便が作成し、自由に利用できると明言している郵便番号データを利用してみます。ひとまず、「住所の郵便番号(CSV形式) > 読み仮名データの促音・拗音を小書きで表記するもの」とリンクをたどり、全国一括データ「ken_all.zip」をダウンロードしてみましょう。ダウンロード後、zipファイルを展開すると、KEN_ALL.CSVというファイルが出てきます。

www.post.japanpost.jp

KEN_ALL.CSVというファイルもテキストデータであり、かつ、テキストファイルによって実現されたシンプルなデータベースのひとつであると言えます。最近のExcelLibreOffice Calcでは、全国一括版のデータも最後まで全部読み込むことができますが、古いバージョンだと「ファイルが大きいので一部だけ読み込みました」のようなメッセージが出てくることがあります。今回は表計算ソフトを使わない方法でアプローチしますので関係はありませんが、このことを覚えておくと役に立つかもしれません。

さて、このファイルをテキストエディタMery」で開くと、次のような感じになります。

郵便番号データ「KEN_ALL.CSV」をテキストエディタ Mery で開いた画面です。
郵便番号データ「KEN_ALL.CSV」をテキストエディタ Mery で開いた画面です。

ちなみに、最終行は124,562行目(12万4562行目)で、沖縄県八重山郡与那国町与那国になります。このファイルは、めちゃくちゃな形式で書かれているわけではなく、一定の形式(フォーマット)に従って情報が書かれています。その説明は次のリンクにあります。

www.post.japanpost.jp

カンマ記号(,)で区切りつつ、15個の情報が記述されています。これをExcelに読み込ませると一覧表として分かりやすくなります……が、普通に開くと郵便番号データとの相性が悪いある種お節介な機能のため、データが正しく読み込まれません。頭のゼロが消えてしまいます。これは、郵便番号の数値を「数字」として変換してしまい、数字は先頭にゼロが来ないことから、それをバッサリ切ってしまいます。これを回避するには別の開き方をする必要があったと思いますが、方法を忘れましたのでプロの情報を探してください。LibreOffice Calcですと読み込む際に「テキストのインポート」という画面が出て、そこで列の種類として「テキスト」を選ぶときちんと頭にゼロがついたまま読み込んでくれます。

Excelですとデフォルトでは頭のゼロが消えてしまいます。
Excelですとデフォルトでは頭のゼロが消えてしまいます。

テキストエディタによっては、CSVをきれいに表示してくれる機能を持っていたり、CSVのデータ区切りを利用して簡単な計算機能を実現しているものもあります。私が知っているCSV専門のテキストエディタは「Cassava Editor」です。お試しください。

www.asukaze.net

何が言いたかったか

データ活用のためには、データを一定の形で整えておくことが大事です。料理の際に基本的に食材の大きさを揃えるのと同じだと覚えていただければ。

次回予告

データの料理をしますが、具体的内容を思いついていません。どうしましょう。考えます。

本日も休業(ワクチン副反応やばし)

本日も休業です。

昨日、今日と新型コロナウイルス感染症(COVID-19)ワクチンの副反応でぶっ倒れていました。熱が最高で38.6℃まで上がり、全身の筋肉痛や頭痛などを数年ぶりに味わいました。昨日夜あたりに時刻表をせっせと作っていましたが半分意識が飛んでおり、こちらの記事ネタを考えるまで頭が回りませんでした。いやはや。

明日はどうですかね。体調は戻りましたが、大学関係の用事が立て込んでいるので書けるかどうかわかりません。次は来週火曜日になるやもしれません。期待せずお待ちください。