数据可视化(爬取豆瓣网站)

目录

1 绪论

1.1 研究背景

1.2 研究目的和意义

1.3 研究内容和方法

2. 需求分析

2.1 系统功能描述

2.2 数据采集与预处理

2.2.1 数据采集

2.2.2 数据清洗

2.2.3 数据处理

2.3 功能需求

2.3.1 登录模块

2.3.2 数据展示模块

3 系统设计

3.1 系统功能结构设计

3.2 系统技术架构设计

4 数据库设计

4.1概念结构设计

4.2 逻辑结构设计

4.3 数据库物理结构

4.3.1物理存储

4.3.2 物理优化

5. 详细设计

5.1 系统总体功能流程图

5.2数据采集与预处理

5.2.1 关键类说明

5.2.2 核心代码

5.3前端模块

5.3.1用户登录模块

6创新设计/代码优化

6.1 创新设计/代码优化描述及意义

6.2创新设计/代码优化效果图或效果描述

6.3创新设计/代码优化中的核心代码说明

7总结与展望

1 绪论

1.1 研究背景

在当今数字化时代,信息的获取和管理变得越来越重要。豆瓣作为一个知名的社交平台,拥有大量的用户和丰富的信息资源。然而,这些信息往往分散在不同的页面和帖子中,难以进行有效的整合和分析。因此,选择爬取豆瓣热销数据作为课程设计题目,具有以下原因和背景:

实际需求:许多企业和组织需要了解市场动态和用户需求,以便制定更好的营销策略和产品规划。通过爬取豆瓣热销数据,可以获取用户对不同产品和话题的关注度和评价,为企业和组织提供有价值的参考。

学术研究:豆瓣数据也可以用于学术研究,例如社会网络分析、文本挖掘和情感分析等。通过对豆瓣数据的研究,可以深入了解用户行为和社会现象,为相关领域的研究提供数据支持和理论依据。

技术挑战:爬取豆瓣数据需要解决一些技术挑战,例如反爬虫机制、数据清洗和存储等。通过解决这些技术挑战,可以提高学生的编程能力和解决问题的能力。

1.2 研究目的和意义

本课程设计的目的是通过爬取豆瓣热销数据,并将其存储到 MySQL 数据库中,然后通过网页展示数据的柱状图,实现对豆瓣热销数据的可视化分析。具体来说,本课程设计的目的包括以下几个方面:

提高数据获取和处理能力:通过爬取豆瓣数据,学生可以学习如何使用 Python 编写爬虫程序,获取网页上的数据,并进行数据清洗和处理。

掌握数据库操作技能:通过将爬取到的数据存储到 MySQL 数据库中,学生可以学习如何使用 SQL 语句进行数据库操作,包括创建表、插入数据、查询数据和更新数据等。

实现数据可视化:通过使用 Flask 框架和 Echarts 库,学生可以学习如何创建 Web 应用程序,将数据从数据库中读取出来,并以柱状图的形式展示给用户。

培养团队合作和沟通能力:本课程设计需要学生组成团队,共同完成爬虫程序的编写、数据库的设计和 Web 应用程序的开发。通过团队合作,学生可以培养团队合作和沟通能力,提高工作效率和质量。

本课程设计的意义在于,通过对豆瓣热销数据的可视化分析,可以帮助用户更好地了解市场动态和用户需求,为企业和组织提供有价值的参考。同时,本课程设计也可以为学生提供一个实践机会,让学生将所学的知识应用到实际项目中,提高学生的综合素质和竞争力。

1.3 研究内容和方法

本课程设计的主要研究内容包括以下几个方面:

  1. 豆瓣数据的爬取:使用 Python 编写爬虫程序,从豆瓣网站上爬取热销数据,包括帖子的标题、链接、点赞数、回复数、发布时间等。
  2. 数据的清洗和处理:对爬取到的数据进行清洗和处理,去除重复数据和无效数据,并将数据转换为适合存储和分析的格式。
  3. 数据库的设计和实现:设计一个 MySQL 数据库,用于存储爬取到的数据,并使用 SQL 语句进行数据库操作。
  4. Web 应用程序的开发:使用 Flask 框架和 Echarts 库,开发一个 Web 应用程序,将数据从数据库中读取出来,并以柱状图的形式展示给用户。

