数値型のいろいろな表現をまとめてみました。
int型
[コード]
1 | # 10進数 |
float型
[コード]
1 | num = 1.2 |
数値型のいろいろな表現をまとめてみました。
[コード]
1 | # 10進数 |
[コード]
1 | num = 1.2 |
組み込みのglobals関数、locals関数を使うと、現在のスコープのグローバル変数、ローカル変数を表示することができます。
[コード]
1 | GLOBAL_AVR = 123 |
実行結果は下記のとおりです。
グローバル変数
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'GLOBAL_AVR': 123, 'func': }
ローカル変数
{'x': 3}
Imageライブラリを使うとPythonから画像を編集することができます。
下記のコマンドを実行し、Imageライブラリをインストールします。
1 | pip install PIL |
基本的な画像処理をまとめて実行します。
[コード]
1 | from PIL import Image |
Pythonでログの出力・制御を行うためには、loggingモジュールを使用します。
標準出力とファイルへの出力や、重要度に応じた出力の制御、書式の設定などが可能です。
今回は、ファイルと標準出力にログを出力します。
またログの書式設定とログローテーションの設定も行います。
[コード]
1 | import logging |
実行結果は下記のとおりです。
[実行結果]
2020-04-26 18:40:15,631[DEBUG] debug test. 2020-04-26 18:40:15,636[INFO] info test. 2020-04-26 18:40:15,639[WARNING] warning test. 2020-04-26 18:40:15,644[ERROR] error test. 2020-04-26 18:40:15,648[CRITICAL] critical test.
test.logファイルにも同様の内容が出力されます。
DataFrameではソートや反転を容易に行うことができます。
ソートするにはDataFrameのsort_values関数を使います。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
身長をキーにソート weight height gender 3 45.9 143 f 4 51.2 154 f 2 65.5 155 m 5 72.5 160 m 0 80.0 170 f 1 70.4 180 m 体重を降順でソート weight height gender 0 80.0 170 f 5 72.5 160 m 1 70.4 180 m 2 65.5 155 m 4 51.2 154 f 3 45.9 143 f
反転するにはDataFrameのT属性を参照します。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
0 1 2 0 A B C 1 D E F 2 G H I ---- 0 1 2 0 A D G 1 B E H 2 C F I
DataFrameでは任意のデータを容易に抽出することができます。
まず1次元のリストが入った辞書型データよりデータフレームを作成します。
このデータに対して、キーを指定することにより任意の列のデータを取得することができます。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
体重の一覧 0 80.0 1 70.4 2 65.5 3 45.9 4 51.2 5 72.5 Name: weight, dtype: float64 体重と身長の一覧 weight height 0 80.0 170 1 70.4 180 2 65.5 155 3 45.9 143 4 51.2 154 5 72.5 160
任意の行を抽出したい場合は、Pythonの標準型であるリストを同じようにスライスを使うことができます。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
weight height gender
2 65.5 155 m
3 45.9 143 f
weight height gender
3 45.9 143 f
4 51.2 154 f
5 72.5 160 m
条件を指定することにより、条件に合致したデータを抽出することができます。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
身長が160以上のデータを表示 weight height gender 0 80.0 170 f 1 70.4 180 m 5 72.5 160 m 性別が m のデータを表示 weight height gender 1 70.4 180 m 2 65.5 155 m 5 72.5 160 m
Pandasで扱う基本データは、DataFrameとSiriesです。
DataFrameを定義するには、2次元のリストを引数に与えます。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
0 1 2
0 10 20 30
1 40 50 60
2 70 80 90
実際のデータのほかに、列や行を意味するラベルも一緒に表示されていることが分かります。
Seriesを定義するには、1次元のリストを引数に与えます。
[コード]
1 | import pandas as pd |
実行結果は下記のとおりです。
[実行結果]
0 1.0 1 3.0 2 5.0 3 7.0 dtype: float64
インデックス番号付きで表示されるのが確認できます。また、データ型についても表示されます。
アヤメの品種分類をクロスバリデーションで行います。
クロスバリデーションとは、最初に全てのデータを訓練データとテストデータに分割して、訓練データを用いて学習を行い、テストデータを用いて学習の妥当性を検証する手法です。
クロスバリデーションにはいろいろな手法がありますが、今回はK分割交差法をご紹介します。
【例 集合XをA,B,Cと3分割する場合】
(1) 集合Xを、AとBとCに分割します。
(2) Aとテストデータ、残りのB,Cを訓練データとして分類精度s1を求めます。
(3) Bとテストデータ、残りのA,Cを訓練データとして分類精度s1を求めます。
(4) Cとテストデータ、残りのA,Bを訓練データとして分類精度s1を求めます。
(5) 分類精度s1,s2,s3の平均を求め分類精度とします。
実行するコードは下記の通りです。
[コード]
1 | import pandas as pd |
9行目のcv=5で分割数を5に設定しています。
model_selection.cross_val_score関数1つで、複数回の検証を行えるのは大変便利です。
実行結果は次のようになります。
[実行結果]
各正解率: [0.96666667 0.96666667 0.96666667 0.93333333 1. ] 正解率: 0.9666666666666666
正答率96%以上と十分な結果となります。
機械学習でアヤメの品種を分類します。
scikit-learn には、機械学習やデータマイニングを試すことができるようデータが同梱されています。
iris.dataには次の4種類のデータが格納されています。
| カラム | 内容 |
|---|---|
| sepal length (cm) | がく片の長さ |
| sepal width (cm) | がく片の幅 |
| petal length (cm) | 花弁の長さ |
| petal width (cm) | 花弁の幅 |
iris.targetには次の3種類の花の種類が格納されています。
| 花の種類 | 値 |
|---|---|
| setosa | 0 |
| versicolor | 1 |
| virginica | 2 |
実行するコードは下記の通りです。
[コード]
1 | import pandas as pd |
学習用とテスト用にデータを分離し、シャッフルまで行ってくれるmodel_selection.train_test_split(7行目)はとても便利です。
実行結果は次のようになります。
[実行結果]
正解率: 0.9333333333333333
正答率93%以上と十分な結果となりました。
排他的論理和(XOR)に関しての機械学習ですが、次の2点に関してフレームワークを利用する処理に変更します。
「データとラベルの分割」と「正解率を求める」箇所を変更します。
変更前のコードをコメントアウトしているので参考にして下さい。
[コード]
1 | import pandas as pd # 追加 |
実行結果は次のようになります。
[実行結果]
予測結果: [0 1 1 0] 正解率: 1.0
変更前に比べてかなり短いコードで同様の結果が得られることが分かります。