关于人工智能:使用Pandas-DataFrame输出报告

48次阅读

共计 3814 个字符,预计需要花费 10 分钟才能阅读完成。

作者 |Christopher Tao
编译 |VK
起源 |Towards Datas Science

作为一个应用 Python 作为次要编程语言的数据科学家或分析师,我置信你肯定常常应用 Pandas。在 Jupyter Notebook 上输入 pandas DataFrame 是十分频繁的。

然而,你有没有想过,咱们能够让 DataFrame 自身可视化?换句话说,对于一些简略的可视化目标,咱们不须要 Matplotlib 或其余可视化库。

Pandas DataFrame 输入能够像 Excel 电子表格一样可视化,并且反对简单款式,代码非常简单。

在这篇文章中,我将介绍 Pandas 库中的款式包,与它的数据处理办法相比,晓得它的人绝对较少。此外,还有一些乏味的库,它们反对 Pandas DataFrame 的更多在线可视化。在最初一节中,我还将介绍其中的一个 Sparklines。

对于 Pandas 库

家喻户晓,Pandas DataFrame 能够输入到 iPython/Jupyter Notebook 中,该 Notebook 主动以 HTML 格局出现 CSS 款式。这相对是一个惊人的性能,因为即便咱们只是简略地打印它,演示文稿也十分丑陋。

它应用“HTML+CSS”。Pandas 还容许咱们定制 CSS 款式,使它看起来更丑陋。这是通过“style”API 实现的。

https://pandas.pydata.org/doc…

咱们能够间接调用 df.style 获取 DataFrame 的 Styler 对象,而后增加所需的款式。当初,让咱们看看咱们能做些什么。

格式化输入

当然,咱们总是能够格式化数据自身,比 df.round(2)) 将所有数值四舍五入到 2 位小数。然而,应用 Pandas style 也有一些益处。例如,咱们实际上不更改值,而只更改示意模式,这样就不会失落精度。

让咱们先创立一个随机 DataFrame。

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.randn(10, 2)*100)

而后,让咱们以特定格局输入 DataFrame。

df.style.format("{:.2f}")

顺便说一句,如果你不太熟悉 Python 格式化语言,例如表达式 {:.2f},那么你能够在这里查看官网文档 ):https://docs.python.org/3/lib…

用背景和文本色彩突出显示单元格

我晓得,格式化还不够酷。有了 CSS,咱们能够轻松地做很多事件,比方扭转背景色彩和文本色彩。

例如,对于下面显示的同一个 DataFrame,咱们心愿别离突出显示负数和自然数。如果你对 CSS 有一些根本的理解,或者只是简略的 Google 一下,你就会晓得上面的属性来设置 HTML 表格单元格的背景色彩和文本色彩。

background-color: red; color: white

让咱们编写一个函数来给表格单元格着色。

def highlight_number(row):
    return [
        'background-color: red; color: white' if cell <= 0 
        else 'background-color: green; color: white'
        for cell in row
    ]

如果单元格的值为正数,咱们应用红色作为背景,否则如果是正值,则应用绿色。因为色彩可能有点暗,咱们还想将文本色彩改为红色。

而后,咱们能够将函数利用于 DataFrame。

df.style.apply(highlight_number)

超级酷!当初很显著,咱们失去了正数和负数,它们很好地区离开来。

链接款式函数

到目前为止,咱们每次只增加一种款式。事实上,咱们调用 df.style,返回 DataFrame 的 Styler 对象。Styler 对象反对链接款式函数。让咱们看看另一个更简单的例子。

比方说,咱们想在原始数据框中增加以下款式。

  1. 用红色突出显示正数,用绿色突出显示负数。
  2. 格式化数字。
  3. 应用 set_caption() 向表增加题目。
  4. 使表格间隙变大,这样看起来就不会那么挤了。
  5. 在单元格之间增加红色边框以改善显示成果。

是的,咱们能够通过应用链表达式一次性实现所有这些操作。

