スポンサーリンク



2019年02月06日

仕事で使える英語表現(9):If it works for you(都合がよければ)

If it works for you(都合がよければ)

 ども勉三です。「仕事で使える英語表現」の第9回目。今回は If it works for you... という表現について解説します。

日程や時間帯を提案する時に非常に便利

 work という動詞には、"A works for B" で「A が B にとって問題ない、都合がいい」という用法があります。この表現は、会議の日程や時間帯などを決める際によく使われます。例文を見てみましょう。

Why don't we meet at six, if it works for you?

もし都合がよければ、6時にお会いしませんか?

 このように、日程や時間帯を提案するというのは日常会話でもビジネスシーンでも毎日のように遭遇する場面ですよね。このような場面でただ単にこちらから提案するだけだと、失礼に聞こえてしまうケースもあるかと思います。そんな時は、if it works for you と付け加えるだけでぐっと丁寧で自然な表現になります。

 もちろん、ここでの it は提案した時間帯(6時)を漠然と指しているわけです。なので、if the timing works for you などのように表現することもできるでしょう。

それ以外でも様々な場面で使える有能選手

 it works for you の使い道はそれだけではありません。次の例文を見てください。

I made draft presentation material for the next week's meeting. Could you check if it works for you?

来週の会議の発表資料案を作成したのですが、これで問題ないかご確認いただけますか?

 このように、漠然と何かの内容が問題ないかを確認するのにも使うことができますし、使い方も普通の疑問節としてだけではなく、このように動詞と組み合わせた名詞節としても使うこともできます。例えば、Let me know if it works for you なんて言い方も可能ですね。

まとめ

 いかがでしたでしょうか? このように非常に汎用的で便利な表現なので、ぜひ覚えておくことをおすすめします。

スポンサーリンク




posted by 勉三 at 23:20 | Comment(0) | TrackBack(0) | 英語
2019年01月24日

AI/機械学習講座(3):Python は極力 venv / pipenv で仮想環境を作って利用すべし

Ubuntu上でPython環境を構築する

 ども勉三です。「AI/機械学習講座」の第三回目。前回までに Ubuntu のセットアップを済ませたので、今回はいよいよUbuntu上での環境構築に入っていきます!

Ubuntuには最初からPythonはインストールされている

 Python の環境構築といっても、実は Ubuntu には Python が標準でインストールされています。確認のため、Ubuntu上でターミナルを起動し、下記のコマンドを入力してみましょう。python がインストールされていればバージョンが表示されるはずです。

Python 2.x の場合(結果は例)

$ python --version
Python 2.7.15rc1

Python 3.x の場合(結果は例)

$ python3 --version
Python 3.6.7

 Python は2系(2.x)と3系(3.x)で大きく言語仕様が変わっており、プログラムも別になっています。ターミナルで python と入力すると2系、python3 と入力すると3系のプログラムが起動するようになっています。

 1つの環境に2系と3系を同居させることも可能で、最初から両方インストールされていることも多いので、上記の両方のコードを試してみてください。

いきなり pip install でパッケージをインストールしたりアップデートするのはダメ

 さて、ここからが大事なのですが、初心者がインターネットや書籍の解説を見ながら Python を始める場合、いきなり pip install でパッケージをインストールしたり、あるいは既に入っているパッケージをアップデートしようとしたりすることが多いです。これはやめてください。

 Python では1つ1つのプロジェクトごとに仮想環境を構築し、その仮想環境の中に必要なパッケージだけをインストールするのが基本です。少しややこしいですが、ここでの仮想環境とは「Windows 上で VirtualBox を用いて仮想の Ubuntu 環境を動かす」といったよく使われる仮想環境とは意味が異なり、Python が動作する時にプロジェクトのフォルダだけに入ったパッケージが全てであると思わせるような、一種の隔離空間になります。

 なぜこのような仮想環境が必要かというと、Python はパッケージ管理が非常に複雑で不具合を引き起こしやすいからです。これは様々なパッケージを用いることができるという Python の強みの裏返しのようなものと言えます。例えば、おおもとの Python に対して何かカスタムパッケージをインストールした結果、これまでは問題なく動いていたプログラムが動作しなくなるということがありえるのです。

 その場合、仮想環境を使っていなければ Python やパッケージを全てアンインストールして、原因を究明していかなければならない可能性があります。一方で、仮想環境を使っていれば、何かあったとしてもその仮想環境を削除すればいいだけです。そもそも、ある仮想環境にインストールしたパッケージが、別の仮想環境に影響を与えることも無いので、そのような必要性も限りなくなくなります。

