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

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

【生命科学とダイエット】低糖質ダイエットを生命科学的にヤルとしたら、どうすれば良いか??

はじめに、低糖質ダイエットとは?

ダイエット法の1つに、低糖質ダイエットあるいは糖質制限ダイエットという方法があります。

要するに、ご飯やパン、芋類などの炭水化物、甘い物などの糖質量を抑え*1その代わりに、肉、魚や豆腐など、高タンパク質、および葉野菜を主食として食べるダイエット法です。

この記事は、巷にある、低糖質・糖質制限ダイエットの話とはちょっと違い、 生命科学者っぽく、それを考察しようと思っています。

糖質を食べると、どうなる?

糖質を食べると、急激に血糖値(血液中の糖濃度)が上がります。 血糖が高い状態が続くのを身体が好まないため、それを抑えるために、膵臓からインスリンというホルモンが放出されます。そのホルモンが、体内への糖の貯蔵を促進し、血糖値を下げる働きをします。

ここでいう、糖は単糖つまりは、それ以上加水分解されない糖類で、ブドウ糖(グルコース)などを指します。

一方、分泌されたインスリンは、脂肪の合成を促進したり、脂肪分解を抑制したりと副次的な働きがあります。

逆に、インスリンが欠乏すると、中性脂肪分解が促進されるらしい*2

その結果として、糖質を食べると、体内の脂肪分解が妨げられる。その逆手を取って、低糖質あるいは糖質制限という話になっています。

本来、体重を減らしたいとなると、身体の脂肪量を減らすわけですよね。

摂取した糖質はどう利用されるか?

米やパン、芋類などに含まれる炭水化物の多くが、直接体内に取り込まれるわけではありません。 ここでいう、炭水化物は主にデンプン(多糖)で、その他にスクロースやラクトースなどのオリゴ糖も含まれます。

ヒトは多数の糖が繋がったデンプンなどを直接吸収できません。デンプンを小さい分子に切り分けないと体内に取り込めません。

図1. 炭水化物の消化酵素

例えば、デンプンは、唾液や膵液に含まれる糖質分解酵素であるアミラーゼ、小腸で分泌される消化酵素であるマルターゼによって、グルコース(単糖)まで分解されます。また、スクロース(ショ糖)やラクトース(乳糖)は腸液に含まれる消化酵素で分解されます。このように、糖類は小さく分解されて、腸管の毛細血管より体内に吸収される。

マルターゼは、α-グルコシダーゼと呼ばれる

マルターゼは小腸粘膜の上皮細胞膜に存在して、マルトースからグルコース2分子への消化とその吸収(膜消化)を担います。また、マルターゼは、酵素化学的な分類上、α-グルコシダーゼとも呼ばれます*3

図2. マルターゼの触媒反応

マルターゼは、マルトースが持つ、α-1,4-グルコシド結合を加水分解することから、α-グルコシダーゼの1つと位置付けられます。

これを踏まえると、マルターゼの働きを抑えると、マルトースの消化が進まず、その結果、体内にマルトース由来のグルコースが吸収されない(膜消化が起こらない)と考えられます。

もう少し詳しく言うと、食事で炭水化物を摂取しても、 マルターゼを含むα-グルコシダーゼがうまく働かないと、 そもそも食べたデンプン質が体の中で分解されない、利用されないことになります。

炭水化物が腸内で分解されず、また吸収もされずで、結果として血糖値が上がらない・上昇し難いと言えます*4

何がターゲットになりそうかという考えると、低糖質をミミックするには、 図1のアミラーゼやグルコシダーゼの働きを阻害してあげれば良いということになりますね。

薬剤化合物の探索とα-グルコシダーゼの阻害剤について

生命科学で薬剤探索とかをかじったことがある方々であれば、ここで、もう一つの課題が浮かぶはずです。

デンプンや糖質の分解酵素は、水溶性物質を基質として触媒反応を行なっています。これら分解酵素の働きを阻害するとなれば、同じく水溶性の性質をもつ化合物で、かつその酵素活性を阻害する働きのあるものということになります。

