京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

2022年も残りほぼ6ヶ月、今年の振り返りと後半戦に向けて京橋ブログの展望

雑談

相変わらず、夕暮れと共に、京橋界隈を徘徊しています。飲み屋の客引き、お姉さんらに、もう顔を覚えられてるというレベルです。バイオインフォの香りよりも、酒の香りが漂っている、大阪・京橋。

先日、コロナ禍中行けなかった、オンサイトでの研究会に参加してきました。研究会の内容は、ともあれ、とてもイマイチだったけども、、何だろうか、非常に心に染み渡るものを感じました。

というのは、何かを目指して邁進しているというのは、若さを問わず、皆を惹きつけるものを感じさせるものです。自分の過去を振り返って、『それは何か?』というと、 ただただ「挑戦し続ける」というか、 「よい習慣」としての継続力なのかなと思ってしまった。

この異種格闘技みたいな何とも粗削りな会が、改めて思考を巡らせるキッカケとなり、 最近、サボっていたブログ活動もまた再開したくなった。実際、再起を図るには、この場所しか、今の自分にはないのかもしれない、、、そうすると、自然と、、3月頃から放置していた原稿の執筆に取り掛かる気にもなれてきた。

あと、今年も6ヶ月、「挑戦」と「よい習慣」と共に、To Do を書き留めることにしました。Rとかを使って、『世の中を観察していく』という視点は、なんか楽しい気がしています。

2022年残りのTo Do

  • リバイス中の英語のちゃんとした総説の原稿を仕上げて、再投稿すること

  • 実データ(社会、SNS、オープンデータ、論文・MeSH etc)とデータサイエンスの視点から、世の中の物事の観察や課題解決に資すること

  • 専門書(Rとかのプログラミング言語、データサイエンス、生命科学、その他好きなやつ)の紹介記事を書くこと

  • バイオインフォ・ネタも充実させていくこと

  • 仮想通貨のブログ記事も作ること

R/rtweetを使って、SNS/Twitterでつぶやくための基本的な関数『post_tweet』のこと

はじめに

rOpenSci (v. 0.6.9) によってレビューされたrtweetパッケージは、TwitterのRESTおよびストリームAPIを介して、Twitterのデータを収集・整理するために設計・実装された。

それを使用するためのR環境の初期設定については、 過去記事の「R/rtweetとか諸々を使って、つぶやきのテキスト解析 (形態素分析 + 感情分析) をやってみた件」を 参考にしてみてください。

skume.net

rtweetパッケージのインストール

rtweetパッケージは、CRAN版と開発版が使える。 インストールの仕方がそれぞれで変わってくる。

#CRANからリリース版のインストールの場合
install.packages("rtweet")

#GitHubから開発版のインストールの場合
install.packages("rtweet", repos = 'https://ropensci.r-universe.dev')

テキストをつぶやく

Twitterの基本操作としては、 ツイート、リプライ(返信)、いいね、リツイートなどがある。 1回につき140文字までのテキスト(=ツイート)や画像を投稿することができる。

post_tweet関数を使って、 ユーザーのTwitterアカウントにステータスアップデートを投稿する。 いわゆる、Twitterのツイートを行うことである。 テキストをつぶやく場合には、statusの引数を使う。

#ロード
library(rtweet)

#テキストをつぶやく
post_tweet( status = "何かをつぶやく" )

#Twitterサイトを開いて、確認する
browseURL("https://twitter.com/home?lang=ja")

画像をつぶやく

また、画像をつぶやく場合には、mediaの引数を使う。 適当な画像(e.g. R言語のロゴ)を用意して、mediaにそのパスを記述する。

#画像をつぶやく
post_tweet(media = "Rlogo.png")

Twitterアカウントに行くと、Rロゴが出力されている。

また、エラー: Media and alt_text must be character vectors.のエラーが出る場合、 media_alt_textの引数で、何かキーワードを入れる必要があるみたいです。

まとめ

post_tweet関数で、テキストとか画像とかをつぶやける。 他の関数と組み合わせることで、解析結果をツイートする、Botとかもできそうに思う。 近々、rtweetパッケージを使って、Bot作りもやってみようと思う。

補足

全てのフレンドのフォローを辞めるTips

