必ず忘れるGit Command メモ

Grüezi,

使いたい時には忘れてるGit commandをメモ代わりにalias化しました.
~/.gitconfigに下記コードを保存すると,terminalでgit [alias]でgit コマンドとして使えます.
大体これで作業順な気がする.

[alias]
    rv = remote -v
    ra = remote add origin # for setting remote repo, paste remote URL
    br = branch #show branch
    cb = checkout -b #create and switch branch
    c = checkout #switch branch
    s = status
    d = diff #show diff between main and current branch
    dd = diff --name-only #show diff between main and current branch as file name
    l = log --oneline
    ad = add .
    com = commit -m # with "commit comment"
    cm = checkout main # switch to main branch
    m = merge # merge branch into current branch
    bd = branch -d #delete branch

cloneとかpullした後のbranchがmasterではなくmainになってるので注意.
このaliasでgit commit -mは,

git com 'comment etc.'

みたいにquate使った方が,スペース使ってもerrorが出ない.

これらのaliasはtabで補完されないので注意. 忘れた時はそれっぽくわざと間違うと,

git: 'co' is not a git command. See 'git --help'.

The most similar commands are
    commit
    com

みたいに教えてくれる.
git --helpではaliasまで表示しないけど,git help -aだと一応一番下には表示される.けど,見つけづらいので非推奨.

cat ~/.gitconfig

こちらはcat ~/.gitまで覚えておけばtabで補完もしてもらえるし,terminal上でalias一覧を確認出来るので便利かも.

.zshrc周りをいじるのに抵抗がなければ,

alias b='git branch'
alias rv='git remote -v'
alias ra='git remote add origin' # for setting remote repo, paste remote URL
alias b='git branch' #show branch
alias cb='git checkout -b' #create and switch branch
alias c='git checkout' #switch branch
alias s='git status'
alias d='git diff' #show diff between main and current branch
alias ddd='git diff --name-only' #show diff between main and current branch as file name
alias l='git log --oneline'
alias ad='git add .'
alias com='git commit -m' # with "commit comment"
alias cm='git checkout main' #
alias m='git merge' # merge branch into current branch
alias bd='git branch -d' #delete branch

を追記すると,gitすら入力する必要がなくなる.(動作保証はしませんが)

.gitignore

Git管理下のparent directoryに置いておく隠しテキストファイル. Git管理対象外のFile名を指定出来る.

*.sdf
*.smi
*.cif
*.pdb
*.pse
.ipynb_checkpoints

chemoinfoクラスタは辺りはdefaultでGit管理から外しておかないと大変になりそう.

git diff周りがちゃんと理解出来てないので,そのうち追記していきます.

JupyterNotebookのショートカットメモ

いつも忘れてしまうやつの抜粋.
jupyterとかMacOSのversionが違うと微妙に違うので注意. MacOS Big Sur, M1 Python 3.7.9 (conda 4.9.2)

Cellを分割 ctr + Shift + -

分割したい末尾でCtr + Shift + -
実行はされない.

Cellを統合 Shift + M

Cellを選択してShift + Mで次のCellと統合.
Cellを複数選択すると,全て統合

Kernelを中断 i, i

実行時間が長い時に中断.
error表示になるので非おすすめ.

単語単位でアクション option + key

print(root.find("a").attrib)

みたいなコードの時は,単語単位or記号をまとめて").の形でsクション出来る. ⌥押しながら左右で移動,⌫で削除,みたいな感じ.
今気づいたけど,これ他のtext editorでも使えるね.Markdownも同じ動き.

行単位でアクション command + key

⌥(option)で単語単位,⌘(command)で行単位と覚える. これもjupyter以外にもはてブとかのMarddownでも使えました.

サイドバーの表示切り替え command + b

マウスを使わずに出来るとちょっと便利.

üやÅなんかはキーを長押し

最近のMacOSiOSの特権だと思うけど,キーを長押しすると該当する特殊記号が候補表示されます.
顔文字にも使えるね(ü)

どうでもいいことなんだけど,はShift + option + kで入力出来るのに⌘(command)とか⌥(option)にショートカットがないのはなんでやねん的に感じる.
text replacementのところに登録しておくと,ちょっと便利.使うことなさそうだけど.

Uniprotで調べた標的タンパクのSummaryとPDBを取得する

Grüezi,

Biopythonのライブラリを使ってUniprotをいじってみたので,以下覚書.