水溶性の化合物を、有機溶媒系で化学合成するのはかなり難しいです。

だいたい、水溶性化合物は、天然物化学の分野になります。 植物が造る化合物か、カビやバクテリアなどの微生物から抽出した化合物かという具合に、自然界から探索することになります。

未知のものを生物から探すというテーマは、夢がいっぱい、困難いっぱいという感じですね。 困難を乗り越え、それで新薬のタネが見つかれば、スターでしょうね。

前置きはこのくらいにして、実際、アミラーゼやグルコシダーゼの働きを阻害する、自然界の化合物があります。その化学物質の1つが、「アカルボース」というやつです。

アカルボースについて

図3. アカルボースの化学構造

アカルボースは、1970年代に放線菌から単離された、四糖からなる化合物です。

面白いことは、アカルボースは、α-アミラーゼやマルターゼといった、複数の酵素の活性を抑えることができることでしょう。

図4.アカルボースの作用機序

このアカルボースを食事前に摂取すれば、多糖類の分解に関わる酵素群の働きを抑えてくれます。 その間に、炭水化物を摂取しても、その分解の低下、体内への取り込み低下となり、 結果として、血糖の上昇が抑えられて、低糖質ダイエットと類似する効果が得られます。

じゃあ、放線菌をすり潰して、飲めば良いのかということになりますが。。。

アカルボースが多く含まれる、香辛料があるという研究報告があり、例えば、オールスパイス、シナモン、タイム、パセリとかに多く含まれています。

あと、世の中うまくできたもので、そもそも、薬として売られています。

編集後記

デンプン分解を抑えると思いもよらない、副作用があることも分かっています。

それは、まさかのオナラの回数が増加することです。

デンプン質の分解が小腸であまり進まず、そのまま大腸まで行ってしまうと、そこで余分な発酵が進んでしまい、腸内でガスが溜まってしまうということです。それがオナラとして放出されます。う^ん、この副作用は歓迎できませんね。

一方で、この腸内での発酵にはポジティブな効果があるともされています。

ガスの一部には、水素ガスが含まれていて、それが血中に溶けるようです。水素ガスは、身体のサビ付きを防ぐ、抗酸化効果があることが知られています。

以前に、Nature Medicine に報告された研究で、 「水素ガスを吸入すると、酸化ストレスの影響を緩衝して、虚血・再灌流時の脳損傷を顕著に抑える」みたいな報告がありました。

また、 scientific reportsでの研究報告では、「水素水を摂取した健康人で、炎症反応を抑制し、末梢血細胞のアポトーシスが抑制される」という報告もあるようです。

オナラが増えて、水素も増えるとは、生命科学は奥が深いですね。

*1:1日の糖質を60g以下に抑えるのが理想らしい

*2:http://www3.fctv.ne.jp/~judo/gakujyutu/jyouhou/energy/tani/innsurinn.html#:~:text=%E7%B3%96%E5%B0%BF%E7%97%85%E3%81%A7%E3%80%81%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%AA%E3%83%B3%E3%81%8C%E6%AC%A0%E4%B9%8F,%E4%BD%93%E9%87%8D%E3%81%AF%E6%B8%9B%E5%B0%91%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

*3:グルコシダーゼは、グルコ結合 + 加水分解(シダーゼ)に由来する

*4:実際は、食事中に単糖も含まれるので、血糖値が上がらないというのはないのかもしれませんが。。。

R言語で核酸配列データを扱ってみた件【その2: FASTAフォーマット・ファイルの読み込み】

はじめに

Rを用いた、DNA配列データの基本的な処理の方法を概説します。

今回は、seqinrあるいはBiostringsパッケージを用いて FASTA形式のファイルを読み込んで、DNA配列データとして扱ってみます。

配列データを元にして、相補配列を作成します。

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

まずは、Rを起動して、seqinrパッケージをセットアップします。

#インストール
install.packages("seqinr")

#ロード
library(seqinr)

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

次に、Biostringsパッケージをセットアップします。

#インストール
install.packages("BiocManager")
BiocManager::install("Biostrings")