Anaconda も無闇に入れない方がいい

 あと特に日本語で出ている Python 入門書によく見られますが、Anaconda というディストリビューションのインストールが推奨されていることが多いです。これも無闇にインストールしないほうがいいです。

 確かに、数値演算/機械学習関連のパッケージがプレインストールされており、conda というパッケージマネージャがついていて便利ではあるのですが、現在は python 標準の pip や venv が機能強化されてきており、そちらを使った方がいいです。Anaconda は Python 標準のパッケージが貧弱だった時代の名残です。

 pip と conda の併用の危険性に関しては、こちらのブログ記事「condaとpip混ぜるな危険」なども参考にしてください。

Python 仮想環境の作り方

現在の仮想環境標準パッケージである venv を使おう

 仮想環境の作り方ですが、python のバージョンによってデファクトスタンダートとして推奨されている方法が異なっており少々ややこしいのですが、Python 3.6 以降では venv というパッケージを使うことが公式で推奨されています。venv は Python 3.3 以降であれば最初から入っているので、特にパッケージをインストールしなくても利用可能です。

 なお、venv の他に pipenv というものが2018年に登場し、新たなデファクトスタンダードの地位になりつつありますが、これは裏で動作しているのは pip や venv などの既存のパッケージです。最初から pipenv を使って勉強することも可能ですが、まずは裏で動いている個々のパッケージの動作を理解した方が分かりやすいと思うので、本講座では仮想環境には venv、パッケージ管理には pip を使いたいと思います。

 この他にも virtualenv, pyenv など過去のものも含めると様々な仮想環境パッケージが存在しています。ネット上で「Python 仮想環境」とだけ検索すると、これらの使用例も引っかかってくるので、必ず記事が何のパッケージについて書かれたものなのか確認しましょう。

まとめ&次回予告

 今回の内容をまとめると「anaconda は無闇にインストールしないで」「仮想環境は venv を使って」ということになります。単純なことですが、たぶん何もわからずに Python を始めた人は、ハマりやすい落とし穴だと思います。

 長くなったので venv や pip を使った、本格的な Python 環境構築は次回に回したいと思います。

スポンサーリンク




posted by 勉三 at 21:32 | Comment(0) | TrackBack(0) | IT
2019年01月14日

プログラミング言語紹介(2):R / Python / MATLAB

 ども勉三です。「プログラミング言語紹介シリーズ」の2回目。今回は、いま流行りの機械学習や人工知能で注目されホットであり、何かと比較されることが多い R / Python / MATLAB の3言語について紹介したいと思います。

「オープンな R と Python」vs「商用ソフトウェアの MATLAB」

 まずざっくりとこの3言語を分類するなら、まずオープンかどうかで区切ることができると思います。オープンなのは R と Python、企業が開発して商用ソフトウェアとして販売されているのが MATLAB です。

 勉三はこの3言語はいずれも利用してきましたが、やっぱりドキュメント類は MATLAB は群を抜いて整備されています。線形回帰とかPCA解析とかの説明とか、普通に読んでても勉強になるレベルです。

 一方で、R や Python は基本的にドキュメントが分かりづらい。オープンソース界隈の文化というか、公式ドキュメントも分かる人だけ分かればいいというスタンスですね。ただ、利用者が圧倒的に多い分、何かやろうと思った時に調べれば、どこかのユーザが書いた解説ページがすぐ見つかるのは MATLAB にない利点です。

 また、オープンか商用かの違いは、環境設定の複雑さとも関係します。MATLAB はクローズドなエコシステムというか、MathWorks 社が作成したパッケージを使うのみなので、パッケージやバージョンによる依存関係や環境による違いとかもあまり問題にはならないのですが、R や Python は誰でもパッケージを作れるので環境構築で苦戦することが多いです。ただ、これは R や Python の高い拡張性を意味するので、コインの裏表のようなもので一概に悪いというわけではないですね。

