谷歌高级数据分析-III-笔记-全-

谷歌高级数据分析 III 笔记(全)

001:将数据转化为洞察 🚀

在本课程中,我们将学习如何将原始数据转化为引人入胜的故事。我们将探索数据分析的核心过程,学习如何发现数据中的隐藏信息,并有效地将其传达给不同的受众。


想象你是一位考古学家,一位通过挖掘文物来研究古代文明、保存历史故事的人。

你非常兴奋,因为你是第一个探索一个新遗址的人。

初升的太阳在你面前古河床的橙黄色岩石上投下温暖的光芒。

你呼吸着清新干净的空气,忘记了清晨的疲惫和昨天15个小时的飞行。

你停下来,想起了昨晚领队的话。

这个地方从未被研究过,但保存条件堪称完美。

你一定能发现些什么,而我们发现的任何东西,都将在明年夏天的国际考古研究所大会上展示。

那块岩石下可能隐藏着什么?哪些古老的谜团将被揭开?哪些故事将被发掘?可能性似乎是无穷的。

大家好,我叫Rob。

我是一名消费品营销负责人,在谷歌负责营销项目。每次我有机会分析数据时,都感觉自己像是一位即将有惊人发现的考古学家。

有些人看到数据表或一堆杂乱无章的数字会想:“呃,这太无聊了。”

但我们数据专业人士更清楚,不是吗?我们知道,隐藏在数字、列和行中的,是信息的金块、前所未见的洞察或引人注目的趋势。

这些有趣的隐藏知识,就是等待被分享的故事。而故事,是传达想法最有影响力的方式之一。

对我们数据专业人士来说,一个奇妙的事实是:所有数据都有故事要讲。

所以,无论你是一位有抱负的数据专业人士,还是想学习如何讲好故事,或者两者皆是,都欢迎来到这门课程。


到目前为止,你应该对这个项目的范围和Python编码基础有了相当好的了解。

现在,是时候深入挖掘未经探索的数据,并尝试理解它了。你准备好探索了吗?

我们将从如何使用一个名为“探索性数据分析”的六步流程来寻找和塑造故事开始。

然后,我们将讨论“PACE”工作流如何应用于用数据讲故事。

你还记得数据专业工作流缩写“PACE”吗?即计划分析构造执行。我们将讨论PACE如何应用于探索数据,并了解可视化在理解数据中的必要性。

最后,我将向你展示如何在Python中对数据集执行探索性数据分析,扩展你之前学到的Python技能。

在本课程的后半部分,你将学习数据源、数据类型、数据结构和数据清理。

我们将使用Python笔记本,讨论如何处理缺失值、异常值和分类数据。

我们将探讨探索和清理原始数据的伦理问题,以及如何向不同的受众传达你的问题和发现。

在本课程的后半部分,你将了解更多关于可视化分析平台Tableau的知识。我们将讨论如何通过视觉和演示来增强你的数据故事。


在此过程中,我将分享针对不同受众塑造数据故事的技巧,例如如何构建满足受众需求的数据可视化。

谷歌的数据专业人士确定了在数据领域工作的基本技能。在整个课程中,将有机会练习用数据寻找和讲述故事。

简而言之,故事可以改变生活。而数据驱动的故事尤其引人注目,因为它们基于数字。

它们也可以向他人传达原则、概念、警示和新想法。

给你举一个我生活中的例子:我实际上是从一家医疗保健咨询公司的数据分析师开始我的职业生涯的。

我的职责是为患有严重疾病的患者(从哮喘到糖尿病再到癌症)识别并推荐最有效的治疗方案。

为了制定我的建议,我分析了数百万患者的医疗记录,并比较和对比了每种治疗的结果、副作用和医疗成本。

通过我的发现,我们能够推荐不仅帮助这些患者康复,还能帮助他们提高生活质量并减少医疗费用的治疗方案。

故事就在那里,等待着被发现。

所以,拿出你的铲子和放大镜,让我们开始探索吧。


总结

在本节课中,我们一起学习了数据分析的核心目标:将数据转化为有洞察力的故事。我们了解了探索性数据分析的重要性,并预览了PACE工作流、数据清理、可视化以及伦理考量等关键主题。记住,数据背后总是藏着等待被讲述的故事,而你的任务就是发现并讲述它们。

002:从障碍到成就 🚀

在本节课中,我们将跟随谷歌产品营销经理罗布(Rob)的分享,了解他如何克服个人障碍,从排斥数学与科学到最终成功转型为数据分析师,并进入统计学硕士项目的历程。他的故事强调了终身学习坚持自我的重要性。


我叫罗布,是谷歌的一名产品营销经理。我在90年代末和21世纪初于波士顿长大。作为一名亚裔美国人,我常常因为那些标准的亚裔刻板印象而受到嘲笑,其中包括被认为擅长或热爱数学和科学。

当我进入高中时,我发现自己开始排斥数学和科学,并极力避免上这些课程。我转而更多地投入到人文学科甚至体育活动中,仅仅是因为我非常渴望融入群体。


幸运的是,我受雇于一家医疗经济咨询公司,担任文献综述专员。入职后我发现,公司还有一个专门的部门,致力于分析数以百万计的医疗记录数据,以理解和帮助测试药物或处方药对患有严重疾病患者的疗效与安全性。

以下是他们工作的核心方式:

  • 分析规模:他们通过分析超过3000万用户的数据来完成这项工作。

当我了解到这一点时,我非常兴奋。我说,哇,这真是一个很酷的、值得进入的领域。于是我和我的经理进行了一次交谈。


我的经理非常支持我承担一些额外的项目,当然,前提是我要完成日常工作。我记得我会在下班后、业余时间学习。我有一本教科书,专门研读标准的数据分析和统计学知识。

此外,我还学习了名为 SAS编程 的内容,这是一种统计分析软件,我们公司的分析师都在使用。我全身心地投入到了学习中。

最终,我对此变得非常熟练,并成功转型为一名数据分析师。在担任数据分析师期间,我对理解更多的统计学和数学知识充满了热情。


为了深入学习,我实际上在当地一所社区学院参加了夜校课程,因为我的目标是更深入地研究统计学。最终,我幸运地申请了许多统计学硕士项目。

凭借我的背景和经验,我有幸被其中一个项目录取。我真希望当初没有太在意那些嘲笑我的人,而是坚持做自己想做的事。在某种程度上,我确实为此感到遗憾,因为我当时没有打下坚实的数理基础。

但让我感到自豪的是,作为一个成年人,我能够成功转型进入这个领域。这在我心中凸显了一个道理:你可以在生命中的任何时候,去做任何你想做的事,并达成任何目标。


退一步看,我们最终都是走在不同道路上的不同个体。慢慢来,每个人的学习方式都千差万别。

无论是通过我们提供的这些优秀的在线课程,还是通过大学项目,或是与朋友交流并合作学习,都可以。重要的是,找到最适合你的学习方式。

关键点是,慢慢来,做你需要做的事情去学习。你不应该给自己施加压力,或将自己与任何人比较。做你自己,这完全没问题。


本节课中,我们一起学习了罗布的个人经历。他的故事告诉我们,外界的刻板印象不应成为自我设限的理由,通过主动学习(如学习 SAS编程 和参加夜校)和把握机会,可以在任何人生阶段成功转型。最重要的是,按照自己的节奏学习,坚持做自己。

003:探索性数据分析基础 🎯

在本模块中,我们将学习探索性数据分析的六大实践,了解数据分析师的工作流程,并认识数据可视化在探索过程中的核心作用。这些基础知识将帮助我们学会如何用数据发现并讲述故事。


欢迎来到模块1 👋

再次问好,欢迎来到本课程的第一个模块。

在接下来的几节课中,我们将探索数据分析的基础,并了解探索性数据分析的六大实践如何帮助我们利用数据发现和讲述故事。


探索性数据分析的六大实践 📊

我们将首先讨论探索性数据分析的六大实践。

你将了解它们是什么以及它们为何重要。

以下是六大实践的简要介绍:

  1. 提出问题:明确分析的目标和方向。
  2. 数据准备与清洗:确保数据质量,为分析做好准备。
  3. 数据可视化:通过图形初步探索数据模式和关系。
  4. 数据建模:应用统计或机器学习模型深入理解数据。
  5. 得出结论:基于分析结果形成初步见解。
  6. 传达结果:将发现有效地讲述给他人。

数据分析师的工作流程 🔄

上一节我们介绍了六大实践,本节中我们来看看数据分析师的工作流程如何融入探索性数据分析的过程。

我们将学习数据分析师的工作流程——计划、分析、构建和执行——如何适应探索性数据分析的进程。

这个流程可以概括为以下循环:
计划 (Plan) -> 分析 (Analyze) -> 构建 (Construct) -> 执行 (Execute)


数据可视化的重要性 📈

最后,你将了解数据可视化在数据探索过程中的重要性。

我们将思考什么是数据可视化,以及数据专业人士如何利用它们来了解并分享数据。

数据可视化是将数据转化为图形(如柱状图、折线图、散点图)的过程,它能帮助人们直观地发现趋势、异常值和模式。


总结 ✨

本节课中,我们一起学习了探索性数据分析的六大实践及其重要性,了解了数据分析师“计划-分析-构建-执行”的工作流程,并认识到数据可视化是探索和沟通数据的关键工具。这些内容为后续学习如何用数据讲述故事奠定了坚实的基础。

接下来的课程将为如何使用数据讲述故事打下基础。希望你和我一样对开始学习感到兴奋。

004:运用六大探索性数据分析实践寻找故事 📊

在本节课中,我们将学习探索性数据分析(EDA)的核心概念与六大实践。通过一个清理古董仓库的生动比喻,我们将理解数据专业人员如何像探险家一样,从原始数据中发掘故事、趋势与洞察。

想象你受雇于一家公司,任务是清理一个堆满古董的古老单间仓库。你的经理表示,这栋建筑已闲置数十年,无人知晓其历史用途。你的职责是清理仓库,并为发现的物品创建详细清单,以便拍卖。经理推测里面会有有趣的古董。由于许多物品被毯子覆盖,你无法预知房间的内容。你从房间一侧开始清理,并记录发现的物品。在探索过程中,你发现了一堆不同尺寸和形状的金属齿轮、链条和连接件。你数了数,共有47件金属零件。

你还发现了五块大金属板、12辆大型三轮车和七根金属杆等其他物品。记录这些新物品时,你开始思考它们之间是否存在关联。

这个简单的例子展示了数据专业人员如何探索数据,并在此过程中了解更多故事和趋势。当你揭开并清理眼前的事物时,数据中的独立部分将开始讲述一个更宏大的故事。当然,处理数据需要比仓库例子更多一些的技术和实践,但核心理念相同:你需要通过重新排序、分类和重塑来理解原始数据内容。在这个过程中,你会遇到许多不同的术语。数据整理数据修复数据混合数据清洗都是最常见的。我们将所有这些实践合并为一个大多数数据专业人员都熟悉的术语:探索性数据分析,简称 EDA

探索性数据分析(EDA) 是调查、组织和分析数据集并总结其主要特征的过程,通常采用数据整理和可视化方法。EDA的六大主要实践是:发现结构化清洗连接验证呈现。这些实践不一定按此顺序进行。根据数据团队的需求和他们研究的数据类型,他们可能以不同的方式执行EDA。你还会发现,EDA过程通常是迭代的,这意味着你将多次经历这六大实践(没有特定顺序),以准备数据供进一步使用。

接下来,让我们逐一深入了解这六大实践,以便你更好地理解其含义。

1. 发现 🔍

发现通常是EDA的第一步实践。在此实践中,数据专业人员熟悉数据,以便开始构思如何使用它。他们会审查数据并提出相关问题。在这个阶段,数据专业人员可能会问:列标题是什么?它们代表什么含义?总共有多少个数据点?在本视频开头的旧仓库例子中,发现实践可能涉及在房间里走动并揭开覆盖物,以了解物品的数量和类型。

2. 结构化 🗂️

在进行一些初步发现之后,下一步是开始组织数据,这个EDA实践被称为结构化。

结构化是获取原始数据并将其组织或转换,以便更容易进行可视化、解释或建模的过程。结构化指的是根据数据集中已有的数据,对数据列进行分类和组织。例如,对于日历数据,结构化可能意味着将数据按月份或季度而非年份进行分类。回到旧仓库的比喻,结构化可能是将物品分为金属和非金属类别,并统计每种类型的总数。

在进入下一个EDA实践之前,让我们花点时间谈谈偏见。

在数据结构的背景下,偏见是指将数据组织成不能准确代表整个数据集的组别、类别或变量。大多数专家认为,完全消除数据结构中的偏见几乎是不可能的,因为每个人的想法、培训和经历都不同。然而,作为专业人员,在构建数据时尽量避免偏见非常重要。例如,假设你想知道英国有多少比例的人口拥有大学学位,但你的模型数据只包含伦敦居民。那么,在添加英国其他地区的数据之前,这些数据将被视为有偏见的。在我们的仓库例子中,避免偏见可能涉及保持分类的灵活性,随着发现越来越多的物品,可能需要创建新的类别。

3. 清洗 🧹

下一个EDA实践是数据清洗。

清洗是消除可能扭曲数据或降低其可用性的错误的过程。缺失值、拼写错误、重复条目或极端异常值都是在数据清洗过程中需要解决的常见问题。在仓库例子中,你可能会决定将损坏或无法使用的物品放在一个单独的箱子里,与其他物品分开。

4. 连接 🔗

我们将转向另一个名为“连接”的实践。

连接是通过添加来自其他数据集的值来增强或调整数据的过程。换句话说,你可以通过从其他数据源添加更多信息来为数据增加价值或上下文。例如,你可能会在发现、结构化或清洗过程中发现,现有数据不足以完成特定项目。在这种情况下,你应该通过添加更多数据来丰富它。举个例子,回想我之前谈论英国和大学学位以帮助理解偏见。在那个例子中,连接就是添加英国其他地区的数据,而不仅仅是伦敦居民的数据。回到我们的仓库比喻,想象一下博物馆经理对物品进行分类,并告诉你每件物品的制作日期。博物馆经理提供的信息就像一个不同的数据集,你可以在清点物品时将其与你自己的数据连接起来。

5. 验证 ✅

EDA实践列表中的下一个是验证。

验证指的是核实数据是否一致且高质量的过程。验证数据是检查拼写错误、不一致的数字或日期格式,并确保数据清洗过程没有引入更多错误的过程。数据专业人员通常使用数字工具,如 RJavaScriptPython 来检查数据集及其数据类型中的不一致和错误。对于仓库比喻,验证可能就像利用博物馆经理的知识来了解物品的年代。

6. 呈现 📈

最后一个EDA实践是呈现。

呈现涉及将你清洗后的数据或数据可视化提供给他人进行分析或进一步建模。换句话说,呈现实践是分享你通过EDA学到的东西并寻求反馈,无论是通过干净的数据集还是数据可视化的形式。我们将经常使用“数据可视化”这个术语。需要明确的是,数据可视化是作为信息表示而创建的图表、形状、图形或仪表板。

你可能认为呈现总是在EDA过程的最后进行,然而,呈现可以出现在EDA的任何阶段。数据可视化并非呈现实践所独有,它们应该在整个EDA过程中使用。它们帮助你理解数据,并向他人指出趋势和洞察。在仓库比喻中,呈现可能意味着向你的经理展示仓库的清理进度以及发现了多少不同的物品。在工作场所,作为一名数据专业人员,呈现可能看起来像是准备视觉效果和幻灯片演示文稿与团队分享。

当你开始计划演示时,你应该考虑有视觉或听觉障碍的人,提供对数据的详细描述。你可以使用诸如替代文本、描述性文本或带字幕的数据记录等方式,以便你的听众能够自己探索数据。

我们将在后面详细讨论每个EDA实践,但关于这个过程,最重要的一点是确保你的EDA工作不会曲解数据本身。你发现的故事应该来自数据,而不是来自你的想法或数据中的偏见。你有责任以合乎道德且易于访问的方式传达你的数据。考虑仓库比喻,为了确保你以合乎道德的方式传达数据,你应该提供材料的准确数量,而不是高估古董的数量。在工作场所,合乎道德地传达数据意味着在年同比的背景下呈现销售数字,以便数据可视化中的上升和下降不会显得夸张。

完成仓库项目后,你意识到你发现了一个故事:你找到了一对布满灰尘的招牌,上面写着出售食物。突然间,你发现的物品开始作为一个整体变得有意义。这些古董似乎是一群流动食品摊贩使用的物资收藏。现在,发现一个故事的感觉如何?当然,在分享之前,你应该使用历史记录来确认这些信息。


在本节课中,我们一起学习了探索性数据分析(EDA)的六大核心实践:发现结构化清洗连接验证呈现。我们通过清理古董仓库的比喻,理解了如何像处理未知物品一样,系统性地探索、整理和理解原始数据,并最终从中发掘出有价值的故事和洞察。记住,EDA是一个迭代且灵活的过程,其核心是以合乎道德且准确的方式让数据自己说话。

005:数据科学与叙事艺术 📊🎨

在本节课中,我们将跟随谷歌产品分析师本杰,学习如何将原始数据转化为深刻的洞察,并通过有效的叙事艺术将发现传达给他人。我们将重点探讨探索性数据分析的重要性、如何避免分析偏见,以及如何构建有影响力的数据故事。

探索性数据分析:理解你的数据 🔍

上一节我们提到了数据分析的目标,本节中我们来看看数据分析的第一步:探索性数据分析。这是分析师工作的关键部分,尤其是在面对新数据或新问题时。

首先,你必须深入审视现有数据,理解眼前的一切。这意味着你需要:

  • 理解数据来源:数据来自哪里?
  • 理解创建目的:数据为何被创建?
  • 识别数据内容与缺失:数据中包含什么,不包含什么?
  • 注意重要注意事项:数据存在哪些重要的前提或限制条件?

叙事艺术:让洞察产生影响力 📖

仅仅拥有洞察是不够的,叙事是将你的洞察传递给他人并真正促成改变的方式。通常,我们会制作长达数十页的报告,但真正能改变人们想法的,是你能够就正在发生的事情讲述一个简短而清晰的故事。

用数据讲故事的一个绝佳方法是思考用户、设备或使用场景的类别。例如,当你告诉人们“许多印度用户正在低端手机上使用Chrome”时,这便讲述了一个关于用户群体是谁、他们在做什么的故事。了解他们是谁以及具体情况,能让听众以不同的方式思考受众是谁以及应该构建什么样的产品。

保持客观:检查与分析偏见 ⚖️

为了确保分析忠于数据,我努力做的一件事是尝试检查自己的偏见,确保我呈现的是实际看到的情况。我尝试确保报告不带有偏见的一种方法是,在进行新的分析时尽可能不带先入为主的观念。

你需要知道一些事实,并根据数据加以验证。例如,你需要确认用户不会每天在手机上花费27小时,因为一天没有27小时。但同时,不要假设所有用户看起来都一样,也不要假设世界上所有地方在面对新数据时的行为都相同。

数据伦理:确保数据普惠所有人 🤝

从伦理上讲,确保你的数据能为所有人服务至关重要。如果你试图移除标识符,或对数据进行去个性化处理,你必须确保这项工作做得真正好且有效。

最简单的方法并不总是最好的。仅仅说“哦,我试过了”是不够的。你必须进行更深入的探索,确保数据真正实现了去标识化。

总结与核心特质 ✅

本节课中,我们一起学习了数据分析的核心流程:从探索性数据分析EDA = Understand(Data_Source, Purpose, Content, Caveats))开始理解数据,到通过叙事艺术Impact = Tell_Story(User_Categories, Insights))将洞察转化为影响力,同时在整个过程中保持客观并遵循数据伦理Ethical_Data = De-identify(Data) + Serve_Everyone())。

最后,好奇心是分析师最重要的特质之一。通过尝试学习新事物,你已经展现了这种好奇心。保持这份好奇心,它将引领你在数据科学领域不断发现新大陆。

006:结合节奏与EDA实践 🎯

在本节课中,我们将要学习如何将PACE工作流与探索性数据分析(EDA)的六大实践相结合,以确保我们的数据分析工作始终聚焦于核心目标,避免迷失在数据的海洋中。

你是否曾走进一个房间想拿某件物品,却因分心而忘记初衷?作为数据专业人士,我们对发现数据故事的好奇心兴奋感,也可能让我们忘记数据探索的原始目的。显然,我们希望保持这种天然的好奇心,但更重要的是,我们需要将好奇心聚焦于需要回答的问题或需要解决的难题上。

我们追求的是一种平衡的心态,即目标明确的好奇心。这种平衡可以通过运用PACE工作流来实现。正如你所知,PACE(计划、分析、构建、执行)是一些数据专业人士用来保持对任何给定数据集最终目标专注的工作流程。

结合PACE与EDA实践

上一节我们介绍了PACE工作流的基本概念,本节中我们来看看如何将其与EDA实践具体结合。

