自定义博客皮肤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

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

原创 python初始化二维数据

通过debug,发现result[0][0]-result[0][2]的范围,输出都正确,从result[1][0]开始输出结果有问题,于是大概就猜测到了问题在哪,应该是result初始化的时候出现了问题。将a[0][0]的值修改为1以后,a[1][0], a[2][0]的值也变为了1。上面这种初始化方式,对a[0][0]值进行修改的时候,a[1][0], a[2][0]的值未发生改变。很明显,对a[0][0]进行修改以后,a[1][0], a[2][0]的值也发生了改变。

2024-03-21 20:25:04 343

原创 chatglm-6B模型下载

从huggingface上面下载chatglm-6B模型是比较简捷的方式,下面记录一下下载安装过程。

2023-11-20 15:56:52 846

原创 wordcloud在mac上显示中文乱码

经过查阅资料发现,wordcloud默认不支持中文,需要指定font参数才能正常显示中文。在mac上使用wordcloud显示词云的时候,发现图片中的中文显示乱码。生成的词云图片即可正常显示中文。

2023-11-14 19:03:17 582 1

原创 在python3.8安装tensorflow 1.14.0

想安装tf 1.14.0的版本,终端直接报错。具体来说,需要什么版本就输入什么版本。

2023-10-12 15:50:04 985

转载 conda常用命令总结

conda create -n env_name package_name #创建名为env_name的新环境,并在该环境下安装名为package_name 的包,可以指定新环境的版本号,例如:conda create -n python2 python=python2.7 numpy pandas,创建了python2环境,python版本为2.7,同时还安装了numpy pandas包。conda install --name env_name package_name #在指定环境中安装包。

2023-09-20 10:15:20 192

原创 anaconda:Env creation from python 3.7 not working M1 Apple Silicon Mac

发现对于Apple Silicon,python没有低于3.7以下的版本。因此直接换成3.8的版本…在anaconda上执行如下命令,想创建python3.7的环境。具体可以参考github说明。

2023-09-19 16:05:29 453

原创 iceberg对比hive优势

在传统的实时数仓中,由于列式存储相对行式存储有较高的查询性能,我们一般采用parquet,orc等列存储数据格式。传统的流式数据入库的过程中对小文件进行合并会产生很多问题,比如流式数据不断的往hive表进行写入,如果同时有一个合并程序进行小文件的合并,那么这时候对同一份数据进行读写。当有实时指标计算的需求时,可以使用 flink 实时计算框架,来构建近实时数仓,而且iceberg 存储全量数据,且仍然有批计算能力,可以在流式计算作业运行的同时,跑一个批作业来进行数据回溯或者数据纠正。

2023-08-02 19:12:16 2527

转载 iceberg总结简介

Iceberg 会在插入数据的时候根据分区策略跟踪新数据的分区信息,并将其记录在元数据中;当修改 Iceberg 表中的分区规则时,修改之前的数据还是按照以前的分区方式存储,而修改之后的数据才会按照新的规则存储,修改前后的分区元数据是分开存储的,这就意味着在同一个表中允许存在多种分区策略。最上层中记录了 Iceberg 表当前元数据的版本,对应的是version-hint.text文件,version-hint.text文件中只记录了一个数字表示当前的元数据版本,初始为 1,后续表每变更一次就加 1。

2023-08-02 16:02:02 999

原创 判断是否是数字,字母,中文字符

其中,4e00-9fa5表示汉字的unicode编码范围。关于unicode编码与utf-8, utf-16的关系,可以查阅参考文献1。JDK中自带有isDigit/isLetter方法,可以判断字符是否是数字/字母。0-9对应的ascii码为48-57,A-Z:65-90,a-z:97-122。从JDK1.7开始,还可以使用UnicodeScript来判断是否为中文字符。要判断一个字符是否为中文字符,可以使用正则匹配的方式。正则匹配也是我们进行字符串处理常用的方法。可以利用ascii码值来进行判断。

2023-07-05 11:40:47 699

原创 百度AI开放平台 OCR调用与 open api qps result limit reached error code 18

