首页 文章 精选 留言 我的

精选列表

搜索[最权威安装],共10000篇文章
优秀的个人博客,低调大师

从 Bug 修复到生态增强:DolphinScheduler 11 月值得关注的变化

各位热爱 Apache DolphinScheduler 的小伙伴们,11 月社区月报来啦! 本期 Apache DolphinScheduler 11 月月报全面回顾了社区在过去一个月中的重要进展,包括核心模块的缺陷修复、功能增强、文档完善、CI 稳定性提升,以及 Helm、UI、Registry 等多方向的改进。同时,本月 "Merge Stars" 多达十余位,跨国贡献者持续提升 Apache 项目的全球影响力,向所有为 Apache DolphinScheduler 作出贡献的社区成员致以特别感谢。 月报亮点 多项关键 Bug 完成修复:涵盖 API、Master、Registry 等多个核心模块,显著提升系统稳定性。 功能持续增强:包括 SQL 任务取消能力、日志查询优化、Prometheus 认证支持、K8S 环境适配等实用增强。 文档升级与生态完善:新增注册表插件文档、负载均衡文档更新,以及安全文档联系人调整,更有助于用户快速理解系统。 CI/测试体系更稳健:多项 Chore 优化修复 CI 不稳定问题,并补充了 taskGroup、禁止条件任务等集成测试。 Helm Chart 新能力上线:worker StatefulSet 支持密钥与 init 容器,使 K8S 部署更加灵活。 月度Merge Stars 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献(排名不分先后): @KwongHing,@qiong-zhou,@kvermeulen,@ruanwenjun,@ChaoquanTao,@det101,@dill21yu,@SbloodyS,@Mrhs121,@CauliflowerEater,@jmmc-tools,@sdhzwc,@njnu-seafish apache/dolphinscheduler仓库 修复 [Fix-17721] [API]优化查询下游依赖工作流定义的逻辑 @det101 [Fix-17638][API]优化工作流血缘更新逻辑 @det101 [Fix-17668] [jdbc-registry]旨在清理超过N小时的历史注册表数据更改事件,但实际上清理了N小时内发生的事件 @qiong-zhou [Fix-17527][registry-api]修复主工作器 API 启动失败,无法由于无效的 ZooKeeper 路径而清理已完成故障转移的节点 @qiong-zhou [Fix-17643] [registry-jdbc]修复未触发 JdbcDataChangeEvent 的死客户端问题 @qiong-zhou [Fix-17637] [API]工作流血缘删除优化 @det101 [Fix-17613] [Master]任务组队列优先级始终为 0 @KwongHing [Fix-17604][API]正确分配和移除工作组到项目的逻辑 @Mrhs121 [Fix-17534][Service/Master]从当前工作流实例中添加全局参数和varpool,并将它们添加到子工作流触发请求的开始参数列表中。 @kvermeulen 优化 [Improvement-17749][UI][DATAX]datax json 参数校验改进 @sdhzwc [Improvement-17738][Dependency]升级 PostgreSQL JDBC 驱动以修复 CVE-2024-1597 @dill21yu [Improvement-17697][SqlTask]支持取消 SQL 任务 @ruanwenjun [Improvement-17664][Master]定期清理注册表中的故障转移标记 @ruanwenjun [Improvement-17573][UI]更新UI标签及相关变量名称及升级脚本 @CauliflowerEater [Doc-17616][Improvement]添加注册表插件使用文档 @SbloodyS [Improvement-17649][registry-jdbc]更正"DataChance的拼写错误 @qiong-zhou [Improvement-17647][Resource Center]在上传文件时禁用前端逻辑中的超时限制。 @njnu-seafish [Improvement-12563]向Prometheus端点添加认证功能,并将其适配到Kubernetes(K8S)环境。 @njnu-seafish [Feature-17566][Helm]在 worker 有状态集添加密钥和初始化容器 @jmmc-tools [Improvement-17025][UI]优化查询日志以避免无限递归调用 @ChaoquanTao 其他 [Doc-17728][Master]更新负载均衡文档 @Mrhs121 [Chore]修复 sonar 错误 @SbloodyS [Doc-17472]更新安全文档联系人 @dill21yu [Chore]使用 taskGroup 添加 IT 案例,且 taskGroupPriority 不同 @ruanwenjun [Chore]修复不稳定的 CI @SbloodyS [Chore]热修复文档 CI 错误 @SbloodyS [Chore]API日志中的掩码令牌 @ruanwenjun [Chore]将IT案例添加到验证禁止条件任务中。 @ruanwenjun [DSIP-92][Master]重构工作流串行策略 @ruanwenjun