ツイッターを長くやっていると、色々とフレンドのフォローが増えてくる。 なかには、如何わしいフレンドも。。気づけは、フォローが5000人。 スマホのアプリではもう削除しきれません。。

そんなとき、post_unfollow_user関数で、バサバサとフレンドを削除できます。

一度、全てのツイッターフレンドのフォローを辞めて、リフレッシュしましょう。

#パッケージ・ロード
library(rtweet)

#フレンドのID取得
a <- get_friends(user = "Your Account Name")

#フレンドのフォローを辞める: 1回ごとに0.25秒待ちを入れている
for(n in 1:nrow(a)){
post_unfollow_user(user = as.character(a[n,2]))  
Sys.sleep(0.25)
print(n)
}

最後に、ツイッターアカウントのフレンドが居なくなっていることを確認しましょう。

闇を消そう、、Twitterのポストを全削除するTips

ツイッターを長くやっていると、色々と変なポストやリツイートが増えてきます。 気づけは、ポストが1000近くなっています。 こちらも、スマホのアプリでの削除はやってられません。

そんなとき、post_destroy関数で、バサバサとツイートを削除できます。

post_destroy関数で、過去の闇ともオサラバしましょう。

ツイートが多い場合は、get_timeline関数で、改めて自分のタイムラインを取得することをお勧めします。

##投稿削除
#パッケージ・ロード
library(rtweet)

#自身のタイムラインを取得(多い場合は、削除後に再取得を繰り返す)
a <- get_timeline(user = "Your Account Name", n=1000)

#つぶやき数
dim(a)
#[1] 873  43

#ポストの全削除
for(n in 1:nrow(a)){
post_destroy(destroy_id = a$id_str[n])
Sys.sleep(0.25)
#print(n)
}

最後に、ツイッターアカウントのツイートが無くなっていることを確認しましょう。

闇からの開放企画: ユーザーが行った「いいね」をすべて削除するTips

ツイッターを長くやっていると、「いいね」もなかなか厄介です。 某国では、不適切なポストへの「いいね」をすると、逮捕されます。 そういうことがないように、不適切な「いいね」は消しておきましょう。。

そんなとき、get_favorites関数で、バサバサと「いいね」を削除できます。

#パッケージ・ロード
library(rtweet)

#「いいね」したツイートIDを取得: いいねが多い場合は、何回か繰り返します
a <- get_favorites(user = "Your Account Name", n=1000)

#ツイート数
dim(a)
#[1] 908  43

#「いいね」の削除
for(n in 1:nrow(a)){
try(post_favorite(status_id=a$id_str[n], destroy = TRUE), silent = TRUE)
Sys.sleep(0.25)
print(n)
}

最後に、ツイッターアカウントの「いいね」が消えて無くなってることを確認しましょう。

rtweet内の関数の概要(機械翻訳)