你可能会认为,既然“分析”在EDA(探索性数据分析)的名称中,那么EDA就只属于PACE工作流中的“分析”部分。事实上,EDA适用于PACE的每一个阶段。你会发现EDA的六大实践与PACE的其他部分都有交集。例如,“发现”实践与PACE的“计划”阶段一致,而“呈现”实践可能是PACE“执行”阶段的主要部分。

数据专业人士并非随意地从数据中寻找和讲述故事。数据洞察力受项目目的和目标的引导。“计划”可能来自利益相关者或管理者,你可以将其视为项目计划或公司的既定目标。

实践案例:聚焦目标

为了理解如何应用,让我们回顾视频中提到的办公设备公司的销售预测案例。

你的任务是基于10年的销售数据,预测未来六个月的销售业绩。当你开始EDA时,你发现提供的数据集包含的信息远超出你的需求。为了你和公司的利益,你应当只提取预测销售所需的列。

以下是预测销售所需的核心数据列:

  • 销售日期
  • 商品
  • 价格
  • 销售代表

数据清洗、连接和验证过程中,你可以排除以下不相关的数据列:

  • 材料成本
  • 商品ID号
  • 数据库成本中心编号
  • 供应商名称

清洗10年、4列的数据集远比处理8列的数据集更易于管理。当然,在典型的工作场景中,当你基于原计划完成了大量EDA工作后,财务部门却说他们实际需要的是预测利润率而非销售目标,这并不罕见。

沟通与调整

任何工作场所都可能发生沟通失误,数据分析领域也不例外。如果利益相关者、工程师和数据专家对计划不明确,结果将无法讲述一个连贯或有效的故事,反而可能导致困惑、分歧和时间浪费。

以下是确保良好沟通的几个方法:

  • 与所有可能涉及的人员分享PACE计划。
  • 在更广泛地分享分析结果之前,先与工作小组分享分析以获取反馈。
  • 在向利益相关者呈现结果前,理解他们对公司最重要的目标至关重要。

我们将在后续视频中详细讨论沟通策略。重点是,当你面对一个数据集时,要时刻提醒自己分析的初衷

更多应用示例

让我们再次考虑办公设备公司的案例。假设你拿到两个数据集:一个包含交易ID和日期,另一个包含交易ID和总成本。你被要求预测未来六个月的销售数字。

考虑到这个任务的目的,你可能会对这两个数据集做什么?你可能会考虑EDA的连接实践,将两个数据集的所有数据(交易ID、日期和总成本)合并在一起。

再举一个例子,假设你拥有一家医院过去一年的治疗数据。如果目标是为来年准备材料和用品的采购订单数据,你可能会考虑哪种EDA实践?一个好的开始是运用EDA的结构化实践,按每种治疗所需的物品类型对数据进行分组。

坚守数据伦理

当数据专业人士遵循PACE这样的框架,并将该框架应用于他们执行EDA六大实践的方式时,他们就能理清优先级,并专注于实现项目目的。当然,作为数据专业人士,我们的首要任务是准确地呈现数据本身

如果你公司的项目计划与数据所揭示的信息不符,你有责任将此情况告知利益相关者。让我回到办公设备公司的销售预测请求。假设你只拿到了两个特定地理区域的销售收入数据,但利益相关者要求的是全球预测。作为数据专业人士,你有责任要求获得具有全球代表性的数据来完成此任务。仅使用两个区域的数据不足以做出全球预测。时间压力、利益相关者压力或客户需求,都绝不应导致数据专业人士绕过数据的要求。对数据的错误呈现永远是不合理的

总结

本节课中我们一起学习了如何将PACE工作流与探索性数据分析(EDA)有机结合。数据专业人士应努力使自己的工作与PACE的“计划”阶段保持一致。保持对PACE的关注有助于确定执行EDA实践的最有效方式,同时维护数据的伦理呈现。

接下来,我们将探讨PACE如何帮助指导数据可视化的发展。我们下节课再见。

007:数据可视化中的节奏控制 📊

在本节课中,我们将要学习数据可视化在探索性数据分析中的核心作用,以及如何通过有效的可视化来沟通洞察、讲述数据故事,并确保其符合伦理与可访问性标准。


让我们回顾一个场景。你面前有一张巨大的数字表格和一份数据可视化图表,你会选择哪一个来最快速地传达数据洞察?数据可视化在快速传达复杂信息方面,远比数据表格有效得多。

现在,让我们思考这与探索性数据分析的关系。数据可视化是数据专业人员在整个工作流程中,尤其是在探索性数据分析的呈现环节,用来讲述数据故事的重要工具。

以下是数据可视化的关键作用:

  • 辅助理解:无论处于探索性数据分析的哪个阶段,将部分或全部数据集绘制成条形图、散点图、饼图或直方图,都有助于你和他人的理解。
  • 处理大规模数据:作为数据专业人员,你将处理的是拥有成千上万甚至数十万个数据点、跨越数月、数年乃至数十年的数据框,而非仅有几百行数据的简单、干净的数据集。
  • 揭示关系:数据越多,你就需要创建越多的可视化来理解各个变量如何相互影响。

上一节我们介绍了数据可视化的基本作用,本节中我们来看看它在探索性数据分析中的具体应用。

当你开始审视新数据时,一个流行且有价值的策略是将其可视化。例如,在线图上可视化时间序列数据以理解周期性,或使用散点图来了解数据分布。数据可视化还能帮助你向利益相关者和其他数据专业人员解释你的数据集。

你的职责是发现需要分享的重点、趋势、偏差和故事,然后针对不同的受众,以有效的方式设计数据可视化。例如,假设你是一家电器制造商的数据专业人员,为制造团队进行分析。

在分析过程中,你发现了制造流程中的一个延迟,你需要将这一发现传达给两个不同的受众:制造主管和高管领导团队。当你分享发现时,如果没有数据可视化的帮助,一些利益相关者可能无法理解数据洞察。

数据可视化的设计方式,会向对项目不同部分有切身利益的利益相关者传达不同的信息。例如,制造主管可能需要审查按时间绘制的时间序列数据以识别制造延迟。与此同时,高管领导团队可能更关注财务影响分析。这两种数据可视化需要根据受众的需求进行不同的设计。

我们将在后续视频中详细讲解具体如何操作,但在此之前,请理解演示中文字与数据图表的平衡,会影响基于数据洞察做出的商业决策。

一份精心准备的数据可视化,可能意味着改变利益相关者想法与数据被忽视之间的天壤之别。然而,可视化也可能引起混淆,甚至歪曲数据。例如,想象一位数据专业人员开发了一个可视化图表,通过改变坐标轴的比例或图表高度与宽度的比率,使折线图看起来平坦或陡峭。

这种歪曲数据的做法与分析的本质背道而驰。因为你将是最熟悉数据及其故事的人,所以确保你的可视化不会误导受众至关重要。

再次回到制造设备的例子。如果你提供的数据可视化显示过去六个月销售额急剧增长,你的受众可能会认为公司运营状况非常好。但如果过去两年的数据显示,这六个月的激增是紧随长达18个月的衰退之后发生的,那么过去六个月的增长就有了不同的背景。仅展示最近六个月而非两年的数据,是对销售数据的歪曲。

你的数据驱动叙事是一个机会,可以呈现符合伦理、易于访问且能代表数据的事实和可视化。成为你所分析数据的道德呈现者,意味着对数据中包含和不包含的内容保持诚实和清晰。

除此之外,请记住以让所有人都能访问的方式设计你的数据可视化。例如,避免在数据可视化中搭配红色和绿色,因为这可能使色觉障碍者难以阅读。通常,蓝色和橙色是数据可视化中更好的选择。我们将在后续视频中更详细地讨论伦理和可访问性。

在其他视频中,我们将使用Tableau等数字可视化工具,以及Matplotlib、Seaborn和Plotly等Python包,来学习如何以符合伦理和可访问性的方式,在图表中使用你的数据。这些工具将成为你作为数据专业人员日常工作的一部分。

请记住,创建关于数据集的可视化将帮助你贯穿整个探索性数据分析过程。


通常,没有什么工具比制作精良的可视化更能讲述一个好的数据驱动故事了。

本节课中我们一起学习了数据可视化在探索性数据分析中的核心价值,包括其辅助理解、揭示关系、沟通洞察的作用,以及针对不同受众设计可视化、确保其伦理性和可访问性的重要性。

008:总结回顾 1 📊

在本节课中,我们将对课程前半部分的核心内容进行回顾与总结。我们探讨了如何在数据中发现故事,以及如何将数据故事有效地传达给他人。


我们已经深入讨论了如何在数据中发现故事,以及如何尽你所能地将这些故事讲述出来。然而,还有另一个故事贯穿于整个课程的阅读材料、视频和测验中,并且在你观看本视频时仍在继续展开。如果这一点还不够清晰,那么这个故事就是关于你——你能够坚持学习到课程的这个阶段,本身就表明了你决心成为一名数据专业人士。

我希望你不仅能受到启发去定义数据的故事,也能受到启发去定义你自己的故事。我相信你已经注意到,课程的这个部分涉及的实际编码指导非常少,这是有意为之的。数据专业人士的工作远不止编码和统计建模,课程的第一部分正反映了这一点。


认识到探索性数据分析如何应用于发现、塑造和讲述数据驱动的故事,这一点至关重要。如果你与职场中的数据专业人士交流,许多人会分享EDA在日常工作中的巨大益处。

因此,我们花了一些时间来讨论EDA的实践步骤,包括:发现、结构化、清洗、合并、验证和呈现,并回顾了这些实践的价值。

我们讨论了PACE工作流,以及它如何能应用于我们在数据中寻找故事的EDA过程。


你也学习了处理数据时的伦理道德,以及在我们讲述数据故事时准确呈现数据的重要性。

最后,你了解到数据可视化对于理解、构建和呈现数据故事是必不可少的。你认识到,讲述一个既能准确代表数据又能包容其受众的数据驱动故事,是卓越数据分析的一个典范。


然而,故事并未在此结束。在本课程中,我们还有更多概念需要学习,包括使用Python工具和代码块来辅助你进行EDA实践,以发现、结构化和清洗原始数据

在本课程项目中,你将处理那些代表原始数据的数据集,这类数据很可能在你作为数据专业人士的日常职业生涯中每天都会遇到。

请记住,所有数据都蕴藏着待讲述的故事。这些故事往往隐藏得很深,需要特别好奇和坚定的专业人士去发现它们。你将要去发现的数据驱动故事,有潜力改变整个公司,甚至整个世界。


我期待着与你一起继续完成本课程剩余部分的学习旅程,共同发现问题、解决问题并学习新概念。我也希望,随着你学习的每一个新概念,你也能对自己的故事有更多的发现。

我们很快再见。

009:模块2导论 🚀

在本节课中,我们将开启课程的第二模块,重点学习探索性数据分析。我们将了解如何深入理解数据、处理不同类型的数据源,并运用Python工具来发现数据背后的故事。


你是否曾尝试向朋友解释一件你自己也不太明白的事情?可能是一道困难的数学题、一则复杂的新闻报道,或是家人烹饪一道拿手菜的方法。当你试图教授一个自己并非专家的主题时,解释细节并提供清晰的指导会很有挑战性。

作为一名数据专业人士,你绝不能在分析数据时陷入这种境地。事实上,你的目标应该是非常了解你的数据。当你审阅一个数据表时,理解数据的来源、列标题的含义、数据的用途、数据存在的缺陷以及其中的细微差别至关重要。

理解原始数据正是我们在此的目的。

我很高兴你能基于目前所学的知识,对工作中常见的数据集进行探索性数据分析


首先,你将学习工作中会遇到的多种数据类型和数据源,以及如何研究它们。

接下来,你将回到Python Notebook环境中,开始编写代码来实现所学的概念,同时更深入地探讨EDA的前两个实践环节:发现结构化

在学习“发现”实践时,我们将使用流行的Python函数来了解数据中包含的信息。你将学会使用不同的可视化技术来揭示数据中隐藏的相关性和联系。

至于“结构化”,你将学习如何对大型数据集应用Python函数进行多种操作,包括排序、筛选、提取、切片、连接和建立索引。你将学会对数据列或整个数据集进行基本的修正或格式改进。

所有这些技术和实践都将帮助你了解数据,并找到需要讲述的故事。

除了Python函数和编码脚本,我们还将讨论当遇到无法回答的数据集问题时该如何处理,例如,为什么存在缺失数据字段。我们也将确保你执行的EDA与我们设定的PACE工作流程保持一致。

本部分课程的核心在于,首次深入挖掘数据并尽可能细致地调查它。


数据中的故事需要由你来发现。大多数数据专业人士会告诉你,全面的EDA是产生有用可视化和模型的关键。如果在EDA之后,数据中仍有未解答的问题或误解存在,那么基于此的任何演示或机器学习模型都不会特别有用。这就像试图解释一道你自己都没完全理解的数学题。

请记住,所有数据集都有故事要讲述。让我们开始工作,找出它们。


本节总结

本节课中,我们一起学习了探索性数据分析的重要性。我们明确了深入理解数据的必要性,并预览了本模块将涵盖的核心内容:研究数据类型与来源、通过Python代码实践“发现”与“结构化”数据,以及遵循PACE工作流程来确保分析的有效性。准备好开始你的数据探索之旅了吗?

010:将数据转化为洞察 🚀

概述

在本节课中,我们将跟随谷歌高级财务分析师杰西尔的分享,了解如何通过理解底层数据来驱动组织价值。课程将涵盖数据驱动决策的核心、分析师的工作日常以及完成长期学习目标的实用建议。


从海军陆战队员到谷歌分析师:我的旅程 🧭

我的名字是杰西尔,我是谷歌的一名高级财务分析师。我出生在尼加拉瓜,两岁时移民到美国。我在费城的内城区长大。高中毕业后,我加入了美国海军陆战队,曾在日本、南非、沙特阿拉伯和巴拿马服役。

我对金融产生浓厚兴趣的一个重要原因是,当我在南非的第一个驻地时,我结识了一位曾任职于华尔街的大使。他给予我指导,教会了我许多关于个人理财、公司财务和全球经济的知识。我的想法因此发生了转变,从“我要永远当一名海军陆战队员”变成了“我将在四年服役期满后离开海军陆战队,重返校园”。后来,我通过随机浏览YouTube频道和搜索资料自学了高级数据分析。


理解数据以驱动价值 💡

上一节我们了解了杰西尔的背景,本节中我们来看看他如何将数据分析与价值创造联系起来。

我进入大数据分析领域,部分原因是为了理解和驱动组织价值。你必须真正理解底层数据。作为一名高级财务分析师,典型的工作日常主要围绕几件事展开:与战略业务伙伴合作。我花费大量时间试图找出正确的财务视角,以便他们能够获得对其业务的洞察,从而影响他们的决策。


给学习者的建议:如何完成长期课程 🏃‍♂️

在了解了数据分析如何创造价值后,我们可能会对如何掌握这些技能产生疑问。以下是杰西尔关于完成长期在线课程的建议。

完成像这样的在线课程是困难的,尤其是当你看到课程计划长达三个月或六个月时。只需专注于下一天,并坚持你的时间表,每天都要出现。这就像跑马拉松。你不是在跑26.2英里,你是在跑1英里,重复26.2次。只需专注于接下来的那一小步。我相信你,你能做到。


总结

本节课中我们一起学习了杰西尔从海军陆战队员到谷歌分析师的独特职业路径,理解了深入掌握底层数据是驱动业务决策和创造价值的关键。同时,我们也获得了一个实用的建议:面对长期学习目标,最佳策略是分解任务,保持专注,持之以恒。记住,成功源于每一天微小的、持续的进步。

011:数据来源解析 📊

在本节课中,我们将学习探索性数据分析(EDA)中“发现”阶段的一个关键环节:理解你的数据。我们将重点探讨数据的来源、格式和类型,并了解如何利用这些信息来确保分析工作的顺利进行。

想象一下,你正在为朋友准备一顿饭。你有一份食谱和生食材,但这是你第一次做这道菜。你当然希望朋友们能喜欢它。第一次尝试就完美复现食谱,这个想法可能让人紧张。

信不信由你,这个烹饪的例子就像数据专业人员在EDA的“发现”实践中一样。你试图遵循的食谱相当于公司的项目计划。你手头拥有所需的一切:一个厨房(或者说,一个配备了数据分析专用服务器的数字工作空间)、生食材(或者说,数据集)。如何最好地混合、搅拌和烹饪这些食材,以做出一道让朋友们喜欢的佳肴,这取决于你。

在本视频中,让我们聚焦于“生食材”。作为数据专业人员,你将处理各种不同格式和文件类型的数据。我将与你分享最常见的数据来源、数据格式、数据类型以及一些Python函数。一旦你熟悉了数据集的来源、格式及其内部的数据类型,你就能准备好应对分析过程中可能出现的问题或挑战。

理解数据来源 📍

首先,当你拿到数据时,你需要知道它的来源。“数据来源”这个术语在不同语境下可能有多种含义,但就我们的目的而言,我们将数据来源定义为数据产生的位置。

了解数据来源的一个好处是知道如何以及何时联系主题专家,例如工程师或数据库所有者。这些人要么是数据的生成者,要么负责交付数据集。当你在“发现”过程中对数据有疑问时,他们就是你求助的对象。

了解数据的所有权和来源至关重要,因为通过理解数据来源及其负责人,你可以判断其可靠性。数据所有者是否有收集和存储数据的经验?数据所有者是否对数据的输出有任何经济利益?理解数据来源将帮助你讲述数据背后的故事,并就其使用做出合乎道德的决定。

确定数据来源的另一个重要部分是理解它是如何收集的。数据是通过计算机系统的报告收集的,还是从大型在线数据库中自定义选取的,或者是手动输入的数据表?了解数据的收集方式将帮助你理解EDA过程中可能出现的疑问。

例如,缺失值可能意味着许多不同的事情:可能是数据库所有者不知道或不愿意披露手动输入的数据,也可能是来自在线数据库的滞后数据或系统错误。

认识数据格式 📁

接下来,你需要了解数据来源的数据文件格式。作为数据专业人员,你将遇到的主要数据格式包括:表格文件、XML文件、CSV(逗号分隔值)文件、电子表格、数据库文件或JSON(JavaScript对象表示法)文件。

以下是这些文件类型的几个示例。

如果你已经学习到这个阶段,现在应该对表格文件和Excel文件很熟悉了。如你所知,它们以表格形式组织数据,数据变量按行和列排列,行代表对象,列代表数据集中对象的各个方面。

这种文件类型的优势在于能清晰地识别变量之间的模式。

CSV文件是一种简单的文本文件,可以轻松导入或存储在其他软件、平台和数据库中。它们看起来像是由逗号或其他分隔符分隔的文本和数字行。数据行由逗号分隔,而不是严格的列。

CSV文件的优势更多是从计算机科学的角度来看,它是一种易于读取的文件类型,甚至在文本编辑器中也能读取。它也易于创建和操作。在Python中,你可以使用read_csv函数来读取、写入和处理CSV格式的表格数据。

数据库(简称DB)是存储数据的另一种方式,通常以表、索引或字段的形式存储。数据库文件非常适合搜索和存储。它们通常需要一些结构化查询语言(SQL)的基础知识。我们将在后续章节中探讨如何从数据库中查询数据。

最后,JSON文件是以JavaScript格式保存的数据存储文件。你会发现这些文件中的信息更类似于Python代码,但使用不同的语言、函数和格式。

JSON文件中可能包含嵌套对象。你可以将嵌套对象想象成代码本身内部可展开的文件文件夹或下拉菜单。例如,一个JSON文件可能列出了食谱的配料,并且在每种配料下,你会包含嵌套信息,如重量、卡路里和价格,作为定义该配料的对象。

JSON文件有几个优点:消息体积小;几乎可以被任何编程语言读取;帮助编码者轻松区分字符串和数字。有专门用于处理JSON文件的Python库和函数。正如你之前学到的,你可以将json Python模块导入到你的Python笔记本中,用作JSON文件的编码器和解码器。Pandas中也有名为read_jsonto_json的工具,分别用于翻译JSON文件和将对象转换为JSON格式。

作为数据专业人员,你可能还需要在其他格式中寻找数据故事,如HTML、音频文件、照片、电子邮件文本、图像或文本文件。在每种情况下,都有Python库或函数可以帮助你为研究项目发现和构建数据。

数据没有最佳格式。这取决于项目和存储类型。你只需要寻找最适合该特定数据集的格式。

区分数据类型 🔢

最后,理解数据的最后一个“生食材”是数据的类型。你可能已经熟悉许多不同的数据类别。作为提醒,数据有第一方、第二方和第三方之分。

第一方数据是从你自己组织内部收集的数据。
第二方数据是从组织外部收集的,但直接来自原始来源。
第三方数据是从组织外部收集并汇总的数据。

了解数据类型(无论是第一方、第二方还是第三方)将帮助你更有效地回答或寻求分析过程中可能出现的问题的答案。例如,如果第一方数据中存在缺失值,那么你组织中的某个人可以帮助你确定是否可以恢复缺失的数据。对于第三方数据,你可能需要联系一个独立的组织。