优秀的个人博客,低调大师

LinkedIn数据:全球 AI 人才集中的十个国家,以色列居首

根据 LinkedIn最新发布的数据,全球范围内对于人工智能(AI)人才的需求正迅速上升。为了应对这一挑战,许多国家正在积极培养和吸引 AI 人才。LinkedIn 通过其 “AI 人才集中度” 指标,分析了不同国家的 AI 人才供应情况,以下是2024年 AI 人才浓度最高的十个国家。 首先,以色列在2024年的数据显示,其 AI 人才占到全国劳动力的1.98%,位居全球第一。紧随其后的是新加坡,其 AI 人才的比例为1.64%。卢森堡位列第三,AI 人才比例为1.44%。此外,爱沙尼亚、瑞士、芬兰、爱尔兰、德国、荷兰和韩国分别占据第四至第十位,人才比例从1.17% 到1.06% 不等。 值得注意的是,这些国家通常在地理和人口规模上相对较小,但在 AI 人才的培养和发展上却表现不俗。这些国家建立了良好的生态系统,企业对员工技能发展的投资以及政府促进持续学习的政策,都为 AI 人才的培养提供了有力支持。 LinkedIn 亚太地区首席经济学家蔡佩盈指出,虽然印度未能进入前十名,但在2016年至2024年间,该国的 AI 人才浓度增加了252%。这一数据表明,印度的专业人士正积极提升他们的 AI 技能。此外,2024年,印度的 AI 招聘需求同比增长了33.4%,高于新加坡的25% 和美国的24.7%。 新加坡在 AI 人才培养方面的竞争力也不容忽视,蔡佩盈提到,新加坡的文化强调学习,专业人士在 AI 技能学习上花费的时间比亚太其他国家高出40%。随着 AI 技术的迅速发展,企业和个人对于 AI 技能的需求只会进一步上升。 具体排名如下: 以色列 (1.98%) 新加坡 (1.64%) 卢森堡 (1.44%) 爱沙尼亚 (1.17%) 瑞士 (1.16%) 芬兰 (1.13%) 爱尔兰 (1.11%) 德国 (1.09%) 荷兰 (1.07%) 韩国 (1.06%)

优秀的个人博客,低调大师

当事人复盘 GitLab 史上严重的数据库故障

