hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:ネイティブデータ型 リスト その1 作成 スライス 追加

Python3 入門 ネイティブデータ型 リスト

まぁ一番良く使うものですかね

 

さて

Dive into Pythonには下記のように書いてありますね。

 

リストを作るのは簡単だ: カンマで区切って並べた値を、角括弧で包めばいい。

ということで今回は

IPython notebook を使用してみる

理由はブラウザで実行できるのでコピペが非常に楽だという理由のみです。

ターミナルから下記コマンド

ipython notebook

これでブラウザが開くはず

 

さっそく以下の配列を実行してみた

In [1]:
 
a = ['a', 'b', 'c', 'dd', 'eee']
a
 
 
Out[1]:
['a', 'b', 'c', 'dd', 'eee']

 

うん、そのままですね!

ちなみに実行は▶マークです。まじ簡単

次々いこう

In [2]:
 
a[0]
 
 
Out[2]:
'a'
In [3]:
 
a[-1]
 
 
Out[3]:
'eee'
In [4]:
 
a[-4]
 
 
Out[4]:
'b'
In [5]:
 
len(a)
 
 
Out[5]:
5

indexは0スタートエンドはー1

長さはlen()ってところ んー普通!次はスライス(範囲)

スライス
In [6]:
 
a[1:3]
 
 
Out[6]:
['b', 'c']
In [7]:
 
a[2:-2]
 
 
Out[7]:
['c']
In [8]:
 
a[0:-1]
 
 
Out[8]:
['a', 'b', 'c', 'dd']
In [9]:
 
a[0:4]
 
 
Out[9]:
['a', 'b', 'c', 'dd']
In [10]:
 
a[:4]
 
 
Out[10]:
['a', 'b', 'c', 'dd']
In [11]:
 
a[4:]
 
 
Out[11]:
['eee']
In [12]:
 
a[:]
 
 
Out[12]:
['a', 'b', 'c', 'dd', 'eee']

以上スライス

追加

 Dive into Pythonには下記

リストを作成する方法は4つ

In [1]:
 
a = ['a']
a
 
 
Out[1]:
['a']
In [2]:
 
a = a + [11.1 , 0]
a
 
 
Out[2]:
['a', 11.1, 0]
In [3]:
 
a.append(True)
a
 
 
Out[3]:
['a', 11.1, 0, True]
In [4]:
 
a.extend(['hoge' , 'foo'])
a
 
 
Out[4]:
['a', 11.1, 0, True, 'hoge', 'foo']
In [5]:
 
a.insert(0 , 'bar')
a
 
 
Out[5]:
['bar', 'a', 11.1, 0, True, 'hoge', 'foo']

+演算子はリストを結合して新たなリストを作る。リストは要素をいくつでも含むことができ、

(利用可能なメモリ量以外に)サイズの制限はない。しかしながら、メモリの使用量が問題となるような場合には、

このリストの結合によって新たなリストがメモリ上に作成されることに注意すること。

リストは任意のデータ型の要素を含むことができ、1つのリストの要素がすべて同じ型である必要はない。

実際に、このリストには文字列と浮動小数点数と整数が入っている。

append()メソッドはリストの末尾に要素を1つ追加する

リストはクラスとして実装されている。リストの「作成」は実際にはクラスのインスタンス化だ。

ゆえに、リストは自身を操作するためのメソッドを持っている。

extend()メソッドは1つの引数としてリストをとり、引数として与えられたリストの各要素を元のリストへ追加する。

insert()メソッドは1つの要素をリストに挿入する。1つ目の引数は、挿入によって位置がずらされる最初の要素の

インデックスだ。リストの各要素の値は、リストの中で唯一の値である必要はない。

append とextendの違いがわかりにくいな。。。

In [11]:
 
b = ['b']
b
 
 
Out[11]:
['b']
In [12]:
 
b.append('hoge')
b
 
 
Out[12]:
['b', 'hoge']
In [13]:
 
b.append('foo' , 'bar')
b
 
 
 
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-13-0fb4cced5fa0> in <module>()
----> 1 b.append('foo' , 'bar')
      2 b

TypeError: append() takes exactly one argument (2 given)

In [14]:
 
b
 
 
Out[14]:
['b', 'hoge']

