自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

bitcarmanlee的博客

https://github.com/bitcarmanlee/easy-algorithm-interview-and-practice 同步更新,欢迎star

  • 博客(763)
  • 收藏
  • 关注

原创 lookalike模型综述

首先我们需要知道,lookalike不是某一种特定算法,而是某一类算法或者策略的总称。具体来说,在某个实际业务场景中,我们可能会先根据某些规则或者业务经验,选出一些好用户,即所谓的种子用户。这些用户往往精度很高,能精确贴合我们业务场景,但是一般人数较少。这个时候,我们就需要通过lookalike算法,根据种子用户,对人群来进行扩充,来满足实际业务需求。举个实际例子,广告主在进行广告投放的时候,可能事先会给定1w个种子用户,这些种子用户对广告的响应与转化都很高。

2023-06-02 16:02:21 233

原创 pandas pivot pivot_table groupby crosstab用法与区别详解

pivot_table可以重塑数据,重塑数据的好处是使得数据更加的直观和容易分析,俗称数据透视,经常使用excel的同学对透视表就不陌生了。pivot_table与pivot区别在于,pivot仅仅是对数据进行重塑,无法对数据进行聚合。同时,pivot方法中,指定的index与columns构成的数据里面如果存在重复的情况,代码将会报错。前面提到的pivot可以对数组进行分组聚合,其实我们平时日常对数据进行分组聚合使用最多的是groupby。可以看到,输出与pivot_table是完全一样的。

2023-05-24 18:21:09 638

原创 风控模型指标KS值详解与代码实现

K-s曲线的数据来源和本质是与ROC曲线是一致的,只不过ROC曲线是将真正类率和假正类率作为横纵轴,K-s曲线则是把真正率和假正率都当作是纵轴,横轴为选定的阈值。crosstab是计算分组频率的特殊透视表,我们先试用crosstab计算分组频率,然后通过cumsum方法,即可求得在各个阈值的累积频率然后完成ks值的计算。关于ks_2samp方法,可以多说几句,其输出了两个值,一个是statistic,就是我们想求的ks值,还有一个pvalue。以python为例,实现ks值的计算。

2023-05-22 20:59:30 253

原创 java数组Arrays/ArrayUtils工具类常见操作

commons-lang包 org.apache.commons.lang.ArrayUtils类,有许多针对数组的操作,下面我们挑一些常用的方法示例。注意此时不能使用基本类型int, long, double这种,需要转换成相应的包装类。传入一个Comparator接口的实现类REVERSE_ORDER,即可实现逆序排列。注意sort方法是对数组原地排序,并不会返回一个新数组,返回类型为void。jdk中自带的Arrays工具类可以实现对数组排序功能。如果要逆序排,可以按如下操作。

2023-05-16 19:56:12 47 1

原创 归并排序java实现

归并排序是分治思想(divide-and-conquer)的经典运用。分治是先将现有问题分(divide)成一些小问题去递归求解,然后再将所有分的问题进行治理(conquer)合并得到最终结果。1.归并排序利用了完全二叉树的性质,最好最坏与平均时间复杂度均为O(nlogn)。下图来自参考文献1,该图就很清晰描述了归并排序的全过程。2.归并排序是一种稳定排序算法。

2023-05-16 17:55:30 25

原创 堆排序与取topK java实现

将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。最近趁着有点时间,稍微复习了一下数据结构相关内容,温习了一下堆排序,做一下记录。关键的步骤以及作用,都已经在代码中进行了注释,再结合参考文献1就可以容易理解。求一个无序序列的topK,是个经典问题。更具体的过程与图示,见参考文献1,不再重新画图。上面的代码,分别找到最大的三个数与最小的三个数。

2023-05-16 16:58:55 298

原创 copilot平替tabnine解析

GitHub Copilot是GitHub和OpenAI合作开发的一个人工智能工具,用户在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或JetBrains集成开发环境时可以通过GitHub Copilot自动补全代码。很简单,因为现在copilot已经收费了,而且价格不算太便宜。简单来说,copilot是一个帮你写代码的利器,根据openai开发的gpt系列算法(目前已经接入gpt4),对代码进行自动补全,能大大提高开发人员的开发效率。

2023-05-04 17:29:18 1266 2