# ライブラリのimport
import pandas as pd
from Bio import SeqIO
from Bio.PDB import PDBList as pdbl
from urllib.request import urlopen

# 調べたいタンパクのUniprotKB accession numberのリスト(一つでもOK)
keys = [
    'Q96SW2', 
    'Q68DV7'
]

# 空のDataFrameを作成
summary = pd.DataFrame(index = keys, columns = ['name', 'description', 'pathway', 'tissue', 'subcellularlocation', 'function', 'PDB count', 'PDB'])

# Uniprotにアクセスしてtableを作成
for keyword in keys:
    handle = urlopen("http://www.uniprot.org/uniprot/" + keyword + ".xml")
    record = SeqIO.read(handle, "uniprot-xml")
    dbx = record.dbxrefs
    dfIO = pd.DataFrame(dbx)
    df = dfIO[0].str.split(':', expand=True)
    df.columns = ['name', 'id', 'and']
    dfPDB = df[df['name']=='PDB']
    PDBs = list(dfPDB['id'])
    summary['name'][keyword] = record.name
    summary['description'][keyword] = record.description
    summary['pathway'][keyword] = ''.join(record.annotations['comment_pathway'])
    summary['tissue'][keyword] = ''.join(record.annotations['comment_tissuespecificity'])
    summary['subcellularlocation'][keyword] = ', '.join(record.annotations['comment_subcellularlocation_location'])
    summary['function'][keyword] = ''.join(record.annotations['comment_function'])
    summary['PDB count'][keyword] = str(len(PDBs))
    summary['PDB'][keyword] = ', '.join(PDBs)
summary.T

こんな感じのDataFrameが出力されればOKです. f:id:keetane:20210202214623p:plain 以下,要所だけ説明.

# keywordのxmlにアクセス
handle = urlopen("http://www.uniprot.org/uniprot/" + keyword + ".xml")
# recordの作成
record = SeqIO.read(handle, "uniprot-xml")
print(record)

XMLはタグ付きの情報なわけですが,Uniprotのxmlは私のような素人にはちょっと複雑です.
Biopythonを使うと,dic形式っぽいrecordを作成出来ます,が... f:id:keetane:20210202215744p:plain ooops...みたいになります.
情報量が多くて絶望しそうになりますが,XMLなので情報がタグ付けされてます.
ざっくり言うと,[ID, name, Description, Database cross-references, annotation, sequence]みたいな構成になっています.
ここからBiopythonのinstanceで目的にあった情報を抽出してこれます. record.と入力した後にtabを押すといい感じに候補が出てきます.,f:id:keetane:20210202215855p:plain
例えばidなんかは比較的シンプルで,

record.id
# 'Q68DV7'

みたいに返ってきますが,Database cross-referencesとannotationは,ややむずです.

record.annotations

ではannotationがdictionaryで返ってきます.
f:id:keetane:20210202221301p:plain
つまり,keyでslicingしてやればvalueが返ってきます.
例えば,

record.annotations['comment_PTM']
# ['Autoubiquitinated.']

みたいにリストで返ってきます.
こいつ自己Ub化されるんか.

record.dbxrefs

でDatabase cross-referencesのリストが返ってきます. f:id:keetane:20210202221503p:plain
使いづらw
ここで欲しい情報だけとってくるのにひと工夫必要でした.

# Database cross-referencesのDataFrame作成
dbx = record.dbxrefs
dfIO = pd.DataFrame(dbx)
# ':' でstringを分割
df = dfIO[0].str.split(':', expand=True)
# カラム名の割り当て
df.columns = ['name', 'id', 'and']
# 'PDB'を含むrowをfilter
dfPDB = df[df['name']=='PDB']
# PDB IDをリストに変換
PDBs = list(dfPDB['id'])
PDBs
# ['4KNG']

私が欲しいのはPDB IDのリストなんで上の処理ですが,DOIやPubMed IDでも同じことがもちろん出来ます.
Database cross-referencesもannotationみたいに最初からdictionaryでくれれば苦労が少ない気が...

さてさて,以上の内容をfor文で回してあげたのが冒頭のスクリプトで,複数のタンパクのsummaryをUniprotからDataFrameへと出力出来ます.

ちなみに今回例にしたRNF43ですが,先日PROTACの報告がありました.
膜局在型E3Ligaseなんてものがあるらしく,標的とRNF43をバイスペ抗体で近づけてやるとpolyUb63化されてLysosomeで分解されるんだとか.
「節子,それPROTACちゃう,LYTACや」
ってツッコミはなかったのかなーとか思ったり.

