<mermaid> 後追いで、マーメイドの絵を出す。
JQuery.ajax()
とかで、後追いで、マーメイドmermaid
のソースsource
を読んで絵を作る方法。
mermaid.init()
をする。
うまくいった! すばらしい。
jsfiddle
で遊んでみた。
https://jsfiddle.net/3hx9ag6m/2/
すっごくお世話になったところ。助かりました。(vv)
naosim.hatenablog.jp
<Python> アルファベットのリストを作る。
chr()
にアスキーコードを入れればOK!
逆は、ord()
だよーん。
In [61]: [chr(i) for i in range(65,65+26)] Out[61]: ['A', 'B', 'C', : 'X', 'Y', 'Z'] In [62]: a = [chr(i) for i in range(65,65+26)] In [63]: [ord(i) for i in a] Out[63]: [65, 66, 67, 68, : 88, 89, 90]
参考にさせてもらいました。
hetapy.hatenablog.com
アスキーコード表。
http://www.k-cube.co.jp/wakaba/server/ascii_code.html
<pandas, Python> ふたつのカラムの値でソートする。
2つ、ふたつのカラムcolumn
の値でソートsort
する。
In [58]: df = pd.DataFrame({'a':[2,2,1,1,1],'b':[2,1,3,1,2],'c':['a','b','c','d','e']}) In [59]: df Out[59]: a b c 0 2 2 a 1 2 1 b 2 1 3 c 3 1 1 d 4 1 2 e In [60]: df.sort_values(['a','b'], ascending=[True, True], inplace=False) Out[60]: a b c 3 1 1 d 4 1 2 e 2 1 3 c 1 2 1 b 0 2 2 a
inplace=True
にすると、データフレームDataFrame
の中身をソートしたもので置き換える。
いつものスタックオーバーフロー。
stackoverflow.com
<pandas, Python> カラムの値を比較して、同じ値の行を抽出する。
カラムcolumn
の値を比較して、同じ値の行row
を抽出する。
対象のカラムを選択して、apply()
をして、その中で、lambda
関数で文字列比較処理をすればいい。
In [7]: df = pd.DataFrame({'a':[1,2,3,4,5],'b':[1,4,6,8,10],'c':[5,7,8,9,10]}) In [8]: df Out[8]: a b c 0 1 1 5 1 2 4 7 2 3 6 8 3 4 8 9 4 5 10 10 In [37]: df['e'] = df[['a','b']].apply(lambda x: 'hage!' if x[0] == x[1] else 'hige.', axis=1) In [38]: df Out[38]: a b c e 0 1 1 5 hage! 1 2 4 7 hige. 2 3 6 8 hige. 3 4 8 9 hige. 4 5 10 10 hige.
過去記事が役にたった。よかった。よかった。
nekoyukimmm.hatenablog.com
<mermaid> マーメイドにリンクを埋め込む
マーメイドmermaid
で作った絵に、リンクlink
を埋め込む。
click
行を追加すればオッケー。 下記、例。
<h2>mermaid in html</h2> <div class='mermaid'> graph TD; subgraph box A(Start)-->B(Do some stuff) B(Take some rest)-->C(do more) click B "http://www.yahoo.co.jp" "This is a link" end </div>
1つ問題が。
click
で指定する要素名(この場合は、B
)は、1文字しかだめ。
2文字にすると、リンクの埋め込みがうまく動かない。
いつもお世話になってる、スタックオーバーフロー。
stackoverflow.com
<Python> 関数名と行番号を取得する。
デバックdebug
してる時に、関数名function name
と行番号line number
を表示したくなったので、ググった。
sys._getfram()
ちゅうやつでできるらしい。例。
In [92]: import sys In [93]: def hage(): ...: print(sys._getframe().f_code.co_name) ...: print(sys._getframe().f_code.co_filename) ...: print(sys._getframe().f_code.co_firstlineno) ...: print(sys._getframe().f_code.co_code) ...: print(sys._getframe().f_lineno) ...: for i in dir(sys._getframe().f_code): ...: print('{} {}'.format(i, getattr(sys._getframe(), i, '-'))) ...: In [94]: hage() hage <ipython-input-93-7d9960568d3f> 1 b't\x00t\x01j\x02\x83\x00j\x03j\x04\x83\x01\x01\x00t\x00t\x01j\x02\x83\x00j\x03j\x05\x83\x01\x01\x00t\x00t\x01j\x02\x83\x00j\x03j\x06\x83\x01\x01\x00t\x00t\x01j\x02\x83\x00j\x03j\x07\x83\x01\x01\x00t\x00t\x01j\x02\x83\x00j\x08\x83\x01\x01\x00x2t\tt\x01j\x02\x83\x00j\x03\x83\x01D\x00] }\x00t\x00d\x01j\n|\x00t\x0bt\x01j\x02\x83\x00|\x00d\x02\x83\x03\x83\x02\x83\x01\x01\x00q^W\x00d\x00S\x00' 6 __class__ <class 'frame'> __delattr__ <method-wrapper '__delattr__' of frame object at 0x00000000071461B8> __dir__ <built-in method __dir__ of frame object at 0x00000000071461B8> __doc__ None __eq__ <method-wrapper '__eq__' of frame object at 0x00000000071461B8> __format__ <built-in method __format__ of frame object at 0x00000000071461B8> __ge__ <method-wrapper '__ge__' of frame object at 0x00000000071461B8> __getattribute__ <method-wrapper '__getattribute__' of frame object at 0x00000000071461B8> __gt__ <method-wrapper '__gt__' of frame object at 0x00000000071461B8> __hash__ <method-wrapper '__hash__' of frame object at 0x00000000071461B8> __init__ <method-wrapper '__init__' of frame object at 0x00000000071461B8> __init_subclass__ <built-in method __init_subclass__ of type object at 0x000000001DA38550> __le__ <method-wrapper '__le__' of frame object at 0x00000000071461B8> __lt__ <method-wrapper '__lt__' of frame object at 0x00000000071461B8> __ne__ <method-wrapper '__ne__' of frame object at 0x00000000071461B8> __new__ <built-in method __new__ of type object at 0x000000001DA3C580> __reduce__ <built-in method __reduce__ of frame object at 0x00000000071461B8> __reduce_ex__ <built-in method __reduce_ex__ of frame object at 0x00000000071461B8> __repr__ <method-wrapper '__repr__' of frame object at 0x00000000071461B8> __setattr__ <method-wrapper '__setattr__' of frame object at 0x00000000071461B8> __sizeof__ <built-in method __sizeof__ of frame object at 0x00000000071461B8> __str__ <method-wrapper '__str__' of frame object at 0x00000000071461B8> __subclasshook__ <built-in method __subclasshook__ of type object at 0x000000001DA38550> co_argcount - co_cellvars - co_code - co_consts - co_filename - co_firstlineno - co_flags - co_freevars - co_kwonlyargcount - co_lnotab - co_name - co_names - co_nlocals - co_stacksize - co_varnames -
他にも、inspect
モジュールでもできるらしいが、まあ、これでできたので、良しとする。
参考。
qiita.com
<logging, Python> ipythonでのlogging
ちと、threading
を使っていたら、どのスレッドが何しているのか?知りたくなり、ロギングlogging
してみた。
したら、ipython
では、ちと一工夫必要だったのでメモっち。
簡単にいうと、下記をスクリプトに盛り込む。
import logging logging.disable(logging.FATAL) # logging.disable(logging.NOTSET) logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) logging.basicConfig(format='[%(asctime)s] %(levelname)s %(process)d %(thread)d %(threadName)s %(lineno)d %(funcName)s %(message)s', level=logging.DEBUG)
logging.basicConfig(level=logging.DEBUG)
だけでは、level
がDEBUG
にならず、
logging.debug('hage')
が出力されない。
なので、ロガーlogger
オブジェクトを生成して、.setLevel(logging.DEBUG)
が必要。
どうしてかは、難しいので、よくわからんが、、、
参考にさせてもらったところ。
note.crohaco.net