你还将熟悉不同类型的数据,如地理数据、人口统计数据、数值数据、基于时间的数据、财务数据和定性数据。作为数据专业人员,你的工作需要你理解并处理所有这些类型的数据。

了解你正在处理的数据来源、格式和类型,将帮助你回答两个非常重要的问题:

第一,根据你目前对数据的了解,它是否符合你的PA工作流程中定义的计划?
第二,你是否有足够的数据来执行PA工作流程中的计划?

如果你对其中任何一个问题的回答是“否”或“不确定”,那么你的职责就是联系数据所有者和项目利益相关者,告知他们你发现的问题。

例如,假设你被指派预测零售商下个月将接待的顾客数量。不幸的是,你只获得了利润率数据和仅两个月的顾客购买数据。因为利润率数据无助于了解回头客情况,而仅两个月的数据无法让你对预测有足够的信心,所以你应该回到数据来源。你需要过去几年的顾客购买数据才能准确预测下个月的情况。

回到数据来源并请求更多数据,将使流程中的每个人(包括你自己)都专注于作为PA工作流程一部分所制定的计划。当你作为数据专业人员工作时,保持这种专注对于识别和执行高优先级、高附加值的任务至关重要。

作为数据专业人员,你需要知道数据的含义以及如何利用它来寻找业务问题的解决方案。就像烹饪一顿饭一样,你会获得解决问题所需的工具和食材。如果食材不足,或者给你的食材无法做出一道好菜,那就需要你和你的团队一起努力解决。

总结 📝

本节课中,我们一起学习了在探索性数据分析的“发现”阶段,如何深入理解数据的三个核心方面:来源、格式和类型。我们了解到,明确数据来源有助于评估其可靠性和联系相关专家;熟悉各种数据格式(如CSV、JSON、数据库)及其对应的Python处理工具(如read_csvjson模块)是进行分析的基础;区分第一方、第二方和第三方等数据类型,则能帮助我们更有效地定位和解决问题。最终,所有这些知识都是为了确保我们手头的数据足以支持项目计划,并在发现问题时能够及时与团队沟通,聚焦于高价值的任务。

012:将数据转化为洞察》- 使用Python基础函数进行EDA 🐍

在本节课中,我们将学习如何使用Python的基础函数进行探索性数据分析。我们将以一个真实的数据集为例,逐步演示数据导入、初步检查、数据转换以及基础可视化的完整流程。


现在你已经对探索性数据分析及其重要性有了更好的理解,让我们在一个与你职业生涯中可能遇到的数据集相似的数据上进行一些探索。

美国国家海洋和大气管理局,简称NOAA,记录了北美大部分地区的每日闪电数据。假设我们的任务是对这个数据集进行EDA,以便未来用于预测该地区的闪电活动。

在本视频中,我们将使用Python对NOAA在2018年收集的数据进行EDA实践。我们将介绍数据专业人员首次接触数据集时通常会执行的前几个步骤。

让我们打开一个Jupyter Python笔记本来开始。首先,我们需要导入要分析的数据集以及计划使用的Python库。

这个准备步骤类似于画家在开始绘画前收集画笔、颜料和画架。同样,我们需要收集所有的工具和数据。

我们将使用的NOAA数据属于公共领域,但我们提供了一个文件供你下载以便跟随操作。首先,导入你计划使用的Python库和包。在我们的案例中,我们将使用pandasnumpymatplotlib.pyplot

为了节省时间并提高效率,用两个字母的缩写重命名每个库或包,分别为pdnpplt。另一个节省时间的小技巧是,除了点击运行单元,你始终可以使用键盘快捷键Ctrl+Enter(或Cmd+Enter)。

你可能还记得,像pandasnumpy这样的Python包是开源的代码包,它们经过预先设计和编码,旨在帮助更高效地分析和处理数据。matplotlib.pyplot是一个专注于绘制图表和可视化的包。

大多数数据专业人员会在任何编码会话开始时导入所有常用的库、包和模块,但你也可以在Python笔记本中处理数据时随时导入它们。

在处理日期和时间时,pandasto_datetime转换函数非常有帮助。我们将首先将日期列转换为日期时间格式,这会将日期对象拆分为年、月、日等独立的数据点。

这是一个好习惯,因为在你的职业生涯中,你经常需要按不同的时间段对数据进行分组,我们稍后会讲到这一点。运行完这些初始函数后,你就可以开始对这个数据集进行EDA探索实践了。

让我们从head方法或函数开始。head将返回你在参数字段中输入的行数。我们首先查看前10行数据。

df.head(10)

现在,数据的前10行已显示在我们的笔记本中。这个数据集包含三列数据:datenumber_of_strikescenter_point_geom

在练习的这个阶段,我们需要清楚地理解每一列的含义。datenumber_of_strikes的含义相当直接。你需要留意日期的格式,在本例中是“年月日”。你还会发现,查看日期列时,2018年几乎每天都有至少一个地点的闪电数据记录。

有些列标题是显而易见的,但有些像center_point_geom这样的列标题则不然。如果你在项目中对列标题的含义不确定,可以查阅NOAA提供的公共文档来确认其含义。

在本视频中,信息已提供:center_point_geom列指的是记录闪电的经度和纬度坐标。

我们知道了列的数量,但也想知道我们将要处理的数据有多少行。另一个很棒的EDA探索工具是info函数。

名为info的方法提供了总条目数以及各个条目的数据类型。请记住,在pandas中,数据类型被称为dtypes

如果我们在笔记本中输入df.info()并运行,我们将得到这个输出。

我们的范围索引告诉我们总条目数接近350万。我们还发现,datecenter_point_geom列中的数据值被归类为object类型,而number_of_strikes数据列中的数据被归类为int64类型。

int64指的是64位整数,意味着该数据类型包含介于\(-2^{63}\)\(2^{63}-1\)之间的整数。简单来说,int64是一个介于负9百亿亿到正9百亿亿之间的标准整数。

在执行info函数时,你可能还会看到另一种dtypestr,它指的是字符串。与object类似,你可能已经很熟悉字符串了。字符串是一个不可变的字符或整数序列。

回到数据本身,我们现在对其规模和范围有了相当好的了解。我们知道它有三列,并且有3,040,112行。我们也知道了各列的含义。

在我们的探索实践中,还可以使用其他方法或函数。例如,describesamplesizeshape等方法对于了解数据集都很有用。

不过对于这个数据集,从探索的角度来看,我们已经掌握了理解数据情况所需的信息。


接下来,让我们通过绘制第一个可视化图表来确定哪些月份的闪电次数最多。记住,你的数据有超过300万行。如果我们不做任何分类或分组,可能会导致笔记本在尝试运行代码时陷入无尽的循环。

我们已经将日期列转换为日期时间格式,这使得我们能够轻松地操作该列中的数据。我们希望将每日的闪电数据分组为更易管理的形式,例如按月分组。

因此,让我们使日期引用一年中每个月份对应的数字。即一月是1,二月是2,依此类推。我们将通过使用代码df[‘date’].dt.month创建month列来实现这一点。这里的dt代表datetime

为了让图表更容易解读,让我们将目前是数字的月份数据转换为月份名称的缩写。我们将通过创建另一列month_txt来实现。

这段代码将获取字符或月份名称的字符串,并切片只包含前三个字母。在尝试将数据绘制到图表上之前,我们需要按月汇总所有地点的闪电次数。

我们可以通过使用groupby函数创建一个数据框来实现,其中我们将包含monthmonth_txt列,因为我们将使用这些列来分组和排序闪电数据。我们将使用sum函数将每个月的闪电次数相加。

# 按月份分组并求和
df_grouped = df.groupby(['month', 'month_txt'])['number_of_strikes'].sum().reset_index()

在本视频的最后几行代码中,让我们将2018年各月的闪电次数绘制成条形图,并将各州的总闪电次数绘制在地图上。这将帮助我们更好地理解数据背后的故事。

你会发现这看起来像一大块代码,但由于我们使用的是matplotlib.pyplot,实际用于可视化的代码并不太难理解。

首先,我们有plt.bar函数,我们需要输入希望绘制的数据列:X轴首先是month_txt,然后是高度或Y轴,我们将填入number_of_strikes。接下来,我们将为条形图添加一个图例(在Python中称为label),我们将其输入为“Number of Strikes”。最后,我们将用X轴和Y轴标签以及可视化标题来填充条形图的细节。暂时将图例和显示参数字段留空。

运行代码后,你会看到2018年8月的闪电次数最多,而2018年11月和12月的闪电次数最少。

import matplotlib.pyplot as plt

plt.figure(figsize=(10, 6))
plt.bar(df_grouped['month_txt'], df_grouped['number_of_strikes'], label='Number of Strikes')
plt.xlabel('Month')
plt.ylabel('Number of Strikes')
plt.title('Lightning Strikes by Month in 2018')
plt.legend()
plt.show()


现在你已经完成了第一次使用Python进行EDA实践的编码体验,做得非常好。我们还有很多内容要讨论,这是一个很好的开始。

在本节课中,我们一起学习了如何使用Python进行探索性数据分析的基础步骤。我们从导入必要的库和数据开始,然后使用headinfo函数初步了解数据的结构和内容。接着,我们处理了日期数据,将其转换为更易分析的格式,并按月份对闪电数据进行了分组汇总。最后,我们使用matplotlib创建了一个简单的条形图来可视化2018年各月的闪电分布情况。这些基础操作为后续更深入的数据分析奠定了坚实的基础。

013:发现数据集中缺失的内容 🧩

概述

在本节课中,我们将学习探索性数据分析(EDA)发现过程中的关键一步:如何通过提出有意义的疑问和构建假设,来识别数据中缺失的信息,从而为后续分析奠定坚实基础。

从挑战中寻找新视角

我常常发现,暂时离开一个具有挑战性的项目并稍作休息,能帮助我获得对工作的新视角。我会从冰箱里拿一罐苏打水,散散步,并反思我对当前项目的已知与未知之处。

EDA的发现过程也需要类似的视角转换。在对数据进行初步探索后,我通常已对项目有了足够了解,可以基于数据提出一个假设。

假设 是基于证据但尚未被证实的理论或解释。数据专业人士常将假设作为持续调查或测试的起点。一旦形成假设,我便能更好地探索数据,并实现最终目标——讲述数据背后的故事。

回顾与衔接

到目前为止,在本课程中我们已经讨论了如何开始EDA的发现实践。你学习了如何检查数据源、数据格式和数据类型。你考虑了列标题信息和平均值,并制作了一些初步的可视化图表来呈现数据。你使用Python来确定数据的规模和范围,并学会了何时需要向数据所有者提出澄清性问题。

在理解了原始数据之后,你就为发现过程的下一步做好了准备:草拟问题清单并形成假设。

提出有意义的疑问

在本视频中,你将学习如何针对在PAcE工作流中概述的目标提出有意义的疑问,以更好地理解数据中缺失了什么,以及你仍需找出什么。

我喜欢的一种方法是将原始问题分解成更小的部分。

以下是你可以提出的一些问题:

  • 如何将数据分解成更小的组以便更好地理解?
  • 如何证明我的假设?
  • 以当前形式,这些数据能否给我所需的答案?

让我们结合具体情境来思考这些问题。例如,假设你在一家国际航空公司担任数据分析师,你需要确定降低票价是否能在每周的某些天吸引更多客户。

为了解决这个问题,你可能会问:

  • 哪几个月乘客流量最大?
  • 哪几周、哪些日期或已知节假日乘客数量最高?
  • 机票通常在何时被购买?

构建你的假设

接着,你会形成你的假设。在这种情况下,你的假设可能是:我预测在正常的商业周中,周二和周三的乘客和航班数量最少。因此,如果航空公司在非节假日周的周二和周三降低票价,他们将售出更多机票。

最终,你将通过分析数据来测试你的假设,以了解航空公司是否能在这些特定航班上通过降价吸引更多客户。

提出疑问和形成假设的目的是为了更好地理解你希望从数据中学到什么,以及你的测试结果可能揭示什么。之后,当你执行EDA的其他实践时,可以参考这些疑问和你的假设,以确定你是支持还是反驳了最初的理论。

制定行动计划

为了回答疑问并测试你或你的团队形成的假设,你需要一个计划。

例如,你可能需要联系拥有数据库或更熟悉数据源的领域专家,或者你可能需要进行自己的研究。换句话说,要“不遗余力”。这是一句关于古希腊传说的老话,意思是尽你所能去搜索,以找到你要寻找的东西。

如果你发现寻找答案的过程只带来了更多疑问,那是一件好事。每当你了解更多,你就在消除误解或误读数据的可能性。

在某些时候,你可能需要决定组织或修改数据以找到问题的答案。

例如:

  • 你可能需要将条目按年或月重新分组,而不是按天或周。
  • 你可能希望将客户年龄分组到年龄范围,以帮助你更有效地理解趋势。
  • 有时,为了创建模型来回答问题,合并或拆分数据列是必要的。
  • 其他时候,更改时间绑定数据中的日期格式或时区可能就是全部所需。

聚焦核心问题

例如,在你为国际航空公司的工作中,你的任务是找到实施低票价的日期,以便航空公司能吸引新乘客。想象一下,你得到的数据中票价以美元列出,但原始请求是为从欧洲出发的乘客降低票价。

你需要立即做出的一项更改就是将美元转换为欧元。对数据进行诸如格式化时间、更改单位或转换货币等小改动,都是发现过程的一部分。然而,对于你做出的每一项更改,都要专注于你被分配的问题或作为PAcE框架一部分所建立的计划。

总结

正如我们所讨论的,每个数据集都不同。提出疑问和形成假设需要时间和精力,但最终,回答疑问和测试你的假设将是你发现数据中隐藏故事的方式。

如果你遇到困难,暂时离开最初的发现工作,重新思考你的疑问和假设可能会有所帮助。任何已渲染的可视化、已完成的转换、已回答的疑问或已测试的假设,都必须忠实于该数据集的故事。

谁知道呢?也许你会在散步休息时找到答案。那将是多么令人耳目一新。

014:Python日期字符串操作 📅➡️📊

在本节课中,我们将学习如何处理日期时间对象和日期字符串。我们将通过Python代码练习数据的转换、操作和分组。课程结束时,我们将创建一个常用的数据可视化图表——条形图,用它来讲述数据背后的故事。

处理日期字符串通常需要将其分解为更小的部分。将日期字符串分解为日、月、年,可以让你以不同的方式对其他数据进行分组和排序,从而进行分析。操作日期和时间字符串是探索性数据分析(EDA)的一项基础技能。

在本视频中,你将学习如何将NOAA闪电数据集中的日期字符串转换为日期时间对象。我们将讨论如何将这些数据对象按时间片段(如季度和周)组合成不同的分组。

导入必要的库

首先,我们需要导入Python库和包。我们将导入Matplotlib和Pandas,这两个库你之前已经使用过。此外,我们还会引入Seaborn,这是一个更易用且能生成更美观图表的可视化库。

以下是需要导入的库:

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

处理日期字符串:创建日期时间对象

正如视频开头提到的,操作日期字符串的最佳方法是将日期信息(如日、月、年)分解成部分。这使我们能够将数据分组到任何我们想要的时间序列分组中。幸运的是,有一个简单的方法可以实现这一点,那就是创建一个日期时间对象。

回顾之前的内容,NOAA数据有三列,分别提供了闪电发生的日期、闪电次数以及闪电发生的经纬度。为了操作数据中的日期列,我们首先需要将其转换为日期时间数据类型。

我们通过以下代码实现转换:

df[‘date’] = pd.to_datetime(df[‘date’])

这个转换为我们提供了操作日期列中日期字符串的最快、最直接的路径。当前日期字符串的格式是四位数的年份,后跟一个短横线,然后是两位数的月份,再一个短横线,最后是两位数的日期。

创建时间分组列

由于我们的日期已转换为pandas的日期时间对象,我们可以创建任何类型的日期分组。例如,我们想按周和季度对闪电数据进行分组。

我们只需要创建一些新的列。以下代码创建了四个新列:weekmonthquarteryear

df[‘week’] = df[‘date’].dt.strftime(‘%Y-W%V’)
df[‘month’] = df[‘date’].dt.strftime(‘%Y-%m’)
df[‘quarter’] = df[‘date’].dt.to_period(‘Q’).dt.strftime(‘%Y-Q%q’)
df[‘year’] = df[‘date’].dt.strftime(‘%Y’)
  • week:使用strftime函数将日期时间数据格式化为新的字符串。参数%Y-W%V表示输出年份,后跟短横线和一年中的第几周(1-52)。
  • month:参数%Y-%m输出四位数的年份,后跟短横线和两位数的月份。
  • quarter:季度是三个月。许多公司将财年划分为季度,因此知道如何将数据划分为季度是一项非常有用的技能。我们使用.dt.to_period(‘Q’)来创建季度周期对象,然后格式化为%Y-Q%q的字符串。
  • year:参数%Y创建一个仅包含年份的数据列。

现在,让我们使用之前学过的head函数快速查看我们的工作成果:

print(df.head())

运行此代码后,我们的四个新列weekmonthquarteryear就出现了,并且都按照我们讨论的格式进行了格式化。

可视化数据:按周分组

我们可以使用这些新的字符串来了解更多关于数据的信息。例如,假设我们想按周对闪电次数进行分组。一个员工主要在户外工作的组织可能想知道每周处理闪电的可能性。

为了做到这一点,我们需要绘制一个图表。接下来,让我们用闪电数据编写一个图表代码。

为了绘制每周的闪电次数,我们使用条形图。使用所有三年的数据会让我们的图表有点混乱,所以我们只使用2018年的数据,并将图表限制在52周,而不是156周。

我们可以通过创建一个按年份分组并按周排序数据的列来实现这一点。我们将在另一个视频中了解更多关于结构函数的信息。现在,让我们专注于绘制这个条形图。

我们将使用plt.bar函数来绘图:

# 假设我们已经筛选了2018年的数据到 df_2018
plt.bar(df_2018[‘week’], df_2018[‘number_of_strikes’])
plt.xlabel(‘Week Number’)
plt.ylabel(‘Number of Lightning Strikes’)
plt.title(‘Number of Lightning Strikes per Week, 2018’)
plt.xticks(rotation=45, fontsize=8)
plt.show()

这段代码生成了一个图表,但X轴的标签都挤在一起,难以阅读。我们通过plt.xticks函数,将标签旋转45度,并将字体大小缩小到8,来修复这个问题。

根据我们展示2018年每月闪电次数的条形图,你可以得出结论:计划在第32至34周进行户外活动的团队可能需要一个转移到室内的备用计划。当然,这是对数据集中每个北美位置的广泛概括,但就我们的目的和一般而言,这是对我们数据的一个很好的理解。

可视化数据:按季度分组

对于最后一个可视化,让我们按季度绘制闪电次数。为了可视化,处理以百万为单位的数字(如25.2百万)会比处理像25,154,365这样的数字容易得多。

让我们创建一个将总闪电次数除以1百万的列:

df[‘strikes_in_millions’] = df[‘number_of_strikes’].div(1000000)

运行这个单元格后,我们得到了一个提供以百万为单位的闪电次数的列。

接下来,我们使用groupby和重新索引函数按季度对闪电次数进行分组:

df_by_quarter = df.groupby(‘quarter’)[‘strikes_in_millions’].sum().round(1).reindex()

这段代码将三年的闪电次数按季度划分。每个数字都四舍五入到第一位小数。字母M代表1百万。正如你很快会发现的那样,这个计算将有助于可视化。

我们将使用与之前相同的格式绘制图表:

plt.bar(df_by_quarter.index, df_by_quarter[‘strikes_in_millions’])
plt.xlabel(‘Quarter’)
plt.ylabel(‘Number of Strikes (in millions)’)
plt.title(‘Number of Lightning Strikes by Quarter, 2016-2018’)
plt.show()

如果每个季度的条形顶部都能显示总闪电次数,那会更有帮助。为此,我们需要定义自己的函数,我们称之为add_labels

def add_labels(x, y):
    for i in range(len(x)):
        plt.text(i, y[i], f‘{y[i]:.1f}M’, ha=‘center’)

add_labels(df_by_quarter.index, df_by_quarter[‘strikes_in_millions’].values)

在展示数据可视化之前,我们还想添加一些小东西,让它更易于阅读。让我们设置图表的长度和高度为15x5,并通过定义这些数字和居中文本来使条形标签更清晰。

我们的条形图现在显示了从2016年到2018年每个季度的闪电次数。为了让信息更容易消化,让我们再做一次可视化。

以下是绘制按季度逐年分组总闪电次数的条形图的代码:

# 假设我们有一个按年和季度分组的数据框 df_year_quarter
df_year_quarter = df.groupby([‘year’, ‘quarter’])[‘strikes_in_millions’].sum().unstack()