#ロード
library(Biostrings)

seqinr::read.fastaを使って、HIV-1 全ゲノムのFASTAファイルの読み込み場合

Human immunodeficiency virus 1 の全ゲノム(NC_001802.1)の FASTAファイルを用意します。そのFASTAファイル(DNA配列)を読み込みます。

HIV-1 (ヒト免疫不全ウイルス-1) の全ゲノム RefSeq

FASTA形式とは、核酸配列やアミノ酸配列を記述するためのデータ形式のひとつです。

この形式では、「>」で始まる行に配列の名前を記載して、次の行以降に配列情報を示した形式です。 「>」で始まる行を複数設定することで、1つのFASTAファイル内に、複数の配列情報を列挙できます。

seqinr::read.fastaを使って、FASTAを「ベクトル」として読み込む

#「ベクトル」として読み込む
HIV <- seqinr::read.fasta("https://gist.githubusercontent.com/kumeS/aead5195f323560ab906aff290f51b3f/raw/dedf6599d4c57abc9924c8fa19a2a06c3295cb54/HIV1.fasta")

str(HIV)
#List of 1
# $ NC_001802.1: 'SeqFastadna' chr [1:9181] "g" "g" "t" "c" ...
#  ..- attr(*, "name")= chr "NC_001802.1"
#  ..- attr(*, "Annot")= chr ">NC_001802.1 Human immunodeficiency virus 1, complete genome"
  
#文字列に変換
HIVs <- seqinr::c2s(HIV$NC_001802.1)

str(HIVs)
# chr "ggtctctctggttagaccagatctgagcctgggagctctctggctaactagggaacccactgcttaagcctcaataaagcttgccttgagtgctt#caagtagtgtgtgccc"| __truncated__

seqinr::read.fastaを使って、FASTAを「文字列」として読み込む

#「文字列」として読み込む
HIV_str <- seqinr::read.fasta("https://gist.githubusercontent.com/kumeS/aead5195f323560ab906aff290f51b3f/raw/dedf6599d4c57abc9924c8fa19a2a06c3295cb54/HIV1.fasta", as.string=TRUE)

str(HIV_str)
#List of 1
# $ NC_001802.1: 'SeqFastadna' chr #"ggtctctctggttagaccagatctgagcctgggagctctctggctaactagggaacccactgcttaagcctcaataaagcttgccttgagtgcttcaagt#agtgtgtgccc"| __truncated__
#  ..- attr(*, "name")= chr "NC_001802.1"
#  ..- attr(*, "Annot")= chr ">NC_001802.1 Human immunodeficiency virus 1, complete genome"

#ベクトルに変換
HIVc <- seqinr::s2c(HIV_str$NC_001802.1)

str(HIVc)
#chr [1:9181] "g" "g" "t" "c" "t" "c" "t" "c" "t" "g" "g" ...

読み込んだ配列データから相補配列を求める配列データ処理の基本

#ベクトル部分の取り出し
HIVseq <- HIV$NC_001802.1

#相補配列の結果を返す
HIVcomp <- seqinr::comp(HIVseq, forceToLower = FALSE)

#headで表示
head(HIVseq, n=10)
#[1] "g" "g" "t" "c" "t" "c" "t" "c" "t" "g"

head(HIVcomp, n=10)
#[1] "c" "c" "a" "g" "a" "g" "a" "g" "a" "c"

Biostrings::readDNAStringSetを使って、HIV-1 全ゲノムのFASTAファイルの読み込み場合

Biostringsパッケージでは、FASTAファイル(DNA配列)の読み込みには、readDNAStringSet関数を用います。

#FASTAファイルの読み込み
HIV_bio <- Biostrings::readDNAStringSet(filepath="https://gist.githubusercontent.com/kumeS/aead5195f323560ab906aff290f51b3f/raw/dedf6599d4c57abc9924c8fa19a2a06c3295cb54/HIV1.fasta",
                 format="fasta")

HIV_bio
#DNAStringSet object of length 1:
#    width seq                            names               
#[1]  9181 GGTCTCTCTGGTTA...CCTTGAGTGCTTC NC_001802.1 Human...