ちなみに本当はlxmlというライブラリを使った方が色々情報取れるはずなんですが,それは勉強中なので宿題ということで. seiyakukenkyusya.com

それではBis Wald, tschüß.

素人がM1のMacでも自己満するTerminal Prompt設定

*この記事は過去の記事をベースにマークダウン記法の練習に作成してます. keetaneblog.hatenablog.com
マークダウンについてはチートシートを見ながら書いてます.

Qiita マークダウン記法 一覧表・チートシート - Qiita

最終的な見た目はこんな感じになります. f:id:keetane:20210127060954p:plain 軽く説明すると,

  • 1行目にDirectory path (+ あればGit Branch),2行目に$
  • Git add前はブランチ名が赤に,commit 前だと黄色になる.
  • anacondaの仮想環境に入ってると先頭に表示(anacondaの デフォ)

つまりこんな感じ.

(env) ~/Document/Directory [branch]
$ コマンド

Gitのbranchとstatusを表示する

こちらのリンクの内容のほぼまんまコピペです. 1箇所コピペするだけでgitブランチ名を常に表示【.zshrc】

下記のscriptを~/.zshrcにコピペして保存します.

# git ブランチ名を色付きで表示させるメソッド
function rprompt-git-current-branch {
  local branch_name st branch_status
 
  if [ ! -e  ".git" ]; then
    # git 管理されていないディレクトリは何も返さない
    return
  fi
  branch_name=`git rev-parse --abbrev-ref HEAD 2> /dev/null`
  st=`git status 2> /dev/null`
  if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
    # 全て commit されてクリーンな状態
    branch_status="%F{green}"
  elif [[ -n `echo "$st" | grep "^Untracked files"` ]]; then
    # git 管理されていないファイルがある状態
    branch_status="%F{red}?"
  elif [[ -n `echo "$st" | grep "^Changes not staged for commit"` ]]; then
    # git add されていないファイルがある状態
    branch_status="%F{red}+"
  elif [[ -n `echo "$st" | grep "^Changes to be committed"` ]]; then
    # git commit されていないファイルがある状態
    branch_status="%F{yellow}!"
  elif [[ -n `echo "$st" | grep "^rebase in progress"` ]]; then
    # コンフリクトが起こった状態
    echo "%F{red}!(no branch)"
    return
  else
    # 上記以外の状態の場合
    branch_status="%F{blue}"
  fi
  # ブランチ名を色付きで表示する
  echo "${branch_status}[$branch_name]"
}
 
# プロンプトが表示されるたびにプロンプト文字列を評価、置換する
setopt prompt_subst
 
# プロンプトの右側にメソッドの結果を表示させる
PROMPT='%F{green}%~ `rprompt-git-current-branch`
$ %f'

違うのは最後の2行だけです. これでBranchの表示も左に寄せてます.
既に使用中のterminalに反映したい時は,下記コマンドを実行します.

$ source ~/.zshrc

Zshの表示部分をDirectory Path + Git branch + $に変更する

とりあえずZshを使えば良いんだろう? - Qiita

こちらを参考にプロンプトの表示結果だけを変えました.
具体的には,こんな感じです.(before >>> after)

before
RPROMPT='`rprompt-git-current-branch`'
>>>
after
PROMPT='%F{green}%~ `rprompt-git-current-branch`
$ %f'

RPROMPTはプロンプトの右側に表示する内容なので,左側のPROMPTに変更しました.
先頭はDirectory Pathになるように%~,続いて`rprompt-git-current-branch`の後に改行する.
改行はマストではないけど,コマンド自体は$の後に新しい行に書く方が視認性が高いと感じます.

Macを新調してからTerminalの表示がうざいなぁと思ってたから,スッキリ整理できてよかったー.

RCSB PDBのサイトからPDB(.cif)をまとめて取得する簡易script

Grüezi wohl,

 

 一年位前まで頑張って勉強してたKNIME x PDBですが、PDB connectorが仕様変更になってます。いざ使おうって時にこれだから...

 

 というわけで、めっちゃ簡易ですがpython scriptを置いておきます。

from IPython.display import HTML
from pypdb import *
import time
from Bio.PDB import PDBList
from tqdm import tqdm

# 検索用のkeywordsを定義

