用数据讲故事:基于分析场景的17条Python使用小结

news/2024/4/20 3:35:25/文章来源:https://blog.csdn.net/Taobaojishu/article/details/129210783

2bb002215d19ccc9fb3216dd97b88b60.gif

数据科学的编程需要非常灵活的语言,以最少的代码处理复杂的数据建模场景。作为一名数科小白,我对Python的第一认知是丰富的机器学习算法,但Python有超过12万个第三方库,覆盖从数据预处理、统计分析、数据挖掘及可视化等各种日常数据科学建模。本文对基础用法不做赘述,主要分享我在分析场景中常用的部分方法,供大家参考交流。

本文为该系列第二篇文章。

第一篇:用数据讲故事:13条Excel进阶技巧总结

d074a13c51b917bcb03f70134e144478.png

数据预处理

▐  缺失值处理

包含均值/中位数/众数插补法、固定值插补法、最近邻插补法、回归法及剔除法等。

# 判断是否存在缺失值
print(data.info(),'\n')
data2=data.dropna(axis=0)

▐  异常值处理

包含剔除法、视为缺失值、平均值修正法等。

data=np.array(data)
# 计算上下四分位数
q1=np.quantile(data,q=0.25)
q3=np.quantile(data,q=0.75)
# 异常值判断标准,1.5倍的四分位差 计算上下须对应的值
low_quantile=q1-1.5*(q3-q1)
high_quantile=q3+1.5*(q3-q1)
data2=[]
for i in data:if i>high_quantile:i=high_quantiledata2.append(i)elif i<low_quantile:i=low_quantiledata2.append(i)else:data2.append(i)

▐  标准化处理

包含Min-max 标准化、z-score 标准化、Decimal scaling小数定标标准化三种,将原始数据转换为无量纲化,处于同一数量级别上。

(data - data.min()) / (data.max() - data.min())  # Min-max 标准化
(data - data.mean()) / data.std()  # z-score 标准化
data / 10 ** np.ceil(np.log10(data.abs().max()))  # Decimal scaling小数定标标准化

▐  连续变量重分类

等宽重编码:将一组连续性数据分段为0,(0,100]、(100,300]、(300,500]、(500,700]、(700,900]、(900,1100]、(1100,1300]、1300及以上9类。

等频重编码:将一组连续性数据按照25%分成4类。

#等宽重编码
bins = [0,100,200,300,500,700,900,1100,1300,max(df['data'])] #10个数,9个空格,产生9类
bins = [0,100,200,300,500,700,900,1100,1300,max(Wpop2['data'])]
df['col'] = pd.cut(df['data'],bins,right=True,labels=[1,2,3,4,5,6,7,8,9])#等频重编码
k=4           
w = df['data'].quantile(np.arange(0,1+1/k,1/k))  
df['col'] = pd.cut(df['data'], w, right=True, labels=[1,2,3,4])

7c090cb9c137f9ac60ce2732d7f6fccf.png

统计分析


▐  曲线拐点——KneeLocator

当我们寻找“最佳留存拐点”(如下图)或K-means聚类算法采用手肘法计算最佳K值时,python中有一个只要定义少量参数就可以帮我们寻找拐点的包kneed,参数定义如下:

x:待检测数据对应的横轴数据序列,如活跃天数

y:待检测数据序列,在x条件下对应的值,如6日回访率

S:float型,默认为1,敏感度参数,越小对应拐点被检测出得越快

curve:指明曲线之上区域是凸集还是凹集,concave代表凹,convex代表凸

direction:指明曲线初始趋势是增还是减,increasing表示增,decreasing表示减

7c172b90e93b83de5e5cbbe0e2517f1f.png