って追加するんかいって突っ込んだ。。。

Error だしても追加しちゃうのね。。。

要は1つの要素の追加ならエラー出しながらでも可能ということ

複数なら素直にextendせいやって事でしょう

In [15]:
 
c = ['c']
c
 
 
Out[15]:
['c']
In [16]:
 
c.extend(['hoge', 'foo','bar'])
c
 
 
Out[16]:
['c', 'hoge', 'foo', 'bar']
In [17]:
 
c.extend(['red',['blue','yellow']])
c
 
 
Out[17]:
['c', 'hoge', 'foo', 'bar', 'red', ['blue', 'yellow']]
In [18]:
 
c.append([1,2,3])
c
 
 
Out[18]:
['c', 'hoge', 'foo', 'bar', 'red', ['blue', 'yellow'], [1, 2, 3]]

まぁこういう事 

続きは その2へ

 

 

 

Python3 入門:ネイティブデータ型 数値 浮動小数点

Python3での数値および浮動小数点を学習する。

まずは四則演算、いつものようにIpythonを使用する

学習開始

In [14]: 1+1
Out[14]: 2

In [15]: 1-1
Out[15]: 0

In [16]: 1*1
Out[16]: 1

In [17]: 1/1
Out[17]: 1.0

In [18]: 1+1.0
Out[18]: 2.0

In [19]: 1-1.0
Out[19]: 0.0

In [20]: 1*1.0
Out[20]: 1.0

In [21]: 1/1.0
Out[21]: 1.0

In [22]: 1.0+1.0
Out[22]: 2.0

In [23]: 1.0-1.0
Out[23]: 0.0

In [24]: 1.0*1.0
Out[24]: 1.0

In [25]: 1.0/1.0
Out[25]: 1.0

In [26]: 1.0-1
Out[26]: 0.0

In [27]: 1.0+1
Out[27]: 2.0

In [28]: 1.0*1
Out[28]: 1.0

In [29]: 1.0/1
Out[29]: 1.0

これを見ると剰余算で割り算は少数をつける

少数の計算は結果は必ず少数で帰るということ

In [30]: type(1)
Out[30]: int

In [31]: type(1.0)
Out[31]: float

要はこういう事ね

intfloatに加えるとfloatが生み出される。

Pythonintfloatに型強制 (coercion) してから加算を行い、その結果としてfloatを返すのだ。

 まぁ型強制ができる。

In [32]: float(1)
Out[32]: 1.0

In [33]: int(1)
Out[33]: 1

In [34]: int(1.0)
Out[34]: 1

In [35]: float(1.0)
Out[35]: 1.0

In [36]: 1.12345678901234567890
Out[36]: 1.1234567890123457

In [37]: 123456789012345678901234567890
Out[37]: 123456789012345678901234567890

少数は15位までは正確

整数はどこまでも正確なような気がする?

>こういうことらしい

float()関数を呼び出すことで、明示的にintをfloatに型強制できる。
当然ながら、int()関数を呼び出すことで、明示的にfloatをintに型強制できる。
int()関数は四捨五入ではなく切り捨てを行う。
int()関数は、負数を0の方向へ向けて切り捨てる。これは正しい切り捨て関数であり、床関数 (floor function) ではない。
浮動小数点数は小数第15位まで正確だ。
整数はどんな大きさでも対応できる。

 

In [38]: 11/2
Out[38]: 5.5

In [39]: 11//2
Out[39]: 5

In [40]: -11//2
Out[40]: -6

In [41]: 11/-2
Out[41]: -5.5

In [42]: 11//-2
Out[42]: -6

繰り上がりやがりました //は注意が必要です

In [43]: 11**2
Out[43]: 121

In [44]: 11%2
Out[44]: 1

こいつはまぁ素直 

 

/演算子浮動小数点数の除算を行う。たとえ分子と分母の両方がint型であっても、この演算子はfloat型を返す。
//演算子はひねくれた整数除算を行う。結果が正の数の場合は、整数への切り捨て(四捨五入ではない)とみなすことができるが、これについては注意が必要だ。
負の数を整数除算する場合、//演算子は最も近い整数に繰り「上げる」。数学的に言えば、−6は−5より小さいので「繰り下げ」というべきだが、−5に切り捨てられることを期待していると足もとをすくわれる。
//演算子は常に整数を返すわけではない。分子や分母のどちらか一方でもfloatの場合は、なお結果を最も近い整数に丸めてくれるのだが、実際の戻り値はfloatで返される。
**演算子は「べき乗」を意味する。つまり112は121だ。
%演算子は整数除算の余りを返す。11を2で割ると5余り1になるので、ここでの結果は1となる。

 