#相補配列を求める
Biostrings::complement(HIV_bio)
#DNAStringSet object of length 1:
#    width seq                            names               
#[1]  9181 CCAGAGAGACCAAT...GGAACTCACGAAG NC_001802.1 Human...

DNAStringSetでの出力結果

HIV-1 (ヒト免疫不全ウイルス-1) の全ゲノム RefSeq

gist.github.com

【R/binancer】バイナンス仮想通貨の上昇傾向銘柄を検出して、Twitterにポストするボット機能を作成してみた件

はじめに

Bot(ボット)あるいはWebボットは、インターネット上で自動化されたタスク(一般に単純な繰り返しのタスク)を実行するアプリケーションのことを指します。

この記事では、仮想通貨・アルトコインの上昇傾向銘柄を探索・可視化して、 ツイッターにポストするボット機能を作成しようかと思っています。

初稿は、可視化のところがメインになってますが・・・

R環境のセットアップ

R言語から利用できる、class="marker-yellow">バイナンスAPI「binancer」とTwitter API「rtweet」のパッケージを使えるように準備します。

まず、関連のRパッケージをセットアップします。

##binancerのインストール
install.packages("binancer")
#rtweetのインストール
install.packages("rtweet")
#lubridateのインストール
install.packages("lubridate")
#ggplot2のインストール
install.packages("ggplot2")

#ロード
library(binancer)
library(rtweet)
library(lubridate)
library(ggplot2)

今回は、ggplot2を使って、作図をしています。

binancerを用いて、バイナンス仮想通貨のシンボル情報を取得する

バイナンスで有効な、コインペアのシンボル名を取得するには、 binance_symbols関数を使います。

ここでは、USDTのコインペアを取得します。USDTはドルと連動したステーブルコインです。

##Binanceから現在有効な全てのシンボル名を取得する
binance_symbols()
#   [1] "ETHBTC"       "LTCBTC"       "BNBBTC"       "NEOBTC"      
#   [5] "QTUMETH"      "EOSETH"       "SNTETH"       "BNTETH"      
#   [9] "GASBTC"       "BNBETH"       "BTCUSDT"      "ETHUSDT"     
#  [13] "WTCBTC"       "LRCBTC"       "LRCETH"       "QTUMBTC"   

#シンボルの種類(2022年10月5日現在)
length(binance_symbols())
#[1] 1446

##USDTのコインペア取得
binance_symbols()[grepl("USDT$", binance_symbols())]

#USDTのコインペアの種類(2022年10月11日現在)
length(binance_symbols()[grepl("USDT$", binance_symbols())])
#[1] 343

#通貨ペアの取得
BCOINS <- binance_symbols()[grepl("USDT$", binance_symbols())]
BCOINS <- BCOINS[!grepl("UPUSDT$", BCOINS)]
BCOINS <- BCOINS[!grepl("DOWNUSDT$", BCOINS)]

#表示
str(BCOINS)
#chr [1:327] "BTCUSDT" "ETHUSDT" "BNBUSDT" "NEOUSDT" "LTCUSDT" "QTUMUSDT" "ADAUSDT" ...

上昇傾向にある、バイナンス仮想通貨・アルトコインの探索と可視化を行うプログラム

このプログラムでは、バイナンス取引所で有効な、仮想通貨銘柄の過去2ヶ月間の日足チャートを参照して、その上昇傾向を解析・探索しています。 上昇傾向の有無は、lm関数の線形回帰に基づいて決定しています。

このプログラムは、CoinPick_v01関数として実装しています。 詳しくは、補足のCoinPick_v01のRコードにまとめています。

#作成した関数のロード from Gist
source("https://gist.githubusercontent.com/kumeS/1df358e5301847b0a8197f903f8c8b40/raw/c0a87a540e906051d36c3745acd6359f348d499d/CoinPick_v01.R")

仮想通貨・ビットコイン・アルトコインについて(1)

