前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >增强分析可读性-Pandas教程

增强分析可读性-Pandas教程

作者头像
磐创AI
发布2021-04-21 10:37:16
9240
发布2021-04-21 10:37:16
举报

磐创AI分享

作者 | Pathairush Seeda 编译 | VK 来源 | Towards Data Science

你的日常生活数据分析

作为一名数据科学家/分析师,你的工作是制作一份包含许多商业决策见解的报告。报表可以由几个有用的工具(如microsoftexcel、SAP)生成,也可以使用编程语言(如SAS、R或Python)进行定制。结果可以通过内部电子邮件发送给其他人,也可以通过仪表板发布。

和其他人一样,我也是一名数据分析师,在日常生活中使用python制作报告或演示文稿。我通常的任务是在2-3小时内进行分析,并提交给管理团队。

为了得到我想要的结果,我必须启动我的Jupiter笔记本内核并快速编写代码来生成数字。在那之后,我可以把结果放在微软的PowerPoint上,并在一天结束前附上一些基本的脚注,然后把它们发给我的主管,让他们演示并做出重要的决定。

一个痛点是,由于时间限制,我必须消化信息,编写代码生成结果,并将其以一种漂亮的格式放入Microsoft PowerPoint中呈现。

不幸的是,我使用的编程语言可能不适合管理团队的阅读,例如,在数字中添加逗号或不使用科学符号来显示大数字。

如果你提交报告时没有注意到这些方面,管理团队可能会对你的报告有很多抱怨,有时,他们会把报告扔到垃圾堆里,一眼也不看。那会让你非常恼火,因为你需要时间和精力。

要解决这个问题,你可以将编程语言的结果放入microsoftexcel,然后根据需要手动更改格式。Excel是一个很好的工具。不好的地方是你必须手工做。如果我们能在编程过程中实现自动化呢。那太好了,不是吗?

As-is

下面让我们看一下我为这个示例生成的数据帧。这是公司需要的收入额。如你所见,这是pandas数据帧返回的默认结果。没有任何配置。

我经常从我的主管或首席执行官那里得到的一个评论是。

你能让它更易读,更容易比较吗?”

解决办法可能是把这个数字除以一百万,然后把单位放在表的上方。你要记住的一点是,在你的演讲中应该保持一致。如果有100张表需要复制呢?很难,对吧。

我发现你可以用编程的方式解决它。我花了很多时间从网上收集以下代码片段。非常感谢Stack overflow!

我认为和你们分享这些会让任何像我一样发现这些问题的人受益。你会减少花在这上面的时间,然后把注意力放在内容的有效性上。

如何改进?

可读格式

我收到的最常见的评论是,你能把数字四舍五入,并使用符号,如M表示百万或K表示千?这将使你的表看起来更好,并减少不必要的信息。很多时候,我们不需要这么精确。

下面是一个函数,用于将数据框中的数字转换为所需的格式。

代码语言:javascript
复制
def human_readable_format(value, pos=None):

    '''
    将数据帧中的数字转换为可读格式
    `pos` 参数与matplotlib ticker格式化程序一起使用。
    '''

    assign_unit = 0
    units = ['', 'K', 'M', 'B']
    while value >= 1_000:
        value /= 1_000
        assign_unit += 1

    return f"{value:.2f} {units[assign_unit]}"

这是你将得到的结果。读起来容易多了,对吧?

此函数的缺点是将数字转换为字符串,这意味着你将失去数据帧的排序能力。这个问题可以通过先排序所需的值,然后再应用它们来解决。

你可以将结果保存到excel或CSV文件,并将其放入PowerPoint中。我的方法通常是截图,然后直接放到演示文稿中。

这个代码片段节省了我大量的时间来重新生成多个表,因为当你从你的主管那里得到注释时,你必须刷新所有的表。假设演示文稿中有100个表。对于那些一个一个手工修改的人来说,这是一场噩梦。

同样,格式化后,我们也可以在matplotlib图中使用它。如果你使用pandas库进行数据分析,我认为matplotlib将是你绘制图形的首选。

你可以使用与表格类似的可读格式设置此图形的y轴

代码语言:javascript
复制
import matplotlib.ticker as mticker
import matplotlib.pyplot as plt

fig , ax = plt.subplots();
df['value_9'].plot(ax=ax);
ax.yaxis.set_major_formatter(
    mticker.FuncFormatter(human_readable_format)
)

看起来更有说服力。

突出显示单元格

有时你需要指出表中的重要数字、趋势或信息。你脑子里有一个逻辑规则,比如用收款金额的最大值突出显示月份。数字可以根据数据中的底层事务而变化。如果你想动态地突出显示它,就必须以编程的方式进行。

这是我用来使我的表格看起来更好的第二件事。它能帮助你传达信息,提高你讲故事的能力。从其余部分中强调什么是重要的。

代码语言:javascript
复制
def highlight_max_value(series):

    # 获取序列中每个值的真或假状态
    boolean_mask = series == series.max()

    # 当布尔掩码为真时,返回颜色为橙色
    res = [f"color : orange" if max_val else '' for max_val in boolean_mask]

    return res

df.style.apply(highlight_max_value)

有时,你会更容易发现数据内部的潜在趋势。如果不对大量数据进行适当的重新排列,你是不可能从这些数据中发现这些模式的

少就是多

最后一个不是向数据框/图中添加一些有趣的内容,而是将其删除。有时少就是多。数据帧或图形中的组件越少,消息传递就越好。读者或接受者只能吸收他们必须吸收的东西。

你可以在这方面改变很多事情,例如。

代码语言:javascript
复制
# 准备数据集

revenue = df[['value_9']].copy()
revenue['pct'] = revenue['value_9'] * 100 / revenue['value_9'].sum()
revenue = revenue.sort_values('pct', ascending=False).reset_index(drop=True)
revenue['cumsum_pct'] = revenue['pct'].cumsum()

import matplotlib.ticker as mticker
import matplotlib.pyplot as plt
import seaborn as sns

# 绘制条形图以显示收入金额

sns.set_context('talk')

# 放大图形的字体大小

fig , ax = plt.subplots(figsize=(9,6));
revenue['value_9'].plot.bar(ax=ax);
ax.yaxis.set_major_formatter(mticker.FuncFormatter(human_readable_format))
plt.title('Revenue generated');

# 以百分比绘制累计收入
# 展示前三位客户的影响

ax2 = plt.twinx(ax)
revenue['cumsum_pct'].plot(ax=ax2, color='orange');
ax2.yaxis.set_major_formatter(mticker.PercentFormatter())
sns.despine();

通过排列数据并向其中添加一些信息,可以使用更直观的图表进行决策。例如,我们知道只有前三位客户占我们收入的80%以上。因此,让他们保持良好的关系比其他任何事情都有必要。

摘要

在一个新的时代,数据分析员使用编程语言来生成报告或表示。它减少了很多手动任务的时间,但是还有更复杂的事情要处理,如上所述。这是一种权衡。

我想我今天和你们分享的技巧和窍门在某种程度上会有所帮助。

本文中的所有代码都可以在这里找到:https://colab.research.google.com/drive/1AZQ3kBGmpoherJxOP8yIwUZzyid-1i70?usp=sharing

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 可读格式
  • 突出显示单元格
  • 少就是多
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档