七、用户画像

news2024/9/24 17:08:30

目录

  • 7.1 什么是用户画像
  • 7.2 标签系统
    • 7.2.1 标签分类方式
    • 7.2.2 多渠道获取标签
  • 7.3 用户画像数据特征
    • 7.3.1 常见的数据形式
    • 7.3.2 文本挖掘算法
    • 7.3.3 嵌入式表示
    • 7.3.4 相似度计算方法
  • 7.4 用户画像应用

因此只基于某个层面的数据便可以产生部分个体面像,可用于从特定角度形容群体乃至个体的大致差异。说了这么多,那这些和本章要探讨的用户面像有什么关系呢?首先要明确用户面像里的用户是谁:数据收集方(即产品提供方)往往开发出某件产品供人使用,这些使用者便是数据收集方的用户,数据收集方为了推广产品,同时持续维护和改善用户体验便需要对由用户操作而产生的数据进行挖掘,以期从中发现群体乃至个体的行为偏好,形成数据层面上的所谓面像。

7.1 什么是用户画像

在机器学习中提到的用户面像通常是基于给定的数据对用户属性以及行为进行描述,然后提取用户的个性化指标,再以此分析可能存在的群体共性,并落地应用到各种业务场景中。

7.2 标签系统

用户面像的核心其实就是给用户 “打标签”,即标签化用户的行为特征,企业通过用户面像中的标签来分析用户的社会属性、生活习惯、消费行为等信息,然后进行商业应用。

构建一个标签系统成为企业赋能更多业务的关键,标签系统也是本节要详细介绍的内容,具体从三个方面来展开,分别是标签分类方式、多渠道获取标签和标签体系框架。

7.2.1 标签分类方式

如下图所示,通过分析一个用户的特征来展示标签分类方式。

7.2.2 多渠道获取标签

根据标签获取方式可以把标签分为事实类标签、规则类标签和模型类标签三种。标签获取方式也可以看作特征获取方式,借助这三种方式从原始数据中提取能够表现用户特点、商品特点或者数据特点的特征。

  • 事实类标签
    事实类标签最容易获取,直接来源于原始数据,比如性别、年龄、会员等级等字段。当然也可以对原始数据进行简单的统计后提取事实标签,比如用户行为次数、消费总额。

  • 规则类标签
    规则类标签使用广泛,是由运营人员和数据人员经过共同协商而设定的多个规则生成的标签,其特点是直接有效灵活、计算复杂度低和可解释度高,主要用作较为直观和清晰的用户相关标签,例如地域所属、家庭类型、年龄层等。使用到的技术知识主要是数理统计类知识,例如基础统计、数值分层、概率分布、均值分析、方差分析等。

    如下图所示,主要对单一或者多种指标进行逻辑运算、函数运算等运算生成最终的规则类标签,这里分为用户行为、用户偏好和用户价值三部分,感兴趣的话,可对用户进行更深层次的刻面。

  • 模型类标签
    模型类标签是经过机器学习和深度学习等模型处理后,二次加工生成的洞察性标签。比如预测用户状态、预测用户信用分、划分兴趣人群和对评论文本进行分类等,经过这些处理得到的结果就是模型类标签。其特点是综合程度高、复杂程度高,绝大部分标签需要先有针对性地构建相应的挖掘指标体系,然后依托经典数学算法或模型进行多指标间的综合计算方能得到模型类标签,常常需要多种算法一起组合来建模。

    如下图所示,基于模型类标签可以使用 RFM 模型来衡量用户价值和用户创利能力、对用户行为信息建模预测用户生命周期变化情况、通过模型预测用户信用评分、使用图嵌入或用户分层模型划分兴趣人群。除此之外还有很多通过模型来得到标签的方法。

对标签的分类和获取有了初步了解后,我们可以将其串联起来形成基本的标签体系框架,包括从底层数据的提取到业务应用赋能。

如下图所示,可以看出整个标签体系框架分为四个部分:数据源、标签管理、标签层级分类和标签服务赋能。

7.3 用户画像数据特征