関数名 概要
as_screenname ユーザー識別子をスクリーンネームとして評価するよう強制します。
bearer_token ベアラートークン。
create_token Twitter 認証トークンを作成します。
direct_messages 認証したユーザが送受信したダイレクトメッセージを取得します。を過去30日間から取得します。
do_call_rbind データフレームのリストを、属性(ツイートやユーザー)を保持したままバインドする
emojis 絵文字のコードと説明のデータです。
flatten データフレームをフラット化/アンフラット化する
get_collections ユーザIDやステータスIDでコレクションを取得する
get_favorites 対象ユーザがお気に入りに登録しているステータスのツイートデータを取得する。
get_followers 対象ユーザをフォローしているアカウントのユーザIDを取得します。
get_friends 対象のユーザーにフォローされているアカウントのユーザーIDを取得します。
get_mentions 認証したユーザーのメンションを取得します。
get_my_timeline 自分のタイムラインを取得します。
get_retweeters 指定されたステータスをリツイートしたユーザのユーザIDを取得します。
get_retweets 特定の Twitter ステータスに対する直近のリツイートを取得します。
get_timeline 1人または複数のユーザのタイムライン(対象ユーザが投稿したツイート)を取得します。
get_tokens Twitter の認証トークンを取得する。
get_trends Twitter のトレンドデータを取得する。
langs Twitter のデータで認識される言語コード。
lat_lng ツイッターデータに緯度・経度の変数を追加します。
lists_members Twitterのリストメンバー(リスト上のユーザー)を取得します。
lists_statuses 指定したリストのメンバーが作成したツイートのタイムラインを取得します。
lists_subscribers 指定したリストの購読者を取得します。
lists_subscriptions 指定したユーザーのリスト購読者を取得します。
lists_users 指定したユーザが購読しているすべてのリスト (自分自身のリストも含む) を取得します。
lookup_collections コレクションを、ユーザ名あるいはステータス ID で取得します。
lookup_coords 指定した位置の座標を取得します。
lookup_friendships 指定した二人のユーザ間の友人関係を調べます。
lookup_statuses 指定したステータス (ステータス ID) に対応するツイートデータを取得します。
lookup_users 指定したユーザ(ユーザ IDやスクリーンネーム)のTwitterユーザデータを取得します。
my_friendships ユーザ間の友人関係情報を検索します。
network_data ネットワークデータ
next_cursor next_cursor/previous_cursor/max_id
parse_stream Twitter のストリームデータ(JSONファイル)をパースしたデータフレームに変換します。
plain_tweets 文字ベクトル(ツイート)を、よりプレーンなテキストにクリーンアップします。
post_favorite 対象のステータスIDをお気に入りに登録します。
post_follow 対象のTwitterユーザーをフォローする。
post_friendship 友情関係の通知やリツイートを更新する。
post_list Twitterのリストを管理します
post_message ユーザーの Twitterアカウントからダイレクトメッセージを投稿します。
post_tweet ユーザーのTwitterアカウントにステータスアップデートを投稿する
rate_limit 指定した Twitter アクセストークンの制限値を取得する
read_twitter_csv カンマ区切り値の Twitter データを読み込みます。
round_time 日付と時刻の値を丸める汎用関数
search_30day 過去30日間のデータを検索する (PREMIUM)
search_fullarchive fullarchive を検索 (PREMIUM)
search_tweets 検索クエリで特定したステータスのツイートデータを取得する。
search_users 検索でヒットしたアカウントのユーザデータを取得します。
stopwordslangs Twitter のストップワード(多言語)データを取得します。
stream_tweets Twitterのライブストリームを収集します。
suggested_slugs ユーザー認証のためのユーザー[アカウント]候補を取得します。
trends_available Twitter のトレンドを、関連する WOEID と共に取得します。
ts_data ツイートデータを時系列的なデータオブジェクトに変換する。
ts_plot ツイートのデータを時系列的なデータオブジェクトとしてプロットします。
tweets_data ユーザデータからツイートデータを抽出する。
tweets_with_users tweets/usersデータのtibblesにデータをパースする
tweet_shot ツイート/スレッドの画像をキャプチャする
users_data tweets データオブジェクトからユーザデータを抽出する
write_as_csv Twitter のデータをカンマ区切りの値ファイルとして保存します。

参考資料

github.com

cran.r-project.org

M1チップ搭載の MacBook Air におけるAutoDock Vina (1.2.2) の使い方とドッキングシミュレーションについて

はじめに - AutoDock Vina

AutoDockは、 30年近く開発が進められている、分子モデリングシミュレーションソフトウェアの一つです。 主に、タンパク質–リガンドのドッキング(Docking)に利用されています。 2009年からオープンソース・ソフトウェアとなり、非商業的利用に関しては、無料で使用できます。 AutoDockは、過去には、HIV-1インテグラーゼ阻害剤の開発においても活用されました。

AutoDock Vinaは、 Oleg Trott 博士 (The Scripps Research Institute)らによって提供された、 AutoDock4の改良型ドッキングツール(AutoDockの後継)です。 Vinaの登場によって、計算の速度、ドッキング精度ともに大幅に改善されました。

原著論文 - AutoDock Vina -

AutoDock Vinaに関する原著論文は以下の2報となります。

  1. "J. Eberhardt, D. Santos-Martins, A. F. Tillack, and S. Forli. (2021). AutoDock Vina 1.2.0: New Docking Methods, Expanded Force Field, and Python Bindings. Journal of Chemical Information and Modeling."

  2. "O. Trott and A. J. Olson. (2010). AutoDock Vina: improving the speed and accuracy of docking with a new scoring function, efficient optimization, and multithreading. Journal of computational chemistry, 31(2), 455-461."

今回やること

