Se você ainda não sabe como transmitir os dados diretamente ao cliente para o subconsciente ou, na pior das hipóteses, o texto da mensagem em folga, precisará de informações sobre como tornar o processo de interpretação de tabelas mais rápido e confortável.
Por exemplo, o Excel usa formatação condicional e minigráficos para isso . E neste artigo veremos como visualizar dados usando Python e a biblioteca pandas
: usaremos as propriedades DataFrame.style
e Options and settings
.
Configurando a renderização básica
Importamos bibliotecas: pandas
para trabalhar com dados e seaborn
para carregar um conjunto de dados clássico penguins
:
import pandas as pd
import seaborn as sns
Use para pd.set_option
configurar a saída de modo que:
- o número de linhas na tabela não era superior a 5;
- o texto na célula foi totalmente refletido, independentemente do comprimento (isso é conveniente se a célula tiver um título longo ou URL que você deseja ver);
- todos os números foram refletidos com duas casas decimais;
pd.set_option('max_rows', 5)
pd.set_option('display.max_colwidth', None)
pd.set_option('display.float_format', '{:.2f}'.format)
Vamos ler e ver o dataframe.
penguins = sns.load_dataset(‘penguins’)
penguins
Se você precisar retornar as configurações ao padrão, use pd.reset_option
. Por exemplo, assim, se quisermos atualizar todas as configurações de uma vez:
pd.reset_option('all')
Lista completa de propriedades set_option
.
Configurando a exibição de dados em tabelas
Formato de número, lacunas e maiúsculas e minúsculas
Dataframes pandas
têm uma propriedade DataFrame.style
que altera a exibição do conteúdo das células por condição para linhas ou colunas.
, , .
(penguins
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
)
, , ₽ :
(df
.style
.format({'price': '₽{:.2f}'})
)
— !
(, , )
, , , . subset
.
numeric_columns = ['bill_length_mm',
'bill_depth_mm',
'flipper_length_mm',
'body_mass_g']
, 5 .
(penguins
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
.highlight_null(null_color='lightgrey')
.highlight_max(color='yellowgreen', subset=numeric_columns)
.highlight_min(color='coral', subset=numeric_columns)
)
, 5 2 (!) .
: - Adelie.
Bar chart
, Adelie .
adelie_female = (penguins[(penguins['species'] == 'Adelie') &
(penguins['sex'] == 'FEMALE')]
.copy()
)
adelie_female['flipper_l_var'] = ((adelie_female['flipper_length_mm']-
adelie_female['flipper_length_mm'].mean()).round())
, 'flipper_l_var'
. :
set_properties
, 'flipper_l_var'
.
(adelie_female
.head(5)
.style
.format('{:.1f}', na_rep='-')
.format({'species': lambda x:x.lower(),
'island': lambda x:x.lower(),
'sex': lambda x: '-' if pd.isna(x) else x.lower()
})
.bar(subset=['flipper_l_var'],
align='mid',
color=['coral', 'yellowgreen'],
vmin=adelie_female['flipper_l_var'].min(),
vmax=adelie_female['flipper_l_var'].max()
)
.set_properties(**{'text-align': 'center'}, subset='flipper_l_var')
)
Heatmap
. , .
, .
species_stat=(penguins
.groupby('species')
.agg(penguins_count=('species','count'),
mean_bill_length=('bill_length_mm', 'mean'),
mean_bill_depth=('bill_depth_mm', 'mean'),
mean_flipper_length=('flipper_length_mm', 'mean'),
mean_body_mass=('body_mass_g', 'mean'),
)
)
, , - , .
. , ?! -, , .
(species_stat
.T
.style
.format("{:.1f}")
.background_gradient(cmap='Blues', axis=1)
)
— background_gradient
:
- (
cmap
):Blues
. ; - (
axis=1
).
A formatação de tabelas em pandas
com DataFrame.style
e Options and settings
torna a vida mais fácil, ou pelo menos melhora a legibilidade do código e relatórios. Mas o processamento de tipos de dados, lacunas e registros é melhor, é claro, para ser realizado deliberadamente antes do estágio de visualização.
Além disso, você pode lidar com:
- Exportar para o Excel ;
- Funções nativas para formatação condicional. Usamos funções internas
highlight_max
,highlight_min
ehighlight_null
, mas para mais condições sofisticados, você pode escrever seu próprio; - Essas bibliotecas gostam de
sparklines
ePrettyPandas
.