本课程设计采用的研究方法和技术路线如下:

  1. 文献研究法:查阅相关的文献资料,了解豆瓣数据的特点和爬取方法,以及数据可视化的技术和工具。
  2. 实验研究法:通过编写爬虫程序和开发 Web 应用程序,进行实验研究,验证研究方法和技术路线的可行性和有效性。
  3. 比较研究法:对不同的爬虫程序和数据可视化工具进行比较研究,选择最适合本课程设计的方法和工具。

在研究过程中,我们将注重数据的安全和隐私保护,遵守相关的法律法规和道德规范。

2. 需求分析

2.1 系统功能描述 

图2-1 系统总体用例图

系统主要包括以下功能:

数据爬取:从豆瓣小组页面获取热销数据,包括帖子的标题、链接、点赞数、回复数、图片、附加文本、小组来源和发布时间等信息。

数据存储:将爬取到的数据存储到 MySQL 数据库中。

数据处理:对存储在数据库中的数据进行清洗、转换和特征工程等处理,以便后续分析和展示。

数据展示:通过网页展示数据的柱状图,以便用户直观地了解数据的分布情况。

2.2 数据采集与预处理

2.2.1 数据采集

本系统使用 Python 编写爬虫程序,从豆瓣小组页面获取热销数据。爬虫程序使用requests库发送 HTTP 请求获取页面内容,使用BeautifulSoup库解析 HTML 页面,提取所需信息。

在数据采集过程中,需要注意以下几点:

  1. 遵守豆瓣的使用规则:在爬取数据时,需要遵守豆瓣的使用规则,不得对豆瓣服务器造成过大的负担。
  2. 设置合理的请求间隔:为了避免被豆瓣服务器封禁,需要设置合理的请求间隔,不得过于频繁地发送请求。
  3. 处理异常情况:在爬取数据时,可能会遇到各种异常情况,如网络连接异常、页面解析异常等。需要对这些异常情况进行处理,确保程序的稳定性和可靠性。

2.2.2 数据清洗

对爬取到的数据进行清洗,去除重复记录、处理缺失值和异常值等。数据清洗的主要步骤如下:

  1. 去除重复记录:对爬取到的数据进行去重处理,确保每条记录都是唯一的。
  2. 处理缺失值:对数据中的缺失值进行处理,可以使用默认值、平均值、中位数等方法进行填充。
  3. 处理异常值:对数据中的异常值进行处理,可以使用删除、替换等方法进行处理。

2.2.3 数据处理

  1. 对清洗后的数据进行处理,包括数据转换、特征工程和数据集的构建等。数据处理的主要步骤如下:
  2. 数据转换:对数据进行转换,将数据转换为适合分析和展示的格式。
  3. 特征工程:对数据进行特征工程,提取有用的特征,以便后续分析和建模。
  4. 数据集的构建:将处理后的数据构建为数据集,以便后续分析和建模。

2.3 功能需求

2.3.1 登录模块

表2_1 M01 用户登录模块

功能描述

用户输入用户名和密码,点击登录按钮进行身份验证

适用角色

普通用户

从何处开始

用户访问系统登录页面

以何结束

用户登录成功进入系统首页或登录失败显示错误信息

输入

用户名、密码

过程描述

1. 用户访问系统登录页面。

2. 用户输入用户名和密码。

3. 系统验证用户名是否存在于数据库中。

4. 如果用户名不存在,系统提示“用户名不存在”。

5. 如果用户名存在,系统验证密码是否与数据库中存储的密码匹配。

6. 如果密码不匹配,系统提示“密码错误”。

7. 如果密码匹配,系统将用户重定向到系统首页。

输出

登录成功或失败的提示信息

约束条件

用户名和密码不能为空

相关业务规则

用户名和密码必须匹配系统中存储的用户信息

异常描述

1. 网络连接异常:系统将显示网络连接异常的提示信息。

2. 用户名或密码错误:系统将显示用户名或密码错误的提示信息。

2.3.2 数据展示模块

表2_2M02 数据展示模块

功能描述

以柱状图形式展示爬取到的数据

适用角色

普通用户

从何处开始

用户登录系统后,点击数据展示模块

以何结束

系统展示柱状图

输入

过程描述

1. 用户登录系统后,点击数据展示模块。

2. 系统从数据库中读取数据,并进行处理和转换。

3. 系统使用 Echarts 库生成柱状图,并将其展示在页面上。

4. 用户可以通过交互操作,如缩放、拖动等,查看不同时间段的数据分布情况。

输出