无论是构建用户面像还是进行算法竞赛,数据都是产生效益的核心。一般而言,用户面像的数据来源为用户数据、商品数据和渠道数据,比如从电商网站和微信平台可以获取用户的交易数据、行为数据等,从平台用户系统可以获取用户属性数据。

这些数据的存在形式多样,通过对数据形式的理解可以进行统计、编码和降维等处理来提取有效特征,然后用这些特征构造我们需要的标签。本节我们将介绍常见的数据形式以及用户面像相关竞赛的一些特征提取方法。

7.3.1 常见的数据形式

在各式各样的竞赛当中,数据的形态和格式是多种多样的,本节以用户画像为例将数据的有关字段大致分为数值型变量、类别型变量、多值型变量以及文本型变量四种常见的数据形式,每种变量都有对应的处理方式。需要强调的是这些变量都是针对用户层面的,即所有样本数据以用户为唯一主键进行区分,且每个用户只有一条记录,之所以这样举例是因为通常基于用户面像的机器学习模型所需的数据是以用户池的形式呈现的,对用户的标签进行对应的特征学习。

实际竞赛中给的数据可能十分复杂,甚至是以打点记录的方式描述用户的行为,这时候往往还需要参赛者构建提取用户特征,这涉及更深的应用技巧。

  • 数值型变量
    最常见的一种数值型变量是连续型变量,指的是具有数值大小含义的变量,比如下图所示的年龄、身高、体重等,其他如消费金额、流量累计等。
  • 类别型变量
    类别型变量是指具有类别标识的变量,比如性别、 籍贯、所在城市等,这类变量记录了用户的固有属性,如下图所示。
  • 多值型变量
    多值型变量是指用户在某个维度具有多个取值的变量,比如兴趣爱好、穿衣风格、看过的电影等,这类变量由于其特殊结构无法直接应用到模型中,需要借助特别的数据结构如稀疏矩阵进行处理,如下图所示。
  • 文本型变量
    文本型变量(如下图所示)是指利用文本记录的变量,比如用户对某件商品或者某次购物的评论等。处理这类变量需要用到自然语言处理的一些工具,比如中文分词工具 jieba 等。

7.3.2 文本挖掘算法

对于基础的原始数据,比如经常出现的用户标签集合、购物评价等,除了常见的统计特征外,还能够基于文本挖掘算法进行特征提取,同时对原始数据进行预处理和清洗,以达到匹配和标识用户数据的效果。本节将会对常见的文本挖掘算法 LSA、PLSA 和 LDA 进行介绍,这三种均为无监督学习方法。

  • LSA
    LSA(潜在语义分析) 是一种非概率主题模型,与词向量有关,主要用于文档的话题分析,其核心思想是通过矩阵分解的方式来发现文档与词之间基于话题的语义关系。具体地,将文档集表示为词-文档矩阵,对词-文档矩阵进行 SVD(奇异值分解),从而得到话题向量空间以及文档在话题向量空问的表示。

    LSA 的具体使用也非常简单,我们以 2020 腾讯广告算法大赛中的数据为例,首先构造用户点击的广告素材 ID 序列 (creative_id),然后进行 TF-IDF 计算,最后经过 SVD 得到结果,实现代码如下:

    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.decomposition import TruncatedSVD
    from sklearn.pipeline import Pipeline
    # 提取⽤户点击序列
    docs=data_df.groupby(['user_id'])['creative_id'].agg(lambda x:" ".join(x)).reset_index()['creative_id']
    # tfidf + svd
    tfidf = TfidfVectorizer()
    svd = TruncatedSVD(n_components=100)
    svd_transformer = Pipeline([('tfidf', tfidf), ('svd', svd)])
    lsa_matrix = svd_transformer.fit_transform(documents)
    
  • PLSA
    PLSA(概率潜在语义分析)模型其实是为了克服 LSA 模型潜在存在的一些缺点而提出的。PLSA 模型通过一个生成模型来为 LSA 赋予概率意义上的解释。该模型假设每一篇文档都包含一系列可能的潜在话题,文档中的每一个单词都不是凭空产生的,而是在潜在话题的指引下通过一定的概率生成的。

  • LDA
    LDA(潜在狄利克雷分布)是一种概率主题模型,与词向量无关,可以将文档集中每篇文档的主题以概率分布的形式给出。通过分析一批文档集,抽取出它们的主题分布,就可以根据主题分布进行主题聚类或文本分类。同时,它是一种典型的词袋模型,即一篇文档由一组相互独立的词构成,词与词之间没有先后顺序关系。

