【Pythonでみる科学ニュース】虫を欺く花の香り:進化的イタチごっことPythonで香りの解析




虫を欺く花の香り:進化的イタチごっことPythonで香りの解析

国立科学博物館などの研究グループが、虫をだましておびき寄せる花の香りを作り出す酵素が、植物の3つの属(Aristolochia(ウマノスズクサ属)、Ceropegia(セロペギア属)、Gonioantela(ゴニオアンテラ属))において、それぞれ独立に進化したことを明らかにしました。これは、異なる植物が、同じような目的(虫を誘引する)のために、独立して類似の香りの生成メカニズムを獲得したという、進化の収斂現象の興味深い例です。

今回の研究で注目すべきは、これらの植物が、虫が好む特定の化合物を、花の香りに含ませている点です。例えば、腐肉の匂いを模倣することでハエなどを誘引したり、動物の糞便の匂いを模倣することで甲虫を誘引したりします。虫たちは、エサや繁殖場所と勘違いして花に近づき、結果として花粉媒介に貢献することになります。

このニュースを聞いて、ふと、花の香りを化学的に解析し、その成分組成を比較するようなプログラムを作ってみたいと思いました。そこで、非常に単純な例ですが、花の香りの成分組成をリストとして受け取り、その類似度を計算するPythonスクリプトを作成してみました。

import math

def cosine_similarity(list1, list2):
    dot_product = sum(x * y for x, y in zip(list1, list2))
    magnitude1 = math.sqrt(sum(x ** 2 for x in list1))
    magnitude2 = math.sqrt(sum(x ** 2 for x in list2))
    if magnitude1 == 0 or magnitude2 == 0:
        return 0
    return dot_product / (magnitude1 * magnitude2)

def main():
    # 花Aの香り成分(例:腐肉臭を模倣)
    flower_a = [0.8, 0.2, 0.1, 0.05, 0.01]

    # 花Bの香り成分(例:動物の糞便臭を模倣)
    flower_b = [0.1, 0.7, 0.3, 0.02, 0.01]

    # 花Cの香り成分(例:花Aと似た腐肉臭)
    flower_c = [0.75, 0.25, 0.08, 0.06, 0.01]

    # コサイン類似度を計算
    similarity_ab = cosine_similarity(flower_a, flower_b)
    similarity_ac = cosine_similarity(flower_a, flower_c)

    print(f"花Aと花Bの類似度: {similarity_ab:.4f}")
    print(f"花Aと花Cの類似度: {similarity_ac:.4f}")

if __name__ == "__main__":
    main()

このスクリプトでは、コサイン類似度という指標を使って、2つの香りの成分組成の類似度を計算しています。コサイン類似度は、2つのベクトルのなす角のコサインを計算するもので、値が1に近いほど類似度が高く、0に近いほど類似度が低いことを意味します。

上記の例では、花Aと花Cは、どちらも腐肉臭を模倣しており、花Bは動物の糞便臭を模倣していると仮定しています。そのため、花Aと花Cの類似度が高く、花Aと花Bの類似度が低くなることが予想されます。

このスクリプトは、非常に単純な例ですが、実際の研究では、ガスクロマトグラフィー質量分析(GC-MS)などの高度な分析技術を用いて、花の香りの成分組成を詳細に解析し、そのデータを基に、より高度なアルゴリズムを用いて、香りの類似度や進化的な関係を推定することができます。

今回の研究成果は、植物と昆虫の共進化のメカニズムを理解する上で重要な一歩となります。また、花の香りの成分を解析し、それを再現する技術は、香水やアロマセラピーなどの分野にも応用できる可能性があります。今後の研究の進展が楽しみです。



科学ニュース一覧に戻る

レッスン概要

◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
◯高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!