以柱状图形式展示的数据

约束条件

系统必须成功连接到数据库,并读取到数据。

数据必须经过处理和转换,以符合 Echarts 库的要求。

页面必须能够正常加载 Echarts 库,并展示柱状图。

相关业务规则

1. 数据展示的时间范围可以根据用户的需求进行调整。

2. 柱状图的颜色、样式等可以根据用户的喜好进行定制。

异常描述

1. 网络连接异常:系统将显示网络连接异常的提示信息,并尝试重新连接数据库。

2. 数据库读取失败:系统将显示数据库读取失败的提示信息,并提示用户检查数据库连接是否正常。

3. Echarts 库加载失败:系统将显示 Echarts 库加载失败的提示信息,并提示用户检查页面是否正常加载了 Echarts 库。

2.3.3 数据爬取模块

表2_3M03 数据爬取模块

功能描述

从豆瓣小组页面获取热销数据

适用角色

管理员

从何处开始

用户点击数据爬取按钮

以何结束

系统将爬取到的数据存储到 MySQL 数据库中

输入

过程描述

1. 用户点击数据爬取按钮。

2. 系统使用 Python 编写的爬虫程序,发送 HTTP 请求获取豆瓣小组页面内容。

3. 爬虫程序使用 BeautifulSoup 库解析 HTML 页面,提取所需信息。

4. 系统将爬取到的数据进行清洗和处理,去除重复记录、处理缺失值和异常值等。

5. 系统将处理后的数据存储到 MySQL 数据库中。

输出

爬取到的数据存储到 MySQL 数据库中

约束条件

系统必须成功连接到豆瓣网站,并获取到页面内容。

爬虫程序必须能够正确解析 HTML 页面,提取所需信息。

系统必须能够处理异常情况,如网络连接异常、页面解析异常等。

相关业务规则

1. 爬虫程序的运行时间和频率可以根据用户的需求进行调整。

2. 数据清洗和处理的规则可以根据用户的需求进行定制。

异常描述

1. 网络连接异常:系统将显示网络连接异常的提示信息,并尝试重新连接豆瓣网站。

2. 页面解析异常:系统将显示页面解析异常的提示信息,并提示用户检查爬虫程序是否正确。

3. 数据存储失败:系统将显示数据存储失败的提示信息,并提示用户检查数据库连接是否正常。

2.3.1 数据处理模块

表2_4M04 数据处理模块

功能描述

对存储在数据库中的数据进行清洗、转换和特征工程等处理

适用角色

管理员

从何处开始

用户点击数据处理按钮

以何结束

系统将处理后的数据存储到数据库中

输入

过程描述

1. 用户点击数据处理按钮。

2. 系统从数据库中读取数据,并进行清洗和处理。

3. 系统对数据进行转换,将数据转换为适合分析和展示的格式。

4. 系统对数据进行特征工程,提取有用的特征,以便后续分析和建模。

5. 系统将处理后的数据存储到数据库中。

输出

处理后的数据存储到数据库中

约束条件

系统必须成功连接到数据库,并读取到数据。

数据清洗和处理的规则必须符合业务需求。

数据转换和特征工程的方法必须科学合理。

相关业务规则

1. 数据处理的时间范围可以根据用户的需求进行调整。

2. 数据清洗和处理的规则可以根据用户的需求进行定制。

异常描述

1. 数据库读取失败:系统将显示数据库读取失败的提示信息,并提示用户检查数据库连接是否正常。

2. 数据处理失败:系统将显示数据处理失败的提示信息,并提示用户检查数据处理规则是否正确。


3 系统设计

3.1 系统功能结构设计

  1. 登录模块:实现用户的登录验证。
  2. 数据采集模块:从豆瓣小组页面获取热销数据,包括基本信息和详细信息。
  3. 数据存储模块:将采集到的数据存储到 MySQL 数据库中。
  4. 数据处理模块:对存储在数据库中的数据进行处理和分析。
  5. 数据展示模块:以可视化的方式展示数据,例如柱状图。

3.2 系统技术架构设计 

系统采用了 Flask 框架作为后端,前端使用 HTML、CSS 和 JavaScript 进行开发。数据库使用 MySQL 进行存储。系统的技术架构如图 3-2 所示。