7.3.3 嵌入式表示

毫不夸张地说,任何可以形成网络结构的东西,都可以有嵌入表示(Embedding),并且嵌入表示可以将高维稀疏特征向量转换成低维稠密特征向量来表示。嵌入表示这个概念最初在 NLP 领域被广泛应用,现在已经扩展到了其他应用,比如电商平台。电商平台将用户的行为序列视作由一系列单词组成的句子,比如用户点击序列和购买商品序列,经过训练后得到关于商品的嵌入向量。这里主要介绍经典的 Word2Vec 以及网络表示学习中的 DeepWalk 方法。

  • 词嵌入 Word2Vec
    Word2Vec 在竞赛中被经常使用,能够带来意想不到的效果,掌握其原理非常关键。Word2Vec 根据上下文之间的关系去训练词向量,有两种训练模式,分别为 Skip-Gram(跳字模型)和 CBOW(连续词袋模型),两者的主要区别为在于输入层和输出层的不同。简单来说,Skip-Gram 是用一个词语作为输入,来预测它的上下文;CBOW 是用一个词语的上下文作为输入,来预测这个词语本身。

    如下图所示,Word2Vec 实质上是只有一个隐藏层的全连接神经网络,用来预测与给定单词关联度大的单词。模型词汇表的大小是,每个隐藏层的维度是 N N N,相邻神经元之问的连接方式是全连接。下图中的输入层是把一个词被转化成的独热向量,即给定一个单词,然后把此单词转化为 { x 1 , x 2 , x 3 , ⋯   , x V } \{ x_1,x_2,x_3, \cdots, x_V \} {x1,x2,x3,,xV} 序列,这个序列中只有一个值为 1 1 1,其他均为 0 0 0;通过输入层和隐藏层之问的权重矩阵 W V × N W_{V \times N} WV×N,将序列在隐藏层进行简单的映射;隐藏层和输出层之问存在一个权重矩阵 W N × V ′ W'_{N \times V} WN×V,通过计算得出词汇表中每个单词的得分,最后使用 softmax 激活函数输出每个单词的概率结果。

    如下图所示,Skip-Gram 根据当前单词预测给定的序列或上下文。假设输入的目标单词为 x k x_k xk,定义的上下文窗口大小为 c c c,对应的上下文为 { y 1 , y 2 , ⋯   , y c } \{ y_1, y_2, \cdots, y_c \} {y1,y2,,yc},这些 y y y 是相互独立的。

    如下图所示,为 CBOW 的模型结构,定义上下文窗口大小为 c c c,上下文单词为 { x 1 , x 2 , ⋯   , x c } \{ x_1, x_2, \cdots, x_c \} {x1,x2,,xc},通过上下文单词来对当前的单词进行预测,对应的目标单词为 y y y

    Word2vec 使用起来非常方便,直接调用 gensim 包即可,需要注意的是几个具体参数,比如窗口大小、模型类型选择、生成词向量长度等等。

    对于 Skip-Gram 和 CBOW 的选择,大致可以基于以下三点:CBOW 在训练时要比 Skip-Gram 快很多,因为 CBOW 是基于上下文来预测这个单词本身,只需把窗口内的其他单词相加作为输入进行预测即可,不管窗口多大,都只需要一次计算;相较于 Skip-Gram,CBOW 可以更好地表示常见单词;Skip-Gram 在少量的训练集中也可以表示稀有单词或者短语。

  • 图嵌入 DeepWalk
    在很多场景下,数据对象除了存在序列关系,还存在图或者网络的结构关系,而 Word2vec 仅能提取序列关系下的嵌入表示,不能跨越原本的序列关系获取图相关的信息。为了能从 “一维” 关系跨越到 “二维” 关系,图嵌入 (Graph Embedding) 成为了新的的研究方向,其中最具影响的是 DeepWalk。

    如下图所示,DeepWalk 算法主要包括三个部分,首先生成图网络,比如通过用户点击序列或购买商品序列来构造商品图网络,就是把序列中前后有关联的商品用线连接起来并作为图的边,商品则作为点,这样某个商品点就可以关联大量的领域商品;然后基于图网络进行随机游走 (random walk)获取网络中节点与节点的共现关系,根据游走长度生成商品序列;最后把产生的序列当作句子输入到 Skip-Gram 进行词向量的训练,得到商品的图嵌入表示。

    为了方便理解,下面给出 DeepWalk 的代码描述:

    def deepwalk_walk(walk_length, start_node):
    	walk = [start_node]
    	while len(walk) <= walk_length:
    		cur = walk[-1]
    		try:
    			cur_nbrs = item_dict[cur]
    			walk.append(random.choice(cur_nbrs))
    		except:
    			break
    	return walk
    	
    def simulate_walks(nodes, num_walks, walk_length):
    	walks = []
    	for i in range(num_walks):
    		random.shuffle(nodes)
    		for v in nodes:
    			walks.append(deepwalk_walk(walk_length=walk_length, start_node=v))
    	return walks
    	
    if __name__ == "__main__":
    # 第⼀步:⽣成图⽹络(省略)
    # 构建item_dict 保存图中的节点关系,即字典结构存储,key 为节点,value 为领域
    # 第⼆步:通过DeepWalk ⽣成商品序列
    nodes = [k for k in item_dict] # 节点集合
    num_walks = 5 # 随机游⾛轮数
    walk_length = 20 # 随机游⾛⻓度
    sentences = simulate_walks(nodes, num_walks, walk_length) # 序列集合
    # 第三步:通过Word2Vec 训练商品词向量
    model = Word2Vec(sentences, size=64, window=5, min_count=3, seed=2020)
    

