目前,数据无处不在。 从网络日志、传感器、网络设备、社交媒体等收集的数据多达每秒数 TB。 数据量非常庞大,只要我们能将无处不在的复杂数据网所隐藏的能力释放出来, 数据可以发挥巨大作用。
我们怎样才能释放并利用这个能力? 使其不仅是为少数的聪明人所用,而是在所有人、所有领域以及各个级别中普及。 答案在于数据可视化。
在本文中,我们将通过案例研究解释数据案例的核心因素,展示数据科学家如何解释、销售以及激励观众。 本文阐述了数据生产者常犯的错误以及这些错误引起的困惑,这些错误通常让人误以为真正的问题从未解决。 本文提供了一个有助于避免这些错误的框架。
案例研究
了解挑战
我们看一下问题陈述的核心元素,以更好地了解挑战。
- WeTrainYou
- 一家基于伦敦的培训公司,
- 雇用了 58 位持有 Salesforce 证书的全职培训师。
- Salesforce 平台是它的核心竞争力。
- 擅长培训工程师,将其培养为全职或兼职 Salesforce 开发人员。
- WeTrainYou 想要在加利福尼亚州成立一家本地培训机构。
- 根据维基百科的定义,加利福尼亚州共分为 58 个县,包含 482 个区。
- 加州法律没有明确区分“市” (city) 和“镇” (town),区可以任选一种作为官方名称。
- 根据 2010 年人口普查,加州的总人口为 37,253,956 人,城市居民为 30,908,614 人,占总人口的 82.97%。
- 我们的难点是发现:
- 加州哪座城市提供最多的 Salesforce 开发人员岗位?
优秀解决方案的标准
- 我们的任务:
- 使用数据确定加州哪座城市能提供最多的 Salesforce 开发人员岗位。
- 找到一个易于决策制定者理解的方法
- 我们的利益相关者可以是
- 高管和董事会成员
- 销售和市场营销人员
- 法务和公共关系人员
- 高效的解决方案应:
- 展现简单、可行的视觉内容
- 提供选址建议,即加州哪个城市提供最多的 Salesforce 开发人员岗位
数据案例解析
我们检查一下解决这个挑战的框架。
图 1 显示了数据科学流程,包含从数据获取到数据可视化的所有步骤。
图 1.数据科学流程。
数据科学流程始于数据。 分为 3 个步骤,总结为以下问题,为了克服数据挑战,需要我们在寻找最佳答案的过程中解决这些问题。
- 数据从何而来以及如何获取数据?
- 获取数据后,如何清理数据? 如何关联数据?
- 最后,如何展示数据?
图 2.流程的关键步骤。
图 2 显示了 3 个步骤。 我们将重点讨论最后一步:利用数据可视化展示数据。
创建数据可视化流程需要提出(或回答)的问题
概括案例
- 需要回答哪些问题?
- 这是一个长期的问题吗? 还是需要现在采取处理?
- 这是一个信息、激励或销售案例?
- 数据案例的流程是什么?
- 需要多少张幻灯片?
- 每张幻灯片上包含什么信息?
了解问题和 “so what” 测试
- 利益相关者为什么问这个问题?
- 他们将怎样看待我的建议?
- 他们将采取哪些措施?
- 数据案例的目标是什么?
难点在于了解问题,只有了解问题,才能使用数据可视化展示准确、有意义的回答。
数据
- 回答问题需要使用哪些数据?
- 数据来源在哪里?
- 回答之前的问题需要主数据(即通过调查收集,以及编写 Python* 脚本)还是次级数据(如开放政府数据)?
- 收集数据需要哪些工具与技术?
- 需要使用 BeautifulSoup* 获取数据吗? 需要发放一百万份调查问卷,以获取数据吗?
- 如何存储数据? 会达到数十亿行吗?
- 有必要担心如何设置 NOSQ(如 MongoDB*)吗? 可以将数据全部保存为平面文件(如 CSV)吗?
- 数据有多脏?
- 我能访问的清晰 Excel* 格式的政府数据吗? 还是需要编写 Python 脚本,以清理数据,如重复数据删除、标准化和处理缺失值
- 从数据中能得到多少特性? 需要繁重的特性工程才能回答这个问题?
算法
现在,我们拥有大量数据。 我们了解数据格式、结构和特性。
- 哪些算法能回答问题?
- 这是一个监督式机器学习(我们为引擎提供真实的标签并使用模型进行预测)问题吗?
- 这是一个非监督(如集群)问题吗?
- 该算法会不会因为速度太慢,无法解决这个问题?
- 需要支持近乎实时的视觉效果吗?
- 真的需要算法吗? 可以借助可用数据解决我的问题吗?
视觉编码
- 哪些标记(如线条或圆形)和通道(如颜色、大小或倾斜)最适合展现案例?
- 我应该使用哪些颜色?
- 观众对特定标记或通道敏感吗?
- 他们是技术热衷者吗?
- 数据视觉效果应该有何种程度的交互性?
- 是全交互式吗?
- 观众将如何使用我的视觉效果? 他们将缩小或放大视觉效果吗?
- 他们使用智能手机查看图表吗?
- 我将使用哪些工具开发视觉效果?
- Tableau 能提供理想的展示效果吗?我需要使用 D3.js 创建视觉效果吗?
案例简介和分析
- 3 张幻灯片合理吗?
- 流程可行吗?
- 问题答复了吗?
- “电子邮件测试” – 如果我将该视觉效果以电子邮件的形式发送给英格兰人,他会理解(无需解释电子邮件中的每个视觉元素)吗
执行案例
- 他们将根据案例采取措施吗?
- 他们会采用我的视觉效果吗?
- 我能说服他们(假设这是一个激励案例)采纳吗?
- 他们的问题是否得到解答?
避免缺陷(处理反馈)
您的数据有可能不正确。 如果这一情况真的发生了,您需要返回绘图板,从头开始收集新数据。
反馈显示数据案例无法执行(如流程或可视化效果不佳),这是可能出现的另一种情况。
为了减少这些情况的产生,我们提供了排除数据案例故障时的提问框架。
您不了解
- 他们为什么要求该效果?
- 背后的原因是什么?
- 在团队中引进领域专家是一个简单有效的方法。 如果您正创建医疗数据案例可视化,最好聘请医生担任团队导师。
- 以小组和一对一的形式采访目标用户。
- 明确记录整个团队的询问过程。
视觉编码不正确
- 我们是否过度使用通道?
- 我们了解使用多少颜色吗?
- 是否使用了太多动画? 3D?
- 视觉元素是否太复杂?
- 怎样进行简化?
算法速度过慢
- 我们是否使用了正确的算法?
- 这是一个阶段性问题,
- 还是一个生产基础设施问题?
- 或者存在其他问题?
- 运行测试以查看哪个组件速度较慢。
- 基于数据集等测量时间。
执行
- 为什么没人使用特性、产品或视觉效果?
- 怎样创建 talkback? 在何处单击?
- 我们能否使用 Amazon Mobile Analytics* 等工具了解每个组件?
- 他们是否单击以“深入分析”数据?
- 他们是否尝试下载?
- 哪部分视觉数据案例未被查看?
返回案例研究
现在,我们再次回顾问题陈述。
问题陈述
- 首席执行官需要决定在加利福尼亚州设立培训机构的地址(城市)。
- 这是一个优先执行的任务,他们需要快速制定决策。
我们需要哪些数据以及数据源自何处?
- 招聘网站 Dice.com 将提供原始数据。
- 我们将使用 BeautifulSoup Python 脚本获取数据。
- 为了简化流程,我们仅获取“标题”和“位置”。
- 数据中要有城市信息
- 和地理编码信息。
- 为了展示地图,我们还需要经度和纬度。 所幸,Tableau 拥有内置的地理编码。
示例代码
以下是 Python 脚本。
## (C) DataTiles.ai ## (C) DataTiles.io ## This is Proof of concept script, please do not use in production ## Sudhir Wadhwa, Jyoti Wadhwa, January 2016 import bs4 as bs import csv import requests holder = dict() myurl = 'tps://www.dice.com/jobs?q=Salesforce+Developer&l=CA' try: # For Python 3.0 and later from urllib.request import urlopen except ImportError: # Fall back to Python 2's urllib2 from urllib2 import urlopen sourcehtml = urlopen("https://www.dice.com/jobs?q=Salesforce+Developer&l=CA") soup = bs.BeautifulSoup(sourcehtml,"lxml") with open('TableauJobsLocations.csv', 'w') as csvfile: fieldnames = ['Title','Location'] jobwriter = csv.DictWriter(csvfile, fieldnames=fieldnames,dialect="excel",lineterminator='\n') jobwriter.writeheader() counter = 0 for a in soup.find_all('a', {"class": "dice-btn-link"}, href=True): url = a['href'] if url.find('jobs/detail') > 0: response=requests.get(url) soup=bs.BeautifulSoup(response.text) jobDesc = soup.find("div", { "id" : "jobdescSec" }).get_text().encode('ascii','ignore').upper() holder['Title'] = soup.find("h1", { "class" : "jobTitle" }).get_text().encode('ascii','ignore').strip() holder['Location'] = soup.find("li", { "class" : "location" }).get_text().encode('ascii','ignore').strip() jobwriter.writerow(holder) holder.clear
示例输出
以下是存储于 TableauJobsLocations.csv 的输出
sudhirwadhwa ~/Desktop/tbd/SCU $ cat TableauJobsLocations.csv Title,Location Sr. Salesforce Developer,"San Marcos, CA" Salesforce Developer,"Los Angeles, CA" Senior Salesforce Developer,"San Francisco, CA" Salesforce Developer - FTE,"San Francisco, CA" Salesforce Developer - Burbank - 125k+ DOE,"Burbank, CA" Salesforce Developer,"San Francisco, CA" Senior Salesforce Developer,"Los Angeles, CA" Senior Salesforce Developers,"San Diego, CA" Junior Salesforce developer,"Aromas (monterey County), CA" Sr. Salesforce Developer,"Santa Clara, CA" Mid-Level Salesforce Developer,"El Segundo, CA" Lead Salesforce Developer,"San Bruno, CA" Lead Salesforce Developer,"San Bruno, CA" Salesforce Developer,"San Diego, CA" Salesforce Dev/Admin,"Los Angeles, CA" Salesforce Developer,"Burbank, CA" Salesforce developer/Admin,"Oakland, CA" Sr. Salesforce Developer,"San Marcos, CA" Salesforce Developer,"San Francisco, CA" Salesforce Developer,"Vista, CA" Salesforce Developer,"San Ramon, CA" SalesForce Developer,"Burbank, CA" Senior Salesforce Developer,"San Francisco, CA" Salesforce Developer,"San Ramon, CA" SalesForce Developer,"Burbank, CA" Salesforce Developer,"Burbank, CA" Salesforce Developer,"San Rafael, CA" Salesforce Developer,"San Francisco, CA" Salesforce Developer,"San Diego, CA" Senior Salesforce Developer,"Milpitas, CA" Sr. Salesforce Developer,"San Marcos, CA" Salesforce Developer,"Los Angeles, CA" Senior Salesforce Developer,"San Francisco, CA" Salesforce Developer - FTE,"San Francisco, CA" Salesforce Developer - Burbank - 125k+ DOE,"Burbank, CA" Salesforce Developer,"San Francisco, CA" Senior Salesforce Developer,"Los Angeles, CA" Senior Salesforce Developers,"San Diego, CA" Junior Salesforce developer,"Aromas (monterey County), CA" Sr. Salesforce Developer,"Santa Clara, CA" Mid-Level Salesforce Developer,"El Segundo, CA" Lead Salesforce Developer,"San Bruno, CA" Lead Salesforce Developer,"San Bruno, CA" Salesforce Developer,"San Diego, CA" Salesforce Dev/Admin,"Los Angeles, CA" Salesforce Developer,"Burbank, CA" Salesforce developer/Admin,"Oakland, CA" Sr. Salesforce Developer,"San Marcos, CA" Salesforce Developer,"San Francisco, CA" Salesforce Developer,"Vista, CA" Salesforce Developer,"San Ramon, CA" SalesForce Developer,"Burbank, CA" Senior Salesforce Developer,"San Francisco, CA" Salesforce Developer,"San Ramon, CA" SalesForce Developer,"Burbank, CA" Salesforce Developer,"Burbank, CA" Salesforce Developer,"San Rafael, CA" Salesforce Developer,"San Francisco, CA" Salesforce Developer,"San Diego, CA" Senior Salesforce Developer,"Milpitas, CA" sudhirwadhwa ~/Desktop/tbd/SCU $
图 3.示例输出
处理 Tableau* 中的输出
接下来,在 Tableau 中输入数据,将地址划分为州和城市两列。 数据来源的快照和图 4 相似。
图 4.使用地理编码划分 Tableau* 中的数据来源。
创建指示板
接下来创建两个工作簿并在指示板中使用这两个工作簿(见图 5)。
图 5.最终显示最佳城市为旧金山(基于数据集)。
结论
通过数据可视化高效展示内容不仅能释放隐藏在数 TB 复杂数据中的巨大潜力,还能帮助观众理解数据,从而将其转化为可用数据。
例如,借助数据可视化,您可以:
- 为管理人员提供有意义的答案。
- 确保数据科学家和数据工程师不会迷失于海量数据。
- 助力中层管理人员发掘可行洞察
- 支持各个级别的数据驱动型决策制定。
- 甚至更多。