如何免费获取有价值的数据
数据建模对于分析团队来说是一个具有挑战性的任务。由于每个组织都有独特的业务实体,在每个表中找到正确的结构和粒度变得没有明确答案。但是不用担心!你所需的一些数据是简单、免费的,并且占用的存储空间很小。
当你的数据被完整地建模后,你可以获得以下好处:
- 查询更简单,因此更易读。
- 报告更可扩展,减少硬编码的值。
- 你可能花费更少的时间来找到正确的数据位置。
以下是三个通用表,可以简化你的团队的分析工作,并可以在维度模型的上下文中将其导入数据仓库。
🗓️日期维度
用于时间序列报告
如果你曾经需要在特定时间点显示业务指标,那么这几乎是一个必备的表。例如,你可能会被问到:
- “FY23的销售情况如何?”
- 你能给我展示每天的客户流失情况吗?
管理层经常从时间序列的角度寻求洞察,提出像“x在不同时间段内是如何增长或缩小的?”等问题。日期维度使得可以基于不同的日期属性对各种指标进行灵活的分析。
大多数日期维度表可以直接在数据仓库中使用DDL语句创建,结合日期函数即可。
在下面的例子中,我使用BigQuery SQL来做到这一点:
CREATE OR REPLACE TABLE `your_project.your_dataset.date_dimension` ASSELECTfull_date, EXTRACT(MONTH FROM full_date) AS calendar_month_number, EXTRACT(YEAR FROM full_date) AS calendar_year, EXTRACT(QUARTER FROM full_date) AS calendar_quarter, FORMAT_DATE('%B', full_date) AS calendar_month_name, EXTRACT(DAYOFWEEK FROM full_date) AS week_name, FORMAT_DATE('%A', full_date) AS day_name, CASE WHEN EXTRACT(DAYOFWEEK FROM full_date) BETWEEN 2 AND 6 THEN TRUE ELSE FALSE END AS day_is_weekday, CASE WHEN EXTRACT(DAYOFWEEK FROM full_date) = 1 THEN DATE_SUB(full_date, INTERVAL 2 DAY) -- Sunday WHEN EXTRACT(DAYOFWEEK FROM full_date) = 2 THEN DATE_SUB(full_date, INTERVAL 3 DAY) -- Monday ELSE DATE_SUB(full_date, INTERVAL 1 DAY) END AS last_weekday, EXTRACT(MONTH FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_month, EXTRACT(YEAR FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_year, EXTRACT(QUARTER FROM DATE_ADD(full_date, INTERVAL 6 MONTH)) AS fiscal_quarterFROM UNNEST(GENERATE_DATE_ARRAY('2020-01-01', '2050-12-31', INTERVAL 1 DAY)) AS full_date
对此进行详细说明:
- 我们首先使用GENERATE_DATE_ARRAY函数,它返回一个在指定范围内的日期数组。然后我们使用UNNEST函数将数组的每个元素拆分为单独的行,就像在标准数据库表中一样。BigQuery中的数组使用一行显示多个值。
- 然后,使用从拆分后的数组生成的full_date列(表示日期格式为XXXX-MM-DD)可以使用许多BigQuery的EXTRACT函数将full_date的不同部分(月份、日期、年份等)提取到单独的字段中。
- FORMAT_DATE函数类似于EXTRACT,但它可以更自定义地显示日期值的方式。你可以使用Google文档中描述的特殊格式元素来了解每个“%”字符的含义。
- 我们还使用DATE_SUB函数,它简单地从一个日期中减去一个值。这用于获取相关的财务年份,该例子中的财务年份将从每个日历年的7月开始。在这个函数中,我们指定一个数量(1-无限大)和时间间隔(天、月、年等)。
🌎邮政编码维度
用于地理空间报告
如果您被指派创建热力图可视化或一般地理空间分析,邮政编码维度将对您的团队非常有用。这使您可以选择通过纬度和经度可视化元素,按县名、时区进行聚合,并附加人口数据以进行基准比较。
邮政编码维度是一个很好的补充表格,可附加到客户表格。通过使用邮政编码字段作为连接键,您可以将有意义的上下文数据附加到客户所在的地理位置以及背后的模式。
Opendatasoft提供各种免费数据集和开放源代码的API连接器。适用于此用例的数据集之一是美国邮政编码点 – 美利坚合众国数据集。在此链接上,将鼠标悬停在“API”选项卡上,即可配置URL以检索JSON数据。
使用Python的几行代码,我们可以输出以下Pandas DataFrame:
import requestsimport pandas as pdurl = 'https://data.opendatasoft.com/api/records/1.0/search/?dataset=georef-united-states-of-america-zc-point%40public&q=&facet=stusps_code&facet=ste_name&facet=coty_name&facet=cty_code&facet=zip'response = requests.get(url)zips = response.json()pd.json_normalize(zips,record_path='records')
分解:
- 在此示例中,我使用requests库从opendatasoft网站的API选项卡中生成的URL中检索数据,该URL显示在“url”变量中。
- 使用Pandas,我使用json_normalize函数将JSON数据转换为Pandas DataFrame。
📈外汇汇率事实表
用于财务分析
拥有国际客户的组织通常需要将所有交易转换为基础货币以进行财务报告。为了了解外汇汇率波动如何影响收入,每日外汇汇率数据是一个很好的解决方案。
当与时间序列报告配对时,这也特别有影响力,可以在特定销售时附加汇率。在我构建的显示一段时间内客户收入的仪表板经验中,业务用户总是很喜欢能够在日期轴上切换不同的汇率值与收入进行对比的能力。外汇汇率表可以帮助您实现这一切。
Exchangerate.host是另一个开源网站,允许您连接到每日外汇汇率数据源。以下是检索数据的示例 – 更多信息可以在他们的文档中找到:
import requestsimport pandas as pdfrom datetime import date#从exchangerate api检索最新日期url = 'https://api.exchangerate.host/latest?base=USD'response = requests.get(url)rates = response.json()# 将JSON列表转换为Pandas Dataframe并预览rates_list = list(rates['rates'].items())df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])df_rates['cycle_date'] = date.today()df_rates.head(10)
分解:
- 在这里,我们使用requests库从“url”变量中指定的URL中检索数据,以Python字典的形式。请注意-我根据文档编辑了URL,以指定基础货币为美元。也就是说,所有汇率将与美元的汇率相关联。
- 接下来,我们将Python字典转换为列表,从“rates”键获取数据。
rates_list = list(rates['rates'].items())
- 然后,我们将列表转换为Pandas DataFrame并标记列标题:
df_rates = pd.DataFrame(rates_list, columns=['currency', 'value'])
- 最后添加了一个“cycle_date”列,表示ETL循环日期,表示数据被摄入数据仓库的时间。
结论
将公开可用的数据纳入数据仓库可以为分析团队提供即时价值,且工作量最小。这些表,以及任何经过适当建模的数据实体,消除了仅在Power BI或Tableau等BI工具中存储嵌套业务逻辑的需要。它们相反提供了一个集中的数据源,多个分析师可以参考并在其报告中一致应用。这种数据建模的协同方法使团队能够轻松扩展报告,确保透明地了解源数据。通过利用这些类型的上下文表,您的组织可以简化分析流程,消除报告中的差异,并实现更高水平的数据驱动决策。
快乐建模!