from kneed import KneeLocator
import matplotlib.pyplot as plt x = np.arange(1,31)
y = [0.492 ,0.615 ,0.625 ,0.665 ,0.718 ,0.762 ,0.800 ,0.832 ,0.859 ,0.880 ,0.899 ,0.914 ,0.927 ,0.939 ,0.949 ,0.957 ,0.964 ,0.970 ,0.976 ,0.980 ,0.984 ,0.987 ,0.990 ,0.993 ,0.994 ,0.996 ,0.997 ,0.998 ,0.999 ,0.999 ]kneedle = KneeLocator(x, y, S=1.0, curve='concave', direction='increasing')
print(f'拐点所在的x轴是: {kneedle.elbow}')

▐  相关系数——corr

corr主要计算两组数值型变量的相关性,数值越大相关性越强。求得相关性指数后,如何评价两变量从统计学角度具有相关性呢?我们可以将样本数与显著性因子输入相关系数临界值计算器中计算临界值,判断变量是否具有相关性。

《相关系数临界值计算器》地址:https://www.jisuan.mobi/vu11B3u3mb3NUUQQ.html

import pandas as pd
import numpy as np
s.corr() s
#输出相关系数矩阵ss.corr()["pay_ord_cnt"] 
#输出pay_ord_cnt变量与其他变量之间的相关系数s["pay_ord_cnt"].corr(s["pay_ord_amt"]) 
#输出"pay_ord_cnt"与"pay_ord_amt"之间的相关系数

▐  卡方检验——chi2_contingency

上述提到的相关系数是针对两组数值型变量,当变量是分类变量时或多变量时,变量之间的相关关系就不能简单地用此种方法。即使将分类变量变换成数值型变量,受转化的数值量级、取值标准等的影响,无法可靠地评估相关性大小的准确性。这时,卡方检验是一种多变量显著分析的方法,如分析类目与情况类型是否有关,提出两个假设:

原假设(H0):类目与情况类型无关

备择假设(H1):类目与情况类型有关

38f94f19629a64cca1afce063117ac3d.png

from scipy.stats import chi2_contingency
import numpy as npdf= np.array([[50,49,35], [150,100,90],[60,80,100]])
kt=chi2_contingency(df)print('卡方值=%.4f, p值=%.4f, 自由度=%i expected_frep=%s'%kt)#卡方值=27.7029, p值=0.0000, 自由度=4 expected_frep=[[ 48.79551821  42.97759104  42.22689076]
#[123.80952381 109.04761905 107.14285714]
#[ 87.39495798  76.97478992  75.6302521 ]]

通过计算,P值小于0.01,则拒绝原假设,认为类目与情况类型有关。

▐  线性回归——polyfit

对于数据科学来讲,线性回归是统计建模和预测分析的出发点,我们常用线性回归模型观测变量趋势,然后再匹配模型。Python中实现线性回归模型的方法有多种,除了基于最小二乘多项式的numpy.polyfit,还有Stats.linregress、Optimize.curve_fit、numpy.linalg.lstsq、Statsmodels.OLS 、sklearn.linear_model.LinearRegression等,可结合数据情况使用。

import numpy
from numpy import polyfit
x=[x for x in range(1,len(y)+1)]
y=[int(res) for res in y]
res=polyfit(x,y,deg=1)
return numpy.float(res[0])

0fb821ad35d8fc038395056b8063e86e.png

数据挖掘


▐  综合规模的排序打分——Wilson_Score

我们常遇到评价多个商品点击率的好坏或者评估AB-TEST上线后的效果,在小样本情况下直接用比率指标难免偏颇,如商品A曝光100次,点击20次,商品B曝光10次,单击3次,商品B的点击率未必比商品A好,所以需要引入威尔逊区间的修正公式,解决小样本的准确性问题,再利用贝叶斯平均提供补偿值,平衡样本数量的差异。

8638d1f229fa111ca51c1a0f4694cd91.png

u:正例数(点击) V:负例数(未点击) n:实例总数(曝光总数) p:点击率 z:是正态分布的分位数  S:表示最终的威尔逊得分。