图 3-2 系统技术流程图

  1. Flask 框架:用于构建 Web 应用程序,处理用户请求和响应。
  2. pymysql:用于连接 MySQL 数据库,执行 SQL 语句。
  3. BeautifulSoup:用于解析 HTML 页面,提取所需信息。
  4. requests:用于发送 HTTP 请求,获取网页内容。
  5. concurrent.futures:用于并行处理多个请求,提高数据采集效率。

4 数据库设计

4.1概念结构设计

实体和关系:

用户(User):存储用户的基本信息,如用户名、密码等。

小组详情(GroupDetails):存储从豆瓣小组页面采集到的详细信息,如链接、回复数、标题、内容、发布时间、点赞数等。

图4-1 全局系统E-R图

4.2 逻辑结构设计

(1)E-R 图转换为关系模型:

用户(User):用户表(user_id, username, password),其中 user_id 为主键,username 和 password 为用户的基本信息。

小组详情(GroupDetails):小组详情表(group_id, link, reply_count, title, content, post_time, like_count),其中 group_id 为主键,link 为小组的链接,reply_count 为回复数,title 为标题,content 为内容,post_time 为发布时间,like_count 为点赞数。

(2)逻辑模型优化:

为了提高查询效率,可以在小组详情表的 link 字段上创建索引。

对于数据量较大的小组详情表,可以考虑进行分表或分区,以提高查询和存储效率。

(3)用户视图设计:

根据不同用户的需求,可以设计不同的用户视图。如柱状图扇形图、折线图、饼图等。

4.3 数据库物理结构

4.3.1物理存储

数据库的物理存储包括表空间、数据文件和索引文件等。根据系统的需求和数据量,设计了合理的物理存储结构,以提高数据库的性能和存储效率。

表空间:创建了一个名为“douban_data”的表空间,用于存储数据库的所有表和索引。

数据文件:在表空间“douban_data”中创建了一个数据文件“douban_data.dat”,用于存储数据库的数据。

索引文件:为了提高数据库的查询性能,为“group_details”表的“link”字段创建了索引。索引文件的名称与表名相同,后缀为“.idx”。

4.3.2 物理优化

为了提高数据库的性能,进行了以下物理优化措施:

  1. 索引优化:根据查询需求,合理创建索引,提高查询效率。例如,为“group_details”表的“link”字段创建索引,可以加快根据链接查询小组详情的速度。
  2. 表分区:对于数据量较大的表,可以考虑进行表分区,以提高查询效率。例如,可以根据发布时间对“group_details”表进行分区,将不同时间段的数据存储在不同的分区中,从而提高查询特定时间段数据的效率。
  3. 数据库缓存:使用数据库缓存,减少数据库的磁盘 I/O 操作,提高数据库的性能。例如,可以使用 MySQL 的查询缓存功能,将查询结果缓存起来,下次查询相同的内容时直接从缓存中获取,而不需要再次执行查询语句。
  4. 数据库备份和恢复:定期进行数据库备份,以防止数据丢失。同时,制定了数据库恢复策略,以保证在数据库出现故障时能够快速恢复数据。


5. 详细设计

5.1 系统总体功能流程图

本系统主要包括用户登录、数据采集、数据存储、数据处理和数据展示等功能。用户登录后,可以进行数据采集和数据处理操作,系统将采集到的数据存储到数据库中,并进行处理和分析,最后以可视化的方式展示数据。

5.2数据采集与预处理

5.2.1 关键类说明

Spider:数据采集类,负责从豆瓣小组页面获取热销数据。

DataProcessor:数据处理类,负责对采集到的数据进行清洗、转换和特征工程等处理。

DatabaseManager:数据库管理类,负责将处理后的数据存储到数据库中,并进行数据库操作。

5.3前端模块 

5.3.1用户登录模块

(1)时序图

图5_2 时序图

(2)核心代码

