sortedでkeyにlambda使ったやり方
sortedでkeyにlambda使った物をよく見かけるのでまとめておきます
sorted((list or dict) key=lambda x: x[0])
こんなのです
で使い方としては
sorted(【リストor辞書】, key=lambda x: 【keyにしたい要素】)
こんな感じです
例としては
dictionary = [['な',3], ['か',4], ['と',1], ['お',2]] print(dictionary) # [['な', 3], ['か', 4], ['と', 1], ['お', 2]] sorted_dict = sorted(dictionary, key=lambda x: x[0]) # [['お', 2], ['か', 4], ['と', 1], ['な', 3]] sorted_dict= sorted(dictionary, key=lambda x: x[1]) # [['お', 2], ['か', 4], ['と', 1], ['な', 3]]
sorted関数のkeyに「要素xを受け取り、x[1]を返す」というlambda式を指定している. 従って,sorted関数は、リストの2番目の要素をkeyとしてソートを行うようになった.
また、keyを関数として指定も可能
dictionary = [['なら',3], ['かながわ',4], ['とうきょう',1], ['おおさか',2]] print(dictionary) # [['なら', 3], ['かながわ', 4], ['とうきょう', 1], ['おおさか', 2]] def get_value(name_and_value): name, value = name_and_value return value sortedDict = sorted(dictionary, key=get_value) print(sortedDict) # [['おおさか', 2], ['かながわ', 4], ['とうきょう', 1], ['なら', 3]] def get_name(name_and_value): name, value = name_and_value return name sortedDict = sorted(dictionary, key=get_name) print(sortedDict) # [['とうきょう', 1], ['おおさか', 2], ['なら', 3], ['かながわ', 4]]
その他の例1
class Hoge: def __init__(self, i, name): self.i = i self.name = name def __repr__(self): return "%d:%s" % (self.i, self.name) l2 = [Hoge(2, 'c'), Hoge(3, 'a'), Hoge(1, 'b')] print(l2) #[2:c, 3:a, 1:b] sort_result = sorted(l2, key=lambda h: h.name) print(sort_result) #[3:a, 1:b, 2:c]
上記の例はHogeオブジェクトのname属性を返す関数を指定したことで、name属性でソートしている
その他の例2 operatorモジュールのattrgetter関数を用いた物
特定の属性を返す関数は、operatorモジュールのattrgetter関数を使えば簡単に作成できる。
>>> import operator >>> l2 = [Hoge(2, 'c'), Hoge(3, 'a'), Hoge(1, 'b')] >>> sorted(l2, key=operator.attrgetter('name')) [3:a, 1:b, 2:c]
参考
numpyでstart~stop区間をnum等分したデータを生成する方法
0から1までをnum等分にしたデータを生成したい場合に用いる
```python
linspace(start,stop,num=50,endpoint=True,retstop=False,dtype=None)
```
例)ある物に適用する確率を11個分,0から1までの値で生成する場合
```python
import numpy as np
prob = np.linspace(0, 1, 11)
print(prob)
#OUTOUTS
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
```
参考
https://qiita.com/supersaiakujin/items/4410efe5dc81982ef208
[Python]Numpyでデータを生成する色々な方法(arange/linspace/logspace/zeros/ones/mgrid/ogrid) - Qiita
python 多次元配列の各要素の特定の列の値を基準にsortする
多次元配列の各要素のある列の値を参照し,sortを行う場合の方法をまとる.
from operator import itemgetter list1 = [[1,5,3], [6,4,8], [9,11,2]] print('ソート前:{}'.format(list1)) list1.sort(key=itemgetter(0)) print('ソート後(0番目の要素):{}'.format(list1)) list1.sort(key=itemgetter(1)) print('ソート後(1番目の要素):{}'.format(list1)) list1.sort(key=itemgetter(2)) print('ソート後(2番目の要素):{}'.format(list1)) #OUTPUTS ソート前:[[1, 5, 3], [6, 4, 8], [9, 11, 2]] ソート後(0番目の要素):[[1, 5, 3], [6, 4, 8], [9, 11, 2]] ソート後(1番目の要素):[[6, 4, 8], [1, 5, 3], [9, 11, 2]] ソート後(2番目の要素):[[9, 11, 2], [1, 5, 3], [6, 4, 8]]
参照
最小二乗法で線形近似(python,numpy)
pythonのnumpyで最小二乗法で線形近似し傾き,切片,回帰式を取得したいと思います.
```python
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
def main():
X = [1,2,3,4,5]
Y = [1.1, 2.1, 2.8, 4.3, 5.1]
A = np.array([X,np.ones(len(X))])
A = A.T
#線形回帰(np.linalg.lstsq)を実行してa:傾き、b:切片を取得。
a,b = np.linalg.lstsq(A,Y)[0]
print("a(傾き):{}".format(a))
print("b(切片):{}".format(b))
#X,Y生データのプロット
plt.plot(X,Y,"ro")
#y=a*X;bの回帰式をプロット
plt.plot(X,(a*X+b),"g--")
plt.grid()
plt.show()
if __name__ == '__main__':
main()
```
出力結果
a(傾き):1.02
b(切片):0.02
matplotlibでTimes New Romanを使うためのTips
理系の論文で多用される
Times New Roman
ですが(以下参照) www.panoramic-view.info
matplotlibで使うための方法をまとめておきます.
plt.rcParams['font.family'] = 'Times New Roman'
以上です.
もし,ubuntu等で findfont: Font family ['Times New Roman'] not found. Falling back to DejaVu Sans で使用できない場合は
$ sudo apt install msttcorefonts -qq $ rm ~/.cache/matplotlib -rf
で動くと思います.
Google ColabでKaggle! 【STEP2:データ前処理とか】
前提
まず前提として言語はpythonでpandasを使用しています.
データのダウンロード
これは参加するコンペのdatasetダウンロードするだけです.
#ダウンロード可能なコンペ一覧 !kaggle competitions list #ダウンロード !kaggle competitions download -c titanic
データの把握
どんなデータなのかを把握することがまず第一歩です.
import pandas as pd import numpy as np train = pd.read_csv("train.csv") test = pd.read_csv("test.csv") print(train.head())
次に欠損値(null)が何個あるのか,どの項目にあるのか見てみます.
## 値がnullの項目数を数える train.isnull().sum() ############### PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64 ################
以上からデータセット内の全体を把握します.
次回は下記の内容です
データの前処理(必要な場合)
提供されているデータを取り扱うために前処理を行う必要があります。 前処理は沢山種類がありますがここでは2種類を紹介しておきます。
欠損データの補完
この欠損値をどう処理することがベターなのかを議論することはとても重要ですが簡単な方法だけとりあえずまとめます.
Ageの補完
今回のAgeはmean(平均値)とmedian(中央値)とmode(最頻値)の3つの例を示します.
#case of mean train["Age"] = train["Age"].fillna(train["Age"].mean()) #case of median train["Age"] = train["Age"].fillna(train["Age"].median()) #case of mode train["Age"] = train["Age"].fillna(train["Age"].mode())
文字列データを数値データ形式へ変換
#
複数GPU所持しているPCでKeras内に使用GPUの指定方法
使用方法
import tensorflow as tf from keras.backend.tensorflow_backend import set_session config = tf.ConfigProto( gpu_options=tf.GPUOptions( visible_device_list="2", # specify GPU number allow_growth=True ) ) set_session(tf.Session(config=config))
(https://github.com/fchollet/keras/issues/1538)
基本的にはバックエンドとして動作するTensorflowの設定を変更します.keras.backend.tensorflow_backend.set_sessionを用います. 注意点としては,コードの内部でtf.Sessionを取得しているようなケースでは,先頭に上記を記述しても意味がありません(とくに自分で書いていないコードを走らせる場合).