matplotlib の plot() はデータをプロットするが、Sympy の plot() を利用すると一般式をグラフ化できる。 数式を手っ取り早く視覚化するには使える
Sympy の plot() の第1引数に数式、第2引数にX軸の情報を入れる
from sympy.plotting import plot
from sympy import Number, NumberSymbol, Symbol, Eq, solve
import sys
def function():
x = Symbol('x')
return a*x**3 + b*x**2 + c*x + d
a, b, c, d = map(float, input('Please input a, b, c, d.').split())
min_x, max_x = map(float, input('Please input min x, max x.').split())
if (min_x >= max_x): sys.exit('invalid min x max x!')
x = Symbol('x')
y = function()
min_y = y.subs([(x, min_x)])
max_y = y.subs([(x, max_x)])
plot(y, (x, min_x, max_x))
ちなみに、以下でxの最大最小から、yの最大最小を求めている。
min_y = y.subs([(x, min_x)])
max_y = y.subs([(x, max_x)])
2次関数の解はSympy.solve, scipy.optimize.fsolve を使っても求められるが、ここでは非効率だが2次関数の一般式を作成、解を求めてグラフ化してみる。
a, b, c = map(float, input('Please input a, b, c ').split())
*Python3 の記述
def answer(a, b, c):
x1 = (-b + np.sqrt((b ** 2) - (4 * a * c))) / (2 * a)
x2 = (-b - np.sqrt((b ** 2) - (4 * a * c))) / (2 * a)
return [x1, x2]
解がない(虚数)だと、プロットできないので判別式の関数を作成
((b**2) - (4 * a * c)) >= 0
最大値、最小値、X軸プロット間隔を設定
def plotX(a, b, c):
max_x = 10
min_x = -10
x = np.arange(min_x, max_x, 0.1)
return x
*最終的に最大値、最小値は、解によって動的に変化させる
二次方程式を記述
def plotY(a, b, c):
return a*x**2 + b*x + c
import matplotlib.pyplot as plt
import numpy as np
from sympy import *
def hasAnswer(a, b, c):
return ((b * b) - (4 * a * c)) >= 0
def answer(a, b, c):
x1 = (-b + sqrt((b ** 2) - (4 * a * c))) / (2 * a)
x2 = (-b - sqrt((b ** 2) - (4 * a * c))) / (2 * a)
return [x1, x2]
def plotX(a, b, c):
max_x = 10
min_x = -10
if (hasAnswer(a, b, c)):
x = answer(a, b, c)
x1 = x[0]
x2 = x[1]
center = (x2 - x1) * 0.5
band = abs(x2 - x1)
if band <= 1:
band = 10
max_x = round(x1 + band, 0)
min_x = round(x2 - band, 0)
x = np.arange(min_x, max_x, 0.1)
return x
def plotY(a, b, c):
return a*x**2 + b*x + c
def plotScatterX(plt, a, b, c):
if (hasAnswer(a, b, c)):
x = answer(a, b, c)
plt.scatter([x[0]], [0], label = 'x1 = %s' % x[0])
plt.scatter([x[1]], [0], label = 'x2 = %s' % x[1])
return
print('Simulatenous Equations. a * x^2 + b * x + c')
a, b, c = map(float, input('Please input a, b, c').split())
x = plotX(a, b, c)
y = plotY(a, b, c)
plt.plot(x, y)
plotScatterX(plt, a, b, c)
plt.title('Function: %sx^2 + %sx + %s' % (a, b, c))
plt.grid(color='gray')
plt.legend()
plt.show()
エクスプローラ移動 ⌘ + 0
ディレクトリ切替 Ctrl + R
新規ウィンドウ Shift + ⌘ + N
SQLで累積を計算する場合、OVER句を利用すると便利
1時間毎の雨量を INSERT datetime, precipitation 2018-06-01 00:00, 0.0 2018-06-01 01:00, 0.1 2018-06-01 02:00, 0.3 ....... 2018-06-30 22:00 1.2 2018-06-30 23:00 1.3
datetime を昇順でソートし、降水量累計 [sql] SELECT datetime, precipitation, SUM(precipitation) OVER(ORDER BY datetime ASC) AS sum_precipitation FROM rainfalls WHERE datetime >= '2018-06-01 00:00' AND datetime < '2018-07-01 00:00' ORDER BY datetime [/sql]
datetime, precipitation, sum_precipitation 2018-06-01 00:00, 0.0, 0.0 2018-06-01 01:00, 0.1, 0.1 2018-06-01 02:00, 0.3, 0.4 ....... 2018-06-30 22:00 1.2, 11.1 2018-06-30 23:00 1.3, 12.4
VSCode で pylint を利用すると from import などで警告がでる場合がある。 警告を非表示にしたい場合、.pylintrc の [MESSAGES CONTROL] disable を設定して表示をカスタマイズできる。
文字列やエラーコードで設定する
install libgl1-mesa-glx
import matplotlib as mpl mpl.use('Agg')
SQL INSERT した後にプライマリIDを取得したい場合、 RETURNING を利用すると便利 [sql] INSERT INTO users (name, age) VALUES ('Yoo', '26') RETURNING id; [/sql] RETURNING の後は「*」なども指定できる。
Yeoman を利用して VSCode の機能拡張を作成する。
機能拡張は「New Extension」を選択(JavaScript か TypeScript) 名称や作者など各設問に答えていくと、自動作成される。
実際に機能拡張をパブリッシュする場合は、vsce をインストールしておく。
「Live Sass Compiler」で Sass を watch できるが、ディレクトリ指定する場合、ユーザ設定に記述すると便利
{
"liveSassCompile.settings.formats":[
{
"format": "expanded",
"extensionName": ".css",
"savePath": "/public/stylesheets/"
},
{
"format": "compressed",
"extensionName": ".min.css",
"savePath": "/public/stylesheets/"
},
]
}
format: CSSスタイル = expanded, compact, compressed, nested extensionName: 拡張子 savePath: 出力先(プロジェクトフォルダをルートとする)
"vim.useSystemClipboard": false,
"vim.easymotion": true,
"files.associations": {
"*.phtml": "html"
},
"vim.searchHighlightColor": "rgba(250, 0, 0, 0.3)",
"vim.startInInsertMode": false,
"vim.statusBarColorControl": true,
useSystemClipboard: システムのクリップボードを利用すると相互に引き継がれるのでオフ easymotion: カーソル移動の拡張版 searchHighlightColor: ハイライト色設定 startInInsertMode: 選択時のインサートモードはオフにする