热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python数据集_Python数据集探索与可视化实例指南

翻译:AI研习社(Suen)在今天的文章中,您将学习:如何合并和整理数据,如何探索和分析数据

翻译:AI研习社(Suen)

在今天的文章中,您将学习:如何合并和整理数据,

如何探索和分析数据,

如何创建漂亮的图形以可视化您的发现

本文适用于谁:经常处理数据的人

对Python和Pandas有基本了解的人

情景再现:

你的任务是提高销售团队的绩效。在我们假设的情况下,潜在客户有相当自发的需求。当这种情况发生时,您的销售团队会在系统中放置一个订单线索。然后,您的销售代表会设法安排一次会议,会议将在订单线索被注意到的时候举行。有时在前,有时在后。你的销售代表有一个把会议和餐费结合起来的开支预算。销售代表花费他们的成本,并将发票交给会计团队处理。在潜在客户决定是否接受您的报价后,销售代表会跟踪订单线索是否转化为销售。

对于分析,您可以访问以下三个数据源:订单线索(包含所有订单线索和转换信息)

销售团队(包括公司和负责的销售代表)

发票(提供发票和参与者的信息)

导入和安装:

需要安装标准库,此外,通过使用以下命令,在你的Notebook上安装seaborn.

!pip install seaborn

下载数据:

您可以按照上周的说明下载并合并数据,也可以从此处下载文件并将其加载到 Notebook中。

sales_team 数据表的前两行

order_leads数据表的前两行

invoices数据表的前两行

开始探索

总转化率发展:转化率随时间的变化

事情似乎在2017年初走下坡路。经过与首席销售官核实,发现大约在那个时候有一个竞争对手进入了这个市场。很高兴知道,但我们现在无能为力。

_ = order_leads.set_index(pd.DatetimeIndex(order_leads.Date)).groupby( pd.Grouper(freq='D')

)['Converted'].mean() ax = _.rolling(60).mean().plot(figsize=(20,7),title='Conversion Rate Over Time') vals = ax.get_yticks() ax.set_yticklabels(['{:,.0f}%'.format(x*100) for x in vals]) sns.despine()我们使用下划线_作为临时变量。对于以后不再使用的一次性变量,我通常会这样做。

我们在order_leads.Date上使用了pd.DateTimeIndex并将结果设置为索引,这使我们能够

使用pd.Grouped(freq ='D')按天对数据进行分组。 或者,您可以将频率更改为W,M,Q或Y(每周,每月,每季度或每年)

我们计算每天“转换”的平均值,这将给出当天订单的换算率。

我们使用.roll(60)和.mean()来获得60天的滚动平均值。

然后我们格式化yticklables,使它们显示一个百分号。

各销售代表的转化率:

各个销售代表之间似乎存在很大的差异。 让我们对此进行更多调查。

就所使用的功能而言,这里没有太多新内容。 但是请注意我们如何使用sns.distplot将数据绘制到轴上。

如果我们回顾sales_team数据,我们会记住并非所有的销售代表都拥有相同数量的客户,这肯定会产生影响! 让我们检查。按分配的帐户数分配的转换率

我们可以看到,转换率数字似乎与分配给销售代表的帐户数量成反比。 那些降低的转化率是有道理的。 毕竟,代表拥有的帐户越多,他可以花在每个人身上的时间就越少。

在这里,我们首先创建一个辅助函数,该函数将垂直线映射到每个子图中,并用数据的均值和标准差注释该线。然后我们设置一些seaborn绘图默认值,例如较大的font_scale和whitegrid设置为样式。

进餐影响:进餐数据

看来我们已经确定了用餐的日期和时间,让我们快速了解一下时间分布:

invoices['Date of Meal'] = pd.to_datetime(invoices['Date of Meal'])

invoices['Date of Meal'].dt.time.value_counts().sort_index()

out:

07:00:00 5536

08:00:00 5613

09:00:00 5473

12:00:00 5614

13:00:00 5412

14:00:00 5633

20:00:00 5528

21:00:00 5534

22:00:00 5647

总结:

invoices['Type of Meal'] = pd.cut(

invoices['Date of Meal'].dt.hour, bins=[0,10,15,24], labels=['breakfast','lunch','dinner'] )

注意,这里我们是如何使用pd.cut为数字数据分配类别的,这很有意义,因为毕竟,早餐是在8点还是9点开始,都没有关系。

另外,请注意我们如何使用.dt.hour,我们只能这样做,因为我们将

invoices['Date of Meal']转换为之前的日期时间。 .dt是所谓的访问器,其中有三个cat,str和dt。 如果您的数据类型正确,则可以使用这些访问器及其方法进行直接操作(计算有效且简洁)。不幸的是,invoices ['Participants']是一个字符串,我们必须首先将其转换为合法的JSON,以便我们 可以提取参与者的数量。

def replace(x):