对于 Word2Vec 的衍生 ltem2Vec 以及更多图嵌入方法,比如
LINE、Node2Vec 和 SDNE 都是很值得研究的。从传统的
Word2vec 到推荐系统中的嵌入表示,再到如今逐渐向图嵌入过渡,这些嵌入方式的应用都非常广泛。

7.3.4 相似度计算方法

基于相似度计算的特征提取有欧式距离、余弦相似度、Jaccard 相似度等,有助于提取用户、商品和文本的相似度。当已经获取了 用户和商品的嵌入表示、文本的分词表示及各类稀疏表示后,可以对些向量表示进行相似度的计算。基于相似度计算在用户分层聚类、个性化推荐或广告投放等应用中一直被广泛使用。

  • 欧氏距离
    欧式距离是最易于理解的一种距离计算方式,是二维、三维或多维空间中两点之问的距离公式。在 n n n 维空问中,对于向量 A = [ a 1 , a 2 , ⋯   , a n ] ,   B = [ b 1 , b 2 , ⋯   , b n ] A = [a_1, a_2, \cdots, a_n], \ B = [b_1, b_2, \cdots, b_n] A=[a1,a2,,an], B=[b1,b2,,bn],其公式如下: d ( A , B ) = ∑ i = 1 n ( a i , b i ) 2 d(A, B) = \sqrt{\sum_{i=1}^n (a_i, b_i)^2} d(A,B)=i=1n(ai,bi)2 欧氏距离的代码如下:

    def EuclideanDistance(dataA, dataB):
    	# np.linalg.norm ⽤于范数计算,默认是⼆范数,相当于平⽅和开根号
    	return 1.0 / ( 1.0 + np.linalg.norm(dataA - dataB))
    
  • 余弦相似度
    首先,样本数据的夹角余弦并不是真正几何意义上的夹角余弦,实际上前者只不过是借用后者的名字,变成了代数意义上的 “夹角余弦”,用于衡量样本向量之间的差异。夹角越小,余弦值越接近于 1 1 1,反之则趋近于 − 1 -1 1。上面的向量 A 和向量 B 之间的夹角余弦公式如下: c o s θ = ∑ i = 1 n ( a i × b i ) ∑ i = 1 n a i 2 × ∑ i = 1 n b i 2 cos \theta = \frac{\sum_{i=1}^n (a_i \times b_i)}{\sqrt{\sum_{i=1}^n a_i^2} \times \sqrt{\sum_{i=1}^n b_i^2}} cosθ=i=1nai2 ×i=1nbi2 i=1n(ai×bi)余弦相似度的代码实现如下:

    def Cosine(dataA, dataB):
    	sumData = np.dot(dataA, dataB)
    	denom = np.linalg.norm(dataA) * np.linalg.norm(dataB)
    	# 归⼀化到[0,1] 区间
    	return ( 1 - sumData / denom ) / 2
    
  • Jaccard 相似度
    Jaccard 相似度一般用于度量两个集合之间的差昇大小,其思想为两个集合共有的元素越多,二者就越相似。为了控制其取值范国,我们可以增加一个分母,也就是两个集合拥有的所有元素。集合 C、集合 D 的 Jaccard 相似度公式如下: J ( C ,   D ) = ∣ C ∩ D ∣ ∣ C ∪ D ∣ = ∣ C ∩ D ∣ ∣ C ∣ + ∣ D ∣ − ∣ C ∩ D ∣ J(C, \ D) = \frac{|C \cap D|}{|C \cup D|} = \frac{|C \cap D|}{|C| + |D| - |C \cap D|} J(C, D)=CDCD=C+DCDCDJaccard 相似度的代码实现如下:

    def Jaccard(dataA, dataB):
    	A_len, B_len = len(dataA), len(dataB)
    	C = [i for i in dataA if i in dataB]
    	C_len = len(C)
    	return C_len / ( A_len + B_len - C_len)
    

