- 博客(147)
- 收藏
- 关注
原创 MySQL1225-报告系统状态的连续日期
即如果任务失败了,就是失败状态的起止日期,如果任务成功了,就是成功状态的起止日期。每个任务都独立于先前的任务。任务的状态可以是失败或是成功。2-过滤出2019年的数据,求连续同状态。1- 使用union all实现列转行。最后结果按照起始日期。succeeded表。
2024-10-27 19:34:20
456
原创 Sqoop基础入门
sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;导出数据:从Hadoop的HDFS、HIVE中导出数据到关系数据库mysql等。
2024-10-21 17:39:09
943
原创 Matplotlib和Seaborn数据可视化
条形柱状图适用于销售业绩对比、人口统计分布展示、学术研究成果呈现、项目进度管理等众多场景,以直观的方式展现不同类别数据的大小差异,便于比较和分析各类数据的分布情况。箱线图主要应用于显示数据的分布情况,可用于质量控制中监测生产数据的稳定性、统计分析中比较多组数据的分布差异、金融领域分析股票收益的波动等场景。直方图适用于展示数据的分布形态,常见于质量控制中分析产品指标分布、统计研究中判断数据集中趋势和离散程度、市场调研中了解消费者特征分布等场景。按右上、左下、中间轴线(左上至右下)的方式分别设置图表类型。
2024-10-18 20:38:13
1078
原创 Matplotlib绘图
Matplotlib(功能强大,代码相对复杂)Matplotlib是Python编程语言的开源绘图库。它是Python可视化软件包中最突出的,使用最广泛的绘图工具。Matplotlib在执行各种任务方面非常高效。可以将可视化文件导出为所有常见格式(PDF,SVG,JPG,PNG,BMP和GIF)。Matplotlib可以创建流行的可视化类型-折线图,散点图,直方图,条形图,误差图,饼图,箱形图以及更多其他类型的图,还支持3D绘图。
2024-10-18 19:46:37
391
原创 同期数分析-留存率
同期群分析是数据分析中的经典思维,其举例:下表记录了每个月新购买的用户数,并统计每个月的新增用户在之后月份的复购情况数据截止到2023年7月,如图下所示。数据的第一行,2023年1月有97个新用户之后的+1月(2023年2月)有46%的用户再次光顾+2月(2023年3月)仍有39%的回头客第一行的46%、39%都是对应复购人数占2023年1月新增购买用户的比重,这些人属于2023年1月同一期的新增用户其他行也是一样的道理,每一行为同一个群组,反映同一期新增用户在之后一段时间复购行为的变化趋势。
2024-10-18 18:22:55
849
原创 用户偏好分析-筛选5个有高客单单价偏好的城市
我们常说的用户偏好分析是一种分析方向,它基于用户属性和行为等数据,可以分析用户对于某些产品、服务或特征的喜好程度。通过用户偏好分析,品牌可以更好地了解目标客户群体的需求和行为特点,从而制定契合度更高的产品策略、宣传策略等。TGI是一种衡量和对比不同用户群体偏好程度的方法,具有逻辑清晰、计算便捷的特点,被广泛应用于各类用户偏好分析之中,而且效果都还不错。
2024-10-17 16:59:24
996
原创 RFM用户分群分析
R和M的划分:根据统计信息,R和M相较于离散,因此选择25% 和 75% 作为划分区间的2个边界值F的划分:大部分用户分布趋近于1,从min到75%的分段值都是1且mean也才1.365.因此可以和业务部门进行沟通,可以使用 2 和 5 来作为边界业务部门认为当年购买>=2次可被定义为复购用户(而非累计订单的数量计算复购用户)业务部门认为普通用户购买5次已经是非常高的次数,超过该次数就属于非常高价值用户群体后续使用pd.cut方法,实行的是左开右闭的原则.
2024-10-17 11:19:35
1276
原创 合并与变形
使用说明:以列名1作为索引,根据列名2进行分组,对列名3使用pandas内置的聚合函数进行计算,返回新的df对象。参数,数据会堆叠在一起,列名相同的数据会合并到一列,合并后不存在的数据会用NaN填充。对应SQL中的join,保留左右两侧侧表df1和df2中的所有数据。对应SQL中的right join,保留右侧表df2中的所有数据。对应SQL中的inner,只保留左右两侧df1和df2都有的数据。对应SQL中的left join,保留左侧表df1中的所有数据。index:返回df的行索引,并依据其做分组;
2024-10-17 08:29:43
1060
原创 Pandas分组与分箱
分组gs2 = df2.groupby(by="户型")# 取出每组第一条数据# 取出每组最后一条数据gs2.last()1) 自定义函数# 按户型分组, 计算每组价格和看房人数的平均值def fn(x):result = df2.groupby(['户型'])[["价格", "看房人数"]].agg(fn)result2) lambda 函数。
2024-10-17 08:28:52
1216
原创 Pandas数据类型
astype函数要求DataFrame列的数据类型必须相同,当有些数据中有缺失,但不是NaN时(如'missing','null'等),会使整列数据变成字符串类型而不是数值型,这个时候就会报错。时,它返回一个新的 Series 对象,其中的每个元素都是对应的日期时间对象(如。2) 由datetime构成的Seriers的其中一个数据提取时间日期中的各个部分。1) 由datetime构成的Seriers提取时间日期中的各个部分。是一个普通的 Series 对象,其中包含日期时间数据,直接访问。
2024-10-17 08:27:43
594
原创 Pandas缺失值处理
df.dropna(axis = 0,how = 'any' ,inplace = True, subset = ['列名1','列名2',,,], thresh = n)删除缺失值:删除缺失值会损失信息,并不推荐删除,当缺失数据占比较高的时候,或可以忽略相关性时,可以尝试使用删除缺失值。Pandas中的NaN值来自NumPy库,NumPy中缺失值有几种表示形式:NaN,NAN,nan,他们都一样。前后值填充,数据呈现顺序变化的时候可以使用缺失值前边或后边的值进行填充。
2024-10-16 15:35:48
905
原创 Pandas常用计算函数
这表明在该数据集中,一般情况下,房屋面积越大,价格越高。这意味着房屋面积的大小与看房人数之间的关系不是很密切,面积的增加不一定会导致看房人数的减少,反之亦然。具体计算方法是先求出这组数据的平均值,然后对于每个数据值,计算它与平均值的差值,再将这个差值进行平方,最后把所有数据值的差值平方加起来求平均。“价格” 与 “看房人数” 的相关系数为 0.019457,接近 0,表明价格与看房人数之间几乎没有线性关系。“面积” 与 “面积” 的相关系数为 1.000000,这是必然的,因为一个变量与自身完全相关。
2024-10-16 09:49:30
1216
原创 DataFrame索引与列名操作
2) 使用索引下标df2.index[0]和s.index[0]可以获取具体的某一个索引值。DataFrame.reset_index(inplace=布尔结果, drop=布尔结果)Series.reset_index(inplace=布尔结果, drop=布尔结果)通过 df2.index和 s_price.index 可以查看数据的索引。keys:可以是一个列标签或一个列标签的列表,用于指定要设置为索引的列。index: 接收字典, {原索引名:新索引名}不光可以查看索引, 还可以修改索引。
2024-10-16 08:28:45
1220
原创 Series或DataFrame数据修改
在pandas中,是一种非常有用的方法,用于对Series中的每个元素应用一个函数。普通自定义1) 普通定义# 将age列加3print('当前元素 --> ' ,x)print(df)2)使用lambdaprint(df)在pandas中,方法用于沿指定轴应用函数。
2024-10-15 20:09:10
1188
原创 Series数据去重
在pandas中,方法用于删除Series对象中的重复值。keep决定保留哪些重复值。'first'(默认值):保留第一次出现的重复值。'last':保留最后一次出现的重复值。False:删除所有重复值。inplace这是一个布尔值参数。如果为True,则直接在原始Series上进行修改,不会返回新的Series。如果为False(默认值),则会返回一个新的Series,原始的Series保持不变。
2024-10-15 17:36:37
510
原创 DataFrame增删改数据
DataFrame的 insert 方法用于在特定位置插入新的列;在pandas中,df.drop(labels=, axis=, inplace=)方法用于删除DataFrame中的行或列。在pandas中,DataFrame.drop_duplicates(subset=, keep=, inplace=)方法用于删除数据框中的重复行。
2024-10-15 17:09:45
2163
原创 DataFrame查询数据操作
df.head([n]) 返回前n行数据, 默认返回前5行。df.tail([n]) 返回后n行数据, 默认返回后5行。布尔值向量:完全由布尔值组成的一维数据,布尔值向量形式为。通过行名(行索引值、行索引名)、列名获取子集。1)获取第2行和第5行,注意索引是从0开始。布尔值构成的numpy.narray。3)获取第2行到第9行且布长为3。的布尔值个数必须和df的行数(3)获取面积>80的行数据。1)获取索引是偶数行数据。2)获取索引为奇数的行数据。布尔值构成的series。2)获取第1行和第4行。
2024-10-15 15:47:24
1467
原创 Struct Streaming
spark进行实时数据流计算时有两个工具Spark Streaming:编写rdd代码处理数据流,可以解决非结构化的流式数据Structured Streaming:编写df代码处理数据流,可以解决结构化和半结构化的流式数据。
2024-10-14 21:01:15
379
原创 Structured Streaming数据处理流程
Memory Sink,把数据输出到内存中,以表的形式存在,可以使用SparkSQL进行查询,支持append complete模式。上传完数据,执行代码,会一次性将数据输出,为了避免这种事情,可以使用参数‘maxFilesPerTrigger’,设置文件数。append模式,默认的模式,每次只能看到新增的行的内容,不支持聚合操作,一般在进行查询展示时使用。文件的读取方式在实际开发中用的比较少,生产一条数据,就要生成一个文件。1、读取文件数据时,不能指定某个具体文件,而是指定文件所在的目录。
2024-10-14 20:51:42
1002
原创 Spark高级用法-自定义函数
用户可以根据需求自己封装计算的逻辑,对字段数据进行计算内置函数,是spark提供的对字段操作的方法 ,split(字段) 对字段中的数进行切割,F.sum(字段) 会将该字段下的数据进行求和实际业务中又能内置函数不满足计算需求,此时就需要自定义行数,完成字段数据的业务处。
2024-10-13 20:24:20
627
原创 Spark高级用法-内置函数
2)实现case when 效果判断。4)从指定字段中取当前行最大的一个值。1)获取当前的日期时间和unix时间。1)实现if 效果判断。2)将日期转为时间戳。3)将时间戳转为日期。
2024-10-13 17:53:10
639
原创 SparkSQL介绍及使用
Spark SQL是 Apache Spark 用于处理结构化数据(DataFrame和Datasets)的模块。在Spark1.0版本时引入了SparkSQL。
2024-10-13 11:36:21
1189
原创 MySQL高阶2159-分别排序两列
如果两个表关联条件字段相同,也可以使用using(关联的字段名)比如这道题,最后可以使用"using(id)" 代替 "本题错误做法因为本题是单独让每列排序,而上面做法second_col的降序会在first_col升序的情况下再排序。
2024-10-12 09:15:00
228
原创 Spark-RDD的宽窄依赖以及Shuffle优化
spark的shuffle的两个部分shuffle wirte 写shuffle read 读会进行文件的读写,影响spark的计算速度spark的shuffle方法类是spark封装好的处理shuffle的方法hashshuffle 类进行的是hash计算spark1.2版本前主要使用,之后引入了sortshufflespark2.0之后,删除了hashshuffle ,从2.0版本开始使用sortshuffle类优化的hashshufulle和未优化。
2024-10-11 08:38:01
1474
原创 Spark优化-缓存和checkpoint
如果不适用缓存,rdd3的数据需要经过两次计算,而每次计算也是在内存中计算,很消耗内存,而使用了缓存,可以直接从缓存中直接获取数据,不需要每次对rdd2进行计算缓存和checkpoint也叫作rdd的持久化,将rdd的数据存储在指定位置作用:1-2-提升计算速度。
2024-10-11 08:36:10
619
原创 Spark中RDD练习-统计学生数据
Spark的RDD中API提供了丰富的转换操作,但是不直接支持SQL风格的like操作符.使用Scala 的startsWithendsWith或contains方法,或者使用 Python 的或方法。使用正则表达式:在filter转换中使用正则表达式来匹配模式。例如,使用 Scala 的或 Python 的。
2024-10-10 14:45:20
564
原创 MySQL高阶2112-最繁忙的机场
编写一个 SQL 来查询的机场的 ID。客流量最大的机场是指从该机场起飞或抵达该机场的航班总数最多的机场。如果有多个机场流量最大,请全部查询出来。
2024-10-10 08:24:48
293
原创 MySQL高阶2118-建立方程
CONCAT函数用于将两个或多个字符串直接连接成一个字符串。它可以接受任意数量的参数,并将它们按顺序连接起来。中间通过","隔开函数用于将一组字符串(通常是查询结果集中的多行)连接成一个单一的字符串。它通常与GROUP BY子句一起使用,用于聚合操作。str:要连接的字符串。length:可选参数,用来指定结果字符串的最大长度。:可选参数,指定连接字符串时使用的分隔符,默认是逗号(
2024-10-10 08:24:11
638
原创 MySQL高阶2084-为订单类型为0的客户删除类型为1的订单
因为本题是只将组内同时出现有0和有1的时候,删除1,所以可以进行排序,值筛选出rn=1的。
2024-10-10 08:23:26
456
原创 Python(十一)-__init__()方法,__str__()方法,__del__()方法
方法一定会被调用,因为Python使用引用计数来管理内存。只有当对象的引用计数降到0时,对象才会被销毁,并且。魔法方法指的是:可以给Python类增加魔力的特殊方法。直接在创建车对象,初始化设定品牌,和价位,在类外部直接获取对象属性值。(2)在特殊时刻会被自动调用,不需要开发者手动去调用。(1)十进制数 5040624,id()函数。内存地址值,也称为引用。然而,Python的垃圾回收机制并不保证。给车设置对象,直接获取属性结果。(1)总是被双下划线所包围;__魔法方法名__()
2024-10-09 16:10:09
1023
原创 Python(十)-面向过程,面向对象,类和对象
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。:简单地说,封装就是把对象的属性和方法放在一个整体中,并限制对属性和方法的访问操作。而这里说的整体,就是【类】。仔细观察后会发现,属性可以简单理解为与生俱来的特征,比如一个人的姓名、年龄、身高、体重等都是属性。(3)再到学生类中,定义一个学生睡觉的行为,并分别通过对象名、self调用方法;在现实生活中,属性就表示固有特征,比如:一辆小轿车的属性有轮胎数、颜色、品牌等。
2024-10-09 15:33:55
921
原创 数据处理方式,线程与进程,多任务,Spark与MR的区别
Spark通过RDD的血统机制来实现容错,如果某个节点失败,可以从血统信息重新计算丢失的数据.MapReduce只要是基于磁盘计算,将数据存储在HDFS上,并在计算工程中频繁读写磁盘.spark有很多部署方式,不同的部署方式决定spark计算时的资源调度方式。Spark是支持内存计算,当内存够大,可以比MapReduce快100倍。依赖单个计算机的资源,处理的数据量较少,当数据量过大时,无法执行。Spark有自己的调度器,可以更高效的管理资源和任务。方式实现多任务计算,提升计算效率。
2024-10-09 10:05:32
747
原创 Spark算子使用-Map,FlatMap,Filter,diatinct,groupBy,sortBy
rightOuterJoin右关联:右表数据全部展示,左边右相同数据展示,没有相同数据为空None。leftOuterJoin左关联:左表数据全部展示,右边右相同数据展示,没有相同数据为空None。join内关联:只有共同的才展示。余数相同的数据会放在一起。分组算子用到了哈希算法,准备数据,模拟表关联。
2024-10-09 09:08:38
687
1
原创 Spark练习-RDD创建,读取hdfs上的数据,指定rdd分区
读取单个文件,值输出指定文件的数据.读取到目录,会将整个目录的文件都读取到.如果指定的分区数量不能够整除,则会随机分配文件大小%3 = 值 -- 余数余数/值 占比 超过10%额外会创建一个
2024-10-08 21:20:28
685
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人