M1チップ搭載の MacBook Airで、AutoDock Vina (ver 1.2.2)をセットアップしてみました。 その方法を、設定方法とともに、具体的なコマンドを説明しています。

今回、AutoDock Vinaは、ARM用のバージョンである「vina_1.2.2_macos_arm64」を使用しています。

セットアップ

brewの設定

まずは、Homebrewを設定します。

まだ設定されていない場合は、 過去の記事を参考に設定してください。

skume.net

brewコマンドを用いたパッケージのセットアップ

Macのターミナルを起動して、 所定のライブラリをbrewコマンドでインストールしていきます。

今回、インストールするのは、 boost、wget、gitのライブラリです。

#boostのインストール
brew install boost 

#wgetのインストール
brew install wget

#gitのインストール
brew install git

Autodock Vina 1.2.2のセットアップ

それでは、「Autodock Vina 1.2.2」のセットアップに入っていきます。 ここでは、wgetで「Autodock Vina 1.2.2」をダウンロードして、諸設定を行なっていきます。

#ダウンロード
wget https://github.com/ccsb-scripps/AutoDock-Vina/releases/download/v1.2.2/
vina_1.2.2_macos_arm64

#名前の変更
mv vina_1.2.2_macos_arm64 vina

#実行権限の付与
chmod +x vina

#vinaを任意のフォルダに移動させる
#/opt/homebrew/bin とか、すでにパスが通っているところがよい
mv vina /opt/homebrew/bin 

#パスの確認
which vina
#/opt/homebrew/bin/vina

「vina」のパス設定が完了して、「which」コマンドで確認できたらOKです。

ここまで設定できたら、ヘルプが表示されるかどうかも確認してみます。 以下の-helpオプションで、ヘルプが表示されるはずです。

#ヘルプ表示
vina -help

#AutoDock Vina v1.2.2-22-gb5f8dc1-mod
#Command line parse error: unrecognised option '-help'
#
#Correct usage:
#
#Input:
#  --receptor arg             rigid part of the receptor (PDBQT)
#  --flex arg                 flexible side chains, if any (PDBQT)
#  --ligand arg               ligand (PDBQT)
#  --batch arg                batch ligand (PDBQT)
#  --scoring arg (=vina)      scoring function (ad4, vina or vinardo)
#
#Search space (required):
#  --maps arg                 affinity maps for the autodock4.2 (ad4) or vina 
#                             scoring function
#  --center_x arg             X coordinate of the center (Angstrom)
#  --center_y arg             Y coordinate of the center (Angstrom)
#  --center_z arg             Z coordinate of the center (Angstrom)
#  --size_x arg               size in the X dimension (Angstrom)
#  --size_y arg               size in the Y dimension (Angstrom)
#  --size_z arg               size in the Z dimension (Angstrom)
#  --autobox                  set maps dimensions based on input ligand(s) (for 
#                             --score_only and --local_only)
#
#Output (optional):
#  --out arg                  output models (PDBQT), the default is chosen based
#                             on the ligand file name
#  --dir arg                  output directory for batch mode
#  --write_maps arg           output filename (directory + prefix name) for 
#                             maps. Option --force_even_voxels may be needed to 
#                             comply with .map format
#
#Misc (optional):
#  --cpu arg (=0)             the number of CPUs to use (the default is to try 
#                             to detect the number of CPUs or, failing that, use
#                             1)
#  --seed arg (=0)            explicit random seed
#  --exhaustiveness arg (=8)  exhaustiveness of the global search (roughly 
#                             proportional to time): 1+
#  --max_evals arg (=0)       number of evaluations in each MC run (if zero, 
#                             which is the default, the number of MC steps is 
#                             based on heuristics)
#  --num_modes arg (=9)       maximum number of binding modes to generate
#  --min_rmsd arg (=1)        minimum RMSD between output poses
#  --energy_range arg (=3)    maximum energy difference between the best binding
#                             mode and the worst one displayed (kcal/mol)
#  --spacing arg (=0.375)     grid spacing (Angstrom)
#  --verbosity arg (=1)       verbosity (0=no output, 1=normal, 2=verbose)
#
#Configuration file (optional):
#  --config arg               the above options can be put here
#
#Information (optional):
#  --help                     display usage summary
#  --help_advanced            display usage summary with advanced options
#  --version                  display program version