上面的错误提示显示是qps调用超出了上限,但是很明显,我们就一个java代码,应该不存在说qps太大超过上限的问题。先在开放平台注册完毕,并创建一个应用,得到AppID, API Key, Secret Key等参数。最近项目中要使用到OCR功能,发现百度AI开放平台这部分能力比较强,于是注册账号并调用相关API。经过搜索发现,是我们在创建应用的时候,还需要主动去领取免费的额度!如上图,有个领取免费资源的按钮,点击该按钮领取即可。等上述准备工作就绪,开始测试OCR相关的功能模块。

2023-06-29 19:57:24 700

原创 pandas dataframe获取所有行名称与列名称

df.index为RangeIndex类型,df.index.values属性会输出一个numpy.ndarray类型的数组,将这个数组转化为list,就可以得到所有行名称的list。第二种方式: df.columns返回的是Index类型,然后将该Index转成list即可。pandas中,dataframe获取行名称,可以有如下两种方式。更多时候,我们是要想获得dataframe的列名,有如下三种方式。第三种方式:直接使用list(df),就返回列名的list。

2023-06-19 16:49:54 4734 1

原创 pandas 按行聚合 按列聚合 分组添加汇总行

1.先根据name做groupby操作,需要注意的点在于,将groupby函数中的as_index参数设为False,这样name将不会作为结果中的行索引。对于某个数据,我们经常需要各种聚合操作,比如针对行/列求和,求均值等。3.对所得结果按name排序,这样得到的结果方便查看,汇总行数据在相同key数组分组的最下面一行。上面代码实现的功能是,将数据按name分组,然后对s1,s2进行聚合做求和操作。2.对于df,将s1,s2, merge分别按列求和,并且该行索引值为总和。

2023-06-16 17:49:46 1865 1

原创 pandas链式操作与SettingWithCopyWarning详解

因为subdf变量是作为 Get 操作的输出创建的,它可能是原始 DataFrame 的副本,也可能不是,除非检查,否则我们不能确认。要了解 SettingWithCopyWarning,首先要知道,Pandas 中的某些操作会返回数据的视图(View),某些操作会返回数据的副本(Copy)。警告提醒我们,代码可能并没有符合需求,修改到的可能并不是我们想要修改的那个数据集。如上所示,左侧的视图 df2 只是原始数据 df1 一个子集,而右侧的副本创建了一个新的对象 df2。这样就达到了我们预期的目的。

2023-06-14 16:42:59 696

原创 风控模型指标PSI详细理解

因为在金融领域,稳定是个特别重要的要求,模型/特征的更新频率,比起搜广推这种业务场景来也慢很多很多。举个很实际的例子,大部分做贷款业务的互金公司,包括传统的银行,在20年用户都发生了重大变化,大家的逾期率普遍都提升了很多,原因大家也都清楚,就是因为疫情的黑天鹅事件。典型情况下,P表示数据的真实分布,Q表示数据的理论分布、估计的模型分布、或P的近似分布。所以拆开一下,很容易看出来,PSI其实是将A(actual)与E(expected)的KL散度做了一个对称化操作,将两个KL散度进行了相加。

2023-06-07 11:26:04 1878 1

原创 lookalike模型综述

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

2023-06-02 16:02:21 704

原创 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 1209

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

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

2023-05-22 20:59:30 3017

原创 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 605 1

原创 归并排序java实现

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

2023-05-16 17:55:30 404

原创 堆排序与取topK java实现

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

2023-05-16 16:58:55 466

原创 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 7565 3

转载 find命令用法小结

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

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

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

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

2023-04-21 18:06:56 5456 2

原创 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 968 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 648 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 349

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

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

2023-03-14 18:14:30 4213

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

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

2023-02-06 12:10:56 1030

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

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

2023-02-02 18:07:28 898 1

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

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

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

原创 scala中的字符串插值

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

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

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

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

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

原创 pandas将Series转成DataFrame

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

2023-01-12 17:25:56 3477

原创 pandas transform小结

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

2023-01-11 17:46:40 395

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

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

2023-01-10 17:42:33 2674 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 588 1

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

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

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

原创 parquet-tools用法详解

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

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

原创 sql求交集与差集

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

2022-12-09 22:43:40 11962

原创 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 3164 1

空空如也

空空如也

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

TA关注的人

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