转载 find命令用法小结

不管我决心如何组织文件,似乎总有无法找到文件的时候。有时是因为我不记得最初的文件名,其他时候,我知道名字,但我不记得在哪里保存它了。甚至有时我需要一个我最初就没有创建的文件。但是,无论遇到什么困难,我知道在 POSIX 系统 上,总是有 find 命令可以帮助我。find 命令由 POSIX 规范 定义,它创建了一个用于衡量 POSIX 系统的开放标准,这包括 Linux、BSD 和 macOS。简而言之,只要你运行的是 Linux、BSD 或 macOS,那么 find 已经安装了。

2023-04-23 19:17:27 68 1

原创 intellij 从2020升级到2023 踩坑实录

但是查了好久,也木有发现OdpsStudio相关的插件呀,相当郁闷,也不知道为什么intellij启动跟aliyun有什么关系。首先下载新版本,这个没什么好说的,直接去jetbrain官网,根据自己的操作系统下载对应的intellij版本,我的机器是ubuntu,下载对应的linux .tar.gz然后解压就好。于是把原有的文件删掉,重新再点击create desktop entry选项,然后发现应用程序里的快捷方式图标,更新了。但是重点来了,发现每次点快捷方式,启动的还是原来2020老版本的IDE!

2023-04-21 18:06:56 681 1

原创 sql group by 1, 2

作为算法工程师,天天跟数据打交道是避免不了的,sql也是日常工具。某天运营的同学丢给我一个sql,发现sql语句里面有group by 1,2 这种写法。作为一个老鸟,之前确实没见过大家用group by 1,2这种用法,都是group by 字段1,字段2这种写法,比较清晰。因此特意去查了一下sql的相关语法,group by 1,2这种写法是没有问题的,group by / order by 后面跟数字,表示select 后面选择的字段,1 代表第一个字段,2代表第二个字段,以此类推。

2023-03-27 11:31:21 156 1

原创 spark创建空dataframe

源码中已经很明确告诉我们,emptyDataFrame创建了一个不含任何行列且schema为空的dataframe。项目中会需要用到创建空的dataframe。spark提供了emptyDataFrame方法,可以直接创建。错误信息也很直观,emptydf是0 columns,df是2 columns,所以无法直接union。为了解决上面的问题,我们需要在生成emptyDataFrame的时候指定schema。这个空的dataframe在实际中用途有限,比如如下场景。上面的方法运行时候直接抛出错误信息。

2023-03-23 14:11:33 200 2

原创 c++,java,python,scala,shell三目运算总结

注意scala与python中if else表达式的不同在于,本质上是利用了scala中的自动推断语法,scala中任何表达式都是有值的,if else表达式的值是每个分支最后一行代码的结果。实际工作场景中经常会有各种语言一起混编的情况,混编的时候经常会大脑短路把各种语法混淆,或者某种语言有一段时间没编写忘了的情况,比如三目运算。python语法里面是没有标准三目运算符的,可以使用if else语法来模拟三目运算很方便。:这种语法,看下面的例子。c++ 与 java的语法中,都存在有标注的三目运算符。

2023-03-16 11:25:48 109

原创 macos休眠以后自动关机如何解决

最近将macos休眠以后,发现每次再打开机器都会自动重启,显然是某个设置不符合预期。查找了一下相关设置,记录如下。6.将在60分钟不活跃后退出登录前面的勾选项去掉即可。4.点击下方的"点击锁按钮以进行更改"。1.打开系统偏好设置。2.点开安全性与隐私。3.选择通用选项卡。

2023-03-14 18:14:30 785

原创 RDD, DataFrame,DataSet区别与相互转化

它提供了特定领域内专用的 API 来处理你的分布式数据,并让更多的人可以更方便地使用 Spark,而不仅限于专业的数据工程师。从根本上来说,一个 RDD 就是你的数据的一个不可变的分布式元素集合,在集群中跨节点分布,可以通过若干提供了转换和处理的底层 API 进行并行处理。3.如果你想在编译时就有高度的类型安全,想要有类型的 JVM 对象,用上 Catalyst 优化,并得益于 Tungsten 生成的高效代码,那就使用 Dataset;1.你希望可以对你的数据集进行最基本的转换、处理和控制;