これで、初めの設定は完了です。

AutoDock Vinaのチュートリアル「basic_docking」を実行してみる

次に、GitHubにあるAutodock Vinaのリポジトリをダンロードして、 そのチュートリアルのデータで動作検証をしてみます。

以下のgit cloneコマンドで、リポジトリを取得します。

git clone https://github.com/ccsb-scripps/AutoDock-Vina.git

今回は、exampleフォルダ内のbasic_dockingをサンプルとして試してみます。

このドッキングシミュレーションのbasic_dockingのサンプルは、 典型的な使用パターンで、剛体モデルの受容体に1つの分子をドッキングすることを行います。 具体的には、非受容体型チロシンキナーゼ c-Abl の立体構造に、 抗がん剤イマチニブ(Gleevec、PDB entry: 1iep)を AutoDock Vinaを使用してドッキング実行を行います。

c-Ablは、癌原遺伝子チロシンプロテインキナーゼで、 このタンパク質は、がん化学療法、特に慢性骨髄性白血病の治療において重要な標的です。

それでは、Vinaの実行を試しますが、問題なく設定できていれば、 下記の2コマンドで、Dockingが実行されて、結果が表示されます。

#ダウンロードしたディレクト内に移動します
cd ./AutoDock-Vina/example/basic_docking/solution  

#vina実行
vina  \
    --receptor 1iep_receptor.pdbqt \
    --ligand 1iep_ligand.pdbqt \
        --config 1iep_receptor_vina_box.txt \
        --exhaustiveness=32 \
        --out 1iep_ligand_vina_out.pdbqt

--receptorには、受容体タンパク質のpdbqtファイル名を指定します。 --ligandには、リガンド(主に低分子化合物)のpdbqtファイル名を指定します。 --configには、引数として与えていない条件設定をテキストファイルとして指定します。 --exhaustivenessには、グローバル探索の網羅性を指定します(32が良いようです)。 --outには、出力ファイル名を指定します。

実行時のコンソール表示

実行結果は、以下のような感じになります。

AutoDock Vina v1.2.2-22-gb5f8dc1-mod
#################################################################
# If you used AutoDock Vina in your work, please cite:          #
#                                                               #
# J. Eberhardt, D. Santos-Martins, A. F. Tillack, and S. Forli  #
# AutoDock Vina 1.2.0: New Docking Methods, Expanded Force      #
# Field, and Python Bindings, J. Chem. Inf. Model. (2021)       #
# DOI 10.1021/acs.jcim.1c00203                                  #
#                                                               #
# O. Trott, A. J. Olson,                                        #
# AutoDock Vina: improving the speed and accuracy of docking    #
# with a new scoring function, efficient optimization and       #
# multithreading, J. Comp. Chem. (2010)                         #
# DOI 10.1002/jcc.21334                                         #
#                                                               #
# Please see https://github.com/ccsb-scripps/AutoDock-Vina for  #
# more information.                                             #
#################################################################

Scoring function : vina
Rigid receptor: 1iep_receptor.pdbqt
Ligand: 1iep_ligand.pdbqt
Grid center: X 15.19 Y 53.903 Z 16.917
Grid size  : X 20 Y 20 Z 20
Grid space : 0.375
Exhaustiveness: 32
CPU: 0
Verbosity: 1

Computing Vina grid ... done.
Performing docking (random seed: -885801442) ... 
0%   10   20   30   40   50   60   70   80   90   100%
|----|----|----|----|----|----|----|----|----|----|
***************************************************

mode |   affinity | dist from best mode
     | (kcal/mol) | rmsd l.b.| rmsd u.b.
-----+------------+----------+----------
   1       -13.38          0          0
   2        -11.4      2.993      12.41
   3        -11.4      1.658      2.053
   4       -11.15      3.869      12.31
   5       -10.76      2.544      12.64
   6        -10.1      1.988      13.73
   7       -9.774      1.706      13.63
   8       -9.695      2.683      12.64
   9       -9.494      2.834       12.4       

出力ファイルの結果表示

ここでは、1iep_ligand_vina_out.pdbqtとういうファイルに、 構造データとBinding eneryなどの結果を出力されています。

#先頭20行を表示
head -n 20 1iep_ligand_vina_out.pdbqt

