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 }
def session(): return get_session()
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
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