2023-02-06 12:10:56 370

原创 vim退出后内容依旧留在屏幕的解决办法

vim编辑文件,输入:q退出以后,文件的内容依然显示在屏幕上,很烦人,而且有隐私数据泄露风险。然后source上面~/.bashrc配置文件使其生效即可。编辑~/.bashrc配置文件,在文件最后添加一行配置。

2023-02-02 18:07:28 344

原创 scala伴生对象与case class用法

之前用过scala中的伴生对象,隔一段时间不用又有点忘记掉了。特此记录,方便后续查找。

2023-01-19 17:04:36 291 1

原创 scala中的字符串插值

从2.10版本开始,scala支持字符串插值。所谓的字符串插值,即允许开发人员将变量引用直接插入处理过的字面字符中,且提供了三种插值方式:s,f,raw。在字符串前面加上f,类似于实现了C语言中的printf功能,可以对字符串进行初步的格式化。raw插值的这种方式,当我们想输出\n,\t等特殊字符又不对其进行转义的时候,就特别好用。raw插值器与s插值器用法类似,不同的是它不在字符串中进行任何字面转义。在任何字符串前加上s,就可以在字符串中直接使用变量进行替换。同时,这种方式还支持处理表达式。

2023-01-17 17:57:07 257 1

原创 生成2023年节假日/工作日维表

项目中有一张维表,维护的是历史节假日工作日的信息,估计在很多场合都有类似的需求。到了新年,需要生成新一年的数据,下面看看如何在维表中插入新一年的数据。

2023-01-17 16:57:24 737 4

原创 pandas将Series转成DataFrame

具体的值为group,上面的逻辑是将相同department的group值进行聚合。我们想将其转成一个dataframe,可以使用字典的方式,直接创建一个新的dataframe。与一维数组不同的是,除了数组数据以外,他还有一组与数组数据对应的标签索引。上面的代码也将Series转换成了一个dataframe,与前面稍微有所区别的在于,对group还进行了去重排序操作。上面的代码中,data进行groupby操作以后取group列,得到的就是一个Series结构。

2023-01-12 17:25:56 972

原创 pandas transform小结

transform可以调用一个函数,在每个组上生成一个相似的索引数据帧,并返回一个数据帧,该数据帧的索引与原始对象的索引相同,并填充转换后的值。核心是在每个组上生成一个相似的索引数据帧,这个就奠定了transform的强大之处,后面很多使用场合中我们都可以慢慢来体会。可以看出来,transform保留了与原来数据相同的索引。2.最后返回的结果,带上了原始对象的索引,可以很方便的与原始数据进行拼接返回。很明显上面的结果,与原数据行数不一致,索引也无法对齐,得到的结果都是NaN。很明显不是我们想要的结果。

2023-01-11 17:46:40 175

原创 pandas常见用法总结:数据筛选,过滤,插入,删除,排序,分组聚合等

pandas里面的用法相对非常灵活,经常会有一种需求可以采用多种方式实现的情况。为了方便查找与记忆,特此对pandas里面常见的一些用法。

2023-01-10 17:42:33 1190 1

原创 pandas loc iloc ix用法详解

pandas处理数据时,我们会经常看到dataframe结构使用loc, iloc, ix等方法。那么这些方法到底有啥区别,下面我们来进行详细分析。首先我们先明确一点,这几个方法都可以用来过滤dataframe的行列。他们的不同,主要还是使用方式的不同。在分析之前,我们先来明确一下标签label的概念。为了方便看得更清楚,先构造一个数据集# label上面的data,0,1,2,3,4,5为索引,就是我们的行标签。name ,age,country,city为列名,则是我们的列标签。

2023-01-09 15:06:28 313 1

原创 分割训练集测试集验证集的两种方式

训练模型过程中,不可避免要对数据集进行切分,将数据集按比例分成训练集,测试集,验证集。作为一种常见的需求,稍微总结了一下两种实现方式。

2023-01-06 16:56:28 1071 1

原创 parquet-tools用法详解

