首页 > 编程问题  > 

数据科学家的实用技巧和窍门

数据科学家的实用技巧和窍门
在数据科学的庞大世界中,无数的库和工具可以增强工作效率并提升分析成效。本文重点介绍了适用于数据分析的有用 SQL 函数,强调了 CROSS JOIN、SUM() OVER、ROW_NUMBER、COALESCE、GROUP_CONCAT、STRING_CONCAT 等函数的优势。此外,文章探讨了将日志视为数据源而不是信息噪音的价值,并展示了如何利用统计分析和机器学习技术从日志中提取有价值的见解。最后,文章强调了数据聚合在不丢失细节的情况下理解和利用数据集的重要性,并提出了自上而下的分析方法来实现
在数据科学的庞大世界中,无数的库和工具可以增强工作效率并提升分析成效。本文重点介绍了适用于数据分析的有用 sql 函数,强调了 cross join、sum() over、row_number、coalesce、group_concat、string_concat 等函数的优势。此外,文章探讨了将日志视为数据源而不是信息噪音的价值,并展示了如何利用统计分析和机器学习技术从日志中提取有价值的见解。最后,文章强调了数据聚合在不丢失细节的情况下理解和利用数据集的重要性,并提出了自上而下的分析方法来实现这一目标。

在数据科学的世界中,有无数的库和工具可以帮助您加快工作速度并提高分析效率。 

作为一名数据分析师和研究员,我开发了处理 TB 级数据的工具,并在经纪和交易领域进行异常研究和分析。在我的职业生涯中,我积累了一些关于如何有效分析大量数据以及解决该领域出现的不常见任务的有用知识。 

在本文中,我将分享一些我用来快速准确地解释数据并从中获得有用见解的技巧和工具。我希望你能找到一些对你的数据研究有用的东西。 

用于数据分析的有用 SQL 函数

我在日常研究工作中进行了大量的数据工程和数据集准备工作,并且收集了一些有用的技巧,这些技巧不是很受欢迎,但可能非常有帮助。 

如今,数据分析师大多使用 Python 框架进行数据操作。然而,可能还有更好、更高效的选择。 

有时,最好“重回校园”,改用一些 SQL 函数。不幸的是,大学里不再广泛学习 SQL——现在 Pandas 已成为默认选项,但是 SQL 有几个优点可以方便你的工作。年轻的数据科学家仍然应该了解和使用 SQL,因为数据库通常比 Python 笔记本拥有更多样的资源。

以下是一些不太流行的SQL 函数,尤其适用于数据准备: 

CROSS JOIN— 用于执行在 Python 中可能很麻烦的行之间的操作。 

SUM() OVER (PARTITION BY .. ORDER BY)可以在不使用 的情况下应用的分组表达式GROUP BY,可用于根据一列或多列的值将结果集划分为多个分区。然后,这些分区可用于执行计算和聚合函数

ROW_NUMBER— 为每一行分配唯一的数字标识符,方便排序、过滤和其他操作,有助于顺序分析

COALESCE— 用于处理 Null 值。此函数按特定顺序从提供的参数列表中计算参数,并始终返回第一个非空值。如果您正在进行多个联合并希望有一个共同的填充列,那么合并会有所帮助。 

GROUP_CONCAT, STRING_CONCAT— 合并传递给它的所有参数的字符串表示形式,并将结果作为新字符串返回。 

日志作为数据源

在我的职业生涯中,我花了很多时间研究日志文件以发现异常情况,并习惯于“在显微镜下”查看这些信息。日志有助于详细了解问题发生时的某个时刻发生了什么 - 但如何以最有效的方式提取该信息?

大多数情况下,日志被视为无用的信息,您必须在其中搜索特定时刻或查找特定事件(或错误)。然后您必须找出到底出了什么问题,并根据您的发现修复错误。 

但是,如果您将日志文件视为数据科学家数据集呢?换个角度看,你会发现日志对于统计分析其实是非常有帮助的。我列出了您可以使用的数据处理功能的一些优点以及它们如何帮助您解释数据。 

通过对日志的统计分析,您可以更好地了解应用程序到底做了什么以及做了多少次。 

您可以实施异常检测分析来找出事件之间的延迟。

通过监督学习,您可能能够确定应用程序是否已经遇到问题。为此,分类类型的监督学习可以派上用场,因为它使用算法将测试数据准确地分配到特定类别中。

监督学习的另一个应用是预测应用程序未来的性能。 

您也许能够对“假设”情景进行建模——然而,这可能相当复杂。 

ACF 函数有助于查找延迟和排队。 

如果您正在查看未知数据,NLP 功能可以帮助您以更用户友好的形式进行解释。 

数据聚合而不丢失细节

大数据采用各种聚合技术。这种方法有什么缺点? 

大多数情况下,数据以某种形式标准化,并且具有数据的平面表示或换句话说是关系表示。当您执行聚合时,您的数据会以跳过某些字段和属性的方式进行转换,仅仅是因为它们当时不相关。 

但是,当您尝试通过 ML 或任何其他统计分析工具基于聚合数据建立假设时,您可能需要恢复跳过的详细信息。问题是,您已经从数据集中丢失了它们,您需要从 (a) 开始整个循环,并包含您认为现在可能很重要的字段。

您可以通过以下方法解决问题并节省大量时间:

保留原始数据集以供丰富。

执行“自上而下”分析,这意味着将聚合数据连接到原始数据集以发现异常情况。 

以下是为 ClickHouse、PostgreSQL 和 MySQL 数据库编写的 SQL 查询,您可以使用:

-- createCREATE TABLE EMPLOYEE ( empId INTEGER PRIMARY KEY, name TEXT NOT NULL, dept TEXT NOT NULL, city TEXT NULL, new_city text NULL);-- insertINSERT INTO EMPLOYEE VALUES (0001, 'Clark', 'Sales', 'Hamburg', NULL);INSERT INTO EMPLOYEE VALUES (0002, 'Dave', 'Accounting','Paris', NULL);INSERT INTO EMPLOYEE VALUES (0003, 'Ava', 'Sales','Tallinn', NULL);INSERT INTO EMPLOYEE VALUES (0004, 'Ava', 'Sales','Paris', NULL);INSERT INTO EMPLOYEE VALUES (0005, 'Eva', 'Sales',NULL, 'Madrid');-- QUERY MYSQL SELECT dept , ROW_NUMBER() OVER () as n, COUNT(DISTINCT city) uniq_cities, COUNT(DISTINCT coalesce(city, new_city) ) uniq_cities_, GROUP_CONCAT(CONCAT_WS(';',name, dept,city) SEPARATOR '\n')FROM EMPLOYEEGROUP by dept--QUERY Clickhouse select dept , ROW_NUMBER() OVER () as n , uniq(city) uniq_cities , uniq(coalesce(city, new_city)) uniq_cities_ , arrayStringConcat(groupArray(concatWithSeparator(',', toString(tuple(*)))),';') as all_fieldsFROM EMPLOYEEGROUP by dept--QUERY PostgreSQLSELECT dept , ROW_NUMBER() OVER () as n, COUNT(DISTINCT city) uniq_cities , COUNT(DISTINCT coalesce(city, new_city) ) uniq_cities_ , json_agg(ROW_TO_JSON(EMPLOYEE))FROM EMPLOYEEGROUP BY dept

数据科学家的实用技巧和窍门由讯客互联编程问题栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“数据科学家的实用技巧和窍门