@app.route('/', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        session['logged_in'] = True

        return redirect(url_for('index'))

    return render_template('login.html')

(3)用户登录界面界面

图5_3用户登录界面

6创新设计/代码优化

6.1 创新设计/代码优化描述及意义

  1. 前端界面改进:在前端界面设计中,我们采用了现代化的 HTML 和 CSS 技术,使界面更加美观、简洁和易用。同时,我们还使用了 JavaScript 和 Echarts 库来实现数据的可视化展示,使用户能够更加直观地了解数据的分布和趋势。
  2. 代码结构优化:对代码结构进行了优化,将相关的功能模块进行了封装,提高了代码的可读性和可维护性。同时,我们还使用了异常处理机制,对可能出现的异常情况进行了处理,提高了程序的稳定性和可靠性。
  3. 数据库连接优化:优化了数据库连接的方式,使用了连接池来管理数据库连接,提高了数据库连接的效率和资源利用率。同时,我们还对数据库查询语句进行了优化,减少了不必要的查询和数据传输,提高了程序的性能。
  4. 数据缓存优化:引入了数据缓存机制,将经常使用的数据缓存到内存中,减少了对数据库的查询次数,提高了程序的响应速度。同时,我们还使用了定时任务来更新缓存数据,保证了数据的及时性和准确性。

6.2创新设计/代码优化效果图或效果描述

登录页面:

图6-1 登录界面

数据展示页面:

图6-2柱状图

效果描述:通过前端界面改进,用户可以更加方便地进行登录和数据查看操作。数据可视化展示使用户能够更加直观地了解数据的分布和趋势,提高了数据的可读性和可理解性。

代码结构优化效果:通过代码结构优化,提高了代码的可读性和可维护性,减少了代码的冗余和重复。同时,异常处理机制的使用提高了程序的稳定性和可靠性,减少了程序崩溃的可能性。

数据库连接优化效果:通过数据库连接优化,提高了数据库连接的效率和资源利用率,减少了数据库连接的时间和资源消耗。同时,数据库查询语句的优化提高了程序的性能,减少了数据的传输和处理时间。

数据缓存优化效果:通过数据缓存优化,减少了对数据库的查询次数,提高了程序的响应速度。同时,定时任务的使用保证了数据的及时性和准确性,避免了数据的过期和错误。

6.3创新设计/代码优化中的核心代码说明

  1. 前端界面核心代码:

<body>

    <div class="login-container">

        <h2>登录</h2>

        <form method="post" action="/">

            <label for="username">用户名:</label>

            <input type="text" id="username" name="username" required><br>

            <label for="password">密码:</label>

            <input type="password" id="password" name="password" required><br>

            <input type="submit" value="登录">

        </form>

    </div>

</body>

<body style="height: 100%; margin: 0">

    <div id="main" style="height: 100%"></div>

    <script type="text/javascript">

        alert("登录成功")

        var myChart = echarts.init(document.getElementById('main'));

        var option = {

            title: {

                text: '豆瓣小组数据统计'

            },

            tooltip: {

                trigger: 'axis'

            },

            legend: {

                data: ['回复数', '点赞数']},

            xAxis: {

                type: 'category',

                data: {{ contents|tojson|safe }}},

            yAxis: {

                type: 'value'

            },

            series: [

                {

                    name: '回复数',

                    type: 'bar',

                    data: {{ replies|tojson|safe }}

                },

                {

                    name: '点赞数',

                    type: 'bar',

                    data: {{ likes|tojson|safe }}

                }

            ]

        };

        myChart.setOption(option);

    </script>

</body>

  1. 代码优化核心代码:

            # 提取图片URL

        img_element = item.find('img')

        if img_element:

            image_url = img_element['src']

        else:

            print("没有找到图片元素")  # 调试输出

        # 提取附加文本

        block_element = item.find('div', class_='block')

        if block_element:

            additional_text = block_element.text.strip()

        else:

            print("没有找到附加文本块")  # 调试输出

        

  1. 数据库连接优化核心代码:

# MySQL数据库连接配置

db_config = {

    'user': 'root',

    'password': 'root',

    'host': '127.0.0.1',

    'database': 'douban_data',

    'charset': 'utf8mb4'}


7总结与展望

本次课程设计旨在实现对豆瓣热销数据的爬取、存储、处理与可视化展示。通过该项目的实施,我们取得了以下成果:

在技术方面,熟练掌握了 Python 爬虫技术、数据库设计与管理以及 Web 应用开发等关键技能。通过使用 Flask 框架和 Echarts 库,成功构建了一个功能完备的数据可视化系统,实现了数据的高效展示与分析。

在实践过程中,我们也遇到了一些挑战和问题。例如,在数据采集过程中,需要应对豆瓣网站的反爬虫机制,确保数据的准确性和完整性;在数据库设计方面,需要考虑数据的存储结构和索引优化,以提高数据的查询效率;在系统性能优化方面,需要不断调整和改进代码,以提升系统的响应速度和稳定性。

针对上述问题,我们采取了一系列措施进行解决。通过合理设置请求间隔、使用代理 IP 等方式,成功绕过了豆瓣网站的反爬虫机制;通过优化数据库设计、建立合适的索引等方式,提高了数据的查询效率;通过使用缓存技术、优化算法等方式,提升了系统的响应速度和稳定性。

尽管本系统已经实现了基本的功能,但仍存在一些不足之处,需要进一步改进和完善。未来的工作可以从以下几个方面展开:

在数据采集方面,可以进一步扩展数据源,获取更多类型的数据,以丰富系统的功能和应用场景。同时,可以探索使用更加先进的爬虫技术和工具,提高数据采集的效率和质量。

在数据处理方面,可以进一步深入研究数据挖掘和分析技术,挖掘数据中的潜在价值和规律,为用户提供更加深入和有价值的信息。

在系统性能优化方面,可以继续优化代码结构和算法,提高系统的执行效率和响应速度。同时,可以考虑使用分布式架构和云计算技术,提高系统的可扩展性和容错性。

在用户体验方面,可以进一步改进用户界面设计,提高系统的易用性和交互性。同时,可以增加用户反馈机制,及时了解用户的需求和意见,不断改进和完善系统。

总之,通过该项目的实施,我们不仅提高了自己的技术水平和实践能力,还培养了团队合作精神和解决问题的能力。未来,我们将继续努力,不断完善和优化系统,为用户提供更加优质和便捷的服务。

完整源码;

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

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

相关文章

Pycharm中重命名项目之后切换虚拟环境

Pycharm中重命名项目之后切换虚拟环境 场景 在Pycharm里面Rename Project/Directory之后&#xff0c;通常需要切换虚拟环境。 步骤 # 退出当前虚拟环境 deactivate # 删除旧的虚拟环境 .venv # 新建新的虚拟环境 python -m venv .venv # 切换到新的工程目录 cd E:\Bigdata\…

排序算法——插入排序

一、插入排序概念 直接插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;它的工作原理类似于人们手动排序卡片的方式。该算法通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插…

二叉树相关的算法题

二叉树相关的算法题 单值二叉树 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时&#xff0c;才返回 true&#xff1b;否则返回 false。 示例 1&#xff1a; 输入&#xff1a;[1,1,1,1,1,null,1] 输出&#xff1a;t…

初阶数据结构5 排序

排序 1. 排序概念及运用1.1 概念1.2运用1.3 常见排序算法 2. 实现常⻅排序算法2.1 插⼊排序2.1.1 直接插⼊排序2.1.2 希尔排序2.1.2.1 希尔排序的时间复杂度计算 2.2 选择排序2.2.1 直接选择排序2.2.2 堆排序 2.3 交换排序2.3.1冒泡排序2.3.2 快速排序2.3.2.1 hoare版本2.3.2.2…

【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

STM32-IIC协议详解

一、IIC简介 IC&#xff08;Inter-Integrated Circuit&#xff09;协议由飞利浦公司于1980年代开发&#xff0c;是一种用于集成电路间短距离通信的串行协议。它设计用于连接低速外围设备&#xff0c;特别适合于需要简单数据交换的场景。IC协议使用两根信号线&#xff1a;SCL&am…

Python数值计算(23)——modified akima插值

1. 数学原理 在前面的Akima插值中&#xff0c;计算斜率使用如下公式&#xff1a; 如果记&#xff1a; 在出现分母分子同时为零的情况时&#xff0c;会出现NaN的计算结果&#xff0c;Akima他自己也意识到这种问题&#xff0c;因此&#xff0c;在原来的算法上做了修订&#xff0…

Python | Leetcode Python题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; class Solution:def minPatches(self, nums: List[int], n: int) -> int:patches, x 0, 1length, index len(nums), 0while x < n:if index < length and nums[index] < x:x nums[index]index 1else:x << 1patches …

【线性代数】第2章 矩阵及其运算,矩阵的定义,矩阵的加法,矩阵的乘法(同济大学)

目录 1 矩阵 一、矩阵概念的引入 二、矩阵的定义 三、特殊的矩阵 同型矩阵与矩阵相等的概念 四、矩阵与线性变换 例 例 例 2 矩阵的运算 例 一、矩阵的加法 二、数与矩阵相乘 例&#xff08;续&#xff09; 三、矩阵与矩阵相乘 1 矩阵 一、矩阵概…

NVIDIA Triton系列11-模型类别与调度器-1

NVIDIA Triton系列11-模型类别与调度器-1 B站&#xff1a;肆十二-的个人空间-肆十二-个人主页-哔哩哔哩视频 (bilibili.com) 博客&#xff1a;肆十二-CSDN博客 问答&#xff1a;(10 封私信 / 72 条消息) 肆十二 - 知乎 (zhihu.com) 在 Triton 推理服务器的使用中&#xff0c;模…

数据科学 - 数据可视化(持续更新)

1. 前言​​​​​​​ 数据可视化能够将复杂的数据集转化为易于理解的图形、图表或图像。这种直观的表现形式使得人们能够更快地理解数据的分布、趋势、异常值以及数据之间的关系&#xff0c;从而更深入地洞察数据背后的信息。 数据可视化在数据分析和决策制定过程中具有不可…

C++的7种设计模式原则

一、设计模式前言 设计模式&#xff08;Design Patterns&#xff09;的“模式”指的是一种在软件设计中经过验证的、解决特定问题的方案。它们不是具体的代码&#xff0c;而是解决常见设计问题的抽象方案或模板。设计模式提供了一种标准的方式来组织代码&#xff0c;以提高代码…

为JetBrains IDE设置自定义TODO筛选器(筛选指定的关键字)和Live Templates

为JetBrains IDE设置自定义TODO筛选器&#xff08;筛选指定的关键字&#xff09;和Live Templates 以下内容以搜索关键字 // TODO Zzz 为例&#xff0c;不区分大小写&#xff0c;可以将模板中的 Zzz 换成其他内容。 设置自定义TODO筛选器 在IDE设置中找到TODO选项&#xff0…

AWS注册是否必须使用美元银行卡

亚马逊网络服务(AWS)作为全球领先的云计算平台,吸引了众多企业和个人用户。然而,不少人在注册AWS账户时会产生疑问:是否必须使用美元银行卡?实际上,这种说法并不准确。虽然AWS的主要结算货币是美元,但用户在注册和使用过程中有多种支付方式可供选择。我们结合九河云的分析来告…

程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇

正文&#xff1a; 在这个充满变数的时代&#xff0c;作为一名前端开发者&#xff0c;我经历了行业的起伏&#xff0c;见证了裁员危机和中年失业危机的残酷。在这样的背景下&#xff0c;我开始了利用AI绘画作为副业的探索&#xff0c;不仅为了寻求经济上的稳定&#xff0c;更是为…

DLMS/COSEM中的信息安全:安全密钥(下)

2.5组件B终端实体证书类型要由DLMS/COSEM服务器支持 每个DLMS/COSEM服务器应使用X.509 v3格式&#xff0c;并包含以下任一项&#xff1a; ——具有P-256或P-384 ECDSA功能的签名密钥&#xff1b;或 ——具有P-256或P-384 ECDSA功能的密钥协商密钥。 每张证书均应使用ECDSA进行签…

lvs(linux virtual server)实例

一.lvs概述 1.1什么是lvs LVS&#xff08;Linux Virtual Server&#xff09;是一个基于Linux操作系统的虚拟服务器技术&#xff0c;用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上&#xff0c;从而提高整体服务的处理能力和可靠性。LVS主要有两个组…

蓝桥杯 双周赛 第16场 小白赛 题目复盘 (2024年8月10日)

3. 织女的考验 下面的代码看似很正确&#xff0c;但忽略了一个细节&#xff0c;下面判断是否有字母数量不同时&#xff0c;用abs(cnt[i]) 1判断&#xff0c;这里忽略了abs(cnt[i]) 等于其他值的情况(YES和NO都存在) #include <iostream> #include <cstring> usi…

java: 程序包org.springframework.boot.autoconfigure不存在

通过 mvn -U idea:idea 命令重新加载maven包&#xff0c;具体操作是这样的&#xff1a; 打开cmd窗口cd 到 工程根目录&#xff0c;比如我的工程是&#xff1a;D:\IdeaProjects\demo&#xff0c; 执行 mvn -U idea:idea 命令&#xff0c;完了以后重新运行项目就正常了&#xff…

《网络编程实战系列》(17)网络桥接模式

文章目录 **桥接模式的基本原理****桥接模式的应用场景****桥接模式的优缺点****桥接模式的实现****总结**桥接模式(Bridge Mode)是一种网络配置模式,用于将多个网络接口或网络段连接在一起,使其在逻辑上形成一个单一的网络。这种模式常用于在不同网络之间传递数据包,并使…