天元突破グレンラガン★★★★☆
Primi Video
一言で言うと
「天上天下超人合体ドリルロマン」
KeyWord
合体、ロボ、ドリル、勢い、おっぱい
感想
仮面ライダーフォーゼ、キルラキルの中島かずきさん脚本。
キルラキルの流れで見たけど、勢いが半端ない。
- 勢いで名言っぽいことを叫ぶ
- 勢いで技名を叫ぶ
- 勢いで世界観を納得させる
- 勢いで勝つ!
すべてが勢い。
感想も「勢い」すげー。
だけ(褒めてる)
ただし、「9話、10話」「19話、20話、21話」に鬱展開があるので、そこを乗り切るかが勝負。
物語の構成は「地下(旅立ち)」「地上(解放)」「天(生存)」の3部構成。
ぐっときたのは19話-20話の「ロシウ」の決断。
自分の生まれ故郷の「生きる術」を選んでしまうロシウの葛藤は
現実世界では納得感のある選択ではあるのだが
この世界で言えば「力を持たざるもの」の選択でしかないところ
ひょうたん顔のくせにあざとい。
ネットサーフィンしながら見るぐらいがちょうど良い。
複数のタスクをiOSリマインダーに流し込む
困ったこと
iPhoneの日記アプリやメモ帳に複数タスクをメモした時、標準リマインダーにタスクを流し込んで一気に登録したかった。
前提
- 標準リマインダーな人が対象
- メモ帳とかに今日やることリストとかを書いて、それを標準リマインダーに流したい人
- todoistなどサード・パーティTODOを使っている人は、戦略が変わるので対象外
戦略
- 入力されたタスクを1行1件で標準リマインダに登録する
- 登録する際は、workflowで流し込む
- メモアプリを限定したくないのでクリップボード経由でWorkFlowに流し込む
- textwellでも可能
Workflowの準備
Import WorkFlow Scriptadd-task
textwellスクリプト
Import Textwell Actionadd task
使いかた(クリップボード)
- workflowのスクリプトインストール
- add-taskとして登録されます
- List名を[task]としているので、別の標準リマインダに登録する際は編集
- タスクを1件1行の複数行で書く
- 登録したいタスクをコピーする(基本的にSelectALL)
- workflow起動→「add-task」実行
textwellの人
Pandasで条件に一致した行の列値入れ替え
わからない
- Pandasの行列入れ替えは簡単ですが、条件に従う行の列値入れ替えについては情報がなかった
import pandas as pd import numpy as np from IPython.display import display, HTML
検証内容
- 列test3が1の場合、test2のデータをtest1に格納する
fuga=np.zeros(10) hoge=pd.DataFrame(fuga,columns=["test1"]) fuga=np.zeros(10) fuga[:]=-1 hoge["test2"]=fuga hoge["test3"]=[0,1,0,1,0,1,0,1,0,0] display(hoge)
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | 0.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | 0.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | 0.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | 0.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
ど直球にやると
fuga=np.zeros(10) hoge=pd.DataFrame(fuga,columns=["test1"]) fuga=np.zeros(10) fuga[:]=-1 hoge["test2"]=fuga hoge["test3"]=[0,1,0,1,0,1,0,1,0,0] display(hoge) # ここからど直球 hoge2=pd.DataFrame() for i, row in hoge.iterrows(): if row["test3"]== 1: row["test1"]=row["test2"] row=pd.DataFrame(row) hoge2=pd.concat([hoge2,row.T]) hoge2=hoge2.reset_index(drop=True) hoge2
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | 0.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | 0.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | 0.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | 0.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0.0 |
1 | -1.0 | -1.0 | 1.0 |
2 | 0.0 | -1.0 | 0.0 |
3 | -1.0 | -1.0 | 1.0 |
4 | 0.0 | -1.0 | 0.0 |
5 | -1.0 | -1.0 | 1.0 |
6 | 0.0 | -1.0 | 0.0 |
7 | -1.0 | -1.0 | 1.0 |
8 | 0.0 | -1.0 | 0.0 |
9 | 0.0 | -1.0 | 0.0 |
問題
- データ件数が少ない場合は、上記でも問題ない
- 多次元*100万データでは、1時間待っても反応がない
解決策
- 条件に従うインデックスを記録
- インデックス記載のデータを格納する
fuga=np.zeros(10) hoge=pd.DataFrame(fuga,columns=["test1"]) fuga=np.zeros(10) fuga[:]=-1 hoge["test2"]=fuga hoge["test3"]=[0,1,0,1,0,1,0,1,0,0] display(hoge) # ここからIndex利用 piyo=hoge[hoge["test3"]==1].index hoge.ix[piyo,"test1"]=hoge.ix[piyo,"test2"] hoge
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | 0.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | 0.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | 0.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | 0.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | -1.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | -1.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | -1.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | -1.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
応用
- test1とtest2のデータを入れ替える
fuga=np.zeros(10) hoge=pd.DataFrame(fuga,columns=["test1"]) fuga=np.zeros(10) fuga[:]=-1 hoge["test2"]=fuga hoge["test3"]=[0,1,0,1,0,1,0,1,0,0] display(hoge) # ここから入れ替え bk_df=hoge.copy() piyo=hoge[hoge["test3"]==1].index hoge.ix[piyo,"test1"]=hoge.ix[piyo,"test2"] hoge.ix[piyo,"test2"]=bk_df.ix[piyo,"test1"] hoge
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | 0.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | 0.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | 0.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | 0.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | -1.0 | 0.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | -1.0 | 0.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | -1.0 | 0.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | -1.0 | 0.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
メモリを気にする場合
fuga=np.zeros(10) hoge=pd.DataFrame(fuga,columns=["test1"]) fuga=np.zeros(10) fuga[:]=-1 hoge["test2"]=fuga hoge["test3"]=[0,1,0,1,0,1,0,1,0,0] display(hoge) # ここから入れ替え piyo=hoge[hoge["test3"]==1].index bk_values=hoge.ix[piyo,"test1"].values hoge.ix[piyo,"test1"]=hoge.ix[piyo,"test2"] hoge.ix[piyo,"test2"]=bk_values hoge
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | 0.0 | -1.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | 0.0 | -1.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | 0.0 | -1.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | 0.0 | -1.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
test1 | test2 | test3 | |
---|---|---|---|
0 | 0.0 | -1.0 | 0 |
1 | -1.0 | 0.0 | 1 |
2 | 0.0 | -1.0 | 0 |
3 | -1.0 | 0.0 | 1 |
4 | 0.0 | -1.0 | 0 |
5 | -1.0 | 0.0 | 1 |
6 | 0.0 | -1.0 | 0 |
7 | -1.0 | 0.0 | 1 |
8 | 0.0 | -1.0 | 0 |
9 | 0.0 | -1.0 | 0 |
Pandasのilocとixにおけるスライスの注意点
Pandasの行方向のスライスが思わぬ動きをした話し
import pandas as pd import numpy as np from IPython.display import display, HTML
numpyのスライスに代入->想像通り
fuga=np.zeros(5) fuga[1:3]=1 fuga
array([ 0., 1., 1., 0., 0.])
ilocのスライスに代入->想像通り
fuga=np.zeros(5) hoge=pd.DataFrame(fuga,columns=["test"]) hoge.iloc[1:3,0]=1 hoge
test | |
---|---|
0 | 0.0 |
1 | 1.0 |
2 | 1.0 |
3 | 0.0 |
4 | 0.0 |
ixのスライスに代入->????
fuga=np.zeros(5) hoge=pd.DataFrame(fuga,columns=["test"]) hoge.ix[1:3,0]=1 hoge
test | |
---|---|
0 | 0.0 |
1 | 1.0 |
2 | 1.0 |
3 | 1.0 |
4 | 0.0 |
原因
However, when an axis is integer based, ONLY label based access and not positional access is supported.
Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.
- Indexが整数のみの場合はラベルアクセスのみになるから注意。
検証
ラベルアクセスすると同じになる
fuga=np.zeros(5) hoge=pd.DataFrame(fuga,columns=["test"]) hoge.loc[1:3,"test"]=1 hoge
test | |
---|---|
0 | 0.0 |
1 | 1.0 |
2 | 1.0 |
3 | 1.0 |
4 | 0.0 |
IndexをStrにすれば整数アクセス可能
fuga=np.zeros(5) hoge=pd.DataFrame(fuga,columns=["test"]) hoge.index=[str(i) for i in hoge.index] hoge.ix[1:3,"test"]=1 hoge
test | |
---|---|
0 | 0.0 |
1 | 1.0 |
2 | 1.0 |
3 | 0.0 |
4 | 0.0 |
結論
- ixを使った行のスライスは型に気をつける
- 行スライスの代入はilocを使うのが無難
ripgrepのVIM連携まわり(Unite/qfixhowm/fzf/Ctrlp)
ripgrepを導入してVIM周りも固めたい
- Windowsでも使えるripgrep
- はやい
わからない
Unite Grepのバックエンドをripgrepにする方法がわからなかった。
そこで、ripgrep+vim周りの情報を集約しておきます。
ripgrepの導入
-
brew install ripgrep
-
ripgrep-0.8.1-x86_64-pc-windows-gnu.zip
ripgrep-0.8.1-x86_64-pc-windows-msvc.zip
Pathを通す
ripgrepをデフォルトに
if executable('rg') set grepprg=rg\ --vimgrep\ --no-heading set grepformat=%f:%l:%c:%m,%f:%l:%m endif
ripgrep + vim
- 海外だと人気あるプラグイン
- :Rgコマンドが使えるようになる
ripgrep + Unite
if executable('rg') let g:unite_source_grep_command = 'rg' let g:unite_source_grep_default_opts = '-n --no-heading --color never' let g:unite_source_grep_recursive_opt = '' " Hit件数制御したいなら以下 let g:unite_source_grep_max_candidates = 200 " Windowsなら let g:unite_source_grep_encoding='utf-8' endif
ripgrep + qfixhowm
" ripgrepを使う(PATHは通してある前提) let mygrepprg = 'rg' let myjpgrepprg = 'rg' " マルチエンコーディングgrepを使用する let MyGrep_MultiEncoding = 1 " マルチエンコーディングgrepで使用するエンコーディングリスト let MyGrep_MultiEncodingList = ['utf-8', 'cp932'] " 外部grep(shell)のエンコーディング(Windows) let MyGrep_ShellEncoding = 'utf-8' " 以下、上記URL参考 " 実行時のオプションをripgrep用に変更(GNU Grepと同じ出力になるように) let MyGrepcmd_useropt='-nH --no-heading --color never' let MyGrepcmd_regexp='' let MyGrepcmd_regexp_ignore='-i' let MyGrepcmd_fix='-F' let MyGrepcmd_fix_ignore='-F -i' let MyGrepcmd_recursive='' " gipgrepにファイルパターンとして「*」「*.*」を渡したらエラーになったのでその対策 let MyGrep_GrepFilePattern='.'
ripgrep + CtrlP
"ctrlP"{{{ if executable('rg') let g:ctrlp_user_command = 'rg --files %s' let g:ctrlp_use_caching = 0 let g:ctrlp_working_path_mode = 'ra' let g:ctrlp_switch_buffer = 'et' endif
or
if executable('rg') let g:ctrlp_use_caching = 0 "let g:ctrlp_user_command = 'cd %s && rg "" -i -r --no-color -l ./**/*' let g:ctrlp_user_command = 'rg %s --files --color=never --glob ""' endif
ripgrep + fzf
- 参考
" Similarly, we can apply it to fzf#vim#grep. To use ripgrep instead of ag: command! -bang -nargs=* Rg \ call fzf#vim#grep( \ 'rg --column --line-number --no-heading --color=always '.shellescape(<q-args>), 1, \ <bang>0 ? fzf#vim#with_preview('up:60%') \ : fzf#vim#with_preview('right:50%:hidden', '?'), \ <bang>0)
ripgrep + denite
- 作者: DrewNeil,新丈径
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/28
- メディア: Kindle版
- この商品を含むブログ (4件) を見る