pos = float(input_data.split(',')[0])total = float(input_data.split(',')[1])p_z=1.96pos_rat = pos * 1. / total * 1.  #score = (pos_rat + (np.square(p_z) / (2. * total))- ((p_z / (2. * total)) * np.sqrt(4. * total * (1. - pos_rat) * pos_rat + np.square(p_z)))) / \(1. + np.square(p_z) / total)return str(score)

▐  计算指标权重——PCA

除了探索性分析,我们最常见的业务场景就是通过数据建模的方法,分析各项指标对整体贡献情况,即权重。

主成分分析主要是基于降维思维,考虑各个指标的相互关系,通过正交变换转换成一组不相关的变量即主成分,计算指标不同主成分线性组合的系数确定权重。

import numpy as np
import pandas as pd
from sklearn.decomposition import PCA
from sklearn import preprocessing# 数据标准化(还可选用StandardScaler、MaxAbsScaler、Normalizer进行标准化)
scaler = preprocessing.MinMaxScaler().fit(csv_df)
X_scaler = pd.DataFrame(scaler.transform(csv_df))# 主成分分析建模
pca = PCA(n_components=None)  # n_components提取因子数量
# n_components=‘mle’,将自动选取主成分个数n,使得满足所要求的方差百分比
# n_components=None,返回所有主成分
pca.fit(X_scaler)
pca.explained_variance_  # 贡献方差,即特征根
pca.explained_variance_ratio_  # 方差贡献率
pca.components_  # 成分矩阵
k1_spss = pca.components_ / np.sqrt(pca.explained_variance_.reshape(-1, 1))  # 成分得分系数矩阵# 确定权重
j = 0
Weights = []
for j in range(len(k1_spss)):for i in range(len(pca.explained_variance_)):Weights_coefficient = np.sum(100 * (pca.explained_variance_ratio_[i]) * (k1_spss[i][j])) / np.sum(pca.explained_variance_ratio_)j = j + 1Weights.append(np.float(Weights_coefficient))
print('Weights',Weights)# 权重结果归一化
Weights=pd.DataFrame(Weights)
Weights1 = preprocessing.MinMaxScaler().fit(Weights)
Weights2 = Weights1.transform(Weights)
print('Weights2',Weights2)

▐  分词&词频——jieba/collection

jieba库是一款优秀的第三方中文分词库,jieba 支持三种分词模式:精确模式、全模式和搜索引擎模式。其中精准模式将语句最精确的切分,不存在冗余数据,适合做文本分析。我们也可以根据需求,批量添加自定义词典。

统计切分结果中的词频统计常使用collections包中的Counter方法。

import re                           # 正则表达式库
import jieba                        # 结巴分词
import jieba.posseg                 # 词性获取
import collections                  # 词频统计库
import numpy                        # numpy数据处理库seg_list_exact = jieba.cut(string_data, cut_all=False, HMM=True)  # 精确模式分词+HMMjieba.load_userdict("词典.txt") # 批量添加词典,utf-8编码with open(StopWords, 'r', encoding='UTF-8') as meaninglessFile:stopwords = set(meaninglessFile.read().split('\n'))stopwords.add(' ')for word in seg_list_exact:  # 循环读出每个分词if word not in stopwords:  # 如果不在去除词库中object_list.append(word)  # 分词追加到列表# 词频统计word_counts = collections.Counter(object_list)  # 对分词做词频统计word_counts_top = word_counts.most_common(number)  # 获取前number个最高频的词return word_counts_top

▐  关键词提取——TF-IDF/TexTRank

文章关键词提取主要由两种函数,基于TF-IDF的extract_tags和基于TexTRank的textrank,原理如下:

TF-IDF:通过词频统计的方法得到某个词对一篇文档的重要性大小。以弱化常见词,保留重要的词,若某个词在某个文档中是高频词,在整个语料中又是低频出现,那么这个词将具有高TF-IDF值。

TexTRank:是一种基于图的用于关键词抽取和文档摘要的排序算法,利用一篇文档内部的词语间的共现信息(语义)便可以抽取关键词