return x.replace("\n ",",").replace("' '","','").replace("'",'"') invoices['Participants'] = invoices['Participants'].apply(lambda x: replace(x)) invoices['Number Participants'] = invoices['Participants'].apply(lambda x: len(json.loads(x)))

现在,我们合并数据。 为此,我们首先将公司ID上的所有发票左连接到order_leads。 但是,合并数据会导致所有餐点都加入所有订单。 也有古老的饭菜,以最近的订单。 为了缓解这种情况,我们计算了进餐和点餐之间的时间差,并且仅考虑订单周围五天的进餐。

仍然有一些订单已分配多餐。 当同时有两个订单和两餐时,可能会发生这种情况。 然后,两餐将分配给两个订单线索。 要删除这些重复项,我们仅使餐点最接近该订单。组合数据的部分

我创建了一个绘图栏功能,其中已经包含一些样式。 通过该功能进行绘图可以使目视检查更快。 我们将在一秒钟内使用它。

进餐类型的影响:

orders_with_meals['Type of Meal'].fillna('no meal',inplace=True)

_ = orders_with_meals.groupby('Type of Meal').agg({'Converted': np.mean}) plot_bars(_,x_col='Type of Meal',y_col='Converted')

哇! 用餐相关的订单与不用餐相关的订单之间的转换率差异非常大。 不过,看起来午餐的转化率略低于晚餐或早餐。

时间的影响(即进餐之前或之后进餐):

_ = orders_with_meals.groupby(['Days of meal before order']).agg(

{'Converted': np.mean} ) plot_bars(data=_,x_col='Days of meal before order',y_col='Converted')

“订购前用餐天数”为负数表示用餐是在订单线索输入之后进行的。我们可以看到,如果膳食在订单线索进入之前发生,则对转化率似乎有积极影响。 订单的先验知识似乎在这里给我们的销售代表带来了优势。

结合所有:

现在,我们将使用热图同时可视化数据的多个维度。 为此,首先创建一个辅助函数。

然后,我们使用一些最终数据进行争辩,以额外考虑餐食价格与订单价值的关系,并将交货时间分配到“订购前”,“订购前后”,“订购后”,而不是从负4到正4的天数,因为这在解释方面有些繁琐。

运行以下代码片段将产生多维热图。

draw_heatmap(

data=data, outer_row='Timing of Meal', outer_col='Type of Meal', inner_row='Meal Price / Order Value', inner_col='Number Participants', values='Converted' )热图可在一幅图中可视化四个维度

该热图当然很漂亮,尽管起初有点难读。 因此,让我们来看一下。 图表总结了4个不同维度的影响:用餐时间:订购后,订购前后,订购前(外排)

用餐类型:早餐,晚餐,午餐(外栏)

餐单价格:最低价格,最低价格,比例价格,最高价格,最高价格(内排)

参加人数:1,2,3,4,5(内栏)

当然,图表底部的颜色似乎更深/更高,这表明:在点餐之前用餐时,转化率会更高

当只有一名参与者时,晚餐转化率似乎更高

与订单价值相比,看起来更昂贵的餐食对转化率有积极影响

结果:销售代表的帐户不要超过9个(转化率会迅速下降)

确保每个订单线索都伴随有会议/进餐(因为这会使转换率翻倍当只有一位员工来访时,晚餐最有效

您的销售代表应支付的餐费约为订单金额的8%至10%

时间是关键,理想情况下,您的销售代表应尽早知道即将达成交易。

备注为热图:

要解决可能出现的格式错误,可以先卸载(然后在终端中必须这样做),然后运行以下命令,将matplotlib降级到3.1.0版:!pip install matplotlib==3.1.0

雷锋字幕组是一个由AI爱好者组成的翻译团队,汇聚五五多位志愿者的力量,分享最新的海外AI资讯,交流关于人工智能技术领域的行业转变与技术创新的见解。

团队成员有大数据专家,算法工程师,图像处理工程师,产品经理,产品运营,IT咨询人,在校师生;志愿者们来自IBM,AVL,Adobe,阿里,百度等知名企业,北大,清华,港大,中科院,南卡罗莱纳大学,早稻田大学等海内外高校研究所。

如果,你也是位热爱分享的AI爱好者。欢迎与雷锋字幕组一起,学习新知,分享成长。

字幕组招募添加微信:leiphonefansub;备注你的名字+知乎

未经授权禁止转载。



推荐阅读
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 通过将常用的外部命令集成到VSCode中,可以提高开发效率。本文介绍如何在VSCode中配置和使用自定义的外部命令,从而简化命令执行过程。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • MicrosoftDeploymentToolkit2010部署培训实验手册V1.0目录实验环境说明3实验环境虚拟机使用信息3注意:4实验手册正文说 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了数据库并发控制的基本概念、重要性和具体实现方法。并发控制是确保多个事务在同时操作数据库时保持数据一致性的关键机制。文章涵盖了锁机制、多版本并发控制(MVCC)、乐观并发控制和悲观并发控制等内容。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
author-avatar
curlt_357
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有