故事来源于当事人最近发表的回忆录相关节选。 GitLab 官网上还有当年这次事故的纪录,事件发生在 2018 年 2 月 1 日。 误删库原因 GitLab.com 使用的是 PostgreSQL,一主一备两个集群,分别是 db1.cluster.gitlab.com 和 db2.cluster.gitlab.com。当事人 发现 db2 集群无法从 db1 同步数据过来,再尝试了几种方法都不奏效后,就决定尝试重置 db2,也就是清空 db2 的数据目录。只是当事人操作在了主集群 db1 上,当他意识到问题时,300 GB 的数据只剩下 4.5 GB 了。 主库被误删,GitLab.com 只能立马下线了。 恢复过程 GitLab 官方提到有好几道防线,所以最后还是恢复了过来。不过就像一开始当事人回忆里提到的,差一点点就完蛋了。事实上 GitLab 设置的所有防线其实都被击穿了: 每天的自动备份不奏效,因为备份所用的 pg_dump 版本和 GitLab 的 PG 版本不一致,所以每次备份只产生了几个 bytes 的数据。 在 Azure 上的磁盘备份没有在数据库服务器上启用。 到 S3 的备份也是坏的,目录为空。 所幸的是,当事人在操作前的 6 小时,因为知道要处理数据库负载均衡问题,所以做了一个手工备份。所以最后 GitLab.com 花了 24 个小时,把这个手工备份恢复了出来,但是 6 小时的数据是完全没了。 复盘 备份恢复需要定期演练。不演练还不如不要备份。这点其实也从侧面体现了云数据库服务商的优势。因为他们能够保障备份的有效性,也提供了 Point-in-time-recovery (PITR) 这样的闪回能力。GitLab 是自己在云主机上搭了数据库服务,手搓一套备份/恢复的方案,结果完全不可用。 不要在疲劳时操作数据库。当事人本来已经因为时间很晚,准备休息了。但因为突然出现的同步问题,继续熬夜。 尽可能通过工具而不是人肉操作。GitLab 的这个故障应该是当事人直接登上服务器,进行命令行操作的。这里至少有 2 个卡点可以引入工具,一个是登陆服务器,一个是登陆后在服务器上执行命令。如果通过工具操作的话,工具界面会提示正在操作生产库,并且进一步可以设置审批流程。 危险操作事前先备份。这个故障可以挽回在于当事人还是一个老手,所以做了事前手工备份,否则后果不堪设想。 前段时间 Linear 误用 TRUNCATE 也造成了其史上最大故障。对生产环境,尤其是数据库上的操作永远要心怀敬畏。操作时应该尽量通过工具自动化。万不得已需要手动挡,始终也要确保有可用备份兜底。 💡 更多资讯,请关注 Bytebase 公号:Bytebase

优秀的个人博客,低调大师

fast-cloud v1.1 简洁的微服务解决方案

项目说明 FastCloud是采用Spring Cloud Alibaba、SpringSecurity Oauth2.0、Spring Cloud Gateway、SpringBoot、Nacos、Redis、Mybatis-Plus等框架,开发的一套SpringCloud快速开发系统,使用门槛极低,且采用MIT开源协议,完全免费开源,可免费用于商业项目等场景。 开发文档:https://maku.net/docs/fast-cloud 演示环境:https://demo.maku.net/fast-cloud 更新日志 新增文件上传功能,支持阿里云、本地文件上传 新增分配角色给用户功能 新增用户选择组件,可以方便用户选择 重构数据权限,数据权限更完善 优化查询条件,基于 Lambda 表达式实现 优化弹窗,可实现拖拽功能 优化 fast-select 组件 升级 vite 到 3.0 升级 element-plus 前端工程 Github仓库:https://github.com/makunet/fast-admin Gitee仓库:https://gitee.com/makunet/fast-admin 后端工程 Github仓库:https://github.com/makunet/fast-cloud Gitee仓库:https://gitee.com/makunet/fast-cloud 代码生成器 Github仓库:https://github.com/makunet/fast-generator Gitee仓库:https://gitee.com/makunet/fast-generator 交流和反馈 官方社区:https://maku.net 技术解答、交流、反馈、建议等,请移步到官方社区,我们会及时回复,也方便今后的小伙伴寻找答案,感谢理解! 效果图

优秀的个人博客,低调大师

fast-cloud v1.0 简洁的微服务解决方案