from jieba import analyse
analyse.set_stop_words("停用词.txt") 
#TF-IDF
keywords = analyse.extract_tags(s, topK=20, withWeight=False) 
#TexTRank
keywords = analyse.textrank(content, topK=10, withWeight=False,allowPOS=('ns', 'n', 'vn', 'n'))

▐  情感分析——SnowNLP/TextBlob

有时我们需要分析商品评论的情感极性,SnowNLP、TextBlob是Python处理中、英文的类库,并自带了训练好的词典,支持分词、词性标注、情感分析、文本相似等多个功能,也支持训练新的模型进行情感分析。

  • 中文情感分析

SnowNLP的情感分析取值,取值范围为[0,1],表达的是“这句话代表正面情感的概率”。评论“感觉颜色暗了点,便宜,懒得退了“的情感取值为0.04为负向情感,“颜色很好看,很厚实,推荐指数10分”的情感取值是0.91为正向情感。

from snownlp import SnowNLPs = SnowNLP(u'感觉颜色暗了点,便宜,懒得退了')  
print('分词结果:',s.words)          
print('这个评论为积极的概率:',s.sentiments)  # 分词结果: ['感觉', '颜色', '暗', '了', '点', ',', '便宜', ',', '懒得', '退', '了']
# 这个评论为积极的概率: 0.04176293661978303s = SnowNLP(u'颜色很好看,很厚实,推荐指数10分')  
print('分词结果:',s.words)          
print('这个评论为积极的概率:',s.sentiments)  # 分词结果: ['颜色', '很', '好看', ',', '很', '厚实', ',', '推荐', '指数', '10', '分']
# 这个评论为积极的概率: 0.9093984931459346
  • 英文情感分析

TextBlob的情感极性的变化范围是[-1, 1],-1代表完全负面,1代表完全正面。

from textblob import TextBlobs = TextBlob('I feel that the color is a little dark.I am too lazy to return')
print('这个评论的情感极性:',s.sentiment)  # 这个评论的情感极性: Sentiment(polarity=-0.21875, subjectivity=0.75)s = TextBlob('The color is very nice and thick, 10 points for recommendation index')
print('这个评论的情感极性:',s.sentiment)  # 这个评论的情感极性: Sentiment(polarity=0.24, subjectivity=0.7375)

c8f882985f4b482e41dd48e2743902d8.png

数据可视化

在数据分析时,经常需要对数据进行可视化,由于本人使用Python进行数据可视化经验有限,仅分享一些官方资源,供大家了解。

