python - 有什么有效的方法来计算大数据表列中的二进制值?
问题描述
我在谷歌云平台上使用大查询芝加哥犯罪数据。但是,我想计算每种犯罪类型的逮捕和未逮捕人数。在 pandas 中计算这一点很容易,但对我来说如何用大查询计算数据框中的二进制值并不直观。谁能给我一个可能的想法来计算这个数字?
数据
因为芝加哥犯罪数据很大,所以我无法在这里给出可重现的例子,但是从这里预览犯罪数据很容易:芝加哥犯罪数据
这是小预览:
我的大问题:
SELECT
primary_type,
count(arrest),
COUNTIF(year = 2015) AS arrests_2015,
COUNTIF(year = 2016) AS arrests_2016
FROM
`bigquery-public-data.chicago_crime.crime`
WHERE
arrest = TRUE
AND year IN (2001,
2018)
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY
primary_type,
arrest
但是这个查询给了我空的输出,我不知道如何让它工作。
目标:
从芝加哥犯罪数据表中,我想提取每种主要类型的总逮捕和非逮捕数量,我想排除 OTHER OFFENSE 和所有非犯罪类型,直到 2018 年底。
如何更正我的大查询以获得预期的输出?任何有效的大查询脚本来获得预期的查询输出?任何想法?谢谢
解决方案
下面应该工作
#standardSQL
SELECT
primary_type,
COUNT(arrest) arrest_total,
COUNTIF(year = 2015) AS arrests_2015,
COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE arrest = TRUE
AND year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, arrest
我认为您的问题在下面一行,您只选择了 2001 年和 2018 年,而不是两者之间的所有年份(至少包括 2015 年和 2016 年)
AND year IN (2001, 2018)
所以,你应该使用以下一个
AND year BETWEEN 2001 AND 2018
此外,如果您想包括非逮捕,您可以在下面使用
#standardSQL
SELECT
primary_type,
arrest,
COUNT(arrest) arrest_total,
COUNTIF(year = 2015) AS arrests_2015,
COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, arrest
注意:我在这里删除WHERE arrest = TRUE
并添加arrest
到 SELECT 列表
而不是这几个调整 - 您的初始查询是非常正确的
如果你想有一个输出行,primary_type
你可以在下面使用
#standardSQL
SELECT
primary_type,
COUNTIF(arrest) arrests,
COUNTIF(NOT arrest) non_arrests,
COUNT(arrest) arrest_total,
COUNTIF(year = 2015) AS arrests_2015,
COUNTIF(year = 2016) AS arrests_2016
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type
此外 - 如果您可以像下面这样“扩展”年份计数(例如 2015 年)
COUNTIF(year = 2015 AND arrest) AS arrests_2015,
COUNTIF(year = 2015 AND NOT arrest) AS non_arrests_2015,
是否有任何程序化方法来计算每种犯罪类型从 2001 年到 2018 年的逮捕人数
#standardSQL
SELECT
primary_type,
year,
COUNTIF(arrest) arrests,
COUNTIF(NOT arrest) non_arrests,
COUNT(arrest) arrest_total
FROM `bigquery-public-data.chicago_crime.crime`
WHERE year BETWEEN 2001 AND 2018
AND primary_type NOT IN ('OTHER OFFENSE', ' all non-criminal types')
GROUP BY primary_type, year
推荐阅读
- c# - unity OnInspectorGUI 函数调用 PrefabUtility.ReplacePrefab 函数 Nullreference?
- docker - Docker、webpack 和环境变量
- ruby - 处理 Ruby 中的变量
- android - 有没有办法使用 PagingDataAdapter 找到项目并滚动到该视图?
- python - 如何使用 numpy.vectorize 传递参数
- r - 尝试与 facet_wrap 一起使用时出现 stat_density_2d 错误
- ios - 如何从 IOS 应用程序调用 unity3D?
- python - 找不到 Django 页面,当前路径,与这些中的任何一个都不匹配
- php - Laravel DB 数组问题
- html - 我如何为所有引导卡应用保证金底部?