df_year_quarter.plot(kind=‘bar’, figsize=(15, 5))
plt.xlabel(‘Year’)
plt.ylabel(‘Number of Strikes (in millions)’)
plt.title(‘Number of Lightning Strikes by Quarter, Year over Year’)
plt.legend(title=‘Quarter’)
plt.show()

仔细查看代码,思考每个函数和参数是如何协同工作以创建这个最终精美的条形图的。每年都被分配了不同的颜色,以突出季度之间的差异。

现在,我们有了最终的图表。

总结

在本节课中,我们一起学习了如何将日期字符串转换为日期时间对象,这是处理时间序列数据的关键一步。我们掌握了使用strftime方法创建不同时间粒度(如周、月、季度和年)的新列。最后,我们运用这些技能,通过创建条形图,将NOAA闪电数据按周和季度进行了可视化分析,从而能够更直观地发现数据中的模式和趋势。

接下来,你将学习更多关于构建数据的不同方法。我们下节课再见。

015:运用结构化方法建立数据秩序 📊

在本节课中,我们将学习探索性数据分析(EDA)中的结构化实践。结构化实践能帮助你以不同方式组织、收集、分离、分组和筛选数据,从而更深入地理解数据集。作为一名数据分析专业人士,掌握这些方法至关重要。

上一节我们介绍了结构化实践的重要性,本节中我们将详细探讨构成这一实践的具体方法。

以下是六种核心的结构化方法:

1. 排序
排序是将数据按有意义的顺序进行排列的过程。

  • 公式/代码描述df.sort_values(by='column_name', ascending=True/False)
  • 例如,你有一个关于袋鼠的数据集,其中包含“育儿袋体积”这一列。你可以将这些值按升序(从小到大)或降序(从大到小)进行排序。

2. 提取
提取是从数据集或数据源中检索数据以供进一步处理的过程。

  • 公式/代码描述df[['column_A', 'column_B']]
  • 你可以将其理解为检索整列数据。例如,从袋鼠数据集中,仅提取“育儿袋体积”和“尾巴长度”这两列数据用于分析、比较或可视化。

3. 筛选
筛选是根据指定参数选择数据集的较小部分,并用于查看或分析的过程。

  • 公式/代码描述df[df['column'] < value]
  • 你可以将其理解为选择数据行。例如,在袋鼠数据中,筛选可以表现为仅查看那些尾巴长度小于1米的袋鼠的育儿袋数据。这有助于发现数据中有意义的组别或趋势。

4. 切片
切片将信息分解成更小的部分,以便从不同视角进行有效检查和分析。

  • 公式/代码描述df.loc[rows_condition, columns_selection]
  • 你可以将其理解为对列和行进行“或/与”操作,是提取和筛选的结合。例如,在袋鼠数据中,如果你有三个不同区域种群的数据,而你只选取其中一个区域种群的“总体长”数据,这就是数据的一个切片。

5. 分组
分组,有时也称为分桶,是将变量的各个观测值聚合成组。

  • 公式/代码描述df.groupby('category_column')['value_column'].mean()
  • 例如,在袋鼠的“尾巴长度”列旁边添加一个名为“总体长”的新列。然后,根据“尾巴长度”列的测量值,将所有尾巴长度分为“长”、“平均”和“短”三种类型。现在,你可以根据袋鼠尾巴长度的分组来查找和组织对应的总体长值。

6. 合并
合并是一种沿着指定的起始列组合两个不同数据框的方法。

  • 公式/代码描述pd.merge(df1, df2, on='key_column')
  • 例如,假设我们有另一个来自不同实地研究的袋鼠信息数据集,但其参数和变量相同。我们可以使用合并或连接函数来对齐列,并将新数据合并到一个数据集中。

在执行筛选、排序、切片、连接和合并操作时,必须确保不改变数据的原意。例如,如果我们没有将袋鼠育儿袋的测量数据与匹配的袋鼠名称和ID正确合并,那么数据就不具代表性,我们的分析也将失去价值。忠于数据就是忠于数据背后的故事。

希望你现在开始理解组织和结构化数据对于分析的价值。接下来,我们将使用Python来练习这些结构化方法。

本节课中,我们一起学习了六种核心的数据结构化方法:排序、提取、筛选、切片、分组和合并。这些方法是探索性数据分析的基础,能帮助你将原始数据转化为清晰、有序的信息,为后续的深入分析和洞察发现做好准备。

016:使用Python实现EDA结构化 📊

概述

在本节课中,我们将学习如何使用Python进行探索性数据分析中的“结构化”操作。我们将以美国国家海洋和大气管理局的闪电数据为例,演示如何通过排序、分组、合并等结构化方法,从原始数据中发现隐藏的模式和故事。


导入工具包与数据准备

在开始分析之前,我们需要导入必要的Python库。这些工具将帮助我们处理、分析和可视化数据。

import pandas as pd
import numpy as np
import seaborn as sns
from datetime import datetime
import matplotlib.pyplot as plt

接下来,我们加载2018年的闪电数据,并将日期列转换为日期时间格式,以便后续操作。

df = pd.read_csv('lightning_strikes_2018.csv')
df['date'] = pd.to_datetime(df['date'])
print(df.head())

运行head函数后,我们可以看到数据集中包含三列:date(日期)、number_of_strikes(闪电次数)和center_point_geom(中心点地理坐标)。


探索数据形状与重复值

上一节我们准备好了数据,本节中我们来看看数据的基本形状,并检查是否存在重复记录。

使用df.shape函数可以查看数据的维度。

print(df.shape)

输出结果为(3401012, 3)。这意味着数据集有近340万行,但只有3列,是一个“又长又瘦”的数据集。

以下是检查重复值的步骤:

  1. 使用df.duplicated()函数查找重复行。
  2. 使用.shape查看移除重复值后的数据形状。
print(df.duplicated().shape)

由于返回的形状与原始数据相同,我们知道数据中没有重复值。


数据排序与初步洞察

了解了数据的基本情况后,我们来看看如何通过排序来发现一些初步的洞察。

我们可以按闪电次数降序排列,看看哪些日期的闪电活动最频繁。

df_sorted = df.sort_values(by='number_of_strikes', ascending=False)
print(df_sorted.head(10))

结果显示,单日最高闪电次数在2000次左右,且多发生在8月。这很可能与夏季的风暴活动有关。


按地理位置分析

除了按时间排序,我们还可以分析闪电在不同地理位置的分布情况。

以下是使用value_counts函数查看每个地理位置闪电次数的方法:

location_counts = df['center_point_geom'].value_counts()
print(location_counts.head())

通过结果我们发现,一些地点平均每三天就有一次闪电,次数在100次左右;而另一些地点在整个2018年只记录到一次闪电。

为了更清晰地查看分布,我们可以展示前20个地点的数据,并添加视觉增强效果。

top_20 = df['center_point_geom'].value_counts()[:20].to_frame()
top_20.columns = ['counts']
top_20.index.name = 'unique_values'
top_20.style.background_gradient()

数据显示,在前20个地点中,闪电次数没有出现特别突出的高值,分布相对均匀。


使用分组发现模式

上一节我们按地点进行了分析,本节中我们来看看如何按时间分组,以发现更深层的模式。分组是发现数据中隐藏故事的有力工具,例如零售店一天中最盈利的时段。

首先,我们创建两个新列:week(一年中的第几周)和weekday(星期几)。

df['week'] = df['date'].dt.isocalendar().week
df['weekday'] = df['date'].dt.day_name()
print(df.head())

现在,我们可以按星期几分组,计算每天的平均闪电次数,看看是否存在规律。

weekday_strikes = df[['weekday', 'number_of_strikes']]
weekday_means = weekday_strikes.groupby('weekday').mean()
print(weekday_means)

为了更直观地理解数据分布,我们绘制一个箱线图。箱线图可以展示数据的集中趋势、离散程度和偏态。

在绘图前,我们先设置星期从周一开始。

weekday_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

g = sns.boxplot(x='weekday',
                y='number_of_strikes',
                data=df,
                order=weekday_order,
                showfliers=False) # 不显示异常值
g.set_title('Lightning Strikes per Weekday for 2018')
plt.show()

图表显示了一个有趣的现象:一周中每天的闪电次数中位数(箱体内的黑线)基本相同。然而,周六和周日的整体分布范围要低于工作日。这引发了一个思考:是周末的闪电真的变少了,还是数据报告在周末有所减少?


合并多年数据进行分析

为了进行更长期的分析,我们需要将多年的数据合并起来。合并意味着将两个或多个数据源组合成一个。

我们加载2016年和2017年的数据,并确保它们与2018年数据的格式一致。由于新数据没有我们之前创建的weekweekday列,我们需要在合并时处理这些差异。

以下是使用pd.concat函数合并三年数据并删除多余列的方法:

# 假设 df_2016, df_2017 是已加载的2016和2017年数据
union_df = pd.concat([df.drop(['week', 'weekday'], axis=1), df_2016, df_2017], ignore_index=True)

现在,我们有了一个包含三年数据的统一数据框。


跨年度对比分析

合并数据后,我们可以进行跨年度的对比分析。首先,我们按年份汇总闪电总次数。

# 为合并后的数据创建年、月列
union_df['year'] = union_df['date'].dt.year
union_df['month'] = union_df['date'].dt.month
union_df['month_text'] = union_df['date'].dt.month_name()

strikes_by_year = union_df[['year', 'number_of_strikes']].groupby('year').sum()
print(strikes_by_year)

我们发现2017年的闪电总次数低于2016年和2018年。由于总数不同,按月份分析每年的闪电百分比可能更有意义。

以下是计算每月闪电次数占当年总次数百分比的步骤:

  1. 按年和月分组计算闪电总次数。
  2. 按年计算闪电总次数。
  3. 将两个结果按年份合并。
  4. 计算百分比。
# 1. 按年月分组
lightning_by_month = union_df.groupby(['month_text', 'year', 'month']).agg({'number_of_strikes': 'sum'}).reset_index()

# 2. 按年分组
lightning_by_year = union_df.groupby('year').agg({'number_of_strikes': 'sum'}).reset_index()
lightning_by_year.columns = ['year', 'year_total_strikes']

# 3. 合并
lightning_by_month = lightning_by_month.merge(lightning_by_year, on='year')

# 4. 计算百分比
lightning_by_month['percentage'] = (lightning_by_month['number_of_strikes'] / lightning_by_month['year_total_strikes']) * 100

为了更清晰地展示,我们绘制一个分组柱状图。

plt.figure(figsize=(10,6))
sns.barplot(x='month_text', y='percentage', hue='year', data=lightning_by_month, order=month_order)
plt.xlabel('Month')
plt.ylabel('Percentage of Yearly Strikes (%)')
plt.title('Percentage of Lightning Strikes by Month (2016-2018)')
plt.show()

从图表中可以明显看出,2018年8月的闪电次数异常突出,占到了该年总闪电次数的三分之一以上。这提示数据分析师可能需要进一步研究该月是否有特殊的气象事件,如飓风或大型风暴。


总结

本节课中我们一起学习了如何使用Python对数据进行结构化操作,这是探索性数据分析的核心步骤。我们实践了排序分组合并等关键方法,并将2016-2018年的闪电数据整合分析。最终,我们通过可视化发现2018年8月的闪电活动异常活跃,这为后续的深入调查提供了明确的方向。掌握这些结构化技能,能帮助你从杂乱的数据中提炼出有价值的洞察和故事。

017:将数据转化为洞察》课程回顾 🧩

在本节课中,我们将对探索性数据分析(EDA)的核心实践进行一次全面的回顾。我们将梳理已学过的关键技能,并展望后续的学习路径。


你是否体验过拼图时初见全貌雏形的时刻?就像你已经连接好了边框,但距离完成仍有距离。

到目前为止,你已经学习了EDA的一些实践方法。你学会了如何收集、分析、组织和结构化数据。接下来,你将持续将这些碎片拼合起来,整个图景会变得越来越清晰。

已取得的进展 🚀

你已经取得了巨大的进步。上一节我们介绍了数据的基础知识,本节中我们来看看你已经掌握的具体技能。

以下是截至目前你已学习的关键概念:

  • 数据基础:你学习了数据源、数据类型和数据格式,并理解了了解数据基本信息的重要性。
  • 整体理解:我们实践了如何使用Python来获取数据集的宏观理解,例如列标题、数据类型、数据大小和形状,以及基本的可视化。
  • 日期时间处理:在探索和发现数据的过程中,我们学习了如何在Python中进行日期和时间的转换。

结构化数据:从混乱到有序 🗂️

在EDA的结构化实践方面,你学会了使用各种函数从混乱中建立秩序。

以下是用于组织数据的关键Python操作:

  • 排序df.sort_values()
  • 提取df[['column']]
  • 过滤df[df['column'] > value]
  • 切片df.iloc[]
  • 连接与合并pd.concat(), pd.merge()
  • 分组df.groupby()

在Python中,你练习了将这些函数应用于数据集,这些数据集与你作为数据专业人士职业生涯中可能处理的非常相似。数据专业人士普遍使用这些概念。在探寻数据中隐藏的故事时,你将持续构建这些技能。

作为一名数据专业人士,我认为清理和组织数据集占据了90%的工作量。一旦你构建好了数据表,发现洞察和趋势就会像在公园散步一样轻松。

实践案例与职场技能 💼

我曾提到,我过去在医疗咨询领域担任数据分析师,需要分析大量的医疗记录数据,以帮助为重症患者推荐治疗方案。

通常,数据分布在多个不同的来源和表格中,这使得合并它们变得困难。此外,医疗记录的组织方式可能导致患者服用的药物与其对应的病症是分开记录的。

因此,为了理解患者针对哪种疾病接受了何种治疗、经历了哪些副作用以及治疗是否有效,我必须将数百个表格合并在一起。一旦完成,比较和对比不同类型的治疗及其对每位患者的影响就变得异常容易。

你已经开始学习完成类似任务所需的技能。在此过程中,你还学习了一些关键的职场技能,例如向项目利益相关者、经理和主题专家沟通更新和提出问题的时机。

提出与验证假设 🔍

我们也讨论了如何在数据集上提出和检验假设,这有助于缩小范围并锐化你的数据驱动故事的细节。

简而言之,你越来越理解对数据集执行EDA意味着什么。做得很好。

总结与展望 📈

在本节课中,我们一起回顾了探索性数据分析的核心环节:从理解数据基础,到使用Python进行宏观分析和可视化,再到通过排序、过滤、合并等操作结构化数据。我们还通过实际案例看到了这些技能如何解决复杂问题,并初步接触了提出假设这一关键步骤。

在课程的后续部分,我们将讨论如何完成数据故事的其余部分,包括学习如何处理缺失数据和异常值,以及如何制作和使用可视化来帮助讲述那个故事。我们到时再见。

018:模块3导论 🎯

在本节课中,我们将学习探索性数据分析中的三个核心实践:数据清洗、数据合并与数据验证。我们将了解这些实践的重要性,并通过一个模拟的工作场景来理解它们如何帮助我们从原始数据中提炼出有价值的洞察。


想象一下,你在一家棋盘游戏制造商担任质量保证经理。你的职责是确保每一套游戏都组装正确。有一天,你发现生产游戏的机器出现了技术故障,导致卡片印刷错误,并且游戏配件的数量也不准确。

你的经理要求你和质量保证团队的其他成员一起,检查所有受影响的游戏盒,更换印错的卡片并补足缺失的配件。你的目标是确保每个游戏盒都是可用的。

在游戏盒中搜寻缺失或错误的配件,这个过程与数据探索分析中的清洗、合并和验证数据集非常相似。在课程的前一部分,你已经学习了如何发现和构建数据,以便以有影响力的方式理解和讲述数据故事。在本模块中,我们将涵盖EDA的另外三个实践:数据清洗、数据合并与数据验证

尽管清洗、合并和验证数据的方法多种多样,但我们将重点关注以下几个方面:缺失值与异常值将分类数据转换为数值数据的必要性,以及输入验证的重要性。当然,我们不会只停留在概念层面。你将学习如何在Python笔记本环境中应用这些技巧。

我们将使用与你在实际工作中会遇到的数据集类似的数据集。在此过程中,我们还会穿插一些提升职场技能的重要建议,例如沟通技巧。我们将讨论何时需要就缺失值或异常值问题与利益相关者和工程师沟通,以及在处理这些数据时必须考虑的伦理影响。

EDA的这些实践,加上有效的沟通和Python编码能力,都是为数据分析流程的后续步骤准备数据集所必不可少的。通过遵循PACE框架并执行EDA的这六项实践,你不仅能为未来的流程节省时间和精力,还能更有效地发现和讲述数据故事。


我在谷歌的第一份工作是在谷歌翻译团队担任定量分析师。我的职责是帮助识别我们可以改进的领域,以更好地服务用户。我记得有一个项目,我当时过于急切地想要深入分析数据。😊

我花了无数个小时来寻找改进机会,范围从用户首次下载应用到他们第二次、第三次乃至第二十次使用产品。我对自己的发现感到自豪,并准备了一个很长的演示文稿来向我的高管们汇报。

虽然我的见解得到了认可,但团队却不愿意投资我的任何想法,因为想法太多,他们不确定应该优先考虑哪一个。那次会议后我意识到,我需要一个计划。我花了太多时间挖掘洞察,以至于陷入了我的经理所说的“分析瘫痪”。

相反,我需要做的是找出影响最多用户的问题及其严重程度。通过运用这种策略来组织我的思路,我得以将分析聚焦到一个具体问题上,然后提出清晰的行动建议来提供帮助。

就像我们在视频开头想象的质量保证经理的工作一样,作为一名数据专业人士,你可能需要负责清理数据集,使其达到可用的状态。


你并不总是能确定在清洗数据时会遇到什么障碍,所以让我们从一些最常见的问题开始入手。

019:缺失数据处理方法 🧩

概述

在本节课中,我们将要学习数据分析中一个常见且关键的挑战:如何处理缺失数据。我们将探讨缺失数据的定义、影响,并详细介绍四种主流的处理方法。理解这些方法对于确保分析的准确性和可靠性至关重要。

什么是缺失数据?

上一节我们介绍了数据分析的常见场景,本节中我们来看看一个具体问题:缺失数据。

缺失数据通常被编码为 NANaN 或空白,它指的是数据集中某个变量没有存储值的情况。这与值为 0 的数据点不同,我们稍后会详细解释这一点。

数据专业人员经常面临缺失数据的挑战。每个数据集都不同,因此值缺失的原因也多种多样,从数据上传时的计算机错误到有人忘记输入都有可能。

缺失数据的影响

根据数据集的大小和缺失值的数量,包含“非数字”(NaN)的数据字段的影响范围可能从微不足道到非常重大。

这种影响也将决定你如何与利益相关者或客户沟通,范围从在数据可视化底部添加关于存在缺失数据的注释,到因缺失值过多而无法完成分析时进行面对面会议。

以下是一个说明缺失数据影响及其引发的伦理问题的例子。

想象你是一名数据专业人员,试图了解更多关于睡眠习惯的信息。你向100人发送了一份问卷,所有人都完成了。其中一个问题是:“你每晚是否恰好睡8小时?”答案选项是“是”、“否”或“不确定”。9人回答“是”,9人回答“否”,15人回答“不确定”。由于只有33人回答了这个问题,很难就所有100人的睡眠习惯得出明确的结论。

既然100人完成了问卷,但只有33人回答了这个问题,那么67%的回复将被视为缺失。这些缺失值极大地影响了该问题的最终数据。对于数据专业人员来说,试图用33%的回复率来推断整个人群的结论是不明智的。

如果你在工作中遇到如此高比例的缺失值,你应该沟通无法完成任何分析的情况,并提出可能的解决方案。

关于“0”值的挑战

在探索性数据分析中可能出现的另一个挑战是值 0。在某些数据集中,0 可能被视为缺失值,但在其他数据集中,它可能是一个合法的数据点。

在某些数据集中,NaN 或空白可能是一个错误(有人忘记填写),或者数据可能被留空,因为该列可能不适用于该数据点。

不确定空白是否是有意为之的数据专业人员,应该询问利益相关者或数据所有者以确认其合法性。

处理缺失数据的方法

每当发现缺失数据时,你都需要选择如何处理它。作为数据专业人员,你应该考虑缺失数据可能如何影响利益相关者,以及应该通知谁。

以下是四种处理缺失数据的常见方法。

  1. 请求数据所有者填补缺失值:如果你收到的数据中存在大量缺失值,处理缺失数据的最佳方法是联系数据所有者,请求填补该数据。
  2. 删除缺失的列、行或值:如果缺失数据的总量相对较低,或者这些值不会影响数据的商业计划,删除行或整列数据是理想的选择。但需要注意,删除非随机缺失的数据可能会使分析结果产生偏差。
  3. 创建一个“N/A”类别:如果缺失数据本身是分类数据而非数值数据,这是一个很好的策略。例如,在睡眠问卷中,将所有未回答者归入一个名为“答案未记录”的类别。
  4. 推导新的代表性值:对于需要预测值或预测的商业计划,此策略更有用。在此填补策略中,有多种方法可供选择,包括最常见的前向填充、后向填充、推导平均值和推导中位数。

