Linux psコマンド

psはLinux上で現在動作しているプロセスを表示するコマンド

[vagrant@localhost python]$ ps
PID TTY TIME CMD
5300 pts/1 00:00:00 ps
32152 pts/1 00:00:01 bash

オプションやgrepなどを組み合わせて使用する

linux free

freeコマンドは空きメモリと使用しているメモリの容量を表示するコマンド

[vagrant@localhost python]$ free
total used free shared buffers cached
Mem: 1020076 720212 299864 6984 94792 408204
-/+ buffers/cache: 217216 802860
Swap: 2064380 447716 1616664

メモリー、swapのused, freeが表示されているのがわかります。

Linux topコマンド

topコマンド
->実行中のプロセスをリアルタイムで表示
->実行中のプロセスをCPU利用率が高い順に表示

[vagrant@localhost python]$ top

top – 22:20:14 up 8 days, 34 min, 1 user, load average: 0.13, 0.30, 0.33
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1020076k total, 723252k used, 296824k free, 94484k buffers
Swap: 2064380k total, 447716k used, 1616664k free, 408512k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5118 vagrant 20 0 15024 1296 1004 R 0.3 0.1 0:00.80 top
1 root 20 0 19232 604 432 S 0.0 0.1 0:01.64 init
2 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kthreadd
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
4 root 20 0 0 0 0 S 0.0 0.0 0:02.98 ksoftirqd/0
5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
6 root RT 0 0 0 0 S 0.0 0.0 0:01.49 watchdog/0
7 root 20 0 0 0 0 S 0.0 0.0 6:00.91 events/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events/0
9 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_long/0
10 root 20 0 0 0 0 S 0.0 0.0 0:00.00 events_power_ef
11 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cgroup
12 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 netns
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 async/mgr
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 pm
16 root 20 0 0 0 0 S 0.0 0.0 0:03.42 sync_supers

これを見ると、top, init, kthreadd の消費が高いですね。

shellでメール送信

シェルでメールを送信したい
mail1.txt

From: hoge@gmail.com
To: hoge@gmail.com
Subject: Hello, e-mail!

Hi, can you see?

[vagrant@localhost python]$ cat mail1.txt |
> sendmail -i -t

i:入力されるメッセージ中の `.’ だけを含む行を無視
t:受け手をメッセージから読み取り

その2

#!/bin/bash

export PATH=$PATH:/usr/sbin

MAIL_TO="ore@gmail.com"
MAIL_FROM="noreply@hogehoge.com"
SUBJECT="テストメール"
DATA="データ"

mail_send () {

CAT << EOD | nkf -j -m0 | sendmail -t
FROM: ${MAIL_FROM}
To: ${MAIL_TO}
MIME-Version: 1.0
Content-Type: text/plain; charset="ISO-2022-JP"
Content-Transfer-Encoding: 7bit

メールが送信されます。
ここに${DATA}が入る

EOD
}

mail_send

exit 0

SQL(DDL, DML, DCL)

DDL, DML, DCLって何?

DDL(Data Definition Language)
CREATEやDROP、ALTERなどデータベースオブジェクトの生成や削除変更を行うコマンド

DML(Data Manipulation Language)
SELECT/INSERT/UPDATE/DELETEなどテーブルに対するデータの取得、追加、更新、削除を行うコマンド

DCL(Data Control Language)
BEGIN, COMMIT、ROLLBACKなどトランザクションを制御するためのコマンド

実務上はあまり使用しない名称だから、こんな言い方もあるんだなー程度か。

KNN(k-近傍法)

特徴空間上において、近くにあるK個のオブジェクトのうち、もっとも一般的なクラスに分類する
距離の算出は、ユークリッド距離が使われる。高次元データには向かない
トレーニングデータ数、特徴量が増えると予測が遅くなる
クラス分類や回帰分析に利用可能

なに。。

Kが小さいとノイズに弱く、Kが大きいと精度が下がる

%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

from sklearn.model_selection import train_test_split

from sklearn.datasets import load_iris
iris = load_iris()

X = iris.data
Y = iris.target

print("データ数 = %d 特徴量 = %d" % (X.shape[0], X.shape[1]))
pd.DataFrame(X, columns=iris.feature_names).head()

ユークリッド距離

点Aと点Bのユークリッド距離とは、2点を結んだ線分ABの長さのこと

一次元のユークリッド距離は絶対値
|A – B|

二次元だと
√(a1 – b1)^2 + (a2 – b2)^2

うん、こーなるね。

三次元になると、
√(a1 – b1)^2 + (a2 – b2)^2 + (a3 – b3)^2

三平方の定理です。では、これをpythonで計算すると、

import numpy
x1 = 3
y1 = 4
x2 = 4
y2 = 6
a = numpy.array([x1, y1])
b = numpy.array([x2, y2])
u = b - a
print(numpy.linalg.norm(u))

[vagrant@localhost python]$ python myapp.py
2.23606797749979

なんだこれは。
numpy.linalgは固有値、固有ベクトルの計算
normはノムル

ユークリッド距離は何に使われるかというと
k-nearest neighbor algorithm ※k-nn
パターン認識で使われる。

なるほど、確かに距離の計算をしている、ということはわかる。

関数の絶対値

関数の絶対値、ということは、二次関数、三次関数などの絶対値ってことだな。

import numpy as np 
import matplotlib.pyplot as plt 

pi = 2 * np.pi

x = np.arange(0, 2*pi, 0.1)
y1 = np.sin(x)
y2 = np.abs(np.sin(x))

fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid()
ax.set_xlabel("x", fontsize=16)
ax.set_ylabel("y", fontsize=16)
ax.set_xlim(0, 2*pi)
ax.set_ylim(-1.5, 1.5)
ax.set_xticks([0, pi/2, pi, 3*pi/2, 2*pi])
ax.set_xticklabels(["0", "$\pi/2$", "$\pi$", "$3\pi/2$", "$2\pi$"],
				fontsize = 12)

ax.plot(x, y1, linestyle = "--", color = "blue", label = "y = sinx")
ax.plot(x, y2, color = "red", label = "y = |sinx|")
ax.legend()

plt.savefig("01", bbox_inches = "tight")

まじかー、これ。うーん、なんだかな。。

pythonで絶対値

x = -5
y = abs(x)
print(y)

[vagrant@localhost python]$ python myapp.py
5
そのまんまです。

浮動小数点数、複素数

a = abs(-100.0)
print(a)

b = abs(2 + 3j)
print(b)

[vagrant@localhost python]$ python myapp.py
100.0
3.605551275463989

複素数は虚数単位
jは2乗すると-1になる。

absだけでなく、math.fabsでもいける。

import math

a = math.fabs(-100)
b = math.fabs(-100.0)

print(a)
print(b)

整数でも返り値が浮動小数点数になる
[vagrant@localhost python]$ python myapp.py
100.0
100.0

numpyで絶対値

import numpy as np
x = np.array([5, -5, 7 + 9j])

x_abs = np.abs(x)

print(x_abs)

[vagrant@localhost python]$ python myapp.py
[ 5. 5. 11.40175425]
あ、absって、absoluteの略か、納得。

scipyって何?

scipyは高度な科学計算を行う為のライブラリ
scipyはnumpyで行える配列や行列の演算を行うことができる

from scipy import integrate

def func(x):
	return 2*x + 5

result, err = integrate.quad(func, 0, 5)

print('積分結果:{0}\n誤差:{1}'.format(result, err))

なんか、積分が出来るらしい。
[vagrant@localhost python]$ python myapp.py
積分結果:50.0
誤差:5.551115123125783e-13

うーん、なんやら。。