介绍 FastCloud是采用Spring Cloud Alibaba、SpringSecurity Oauth2.0、Spring Cloud Gateway、SpringBoot、Nacos、Redis、Mybatis-Plus等框架,开发的一套SpringCloud快速开发系统,使用门槛极低,且采用MIT开源协议,完全免费开源,可免费用于商业项目等场景。 开发文档:https://maku.net/docs/fast-cloud 演示环境:https://demo.maku.net/fast-cloud 前端工程 Github仓库:https://github.com/makunet/fast-admin Gitee仓库:https://gitee.com/makunet/fast-admin 代码生成器 Github仓库:https://github.com/makunet/fast-generator Gitee仓库:https://gitee.com/makunet/fast-generator 交流和反馈 官方社区:https://maku.net Github仓库:https://github.com/makunet/fast-cloud Gitee仓库:https://gitee.com/makunet/fast-cloud 技术解答、交流、反馈、建议等,请移步到官方社区,我们会及时回复,也方便今后的小伙伴寻找答案,感谢理解! 效果图

优秀的个人博客,低调大师

Stack Overflow 火的一段代码竟然有 Bug...

某天,我忙中偷闲去Stack Overflow上赚声望值。 于是,我看到了下面这个问题:怎样将字节数输出成人类可读的格式?也就是说,怎样将123,456,789字节输出成123.5MB? 隐含的条件是,结果字符串应当在1~999.9的范围内,后面跟一个适当的表示单位的后缀。 这个问题已经有一个答案了,代码是用循环写的。基本思路很简单:尝试所有尺度,从最大的EB(10^18字节)开始直到最小的B(1字节),然后选择小于字节数的第一个尺度。用伪代码来表示的话大致如下: suffixes = [ "EB", "PB", "TB", "GB", "MB", "kB", "B" ] magnitudes = [ 1018, 1015, 1012, 109, 106, 103, 100 ] i = 0 while (i < magnitudes.length && magnitudes[i] > byteCount) i++ printf("%.1f %s", byteCount / magnitudes[i], suffixes[i]) 通常,如果一个问题已经有了正确答案,并且有人赞过,别的回答就很难赶超了。不过这个答案有一些问题,所以我依然有机会超过它。至少,循环还有很大的清理空间。 1、这只是一个代数问题! 然后我就想到,kB、MB、GB……等后缀只不过是1000的幂(或者在IEC标准下是1024的幂),也就是说不需要使用循环,完全可以使用对数来计算正确的后缀。 根据这个想法,我写出了下面的答案: public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); } 当然,这段代码并不是太好理解,而且log和pow的组合的效率也不高。但我没有使用循环,而且没有任何分支,看起来很干净。 这段代码的数学原理很简单。字节数表示为byteCount = 1000^s,其中s表示尺度。(对于二进制记法则使用1024为底。)求解s可得s = log_1000(byteCount)。 API并没有提供log_1000,但我们可以用自然对数表示为s = log(byteCount) / log(1000)。然后对s向下取整(强制转换为int),这样对于大于1MB但不足1GB的都可以用MB来表示。 此时如果s=1,尺度就是kB,如果s=2,尺度就是MB,以此类推。然后将byteCount除以1000^s,并找出正确的后缀。 接下来,我就等着社区的反馈了。我并不知道这段代码后来成了被复制粘贴最多的代码。 2、对于贡献的研究 到了2018年,一位名叫Sebastian Baltes的博士生在《Empirical Software Engineering》杂志上发表了一篇论文,题为《Usage and Attribution of Stack Overflow Code Snippets in GitHub Projects》。 该论文的主旨可以概括成一点:人们是否在遵守Stack Overflow的CC BY-SA 3.0授权?也就是说,当人们从Stack Overflow上复制粘贴时,会怎么注明来源? 作为分析的一部分,他们从Stack Overflow的数据转出中提取了代码片段,并与公开的GitHub代码库中的代码进行匹配。论文摘要如是说: We present results of a large-scale empirical study analyzing the usage and attribution of non-trivial Java code snippets from SO answers in public GitHub (GH) projects. (本文对于在公开的GitHub项目中使用来自Stack Overflow上有价值的代码片段的情况以及来源注明情况进行了大规模的经验分析,并给出了结果。)(剧透:绝大多数人并不会注明来源。) 论文中有这样一张表格: id为3758880的答案正是我八年前贴出的答案。此时该答案已经被阅读了几十万次,拥有上千个赞。 在GitHub上随便搜索一下就能找到数千个humanReadableByteCount函数: 你可以用下面的命令看看自己有没有无意中用到: $ git grep humanReadableByteCount 3、问题 你肯定在想:这段代码有什么问题: 再来看一次: public static String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; if (bytes < unit) return bytes + " B"; int exp = (int) (Math.log(bytes) / Math.log(unit)); String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i"); return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); } 在EB(10^18)之后是ZB(10^21)。是不是因为kMGTPE字符串的越界问题? 并不是。long的最大值为2^63-1,大约是9.2x10^18,所以long绝对不会超过EB。 是不是SI和二进制的混合问题?不是。前一个版本的确有这个问题,不过很快就修复了。 是不是因为exp为0会导致charAt(exp-1)出错?也不是。第一个if语句已经处理了该情况。exp值至少为1。 是不是一些奇怪的舍入问题?对了…… 4、许多9 这段代码在1MB之前都非常正确。但当输入为999,999时,它(在SI模式下)会给出“1000.0 kB”。尽管999,999与1,000x1000^1的距离比与999.9x1000^1的距离更小,但根据问题的定义,有效数字部分的1,000是不正确的。正确结果应为"1.0 MB"。 据我所知,原帖下的所有22个答案(包括一个使用Apache Commons和Android库的答案)都有这个问题(或至少是类似的问题)。 那么怎样修复呢?首先,我们注意到指数(exp)应该在字节数接近1x1,000^2(1MB)时,将返回结果从k改成M,而不是在字节数接近999.9x1000^1(999.9k)时。这个点上的字节数为999,950。类似地,在超过999,950,000时应该从M改成G,以此类推。 为了实现这一点,我们应该计算该阈值,并当bytes大于阈值时增加exp的结果。(对于二进制的情况,由于阈值不再是整数,因此需要使用ceil进行向上取整)。 if (bytes >= Math.ceil(Math.pow(unit, exp) * (unit - 0.05)))exp++; 5、更多的9 但是,当输入为999,949,999,999,999,999时,结果为1000.0 PB,而正确的结果为999.9 PB。从数学上来看这段代码是正确的,那么问题除在何处? 此时我们已经达到了double类型的精度上限。 关于浮点数运算 根据IEEE 754的浮点数表示方法,接近0的数字非常稠密,而很大的数字非常稀疏。实际上,超过一半的值位于-1和1之间,而且像Long.MAX_VALUE如此大的数字对于双精度来说没有任何意义。用代码来表示就是 double a = Double.MAX_VALUE; double b = a - Long.MAX_VALUE; System.err.println(a == b); // prints true 有两个计算是有问题的: String.format参数中的触发 对exp的结果加一时的阈值 当然,改成BigDecimal就行了,但这有什么意思呢?而且改成BigDecimal代码也会变得更乱,因为标准API没有BigDecimal的对数函数。 缩小中间值 对于第一个问题,我们可以将bytes值缩小到精度更好的范围,并相应地调整exp。由于最终结果总要取整的,所以丢弃最低位有效数字也无所谓。 if (exp > 4) { bytes /= unit; exp--; } 调整最低有效比特 对于第二个问题,我们需要关心最低有效比特(999,949,99...9和999,950,00...0等不同幂次的值),所以需要使用不同的方法解决。 首先注意到,阈值有12种不同的情况(每个模式下有六种),只有其中一种有问题。有问题的结果的十六进制表示的末尾为D00。如果出现这种情况,只需要调整至正确的值即可。 long th = (long) Math.ceil(Math.pow(unit, exp) * (unit - 0.05)); if (exp < 6 && bytes >= th - ((th & 0xFFF) == 0xD00 ? 51 : 0)) exp++; 由于需要依赖于浮点数结果中的特定比特模式,所以需要使用strictfp来保证它在任何硬件上都能运行正确。 6、负输入 尽管还不清楚什么情况下会用到负的字节数,但由于Java并没有无符号的long,所以最好处理复数。现在,-10,000会产生-10000 B。 引入absBytes变量: long absBytes = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes); 表达式如此复杂,是因为-Long.MIN_VLAUE == LONG.MIN_VALUE。以后有关exp的计算你都要使用absBytes来代替bytes。 7、最终版本 下面是最终版本的代码: // From: https://programming.guide/worlds-most-copied-so-snippet.html public static strictfp String humanReadableByteCount(long bytes, boolean si) { int unit = si ? 1000 : 1024; long absBytes = bytes == Long.MIN_VALUE ? Long.MAX_VALUE : Math.abs(bytes); if (absBytes < unit) return bytes + " B"; int exp = (int) (Math.log(absBytes) / Math.log(unit)); long th = (long) Math.ceil(Math.pow(unit, exp) * (unit - 0.05)); if (exp < 6 && absBytes >= th - ((th & 0xFFF) == 0xD00 ? 51 : 0)) exp++; String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp - 1) + (si ? "" : "i"); if (exp > 4) { bytes /= unit; exp -= 1; } return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre); } 这个答案最初只是为了避免循环和过多的分支的。讽刺的是,考虑到各种边界情况后,这段代码比原答案还难懂了。我肯定不会在产品中使用这段代码。 总结 Stack Overflow上的代码就算有几千个赞也可能有问题。 要测试所有边界情况,特别是对于从Stack Overflow上复制粘贴的代码。 浮点数运算很难。 复制代码时一定要注明来源。别人可以据此提醒你重要的事情。 原文链接:https://programming.guide/worlds-most-copied-so-snippet.html<br> 作者:Andreas Lundblad<br> 译者:弯月,责编:欧阳姝黎<br> 出品:CSDN(ID:CSDNnews) 近期热文推荐: 1.1,000+ 道 Java面试题及答案整理(2021最新版) 2.终于靠开源项目弄到 IntelliJ IDEA 激活码了,真香! 3.阿里 Mock 工具正式开源,干掉市面上所有 Mock 工具! 4.Spring Cloud 2020.0.0 正式发布,全新颠覆性版本! 5.《Java开发手册(嵩山版)》最新发布,速速下载! 觉得不错,别忘了随手点赞+转发哦!