我们将在另一个视频中讨论如何使用Python执行所有这些缺失数据操作。

如何选择方法

选择使用哪种方法需要经验、直觉和推理。有时,你会有机会对数据集使用多种选项。每个数据集和项目计划都不同,因此每次遇到新数据时,你都需要做出这个决定。

有时,你可能需要与同事、经理或利益相关者协商以做出决定。缺失值对你分析的影响应该是决定联系谁的决定性因素。

作为数据专业人员,你必须深思熟虑并有意识地处理缺失数据。考虑 NaN 的数量及其与项目计划相关的重要性,问问自己:这种方法将如何影响这个数据集?以及有哪些伦理考量?

就像棋盘游戏的场景一样,确定策略并决定计划至关重要。

总结

本节课中我们一起学习了缺失数据的核心概念、其对分析的影响,以及四种主要的处理方法:请求填补、删除、创建类别和推导代表值。掌握这些知识将帮助你在面对不完整的数据集时,做出明智、合乎伦理且有效的决策。

020:Python笔记本中的缺失数据实操 🐍

在本节课中,我们将学习如何在Python笔记本中识别和处理缺失数据。我们将使用熟悉的NOAA闪电数据集,通过比较两个不同的数据切片,掌握发现数据缺失的方法。课程内容包括导入库、检查数据、合并数据集、识别缺失值,以及通过数据可视化来理解缺失数据的影响。


导入必要的库

首先,我们需要导入一些Python库和包来帮助我们处理和分析数据。我们将使用pandas进行数据处理,numpy进行数值计算,seabornmatplotlib进行数据可视化,以及datetime处理日期。

import pandas as pd
import numpy as np
import seaborn as sns
from datetime import datetime
import matplotlib.pyplot as plt

检查第一个数据集

上一节我们导入了必要的工具,本节中我们来看看第一个数据集。这个数据集包含了2018年8月的闪电数据,列包括日期、中心点地理坐标、纬度、经度和闪电次数。

以下是检查数据集的基本步骤:

  • 使用head()函数查看数据的前几行,了解数据结构。
  • 使用shape属性获取数据集的维度,即行数和列数。

运行这些函数后,我们发现数据集有717,530行和5列,其中包含了我们预期的纬度和经度列。我们将这个数据框保存为df


检查第二个数据集

接下来,我们查看第二个数据集。这个数据集同样来自2018年8月,但额外包含了邮政编码、城市、州名和州代码列。

以下是检查第二个数据集的步骤:

  • 同样使用head()函数预览数据。
  • 使用shape属性查看其维度。

我们发现,这个名为df_zip的数据框有323,700行和7列。这与第一个数据集的717,530行不一致,暗示数据可能存在问题。


合并数据集以识别差异

为了进一步探究,我们将两个数据框合并起来。使用merge函数,以“左连接”的方式,根据“日期”和“中心点地理坐标”列进行合并。

df_joined = df.merge(df_zip, how='left', on=['date', 'center_point_geom'])

合并后,我们查看新数据框df_joined的前几行,发现新增的列(如邮政编码、州名)中出现了NaN值,这表示数据缺失。


识别缺失数据

现在数据已经合并,我们可以系统地查找缺失值。我们将使用describe()info()函数来获取数据集的统计摘要和信息概览。

运行df_joined.describe()后,我们发现“闪电次数”被分成了number_of_strikes_xnumber_of_strikes_y两列,后者包含了缺失数据。

为了精确找到缺失值的总数,我们使用以下代码:

df_nulls = df_joined[df_joined['state_code'].isnull()]
print(df_nulls.shape)

这段代码筛选出state_code列为空的行,并打印其形状。结果显示有393,830行数据存在缺失。

此外,df_joined.info()提供的“非空计数”列,也清晰地指出了zip_codecitystatestate_code列存在大量缺失值。


可视化缺失数据的地理分布

识别出缺失数据后,我们通过可视化来理解其影响。地理分布图能帮助我们直观地看到缺失值主要集中在哪些区域。

首先,我们创建一个用于绘图的新数据框top_missing,它只包含纬度、经度和完整的闪电次数(number_of_strikes_x)列。我们按纬度和经度分组,并依据闪电次数的总和进行降序排序。

top_missing = df_joined[['latitude', 'longitude', 'number_of_strikes_x']].groupby(['latitude', 'longitude']).sum().sort_values('number_of_strikes_x', ascending=False).reset_index()

为了高效绘制包含数十万个点的地图,我们使用Plotly Express库。我们创建一个地理散点图,点的大小代表闪电次数。

import plotly.express as px

