Diversas propriedades encontram-se tabeladas em livros texto.
Uma das referências clássicas é o livro de Prauznitz e colaborares (Poiling et al., 2001), usado aqui como base. O trabalho de extração destes dados faz parte de um trabalho de iniciação científica do aluno Cesar Lima Vendas. Você pode baixar o arquivo aqui o arquivo DadosPrauznitz.xlsx. O arquivo contém as planilhas:
Planilha | Conteúdo |
---|---|
PropriedadesGerais | massa molar, temperatura normal de fusão e ebulição, propriedades críticas |
VariacoesFase | variação entalpia e entropia normal de fusão e ebulição, além de entalpia e energia livre de Gibbs de formação do gás ideal a 298K e 1atm. Contém também dados de densidade do líquido em dada temperatura e momento dipolo |
Cps | coeficientes para o cálculo da capacidade calorífica do gás ideal ao longo da temperatura |
Uma amostra dos dados apresentados em cada planilha está ilustrada a seguir.
nº | Símbolo | Nome | CAS | MM (g/mol) | Tm (K) | Tb (K) | Tc (K) | Pc( bar) | Vc (cm³/mol) | Zc | omega |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Ar | argon | 7440-37-1 | 39.948 | 83.8 | 87.27 | 150.86 | 48.98 | 74.57 | 0.291 | -0.002 |
2 | Br2 | bromine | 7726-95-6 | 159.808 | 265.85 | 331.9 | 584.1 | 103.0 | 135.0 | 0.269 | 0.119 |
3 | BrD | deuterium bromide | 13536-59-9 | 81.918 | 185.69 | 206.65 | 362.0 | nan | nan | nan | nan |
4 | BrF3 | bromine trifluoride | 7787-71-5 | 136.899 | 281.92 | 398.89 | 600.0 | 49.9 | 114.7 | 0.115 | 0.413 |
5 | BrF5 | bromine pentafluoride | 7789-30-2 | 174.896 | 212.65 | 314.31 | 470.0 | nan | nan | nan | nan |
nº | Símbolo | Nome | CAS | dHform (kJ/mol/K) | dGform (kJ/mol/K) | dHb (kJ/mol/K) | dHm (kJ/mol/K) | Vliq (cm³/mol) | T liq K | Dipolo (Debye) |
---|---|---|---|---|---|---|---|---|---|---|
1 | Ar | argon | 7440-37-1 | 0.0 | 0.0 | 6.43 | nan | 29.1 | 90.0 | 0.0 |
2 | Br2 | bromine | 7726-95-6 | 30.91 | 3.13 | 58.8 | nan | 51.51 | 298.15 | 0.0 |
3 | BrD | deuterium_bromide | 13536-59-9 | -37.12 | -53.79 | nan | nan | nan | nan | nan |
4 | BrF3 | bromine_trifluoride | 7787-71-5 | -255.64 | -229.51 | 47.57 | nan | 48.84 | 298.15 | 1.1 |
5 | BrF5 | bromine_pentafluoride | 7789-30-2 | -428.86 | -351.65 | 30.6 | nan | 71.02 | 298.15 | 1.5 |
nº | Símbolo | Nome | CAS | Faixa T (K) | a0 | a1*10³ | a2*105 | a3*108 | a4*1011 | CpGI | CpLiq |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | Ar | argon | 7440-37-1 | — | 2.5 | 0.0 | 0.0 | 0.0 | 0.0 | 20.79 | nan |
2 | Br2 | bromine | 7726-95-6 | 50-1000 | 3.212 | 7.16 | -1.528 | 1.445 | -0.499 | 36.05 | 75.67 |
3 | BrD | deuterium bromide | 13536-59-9 | 50-1000 | 3.716 | -2.318 | 0.738 | -0.717 | 0.25 | 29.23 | nan |
4 | BrH | hydrogen bromide | 10035-10-6 | 50-1000 | 3.842 | -3.098 | 0.917 | -1.032 | 0.426 | 29.14 | nan |
5 | CBrClF2 | bromochlorodifluoromethane | 353-59-3 | 100-1000 | 1.968 | 36.592 | -5.489 | 4.036 | -1.17 | 74.65 | nan |
Uma das formas consiste no no uso do pacote pandas
. O caso mais comum consiste em extrair dados de algum composto de referência. Claramente, o uso do CAS
é a forma mais apropriada para referenciar o composto. Neste caso, as etapas são:
import pandas as pd
Dd = pd.read_excel(r'endereco_do_arquivo', sheet_name='NomedaPlanilha')
Dd.index[lista de boolenanos].tolist()[0]
. A lista de booleanos é construída buscando-se no dataframe o número desejado do CAS, ou seja Dd ['CAS'] = CAS_composto_desejado
Dd.iloc[posicões]
permite a filtragem de dados nas posições
das linhas indicadasDd.values
Vejamos um exemplo.
Na lista do Pandas, importe dados dos benzeno, cujo CAS é 71-43-2
.
Solução
O código a seguir ilustra como podem ser obtidas as propriedades do benzeno pesquisando pelo CAS.
import pandas as pd
import matplotlib.pyplot as plt
# CAS do composto procurado
CAS_num = '71-43-2'
# leitura do arquivo em Excel, da planilha Propriedades Gerais
Dd = pd.read_excel(r'DadosPrauznitz.xlsx', sheet_name='PropriedadesGerais')
# posição do composto na lista
pos = Dd.index[Dd['CAS']==CAS_num].tolist()[0]
# impressão dos resultados
print('Propriedades Gerais')
print(Dd.iloc[pos])
print('_________________________')
# leitura do arquivo em Excel, da planilha VariacoesFase
Dd2 = pd.read_excel(r'DadosPrauznitz.xlsx', sheet_name='VariacoesFase')
# posição do composto na lista
pos2 = Dd2.index[Dd2['CAS']==CAS_num].tolist()[0]
#
# impressão dos resultados
print('Variações de Fase')
print(Dd2.iloc[pos2])
print('_________________________')
# leitura do arquivo em Excel, da planilha Cps
Dd3 = pd.read_excel(r'DadosPrauznitz.xlsx', sheet_name='Cps')
# posição do composto na lista
pos3 = Dd3.index[Dd3['CAS']==CAS_num].tolist()[0]
#
# impressão dos resultados
print('Coeficientes para o cálculo de Cp')
print(Dd3.iloc[pos3])
print('_________________________')
Propriedades Gerais nº 187 Símbolo C6H6 Nome benzene CAS 71-43-2 MM (g/mol) 78.114 Tm (K) 278.68 Tb (K) 353.24 Tc (K) 562.05 Pc( bar) 48.95 Vc (cm³/mol) 256.0 Zc 0.268 omega 0.21 Name: 186, dtype: object _________________________ Variações de Fase nº 187 Símbolo C6H6 Nome benzene CAS 71-43-2 dHform (kJ/mol/K) 82.88 dGform (kJ/mol/K) 129.75 dHb (kJ/mol/K) 30.72 dHm (kJ/mol/K) 9.95 Vliq (cm³/mol) 89.41 T liq K 298.15 Dipolo (Debye) 0.0 Name: 178, dtype: object _________________________ Coeficientes para o cálculo de Cp nº 159 Símbolo C6H6 Nome benzene CAS 71-43-2 Faixa T (K) 50-1000 a1 3.551 a2*10^3 -6.184 a3*10^5 14.365 a4*10^8 -19.807 a5*10^11 8.234 CpGI 82.43 CpLiq 135.95 Name: 158, dtype: object _________________________
No livro de Prauznitz e colaboradores (Poiling et al., 2001), a seguinte expressão é apresentada para o cálculo da capacidade calorífica molar $ C_p $ em função da temperatura $ T $:
$$ \frac{Cp}{R} = a_1 + a_2 \cdot 10^{-3} \cdot T + a_3 \cdot 10^{-5} \cdot T^2 + a_4 \cdot 10^{-8} \cdot T^3 + a_5 \cdot 10^{-11} \cdot T^4 , \ \rm{ T \ em \ Kelvin} $$As constantes $ a_1, a_2, a_3, a_4, a_5 $ informadas na tabela do livro encontram-se multiplicadas respectivamente por $ 1, \ 10^3, \ 10^5, 10^8, \ 10^{11} $. Para evitar potências muito elevadas, podemos re-escrever a equação como:
$$ \frac{Cp}{R} = a_1 + a_2 \cdot 10 \cdot \left( \frac{T}{1000} \right) + a_3 \cdot 10 \left( \frac{T}{1000} \right)^2 + a_4 \cdot 10 \cdot \left( \frac{T}{1000} \right)^3 + a_5 \cdot 10 \cdot \left( \frac{T}{1000} \right)^4 , \ \rm{ T \ em \ Kelvin} $$Usando as constantes como diretamente informadas da tabela do livro. A seguinte função pode ser construída para o cálculo da capacidade calorífica molar.
def Cp_Puro_Poilingetal(T,coef):
R = 8.314
Tn = T/1000
Cp =coef[0] + coef[1] * Tn + 10 *(coef[2] * Tn**2 + coef[3] * Tn**3 + coef[4] * Tn**4)
return(Cp*R)
valores = Dd3.values
coef = valores[pos3][5:10]
T_lista = [250 + i*(1000-250)/10 for i in range(11)] # plotando 11 pontos entre 250 e 1000K
Cp_lista = []
for T in T_lista:
Cp_lista.append(Cp_Puro_Poilingetal(T,coef))
Para comparação, vamos importar dados do site NIST e plotar junto com os dados do Prauznitz.
# Plotando dados do Prazunitz
plt.plot(T_lista,Cp_lista,'b-',label='Prauznitz')
# importação de dados do site NIST, tomando a segunda tabela [1]
endereco = 'https://webbook.nist.gov/cgi/inchi?ID=C71432&Mask=1#Thermo-Gas'
DdNIST = pd.read_html(endereco)[1]
CpNIST = DdNIST['Cp,gas (J/mol*K)'].values
TNIST = DdNIST['Temperature (K)'].values
plt.plot(TNIST,CpNIST,'r--', label='NIST')
plt.legend(loc='best', frameon=False)
<matplotlib.legend.Legend at 0x23c9a5a9690>
Observa-se boa concordância dos dados (o NIST apresenta até 3000K, enquanto a equação do Prazunitz é válida até 1000K). Observa-se ainda um certo comportamento oscilatório da equação de Prauznitz, por se tratar de uma equação polinomial de altar ordem.
T_lista
[250.0, 325.0, 400.0, 475.0, 550.0, 625.0, 700.0, 775.0, 850.0, 925.0, 1000.0]