df.style \
  .apply(highlight_number) \
  .format('${0:,.2f}') \
  .set_caption('A Sample Table') \
  .set_properties(padding="20px", border='2px solid white')

感觉该表能够间接用于某些业务报表

内置突出显示性能

不懂 CSS,但还是想夸耀一下?是的,Pandas 格调还提供了一些内置的函数,这些函数很酷,但很容易应用。

突出显示函数

让咱们应用雷同的 DataFrame 进行演示。

# 为演示目标生成一个 nan 值
df.at[1, 1] = None

# 增加款式
df.style \
  .highlight_null('lightgray') \
  .highlight_max(color='lightgreen') \
  .highlight_min(color='pink')

看,用你喜爱的色彩来突出显示空值、最小值和最大值是很容易的。我倡议应用浅色,因为文本色彩总是彩色的。

渐变色背景

Pandas 格调还反对应用 cmap 为表格背景着色。当咱们想将数值数据可视化时,这是十分有用的。

df = pd.DataFrame(np.random.randn(10, 2))
df.style \
  .background_gradient(cmap='Blues')

所以,背景色是渐变色的取决于数值。请留神,“蓝调”是 Pandas 反对的 cmap 之一。如果你想晓得其余反对什么,那么上面的 Matplotlib 文档页是一个很好的参考。

https://matplotlib.org/3.1.0/…

折线条形图

这是另一个内置的超级酷的函数。它能够在每个单元格的背景中生成条形图,以批示它们的值。让咱们应用下面的 DataFrame。

df.style.bar()

当然,咱们对条形图的默认款式并不称心。让咱们改良一下演示。

df.style \
  .format('{:.2f}') \
  .bar(align='mid', color=['#FCC0CB', '#90EE90']) \
  .set_caption('A Sample Table with Bar Chart') \
  .set_properties(padding="15px", border='2px solid white', width='300px')

你能置信这依然是你相熟的“Pandas DataFrame” 吗?

让我简略地解释一下 bar() 办法中的参数。color 参数反对单个字符串或元组,当它是元组时,第一种色彩将用于为负值着色,第二种色彩用于为正值着色。因为咱们应用两种色彩,所以咱们须要将条形图设置为在单元格两头对齐。

Sparklines- 一个直线柱状图

我能够到此为止,但我想展现我发现的另一个十分乏味的库,叫做 Sparklines。

你能够应用 pip 装置库。

pip install sparklines

而后,让咱们导入这个库并创立另一个示例 DataFrame 以供演示。

from sparklines import sparklines

df = pd.DataFrame({'a': np.random.normal(0, 1, 100),
    'b': np.random.normal(1, 1, 100),
    'c': np.random.normal(0, 3, 100)
})

Sparklines 的性能很简略。它能够应用 Unicode 字符串生成条形图,例如▁、▂、▃。为了确保条形图的程序正确,并使其成为一个柱状图,咱们须要先应用 NumPy 来筹备值来生成直方图值。

def sparkline_dist(data):
    hist = np.histogram(data, bins=10)[0]
    dist_strings = ''.join(sparklines(hist))
    return dist_strings

对于每一列,咱们能够应用迷你图生成直方图。

[sparkline_dist(df[col]) for col in df.columns]

最初,咱们能够将字符串与其余统计数据放在一起,以生成更好的报告。

df_stats = df.agg(['mean', 'std']).transpose()
df_stats['histogram'] = sl_list
df_stats.style \
  .format('{:.2f}', subset=['mean', 'std']) \
  .set_caption('A Sample Table with Sparklines Distributions') \
  .set_properties(padding="15px", border='2px solid white')

总结

在本文中,我向你演示了 Pandas 款式包中的所有次要办法。咱们能够设置值的格局,给背景着色,用定制的 CSS 属性来改良演示。

原文链接:https://towardsdatascience.co…

欢送关注磐创 AI 博客站:
http://panchuang.net/

sklearn 机器学习中文官网文档:
http://sklearn123.com/

欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/

正文完
 0