优秀的个人博客,低调大师

数据分析容易被忽略的10个错误

本文总结了数据分析的几个阶段中最常犯的10个错误,以及规避的方法,收藏起来,分析不翻车! 一、数据采集阶段 1、数据失真 数据是可能骗人的,比如店铺、电影的评分,可能被人为操控;比如某公司发布的行业分析报告,也具有很大的主观性。 基于错误的数据,做出的分析结论是无益甚至是有害的。所以在采集数据时,我们先要考证数据的来源及可信度,还要关注不符合常理的数据变化,对数据采集方法进行调整。 2、幸存者偏差 就算数据是真实的,也不能轻信。 举个有名的例子,二战时英军发现,从战场飞回来的战机,机身上的弹孔比引擎和油箱上的要多的多,根据这个数据,我们很容易得出要加强机身的防护的建议。但事实的真相却是,那些引擎和油箱上中弹的飞机已经回不来了,我们更应加强引擎和油箱的防护,这就是常说的“幸存者偏差”。 造成幸存者偏差的原因,其实是取样出现了偏差,在数据采集时,我们要避免主观臆断,推演各类可能性,科学取样。 二、数据处理阶段 1、原始数据没有备份 很多新手在拿到原始数据后,喜欢在原始数据基础上把异常值剔除,再备份再做数据处理。但时常到后面发现删除的值其实并非异常值或者仍然有价值,这时候想找回值就麻烦了。所以,当我们拿到原始数据后,第一件事就是要做好备份。 2、不重视数据清洗 拿到数据后,大量繁琐的数据清洗工作常常让数据分析师们感到烦恼,很多人会图省事略过一些步骤,但这常常会造成返工,拖延了项目进度。 干净的数据源是我们一切分析工作的基础,我们需要重视数据清洗。当然了,为了提高数据处理效率,我们可以采用专业的数据分析工具。就拿我在用的FineBI来说,极大简化了数据处理流程,仅需拖拽就能完成数据的清洗、转化、抽取、合并、计算等功能,我们不需要花大量时间在数据处理上,可以把精力聚焦在业务分析上。 三、数据分析阶段 1、过度追求技巧 熟练使用各种数据分析工具如Excel、SQL、FineBI、Python,以及各类经典的分析方法,是每个数据分析大神的基本功,但这并不意味着,好的数据分析,就一定要用到各种高级的工具和方法。 很多数据分析新人会去搜罗各种最新的分析方法和思路,套用在项目中,以证明自己的工作能力。但真正优秀的数据分析,依靠的是不断深入地探索,以及严谨的逻辑链条。再好的工具和方法,都是为人服务的,合适的就是最好的。 2、过度依赖套路 我们不能过度追求技巧,但必要的方法论储备是要有的。在数据分析行业,并不存在“一招鲜,吃遍天”。 我们在刚开始学习数据分析时,会学习各种解题套路,但真正实操时,其实并不存在通用的套路。不同的行业、不同的业务,不同的阶段,哪怕用的是同一种分析方法,结论都应有所区别。比如to C和to B行业的客户运营就是不一样的,比如互联网初创公司可能追求用户增长,步入成熟期后追求利润率提高。 这里并不是鼓励大家盲目追求技术,而是我们要在日常工作中多学习积累分析思路和方法,丰富自己的武器库,将来胜任更多的应用场景。 3、相关性≠因果性 在分析时,我们常常将不同指标的数据进行关联分析,找出问题的原因。但这样往往会犯一个错误,就是错把相关当成因果。 我们通过统计,发现常吃海参的人比不吃海参的人智商要高一些,但这背后其实是因为吃海参的人普遍比较富裕,因而受教育水平高,测出的智商高,我们不能说为了提高智商赶紧去吃海参。 为了避免这一错误,我们在对数据间的相关性进行逻辑推演时,应时刻带着批判性思维,考虑各种中介变量。 4、由结果推原因 错误的数据,披上科学的外衣,是很危险的事。如果我们在开始分析前,就已经在心里预设了一个结论,带着结论找原因,射箭画靶,那做出的分析可能毫无价值甚至可能带来极大的损失 数据分析的优势,在于尊重客观数据而并非人的主观臆断。所以,我们在进行数据分析前,应摒弃主观臆想和经验主义,相信常识和客观数据,分析时还要多次检查逻辑的严谨性。 四、分析报告阶段 1、误导性图表 业内都说字不如表、表不如图,但比不用图表更可怕的,是用误导性图表。比如下面这两张图,光看左边会明显感知到数据在飞速增长,而看到右边才能得知真正的增长速度。 我认为,报告还是应当追求真实,不逃避问题、不美化缺陷,也是分析师的职责所在。 2、结论脱离业务实际 很多人在汇报结论时,只是简单把数据分析结果说了一通,得出一些模拟两可或者大家都知道的废话,并没有联系到业务实际,也并不具备可行性,这样的报告参考价值很低。 业务决策不光是业务人员的事,数据分析人员往往能从客观的角度提出独特的见解。我建议大家多和业务人员交流,至少要熟悉各个业务环节,了解提出数据分析需求的原因,最终得出的结论要有针对性,给出具体可落地的实质建议。 分享一下这个分析工具,回个“数据分析”就能拿得!

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。