今回の学習教材はオンラインと図書

オンラインでは

ネイティブデータ型 - Dive Into Python 3 日本語版

3. 形式ばらない Python の紹介 — Python 3.4.2 ドキュメント

 参考書籍

これは初めてなら良いと思う、ただこれだけでは開発はできないけれども

とっかかりにはなります。ただし2系です。

 

こいつはまぁ安定2系と3系のリファレンスとして長く使えそう

ネットが規制されている環境下ならとても良いと思います。

 

 

 

 

 

Python3 入門:PyCharm 4 をインストールして Anaconda の Python3 を ProjectInterpreter に指定する。

使って見たくなったので

PyCharm Community Edition 4をインストールする。

www.jetbrains.com

ここからdmgをDLできるJavaがいるがなくても

現在(2015/05/10)ならDLしてとPopUpがでるのでJavaがなくても

そのまま指示に従えば特に問題はない。

インストールして完了!!

 

と思ったら甘かった。。。

NewProjectしたら

PyCharm>Preferences>Project: your Project > Project Interpreter

Project Interpreterを指定するのだが(要はPythonのバージョン)

これがシステムにプリインストールされてる方を参照してしまう。。。

すごく脳筋だけれども

Anacondaの下にある Python3 を指定する

3.4.1 (~/.pyenv/versions/anaconda3-2.1.0/bin/python3.4)

これで今のところ解決した。

PyCharm の事なら

良い説明資料が落ちていた

PyCharm 活用術 (ja)

公式(英語)

https://www.jetbrains.com/pycharm/

書籍はPro版ですがちょっとだけ載ってる

 あとは日本にも代理店様があった

日本語化してくれてるならうちの会社にも欲しいけど

どうなんだろう。。。

サムライズム

 

 

Python3 入門:Dive into Python ネイティブデータ型 ブール値

Python3を基礎からやり直す。

まずは基礎書籍であるDive into Pythonを復習

日本語オンライン版が存在しているし

Dive Into Python 3 日本語版

英語の書籍と日本語の書籍(kindle)を発見した。

 なにこの値段の差。。。。まぁWeb版があるから無理に買う事はないか。。。

英語版はもう趣味の世界だよねぇ

ではIPythonにて勉強開始

 

ネイティブデータ型 ブール値

TrueかFalseだけなんだけどね。。。。

公式チュートリアルでは下記のような記述

-------------------------------------------------------------------------------------------

numbers.Number

数値リテラルによって作成されたり、算術演算や組み込みの算術関数によって返されるオブジェクトです。数値オブジェクトは変更不能です; 一度値が生成されると、二度と変更されることはありません。Python の数値オブジェクトはいうまでもなく数学で言うところの数値と強く関係していますが、コンピュータ内で数値を表現する際に伴う制限を受けています。

Python は整数、浮動小数点数複素数の間で区別を行っています:

numbers.Integral

整数型は、整数(正の数および負の数)を表す数学的集合内における要素を表現する型です。

整数には 2 種類あります:

整数 (int)

整数は無限の定義域を持ち、利用可能な (仮想) メモリサイズの制限のみをうけます。整数はシフト演算やマスク演算のためにバイナリ表現をもつものと仮定されます。負の数は符号ビットが左に無限に延びているような錯覚を与える 2 の補数表現の変型で表されます。

ブール値 (bool)

真偽値の False と True を表します。 FalseTrue を表す 2 つのオブジェクトのみがブール値オブジェクトです。 ブール型は整数型の部分型であり、ほとんどの状況でそれぞれ 0 と 1 のように振る舞いますが、例外として文字列に変換されたときはそれぞれ "False" および "True" という文字列が返されます。

整数表現に関する規則は、負の整数を含むシフト演算やマスク演算において、最も有意義な解釈ができるように意図されています。

 

