【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析

  • 一、引言
  • 二、数据加载介绍
    • 2.1 导入必要的库
    • 2.2 读取数据
    • 2.3 数据探索
  • 三、数据预处理
  • 四、可视化分析
    • 4.1 城市犯罪计数统计
    • 4.2 不同犯罪领域的案件持续时间
    • 4.3 不同犯罪领域的警力部署
    • 4.4 犯罪类型的分布情况
    • 4.5 受害者性别分布
    • 4.6 各城市犯罪领域分布
    • 4.7 各种武器在犯罪类型里使用的频率
    • 4.8 受害者各年龄数量分布
    • 4.9 不同年龄区间的受害者数量
  • 总结

一、引言

  在当今社会,犯罪数据的分析对于理解犯罪模式、优化警力部署和提升公共安全具有重要意义。本文将利用 Python 的 pyecharts 库对 2020 年至 2024 年印度多个城市的犯罪数据进行可视化分析,涵盖多个关键维度。

二、数据加载介绍

2.1 导入必要的库

  首先,我们需要导入必要的Python库,包括pandas和pyecharts。

import pandas as pd
from datetime import datetime
from pyecharts.charts import Bar, Line, Pie, Scatter, Map, Grid, Tab
from pyecharts import options as opts
from pyecharts.globals import ThemeType

2.2 读取数据

  假设我们的数据集保存在一个CSV文件中,名为india_crime.csv。

data = pd.read_csv('india_crime_data.csv')

2.3 数据探索

  数据维度情况:

  数据的部分展示:

  查看数据简要概述信息:

  • Report Number - 报告编号
  • Date Reported - 报告日期
  • Date of Occurrence - 发生日期
  • Time of Occurrence - 发生时间
  • City - 城市
  • Crime Code - 犯罪代码
  • Crime Description - 犯罪描述
  • Victim Age - 受害者年龄
  • Victim Gender - 受害者性别
  • Weapon Used - 使用武器
  • Crime Domain - 犯罪领域
  • Police Deployed - 警力部署
  • Case Closed - 案件结案
  • Date Case Closed - 结案日期

  数据种缺失值情况:

三、数据预处理

  在进行可视化之前,我们需要对数据进行一些预处理,包括数据清洗、字段转换等。

# 转换日期字段
df['Date Reported'] = pd.to_datetime(df['Date Reported'])
df['Date of Occurrence'] = pd.to_datetime(df['Date of Occurrence'])
df['Date Case Closed'] = pd.to_datetime(df['Date Case Closed'], errors='coerce')
df['Time of Occurrence'] = pd.to_datetime(df['Time of Occurrence'], dayfirst=True)

  缺失值处理,使用’2020-01-01’来填充’Date Case Closed’字段种的缺失值。

df['Date Case Closed'] = df['Date Case Closed'].fillna(pd.to_datetime('2020-01-01'))

四、可视化分析

4.1 城市犯罪计数统计

  统计每个城市的犯罪数量,了解犯罪高发地区。