![](https://github.com/OpenDocCN/dsai-notes-pt1-zh/raw/master/docs/ggl-adv-dtanls-3/img/2be2cc643333a4cb7befe0d5c0557c59_2.png)

fig = px.scatter_geo(top_missing[top_missing['number_of_strikes_x'] > 300],
                     lat='latitude',
                     lon='longitude',
                     size='number_of_strikes_x',
                     title='缺失数据地理分布')
fig.update_geos(scope='usa') # 将地图范围限定在美国
fig.show()

生成的地图显示,大部分缺失数据点出现在美国边境线上或水域(如海洋、湖泊、墨西哥湾)上空。这解释了为什么这些点的“州”和“邮政编码”信息会缺失——水域没有对应的邮政编码。同时,地图上也显示陆地上存在一些缺失数据点,这类情况可能需要向数据提供方NOAA进一步核实。


总结

本节课中,我们一起学习了在Python中处理缺失数据的完整流程。我们从导入库和检查两个独立的数据集开始,通过合并它们发现了行列数的不一致。接着,我们使用isnull()describe()info()等函数精确地识别并量化了缺失数据。最后,我们通过创建地理可视化图表,直观地发现了缺失数据主要集中在水域上空这一“隐藏的故事”。这个过程表明,数据清洗不仅是技术性工作,更是探索和发现数据深层信息的重要环节。

021:数据专业人员的日常 👨‍💻

在本节课中,我们将跟随谷歌云的客户工程师雷米,了解数据分析和机器学习领域专业人士的日常工作内容、所需技能以及职业发展建议。


大家好,我是雷米,是谷歌云的一名客户工程师。

客户工程师是指在某个技术领域(对我来说是数据分析和机器学习)具备专长的人。他们是该领域的专家,负责帮助客户解答问题并构建与数据分析相关的解决方案。

在进入当前领域之前,我从事过大约30种不同的工作。我曾是收银员、接待员、鸡尾酒服务员和办公室助理。坦率地说,我在那些工作中表现得并不出色。如果某项工作重复性很强,我就无法集中注意力,最终会犯一些愚蠢的错误。这也正是数据科学的魅力所在:许多繁琐和重复性的任务都由软件代劳,你可以编写脚本来自动化处理。

客户工程师的日常工作绝对没有固定模式。我通常以查看电子邮件开始一天的工作。我经常会收到来自客户或同事的、与数据相关的问题,我可以帮忙解答。同时,我也会收到大量关于新功能、产品或技术的信息邮件。我必须阅读并学习这些内容,因为我的职责就是成为为客户了解所有这些信息的人。

我通常还会参加一些会议,与我们的客户经理和客户团队合作,共同制定策略,思考如何帮助客户,并引导他们使用我们的工具实现新的目标。

我最近研究的一个新功能与我们的数据仓库BigQuery相关。你实际上可以在BigQuery内部创建机器学习模型,而无需将数据移动到任何其他地方。我有许多客户使用BigQuery机器学习,因此我现在可以去找他们,分享这个新功能,并向他们展示其实际工作原理。如果他们在使用过程中遇到问题,比如出现某种错误,我可以帮助他们排查故障。

数据领域的发展日新月异,而且本身也是一个新兴领域,这很容易让人感到不知所措。我从事这个行业已近十年,但每天仍会感到压力。你能做的最好的事情就是:选择一个软件、一门语言,或者一个特定领域,然后专注于它。先精通一件事,再以此为基础向外扩展。


本节课中,我们一起学习了数据专业人员(以客户工程师为例)的典型职责,包括技术支持、知识更新、客户协作与问题解决。雷米也分享了她从多样化职业背景转型到数据领域的经历,并给出了宝贵的建议:面对海量信息,初学者应专注于一个具体的工具或领域,先建立深度,再拓展广度。

022:异常值处理策略 🎯

在本节课中,我们将要学习数据分析中的一个核心概念:异常值。我们将探讨什么是异常值,为什么识别它们至关重要,以及三种主要的异常值类型。理解这些内容将帮助你更准确地解读数据,并做出更明智的分析决策。


什么是异常值?

小时候,你是否玩过一种益智游戏,需要在一张图片中找出一个不属于其中的物体?有时这个物体很明显,但有时可能很难发现。

例如,给你一张熙熙攘攘的集市图片,里面满是售卖水果、蔬菜和谷物的人,你可能需要花些时间才能找到那个摆放位置不正确的商品。这类似于处理未经清洗的数据,可能会非常具有挑战性。

数据乍一看可能很有条理,但通常很难判断是否存在某些与其他数据点有显著差异的数据点。这些极端的数据观测值,即那些脱颖而出的数据点,被称为异常值

异常值是指与数据总体中其他值或整体模式存在异常距离的观测值。


为什么识别异常值很重要?

上一节我们介绍了异常值的概念,本节中我们来看看为什么识别它们对数据专业人员如此重要。

作为一名数据专业人员,你必须充分了解数据集中每个变量的起始点、终点、高点、低点以及极端点。这些值通常就是你的异常值。识别它们、了解它们的数值和位置至关重要。否则,它们很可能会扭曲你从中得出的任何结论或建立的任何模型。


三种主要的异常值类型

以下是三种主要的异常值类型,我们将在本节中逐一探讨。

  • 全局异常值:这些值完全不同于整体数据组,并且与其他任何异常值没有关联。它们可能是错误、录入错误,或者只是数据集中通常看不到的极端值。

    • 示例:假设我们有一组人类身高数据:[1.7, 1.9, 1.6, 1.8, 7.9, 1.8, 1.7](单位:米)。其中的异常值 7.9 非常明显。通常,为了建立预测模型,全局异常值应该被剔除。
  • 上下文异常值:这些数据点在特定条件下是正常的,但在大多数其他条件下会成为异常。它们更常见于时间序列数据中。

    • 示例:电影票房在影片首映时通常很高。但如果一部电影在十年后票房突然激增,这通常会被视为异常或上下文异常值。
    • 另一个示例2.5 米对于“哺乳动物身高”这个类别来说可能是一个正常值。但如果发现这只哺乳动物是一只老鼠,我们很可能会认为这是一个异常值,尽管它符合其他哺乳动物的身高范围。
  • 集体异常值:这是一组遵循相似模式、并与总体其他部分隔离的异常点。

    • 示例:想象一个商店的停车场。在商店营业期间,车辆和摩托车持续进出是很常见的。但在商店关门后,停车场却停满了车,这就会被视为一个集体异常值。这可能是因为附近有公司聚会或当地活动,从而解释了商店停车场在非营业时间停满车这一异常情况。

如何发现和处理异常值?

我们已经讨论了三种异常值类型,接下来我们看看如何发现它们,以及在数据分析中应如何处理。

发现这些不同类型异常值的一个有效方法是我们已经多次讨论过的:数据可视化。当我们将数据绘制在线图或条形图上时,更容易看到数据中的大幅下跌或巨大波动。

无论你如何发现数据中包含全局、上下文还是集体异常值,你的探索性数据分析都必须包含处理它们的策略。你需要决定如何表示这些异常值,或者是否需要完全移除它们。这个决定必须始终结合数据集本身和数据的业务目标来做出。

正如其他视频中提到的,作为数据专业人员,在处理异常值时,必须始终考虑所做决定的伦理影响。为了提高结果、预测或预报的准确性而移除异常值可能很诱人,但你需要问自己:这改变了数据故事吗?


一个实际案例

让我们通过一个实际案例来理解处理异常值的考量。

假设你是一家零售企业的数据专业人员。你审查了两年的销售数据,发现有一个月,一款通常很受欢迎的商品销量急剧下降。你最初可能认为报告数据有误,但作为一名尽职的数据专业人员,你对此提出了疑问。你发现,在那个月,几位顶级销售人员正在休假,并且你的公司宣传了一款新产品,这减缓了现有商品的销售。很可能是这两个问题共同导致了销量下降,而不是简单地将销量下降视为异常值而忽略。

这些信息对业务团队很有帮助。利用这些信息,管理者可以在未来产品发布前,通过增聘销售人员或限制关键时期的员工休假申请,来防止销售数字再次下滑。


总结

本节课中,我们一起学习了数据分析中的异常值处理。我们定义了异常值,并理解了识别它们对于避免分析偏差的重要性。我们详细探讨了三种异常值类型:全局异常值上下文异常值集体异常值。最后,我们讨论了通过可视化发现异常值的方法,并强调了在处理异常值时需要考虑业务背景和伦理影响,而不是简单地移除它们。在后续课程中,你将学习如何在 Python 中查找和处理异常值。

023:Python识别与处理异常值 📊

在本节课中,我们将学习如何使用Python识别和处理数据集中的异常值。我们将以美国33年间的闪电总数数据为例,通过计算统计指标、绘制可视化图表以及应用统计规则来定位和分析异常值。


概述

异常值是数据集中显著偏离其他观测值的点。它们可能由测量误差、数据录入错误或真实的极端事件引起。识别和处理异常值是数据清洗和准备过程中的关键步骤,能确保后续分析的准确性。

上一节我们介绍了异常值的概念类型,本节中我们来看看如何在Python中实际操作。


导入库与数据

首先,我们需要导入必要的Python库并加载数据。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

我们将使用NOAA的闪电数据集,并按年份(1987-2020)汇总美国的总闪电次数。

# 假设df是已加载的包含'year'和'number_of_strikes'列的数据框
df = pd.read_csv('lightning_data.csv')
df_grouped = df.groupby('year')['number_of_strikes'].sum().reset_index()

数据预览与格式化

查看数据的前几行有助于了解其结构。闪电总数数值较大,为了方便可视化,我们将其格式化为更易读的形式。

以下是创建格式化函数的步骤:

def readable_numbers(num):
    """
    将大数字格式化为带‘M’(百万)或‘K’(千)后缀的易读字符串。
    """
    if num >= 1_000_000:
        return f'{num / 1_000_000:.1f}M'
    elif num >= 1_000:
        return f'{num / 1_000:.1f}K'
    else:
        return str(num)

# 应用函数
df_grouped['number_of_strikes_readable'] = df_grouped['number_of_strikes'].apply(readable_numbers)
print(df_grouped.head())

计算均值与中位数

均值是数据的平均值,中位数是排序后位于中间的值。比较两者可以初步判断数据分布的偏斜情况。

mean_value = df_grouped['number_of_strikes'].mean()
median_value = df_grouped['number_of_strikes'].median()

print(f"均值: {readable_numbers(mean_value)}")
print(f"中位数: {readable_numbers(median_value)}")

如果均值小于中位数,数据可能向左(较小值方向)偏斜,提示我们应关注分布左侧的潜在异常值。


使用箱线图可视化异常值

箱线图能清晰展示数据的分布和异常值。它将数据分为四个四分位数,并标出落在1.5倍四分位距之外的点。

以下是绘制箱线图的代码:

plt.figure(figsize=(10, 6))
sns.boxplot(x=df_grouped['number_of_strikes'])
plt.title('闪电总数箱线图')
plt.xlabel('闪电次数')
plt.show()

在图中,箱体(蓝色矩形)代表四分位距(IQR),其外的单独点即为潜在的异常值。


计算异常值阈值

根据统计规则,任何低于 Q1 - 1.5 * IQR 或高于 Q3 + 1.5 * IQR 的数据点通常被视为异常值。

以下是计算下限(寻找较小异常值)的步骤:

Q1 = df_grouped['number_of_strikes'].quantile(0.25)
Q3 = df_grouped['number_of_strikes'].quantile(0.75)
IQR = Q3 - Q1

lower_limit = Q1 - 1.5 * IQR
print(f"异常值下限: {readable_numbers(lower_limit)}")

识别与审查异常值

根据计算出的下限,我们可以筛选出数据集中所有低于此阈值的年份。

outliers = df_grouped[df_grouped['number_of_strikes'] < lower_limit]
print("识别出的异常值年份:")
print(outliers[['year', 'number_of_strikes_readable']])

为了更直观地观察异常值与整体数据的关系,我们可以绘制散点图。

# 为每个点添加标签和颜色
def add_labels(x, y):
    for i, txt in enumerate(y):
        plt.text(x[i], txt, txt, ha='right')

colors = ['red' if val < lower_limit else 'blue' for val in df_grouped['number_of_strikes']]

plt.figure(figsize=(16, 8))
plt.scatter(df_grouped['year'], df_grouped['number_of_strikes'], c=colors)
plt.xlabel('年份')
plt.ylabel('闪电次数')
plt.title('年度闪电总数散点图(红色点为异常值)')
plt.xticks(rotation=45)
add_labels(df_grouped['year'], df_grouped['number_of_strikes_readable'])
plt.show()

深入调查异常值原因

识别出异常值后(例如1987年和2019年),需要调查其产生原因。这可能是数据记录不完整或真实极端事件所致。

以下是检查2019年数据月份的示例:

# 加载2019年原始日度数据
df_2019 = df[df['year'] == 2019].copy()
df_2019['date'] = pd.to_datetime(df_2019['date'])
df_2019['month'] = df_2019['date'].dt.month
df_2019['month_text'] = df_2019['date'].dt.strftime('%b')

monthly_totals_2019 = df_2019.groupby('month_text')['number_of_strikes'].sum()
print(monthly_totals_2019)

如果发现2019年只有12月有数据,而其他月份缺失,那么这个异常值可能是由于数据记录不完整造成的,在分析时应考虑排除。相比之下,如果1987年每月都有数据但总数极低,则可能是一个真实的极端年份,应保留但需在分析中注明。


排除异常值后的数据

处理异常值的一种方法是将其从数据集中移除,然后重新计算统计量,观察数据分布的变化。

df_no_outliers = df_grouped[df_grouped['number_of_strikes'] >= lower_limit]

new_mean = df_no_outliers['number_of_strikes'].mean()
new_median = df_no_outliers['number_of_strikes'].median()

print(f"排除异常值后的均值: {readable_numbers(new_mean)}")
print(f"排除异常值后的中位数: {readable_numbers(new_median)}")

排除异常值后,均值和中位数通常会更加接近,表明数据分布更为对称。


总结

本节课中我们一起学习了在Python中识别和处理异常值的完整流程。我们从计算基本的统计指标(均值、中位数)开始,利用箱线图进行可视化,并应用 1.5倍IQR规则 来量化异常值阈值。通过识别出特定年份(如1987和2019)后,我们进一步深入调查了数据背后的原因,并学会了根据异常值的性质(数据错误还是真实事件)决定是排除还是保留它们。最后,我们看到了排除异常值如何使数据分布更加均衡。掌握这些技能对于进行可靠的数据分析至关重要。

024:分类数据的数值化处理 🧮

在本节课中,我们将学习如何处理数据集中常见的分类数据。分类数据使用文字或类别而非数字来表示信息,这可能导致许多数据分析模型和算法无法直接处理。我们将探讨两种将分类数据转换为数值数据的主要方法:创建虚拟变量和标签编码。

什么是分类数据?📊

上一节我们介绍了课程背景,本节中我们来看看什么是分类数据。

分类数据是指被划分为有限数量定性组别的数据。例如,人口统计信息通常是分类数据,如职业、种族和教育程度。分类数据条目通常可以快速识别,因为它们通常用文字表示,并且可能取值的数量有限。

许多数据模型和算法处理分类数据的效果不如处理数值数据。因此,将分类数据转换为数值数据通常是了解数据集中分类值分布的最快、最有效的方法。

将分类数据转换为数值数据 🔄

上一节我们了解了分类数据的定义,本节中我们来看看如何将其转换为数值形式。

将分类数据转换为数值数据对于预测、分类、预测等任务通常至关重要。有多种方法可以实现这种转换,在本视频中,我们将重点介绍两种常见方法:创建虚拟变量和标签编码。

方法一:创建虚拟变量

以下是创建虚拟变量的核心概念和步骤。

虚拟变量是取值为0或1的变量,用于表示某个类别是否存在。你可以将其理解为:1代表“是”,0代表“否”。

在已创建虚拟变量的数据集中,对于任何被确定为“轻度”的值,相应列中会输入1。该列中的所有其他值则标记为0。其他类别和值也遵循相同的规则。

虚拟变量在统计模型和机器学习算法中特别有用。

方法二:标签编码

以下是标签编码的核心概念和步骤。

标签编码是一种数据转换技术,其中每个类别被分配一个唯一的数字,而不是一个定性值。

例如,假设你有一个关于蘑菇的数据集,其中有一列名为“类型”,选项包括:黑松露、克里米尼、杏鲍菇、纽扣菇、刺猬菇、羊肚菌、波特贝罗菇、毒鹅膏或茶树菇。

你可以使用标签编码将每种蘑菇类型转换为一个数字:

  • 黑松露变为 0
  • 纽扣菇变为 1
  • 克里米尼变为 2
  • 刺猬菇变为 3
  • 杏鲍菇变为 4
  • 羊肚菌变为 5
  • 波特贝罗菇变为 6
  • 茶树菇变为 7
  • 毒鹅膏变为 8

为何要进行数值化转换?🤔

上一节我们介绍了两种转换方法,本节中我们来探讨其重要性。

数据专业人员使用标签编码的原因如下:

  1. 简化操作:当所有数据都是数字时,清理、连接和分组数据会简单得多。
  2. 节省空间:数值数据通常占用更少的存储空间。
  3. 提升性能:当我们花时间将分类数据转换为数值数据时,算法或模型通常运行得更顺畅。

例如,假设你尝试使用蘑菇数据集运行一个预测模型,该模型试图预测新引入数据的蘑菇是波特贝罗菇的百分比概率。如果我们不先执行标签编码就尝试创建模型,该预测模型将无法运行。

当然,也会存在一些你不想执行标签编码的模型或算法。让业务需求指导你是否需要执行标签编码。

总结 📝

本节课中我们一起学习了如何处理分类数据。我们了解到,分类数据以文字形式存在,而许多分析工具需要数值输入。因此,我们探讨了两种关键的转换技术:创建虚拟变量(用0/1表示类别存在与否)和标签编码(为每个类别分配唯一数字)。

选择哪种模型或算法将决定你是否需要进行标签编码。正如确保使用正确的手机充电器为手机充电一样,作为数据专业人员,你需要确保你的数据已准备好供模型或算法使用。

025:Python标签编码实现 🐍

在本节课中,我们将学习如何使用Python进行标签编码,将分类数据转换为数值数据,并利用这些数据创建直观的可视化图表。

概述

在之前的课程中,我们了解了标签编码的重要性,即将分类数据转换为数值数据。现在,我们将打开Python笔记本,学习如何具体实现这一过程。我们将继续使用NOAA的闪电计数数据,并专注于2016、2017和2018年的数据。

导入库与数据准备

首先,我们需要导入必要的Python库和包。

以下是本笔记本需要导入的库:

import datetime
import pandas as pd
import seaborn as sns
from matplotlib import pyplot as plt

接下来,我们开始处理数据。首先,将日期列转换为日期时间格式,这会使数据操作更加方便。

df['date'] = pd.to_datetime(df['date'])

然后,创建一个名为“Month”的列,就像我们之前所做的那样。我们将使用字符串切片功能,将月份名称缩短为前三个字母。

df['month'] = df['date'].dt.strftime('%b')

在处理这些数据时,确保月份名称按时间顺序排列会很有帮助。因此,我们定义了一个按顺序排列的月份组。

months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

在下一行代码中,我们使用pandas的Categorical函数,按照“month”列对“number_of_strikes”列进行分组。

df['month'] = pd.Categorical(df['month'], categories=months, ordered=True)

因为我们有三年的数据,所以还需要创建一个列出年份的列。为此,我们使用日期时间函数strftime

df['year'] = df['date'].dt.strftime('%Y')

最后,我们创建一个名为df_by_month的数据框,它首先按年份,然后按月份对闪电次数进行分组,并使用sum方法将每个月的闪电次数相加。

df_by_month = df.groupby(['year', 'month'])['number_of_strikes'].sum().reset_index()

当我们使用head函数查看数据框的顶部时,会得到前五行数据,列包括年份、月份和闪电次数。

创建分类变量与标签编码

现在,让我们创建一个用于分类变量的列,名为“strike_level”。在这个列中,我们将闪电总数分组或分桶到几个类别中:轻微、分散、严重和非常严重。这就是我们在Python中执行标签编码的方式。

以下是具体步骤:

df_by_month['strike_level'] = pd.qcut(df_by_month['number_of_strikes'],
                                        q=4,
                                        labels=['mild', 'scattered', 'heavy', 'severe'])

我们使用head函数来查看代码如何修改数据框df_by_month

为了将分类数据转换为数值数据,我们创建另一个名为“strike_level_code”的列。我们通过取“strike_level”列并添加.cat.codes来定义它。

df_by_month['strike_level_code'] = df_by_month['strike_level'].cat.codes

运行这个单元格后,我们发现“mild”被分配为0,“scattered”为1,“heavy”为2,“severe”为3。这就是我们执行标签编码的方式。

创建虚拟变量

处理分类数据的另一个有用方法是创建虚拟变量来表示这些类别。虚拟变量是值为0或1的变量,表示某物的存在或不存在。

在Python笔记本中,我们使用pandas的get_dummies函数来实现这一点。

dummy_df = pd.get_dummies(df_by_month['strike_level'], prefix='strike')

运行这个单元格后,你会发现这个函数创建了四个新列,并在任何一行中,如果闪电次数属于标记的类别,则在该行中放入1,否则为0。

数据可视化

现在我们有了分类数据、数值数据和虚拟变量的新列,让我们探索一下从这些分组中可能学到什么。为此,我们来绘制数据。

首先,我们创建一个名为df_by_month_plot的数据框。我们使用pandas的pivot函数来重塑数据框。

df_by_month_plot = df_by_month.pivot(index='year', columns='month', values='strike_level_code')

接下来,我们使用热图来可视化数据。热图是一种数据可视化类型,它基于两种颜色描绘实例或一组值的大小。

plt.figure(figsize=(12, 6))
sns.heatmap(df_by_month_plot, cmap='Blues', cbar_kws={'ticks': range(4)})
plt.title('Lightning Strike Severity by Month and Year')
plt.show()

通过热图,我们可以找到三年中所有月份中最严重的闪电月份。

总结

本节课中,我们一起学习了如何使用Python进行标签编码。我们首先准备了数据,然后创建了分类变量并进行了标签编码,接着生成了虚拟变量,最后通过热图可视化了数据。标签编码是数据专业人员的一项基本技能,通过Pandas和Seaborn,只需几行代码就可以实现数据的转换和可视化。

026:输入验证的价值 🥬

在本节课中,我们将学习探索性数据分析中的一个核心实践:输入验证。我们将了解它的定义、重要性、执行时机以及需要关注的关键问题。通过将数据比作烹饪中的蔬菜,我们将直观地理解为何在分析的每个阶段都需要反复检查数据。


输入验证的定义与重要性

上一节我们介绍了探索性数据分析的框架,本节中我们来看看其中一个关键实践:输入验证。

当思考输入验证以及EDA中的连接实践时,我喜欢将其比作蔬菜。请允许我解释。

在市场上挑选绿叶蔬菜和根茎类蔬菜时,你首先会检查它们是否新鲜,对吗?不仅在商店里检查,回家放入冰箱后也会检查,并且在烹饪食用前很可能还会再次确认它们是否仍然可食用。

最后,如果蔬菜因某些原因变质,或者你为某个食谱购买的数量不足,你就需要添加更多。对数据集执行EDA类似于检查蔬菜的新鲜度。你是在搜索、探索并检查数据,使其尽可能没有错误。

你应该反复检查你的数据集,以确保它们是正确的。正如我之前提到的,作为数据专业人士,你应该彻底了解你的数据集。确保你了解数据集的一种方法是验证它,正如你所记得的,这是EDA的六大实践之一。

输入验证是彻底分析和双重检查以确保数据完整、无错误且高质量的做法。输入验证旨在成为一种迭代实践,这意味着你应该在EDA的其他五个实践(发现、结构化、清理、连接和呈现)之间和之中反复执行它。


何时进行输入验证

通常,作为数据专业人士,你会在开始新的分析项目或熟悉新的数据源时执行输入验证。

我们将在课程后面更多地讨论如何执行输入验证。现在,我们将重点关注原因和内容。

我们为什么要花时间验证数据?我们到底在寻找什么?

当我们验证数据时,我们有助于做出更准确的业务决策,并提高复杂模型的性能。这样想:如果一位美食厨师在烹饪菜肴前不双重检查蔬菜的新鲜度,食物可能会很难吃,或者更糟,让人生病。数据也是如此。

在EDA过程中,每次操作数据后,我们越仔细地检查和重新检查数据,以后出现问题的可能性就越小。干净且经过验证的数据有助于防止未来的系统崩溃、编码问题或错误预测。


验证时需要关注什么

那么,在执行验证工作时,我们在寻找什么呢?没有两个数据集是相同的。根据类型,需要检查的事项会有所不同。

以下是验证数据时需要考虑的一些问题:

  • 数据格式是否统一? 例如,人们的年龄是表示为单一数字(如23和47),还是在一个范围内(如18至35岁和35至50岁)?
  • 数据范围是否一致? 例如,在金融领域,有些值是以千欧元表示,而另一些是以百万欧元表示吗?
  • 数据类型是否一致? 例如,所有日期条目是否都以相同的格式(月、日或年)表示?

在提出这些问题或执行EDA时,你可能会发现,你获得的数据不足以回答你所承担的业务问题。


连接实践与验证的关系

例如,让我们回到视频前面所做的与美食厨师及其蔬菜的比较。想象一下,这位美食厨师正在为他们的餐厅推出一道新食谱。他们不确定这道新菜需要多少蔬菜。最终,厨师在那天进行到一半时意识到,他们没有考虑到纯素和素食菜肴中需要使用的额外蔬菜。正是在那个时候,厨师会购买更多蔬菜。

EDA中的连接实践与上述原则非常相似。正如你所学的,连接不同于结构化技术中的合并。在提出这些问题或执行EDA时,你可能会发现,你获得的数据不足以回答业务问题。连接是通过添加其他数据集的值来扩充数据的过程。

如果我们验证数据以确保格式和数据条目对齐且属于相同的数据类型,那么连接实践将最为有用。例如,在添加新蔬菜时,厨师会希望确保其质地和味道与他们全天使用的蔬菜相似,否则,菜肴可能无法达到相同的效果。


实践中的思考与协作

你需要运用自己的逻辑、常识和经验来理解应如何连接或验证你处理的每个特定数据集。不会有严格的流程来详细告诉你如何处理每个数据文件。数据科学需要大量的分析性思维和视角转换,以便在EDA和验证中做到彻底。经验和努力将是提高你分析性思维表现的最佳方式。我们也将在Python笔记本中探索示例。

让你的验证实践与PACE工作流程保持一致,也将有助于你专注于道德规范。验证应该是为了质量和正确性而清理和纠正数据。你可能不会惊讶地发现,EDA的验证实践完全符合我们PACE工作流程的分析阶段,但它也是你应该在所有四个阶段都使用的实践。

记住,PACE代表计划、分析、构建和执行。这意味着我们连接和验证数据的内容和方式应与工作流程的计划阶段保持一致。例如,如果你的任务是发现给定月份中哪一周对业务最有利,那么检查和重新检查你是否正确地将收入日期按周分组将非常重要。如果你以为自己按周对收入进行了分组,但实际上却是按天或按月进行的,那么你的分析将是无效的。

当你以这种详细程度验证数据时,它将帮助你实现PACE目标,特别是构建和执行阶段的目标。


总结与建议

在结束之前,还有一件事可以帮助你处理EDA的验证和连接方面:向你的同事和经理寻求帮助。经过同行评审的数据集是确保你检查自身偏见、保持道德关注并确保遵循PACE工作流程的最佳方式之一。

记住,验证数据就像检查你的蔬菜,以确定它们是否是食谱的正确选择。前期可能需要额外的时间,但它可能会为你省去后续的麻烦和困扰。

在本节课中,我们一起学习了输入验证的核心价值。我们了解到,验证是一个迭代过程,旨在确保数据的质量与一致性,它贯穿于数据分析的始终,并与PACE工作流程紧密结合。通过像厨师挑选食材一样谨慎地对待数据,我们可以为后续的分析和决策打下坚实的基础。

027:Python输入验证实践 🐍✅

在本节课中,我们将学习如何在Python中执行输入验证。输入验证是数据分析中确保数据完整、无错且高质量的关键步骤。我们将以NOAA(美国国家海洋和大气管理局)的闪电数据为例,演示如何检查错误并为数据发布做好准备。


导入必要的库

首先,我们需要导入进行输入验证所需的Python库和包。

以下是需要导入的库:

import matplotlib.pyplot as plt
import pandas as pd
import plotly.express as px
import seaborn as sns

初步查看数据

导入所有库后,我们使用head函数来查看数据集的列和前五行数据。

df = pd.read_csv('your_lightning_data.csv')
df.head()

你会发现闪电数据集包含五列,其中第四和第五列分别是经度和纬度。


检查数据类型与转换

如果我们现在使用df.dtypes检查数据类型,会发现“日期”列是字符串类型。与之前一样,我们需要将其转换为日期时间格式。

df['date'] = pd.to_datetime(df['date'])

检查缺失值

输入验证应包括对缺失数据的检查。虽然我们可能在探索性数据分析的清理阶段已经做过,但验证过程本身意味着对已完成操作的复核,因此再次检查是必要且不冗余的。

df.isnull().sum()

运行代码后,我们确认数据集中确实没有缺失值。


审查变量范围

接下来,让我们审查所有变量的范围,即检查每列的最高值、最低值以及数值的整体分布。我们将使用describe函数。

df.describe(include='all')

在结果中,你可能会在“日期”列的均值、最小值、中位数和最大值等字段看到NaN值。这是正常的,因为日期不是可以进行平均计算的数据类型。


验证日期完整性

说到日期,让我们再次检查日期列,确认是否有任何日历日缺失。根据之前对此数据集的了解,日期列应包含每年的每一天。

我们通过创建一个完整的日历索引来验证。

full_date_range = pd.date_range(start='2018-01-01', end='2018-12-31')
missing_dates = full_date_range.difference(df['date'])
print(missing_dates)

结果发现,2018年有几天缺失:6月连续缺失4天,9月连续缺失2天,12月连续缺失2天。这个发现值得调查或向数据提供者询问原因。鉴于缺失天数较少,你可以在最终分析报告中注明这些缺失日期,以确保任何查看你可视化结果或报告的人都知道数据不包含这些日期。


理解闪电次数分布

完成初步验证后,让我们更好地了解闪电次数的范围。我们可以使用简单的箱线图进行可视化。

plt.figure(figsize=(10,6))
sns.boxplot(data=df, y='number_of_strikes')
plt.title('Distribution of Lightning Strikes')
plt.show()

你会发现分布非常偏斜:一年中大多数日子闪电次数少于5次,但有些日子超过2000次。为了更清晰地理解主要数据的分布,我们可以移除异常值。

plt.figure(figsize=(10,6))
sns.boxplot(data=df, y='number_of_strikes', showfliers=False)
plt.title('Distribution of Lightning Strikes (Without Outliers)')
plt.show()

结果更容易解读。根据我们对美国、墨西哥和加勒比海地区闪电的了解,这个分布是合理的。如果最高分布都集中在2000次以上,我们可能会更怀疑数据的真实性。


验证地理坐标

最后一项输入验证是确认数据集中包含的所有纬度和经度坐标都位于美国境内。这将确保我们的地理数据没有错误。

首先,我们创建一个新的数据框,移除所有重复的坐标点。

df_points = df[['latitude', 'longitude']].drop_duplicates()

我们移除重复点是因为不需要在地图上重复检查同一位置。运行代码后,我们得到一个只包含纬度和经度两列的新数据框,并且其中没有重复的数据点。

最后,我们将这些点绘制在地图上。一个提示是:当处理数十万个数据点在地图上绘制时,会消耗大量计算资源。为了缩短运行时间,我们使用plotly.express包,它旨在尽可能降低运行时间。

fig = px.scatter_geo(df_points, lat='latitude', lon='longitude')
fig.show()

运行单元格后,由于数据量巨大,运行时间可能仍然较长,但这能有效验证地理坐标的合理性。


总结

本节课中,我们一起学习了Python中输入验证的完整流程。我们从导入库、查看数据、检查数据类型和缺失值开始,接着审查了变量范围和日期完整性,然后通过可视化理解了数据分布,最后验证了地理坐标的有效性。大多数数据专业人士都会定期进行输入验证,因此这些是必须学习的重要概念和需要练习的关键技术技能。通过本教程,希望你能够掌握为数据集执行基本输入验证的方法,确保其质量与分析结果的可靠性。

028:将数据转化为洞察》 🎯

在本节课中,我们将学习如何应对复杂且混乱的数据集,并掌握一系列关键策略,以纠正错误并挖掘隐藏在数据深处的故事。我们将重点探讨数据清洗、连接与验证的探索性数据分析实践,并学习如何在Python中应用这些技术。


数据集常常是繁忙且混乱的,其中可能同时发生着许多不同的事情。因此,确定关注重点以及如何发掘埋藏在表面之下的故事可能非常困难。

在课程的这个部分,你学习了一些重要的策略,以帮助你纠正错误并发现隐藏的数据故事。我们通过学习和实践数据清洗、连接与验证的探索性数据分析方法,集中精力寻找数据中的故事。

我们讨论了许多参与这些实践的方法。我们的重点集中在处理缺失值和异常值、将分类数据转换为数值数据,以及进行输入验证上。同时,我们提醒自己不要忘记在Python中可视化数据,以进一步加深理解。

我们讨论了在Python中识别缺失数据和异常值的方法,以及从伦理和商业角度出发,为什么找到它们至关重要。我们思考了分类数据与数值数据之间的区别,以及为什么使用Python进行转换非常重要。

至于输入验证,你学习了它是什么、为什么重要,以及如何使用Python来执行它。在此过程中,我们还讨论了一些工作技能,例如理解何时需要就缺失值与利益相关者或其他领域专家进行沟通。

我们还回顾了在执行清洗、连接和验证工作时应考虑的伦理问题。你了解到,作为PACE工作流程的一部分,这些实践在执行数据集探索性数据分析时至关重要。探索性数据分析可以是一个激动人心的过程。

通过探索性数据分析,不仅能为后续流程节省时间和精力,还能帮助你发现数据中的趋势、模式和故事。稍后,你将学习如何使用Tableau在商业环境中设计和向关键利益相关者及业务经理展示数据可视化。

与此同时,你已经掌握了一些数据专业人士几乎每天都会使用的出色技能。在Python中对数据集进行细致的探索性数据分析的能力,是数据专业人士职业生涯中必不可少的基础。

到目前为止,你的工作做得非常出色。

029:模块4导论 🎬

在本节课中,我们将学习探索性数据分析(EDA)的最后一个实践环节——数据可视化与呈现。我们将探讨如何设计有效的可视化图表,并了解其在数据分析全过程中的作用。

我们已经进入了探索性数据分(EDA)呈现环节的最终实践部分。讨论可视化和呈现,并不一定意味着它们只出现在数据探索的末尾。在整个数据分析过程中,你随时都可能为自己的数据创建可视化图表。数据可视化的实践将帮助你发现洞察,并深化你自己的理解。EDA的呈现实践是PACE框架中“分析”和“执行”两个阶段的重要组成部分。有时,你会在“分析”阶段创建可视化图表来分析数据;而在其他时候,你会将数据可视化作为执行算法的一部分来使用。

在本视频中,我们将重点讨论为呈现目的而设计数据可视化。在本课程中,我们将讨论诸如可访问性、Tableau基础、仪表板和数据可视化等概念。

你可能在谷歌数据分析师认证课程中回忆起了其中一些概念。如果你愿意,可以在继续学习前花几分钟回顾一下相关内容。

接下来,你将学习如何提升你的数据可视化技能。数据的准确呈现是成功演示最重要的方面之一。你将学习制作能精确呈现数据的可视化图表的特定技巧。

设计成功数据可视化的另一个方面是确保其具有包容性。我们将讨论一些技巧和方法,使你的数据可视化能够被多样化的受众所理解。

你还将了解数据可视化平台Tableau。Tableau是一款多功能的数据可视化软件,主要用于向企业呈现数据以提供信息并改进业务。通过学习该软件,你将学会如何创建能够讲述故事、并向非技术受众解释技术概念的数据可视化。你将学会创建具有交互和动态元素的动态可视化,并能根据不同受众的需求调整可视化效果。

我们还将讨论如何选择合适的图形或图表,在演示过程中提供背景信息,以及在呈现时选择恰当的顺序和时机。

数据专业人员经常需要创建数据可视化并进行演示。这就是为什么我们将讨论帮助你在这个领域取得成功的最重要技能。毕竟,你希望你的受众理解你的数据故事。作为一名数据专业人员,你将有机会讲述能够改变你的团队、部门、公司、行业甚至世界的数据驱动型故事。

现在,让我们开始吧。


本节课总结

在本节课中,我们一起学习了探索性数据分析(EDA)中数据可视化与呈现环节的重要性。我们了解到可视化不仅用于最终报告,也贯穿于整个分析过程,是PACE框架中“分析”和“执行”阶段的关键部分。课程介绍了提升可视化技能的要点,包括数据的精确呈现图表的可访问性设计,以及使用Tableau软件创建动态、交互式图表的方法。最后,我们明确了选择合适图表、提供上下文以及把握呈现时机对于有效沟通数据故事至关重要。

030:可视化生命周期 🗺️➡️📊

在本节课中,我们将学习数据可视化的生命周期。我们将通过一个具体的案例,了解如何从一个原始数据集开始,经过多次迭代和调整,最终创建出符合业务需求、清晰易懂的可视化图表。我们将重点关注决策过程,例如如何选择图表类型、应用筛选条件以及优化图表格式。


数据可视化通常是一个迭代过程。你设计的第一个图表可能并非最终呈现给利益相关者的版本。图表的颜色、文本、标签、比例尺和重点强调区域等各个方面,都可能为了满足不同的业务需求而进行调整。

那么,我们如何得到最终的可视化成果?在这个过程中,我们应该做出哪些决策来创建一个成功的可视化图表?

为了回答这些问题,我们将选取一个样本数据集,创建一个数据图形。然后,我们将讨论如何在此过程中调整可视化方案。这将阐明数据专业人员在为演示创建图表时所做出的决策类型。

现在,让我们开始吧。


案例背景:欧洲租房应用 🏠

假设你正在开发一款新的应用程序,该程序旨在将欧洲评分最高的出租房源和公寓汇集到一个易于访问的平台。

你的公司要求你从收集希腊雅典的最佳出租房源开始。

你需要找出那些拥有40套或以上房源信息的房东,并定位其出租单元的地理位置。同时,你只关注那些拥有大量好评、且租金价格在90到250之间的房源。这有助于明确你所需的可视化类型。


第一步:确定图表类型与工具 🗺️

由于你需要定位拥有40套或以上房源的房东的出租单元位置,因此需要一个地理地图。

此外,你需要根据分析标准筛选房源数量,以创建出租房源位置的地图。像 Tableau 这样的程序将是最有效的工具。

如果你熟悉Tableau,可以尝试将此数据集导入Tableau Public并亲自操作。

以下是我们的初步计划:

  1. 从雅典的地图开始。
  2. 将所有出租房源绘制在该地图上。
  3. 使用筛选器移除不符合分析标准的房源(例如价格超出定义范围)。
  4. 最后,调整格式,使我们的地图易于理解和访问。

第二步:构建基础地图 📍

我们已知最终结果需要是一张希腊雅典的房源地图。

我们从数据中导入纬度和经度,并以房东姓名作为标签,将这些房源绘制在地图上。

将数据点添加到Tableau后,我们得到了一张希腊地图,但需要对其进行优化以提升可读性。


第三步:应用筛选条件 🔍

接下来,根据我们的分析标准,筛选掉不需要的房源。

以下是具体的筛选步骤:

  • 筛选房源数量:将结果范围缩小到仅包含拥有超过40套出租房源的房东。我们可以使用数据集中名为 calculated_host_listings_count 的列来实现,将数值限制为仅大于40的值。
  • 筛选价格:我们的标准包括价格在90到250之间的房源。应用此筛选后,房源数量变得更容易管理。
  • 筛选评论数量:我们只想保留拥有大量评论的房源。“大量”是一个相对概念,因此我们使用百分位数筛选器,仅显示总评论数排名前50%的房源。

应用这些筛选后,我们得到了一个合理数量的数据点。


第四步:优化与美化图表 🎨

现在,我们需要让图表更易于理解。

为此,我们添加一个标题,并为每个房源的房东添加颜色编码。同时,我们还为每个房源添加了价格标签。

此时,我们得到了一个符合标准的、可用的可视化图表。这是一个成功的初版。

然而,如果我们希望将此可视化图表用于正式演示,就需要确保其可访问性。

以下是优化可访问性的步骤:

  • 在图下方添加描述性标题。
  • 将标记点略微缩小,以便显示更多的价格标签。
  • 确保所使用的颜色对色觉障碍人士友好。

经过这些调整,我们得到了最终的可视化结果。


总结与核心要点 💡

本节课中,我们一起学习了数据可视化的生命周期。

可视化的目标是满足受众的需求。在我们的案例中,你通过雅典地图成功分享了出租房源房东的地理位置信息。

但需要记住,设计可视化是一个多步骤的过程。即使完成了一个可视化图表,有时也可能需要更新它。例如,如果应用程序的业务团队决定需要不同的数据显示方式,或者你想按社区查看房源列表,就需要更新可视化方案。

这里的要点是,最终的可视化结果可能并不总是完全符合业务需求。进行调整和修正错误,是整个过程中不可或缺的一部分。关键在于保持迭代思维,根据反馈和新的信息不断优化你的可视化作品。

031:Tableau实操第一部分 📊

在本节课中,我们将学习如何登录并使用Tableau Public的免费在线版本,构建基本的数据可视化图表,并理解不同图表类型的适用场景。我们将以NOAA闪电数据集为例,逐步创建折线图、条形图等可视化作品。


我们讨论了Tableau的强大功能和实用性。现在,准备登录并尝试使用它。

我们将讨论如何访问免费的在线版Tableau Public,构建基本的数据可视化,并理解何时使用各种图表。你可能在谷歌数据分析证书课程中记得其中一些概念,可以回顾该课程以快速复习。

访问Tableau Public时,其界面可能与本视频中显示的不同。请记住,Tableau Public可能已更新其用户界面。这应该不是问题,因为您遵循的步骤几乎相同。

首先,访问Tableau Public网站,这是您可以从浏览器访问的免费在线版Tableau。

登录您的Tableau Public账户。

接下来,您需要在Tableau Public中访问一个新的数据源。本视频我们将再次使用NOAA闪电数据集。

在Tableau Public主页上,选择“创建可视化”,然后使用为您提供的文件从计算机上传数据源。

数据上传后,您将被重定向到Tableau的数据源界面。数据集分为四列:日期、闪电次数、X坐标和Y坐标。这些字段名称的上方或旁边有符号,代表数据集中包含的数据类型。

日期列有一个日历图标,闪电次数列有一个井号(#)表示数值列,纬度和经度(即X和Y坐标)则有地球图标。

界面上还有代表新工作表、新仪表板和新故事的选项卡。创建一个新工作表。

Tableau Public中的工作表是一个数据页面,包含数据可视化的单一视图。新工作表除了数据列外是空白的。

工作表的数据源字段已预加载了我们在数据源页面识别的列标题。一条细线将列表分为两部分,这指示了数据类型以及数据是离散的还是连续的。

Tableau将所有数据字段分为两大类数据类型:维度和度量。您可以根据Tableau分配给每个字段的图标来区分它们。

维度是用于分类和分组数据以揭示其细节的定性数据值。度量是可以聚合或用于计算的数值。

Tableau工作表数据选项卡中维度和度量列表的绿色和蓝色表示另一个方面。绿色表示数据字段是连续的。蓝色表示字段是离散的。

术语“连续”是一个数学概念,表示度量或维度具有无限且不可数的结果数量。“离散”也是一个数学概念,表示度量或维度具有有限且可数的结果数量。

通过这些定义,我们甚至可以在将数据绘制到图表之前就了解数据字段列表。

😡 请记住,Tableau可能会分配错误的数据类型。如果数据类型与其标签不匹配,您始终可以通过右键单击数据字段将数据从度量更改为维度,或从离散更改为连续。


上一节我们介绍了Tableau的数据类型和界面基础,本节中我们来看看如何创建第一个可视化图表:折线图。

折线图对于呈现时间序列数据或跟踪不同时间段内数据值的变化非常有用。

首先,将“日期”字段拖放到列功能区。在显示的弹出窗口中,您可以选择不同的时间片段。对于此图表,选择“年”。

接下来,将“闪电次数”字段拖放到行功能区。您现在就有了一个折线图。

现在,您知道了如何创建折线图。接下来,我们将创建一个条形图。


当您想要比较不同时间段的数据时,条形图非常有用。首先,使用工具栏复制您的工作表到新工作表。

在新工作表中,打开“标记”卡的下拉菜单,选择“条形”。更改数据可视化类型就是这么简单。

😡 接下来,让我们创建一个条形图来比较两个数据集。

转到“筛选器”选项卡并编辑筛选器。勾选2009年和2018年,其他年份保持未勾选状态。您将看到2009年和2018年闪电总次数的比较。

接下来,通过将“闪电次数”拖到“标记”卡中名为“标签”的方框上,为每个条形添加标签。

现在我们知道2009年和2018年闪电次数的确切差异了,分别是3010万次和4460万次。


对于最后一个可视化,让我们按季度比较2009年和2018年的数据。首先,再次复制工作表。😡

将“日期”拖到列功能区。Tableau会自动将季度添加到堆叠条形中,为两年划分出Q1、Q2、Q3和Q4。

为了使每个季度的并列比较更加突出,将“日期”拖到“标记”卡中的“颜色”方框上。颜色将根据年份进行调整,2009年使用原始颜色,2018年使用不同颜色。

您可以保持图表原样,或者点击下拉箭头并选择“季度”。现在,季度通过不同颜色进行分段。要确定配色方案,请决定您是想突出季度之间的差异还是年份之间的差异。

您开始发现Tableau有多么有用了。通常,数据专业人员将Tableau用于他们的探索性数据分析工作,因为它能帮助他们快速创建数据可视化。很快,您也能做到这一点。


本节课中我们一起学习了如何访问Tableau Public、理解其数据分类(维度与度量、连续与离散),并动手创建了折线图和用于比较分析的条形图。通过这些基础操作,您已经迈出了将原始数据转化为直观洞察的第一步。

032:Tableau实操第二部分

在本节课中,我们将学习如何在Tableau Public中创建更复杂的数据可视化图表,包括热力图、箱线图和直方图。我们还将学习如何在可视化设计中输入计算和编写代码。


🗺️ 创建地理地图

上一节我们介绍了Tableau的基础操作。本节中,我们来看看如何利用经纬度数据创建地理地图。

首先,在Tableau Public中新建一个可视化,并上传NOAA闪电数据集。数据源页面包含日期、经度、纬度和闪电次数等列。

打开一个新的工作表以创建地理地图。这需要Tableau能用来绘制点的经纬度数据。

  1. 将“经度”从数据列表拖拽到“列”字段区域。
  2. 将“纬度”拖拽到“行”字段区域。

现在,我们得到了一张基础地图。接下来,过滤数据以减少需要处理的数据点。

  1. 将“日期”拖拽到“筛选器”区域,并从下拉菜单中选择“年”。
  2. 配置筛选器,仅选择2018年。

然后,使用颜色渐变来帮助区分地图上闪电密集区域和分散区域。

  1. 将“闪电次数”拖拽到“标记”卡下的“颜色”框中。
  2. 在“标记”卡的下拉菜单中,确保“密度”被选中。

此时地图效果更佳。默认颜色是蓝色,浅蓝色表示闪电较分散,深蓝色表示2018年闪电较密集的区域。要更改颜色,点击颜色方块,将其从“自动”更改为其他选项。可以尝试一两种,并考虑哪种颜色方案对你和可能有视觉障碍的观看者来说最易读。


🔥 创建热力图

在之前的视频中我们讨论过,热力图是一种用两种颜色描绘实例或一组数值大小的数据可视化。

要在Tableau Public中创建热力图,你需要一个或多个维度或一两个度量来开始。

  1. 将“日期”拖拽到“行”字段,并选择“年”。
  2. 需要创建一个从日期字符串中提取月份的计算字段。在“日期”下拉菜单中,点击“创建”并选择“计算字段”。
  3. 在弹出的窗口中,为计算字段命名,例如输入“月份”。
  4. 使用LEFT函数从“日期”列的字符串中提取月份名称的前三个字母。公式为:LEFT(DATENAME('month', [Date]), 3)。点击“确定”。

现在,左侧数据列表中会出现一个新字段。

  1. 将新建的“月份”字段拖拽到“列”字段区域。
  2. 将“闪电次数”拖拽到“标记”卡下的“颜色”方块中。确保在“标记”卡下拉菜单中选中了“方形”。

现在你得到了一个热力图。与密度图类似,此热力图的默认颜色也是蓝色。你可以根据需要调整热力图的颜色范围。创建可视化时,请记住考虑可访问性。


📦 创建箱线图

从之前的视频中你会记得,箱线图是一种描绘数据四分位数内数值组的集中趋势、离散程度和偏态的数据可视化。

你已学过如何在Python中创建箱线图。要在Tableau Public中创建箱线图:

  1. 首先将“日期”拖拽到“行”字段区域。
  2. 然后将“闪电次数”拖拽到“列”字段区域,并选择“年”。
  3. 如果Tableau没有默认显示箱线图,在“标记”卡的下拉菜单中选择“圆”,然后滚动到“智能显示”选项卡,选择“盒须图”。

目前看到的内容不多,只是一条细线数据点。然而,一旦你将“日期”拖拽到“标记”卡下的“详细信息”方块中,并选择“天”,箱线图就会完整地显示出来。

对于箱线图,大多数数据专家会为中位数和均值添加参考线或注释以便展示。当然,你也可以使用“标记”卡下的“颜色”和“大小”方块来更改此箱线图中圆的颜色和大小。


📊 创建直方图

我们要创建的最后一个复杂图表是直方图。直方图是一种近似表示数据集中数值分布情况的数据可视化。

要创建直方图,首先需要创建数据桶。“数据桶”是Tableau术语,指数据值可以被分组进去的自定义数据段。数据桶是直方图的重要组成部分,因为分组决定了数据如何被分割和比较。

对于闪电数据直方图,需要将闪电总次数分组到数据桶中。

  1. 点击“闪电次数”的下拉箭头,选择“创建”,然后选择“数据桶”。
  2. 可以为数据桶命名,然后确定其大小。如果选择大小为50,则每50次闪电会有一个数据桶,1到50之间的任何值都将包含在该桶中。
  3. 由于有数百万个闪电次数值,你应该选择一个介于5到10之间的数字作为桶大小。这将更详细地显示数值的分布。

接下来:

  1. 将新建的数据桶字段拖拽到“列”字段区域。
  2. 将“闪电次数”拖拽到“行”字段区域。确保行中的“闪电次数”是计数(CNT)而不是求和或平均值,这表示每个数据桶的实际计数。
  3. 为了获得更多细节,将“闪电次数”拖拽到“筛选器”区域,并将数值限制在1到200之间。
  4. 将“闪电次数”拖拽到“标记”卡下的“标签”方块中。确保它设置为“计数”。

你可以调整颜色以使数据可视化更易于访问。


🎯 总结

本节课中,我们一起学习了在Tableau Public中创建四种复杂的数据可视化:地理地图、热力图、箱线图和直方图。我们掌握了如何利用数据字段、筛选器、颜色标记以及创建计算字段和数据桶来构建这些图表,并始终考虑了图表的可访问性。

接下来,你将学习如何创建一系列用于演示的数据可视化。我们下节课再见。

033:探索数据的可能性 🔍

在本节课中,我们将跟随谷歌预测建模专家德鲁,学习如何从理解数据开始,逐步深入分析,并最终将数据洞察有效地传达给客户。课程将涵盖探索性数据分析的重要性、从数据思维到客户思维的转变,以及有效沟通数据洞察的策略。


从会计师到数据分析师:我的旅程

上一节我们介绍了课程概述,本节中我们来听听德鲁的个人经历。德鲁最初学习并从事了约七年的会计工作。在金融领域工作的人通常非常擅长使用Excel,德鲁也不例外。他不断提升自己的Excel技能,并开始接触各种公式。对公式的深入探索引导他走向了编程,而编程又将他引向了数据分析领域。

探索性数据分析:一切的基础

在掌握了基本工具后,数据分析的第一步至关重要。探索性数据分析是数据科学的一切基础。在不首先理解数据的情况下,你无法进行任何分析。

以下是进行探索性数据分析的关键步骤:

  • 首先,你需要深入数据,真正理解每一个变量是什么。
  • 其次,观察数据的分布情况。
  • 然后,查看初步的相关性。

在完成这些基础工作后,你可以开始进行更深入的分析,例如建立解释性模型,以研究更长期的相关性以及多个变量之间的多重相关性。

案例研究:洞察的价值

理解了数据分析的基础后,我们通过一个实际案例来看看洞察如何产生价值。德鲁记得一个与客户合作的项目,该客户在“独占媒体”上投入了大量资金。这种媒体形式需要巨额投资,其效果是在一天内屏蔽所有其他竞争对手的媒体曝光,让用户注意力集中在该客户身上。

然而,分析发现,“独占媒体”的投入与最终的转化率之间并没有明显的反应关系。因此,团队需要向客户传达这个发现。他们的做法是,首先找出客户可能提出的所有潜在反对意见。在获得这些输入后,团队构建了一个叙事方式。这个叙事不是简单地否定客户当前的做法,而是具有建设性的,并为客户指明了前进的方向。

传达数据洞察:从数据思维到客户思维

从上述案例可以看出,仅仅有分析结果是不够的。在传达数据相关的信息时,从数据思维转向客户思维至关重要。你需要将数据分析中学到的见解,与客户实际能如何运用这些见解结合起来。

以下是一些有效的沟通策略:

  • 使用可视化:我们大量使用视觉化工具,尝试融入那些既简洁又能有效传达信息的图表。
  • 运用幽默:幽默是吸引人的好方法,它能让信息更令人难忘。
  • 讲述个人故事:个人故事能帮助你快速向他人传达观点。

德鲁的一位教授曾告诉他,你只有大约30秒的时间与人有效沟通,之后他们就会停止集中注意力。因此,你需要确保在这段时间内让他们记住关键信息,明确要点,并就如何利用你呈现给他们的数据,提出非常简洁的后续步骤。


本节课中,我们一起学习了数据分析的完整流程:从通过探索性数据分析理解数据本身,到深入分析发现洞察,最后关键的一步是站在客户的角度,运用可视化、幽默和个人故事等技巧,清晰、有建设性地传达这些洞察,并推动后续行动。记住,将数据转化为可行的洞察,才是分析的最终目的。

034:用Tableau打造引人入胜的故事 📊

在本节课中,我们将学习如何将一系列数据可视化图表组织起来,构建一个连贯、有说服力的数据故事。数据专业人员经常需要展示数据,而分享和讨论数据可视化是讲述数据故事的重要组成部分。

概述

通过本教程,你将创建一个系列的数据可视化图表,它们将共同讲述一个关于美国闪电活动的故事。这种方法能引导观众从一个概念过渡到下一个,并在展示每个图表时逐步构建背景信息。

首先,让我们设想一个场景。假设你为一家组织工作,该组织希望了解更多关于美国闪电活动的情况。他们要求提供一系列数据可视化图表,用以说明闪电活动随时间增加的趋势,并详细展示德克萨斯州、俄克拉荷马州和堪萨斯州三个州的闪电数据。

创建可视化图表后,你需要与组织的董事们分享。考虑到观众,你可以开始着手准备。你需要考虑在系列中组织和呈现数据可视化的三种策略。

组织数据可视化系列的三种策略

以下是组织和呈现数据可视化系列的三种核心策略。

  • 时间顺序法:这种方法适用于最好以时间序列理解的数据。
  • 从一般到具体法:这种方法帮助观众在了解问题如何影响他们之前,先考虑问题本身。
  • 从具体到一般法:这种方法有助于强调数据在更广泛范围内可能产生的影响。

选择策略

让我们选择一种方法。时间顺序法或时间序列法对于考虑随时间变化的数据最有帮助。但这没有解决请求中的一个重要方面:可视化三个特定州的闪电数据。

采用从具体到一般法,演示的高潮将聚焦于整个美国,而不是德克萨斯州、俄克拉荷马州和堪萨斯州的闪电活动,这不符合组织的需求。

从一般到具体法可以让你先说明全国范围内闪电活动的增加,然后再展示每个州的具体数据。你可以先突出全国趋势,再聚焦于德克萨斯州、俄克拉荷马州和堪萨斯州的闪电数据。这符合组织的需求,因此从一般到具体法是最佳选择。

设计可视化图表

在开始设计可视化图表之前,你需要在Tableau Public中创建三个不同的工作表。这些工作表将在Tableau Public中构成一个故事。故事是Tableau中的一个术语,指一组组合成演示文稿的仪表板或工作表。

  • 对于第一个工作表,你将创建一个折线图,显示从2009年开始闪电活动呈上升趋势。
  • 对于第二个工作表,你将展示闪电活动最多的区域已从美国东海岸转移到中南部大陆。
  • 对于第三个工作表,你将展示2018年德克萨斯州、俄克拉荷马州和堪萨斯州的闪电次数(这是有完整数据的最后一年)。

这三个工作表将构成故事从一般到具体的组织结构。

在Tableau Public中创建图表

让我们打开Tableau Public并开始设计。首先,一如既往地上传你的数据源。

创建折线图(全国趋势)

在第一个工作表中,我们将创建展示全国闪电活动趋势的折线图。

  1. 对于“列”字段,拖入“日期”(这是一个离散维度),并为其选择“年”。
  2. 对于“行”字段,将“闪电次数”度量添加到该字段。

此时应出现一个折线图。如果没有,请打开“显示我”选项卡并找到“线(离散)”选项。你会注意到这条线从2009年开始稳步上升。

接下来,我们将使数据可视化更易于解读。例如,为折线图添加两个注释。

  1. 首先,在图表的起点添加“2009年:3010万次闪电”,为观众提供一个清晰的起点。
  2. 然后,在相应位置添加“2018年:4500万次闪电”。

创建地理数据可视化(区域转移趋势)

现在,让我们创建一个地理数据可视化。由于我们希望从一般进展到具体,展示几十年来闪电活动向西移动的趋势非常重要。

为此,我们需要创建一个时间序列地图,显示自2009年以来美国每年闪电活动的位置。

  1. 在新工作表中,将X坐标放入“列”字段,将Y坐标放入“行”字段。这将创建一个聚焦于美国东部和中部的映射图。如果你看到的仍然是折线图,请确保X和Y坐标都标记为连续。
  2. 获得地理地图后,单击X和Y坐标的下拉菜单,选择“度量”,然后选择“平均值”。这将为我们提供美国每年平均闪电次数的可管理视图。
  3. 接下来,将“日期”离散维度添加到“筛选器”和“页面”字段。为筛选方法选择“年”。“筛选器”字段允许我们创建一个动态筛选器,可用于选择仅一年的闪电数据。“页面”字段可以为每一年创建闪电活动的独特快照或页面。
  4. 最后,将“闪电次数”添加到“详细信息”字段。

显示闪电活动位置的地图已经全面,我们只需要为其添加交互部分。将“年”维度放在“页面”和“筛选器”字段中,你可以在数据可视化旁边设置交互式图例,这些图例允许用户自行选择他们希望查看的年份。

创建州级数据快照(具体数据)

我们已经完成了演示所需的三个工作表的前两个。最后要创建的是三个中最具体的可视化:2018年德克萨斯州、俄克拉荷马州和堪萨斯州的闪电活动快照。

为此,我们将创建三个新的工作表,每个州一个。然后,我们将把三个快照放入一个仪表板中。我们将一起完成德克萨斯州的可视化,然后你可以独立创建俄克拉荷马州和堪萨斯州的可视化。

我们的德克萨斯州闪电活动地图的创建方式几乎与刚才制作的地理图表相同。

  1. 将X坐标放入“列”字段,将Y坐标放入“行”字段。
  2. 将“闪电次数”度量放入“详细信息”字段。
  3. 这次,将“闪电次数”添加到“颜色”字段,并使颜色与闪电次数相对应。使用红色表示最多的闪电次数,黄色表示最少的闪电次数。
  4. 由于我们将这些州快照限制在仅2018年,我们将“日期”拖入“筛选器”字段,选择“年”,然后取消选中除2018年以外的所有年份。
  5. 最后,我们需要在Tableau Public中创建一个集。集是Tableau中的一个术语,指根据自定义条件从更大数据集中创建的自定义数据字段。

我们可以通过首先选择德克萨斯州的所有数据点来创建一个集。为此,我们将使用套索工具。你将尽可能沿着州界线围绕德克萨斯州画一圈。完成后,你会发现一个弹出窗口,选择“仅保留”,然后单击“创建集”。

将新创建的集拖到“筛选器”字段。现在,我们的地图上将只显示德克萨斯州的平均闪电活动。

组装故事

现在,我们可以将它们组装成一个故事。

  1. 首先,添加另外两个州的工作表(俄克拉荷马州和堪萨斯州),它们以与德克萨斯州工作表相同的方式创建。
  2. 然后,为这三个州创建一个仪表板,说明2018年美国闪电活动的位置。
  3. 你还应该为之前创建的另外两个工作表创建仪表板:折线图和美国的交互式地图。

现在我们有了三个仪表板,我们可以在Tableau中创建一个故事。

  1. 在故事的第一页,插入带有折线图的仪表板。填写标题,提供有关图表显示内容的详细信息。
  2. 在故事的第二页和第三页,依次放入美国的交互式地图和包含所有三个州(德克萨斯州、俄克拉荷马州和堪萨斯州)的仪表板。

填写完三个标题后,我们就有了一个完整的故事。

总结

在本节课中,我们一起学习了如何运用“从一般到具体”的策略,在Tableau Public中构建一个连贯的数据故事。我们创建了三个层次的可视化图表:展示全国趋势的折线图、显示区域转移的交互式地图,以及聚焦于特定州的详细快照,并将它们组合成一个有逻辑、易于理解的演示故事。这种方法能有效地引导观众,逐步深入地理解数据背后的洞察。

接下来,你将学习如何在Tableau中创建交互式仪表板,我们很快再见。

035:构建交互式仪表板

在本节课中,我们将学习如何将之前掌握的Tableau核心技能整合起来,创建一个功能完整的交互式仪表板。我们将以“2009年至2018年美国闪电雷击数据”为例,构建一个可以按年份和地理位置筛选、并动态展示关键指标的仪表板。


🗺️ 创建交互式闪电雷击地图

上一节我们介绍了数据准备,本节中我们来看看如何创建核心的可视化地图。

首先,打开Tableau Public并上传提供的数据源。要构建仪表板,你需要创建三个不同的工作表。

以下是创建第一个工作表——交互式地图的步骤:

  1. X坐标Y坐标 分别拖入“列”和“行”功能区。
  2. 日期 字段拖入“筛选器”区域,并选择“年”。确保勾选“显示筛选器”选项。
  3. 雷击次数 字段同时拖入“标记”卡中的“颜色”和“详细信息”框。
    • “颜色”框会根据雷击数量为地图上的点进行颜色编码。
    • “详细信息”框将为每年的每次雷击绘制具体位置。
  4. 确保两个 雷击次数 变量都设置为“连续”。

📈 创建动态年度指标表

地图展示了空间分布,本节中我们将创建一个能随年份动态更新的关键指标表。

这个工作表将不同于其他可视化图表,它以文本形式展示三个核心指标,而非条形图或折线图。它将位于交互式地图旁边,并在选择新年份时自动更新。

以下是创建动态指标表的步骤:

  1. 在“数据”窗格的空白处右键,选择“创建计算字段”。
  2. 在公式框中输入 [雷击次数] 并命名该字段。
  3. 将这个新建的计算字段拖入“标记”卡的“工具提示”框中。
  4. 在下拉菜单中,依次选择“度量”和“平均值”。重复此过程,但分别选择“总和”与“最大值”。这样就为三个指标创建了动态字段:年度雷击总数年度各地平均雷击数年度单地最大雷击数
  5. 最后,为清晰展示这些计算,转到“工作表”菜单并选择“显示标题”。输入标题“年度指标”。在标题下方,将这三个计算字段放入工具提示中。具体操作是,在编辑框中输入:
    * 总数:<SUM([雷击次数])>
    * 最大值:<MAX([雷击次数])>
    * 平均值:<AVG([雷击次数])>
    

🔍 创建位置详情视图

掌握了整体年度指标后,我们还需要一个视图来展示地图上单个地点的具体数据。

对于最后一个工作表,将 雷击次数 字段拖入“标记”卡的“文本”框中。在下拉菜单中,选择“度量”和“平均值”。这将为接下来要创建的仪表板生成一个动态字段。


🧩 整合工作表并创建交互式仪表板

现在,我们已经准备好了所有组件,本节将学习如何将它们组合成一个可交互的整体。

选择“新建仪表板”。你应该能在页面左侧的列表中找到所有已创建的工作表。

  1. 首先,将包含交互式地图的工作表拖入仪表板,加载可能需要几秒钟。
  2. 接着,将另外两个工作表也拖入仪表板。

在整理布局之前,我们需要为仪表板创建一个“操作”。操作是Tableau的一项工具,它允许用户通过控制选择来与可视化图表或仪表板进行交互。当从筛选器栏中选择一个年份时,所有其他字段都会随之更新。

我们将通过一个操作将三个工作表连接起来:

  • 在仪表板中点击地图,选择“工作表”>“操作”。
  • 在“操作”弹出窗口中,点击“添加操作”>“筛选器”。
  • 在“添加筛选器操作”菜单的“源工作表”部分,从下拉列表中选择你的仪表板名称。
  • 勾选你的地图工作表。
  • 在“运行操作方式”下,点击“选择”。
  • 在“目标工作表”部分,从下拉列表中选择你的仪表板。
  • 然后从列表中选择地图工作表以及那个用于收集单个位置指标的最新完成的工作表。
  • 在“清除选定内容将会”选项下,选择“显示所有值”。
  • 最后,在“筛选器”部分选择“所有字段”,点击“确定”。

现在,你已经拥有了一个交互式仪表板。

在完成前,请更新文本和标题以增强可读性:

  • 为筛选器图例添加标题:“交互式筛选器”。
  • 为位置平均变量添加标题:“位置指标”。
  • 编写简短的说明以阐明工具功能,例如:“在地图上选择一个点以查看该位置的具体指标。

✅ 测试与总结

花几分钟测试你的仪表板,选择地图上不同的年份和位置,确保所有工具功能正常。

本节课中我们一起学习了如何将多个Tableau工作表整合成一个功能强大的交互式仪表板。我们掌握了创建动态地图、文本指标卡,并通过“操作”功能将它们连接起来以实现联动筛选的技巧。你在本视频中学到的这些工具和技术,将帮助你在未来的数据职业生涯中更有效地沟通和呈现想法。

祝你好运,设计愉快!😊

036:将数据转化为洞察》课程总结回顾 🎯

在本节课中,我们将回顾并总结整个课程的核心内容,梳理如何将数据转化为有效的洞察,并运用可视化工具进行清晰传达。


如果你要为你在本课程中学到的知识设计一个数据可视化图表,它会是什么样子?你会用折线图来绘制你随时间变化的参与度,还是会创建一个热力图,用不同颜色代表你完成的任务,以显示哪些任务耗时最少、哪些耗时最多?

无论你选择哪种可视化方式,你已经掌握了创建有效图表或可视化的技能,这些图表能让观众轻松理解。

上一节我们介绍了数据可视化的多种形式,本节中我们来看看如何将所学技能整合应用。

以下是你在本课程中掌握的核心技能:

  • 使用 Tableau Public 讲述数据故事:你学会了使用 Tableau Public 这一强大工具,将数据转化为引人入胜的叙事。
  • 根据受众调整内容:你掌握了根据不同的受众背景和需求,调整数据呈现内容和方式的关键技巧。
  • 与非技术受众沟通技术概念:我们探讨了如何以最佳方式向非技术背景的听众解释复杂的技术概念和数据发现。
  • 高级 Tableau 应用:你不仅学会了 Tableau 的基础操作,还将其应用提升到了高级水平。
  • 应用专业可视化技术:你实践并应用了数据专业人士用来创建高效、专业可视化图表的常用技术和方法。

任何关于数据可视化的讨论,若缺少对伦理和可访问性的考量,都是不完整的。

以下是关于数据可视化伦理与可访问性的关键要点:

  • 确保数据准确性:作为一名数据专业人士,你有责任确保可视化图表准确无误地代表底层数据,避免误导。
  • 提升可访问性:你学习了如何让数据可视化对视觉障碍人士同样友好,例如通过使用适当的颜色对比、添加文字描述等方式。


本节课中我们一起学习了如何超越原始数字,将数据转化为深刻的洞察,并通过 Tableau 等工具创建出既专业又符合伦理、具备可访问性的可视化作品。恭喜你完成本阶段课程的学习,并祝你在接下来的旅程中一切顺利。

037:构建你的数据作品集 📁

在本节课中,我们将学习如何将课程中学到的技能整合到一个实际的作品集项目中。这个项目不仅能巩固你的数据分析能力,还能为未来的求职面试提供有力的展示材料。


大家好,我是Tiffany,很高兴再次与大家见面。你们在课程中已经取得了很大进展。

我回来是为了进一步介绍你们的作品集项目,以及如何在未来的求职中运用它们。请记住,你的作品集将是一系列材料的集合,用于展示你解决数据驱动问题的方法。在本课程的作品集项目中,你将展示运用数据讲述故事的知识。

对于数据专业人士而言,这是一项极其重要的职场技能。同时,它对于面试成功也至关重要。当潜在雇主评估你时,他们可能会要求你提供具体的例子,说明你过去是如何处理数据清洗、结构化和验证的。你可以利用作品集来讨论你解决过的实际数据挑战和呈现过的真实故事。

此外,一些雇主可能会要求你基于他们提供的数据集创建一个演示文稿。你在Python和Tableau中学习到的创建数据可视化的技能,将帮助你更从容、更有准备地应对这些面试,同时充实你的作品集。


上一节我们提到了作品集的重要性,本节中我们来看看如何通过实践来构建它。你已经了解了体验式学习,即人们通过实践来获得理解。观看讲师创建可视化是一回事,而自己动手创建可视化以扩展对概念的理解并提升向利益相关者展示的技能,则是另一回事。

这个作品集项目也是一个绝佳的机会,让你了解组织如何日常运用数据分析,并展示你讲述数据驱动故事的知识。

为了完成作品集项目,你将使用一个数据库和相应的业务场景。你需要按照指示完成一个Jupyter笔记本,展示你的探索性数据分析工作,并在Tableau中创建3到5个可视化图表来回应业务场景。完成这个项目后,你将获得一个全面的演示文稿,可以将其添加到你的数据专业人士作品集中。

在你的项目策略文档中,你还将记录所采取的步骤,这些记录可用于向未来的招聘经理解释你的工作。


你已经接近完成本课程,这意味着你对数据专业人士的职责理解正在加深。现在,是时候展示你所学到的东西了。这个作品集项目将帮助你练习并展示在整个课程中学到的技能。

以下是你在项目中将要实践的核心技能:

  • 展示Python中的探索性数据分析实践:你将运用所学方法,系统地探索和理解数据。
  • 演示如何创建准确描述数据集故事的数据可视化:你将使用Tableau等工具,将数据转化为直观、有说服力的图表。
  • 展示如何准备和记录全面的工作流程策略:你将使用项目策略文档来规划和记录你的分析过程。

本节课中,我们一起学习了构建数据作品集的核心价值和具体方法。我们明确了作品集在求职中的关键作用,并概述了完成项目所需的步骤:从处理数据库和业务场景,到进行探索性数据分析和创建可视化,最终形成完整的演示文稿和项目文档。准备好运用你的Python和Tableau技能,开始这个令人兴奋的实践项目吧。

038:将数据转化为洞察》课程终期作品项目介绍 🎯

在本节课中,我们将要学习如何将整个课程中学到的探索性数据分析(EDA)流程与Python编程技能相结合,以完成一个综合性的终期作品项目。这个项目旨在展示你将原始数据转化为清晰、有说服力的故事的能力。


在之前的课程中,我们介绍了使用EDA流程的六个步骤来用数据讲述故事。本节中,我们来看看如何将这些知识付诸实践,应用到你的作品集项目中。

上一门课程中,你学习了使用Python编写代码的基本格式和结构。这些编程技能对于完成接下来的作品集项目至关重要。

该项目将要求你清洗、分析数据,并向技术及非技术背景的受众展示你的发现。

鉴于你已经有一些完成作品集项目的实践经验,现在需要思考如何将你正在分析和清洗的数据,重新构建成一个经过深思熟虑的故事。

在课程的这一部分,你将拿到一个数据集,并应用EDA的六个步骤,制作一份有用的文档。这份文档能帮助你向本课程其他部分的利益相关者展示关键发现。

你将努力发展更多技能,以帮助你在数据职业领域取得成功。关于用数据讲故事,还有更多内容需要学习。

作为一名数据专业人士,你工作的很大一部分重点在于将混乱的数据转化为有组织、清晰的故事,以满足业务目标,并帮助利益相关者理解做出业务决策所需的重要细节。

这个作品集项目是一个绝佳的机会,可以向潜在雇主证明你能够做到这一点:将混乱的数据转化为逻辑清晰的故事

请记住,作为一名数据专业人士的技能发展是一个迭代的过程。因此,当你有了新想法或学到新东西时,可以持续改进。


本节课中,我们一起学习了终期作品项目的目标与重要性,回顾了EDA流程和Python技能在项目中的应用,并明确了将数据转化为商业洞察的核心任务。准备好迎接挑战,用你的项目展示数据讲故事的能力吧。

039:终期项目总结与职业发展建议

在本节课中,我们将总结你在数据分析项目中所完成的工作,并探讨如何将项目经验转化为职业优势,为未来的面试和职业发展做好准备。


项目成果回顾

到目前为止,你为深入理解数据及其如何推动业务变革付出了大量努力。

你完成了一个 Jupyter 笔记本,创建了可视化图表来支持你的分析,并优化了演示文稿以满足特定受众的需求。

随着你在课程中不断取得进展,请记住,记录你的学习过程与技能将有助于你在未来的面试中,向潜在雇主和招聘经理清晰地展示你的成果。

职业准备:沟通你的工作

你可能在本课程前面的章节中了解到,受众意识至关重要。

在面试过程中,懂得如何谈论你的工作流程、可迁移技能以及其他成就会极大地提升成功率。

在本课程中,你学习了遵循数据分析职业薪酬结构的重要性。

你练习了使用 Python 处理数据,并展示了如何组织和分析数据集,以讲述一个引人入胜的故事。

这些作品集项目旨在帮助你在就业市场上脱颖而出,而你所应用的可迁移技能则体现在你创造的具体成果中。

为面试问题做好准备

当你开始为未来的面试做准备时,你应该准备好回答以下类型的问题:

以下是面试中可能遇到的典型问题:

  • 你清理数据的过程是怎样的?
  • 你使用什么工具来创建数据可视化?
  • 数据可视化如何以及为何能增强数据所讲述的故事?
  • 在与非技术利益相关者分享数据故事时,首要考虑因素是什么?

当然,在应聘数据专业职位时,你可能还会被问到许多其他问题。

每一个作品集项目都将帮助你准备回答。例如,在你刚刚完成的作品集项目中,你使用了探索性数据分析流程来清理、组织和分析数据集。然后,你将数据转化为一个充满可视化的演示文稿,帮助利益相关者理解你从数据故事中发现的洞察。

别忘了,你还在你的薪酬策略文档中记录了你所有的考量、问题、流程笔记等内容。

后续学习展望

接下来,你将全面学习统计学在数据驱动工作中的强大力量。

然后,你将有机会运用统计分析来模拟一次 A/B 测试。

在这些课程结束时,你的作品集中将拥有丰富的成果。


本节课总结

本节课中,我们一起回顾了数据分析项目的核心产出,并学习了如何将这些实践经验系统化地整理和表达,以应对未来的职业挑战。我们强调了记录过程、提炼可迁移技能以及针对不同受众进行有效沟通的重要性,为你的职业发展奠定了坚实的基础。

040:将数据转化为洞察》课程总结 🎯

在本节课中,我们将一起回顾整个课程的核心内容,总结探索性数据分析与数据可视化的关键实践与技能,并展望后续的学习路径。


还记得在本课程开始时,你将自己想象成一名考古学家吗?你站在古老的河床前,对岩石下可能发现的宝藏充满期待。你渴望揭开故事,揭示失落的谜团。学完本课程后,希望你在面对探索性数据分析和可视化时,能感受到与那位考古学家同样的兴奋。

正如你所学习的,探索性数据分析的六项实践有助于从数据集中发掘需要讲述的故事。在你的职业生涯中,当你进行数据发现、构建和清洗时,希望你带着决心挖掘数据,汇集重要发现,质疑自身视角,并对发现进行深入研究。此外,希望你记住另外三项实践:数据连接、验证和呈现,以完成你的探索性数据分析工作。

在本课程中,你有机会探索数据专业人士如何处理那些存在情节漏洞、令人困惑场景或缺失数据和异常值的故事。你还学习了如何使用标签编码技术将分类数据转换为数值数据。最后,你思考了如何设计可视化并以极具影响力的方式呈现数据。

你学习了可视化的高级概念,并开始使用 Tableau。在这些课程中,你学到了一些职场技能,例如针对不同受众进行沟通、道德的重要性、可访问性的必要性,以及遵循工作流程的重要性。这些技能将伴随你的整个职业生涯,从初级数据专业人士到高级数据专业人士,乃至更远。


在接下来的课程中,你将学习统计学、回归和机器学习中的一些核心概念。你在本课程中获得的知识,将为你学习后续课程以及你作为数据分析专业人士的职业生涯奠定基础。很高兴能指导你学习。探索性数据分析和数据可视化的实践是我所珍视的,我总是很兴奋能遇到学习这些原则的未来数据专业人士。

恭喜你完成本课程。你已经具备成为一名优秀的数据故事讲述者的潜质。愿你在探索和用数据讲述故事的过程中,始终充满兴奋与热情。😊

posted @ 2026-03-26 12:28  布客飞龙III  阅读(21)  评论(0)    收藏  举报