-------------------------------------------------------------------------------------------

うん、やってみよう

In [8]: a=0

In [9]: a<0
Out[9]: False

In [10]: a==0
Out[10]: True

In [11]: a>0
Out[11]: False

In [12]: a>=0
Out[12]: True

In [13]: a<=0
Out[13]: True

In [14]: a===0
File "<ipython-input-14-3d16ce4a5655>", line 1
a===0
^
SyntaxError: invalid syntax

 おっとトリプルイコールは駄目,

次へ

 

In [15]: a=True

In [16]: a
Out[16]: True

In [17]: a=False

In [18]: a
Out[18]: False

In [19]: a=true
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-19-0834b8a3a65c> in <module>()
----> 1 a=true

NameError: name 'true' is not defined

In [20]: a=false
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-20-1b1e198e7764> in <module>()
----> 1 a=false

NameError: name 'false' is not defined

 

うん想定通り

では数値としての扱い検証

In [21]: a=True

In [22]: a+a
Out[22]: 2

In [23]: a-a
Out[23]: 0

In [24]: a*a
Out[24]: 1

In [25]: a/a
Out[25]: 1.0

わかるけど、、、ちょっと気持ち悪いな。。。。

まぁ次

In [26]: a=True

In [27]: b=False

In [28]: a+b
Out[28]: 1

In [29]: a-b
Out[29]: 1

In [30]: a*b
Out[30]: 0

In [31]: a/b
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
<ipython-input-31-7a64888ccf6e> in <module>()
----> 1 a/b

ZeroDivisionError: division by zero

 

こんな所だよね。

 あ、ちなみに公式はここです。

概要 — Python 3.4.2 ドキュメント

Python3 入門:Pyenv Python3 AnacondaをMacへインストールする。

新しくPythonMacへインストールする事にした。

真面目にPythonを勉強したくなったから。。。

 

購入時にそもそもPythonがインストールされているが

使用したくないので仮想OSにインストールするか悩んだが

今回はMacへインストールする事を選択した。

Anacondaを入れるとPython3系も合わせて入るので

今回はAnacondaを入れる事にします。

 

構成

Python3.0系 Pythonの環境マネージャ

Anaconda 統計分析や人工知能のlib集

開発環境は初期MacVim

後々にはPyCharm Community Editionに移行して行きたい

本日はAnacondaインストールまで済ませる事にする。

anacondaはPyenvよりインストール出来るようなので直接のDLはしない

 

手順

pyenvインストール

Anacondaインストール Python3も含む

参考

pyenvを使ってMacにPythonの環境を構築する - Qiita

Pyenvとvirtualenv pluginによるPython環境を構築する - blog.ieknir.com

感謝します。m(__)m

書籍 なんとなく買ったら意外と良かった。

 今回やろうと改めてやろうと思ったキッカケをくれた本でした。

インストール

 gitでクローン

git clone git://github.com/yyuu/pyenv.git ~/.pyenv

 bash_profileへ追記

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

 source ./.bash_profile

して反映させpyenvインストール完了。

次はPythonインストール

まずは確認する。

pyenv install -l

今回は

anaconda3-2.1.0

をインストールする事にする。

ちなみにPython2系は2.X.Xとanaconda-2.x.xが対応している。

3系とは別なので注意する。

 

pyenv install anaconda3-2.1.0

pyenv global anaconda3-2.1.0

これでインストール完了し確認する。

python -V

結果確認

Python 3.4.1 :: Anaconda 2.1.0 (x86_64)

 

Python3 入門:vagrant でのipython notebookへのアクセス

はまったのでメモメモ

詳しくはこちらQiitaが参考になった

vagrantで作ったVMでipython notebookを立ち上げてローカルからアクセスする - Qiita

config.vm.network "forwarded_port", guest: 8888, host: 8888

これが使えない。。。。

これが楽。。。↓

ipython notebook --ip=0.0.0.0

rbenv インストール

1.まずはgit

yum -y install git

2.rbenv clone

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

 3.確認

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l
rbenv --version
4.ruby-build clone

git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

5.ruby install

yum -y install openssl-devel    これを忘れないように!!

rbenv install -v 2.1.5

rbenv rehash

rbenv versions

rbenv global 2.1.5

ruby -v