更多相似度计算方法有皮尔逊相关系数 (Pearson correlationcoefficient)、修正余弦相似度 (Adjusted Cosine Similarity)、汉明距离 (Hamming distance)、曼哈顿距离(Manhattan distance)、莱文斯坦距离 (Levenshtein distance)等。

7.4 用户画像应用

  • 用户分析
  • 精准营销
  • 风控领域

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pso优化bp网络机械故障诊断(MATLAB代码)

在混合算法中,需要优化的对象(粒子)是 BP 神经网络的权值和值。首先应把要优化的神经网络的全部权值和闽值构成一个实数数组,并赋予它们 [0,1之间的随机数。然后,按照选定的网络结构,用前向算法计算出对应于每组输入样本的神经网络输出。这里BP网络的激活函数都选为sigmoid 函数…

【unity细节】怎么让物体产生碰撞后不会被撞飞,但是有碰撞停止的效果

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 收录于专栏&#xff1a;unity细节和bug ⭐怎么让物体产生碰撞后不会被撞飞&#xff0c;但是有碰撞停止的效果⭐ 文章目录…

PHP-Mysql图书管理系统--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 首页phpStudy 设置导数据库后台的管理界面数据库表结构项目目录如图&#xff1a;代码部分&#xff1a;主页的head 配套资源作业&#xff1a; 本系列校训 用免费公开视频&am…

Linux安装Kafka图形化界面

Apache Kafka本身是一个分布式的消息系统&#xff0c;它并没有官方提供的图形界面。Kafka主要通过命令行界面进行管理和操作。 如果你需要一个可视化的界面来管理Kafka&#xff0c;可以考虑安装一些第三方的Kafka管理工具&#xff0c;例如Kafdrop、Kafka Manager或Conduktor等…

NOAUTH Authentication required解决方法

执行redis报错如下&#xff1a; 提示需要进行权限认证 解决方案 输入redis密码 格式&#xff1a; auth 密码

vue使用Clodop插件打印

一、前往lodop官网&#xff0c;下载插件&#xff0c;http://www.lodop.net/index.html 这里下载的window64位的&#xff0c;将插件安装好&#xff0c;运行&#xff0c;会看到 点击‘去了解C-Lodop>>’,会跳转至使用说明页面&#xff0c;在这个页面里&#xff0c;可以打印…

Facebook开源PySlowFast视频理解代码库

近年来&#xff0c;Facebook 人工智能研究&#xff08;FAIR&#xff09;一直在为视频理解研究做出重大贡献。在2019年10月的ICCV上&#xff0c;该团队推出了一个基于Python的代码库PySlowFast。FAIR现在是开源的PySlowFast&#xff0c;还有一个预先训练的模型库&#xff0c;并承…

camunda流程引擎简单上手

快速开始 参考官方的文档&#xff1a; https://docs.camunda.org/get-started/ 我下面会在关键部署简单记录一下。 下载 服务端 https://docs.camunda.org/manual/latest/installation/full/tomcat/pre-packaged/ 为了方便我们直接下载tomcat整合包&#xff0c;不用自己在…

1200*C. K-th Not Divisible by n

Example input 6 3 7 4 12 2 1000000000 7 97 1000000000 1000000000 2 1 output 10 15 1999999999 113 1000000001 1 解析&#xff1a; 将每 n 个数看成一组&#xff0c;每组缺少了一个n的倍数&#xff0c;所以按照对 n-1 整除和取模分别得出组数和余数&#xff0c;乘起来…

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了&#xff0c;实际上使用场景并不是很多&#xff0c;感觉有点浪费…

Android Studio手动下载安装SDK,图文详解

本教程适用于手动下载Android SDK&#xff0c;适合第一次安装Android Studio的同学&#xff0c;进入安卓SDK网址&#xff1a;https://www.androiddevtools.cn/。首先你需要在D盘新建一个目录Android SDK&#xff0c;存放后面下载的工具。 1、下载SDK Tools&#xff0c;解压到An…

【机器学习 | 朴素贝叶斯】朴素贝叶斯算法:概率统计方法之王,简单有效的数据分类利器

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

微信读书:长期投资(阅读摘录)

微信读书&#xff1a;长期投资&#xff08;阅读摘录&#xff09; 所有投资高手的时间精力都投向了这三大块&#xff1a;行动、思考、读书。 我们把耐心发挥到了极致&#xff0c;这正是价值投资的关键特征之一。 通常在牛市中想要跑赢大盘&#xff0c;难度非常大。 实际上&am…

C语言每日一题:8.除自身以外数组的乘积。

题目&#xff1a; 题目&#xff1a; 思路一&#xff1a; &#xff08;先不考虑题目的要求循序渐进的方法&#xff09; 1.动态开辟数组&#xff0c;初始化数组内容为全1. 2.使用双for循环去给answer赋值。 3.在相同位置不去*对应的下标位置的数组值&#xff0c;而是*1&#xff…

【Linux命令200例】lsattr用于查看文件或目录的属性

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;本文已收录于专栏&#xff1a;Linux命令大全。 &#x1f3c6;本专栏我们会通过具体的系统的命令讲解加上鲜活的实操案例对各个命令进行深入…

测试开源C#人脸识别模块ViewFaceCore(5:质量检测和眼睛状态检测)

ViewFaceCore模块中的FaceQuality支持预测人脸质量&#xff0c;最初以为是预测人体体重&#xff0c;实际测试过程中才发现是评估人脸图片质量&#xff0c;主要调用Detect函数执行图片质量检测操作&#xff0c;其函数原型如下所示&#xff1a; //// 摘要:// 人脸质量评估///…

tf卡为什么显示0字节?tf卡显示0字节怎么恢复数据

我的TF卡现在显示字节为0&#xff0c;想要打开总是会弹出要求格式化的对话框&#xff0c;里面有我重要的数据。请问如何恢复里面的数据啊&#xff1f;急&#xff01;急&#xff01;急&#xff01; ——在日常使用中&#xff0c;我们可能将重要的数据存储在TF卡中。然而&#x…

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十天 40/50【二叉树递归】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【雕爷学编程】Arduino动手做(175)---机智云ESP8266开发板模块3

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

flask中的蓝图

flask中的蓝图 在 Flask 中&#xff0c;蓝图&#xff08;Blueprint&#xff09;是一种组织路由和服务的方法&#xff0c;它允许你在应用中更灵活地组织代码。蓝图可以大致理解为应用或者应用中的一部分&#xff0c;可以在蓝图中定义路由、错误处理程序以及静态文件等。然后可以…