q = input('keywords? ')

# PDB IDのリストを取得、ID数を表示
pdb_ids = Query(q).search()
print('the number of PDB IDs are ' + str(len(pdb_ids)))

# directoryを作成

pdbl = PDBList()
dir_name = q + '/'

# リストをdownloadする? yes/no

download = input('Download PDB files? y/n ')
if download == 'y':
for pdb_id in tqdm(pdb_ids, position=0):
pdbl.retrieve_pdb_file(pdb_id, pdir=dir_name)
time.sleep(10)
print('fertig')

 

上記のスクリプトをTextEditか何かのアプリケーションにコピペして、PDB.pyみたいな名前で保存します。

それをterminalからpythonで実行します。

 

参考にしたのはこちらのpypdbっていうライブラリと、


github.comgithub.com


こちらのbiopythonの使い方です。


bi.biopapyrus.jpbi.biopapyrus.jp


 

pythonの方がネットに落ちてる情報量が多いから、不測の事態に陥ってもなんとかはなりそう...

 あとはadvanced searchとかに対応したり、リガンドの抜き出しとかしたいかな。

調べたい本題からどんどん遠ざかっていく...

 

Anyway, have a nice time. Bis Bald. tschüß.

使いたい時には忘れているTerminalコマンドメモ

お題の通りで使う時にいつも忘れてしまうTerminalコマンドをメモ.随時更新.

Shell編

rm -r directoryname

-rオプションがないとdirectoryは消去できない.

~/.Trash/* でゴミ箱を空に出来る.

 

~

= /Users/username

 

ls -a

.DS_storeや.zshrcなどの隠しファイルを含むリストを表示する.

Finder上で表示を切り替えしたいときはcommand + shift + .

 

sudo purge

メモリを解放. 

 

top

アクティビティモニタのようにアクティブなプロセスを表示.

qで停止.

S (shift + s)で追加コマンド.kill 入力後にPIDの指定でプロセスを終了.

 

find . -name '.DS_Store' -type f -ls -delete

directory以下にある隠しファイルの.DS_Storeを消去する.

下記コマンドでエイリアスを作成すると,deldsだけでdirectory以下の.DS_Storeファイルを削除できるようになる.

alias delds = 'find . -name ".DS_Store" -type f -ls -delete'

 

source ~/.zshrc

ファイルに書かれているコードを実行するコマンド.

zshrcを少しいじった後に、terminalに反映させたい時のコマンド.

もちろん他のrcファイルでも使えると思うけど,他であまり使った記憶はなし

Git編

git diff --name-only

branchの差分をファイル名のみで表示. 

 

git diff --stat

branchの差分を簡易表示.

 

Docker

docker exec -it containername bash

bashってつけ忘れる.ぶっちゃけ意味もしらんので後で調べる.

 

 

Jupyter

jupyter nbconvert --to python filename.ipynb

jupyter notebookを.pyファイルに変換.

素人がMacで始めるプログラミングっぽいこと①Terminal便利設定編

MacBookAir2012でKNIMEを動かすのは重すぎてストレスに感じてきた。

そろそろやらねばと思ってPythonを勉強し始めたので、環境構築の備忘録を随時更新する。

PCやiPadを買い換える時はクリーンから始めたい派なので、調べ直しは最低限にしたい。

というわけでまずはTerminal周辺。

 

zshの導入と設定

brewzshとその他便利機能をインストール。

qiita.com

Catalinaからはzshがデフォルトらしい.
実際に使いと,補完機能,候補表示,シンタックスハイライトの3つの便利機能なしは最早ありえない。

SublimeとiTermのインストール

datawokagaku.com

 

PATHを通さないとSublimeは使えなかった。

datawokagaku.com

 

iTermは確かに見た目が綺麗になる

datawokagaku.com

 

Terminalのプロンプトを短くする

qiita.com

短くするだけでなく 最初に改行を入れておくと、個人的にはzshの可読性が上がった。Window一つあたりの情報量は減るけど、あんま気にしてないのでよし。

 

Gitのbranchとstatusを表示しておく

suwaru.tokyo

これのおかげでやっとGitを少し理解した。

個人でGitするだけならBranchを切って、更新ファイルをgit addでリストし、git commit -m "xxx"でチェックポイントを作る。問題なければmasterとmergeする。

colaboratorとonlineでgitするのがGitHubっていうのが今の所の理解です。

 

 

以上、適宜追加していきます。