🧰

【化学でPython】mendeleev: 元素のデータを手軽に扱う

に公開

はじめに

この「化学でPython」シリーズでは、化学の分野で有用な Python ライブラリを紹介しています。

今回紹介するのは、mendeleev です。

mendeleev とは?

元素・イオン・同位体に関する膨大な化学・物理データを、Python から直感的に取得できるライブラリです。

周期表データの「辞書」として機能し、元素の基本物性から電子配置、イオン化エネルギーまで、あらゆるデータをコード一行で呼び出せます。

GitHubスター数は 260超(⭐️)と、化学系ライブラリの中では中堅ですが、その便利さから根強い人気があります。

インストール

pip で簡単にインストールできます。

terminal
pip install mendeleev

基本的な使い方

まずは、特定の元素データを取得する基本的な使い方を見てみましょう。

element 関数に元素記号(または名称、原子番号)を渡すだけで、その元素のオブジェクトが生成されます。

from mendeleev import element

# シリコン(Si)の情報を取得
si = element('Si')

# 基本情報の表示
print(f"Name: {si.name}")
print(f"Atomic Number: {si.atomic_number}")
print(f"Atomic Weight: {si.atomic_weight}")
print(f"Block: {si.block}")
print(f"Electronic Configuration: {si.econf}")
print(f"Density: {si.density} g/cm3")
実行結果
Name: Silicon
Atomic Number: 14
Atomic Weight: 28.085
Block: p
Electronic Configuration: [Ne] 3s2 3p2
Density: 2.3296 g/cm3

元素記号だけでなく、element(14) のように原子番号で指定したり、element('Silicon') のように英語名で指定したりすることも可能です。

実践例: 周期律の可視化(電気陰性度のトレンド)

実践的な例として、「周期表全体のデータを取得し、電気陰性度の周期性を可視化する」 タスクをやってみます。

化学の教科書でよく見る「原子番号 vs 電気陰性度」のグラフを、実際のデータから描画してみましょう。

1. データの取得と整形

mendeleev.fetch モジュールの fetch_table を使うと、元素データを Pandas DataFrame として一括取得できます。これがとっても便利。

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from mendeleev.fetch import fetch_table

# 元素データを一括取得(インターネット接続が必要です)
df = fetch_table('elements')

# データの確認(最初の5行)
print(df[['symbol', 'atomic_number', 'en_pauling']].head())
実行結果
  symbol  atomic_number  en_pauling
0      H              1        2.20
1     He              2         NaN
2     Li              3        0.98
3     Be              4        1.57
4      B              5        2.04

2. グラフの描画

取得したデータを使って、原子番号に対する電気陰性度の変化をプロットします。

ここでは、第1周期から第6周期までの元素(原子番号1〜86)に絞って表示してみましょう。

# データのフィルタリング(原子番号1〜86、かつ電気陰性度があるもの)
target_df = df[
    (df['atomic_number'] <= 86) & 
    (df['en_pauling'].notna())
]

# グラフの描画設定
plt.figure(figsize=(12, 6))
sns.set_style("whitegrid")

# 散布図と折れ線グラフを描画
sns.lineplot(
    data=target_df, 
    x='atomic_number', 
    y='en_pauling', 
    marker='o',
    linestyle='-',
    color='royalblue'
)

# グラフの装飾
plt.title('Periodic Trend of Electronegativity (Pauling)', fontsize=15)
plt.xlabel('Atomic Number', fontsize=12)
plt.ylabel('Electronegativity', fontsize=12)

# 周期の区切りに縦線を入れる(希ガスの原子番号)
noble_gases = [2, 10, 18, 36, 54, 86]
for z in noble_gases:
    plt.axvline(x=z, color='gray', linestyle='--', alpha=0.5)

plt.show()

実行結果
実行結果

出力されたグラフを見ると、「周期の左側(アルカリ金属)で低く、右側(ハロゲン)に向かって高くなる」 というノコギリ状の周期パターンがはっきりと確認できます。

また、縦軸の値を見ると、フッ素(F, 原子番号9)が最も高い値(約4.0)を示していることも確認できます。

このように mendeleev を使えば、教科書の図を自分の手で再現したり、他の物性値(融点、原子半径など)との相関を調べたりすることが簡単にできます。

まとめ

今回は mendeleev を紹介しました。

  • Point 1: 元素、イオン、同位体の詳細なデータを Python から手軽に取得できる。
  • Point 2: fetch_table('elements') で Pandas DataFrame として一括取得できるのが便利。
  • Point 3: データの可視化や、マテリアルズインフォマティクスの基礎データ収集に最適。

化学データの「辞書」として、手元に置いておくと非常に便利なライブラリです。

ぜひ試してみてください。

参考リンク

Discussion