まずは、始めの50種類の仮想通貨を対象に、CoinPick_v01関数を実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_1.png"
Symbols <- BCOINS[1:50]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=5)

下記が出力結果です。

 

仮想通貨・アルトコインについて(2)

次の50種類の仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_2.png"
Symbols <- BCOINS[51:100]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=4.05)

下記が出力結果です。

 

仮想通貨・アルトコインについて(3)

次の50種類の仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_3.png"
Symbols <- BCOINS[101:150]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=4.7)

下記が出力結果です。

 

仮想通貨・アルトコインについて(4)

次の50種類の仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_4.png"
Symbols <- BCOINS[151:200]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=5.5)

下記が出力結果です。

 

仮想通貨・アルトコインについて(5)

次の50種類の仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_5.png"
Symbols <- BCOINS[201:250]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=5.7)

下記が出力結果です。

 

仮想通貨・アルトコインについて(6)

次の50種類の仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_6.png"
Symbols <- BCOINS[251:300]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=7.4)

下記が出力結果です。

 

仮想通貨・アルトコインについて(7)

最後に、残りの仮想通貨を対象に実行します。

#ファイル名の定義 & USDTペアシンボルの選択
Filename <- "CoinPlot_7.png"
Symbols <- BCOINS[300:length(BCOINS)]

#実行
CoinPick_v01(Filename=Filename, Symbols=Symbols, Hjust=2.2)

下記が出力結果です。

 

まとめ

いい感じに、バイナンスに上場する、仮想通貨全体を俯瞰できそうです。

改めて、全体を見ると新たな発見もありそうです。

補足

ツイッターにプロット結果を投稿する

実施例として、テキストを付けて、CoinPlot_1.pngの画像をTwitterに投稿します。

#諸設定
Filename <- "CoinPlot_1.png"
txt <- "バイナンス仮想通貨の上昇傾向銘柄をつぶやく。"
Alt <- "#仮想通貨"

#投稿
rtweet::post_tweet(status = txt,
                   media_alt_text = Alt,
                   media = Filename)

実際、この事例は単発投稿ですが、 forループとか、実行タイミングを設定すれば、 Bot化することができます。 具体的には、次回の更新の時に、、

CoinPick_v01のRコード

以下が関数のコードです。使用する際には、関連パッケージのロードをお忘れなく。

CoinPick_v01 <- function(Filename, Symbols, Hjust=5, Term=60){
#パラメータ設定
Dat <-  c()
slopeVal <- 0.001
slope <-  c()
slopeCol <-  c()

#実行
for(N in 1:length(Symbols)){
#価格取得
Dat0 <- binance_klines(Symbols[N], interval = '1d', 
                       start_time = lubridate::today()-lubridate::ddays(Term), 
                       end_time = lubridate::today())

#価格補正
Data <- Dat0[,c("close_time", "close", "symbol")]
Data$close <- Data$close/mean(Data$close)
Dat <- rbind(Dat, Data)

#傾きの計算
slopeCol[N] <- ifelse(coef(with(Data, lm(close ~ c(1:length(close)))))[2] < slopeVal, "#c8c8cb25", sample(colorspace::rainbow_hcl(200), 1))
names(slopeCol)[N] <- Symbols[N]
slope[N] <- round(coef(with(Data, lm(close ~ c(1:length(close)))))[2], 5)
names(slope)[N] <- Symbols[N]
}

#列名の修正
colnames(Dat) <- c("Time", "Relative_price", "Coin_symbol")

#可視化

p <- ggplot2::ggplot(Dat, aes(x = Time, y = Relative_price, color = Coin_symbol)) + 
  geom_line() + 
  scale_color_manual(values = slopeCol) + 
  labs(caption="© 2022 京橋のバイオインフォマティシャンの日常 by skume") +
  theme(plot.caption= element_text(family= "HiraKakuPro-W3", hjust=Hjust, vjust=5, size=10, color="black"))
ggsave(Filename, device = "png", width = 9, height = 5)
return(p)
}

参考文献

skume.net

colorspace.r-forge.r-project.org

heavywatal.github.io

qiita.com

cmdlinetips.com