【化学でPython】mendeleev: 元素のデータを手軽に扱う
はじめに
この「化学でPython」シリーズでは、化学の分野で有用な Python ライブラリを紹介しています。
今回紹介するのは、mendeleev です。
mendeleev とは?
元素・イオン・同位体に関する膨大な化学・物理データを、Python から直感的に取得できるライブラリです。
周期表データの「辞書」として機能し、元素の基本物性から電子配置、イオン化エネルギーまで、あらゆるデータをコード一行で呼び出せます。
GitHubスター数は 260超(⭐️)と、化学系ライブラリの中では中堅ですが、その便利さから根強い人気があります。
インストール
pip で簡単にインストールできます。
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