ML基础2-python中的可视化1:matplotlib
承接我的上一篇博客:
https://blog.csdn.net/weixin_62528784/article/details/145329298?spm=1001.2014.3001.5501
在机器学习的过程中,我们需要掌握大量的Python
包,常用的有pandas
和numpy
这些基本数据管理的包(在后续更新中我会讲解)与matplotlib
、seaborn
这类可视化的包,下面我们就来简单介绍一下这两类可视化Python包的用法。
绘制标签、图例等,并保存图表到文件或显示图表。
python入门cheatsheet可以参考一些公众号的博客:
https://mp.weixin.qq.com/s?__biz=MzAwMzIzOTk5OQ==&mid=2247499921&idx=1&sn=dcd6f95596e3de9bf378d850c217fe78&chksm=9b3cb9c1ac4b30d7bbd44057b181f87541f5904d24f903494ae557e768ae00c208c1b68b45c7&payreadticket=HJwg1QnPoRz6efK8s8uTG58KPnUTxGzPqrUmPKqY8mSwVFBC5uzFiQiC41xx3fbtfcKPXo4#rd
总之绘图这一块,一般做生信分析用用R中的ggplot就差不多了,在python就用上面提到的这两个库
一,matplotlib库
matplotlib
是一个用于Python
编程语言的绘图库,它与自己的名称一样,最早是方便MATLAB
用户在Python
中进行可视化,因此提供了一个类似于MATLAB
的绘图系统。matplotlib
最初由John D. Hunter
在2002年创建,现在是一个活跃的开源项目,拥有一个庞大的用户和开发者社区。
matplotlib
的主要特点有:
多平台:matplotlib
可以在所有主要的操作系统上使用(当然,很多Python
包都是多平台兼容的)。
简单易用:提供了一个简洁的接口,使得基础绘图变得简单快捷。
高度可定制:几乎图表的每个元素都可以进行详细的个性化设置。
多种绘图类型:支持多种静态、交互和动态的图表,包括常见的线图、直方图、散点图、条形图、误差线图、热图等。
集成:可以与多种图形用户界面工具包一起使用,如Tkinter、wxPython、Qt或GTK。
输出格式:可以将图表保存为多种格式,包括PNG、PDF、SVG、EPS和PGF。
常用模块
pyplot
:matplotlib.pyplot
是matplotlib
的子模块,提供了一个状态机环境,类似于MATLAB
,适合于交互式绘图和简单的情况下的快速绘图。
pylab
:结合了pyplot
功能和numpy
功能的模块,但现在已不推荐使用,官方建议直接使用pyplot
和numpy
。
常用python帮助文档小技巧tips:
如何查询某个库、某个模块、某个函数的帮助文档?
类似于R中的帮助文档,比如说tidyverse中的某个函数,
我们既可以直接询问查询这个包,也可以根据需求查询这个包中的某个函数
#在R中
?tidyverse
help(tidyverse)
在python中同理,但是我一般不直接查看整个库,比如说matplotlib(这对应于R有点不同,我们在R中其实一般可以也常见直接查询某个R包比如说tidyverse),
我们在R中热衷于查询整体的包或者包中的某个函数(实际上就是模块),
但在python中,我们一般不查询整体的库,而是查询某个子模块,或者是模块中的某个函数
建议一般是查询函数模块比较直接省时间,以及便利
1,用matplotlib画一个最简单的折线图
import matplotlib.pyplot as plt# 准备列表数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]# 创建图形:
plt.figure()# 画折线图:
plt.plot(x, y)# 添加标题和坐标轴标签
plt.title('Biomamba Simple Plot')
plt.xlabel('x axis')
plt.ylabel('y axis')# 显示图表
plt.show()
当然,不需要plt.figure或plt.show就能够直接绘制并查看图
前面可以简化为
import matplotlib.pyplot as plt# 准备列表数据
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]# 画折线图并添加标题和坐标轴标签
plt.plot(x, y)
plt.title('Biomamba Simple Plot')
plt.xlabel('x axis')
plt.ylabel('y axis')
# 遗憾的是,matplotlib的默认配置并不支持中文:
# 创建图形:
plt.figure()# 画折线图:
plt.plot(x, y)# 添加标题和坐标轴标签
plt.title('最简单的折线图')
plt.xlabel('x 轴')
plt.ylabel('y 轴')# 显示图表
plt.show()
# 可以看到,不仅出现了报错,中文的部分也全都变成了□
综上:
折线图实际上只需要准备(x,y)对应数据即可
2,曲线图
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
### 生成数据 ###
# 生成一个起始值为0,终止值为10,数量为50的等差数列:
x = np.linspace(start = 0,stop = 10,num=50)# 下面都是数学函数,应当不用过多解释:
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x)+np.cos(x)
y4 = np.sin(x)*np.cos(x)# 看一下x数据:
print(x)
可以看到起点以及终点都包括在内
其中linspace是一个获取指定起点、终点(都包括在内),以及指定采样数目的数列采样函数
## 使用Matplotlib库对数据进行可视化
plt.figure(figsize=(12,6)) ## 初始化图像窗口并设置大小
plt.plot(x,y1,"b-o") ## 使用蓝色,实线,点为圆形
plt.plot(x,y2,"g--v") ## 使用绿色,虚线,点为下三角形
plt.plot(x,y3,"r-.s") ## 使用红色,点划线,点为正方形
plt.plot(x,y4,"k:*") ## 使用黑色,点线,点为星形
plt.xlabel("X axis") ## 设置X轴标签
plt.ylabel("Y axis") ## 设置Y轴标签
plt.title("curve graph")
plt.show() ## 输出图像
其中的绘图format注释部分:
很显然代码中的标准是color-line-marker;
以第1个实例,可以A33=6种组合
可以看到随意排列组合,实际上都是可以绘制的
3,柱状图
接下来要用到的数据:
这一块主要是pandas的语法,我后续会更新,pandas和R中的tidyverse差不多,都是数学处理与分析的
主要参数:
文件路径
分隔符:用了csv函数那读取的肯定是csv文件了
这个实际上就是sep的别名
是否要使用列名(类似于R的tidyverse中的是否将第1行作为列名,也就是col_names=T或F)
默认行为实际上就是从数据的第1行作为列名去推断列名
文件读入时自己起的名字
作为行名要用哪一列表示
整体读入数据时要用哪些列
读入数据的数据类型
有点类似于tidyverse中的mutate中用as.numeric等数据类型再重新定义一样
列可以自定义,那行读入的时候也可以自定义
下面开始处理数据:
# 读取数据:
my_df = pd.read_csv('test_data/matplotlib/insurance.csv')
# 查看数据:
my_df.head()
# 数据包含年龄、性别、bmi等七个变量
head默认看前面5行,包括第一行列名
——》
如何获取某列某行:
获取某列:列名索引index,这种方法和R很相似
另外一种就是“.”成员/属性引用(点号)
获取某行:注意index是0-based,所以第一行就是0
柱状图其实和直方图(频数统计图没有太大区别),首先需要计数count
我们传入的数据是array数组,重点参数在于
我们需要的是第3个,用于count计数的参数
可以在帮助文档中查看这些例子
后面的repeat涉及到pandas中的广播机制,总之values对应repeat counts次
然后有了values作为x轴,有了counts作为y轴,主要就是使用plt.bar函数了
values,counts=np.unique(my_df["children"],return_counts=True)
print(values,counts)
plt.bar(x=values,height=counts)
### 柱状图可视化 ###
plt.figure(figsize=(6,6))# 设置图片大小
# 统计家庭孩子数量:
group, counts = np.unique(my_df.children,return_counts = True)# 绘图:
pl = plt.bar(x=group, height = counts, width = 0.7)# 绘制柱状图
plt.bar_label(pl,label_type='edge')# 添加条形图顶部数字,如果在小型图中间添加则填写center
plt.xlabel('Children number of family');plt.ylabel("family number")# 添加x轴与y轴的标签文字
plt.title('simple barplot')# 添加图片标题
然后这是center的:
4,堆积柱状图
这种可视化方式做单细胞的小伙伴比较熟悉啦,这里我们可以绘制不同性别比例下的孩子数量
堆积的话其实就涉及到不同的列,也就是要使用多列多分组的信息了,其实就和R的tidyverse中的group_by差不多;
然后分析的话肯定肯定是先列出1个列联表出来,主要就是crosstab函数,
然后这里使用的其实就是2个参数,
1个作为列联表的行,1个作为列联表的列
### 绘制堆积柱状图 ###
plt.figure(figsize=(4,7)) # 设置图片大小
group = sex_df.columns.values # 列名,即孩子数量
female = sex_df.values[0,:]# 女性对应的数据
male = sex_df.values[1,:] # 男性对应的数据
p1 = plt.bar(group,female,0.7,label='female')# 绘制女性柱状图
p2 = plt.bar(group,male,0.7,label='male',bottom=male)# 在底部绘制男性柱状图
plt.legend([p1,p2],["female","male"]) # 添加图例
plt.bar_label(p1,label_type='center') # 在条形图中间添加数字标签
plt.bar_label(p2,label_type='center') # 在条形图中间添加数字标签
其中
可以发现前者是一个pandas series数据对象,并不是一个纯粹的数据框,获取值都是.values
同理:
没有.values是pandas数据框,有就转换为numpy array数组,两种索引方式区分一下:
对于pandas数据框,不能简单使用[,],不然就像上面那样直接报错;
总而言之:pandas数据框的索引操作(获取某行某列)和numpy数组的索引操作不太一样
如果只是两个plt分开,没有组织好的话,会被覆盖
bottom接受array数据类型
所以堆积图本质上是绘制多组plt对象,但是在plt.bar中使用bottom参数
5,饼图+甜甜圈图
plt.figure(figsize=(5,5)) # 设置图片大小
group, counts = np.unique(my_df.region,return_counts=True)# 统计区域分布的数量
explode = [0,0,0.1,0] # 突出显示第三个region
plt.pie(counts,# 饼图数据explode=explode,# 突出显示设置labels=group,# 饼图的标签autopct='%1.1f%%')# 在饼图的每个部分上自动显示百分比,数值保留一位小数,并在数值后面加上 % 符号
x是1D数据array类型,
explode是偏离量,实际上就是扇形半径偏离量,也就是强调哪一个扇形
可以看出确实强调的是第3个也就是southeast部分
如果我改成radius为1的偏离
所以实际上只需要plt.pie+对应的参数(x,explode,labels);
当然饼图也可以修改为甜甜圈图(也就是去掉圆心部分的同心圆)
所以相比上面的部分,我们看看实际上增加了什么:
# 把饼图改成甜甜圈图:
plt.figure(figsize=(5,5)) # 设置图片大小
group, counts = np.unique(my_df.region,return_counts=True)# 统计区域分布的数量
explode = [0,0,0.1,0] # 突出显示第三个region
plt.pie(counts,# 饼图数据explode=explode,# 突出显示设置labels=group,# 饼图的标签autopct='%1.1f%%',wedgeprops=dict(width=0.6)# 设置圆环的宽度,即把扇形图改成甜甜圈图,大家可以把这里改成0.1看看会发生什么)# 在饼图的每个部分上自动显示百分比,数值保留一位小数,并在数值后面加上 % 符号
实际上其实就是修改了1个参数,扇形相对半径的比例大小
当然因为是字典,所以也可以直接提供键值对形式{‘linewidth’: 3},即{‘width’: 0.6}
可以发现还是有效果的:
改成0.1之后就是这样了:
如果设置成1就是饼图
所以饼图实际上就是特殊的甜甜圈图
6,气泡图
气泡图实质上就是在散点图上增加颜色、大小、透明度等变量,让图片的展示信息的维度更高。
在RNA-seq中我们常见的很多,使用ggplot里将logFC等mapping成point的大小等,
之所以不直接用FC,是因为值浮动比较大,所以一般都会归一化/标准化处理,像RNA-seq在下游R分析中还有log对数化等;
气泡图实际上就是散点图+label等信息,所以会处理散点图也就差不多了
比如说对BMI数值进行mapping
然后先处理normalization,也就是归一化
size = (my_df.bmi-my_df.bmi.min())/(my_df.bmi.max()-my_df.bmi.min())*100 # 对bmi数据进行标准化
plt.figure(figsize=(10,6))# 设置图片尺寸
# 绘制散点/气泡图:
pl = plt.scatter(x=my_df.age,y=my_df.charges,s=size,# 控制气泡的大小marker="o",# 设置散点图的性质为圆圈facecolor='lightblue',# 设置散点图内部填充颜色edgecolor="k")# 设置散点边框颜色
plt.xlabel('age');plt.ylabel('charge')
handles,labels = pl.legend_elements(prop='sizes',alpha=1)# 设置size,即bmi的图例
legend = plt.legend(handles,labels,loc = [1,0.1],title='normalized_bmi')
然后这里的归一化是在0-1归一化之后x100,也是1个pandas series数据类型
对于pl.legend_elements这一类具体实例/对象的属性/函数,要查看帮助文档,需要先运行实例pl的定义程序,再help、?
而且需要带上pl对象,全部help
看这个函数是返回1个句柄和1个标签label
两个数据类型都是list
然后句柄和label都被plt.legend用上
loc这里可以传入字符串参数,也可以传入数值坐标,具体需要查看参数
如果我改成
7,箱线图与小提前图:
同样是R的ggplot中常绘制的图
整理出来一个list列表
# 整理绘图数据
box_data = [my_df.charges[my_df.region=='northeast'],my_df.charges[my_df.region=='northwest'], my_df.charges[my_df.region=='southeast'],my_df.charges[my_df.region=='southwest']]
print(box_data)
# 绘制小提琴图:
box_label = np.unique(my_df.region)# 标签为四个区域的值
plt.figure(figsize=(6,6))# 设置图片大小
# 出图:
plt.boxplot(box_data,notch =True,# 设置中位数点的缺口labels=box_label)
总结来看,箱线图也只需要1个plt.boxplot,参数注意array+label
小提琴图:本质上是和箱线图一样的
# 绘制小提琴图:
plt.violinplot(box_data,showmedians = True)# 设置显示中位数
plt.xticks(ticks=[1,2,3,4],labels=box_label)# 设置横坐标显示文字
没有xtick则
ticks传递x轴参数坐标,labels在对应坐标处放置labels
相关文章:
ML基础2-python中的可视化1:matplotlib
承接我的上一篇博客: https://blog.csdn.net/weixin_62528784/article/details/145329298?spm1001.2014.3001.5501 在机器学习的过程中,我们需要掌握大量的Python包,常用的有pandas和numpy这些基本数据管理的包(在后续更新中我会讲解)与mat…...
SpringBoot--基本使用(配置、整合SpringMVC、Druid、Mybatis、基础特性)
这里写目录标题 一.介绍1.为什么依赖不需要写版本?2.启动器(Starter)是何方神圣?3.SpringBootApplication注解的功效?4.启动源码5.如何学好SpringBoot 二.SpringBoot3配置文件2.1属性配置文件使用2.2 YAML配置文件使用2.3 YAML配置文件使用2.…...
9.C++文件与流
C文件与流 在 C 中,文件和流是用于处理输入输出操作的重要概念,以下是关于它们的详细讲解: 流的概念 定义:流是一种抽象概念,它代表了数据的序列。在 C 中,流可以是输入流(从外部源如文件或键…...
CSRF 跨站请求伪造漏洞
原理 当一个网站A使用Cookie,存储Session或Token来用于单点登录和权限操作时。浏览器将Cookie存储到浏览器中。当用户在访问另一个网站V时,黑客可以通过伪造表单,向网站A发送修改重要信息(如密码)、支付等操作,浏览器会自动携带C…...
从ABCD谈人工智能对软件开发的影响(2)
接“造词圈子割韭菜”-从ABCD谈人工智能对软件开发的影响(1) (六)分步解析之二:组织价值(业务用例图) 这一步本来建模难度也只有,AI的助力分数可以做到30分。 ★很多领域驱动设计…...
我谈《概率论与数理统计》的知识体系
学习《概率论与数理统计》二十多年后,在廖老师的指导下,才厘清了各章之间的关系。首先,这是两个学科综合的一门课程,这一门课程中还有术语冲突的问题。这一门课程一条线两个分支,脉络很清晰。 概率论与统计学 概率论…...
第 10 课 Python 内置函数
1. 什么是内置函数 Python解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能就是内置函数。Python解释器启动以后,内置函数也生效了,可以直接拿来使用。 内置函数是解释器的一部分,它随着解释器的启动而生效;标准库函数是…...
MySQL中的读锁与写锁:概念与作用深度剖析
MySQL中的读锁与写锁:概念与作用深度剖析 在MySQL数据库的并发控制机制中,读锁和写锁起着至关重要的作用。它们是确保数据在多用户环境下能够正确、安全地被访问和修改的关键工具。 一、读锁(共享锁)概念 读锁,也称为…...
Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放
Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…...
导出地图为图像文件
使用函数可以将地图或布局视图的内容导出为图像文件. 操作方法: 1.打开目标地图文档 2.导入arcpy.mapping模块 import arcpy.mapping as mapping 3.引用当前活动地图文档,把该引用赋值给变量 mxd mapping.MapDocument() 4.获取地图文档中的数据框列表,查找目标数据框,并…...
【Linux】命令为桥,存在为岸,穿越虚拟世界的哲学之道
文章目录 Linux基础入门:探索操作系统的内核与命令一、Linux背景与发展历史1.1 Linux的起源与发展1.2 Linux与Windows的对比 二、Linux的常用命令2.1 ls命令 - "List"(列出文件)2.2 pwd命令 - "Print Working Directory"(…...
如何在gitee/github上面搭建obsidian的图床
在搭建图床之前我们需要知道图床是一个什么东西,图床顾名思义就是存放图片的地方,那么我们为什么要搭建图床呢?因为我们在写博客的时候,很多同学都是在本地使用typora或者是obsidian进行markdown语法的文章的书写,文件格式通常都是…...
【DIY小记】减肥10kg保持半年的经验分享
作为程序员,脑力劳动者,保持一个健康的身体,是非常重要的。回顾24年自己取得的结果,一个比较亮眼的就是减肥减了10kg,到达了一个比较健康的体重,保持了半年没有反弹,当然到现在也依然在保持。今…...
[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...
C# 探秘:PDFiumCore 开启PDF读取魔法之旅
一、引言 在当今数字化时代,PDF 文件就像一个个神秘的宝盒,里面装满了各种信息。无论是项目文档、学术论文还是产品说明书,PDF 格式凭借其良好的兼容性和稳定性,成为了信息传递的重要载体。想象一下,你接到一个紧急任…...
计算机网络-运输层
重点内容: 运输层 是整个网络体系结构中的关键层次之一。一定要弄清以下一些重要概念: (1) 运输层为相互通信的应用进程提供逻辑通信。 (2) 端口和套接字的意义。 (3) 无连接的 UDP 的特点。 (4) 面向连接的 TCP 的特点。 (5) 在不可靠的网…...
TLF35584 基本介绍
1 概述 1)多电压电源芯片,包含6路输出电压。 LDO_Com:低降后调节器 5V/200mA 通信电源。LDO_C :低降后调节器 5V/600mA (TLF35584xxVS1)/3.3 V/600mA (TLF35584xxVS2) uC电源。Volt_Ref :参考电压5.0 V /- 1%/150mA …...
【Python】第四弹---深入理解Python控制流:从顺序到循环的全面解析
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、顺序语句 2、条件语句 2.1、什么是条件语句 2.2、语法格式 2.3、缩进和代码块 2.4、练习 2.5、空…...
PBFT算法
在我的博客中对于RAFT算法也有详细的介绍,raft算法包含三种角色,分别是:跟随者( follower ),候选人(candidate )和领导者( leader )。集群中的一个节点在某一…...
软件过程模型
软件过程概念 软件生命周期 软件过程 在工作产品构建过程中,所需完成的工作活动,动作和任务的集合。 软件过程模型 软件过程评估 能力成熟度模型(CMM) 传统软件过程模型 瀑布模型(第一个软件过程模型ÿ…...
【Ubuntu】安装SSH启用远程连接
【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端: sudo systemctl start ssh贰、配置SSH(可跳过) 配置文件 …...
代码随想录算法【Day31】
Day31 56. 合并区间 class Solution { public://按照左边界,从小到大排序static bool cmp(const vector<int>& a, const vector<int>& b){return a[0] < b[0];} vector<vector<int>> merge(vector<vector<int>>…...
Apache Tomcat文件包含漏洞复现(详细教程)
1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,其安装后会默认开启ajp连接器,方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发…...
C#高级:常用的扩展方法大全
1.String public static class StringExtensions {/// <summary>/// 字符串转List(中逗 英逗分隔)/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...
麒麟操作系统基础知识保姆级教程(二十一)进入单用户模式
如果你想拥有你从未拥有过的东西,那么你必须去做你从未做过的事情 在咱们运维工作中,服务器的密码长度,密码复杂度,修改时间,超时时间,用户权限管理,root直接远程连接,普通用户su到r…...
基于C语言的数组从入门到精通
简介:本篇文章主要介绍了一维数组,二维数组,字符数组的定义,数组的应用,数组的核心代码解析,适用于0基础的初学者. C语言数组 1.一维数组 1.1定义 1.1.1声明 语法:数据类型 数组名[数组大小];示例:int arr[5]; 1.1.2初始化 a.静态初始化 完全初始化:int arr[5] {1…...
CLOUDFLARE代理请求重定向你太多次
现象 使用CLOUDFLARE代理前请求正常,使用CLOUDFLARE代理请求后出现 原因分析 以下是我的猜测,在默认情况下 CLOUDFLARE代理,可能是直接请求我们服务器的IP,比如:http://1.1.1.1 而不是通过域名的方式(如…...
算法随笔_21:字符的最短距离
上一篇:算法随笔_20:区间子数组个数 -CSDN博客 题目描述如下: 给你一个字符串 s 和一个字符 c ,且 c 是 s 中出现过的字符。 返回一个整数数组 answer ,其中 answer.length s.length 且 answer[i] 是 s 中从下标 i 到离它 最近 的字符 c 的 距离 。 …...
第19个项目:蛇年特别版贪吃蛇H5小游戏
下载地址:https://download.csdn.net/download/mosquito_lover1/90308956 游戏玩法: 点击"开始游戏"按钮开始 使用键盘方向键控制蛇的移动 吃到红色食物可以得分 撞到墙壁或自己会结束游戏 核心源码: class SnakeGame { constructor() { this.canvas = docum…...
Vue3 30天精进之旅:Day01 - 初识Vue.js的奇妙世界
引言 在前端开发领域,Vue.js是一款极具人气的JavaScript框架。它以其简单易用、灵活高效的特性,吸引了大量开发者。本文是“Vue 3之30天系列学习”的第一篇博客,旨在帮助大家快速了解Vue.js的基本概念和核心特性,为后续的深入学习…...
单值二叉树(C语言详解版)
一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…...
贵州端午黔粽探源:贵州味道与黔味文化与糯米的融合?
黔粽的由来? 黔粽的贵州味道?探索贵州“黔味文化”找寻答案! 黔粽的特色由来与贵州味道 贵州粽,简称黔粽。黔粽的主要特色是“酸辣”,以其独特的“酸辣”口味和地域特色,与浙粽、京粽、粤粽、川粽、云粽、闽粽、台湾粽并列为“全国八大粽子派别”之一,并与甜味粽、咸味粽共…...
【Project】CupFox电影网站数据爬取分析与可视化
数据采集清洗与数据存储流程如下图所示。 数据分析与数据可视化流程设计如下 1.使用pymongo从数据库中查询所需的数据。对数据进行处理和分析,进行统计、分类、聚合等操作,提取关键指标和洞察。分析结果可以通过编写Python代码进一步优化、筛选和整理&a…...
Spring Boot 后端跨域解决方案:解锁前后端通信的障碍
随着前后端分离架构的普及,跨域资源共享(Cross-Origin Resource Sharing, CORS)问题成为了许多开发者必须面对的一个挑战。当Web浏览器尝试从一个源加载资源到另一个不同的源时,出于安全考虑,它会实施同源策略…...
Linux如何设置用户登录超时(/etc/profile)
Linux如何设置用户登录超时(/etc/profile) 1. 针对所有用户 # vi /etc/profile ... export TMOUT900 # 设置闲置时间为15分钟,单位为秒;如果没有此行则直接添加进去 ... vi /etc/profile TMOUT18000000000000 export QT_IM_MODULEfcitx readonly TMOUT expor…...
Elastic Cloud Serverless 获得主要合规认证
作者:来自 Elastic Oliver Mao 我们很高兴地宣布,Elastic Cloud Serverless 已获得多项重要的合规性认证。这一里程碑加强了我们对安全性、隐私性和法规遵从性的承诺。Elastic Cloud Serverless 现已通过以下行业领先框架的审核或认证:SOC 2 …...
渐变颜色怎么调?
渐变颜色的调整是设计中非常重要的一部分,尤其是在创建具有视觉吸引力和深度感的设计作品时。以下是一些在不同设计软件中调整渐变颜色的详细步骤和技巧: 一、Adobe Photoshop 1. 创建渐变 打开渐变工具: 选择工具栏中的“渐变工具”&#x…...
DDD该怎么去落地实现(1)关键是“关系”
DDD落地的关键是“关系” 这些年,我认为DDD走到了一个死胡同里了,因为落地实现过于困难。很多团队在经过一段时间的学习,清楚理解了DDD那些晦涩的概念,根据业务绘制出领域模型,这都不困难。但绘制领域模型不是我们最终…...
基于本地事务表+MQ实现分布式事务
基于本地事务表MQ实现分布式事务 引言1、原理2、本地消息表优缺点3、本地启动rocketmq4、代码实现及验证4.1、核心代码4.2、代码执行流程4.3、项目结构4.4、项目源码 引言 本地消息表的方案最初由ebay的工程师提出,核心思想是将分布式事务拆分成本地事务进行处理。…...
第17篇:python进阶:详解数据分析与处理
第17篇:数据分析与处理 内容简介 本篇文章将深入探讨数据分析与处理在Python中的应用。您将学习如何使用pandas库进行数据清洗与分析,掌握matplotlib和seaborn库进行数据可视化,以及处理大型数据集的技巧。通过丰富的代码示例和实战案例&am…...
S4 HANA Tax相关的定价过程
本文主要介绍在S4 HANA OP中Tax相关的定价过程相关设置。具体请参照如下内容: 目录 1. 定义定价过程(OBYZ) 2. 将定价过程分配给国家(OBBG)编辑编辑 3. 新增Transaction Key(OBCN) 1. 定义定价过程(OBYZ) 定价过程就是为了将“条件类型”和“事务”关联起来…...
Linux下php8安装phpredis扩展的方法
Linux下php8安装phpredis扩展的方法 下载redis扩展执行安装编辑php.ini文件重启php-fpmphpinfo 查看 下载redis扩展 前提是已经安装好redis服务了 php-redis下载地址 https://github.com/phpredis/phpredis 执行命令 git clone https://github.com/phpredis/phpredis.git执行…...
K8S 启动探测、就绪探测、存活探测
先来思考一个问题: 在 Deployment 执行滚动更新 web 应用的时候,总会出现一段时间,Pod 对外提供网络访问,但是页面访问却发生404,这个问题要如何解决呢?学完今天的内容,相信你会有自己的答案。 …...
rust学习-rust中的保留字
rust学习-rust中的保留字 已使用的保留字未来可能使用的保留字 保留字是语言中预定义的标识符,不能用作变量名、函数名或其他自定义标识符,Rust的保留字大致可以分为两类:已使用的保留字和未来可能使用的保留字 已使用的保留字 as࿱…...
-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
终端报错: -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录原因:由于文件行尾符不匹配导致的。当脚本文件在Windows环境中创建或编辑后,行尾符为CRLF(即回车和换行,\r\n)…...
【C】memory 详解
<memory.h> 是一个 C 标准库头文件,提供了一组内存管理函数,用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块,是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...
Android实训九 数据存储和访问
实训9 数据存储和访问 一、【实训目的】 1、 SharedPreferences存储数据; 2、 借助Java的I/O体系实现文件的存储, 3、使用Android内置的轻量级数据库SQLite存储数据; 二、【实训内容】 1、实现下图所示的界面,实现以下功能: 1ÿ…...
Redis vs. 其他数据库:深度解析,如何选择最适合的数据库?
一、如何为项目选择合适的数据库? 选择合适的数据库是一个复杂的过程,需要综合考虑多个因素。下面几个维度来详细阐述: 1.数据模型 关系型数据库(RDBMS):适用于高度结构化、关联性强的数据,如电…...
docker 安装 mysql 详解
在平常的开发工作中,我们经常需要用到 mysql 数据库。那么在docker容器中,应该怎么安装mysql数据库呢。简单来说,第一步:拉取镜像;第二步:创建挂载目录并设置 my.conf;第三步:启动容…...
C++实现设计模式---桥接模式 (Bridge)
桥接模式 (Bridge) 桥接模式 是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们可以独立变化。桥接模式的核心思想是使用组合(而非继承)来扩展功能。 意图 将抽象部分与实现部分分离,使它们都可以独立地变…...