As propriedades podem ser importadas diretamente do NIST Webbok. Uma das formas consiste no no uso do pacote pandas
. Vejamos um exemplo.
No site do NIST podemos fazer a pesquisa por espécie. Para tanto:
A página de pesquisa para o etanol por exemplo gera este resultado. Podemos pesquisar dados de interesse, sobretudo:
Vejamos um exemplo de como buscar dados de capacidade calorífica do etanol gasoso na página do NIST a seguir.
Uma busca rápida no site do NIST permite obter as propriedades do etanol gasoso neste link. A segunda e terceira tabela do site apresenta a tabela da capacidade calorífica do etanol gasoso em função da temperatura. Extraia a tabela de Cp & T e plote os dados.
Solução
O código a seguir 'puxa' os dados da tabela da internet. Na sequência, vamos preferir usar uma função própria extraposicao(A,posl,posc)
para extração dos dados de uma 'matriz' informadas suas posições de linhas e colunas.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# importação de dados, tomando a segunda tabela [1]
Dd = pd.read_html('https://webbook.nist.gov/cgi/cbook.cgi?ID=C64175&Units=SI&Mask=1#Thermo-Gas')[1]
# imprime a primeira parte da tabela
Dd.head()
Cp,gas (J/mol*K) | Temperature (K) | Reference | Comment | |
---|---|---|---|---|
0 | 37.12 | 50.00 | Thermodynamics Research Center, 1997 | p=1 bar. Recommended entropies and heat capaci... |
1 | 41.70 | 100.00 | Thermodynamics Research Center, 1997 | p=1 bar. Recommended entropies and heat capaci... |
2 | 46.94 | 150.00 | Thermodynamics Research Center, 1997 | p=1 bar. Recommended entropies and heat capaci... |
3 | 52.02 | 200.00 | Thermodynamics Research Center, 1997 | p=1 bar. Recommended entropies and heat capaci... |
4 | 61.46 | 273.15 | Thermodynamics Research Center, 1997 | p=1 bar. Recommended entropies and heat capaci... |
# remove ± com uma lista de um índice só, ex x = ['1 ± 0.1','2 ± 0.3',...]. Retorna os valores e as incertezas
def remove_maismenos(x):
n = len(x)
y = []
err_y = []
for i in range(n):
aux = x[i].split('±')
y.append(aux[0])
if len(aux)>1:
err_y.append(aux[1])
else:
err_y.append(None)
return(y,err_y)
# Extrai dados de temperatura e Cp
T = Dd['Temperature (K)'].values
Cp = Dd['Cp,gas (J/mol*K)'].values
# remove +- com a função remove_maismenos()
Cp,err_Cp = remove_maismenos(Cp)
# plota
plt.plot(T,Cp,'bo')
plt.xlabel('$ T (K) $',fontweight = 'heavy',fontsize=20)
plt.ylabel('$ C_p (J / mol / K) $',fontweight = 'heavy',fontsize=20)
Text(0, 0.5, '$ C_p (J / mol / K) $')
No site do NIST, também podem ser feitas varreduras de diversas proopriedades de espécies individuais, sobretudo em função de pressão e temperatura. Dentre estas, o site menciona:
Podem ser feitas pesquisas sobre propriedades de substâncias:
Obtenha as propriedades listadas no site NIST para a água a 298 K entre 0.1- 10 MPa.
Solução
Vamos abrir o site NIST. A seguir, vamos selecionar o composto e água e as propriedades isotérmicas, conforme ilustrado
Vamos Podemos escolher a temperatura e a faixa de pressão.
Ao solicitar a pesquisa, temos as propriedades tabeladas em função da variação de pressão. O site correspondente pode ser aberto aqui. Podemos extrair a tabela usando o pandas
conforme ilustrado a seguir
Vale ressaltar que o comando pd.read
extrai as tabelas de dado documento como uma lista. Pode-se seguir [numero_da_tabela]
para obter uma tabela específica. No exemplo, como se trata da primeira tabela, o número dela na lista é [0]
.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# importando a primeira tabela
endereco = 'https://webbook.nist.gov/cgi/fluid.cgi?T=298&PLow=0.1&PHigh=10&PInc=1&Digits=5&ID=C7732185&Action=Load&Type=IsoTherm&TUnit=K&PUnit=MPa&DUnit=mol%2Fl&HUnit=kJ%2Fmol&WUnit=m%2Fs&VisUnit=uPa*s&STUnit=N%2Fm&RefState=DEF'
Dd = pd.read_html(endereco)[0]
# imprime a tabela
Dd
Temperature (K) | Pressure (MPa) | Density (mol/l) | Volume (l/mol) | Internal Energy (kJ/mol) | Enthalpy (kJ/mol) | Entropy (J/mol*K) | Cv (J/mol*K) | Cp (J/mol*K) | Sound Spd. (m/s) | Joule-Thomson (K/MPa) | Viscosity (uPa*s) | Therm. Cond. (W/m*K) | Phase | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 298.0 | 0.1 | 55.347 | 0.018068 | 1.8770 | 1.8788 | 6.5773 | 74.550 | 75.329 | 1496.3 | -0.22157 | 893.07 | 0.60627 | liquid |
1 | 298.0 | 1.1 | 55.372 | 0.018060 | 1.8757 | 1.8955 | 6.5727 | 74.489 | 75.277 | 1498.0 | -0.22154 | 892.93 | 0.60684 | liquid |
2 | 298.0 | 2.1 | 55.397 | 0.018052 | 1.8743 | 1.9122 | 6.5680 | 74.429 | 75.225 | 1499.6 | -0.22151 | 892.79 | 0.60740 | liquid |
3 | 298.0 | 3.1 | 55.422 | 0.018044 | 1.8729 | 1.9289 | 6.5633 | 74.369 | 75.173 | 1501.3 | -0.22149 | 892.66 | 0.60797 | liquid |
4 | 298.0 | 4.1 | 55.446 | 0.018035 | 1.8716 | 1.9455 | 6.5587 | 74.310 | 75.122 | 1503.0 | -0.22146 | 892.53 | 0.60853 | liquid |
5 | 298.0 | 5.1 | 55.471 | 0.018027 | 1.8702 | 1.9621 | 6.5540 | 74.250 | 75.072 | 1504.7 | -0.22143 | 892.40 | 0.60909 | liquid |
6 | 298.0 | 6.1 | 55.496 | 0.018019 | 1.8688 | 1.9787 | 6.5492 | 74.191 | 75.022 | 1506.3 | -0.22140 | 892.27 | 0.60965 | liquid |
7 | 298.0 | 7.1 | 55.521 | 0.018011 | 1.8675 | 1.9953 | 6.5445 | 74.133 | 74.972 | 1508.0 | -0.22137 | 892.15 | 0.61020 | liquid |
8 | 298.0 | 8.1 | 55.545 | 0.018003 | 1.8661 | 2.0119 | 6.5397 | 74.074 | 74.922 | 1509.7 | -0.22134 | 892.03 | 0.61076 | liquid |
9 | 298.0 | 9.1 | 55.570 | 0.017995 | 1.8648 | 2.0285 | 6.5350 | 74.016 | 74.873 | 1511.4 | -0.22131 | 891.92 | 0.61131 | liquid |
10 | 298.0 | 10.1 | 55.595 | 0.017987 | 1.8634 | 2.0451 | 6.5302 | 73.959 | 74.824 | 1513.0 | -0.22127 | 891.81 | 0.61186 | liquid |
endereco = 'https://webbook.nist.gov/cgi/cbook.cgi?ID=C64175&Mask=4&Type=ANTOINE&Plot=on'
DdPvap = pd.read_html(endereco)[0]
# Imprime o dataframe
DdPvap
Temperature (K) | A | B | C | Reference | Comment | |
---|---|---|---|---|---|---|
0 | 364.8 - 513.91 | 4.92531 | 1432.526 | -61.819 | Ambrose, Sprake, et al., 1975 | Coefficents calculated by NIST from author's d... |
1 | 292.77 - 366.63 | 5.24677 | 1598.673 | -46.424 | Ambrose and Sprake, 1970 | Coefficents calculated by NIST from author's d... |
2 | 273. - 351.70 | 5.37229 | 1670.409 | -40.191 | Kretschmer and Wiebe, 1949 | Coefficents calculated by NIST from author's d... |
Da tabela acima, podemos combinar as equaçõespara obter em uma ampla faixa de temperatura.
def extrai_Antoine(DdPvap):
n = len(DdPvap)
eq = []
for pos in range(n):
Tfaixa = str(DdPvap.iloc[pos][0])
Tfaixa = ''.join(Tfaixa.split())
Tfaixa = Tfaixa.split('-')
Tfaixa = [float(Tfaixa[0]),float(Tfaixa[1])]
coef = DdPvap.iloc[pos][1:4]
eq.append([coef,Tfaixa])
return eq
def fc_Pvap(T,eq):
n = len(eq)
for i in range(n):
coef = eq[i][0]
Tfaixa = eq[i][1]
if T>=Tfaixa[0] and T<=Tfaixa[1]:
Pvap = 10**(coef[0]-(coef[1]/(T+coef[2])))
break
else:
print('Temperatura fora da faixa')
Pvap = None
return(Pvap)
eqnum = 0
T = 100
eq = extrai_Antoine(DdPvap)
Pvap = fc_Pvap(T,eq)
print(Pvap)
T_lista = np.linspace(273,513,100)
Pvap_lista = []
for T in T_lista:
Pvap_lista.append(fc_Pvap(T,eq))
plt.plot(T_lista,Pvap_lista,'b-')
plt.xlabel('$ T (K) $',fontweight = 'heavy',fontsize=20)
plt.ylabel('$ P (bar) $',fontweight = 'heavy',fontsize=20)
Temperatura fora da faixa None
Text(0, 0.5, '$ P (bar) $')
Fica claro que a potencialidade de uso do site NIST é muito rica, com possíbilidade de explorar diversas propriedades dos compostos.