예제 #1
0
from mendeleev import Element, get_session

# I had to follow the instruction given in the comments in this program unfortunately.
# I would have gotten only the most necessary ions and the required data! -_-

session = get_session()

#Henter ut ione-radius-data fra mendeleev
ans = session.query(Element).filter(Element.ionic_radii != None).order_by(
    Element.atomic_number)

for a in ans:
    print(a.symbol, a.name, a.ionic_radii)

element_symbols_needed = ['Mg', 'Ca', 'Ba', 'Pb']
#skal fylle data i en dictionarie
#skriv din egen kode her
ionic_dict = {a.symbol: a.ionic_radii for a in ans}
#leser ut ioniske radiuser for allem elementer som har ladning = 2+ og koordinering = VI
#skriv din egen kode her
filtered_ionic_dict = {}
for key in ionic_dict.keys():
    for ionic_radius in ionic_dict[key]:
        if (ionic_radius.charge == 2 and ionic_radius.coordination == 'VI'):
            filtered_ionic_dict[key] = ionic_radius
#printer ut for de 4 elementene vi trenger data for - sjekket med boka at dette stemmer
#skriv din egen kode her
necessary_ionic_dict = {
    k: v
    for k, v in filtered_ionic_dict.items() if k in element_symbols_needed
}
예제 #2
0
def session():

    return get_session()
예제 #3
0
파일: utils.py 프로젝트: suthzx/mendeleev
def get_neutral_data():
    '''
    Get extensive set of data from multiple database tables as pandas.DataFrame
    '''

    elements = get_table('elements')
    series = get_table('series')
    groups = get_table('groups')

    elements = pd.merge(elements,
                        series,
                        left_on='series_id',
                        right_on='id',
                        how='left',
                        suffixes=('', '_series'))
    elements = pd.merge(elements,
                        groups,
                        left_on='group_id',
                        right_on='group_id',
                        how='left',
                        suffixes=('', '_group'))

    elements.rename(columns={'color': 'series_colors'}, inplace=True)

    en_scales = [
        'allred-rochow', 'cottrell-sutton', 'gordy', 'martynov-batsanov',
        'mulliken', 'nagle', 'sanderson'
    ]

    for scale in en_scales:
        elements['en_' + scale] = [
            element(row.symbol).electronegativity(scale=scale)
            for i, row in elements.iterrows()
        ]

    for attr in ['hardness', 'softness']:
        elements[attr] = [
            getattr(element(row.symbol), attr)()
            for i, row in elements.iterrows()
        ]

    elements['mass'] = [
        element(row.symbol).mass_str() for i, row in elements.iterrows()
    ]

    elements.loc[:, 'zeff_slater'] = elements.apply(
        lambda x: get_zeff(x['atomic_number'], method='slater'), axis=1)
    elements.loc[:, 'zeff_clementi'] = elements.apply(
        lambda x: get_zeff(x['atomic_number'], method='clementi'), axis=1)

    session = get_session()
    engine = get_engine()

    query = session.query(IonizationEnergy).\
        filter(IonizationEnergy.degree == 1).\
        filter(IonizationEnergy.atomic_number.in_(list(range(1, 119))))
    out = pd.read_sql_query(query.statement.compile(dialect=sqlite.dialect()),
                            engine)
    out = out[['atomic_number', 'energy']]
    out.columns = ['atomic_number', 'ionization_energy']
    elements = pd.merge(elements, out, on='atomic_number', how='left')

    return elements
예제 #4
0
def get_neutral_data():
    """
    Get extensive set of data from multiple database tables as pandas.DataFrame
    """

    elements = get_table("elements")
    series = get_table("series")
    groups = get_table("groups")

    elements = pd.merge(
        elements,
        series,
        left_on="series_id",
        right_on="id",
        how="left",
        suffixes=("", "_series"),
    )
    elements = pd.merge(
        elements,
        groups,
        left_on="group_id",
        right_on="group_id",
        how="left",
        suffixes=("", "_group"),
    )

    elements.rename(columns={"color": "series_colors"}, inplace=True)

    en_scales = [
        "allred-rochow",
        "cottrell-sutton",
        "gordy",
        "martynov-batsanov",
        "mulliken",
        "nagle",
        "sanderson",
    ]

    for scale in en_scales:
        elements["en_" + scale] = [
            element(row.symbol).electronegativity(scale=scale)
            for i, row in elements.iterrows()
        ]

    for attr in ["hardness", "softness"]:
        elements[attr] = [
            getattr(element(row.symbol), attr)()
            for i, row in elements.iterrows()
        ]

    elements["mass"] = [
        element(row.symbol).mass_str() for i, row in elements.iterrows()
    ]

    elements.loc[:, "zeff_slater"] = elements.apply(
        lambda x: get_zeff(x["atomic_number"], method="slater"), axis=1)
    elements.loc[:, "zeff_clementi"] = elements.apply(
        lambda x: get_zeff(x["atomic_number"], method="clementi"), axis=1)

    session = get_session()
    engine = get_engine()

    query = (session.query(IonizationEnergy).filter(
        IonizationEnergy.degree == 1).filter(
            IonizationEnergy.atomic_number.in_(list(range(1, 119)))))
    out = pd.read_sql_query(query.statement.compile(dialect=sqlite.dialect()),
                            engine)
    out = out[["atomic_number", "energy"]]
    out.columns = ["atomic_number", "ionization_energy"]
    elements = pd.merge(elements, out, on="atomic_number", how="left")

    return elements