「行列演算が標準の R と MATLAB」vs「標準ではない Python」

 行列演算というのは、行列(配列) a から x と一致する要素だけを抜き出した新たな行列を作りたい場合、a[a == x] のようにして書ける記法のことです。一般に、数値演算ではなるべく for ループを避けて、行列演算の形で一気に行った方が遥かに高速なため、この機能は必須となっています。

 この行列演算が標準でサポートされているかどうかで3言語を区分することができます。標準なのが R と MATLAB、標準でないのが Python です。こう書くと Python では行列演算できないみたいに思われてしまうのですが、Python でもできます。ただし、numpy という追加パッケージをインポートする必要があります。

 過去には、numpy は python の言語自体に組み込まれるという話もあったようですが、現在のところ Python の文法とは独立したライブラリとして存在しています。ただし実質的な標準ライブラリに近く、数値演算目的で python を使う人の大半は numpy をインポートすることになるかと思います。

 標準で行列演算がサポートされていないという点は割と大きいです。Python では numpy の配列も Python 標準のリストもほぼ同じ表記で扱うことができるので、コードを見ている分には違いが分からなかったりします。ただ、実際には裏では両者は厳然と区別されています。なので、Python のリスト型に対して、行列演算をするようなコードを書いてしまったり、あるいは逆にリストだと思っていたら numpy の配列だったりして、それでエラーになることも多いです。このあたりの扱いやすさでは、区別がないだけ R や MATLAB の方がすっきりとしているとは思います。

「数値演算に強みをもちつつも汎用性の高い Python」vs「数値演算に特化した R / MATLAB」

 ここまで3言語を並列で扱ってきましたが、Python は数値演算への強みという特性は持ちながらも、それ以外の用途でも使われている言語です。例えば、Web フレームワークの Django などがそうですし、別に機械学習や人工知能に一切関係がなくても、Python を使うことはできます。

 一方で、R や MATLAB を数値演算目的で使う人は殆どいないでしょうね。そういう意味では、比較されやすい3言語といいつつも、Python と R / MATLAB ではユーザの全集団としてみた時には、かなり違っているのではと思います。

なんで Python が伸びてるの?

 さて、ここまで3言語を比較してきましたが、正直なところ、回帰分析・線形判別・SVM・PCA解析だとか、スタンダードな解析目的に使うのであればどれでも大差はないと思います。文法も好みの問題です。どれか1つの言語ができる人は、他もすぐにできるようになると思います。

 ではなぜ今、Python が急激に伸びているのでしょうか? 勉三は「拡張性」「汎用性」の2つに理由があるのではないかと思います。拡張性というのは、オープンで誰でもパッケージを作って公開することができるという点ですね。この点で MATLAB が劣っているのは事実です(上でも書きましたがクローズドなゆえに使いやすいという面もあります)。

 では同じくオープンな R との違いはというと、Python は汎用性が高いという点でしょう。例えば、PHP や Ruby の代わりに、Django などのフレームワークを利用して Python でサーバサイドのプログラミングを書くことができます。機械学習や人工知能などの解析部分を Python で動かすのが一般的になってきた今、PHP や Ruby から Python コードを呼び出すよりは、サーバサイドは全部 Python にしたほうが簡単ですからね。

どれがおすすめなの?

 勉三としては正直どれでもいいと思います。まあ、MATLAB は普通に買うと数十万とかするので、大学や企業で解析されている方でないと難しいとは思いますが。

 ただ、R や MATLAB は情報量が少ない。プログラミング言語としてきちんと解説している本も少ないし古いものが多いです。その点、Python は書籍が多いので勉強しやすいです。なので、初心者の人には Python をおすすめします。

 心配しなくても、どれか1つできれば他は容易いです。少なくとも文法的には。なので、将来的に R や MATLAB を使う可能性がある方も、まずは Python から勉強すればよいでしょう。教材の多さというのは言語習得では非常に重要です。

 ただ注意して頂きたいのは、Python は環境構築が大変。よく日本語の入門書なんかでおすすめされている、Windows や Mac に Anaconda インストールして… みたいなことをやると苦労します。その辺は、当ブログの「AI/機械学習講座」なども参考にして頂ければと思います。

スポンサーリンク




posted by 勉三 at 21:46 | Comment(0) | TrackBack(0) | IT