▐  Matplotlib

  1. Matplotlib 安装(地址:https://matplotlib.org/stable/users/installing/index.html)

  2. Matplotlib 用户手册(地址:https://matplotlib.org/stable/users/index.html)

  3. Matplotlib 函数汇总(地址:https://matplotlib.org/stable/api/pyplot_summary.html)

  4. Matplotlib 模块索引(地址:https://matplotlib.org/stable/py-modindex.html)

  5. Matplotlib 示例库(地址:https://matplotlib.org/stable/gallery/index.html)

  6. Matplotlib 示例下载

    Python code(地址:https://matplotlib.org/stable/gallery/index.html)

    Jupyter notebooks

3ee89b784e610696876deecd6636a166.png

▐  Seaborn

Seaborn 是基于 Python 且非常受欢迎的图形可视化库,在 Matplotlib 的基础上,进行了更高级的封装,使得作图更加方便快捷。

  1. seaborn库的简介(地址:https://seaborn.pydata.org/)

  2. seaborn库的安装 (地址:https://seaborn.pydata.org/installing.html)

  3. seaborn库函数汇总(地址:https://seaborn.pydata.org/examples/errorband_lineplots.html)

be6120da06b178df6a286615cab05672.png

a34c3515cbfdf70d08036911ef349c88.png

PyODPS 及 Python UDF

上文主要介绍数据预处理、统计分析及挖掘的常用函数及用法。在数据量极大的情况下,手动写入或csv上传较为复杂,我们希望基于ODPS表调用Python第三方包。在进行临时数据探查时PyODPS是一种简单方便的方法,对需要调度上线的任务可以通过开发Pyhon UDF的方式进行调用。

▐  DSW 读取ODPS表

打开PAI-DSW进入实例进行开发

  1. 安装PyODPS:pip install pyodps

  2. 检查是否安装完成:python -c "from odps import ODPS"

  3. 与ODPS建立链接,读取ODPS表

import numpy as np
import pandas as pd
from kneed import KneeLocator
import matplotlib.pyplot as plt
from odps import ODPS
from odps.df import DataFrame
# 建立链接。
o = ODPS('AccessId', 'AccessKey', '项目空间',endpoint='http://service-corp.odps.aliyun-inc.com/api')
# 读取ODPS表。
sql = '''
SELECT*
FROM项目空间.表名
;
'''
query_job = o.execute_sql(sql)
result = query_job.open_reader(tunnel=True) 
df = result.to_pandas(n_process=1)
# 读取ODPS表中列。
x =df['pay_ord_cnt']
y =df['pay_ord_amt']# 调用KneeLocator包。
kneedle = KneeLocator(x, y, S=1.0, curve='convex', direction='increasing')
print(f'拐点所在的x轴是: {kneedle.elbow}')
;

▐  Python UDF开发

STEP1:在PyPI页面的Download files区域,单击文件名后缀为manylinux_2_5_x86_64.manylinux1_x86_64.whll的Numpy包进行下载。(确定资源包是编译过的wheel类型)

c6cd080e56f8de0dd6b0ae151fed73b2.png

STEP2:修改下载的Numpy包后缀为ZIP格式

STEP3:传Numpy包至MaxCompute项目空间

方法一:在客户端输入命令:

ADD ARCHIVE D:\Downloads\numpy-1.19.2-cp37-cp37m-manylinux1_x86_64.zip -f;

方法二:数据开发-业务流程-Maxcompute-资源-新建-ARCHIVE(新建资源完成后记得提交)

b58bc4b7783fee14a3bca5d4a98bcb03.png

STEP4:写UDF函数(以1.2.4线性回归函数为例)

from odps.udf import annotate
from odps.distcache import get_cache_archivedef include_package_path(res_name):import os, sysarchive_files = get_cache_archive(res_name)dir_names = sorted([os.path.dirname(os.path.normpath(f.name)) for f in archive_filesif '.dist_info' not in f.name], key=lambda v: len(v))sys.path.append(os.path.dirname(dir_names[0]))@annotate("*->float")   --输出类型
class Mypolyfit(object):def __init__(self):        include_package_path('numpy.zip')def evaluate(self, y):import numpyfrom numpy import polyfitx=[x for x in range(1,len(y)+1)]y=[int(res) for res in y]res=polyfit(x,y,deg=1)return numpy.float(res[0])

注:include_package_path 使得ODPS能够引入numpy包,并在主函数的_init_()部分使用

STEP5:注册函数

d0227f697eb1f4eae43f57d0700f3829.png

  1. 类名=文件名.类名

  2. 资源列表:python文件、调用包的文件名

STEP6:在sql中使用UDF函数

set odps.sql.python.version=cp37;
set odps.pypy.enabled=false;
set odps.isolation.session.enable = true;
set odps.sql.type.system.odps2=true;  
--sql使用UDF函数时要添加前三个参数设置
--如果UDF输出的是folat类型,要配合set odps.sql.type.system.odps2=true使用
select item_id,POLYFIT(pay_ord)
FROM
(select item_id,SPLIT(regexp_replace(concat_ws('-',sort_array(collect_list(concat_ws(':',cast(ds as string),pay_ord_itm_qty_1d_001)))),'\\d+\:','') ,'-')pay_ord,SPLIT(concat_ws('-',sort_array(collect_list(ds)) ),'-') as ds_array
FROM    table
WHERE   条件;

数据科学是一个横跨数学、统计学、机器学习、计算机的综合学科。在此先占个坑,后续也会将工作中更多理论与实践的结合更新到系列文章中,也欢迎数据爱好者一起交流学习。

029277d716a27bb49a005da54714bb14.png

团队介绍

我们是大聚划算数据科学团队,负责支持聚划算、百亿补贴、天天特卖等业务。我们聚焦优惠和选购体验,通过数据洞察,挖掘数据价值,建立面向营销场、服务供需两端的消费者运营和供给运营解决方案,我们与运营、产品合力,打造最具价格优惠心智的购物入口,最具爆发性的营销矩阵,让货品和心智运营变得高效且有确定性!

¤ 拓展阅读 ¤

3DXR技术 | 终端技术 | 音视频技术

服务端技术 | 技术质量 | 数据算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_74043.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio中创建java工程

1. 前言 电脑环境: Ubuntu 18.04 开发工具环境:Android Studio 4.1.3 版本 经常要使用验证Java API, 把配置环境步骤记录一下 2. 创建步骤 2.1 新建一个Android Studio App工程 New ---> New Project ---> 选择一个Activity主题---> Finish 就创建ok 2.2 …

【模拟集成电路】分频器(DIV_TSPC)设计

分频器&#xff08;DIV_TSPC&#xff09;设计前言一、DIV工作原理二、DIV电路设计&#xff08;1&#xff09;32分频原理图&#xff08;2&#xff09;D触发器原理图&#xff08;3&#xff09;D锁存器原理图&#xff08;4&#xff09;三输入与非门原理图三、DIV仿真测试32分频器测…

【模拟集成电路】宽摆幅压控振荡器(VCO)设计

鉴频鉴相器设计&#xff08;Phase Frequency Detector&#xff0c;PFD&#xff09;前言一、VCO工作原理二、VCO电路设计VCO原理图三、压控振荡器&#xff08;VCO&#xff09;测试VCO测试电路图瞬态测试&#xff08;1&#xff09;瞬态输出&#xff08;2&#xff09;局部放大图&a…

调试版获取安卓SHA1值

确保你的电脑上有JDK&#xff0c;配置好环境变量后执行我这些步骤。where keytool看看电脑找不找得到找得到就可以进行下一步了口令默认android或者为空

javaEE 初阶 — 关于 IPv4、IPv6 协议、NAT(网络地址转换)、动态分配 IP 地址 的介绍

文章目录1. IPv42. IPv63. NAT4. 动态分配 IP 地址1. IPv4 在互联网的世界中只有 0 和1 &#xff0c;所以每个人都有一个由 0 和 1 组成的地址来让别人找到你。 这段由 0 和 1 组成的地址叫 IP 地址&#xff0c;这是互联网的基础资源&#xff0c;可以简单的理解为互联网的土地。…

【Acwing 周赛复盘】第91场周赛复盘(2023.2.18)

【Acwing 周赛复盘】第91场周赛复盘&#xff08;2023.2.18&#xff09; 周赛复盘 ✍️ 本周个人排名&#xff1a;1286/3115 AC情况&#xff1a;2/3 这是博主参加的第六次周赛&#xff0c;周赛当晚有事&#xff0c;是后来定时自测的 &#x1f602; 在 20 分钟内 AC 了 2 题&…

数据库|(六)连接查询

&#xff08;六&#xff09;连接查询1. 笛卡尔乘积2. 连接查询分类2.1 按年代分2.2 按功能分3. 等值连接(sql 92标准)3.1 特点3.2 一般使用3.3 为表取别名3.4 两表顺序可以调换3.5 可以加筛选3.6 可以加分组3.7 可以加排序3.8 可以实现三表连接4. 非等值连接(sql 92标准)5. sql…

LeetCode练习三:链表

文章目录一、链表基础1.1 无序表&#xff08;UnorderedList&#xff09;1.1.2 双向链表1.1.3 循环链表1.2 链表的基本操作1.2.1 定义链表结构1.2.2 建立线性链表1.2.3 求线性链表的长度1.2.4 查找元素1.2.5 插入元素1.2.6 改变元素1.2.7 删除元素1.3 有序表OrderedList1.4 链表…

39-Golang中的接口

Golang中的接口基本介绍基本语法注意事项和细节案例实现对Hero结构体切片的排序&#xff1a;sort.Sort(data Interface)实现接口和继承之间的比较区别基本介绍 interface类型可以定义一组方法&#xff0c;但是这些不需要实现。并且interface不能包含任何变量。到某个自定义类型…

直接在ide启动mitmproxy监听,脱离命令行启动,懒人福音

前言 本文解决了只能通过命令行启动 mitmproxy 的痛点。 在使用 mitmproxy 时候存在这样一个问题&#xff0c;就是每次启动它时候都需要通过命令行启动。 加上最近有位读者向我提问&#xff08;以前也有读者提问该问题&#xff09;&#xff1a;不通过命令行如何启动 mitmproxy监…

XML调用 CAPL Test Function

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…

阿里限量出产Elasticsearch学习手册,确定不心动?

前言只有光头才能变强。不知道大家的公司用Elasticsearch多不多&#xff0c;反正我公司的是有在用的。平时听同事们聊天肯定避免不了不认识的技术栈&#xff0c;例如说&#xff1a;把数据放在引擎&#xff0c;从引擎取出数据等等。如果对引擎不了解的同学&#xff0c;就压根听不…

九龙证券|阿里+鸿蒙+人工智能+元宇宙概念热度爆棚,“会说话的猫”亮了!

近一周组织调研个股数量有240多只&#xff0c;汤姆猫成为调研组织数量最多的股票。 证券时报数据宝统计&#xff0c;近一周组织调研公司数量有240多家。从调研组织类型来看&#xff0c;证券公司调研相对最广泛&#xff0c;调研230多家公司。 “会说话的猫”亮了 汤姆猫成为近…

Flink高手之路1一Flink的简介

文章目录一、Flink简介1. Fink的引入2.Flink简介3.支持的编程语言4.Flink的特性5.Flink四大基石6.批处理和流处理二、Flink的架构1.Flink的角色2.编程模型一、Flink简介 1. Fink的引入 大数据的计算引擎&#xff0c;发展过程有四个阶段 第一代&#xff1a;Hadoop的MapReduce…

二叉搜索树中的众数Java解法

给你一个含重复值的二叉搜索树&#xff08;BST&#xff09;的根节点 root &#xff0c;找出并返回 BST 中的所有 众数&#xff08;即&#xff0c;出现频率最高的元素&#xff09;。 如果树中有不止一个众数&#xff0c;可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

【Web逆向】万方数据平台正文的逆向分析(上篇--加密发送请求)—— 逆向protobuf

【Web逆向】万方数据平台正文的逆向分析&#xff08;上篇--加密发送请求&#xff09;—— 逆向protobuf声明一、了解protobuf协议&#xff1a;二、前期准备&#xff1a;二、目标网站&#xff1a;三、开始分析&#xff1a;我们一句句分析&#xff1a;先for循环部分&#xff1a;后…

【算法】最短路算法

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

电子技术——输出阶类型

电子技术——输出阶类型 输出阶作为放大器的最后一阶&#xff0c;其必须有较低的阻抗来保证较小的增益损失。作为放大器的最后一阶&#xff0c;输出阶需要处理大信号类型&#xff0c;因此小信号估计模型不适用于输出阶。尽管如此&#xff0c;输出阶的线性也非常重要。实际上&a…

为什么要用线程池?

1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 2.提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行。 3.提高线程的可管理性。线程是稀缺资源&#xff0c;如果无限制的创建&#xff0c;不仅会消耗系统资源&#…

Python实现贝叶斯优化器(Bayes_opt)优化支持向量机回归模型(SVR算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。1.项目背景贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器&#xff0c;用来寻找最优参数。贝叶斯优化器是…