# 城市犯罪计数统计
city_crime_count = df['City'].value_counts().reset_index()
city_crime_count.columns = ['City', 'Crime Count']
city_crime_count = city_crime_count.sort_values(by='Crime Count')bar = (Bar(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add_xaxis(city_crime_count['City'].tolist()).add_yaxis("", city_crime_count['Crime Count'].tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=True),     #True,显示柱状图上的数字).set_global_opts(title_opts=opts.TitleOpts(title="城市犯罪计数统计",subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_left="center"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),  #legend_opts=opts.LegendOpts(is_show=True),visualmap_opts=opts.VisualMapOpts(is_show=False,pos_top='60%',pos_left='40%',range_color=["green", "yellow", "red", "pink", "orange", "purple"])).reversal_axis())
bar.render("city_crime_count.html")
bar.render_notebook()

4.2 不同犯罪领域的案件持续时间

  计算不同犯罪领域的案件平均持续时间。

# 不同犯罪领域的案件持续时间
df['Case Duration'] = (df['Date Case Closed'] - df['Date of Occurrence']).dt.days
df['Case Duration'] = df['Case Duration'].fillna(df['Case Duration'].median())crime_domain_duration = df.groupby('Crime Domain')['Case Duration'].mean().reset_index()
crime_domain_duration.columns = ['Crime Domain', 'Average Duration']c = (Bar(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add_xaxis(crime_domain_duration['Crime Domain'].tolist()).add_yaxis("", crime_domain_duration['Average Duration'].round(2).tolist()).set_series_opts(label_opts=opts.LabelOpts(is_show=True),     #True,显示柱状图上的数字).set_global_opts(title_opts=opts.TitleOpts(title="不同犯罪领域的案件持续时间",subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_left="center"),xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=30)),  #legend_opts=opts.LegendOpts(is_show=True),visualmap_opts=opts.VisualMapOpts(is_show=False,pos_top='60%',pos_left='40%',range_color=["pink"])))
c.render("crime_domain_duration.html")
c.render_notebook()

4.3 不同犯罪领域的警力部署

  分析不同犯罪领域所需的警力部署情况。

categories = df['Crime Domain'].unique().tolist()box_data = []
for category in categories:group = df[df['Crime Domain'] == category]['Police Deployed']box_data.append(group.tolist())  # 注意:这不是标准的箱线图数据格式!c = (Boxplot(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add_xaxis(categories).add_yaxis("", Boxplot.prepare_data(box_data)).set_series_opts(label_opts=opts.LabelOpts(is_show=True),     #True,显示柱状图上的数字).set_global_opts(title_opts=opts.TitleOpts(title="不同犯罪领域的警力部署",subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_left="center"),xaxis_opts=opts.AxisOpts(type_="category", name="区域", axislabel_opts=opts.LabelOpts(rotate=-15)),yaxis_opts=opts.AxisOpts(type_="value", name="警力部署"),datazoom_opts=[opts.DataZoomOpts(), opts.DataZoomOpts(type_="inside")],visualmap_opts=opts.VisualMapOpts(is_show=False,pos_top='60%',pos_left='40%',range_color=["yellow"]))
)c.render("crime_domain_police.html")
c.render_notebook()

4.4 犯罪类型的分布情况

  分析不同犯罪类型的分布情况。

# 颜色分布
color_counts = df['Crime Description'].value_counts()
# 生成饼图数据
color_data = [(color, count) for color, count in color_counts.items()]# 创建饼图
pie_chart = (Pie(init_opts=opts.InitOpts(theme='dark',width='1200px', height='600px')).add("", color_data)# .set_colors(colors)  # 使用颜色映射列表.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).set_global_opts(title_opts=opts.TitleOpts(title='犯罪类型的分布情况',subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_top='0%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)),# visualmap_opts=opts.VisualMapOpts(#     is_show=False,#     max_=600,#     pos_top='70%',#     pos_left='20%',#     range_color=["green", "yellow", "red", "pink", "orange"]# ),legend_opts=opts.LegendOpts(is_show=True, pos_right="0%", pos_top="5%",orient="vertical"),)
)
pie_chart.render("pie_set_color.html")
# 渲染图形
pie_chart.render_notebook()

4.5 受害者性别分布

  分析受害者的性别分布情况。

# 受害者性别分布
gender_distribution = df['Victim Gender'].value_counts()
gender_distribution  = [(color, count) for color, count in gender_distribution.items()]# 创建饼图
pie_chart = (Pie(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add("", gender_distribution)# .set_colors(colors)  # 使用颜色映射列表.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).set_global_opts(title_opts=opts.TitleOpts(title='受害者性别分布',subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_top='0%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)),legend_opts=opts.LegendOpts(is_show=True, pos_right="10%", pos_top="40%",orient="vertical"),)
)
pie_chart.render("gender_distribution.html")
# 渲染图形
pie_chart.render_notebook()

4.6 各城市犯罪领域分布

  分析各城市的犯罪领域分布情况。

from pyecharts.charts import HeatMapcity_domain_distribution = df.groupby(['City', 'Crime Domain']).size().unstack().fillna(0).reset_index()
city_domain_distribution = city_domain_distribution.melt(id_vars='City', var_name='Crime Domain', value_name='Count')FA = city_domain_distribution[city_domain_distribution['Crime Domain'] == 'Fire Accident'][['City','Count']]
OC = city_domain_distribution[city_domain_distribution['Crime Domain'] == 'Other Crime'][['City','Count']]
TF = city_domain_distribution[city_domain_distribution['Crime Domain'] == 'Traffic Fatality'][['City','Count']]
VC = city_domain_distribution[city_domain_distribution['Crime Domain'] == 'Violent Crime'][['City','Count']]data = FA.merge(OC,how='left',on='City',suffixes=('_df1', '_df2'))
data = data.merge(TF,how='left',on='City',suffixes=('', '_df3'))
data = data.merge(VC,how='left',on='City',suffixes=('', '_df4'))
data.columns = ['City','Fire Accident','Other Crime','Traffic Fatality','Violent Crime']# 创建堆叠柱状图
bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 使用明亮的主题.add_xaxis(data['City'].tolist()).add_yaxis('Fire Accident', data['Fire Accident'].tolist(), stack='stack1', color='blue', label_opts=opts.LabelOpts(is_show=False)).add_yaxis('Other Crime', data['Other Crime'].tolist(), stack='stack1', color='green', label_opts=opts.LabelOpts(is_show=False)).add_yaxis('Traffic Fatality', data['Traffic Fatality'].tolist(), stack='stack1', color='orange', label_opts=opts.LabelOpts(is_show=False)).add_yaxis('Violent Crime', data['Violent Crime'].tolist(), stack='stack1', color='red', label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title='各城市犯罪领域分布',subtitle="""--公众号:NLP随手记  CSDN:云天徽上--""",pos_left="center"),xaxis_opts=opts.AxisOpts(name='城市', axislabel_opts=opts.LabelOpts(rotate=45)),yaxis_opts=opts.AxisOpts(name='犯罪数'),datazoom_opts=opts.DataZoomOpts(),  # 添加滑动条功能legend_opts=opts.LegendOpts(is_show=True, pos_right="-5%", pos_top="40%",orient="vertical"),# toolbox_opts=opts.ToolboxOpts(is_show=True)  # 启用工具箱)
)bar.render("city_domain_distribution.html")
bar.render_notebook()

4.7 各种武器在犯罪类型里使用的频率

  分析不同犯罪类型中各种武器的使用频率。

# 各种武器在犯罪类型里使用的频率
weapon_crime_distribution = df.groupby(['Crime Description', 'Weapon Used']).size().unstack().fillna(0).reset_index()
weapon_crime_distribution = weapon_crime_distribution.melt(id_vars='Crime Description', var_name='Weapon Used', value_name='Count')Blunt  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Blunt Object'].set_index('Crime Description')['Count'].to_dict()
Explosives = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Explosives'].set_index('Crime Description')['Count'].to_dict()
Firearm  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Firearm'].set_index('Crime Description')['Count'].to_dict()
Knife  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Knife'].set_index('Crime Description')['Count'].to_dict()
Poison  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Poison'].set_index('Crime Description')['Count'].to_dict()
None1  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='None'].set_index('Crime Description')['Count'].to_dict()
Other  = weapon_crime_distribution[weapon_crime_distribution['Weapon Used']=='Other'].set_index('Crime Description')['Count'].to_dict()Blunt_list = [[key, value] for key, value in Blunt.items()]
Explosives_list = [[key, value] for key, value in Explosives.items()]
Firearm_list = [[key, value] for key, value in Firearm.items()]
Knife_list = [[key, value] for key, value in Knife.items()]
Poison_list = [[key, value] for key, value in Poison.items()]
None1_list = [[key, value] for key, value in None1.items()]
Other_list = [[key, value] for key, value in Other.items()]c = (Pie(init_opts=opts.InitOpts(theme='dark',width='1400px', height='700px')).add("",Blunt_list,   # 两个值radius=["15%", "20%"],  # 大小center=["10%", "20%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",Explosives_list,   # 两个值radius=["15%", "20%"],  # 大小center=["40%", "20%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",Firearm_list,   # 两个值radius=["15%", "20%"],  # 大小center=["70%", "20%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",Knife_list,   # 两个值radius=["15%", "20%"],  # 大小center=["10%", "50%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",Poison_list,   # 两个值radius=["15%", "20%"],  # 大小center=["40%", "50%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",None1_list,   # 两个值radius=["15%", "20%"],  # 大小center=["70%", "50%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).add("",Other_list,   # 两个值radius=["15%", "20%"],  # 大小center=["40%", "80%"],  # 位置rosetype="radius",   label_opts=opts.LabelOpts(is_show=False),  # 不在图形上显示数据).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).set_global_opts(title_opts=opts.TitleOpts(title='各种武器在犯罪类型里使用的频率',subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_top='0%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)),legend_opts=opts.LegendOpts(is_show=True, pos_right="0%", pos_top="20%",orient="vertical"),)
)c.render("weapon_domain_distribution.html")
c.render_notebook()

4.8 受害者各年龄数量分布

  分析受害者年龄的分布情况。

age_distribution = df['Victim Age'].value_counts().reset_index()
age_distribution.columns = ['Age', 'Count']
age_distribution = age_distribution.sort_values(by='Age')# 创建散点图
scatter = (Scatter(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add_xaxis(age_distribution['Age'].tolist()).add_yaxis("", age_distribution['Count'].tolist(), symbol_size=10,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="skyblue", opacity=0.6))  # 设置散点大小.set_global_opts(title_opts=opts.TitleOpts(title='受害者性别分布',subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_top='0%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)),xaxis_opts=opts.AxisOpts(type_="category", name="受害者年龄",boundary_gap=False,max_=82),yaxis_opts=opts.AxisOpts(type_="value", name="数量",max_=max(age_distribution['Count'].tolist())+30, min_=min(age_distribution['Count'].tolist())-30),visualmap_opts=opts.VisualMapOpts(type_="size",is_show=False,pos_top='60%',pos_left='40%',range_color=["purple"],max_=max(age_distribution['Count'].tolist()),min_=min(age_distribution['Count'].tolist())),# visualmap_opts=opts.VisualMapOpts(type_="size"),  # 根据数量设置散点大小tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"),  # 鼠标悬停提示)
)scatter.render("age_distribution.html")
scatter.render_notebook()

4.9 不同年龄区间的受害者数量

  分析不同年龄区间的受害者数量分布情况。

bins = [0, 17, 24, 34, 44, 54, 64, 74, 84, 94, 1000]
labels = ['0-17', '18-24', '25-34', '35-44', '45-54', '55-64', '65-74', '75-84', '85-94', '95+']
df['Age Group'] = pd.cut(df['Victim Age'], bins=bins, labels=labels, right=True)
# 将 Age Group 转换为有序类别
df['Age Group'] = pd.Categorical(df['Age Group'], categories=labels, ordered=True)
# 计算每个年龄区间的数量
vic_age = df['Age Group'].value_counts()gender_distribution  = [(color, count) for color, count in vic_age.items()]# 创建饼图
pie_chart = (Pie(init_opts=opts.InitOpts(theme='dark',width='1000px', height='600px')).add("", gender_distribution)# .set_colors(colors)  # 使用颜色映射列表.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")).set_global_opts(title_opts=opts.TitleOpts(title='不同年龄区间的受害者数量分布',subtitle="""--公众号:NLP随手记, CSDN:云天徽上--""",pos_top='0%',pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color='#228be6',font_size=15)),legend_opts=opts.LegendOpts(is_show=True, pos_right="10%", pos_top="40%",orient="vertical"),)
)
pie_chart.render("age_group_distribution.html")
# 渲染图形
pie_chart.render_notebook()

总结

  以上代码实现了对印度犯罪数据的10个关键维度的可视化分析。通过 pyecharts,我们能够直观地展示城市犯罪数量、犯罪领域、警力部署、受害者特征等多方面的信息。这些可视化图表可以帮助研究人员、政策制定者和执法机构更好地理解犯罪模式,从而制定更有效的公共安全策略。

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

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

相关文章

基于SpringBoot+Vue的在线电影购票系统的设计与实现

获取源码:SpringBootVue的在线电影购票系统: 用户:登录、注册、忘记密码、主页、猜你想看、电影详情、选座购票、正在热映、即将上映、影院、排行榜、影视快报、平台公告、个人中心、我的收藏、想看、改签、评论、排行等功能管理员:登录、首页…

LabVIEW无刷电机控制器检测系统

开发了一种基于LabVIEW的无刷电机控制器检测系统。由于无刷电机具有高效率、低能耗等优点,在电动领域有取代传统电机的趋势,而无刷电机的核心部件无刷电机控制器产量也在不断增长。然而,无刷电机控制器的出厂检测仍处于半自动化状态&#xff…

C#功能测试

List 内部元素为引用 src[0]为"11" List<Source> src new List<Source>(); src.Add(new Source() { Name "1", Age 1, Description "1" }); src.Add(new Source() { Name "2", Age 2, Description "2"…

八种单例模式详解

亲爱的朋友们&#xff0c;大家好&#xff01; 今天是 CSDN博客之星 投票的开始日&#xff01;非常感谢你们在过去的时间里给予我无私的支持和鼓励&#xff0c;这一路走来&#xff0c;正是因为有你们的帮助&#xff0c;我才能不断进步&#xff0c;走得更远。 目前&#xff0c;…

STM32 PWM脉冲宽度调制介绍

目录 背景 PWM 模式 影子寄存器和预装载寄存器 PWM对齐模式 PWM 边沿对齐模式 向上计数配置 向下计数的配置 PWM 中央对齐模式 程序 第一步、使能GPIOB组、AFIO、TIM3外设时钟 第二步、输出通道端口配置​编辑 第三步、定时器配置产生频率 第四步、PWM输出配置 第…

Java面试第二山!《计算机网络》!

在 Java 面试里&#xff0c;计算机网络知识是高频考点&#xff0c;今天就来盘点那些最容易被问到的计算机网络面试题&#xff0c;帮你轻松应对面试&#xff0c;也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别&#xff1f;在…

deepseek-v3在阿里云和腾讯云的使用中的差异

随着deepseek在各大云商上线&#xff0c;试用了下阿里云和腾讯云的deepseek服务&#xff0c;在回答经典数学问题9.9和9.11谁大时&#xff0c;发现还是有差异的。将相关的问题记录如下。 1、问题表现 笔者使用的openai的官方sdk go-openai。 因本文中测验主要使用阿里云和腾讯…

蓝桥杯单片机基础部分——单片机介绍部分

前言 这个部分是额外的&#xff0c;我看我有的学弟学妹基础比较差&#xff0c;对板子上面的模块不太熟悉&#xff0c;这里简单的介绍一下 蓝桥杯单片机 这个就是蓝桥杯单片机的板子&#xff0c;它的主控芯片是&#xff08;IAP15F2K61S2&#xff09;&#xff0c;这里就对他常用…

百度搜索和文心智能体接入DeepSeek满血版——AI搜索的新纪元

在当今数字化时代&#xff0c;搜索引擎作为互联网信息获取的核心工具&#xff0c;正经历着前所未有的变革。据悉&#xff0c;2025年2月16日&#xff0c;百度搜索和文心智能体平台宣布全面接入DeepSeek和文心大模型的最新深度搜索功能&#xff0c;搜索用户可免费使用DeepSeek和文…

redis解决高并发看门狗策略

当一个业务执行时间超过自己设定的锁释放时间&#xff0c;那么会导致有其他线程进入&#xff0c;从而抢到同一个票,所有需要使用看门狗策略&#xff0c;其实就是开一个守护线程&#xff0c;让守护线程去监控key&#xff0c;如果到时间了还未结束&#xff0c;就会将这个key重新s…

【koa】05-koa+mysql实现数据库集成:连接和增删改查

前言 前面我们已经介绍了第二阶段的第1-4点内容&#xff0c;本篇介绍第5点内容&#xff1a;数据库集成&#xff08;koamysql&#xff09; 也是第二阶段内容的完结。 一、学习目标 在koa项目中正常连接数据库&#xff0c;对数据表进行增删改查的操作。 二、操作步骤 本篇文章…

aws(学习笔记第二十八课) aws eks使用练习(hands on)

aws(学习笔记第二十八课) 使用aws eks 学习内容&#xff1a; 什么是aws eksaws eks的hands onaws eks的创建applicationeks和kubernetes简介 1. 使用aws eks 什么是aws eks aws eks的概念 aws eks是kubernetes在aws上包装出来 的新的方式&#xff0c;旨在更加方便结合aws&…

IM聊天系统架构实现

一、IM系统整体架构 二、企业级IM系统如何实现心跳与断线重连机制&#xff1b; 1、重连机制&#xff08;服务端下线&#xff09; 服务端下线&#xff0c;客户端netty可以感知到&#xff0c;在感知的方法中进行重连的操作&#xff0c;注意重连可能连接到旧的服务器继续报错&…

Kubeadm+Containerd部署k8s(v1.28.2)集群(非高可用版)

KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09; KubeadmContainerd部署k8s高可用版本 文章目录 KubeadmContainerd部署k8s(v1.28.2)集群&#xff08;非高可用版&#xff09;一.环境准备1.服务器准备2.环境配置3.设置主机名4.修改国内镜像源地址5.配…

HarmonyOS进程通信及原理

大家好&#xff0c;我是学徒小z&#xff0c;最近在研究鸿蒙中一些偏底层原理的内容&#xff0c;今天分析进程通信给大家&#xff0c;请用餐&#x1f60a; 文章目录 进程间通信1. 通过公共事件&#xff08;ohos.commonEventManager&#xff09;公共事件的底层原理 2. IPC Kit能…

移动通信发展史

概念解释 第一代网络通信 1G 第二代网络通信 2G 第三代网络通信 3G 第四代网络通信 4G 4g网络有很高的速率和很低的延时——高到500M的上传和1G的下载 日常中的4G只是用到了4G技术 运营商 移动-从民企到国企 联通-南方教育口有人 电信 铁通&#xff1a;成立于 2000 年…

CAS单点登录(第7版)10.多因素身份验证

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 多因素身份验证 概述 多因素身份验证 &#xff08;MFA&#xff09; 多因素身份验证&#xff08;Multifactor Authentication MFA&#xff09;是一种安全机制&#xff0c;要求用户提供两种…

#渗透测试#批量漏洞挖掘#Fastjson 1.2.24 远程命令执行漏洞

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 目录 Fastjson 1.2.24 远程命令执行漏洞综合分析…

【设计模式】 代理模式(静态代理、动态代理{JDK动态代理、JDK动态代理与CGLIB动态代理的区别})

代理模式 代理模式是一种结构型设计模式&#xff0c;它提供了一种替代访问的方法&#xff0c;即通过代理对象来间接访问目标对象。代理模式可以在不改变原始类代码的情况下&#xff0c;增加额外的功能&#xff0c;如权限控制、日志记录等。 静态代理 静态代理是指创建的或特…

动态规划

简介 动态规划最核心两步&#xff1a; 状态表示&#xff1a;dp[i]代表什么状态转移方程&#xff1a;如何利用已有的dp求解dp[i] 只要这两步搞对了&#xff0c; 就完成了动态规划的%95 剩下的就是细节问题&#xff1a; dp初始化顺序&#xff08;有时是倒序&#xff09;处理边…