因为是压缩格式,我们无法直接查看parquet文件里的数据,这个时候parquet-tools就给我们提供了一个方便的途径对parquet文件进行查看。从上面的输出可以看出来,meta参数输出的信息,比schema参数输出信息更详尽,可以看到数据的压缩方式,是否压缩,数据的null值数量,min/max值等。对于parquet文件,第一下我们可能需要了解的就是元信息,这个时候通过schema/meta参数就可以实现查看元信息。cat命令可以查看数据里面的内容,用法与linux系统中的cat用法类似。

2022-12-11 11:34:08 1777 3

原创 sql求交集与差集

日常工作中,针对两个表A,B,求A与B表中同一个字段的交集与差集是常见需求,下面我们来总结一下求交集与差集的方法。假设现在有两张表A,B,A,B表中均有一个字段为id,现在我们想求A与B中都存在的id有多少个(去重),在A中但不在B中的id有多少个。

2022-12-09 22:43:40 4529

原创 sql not in 查询结果为空解决

而任何值与NULL值进行对比,结果都为null,即idxxx null 返回的都为false,最终not in子句不会返回任何一行数据。result表与xxx表中都有数据,且result表中的id数量多余xxx表,正常应该输出一个正整数,但是该语句查询出来的结果为0,很显然不符合预期。3.通过not in,查找在result中且不在xxx表中的id,并对id做去重,最后进行count计数操作。总结一下就是,如果not in中只要有一个id位null,就会导致返回的结果为0。

2022-12-09 22:01:35 1098

原创 回归算法中特征线性相关会怎样

线性相关的概念,大家在线性代数里面都有学过。如果把问题更加简化一点,假设两个单变量x1,x2x_1, x_2x1​,x2​线性相关,那么可以写成如下形式x1=a⋅x2+bx1​=a⋅x2​+b。

2022-11-28 12:32:18 528

原创 sql计算占比

计算占比是日常分析中常见的需求,下面我们来小结一下怎么用sql来实现计算占比。

2022-11-23 12:38:23 3621 1

原创 sql 计算两个日期差几天

有段时间没写sql,正好今天要处理个比较复杂的业务问题,需要写sql,里面碰到几个小点,还有点记得不是太清楚,稍微想了一阵才写出来,特此记录,方便后续查询。其中有一个环节,需要计算两个日期差几天,经过一番思考,可以按如下方式进行计算。

2022-11-18 17:45:55 2810 1

原创 python3.x zip用法详解

在python 3.x系列中,zip方法返回的为一个zip object可迭代对象。""""""通过上面的注释,不难看出该迭代器的两个关键点:1.迭代器的next方法返回一个元组,元组的第i个元素为各个输入参数的第i个元素。2.迭代器的next方法,遇到输入序列中最短的那个序列迭代完毕,则会停止运行。为了看清楚zip的效果,我们先看个最简单的例子try:pass上面的代码,输出结果为('a', '1')('b', '2')('c', '3')('d', '4')

2022-11-12 20:37:29 491

原创 计算AUC的方法以及代码实现

按概率从高到矮排个降序, 对于正样本中概率最高的,排序为rank_1, 比它概率小的有M-1个正样本(M为正样本个数), (rank_1 - M) 个负样本。正样本概率第二高的, 排序为rank_2, 比它概率小的有M-2个正样本,(rank_2 - M + 1) 个 负样本。正样本中概率最小的, 排序为rank_M,比它概率小的有0个正样本,rank_M - 1 个负样本。可以看出,sklearn中auc,以及我们用上面第二,第三种方法计算得到的auc值,都是完全一致的。具体的详情可以参考下文。

2022-11-04 11:35:59 603

原创 redis为什么速度快小结

当客户端的请求抵达服务器以后,服务器会采用多路分配的策略,由一个线程接收所有请求,然后将请求派发到相关的工作线程并进行处理。但是,执行命令的模块,即文件事件分派器仍然是单线程,所以我们还是可以说redis是单线程模型。redis作为一种常见的kv数据库,在实际中使用非常广泛,其最大的特点就是"快",在系统中常被用来当做缓存快速获取想要数据。平时大家所说的单线程模式,对应上面的图片,其实指的是执行redis命令的核心模块是单线程,并不是说整个redis的服务就只有一个线程。复用:指共用一个线程或进程。

2022-10-13 15:46:14 404

原创 redis为什么要使用skiplist跳表