#MODEL 1
#REMARK VINA RESULT:   -13.057      0.000      0.000
#REMARK INTER + INTRA:         -19.158
#REMARK INTER:                 -18.700
#REMARK INTRA:                  -0.458
#REMARK UNBOUND:                -0.757
#REMARK Flexibility Score: inf
#REMARK Active torsions [ 7 ] -> [ 7 ]
#ROOT
#ATOM      1  C1  LIG L   1      15.834  54.718  12.393  1.00  0.00     0.038 A 
#ATOM      2  C2  LIG L   1      16.908  54.561  11.405  1.00  0.00    -0.029 A 
#ATOM      3  C3  LIG L   1      17.891  53.541  11.628  1.00  0.00     0.007 A 
#ATOM      4  C4  LIG L   1      17.820  52.693  12.792  1.00  0.00     0.024 A 
#ATOM      5  C5  LIG L   1      16.777  52.840  13.752  1.00  0.00     0.035 A 
#ATOM      6  C6  LIG L   1      15.778  53.874  13.532  1.00  0.00     0.047 A 
#ATOM      7  C7  LIG L   1      17.030  55.437  10.136  1.00  0.00     0.045 C 
#ENDROOT
#BRANCH    1    8
#ATOM      8  N1  LIG L   1      14.849  55.695  12.232  1.00  0.00    -0.283 N 
#ATOM      9  H1  LIG L   1      13.972  55.445  11.860  1.00  0.00     0.155 HD

PyMolによるDockingモデルの表示(2022年7月6日更新)

ドッキングの結果のPyMolでの可視化について紹介します。

ターミナルを起動して、以下のコマンドでPyMolをセットアップします。

PyMolインストールは以下のサイトを参照しました。

pymolwiki.org

#PyMolのインストール: 5-10分くらいかかる
brew install brewsci/bio/pymol

#パス確認
which pymol
#/opt/homebrew/bin/pymol

#pymol実行
pymol

# PyMOL(TM) Molecular Graphics System, Version 2.5.0.
# Copyright (c) Schrodinger, LLC.
# All Rights Reserved.
# 
#    Created by Warren L. DeLano, Ph.D. 
# 
#    PyMOL is user-supported open-source software.  Although some versions
#    are freely available, PyMOL is not in the public domain.
# 
#    If PyMOL is helpful in your work or study, then please volunteer 
#    support for our ongoing efforts to create open and affordable scientific
#    software by purchasing a PyMOL Maintenance and/or Support subscription.
#
#    More information can be found at "http://www.pymol.org".
# 
#    Enter "help" for a list of commands.
#    Enter "help <command-name>" for information on a specific command.
#
# Hit ESC anytime to toggle between text and graphics.
#
# Detected OpenGL version 2.1. Shaders available.
# Detected GLSL version 1.20.
# OpenGL graphics engine:
#  GL_VENDOR:   Apple
#  GL_RENDERER: Apple M1
#  GL_VERSION:  2.1 Metal - 71.7.1
# Detected 8 CPU cores.  Enabled multithreaded rendering.

pymolコマンドを実行すると、下記の画面が立ち上がります。

1iep_receptor.pdbqt と 1iep_ligand_vina_out.pdbqt をPyMolで開いて重ねてみると、以下のようにグラフィカルにドッキングを観察できます。

https://raw.githubusercontent.com/kumeS/Blog/master/AutoDock_vina/02.gif

LigPlot+を使った結合モデルの可視化

LigPlot+は、リガンドとタンパク質の相互作用図を2次元で自動生成するオリジナルプログラムLIGPLOTの後継版です。LigPlot+を使うと、分子間コンタクトが簡単に見やすく可視化できます。

残念ながら、もうアカデミアライセンスが無いので、過去のスライドをのっけときます。

www.ebi.ac.uk

mov を gif に変換

参考にリンクを貼っておきます。

convertio.co

まとめ

(結構、詳細は省いているが)AutoDock Vinaのセットアップから、Dockingシミュレーションまでの実行方法を紹介しました。

AutoDOck Vinaは、M1 Macでも、意外にもサクッと実行できるという良いソフトウェアでした。

参考資料

skume.net

AutoDock Vina

autodock-vina.readthedocs.io

github.com

github.com