StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

Pythonの勉強(実質2日目くらい)を再開

勉強再開

 先週のエントリで入門してすぐ1週間ぐらい放置してしまいましたが、今日少しだけPythonの勉強をやりました。


Pythonスタートブック

Pythonスタートブック


 この本の4章まで、実際にコマンドを打ってみました。単なる基本操作の連続なので、なんら面白くはないですが……。


 とりあえずこの教科書をやりつつ、ある程度慣れてきたら『Pythonによるデータ分析入門』に従って数値計算・統計解析用のライブラリを触っていこうと思います。
 んで、中期的(短期的?)な目標がほしいので、Pythonで自分なりの論文管理ツールとか作れないかなと思っています。いまはEvernoteになんでもぶちこんでるんですが。

Canopyを使ってみる

 とりあえず、Pythonの操作はターミナルからやるのはやめてCanopyを使うことにしました。『Pythonスタートブック』はOSのシェル(ターミナル)から使う前提で書かれているのですが、もう1冊買っておいた教科書の、


Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理


 この本では、IPythonというツールのシェルを使うのが便利だと書いてあって、その際はCanopyをインストールせよという前提になってます。
 Canopyってのは、IPythonに加えて、データ解析に使われるライブラリがまとめてダウンロードされるPython用のIDEですね。
 IPythonの公式サイト(リンク)にも、

For new users who want to install a full Python environment for scientific computing and data science, we suggest installing the Anaconda or Canopy Python distributions, which provide Python 2.7, IPython and all of its dependences as well as a complete set of open source packages for scientific computing and data science.


 って書いてあるので、既にIPythonをインストール済みの人以外はみんなCanopyから使うと良いよってことであり、そんぐらいオススメのようですね。
 Canopyのインストールについてはこのへんのリンクを参照。正確には私がインストールしたのはCanopy Expressです。
Pythonの統合開発環境「Canopy」を導入してみました。matplotlib,scipy,numpy,pandas辺りを即座に使えてめちゃくちゃ便利。 | 理系院生のブログ
Windows7 IPython インストール - 或阿呆のブログ


 で、たしかに、ターミナルからやるより操作はしやすいです。支援ツールなんだから当たり前ですが……。


 f:id:midnightseminar:20140831010540p:plain
 ↑まずこれを開いて、Editorのところをクリックすると、


 f:id:midnightseminar:20140831010624p:plain
 ↑こういう画面が開く。
 左上のペインはファイルを探したりするところで、右下のペインがいわゆる「シェル」でありここにコマンドを打ち込んでいく。スクリプトを書くのは右上のペインで、これは「○○.py」のスクリプトを開いた画面になっている。上の三角ボタンを押すとスクリプトの全体が実行されます。


 ところで、Canopyって普通に考えたら「キャノピー」だと思うんですが、Pythonの「Py」をかけているのだとすると、「キャノパイ」って読んだ方がいいんでしょうかね?

メモ

とりあえず今日やった教科書の範囲のメモ。

  • 先週のエントリで書いたとおり、『Pythonによるデータ分析入門』ではCanopyをインストールする前にX code(Macのプログラミング環境)が必要って書いてあったんでX codeもインストールしたんだけど、X code要らなくね?X codeアンインストールしたらどうなるんだろ。
  • 日本語は文字化けする。print('あほ')とか書けば、日本語も表示できる。しかし、日本語が格納された変数を呼び出すときは、print()で囲っても文字化けするのだがどうしたらいいのだろうか・・・
pref = ['千葉','茨城','埼玉','群馬','栃木']
print(pref)
['\xe5\x8d\x83\xe8\x91\x89', '\xe8\x8c\xa8\xe5\x9f\x8e', '\xe5\x9f\xbc\xe7\x8e\x89', '\xe7\xbe\xa4\xe9\xa6\xac', '\xe6\xa0\x83\xe6\x9c\xa8']
  • 一般的には5の2乗を得たいときは「5^2」って書くもんだと思ってたけど、Pythonではこう書くと25ではなく7が出力される。ここの演算子一覧をみると「排他的ビット和」というものらしいが、何のことかよくわからない。
  • Pythonで累乗を計算したいときは、「5**2」と書く。
  • ノットイコールは「!=」と書く。
  • str()は、入力されたオブジェクトを文字列型に変換して出力するが、元のオブジェクトの中身が入れ替わるわけではない(単に出力されるだけ)。
  • range(10)と書くと、0〜9の数字のリストになる。0からはじまって10個の意味なのでややこしい。
  • range(1, 11)とすると、1から10までの数字のリストになる。この11は、「11の手前までの数字」という意味らしい。これもややこしい。
  • 文字列型に対するメソッド.index()は、引数に与えた文字列が何番目にあるかを返す。ただし1個目は0番なので注意。
  • .appendとか.insertとか.removeとかのように、「インスタンス自体を書き換えるが、値を返さないメソッド」もある。
  • リストなどの特定の要素を削除するには、.pop()、.remove()というメソッドを使う。
  • リストに別のリストを合体させるには.extend()を使う。
  • 「:」をつかってリストの要素を範囲で指定することをスライスという。
  • 要素を並べ変えるには.sort、逆並びにするには.reverseを使う。
  • sortでは、大文字が小文字より優先される
  • 辞書型の書き方は、{key1:value1, key2:value2}
  • 辞書は順序というものはもっておらず(たぶん)、キーによって要素にアクセスする。
  • タプル(tuple)は、「要素を変更できないリスト」と考えればよい。要素は順番を持っており、データ型はなんでもいれられる。
  • 要素が1個しかないタプルをつくるときは、[1,]のようにカンマを入れないと、タプルとして認識されない
  • セット(set)というデータ型は、いろいろなものが詰め込まれた集合で、要素に順序というものがない。また、1つのセットに同じ要素を複数入れることはできない。
  • OSのコマンドラインでPythonのプログラムを呼び出す際に、何らかの処理を行うために同時に値を入力したいときがある。その場合、Pythonのプログラムに値を引き渡す、コマンドライン引数というものを使う。プログラム中には、sysモジュールというものを呼び出すように書いておかないといけない。シェルから実行するときは、プログラム名を指定したあとに、スペースを空けて、コマンドライン引数を羅列して指定すればをれをプログラムが取り込んで結果を返す。
  • OSのターミナルからプログラムを呼ぶときは、python自体は終了した上で、
python words_sort.py

とか書くのだが、Canopyのシェルから実行する場合は、単にシェル内で、

run words_sort.py

と書けば、ファイルが実行される(か、もしくはプログラムのファイルを開いて再生ボタンを押せばよい。)。このへん、まだ頭がイマイチ整理できてない。

現時点での課題


 課題、分からないことなど。(上記との重複あり)
 今後、追加したり削除したりしていきます。

  • 「変数」「モジュール」「オブジェクト」「メソッド」「インスタンス」「データ型」など基本用語さ指す範囲や包含関係にまだ曖昧なところがあるので頭を整理する
  • 日本語のリストを変数に代入して、print(変数)したとき、日本語の出力が文字化けするのをどうしたらいいのか
  • CanopyつかうのにX codeってほんとに必要なの?なくても大丈夫?
  • Canopyのシェルから操作することと、OSのシェル(ターミナル)から操作することの違いがよくわかってない。Canopyを起動するとPythonも起動してると思うんだけど、それとは無関係に同時にターミナルでPythonを起動したり終了したりできるのもよくわからない
  • Pythonのプログラムを動かす指示の出し方が、ターミナルからやるばあいとCanopyからやる場合で違うので、その違いを理解する