跳表是一种特殊的链表,特殊的点在于其可以进行二分查找。普通的链表要查找元素只能挨个遍历链表中的所有元素,而跳表则利用了空间换时间的策略,在原来有序链表的基础上面增加了多级索引,然后利用类似二分查找的思路来快速实现查找功能。跳表可以支持快速的查找,插入,删除等操作,时间复杂度为O(logn),空间复杂度为O(n)。

2022-10-13 10:13:53 546

原创 redis五种数据结构与六种底层实现

SDS同样遵循C语言中字符串以’\0’结尾的观里,并且这个空串不计算在len的长度中,另外还为该串额外分配了一个字节的空间,包括添加到末尾等操作,全由SDS中的函数自己完成,不需要调用者进行额外的操作。而在SDS中,是以处理二进制的方式来处理存放在buf数组中的数据,因为是二进制,所以不会对里面的数据类型有任何限制,也可以存放视频图像声音这类非文本数据。SDS有5中header类型,之所以要定义不同的类型,是为了让不同的字符串使用不同长度的header,达到节省内存的目的。5. zset 有序集合。

2022-10-12 15:37:56 352

原创 kafka为什么速度快总结

kafka被广泛运用在各个系统中,被用来充当消息的中间件与数据总线的功能。而且我们都知道,kafka是基于磁盘存储的,但是描述kafka的形容词,最常见的经常有诸如速度快,延时小,吞吐量大这些,吞吐量能达到几十w甚至上百万每秒。而这些形容词,却与磁盘来说是格格不入的。所以kafka为什么快就成了一个经典的问题,下面我们就来进行初步总结。

2022-10-08 16:45:46 1120

原创 信用评分卡A/B/C卡

A卡(Application score card) 为申请评分卡。C卡(Collection score card) 为催收评分卡。B卡(Behavior score card) 为行为评分卡。分别来说,对应的即为贷前/贷中/贷后行为。信用评分卡可以分为A,B,C三类。

2022-09-27 19:15:57 575

原创 flink kafka消费pojo类型数据实战详解

首先,我们定义一个pojo类}}}}}@Override"}";}}我们定义了一个User类,该类有两个字段name与age。需要注意的是,该类必须要包含有默认的构造函数,否则后续代码使用过程中会出现问题,具体可以参考如下链接/***/@Override}@Overridetry {}}@Override}}上面类的作用,是将User对象序列化的过程,方便后面的数据传输。上面使用了ObjectMapper类进行序列化,需要引入如下依赖。

2022-09-27 16:13:16 861

原创 Flink+kafka实时统计本地环境搭建与代码实战

flink经常用来消费上游kafka的数据,而kafka又依赖zookeeper进行。所以在进行测试之前,先要准备好本地的zookeeper与kafka环境。在pom.xml文件中,先添加所需要的依赖。主要包括flink相关的依赖已经kafka相关的依赖,flink版本1.7.2,kafka相关版本0.9。通过命令行事先准备了一个名为test的topic,然后实现producer往里面写数据。稍微需要注意的是,序列化反序列化使用的类型,均为StringSerializer。

2022-09-26 15:00:00 1166

原创 flink keyby指定key方式详解

这种操作在各种大数据计算引擎中都非常常见,比如最早的mapreduce,从map阶段到reduce阶段,就是通过shuffle操作将具有相同key的数据分配到同一个reduce端进行处理。比如如果数据是个比较复杂的嵌套结构Tuple2,如果我们想对内部嵌套的Tuple2的第一个字段进行keyby操作,就无法通过字段号来操作,这个时候我们可以通过字段名的方式来进行代替。先定义个内部静态类,静态类包含有两个字段,分别为word与count。

2022-09-17 12:40:38 3235

原创 flink groupby keyby区别

spark中我们经常使用groupby算子对数据进行聚合。flink中,不仅有groupby算法,还有keyby算子,那么这两者的区别在哪里?上面是stream版的wordcount操作,对于DataStream数据,使用的则是keyby算子。上面可以认为是batch版的wordcount操作,对于DataSet使用的就是groupBy操作。groupby是用在DataSet系列API中,Table/SQL等操作也是使用groupby。keyby是用在DataStream系列API中。

2022-09-17 10:59:07 906

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除