【Python爬虫(27)】探索数据可视化的魔法世界
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。
目录
- 一、数据可视化的魔法魅力
- 二、常用数据可视化工具大盘点
- 2.1 Matplotlib:Python 绘图基石
- 2.2 Seaborn:基于 Matplotlib 的优雅升华
- 三、Matplotlib 实战:绘制简单图表
- 3.1 折线图:数据趋势的直观呈现
- 3.2 柱状图:数据对比的有力工具
- 3.3 散点图:数据关系的探索利器
- 四、爬虫数据可视化实战
- 4.1 爬取数据:获取分析素材
- 4.2 数据预处理:清洗和整理数据
- 4.3 可视化展示:让数据说话
- 五、总结与展望
一、数据可视化的魔法魅力
在数据的广袤宇宙中,数据可视化就像是一把神奇的钥匙,能够打开隐藏在数据背后的奥秘之门。它将枯燥、抽象的数据转化为直观、生动的图形和图表,让我们能够一眼洞察数据中的规律、趋势和关系。
数据可视化在当今的数字化时代具有举足轻重的地位。在商业分析领域,企业通过数据可视化展示销售数据、市场趋势等,帮助决策者迅速做出明智的决策。比如,通过折线图展示过去几年的销售额变化,能够清晰地看到业务的增长或衰退趋势,从而制定相应的营销策略。在科学研究中,数据可视化助力科研人员理解复杂的实验数据,发现新的科学规律。例如,在基因研究中,通过可视化技术展示基因序列和表达水平,有助于揭示基因之间的相互作用和疾病的发病机制。
数据可视化的应用场景可谓无处不在。在金融领域,它用于风险评估、投资分析,帮助投资者了解市场动态和资产配置情况。在医疗保健领域,医生可以通过可视化患者的生理数据和病历信息,更准确地诊断疾病和制定治疗方案。在教育领域,数据可视化可以帮助教师分析学生的学习成绩和行为数据,从而提供个性化的教育支持。
二、常用数据可视化工具大盘点
在数据可视化的工具百宝箱中,有许多强大而实用的工具可供我们选择。下面,让我们来深入了解一下其中两款备受欢迎的工具:Matplotlib 和 Seaborn。
2.1 Matplotlib:Python 绘图基石
Matplotlib 是 Python 中最基础且功能强大的绘图库,堪称 Python 绘图领域的基石。它就像是一位全能的艺术家,为开发者提供了丰富的图表类型,包括折线图、柱状图、散点图、饼图等,几乎可以绘制任何你能想象到的图形 。其设计极为灵活,支持高度定制,让你能够根据自己的需求随心所欲地调整图表的每一个细节。
先来看一个使用 Matplotlib 绘制折线图的简单示例:
import matplotlib.pyplot as plt# 数据准备
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]# 创建图形
plt.plot(x, y, label="y = x^2", color='blue')# 添加标题与标签
plt.title("Matplotlib Basic Plot")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")# 显示图例
plt.legend()# 显示图形
plt.show()
在这个示例中,我们首先导入了 Matplotlib 的 pyplot 模块并别名为 plt。然后准备了 x 和 y 轴的数据,接着使用plt.plot()函数绘制折线图,通过label参数为折线添加标签,color参数设置折线颜色为蓝色。之后,使用plt.title()、plt.xlabel()和plt.ylabel()分别添加标题和坐标轴标签,最后通过plt.legend()显示图例,plt.show()展示图形。
Matplotlib 的强大之处还在于它的高度可定制性。我们可以轻松地修改图表的字体、颜色、线条样式等。例如,将上述代码中的图形外观进行自定义:
plt.plot(x, y, color='green', linestyle='--', linewidth=2)
plt.title("Customized Plot", fontsize=14, color='red')
plt.xlabel("X Axis", fontsize=12)
plt.ylabel("Y Axis", fontsize=12)
plt.show()
在这段代码中,我们将折线颜色改为绿色,线条样式改为虚线,线宽设置为 2。标题的字体大小改为 14,颜色为红色,坐标轴标签的字体大小改为 12 。通过这些简单的设置,我们就可以轻松地将一个普通的折线图变得独具特色。
2.2 Seaborn:基于 Matplotlib 的优雅升华
Seaborn 是建立在 Matplotlib 基础之上的高级可视化库,它就像是为 Matplotlib 这位艺术家穿上了一件华丽的外衣,使数据可视化更加简洁、易用。Seaborn 默认提供了更美观的图形样式,让你的图表无需过多的手动调整就能呈现出专业的外观。它还简化了常见统计图表的绘制,特别适用于统计图表的生成,如箱线图、热图、回归图等。
与 Matplotlib 相比,Seaborn 具有以下明显优势:
- 简化绘图流程:Seaborn 封装了许多常见的统计图表,使得创建复杂图表的过程变得更加简单。例如,绘制一个带有分类和颜色区分的散点图,使用 Seaborn 只需几行代码即可完成。
- 内置主题和调色板:Seaborn 自带多种美观的主题和调色板,能够生成具有专业风格的图表。你可以轻松地切换不同的主题和调色板,以满足不同的需求和审美。
- 自动处理统计图表:Seaborn 可以自动完成很多与统计图表相关的任务,例如数据分组、回归拟合、计算置信区间等。这大大减轻了开发者的工作量,让你能够更专注于数据的分析和展示。
- 与 Pandas 深度集成:Seaborn 能够直接处理 Pandas 的 DataFrame 对象,这使得数据的加载和可视化更加便捷。你可以直接将 DataFrame 中的数据用于绘制各种图表,无需进行复杂的数据转换。
接下来,通过实例来感受一下 Seaborn 在绘制复杂图表时的便利性。首先,使用 Seaborn 绘制一个散点图,并通过颜色和样式区分不同的类别:
import seaborn as sns
import matplotlib.pyplot as plt# 使用Seaborn内置数据集
tips = sns.load_dataset("tips")# 绘制散点图
sns.scatterplot(x="total_bill", y="tip", data=tips, hue="time", style="sex")# 添加标题
plt.title("Seaborn Scatter Plot")
plt.show()
在这个例子中,我们首先导入了 Seaborn 并别名为 sns,同时导入了 Matplotlib 的 pyplot 模块。然后使用 Seaborn 的load_dataset()函数加载内置的tips数据集,该数据集包含了餐厅账单和小费的相关信息。接着,使用sns.scatterplot()函数绘制散点图,x和y参数分别指定了横轴和纵轴的数据,data参数指定了使用的数据集,hue参数通过time变量对数据进行分类并使用不同颜色表示,style参数通过sex变量对数据进行分类并使用不同样式的点表示。最后添加标题并展示图形。
再来看一个绘制箱线图和热图的示例:
# 绘制箱线图
sns.boxplot(x="day", y="total_bill", data=tips)
plt.title("Boxplot using Seaborn")
plt.show()# 绘制热图
correlation = tips.corr()
sns.heatmap(correlation, annot=True, cmap='coolwarm')
plt.title("Correlation Heatmap")
plt.show()
在绘制箱线图时,使用sns.boxplot()函数,x和y参数分别指定了分类变量和数值变量,data参数指定数据集。绘制热图时,首先计算数据集的相关性矩阵correlation,然后使用sns.heatmap()函数绘制热图,annot=True表示在热图上显示数值,cmap='coolwarm’指定了颜色映射方案 。通过这两个简单的示例,我们可以看到 Seaborn 在绘制统计图表时的简洁和高效。
三、Matplotlib 实战:绘制简单图表
3.1 折线图:数据趋势的直观呈现
折线图是一种非常直观的图表类型,它通过将数据点用线段连接起来,清晰地展示数据随时间或其他连续变量的变化趋势 。在 Matplotlib 中,使用plt.plot()函数可以轻松绘制折线图。
假设我们有一家电商公司过去 12 个月的销售额数据,如下所示:
import matplotlib.pyplot as plt# 月份
months = range(1, 13)
# 销售额(单位:万元)
sales = [120, 150, 130, 180, 200, 220, 250, 230, 210, 190, 170, 160]# 绘制折线图
plt.plot(months, sales, label='销售额', color='red', linestyle='-', linewidth=2, marker='o')# 添加标题和坐标轴标签
plt.title('电商公司过去12个月销售额变化趋势')
plt.xlabel('月份')
plt.ylabel('销售额(万元)')# 设置x轴刻度为月份
plt.xticks(months)# 显示图例
plt.legend()# 显示图形
plt.show()
在这段代码中,我们首先定义了月份和销售额的数据。然后使用plt.plot()函数绘制折线图,label参数为折线添加了标签,color参数设置折线颜色为红色,linestyle设置线条样式为实线,linewidth设置线宽为 2,marker设置标记点样式为圆圈 。接着,使用plt.title()、plt.xlabel()和plt.ylabel()分别添加标题和坐标轴标签。通过plt.xticks()设置 x 轴刻度为月份。最后,使用plt.legend()显示图例,plt.show()展示图形。运行上述代码,我们可以得到一个清晰展示销售额变化趋势的折线图,从图中可以直观地看出销售额在哪些月份增长,哪些月份下降,以及整体的变化趋势。
3.2 柱状图:数据对比的有力工具
柱状图是一种用于比较不同类别数据大小的图表,它以矩形柱的高度或长度来表示数据的值。在 Matplotlib 中,使用plt.bar()函数绘制垂直柱状图,使用plt.barh()函数绘制水平柱状图。
假设有一个水果销售统计数据,包含苹果、香蕉、橙子、草莓四种水果的销量,我们来绘制一个垂直柱状图进行比较:
import matplotlib.pyplot as plt# 水果种类
fruits = ['苹果', '香蕉', '橙子', '草莓']
# 销量(单位:千克)
sales_volume = [150, 120, 180, 100]# 绘制垂直柱状图
plt.bar(fruits, sales_volume, color=['red', 'yellow', 'orange', 'pink'])# 添加标题和坐标轴标签
plt.title('不同水果销量对比')
plt.xlabel('水果种类')
plt.ylabel('销量(千克)')# 显示图形
plt.show()
在这段代码中,我们定义了水果种类和销量的数据。使用plt.bar()函数绘制垂直柱状图,fruits作为 x 轴的类别,sales_volume作为柱状图的高度,通过color参数为每个柱状图设置了不同的颜色 。然后添加标题和坐标轴标签,最后展示图形。运行代码后,我们可以看到不同水果销量的直观对比,很容易看出哪种水果销量最高,哪种最低。
接下来,我们再绘制一个水平柱状图,假设有一个城市不同区域的房价数据:
# 区域
areas = ['A区', 'B区', 'C区', 'D区']
# 平均房价(单位:元/平方米)
house_prices = [50000, 45000, 60000, 48000]# 绘制水平柱状图
plt.barh(areas, house_prices, color=['blue', 'green', 'purple', 'brown'])# 添加标题和坐标轴标签
plt.title('不同区域房价对比')
plt.xlabel('平均房价(元/平方米)')
plt.ylabel('区域')# 显示图形
plt.show()
这里使用plt.barh()函数绘制水平柱状图,areas作为 y 轴的类别,house_prices作为柱状图的长度,同样通过color参数设置颜色 。添加标题和坐标轴标签后展示图形,通过水平柱状图可以清晰地比较不同区域房价的高低。
3.3 散点图:数据关系的探索利器
散点图主要用于展示两个变量之间的关系,通过观察散点的分布情况,可以发现数据之间是否存在某种相关性、聚类或异常值 。在 Matplotlib 中,使用plt.scatter()函数绘制散点图。
假设我们有一组学生的学习时间和考试成绩的数据,来看看学习时间和成绩之间的关系:
import matplotlib.pyplot as plt# 学习时间(小时)
study_hours = [2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
# 考试成绩(分)
scores = [60, 65, 70, 75, 80, 85, 90, 92, 95, 98]# 绘制散点图
plt.scatter(study_hours, scores, color='green', marker='s', s=100)# 添加标题和坐标轴标签
plt.title('学习时间与考试成绩关系')
plt.xlabel('学习时间(小时)')
plt.ylabel('考试成绩(分)')# 显示图形
plt.show()
在这段代码中,我们定义了学习时间和考试成绩的数据。使用plt.scatter()函数绘制散点图,study_hours作为 x 轴数据,scores作为 y 轴数据,color设置点的颜色为绿色,marker设置点的样式为正方形,s设置点的大小为 100 。添加标题和坐标轴标签后展示图形。从散点图中可以观察到,随着学习时间的增加,考试成绩有上升的趋势,说明两者之间可能存在正相关关系。
再来看一个更复杂的例子,假设有不同城市的人口密度和犯罪率的数据,并且希望根据城市类型对点进行颜色区分:
import numpy as np
import matplotlib.pyplot as plt# 城市数量
num_cities = 50# 人口密度(人/平方公里)
population_density = np.random.randint(100, 5000, num_cities)
# 犯罪率(每10万人中的犯罪案件数)
crime_rate = np.random.randint(100, 1000, num_cities)
# 城市类型(0代表小城市,1代表大城市)
city_type = np.random.randint(0, 2, num_cities)# 颜色映射
colors = ['blue' if t == 0 else'red' for t in city_type]# 绘制散点图
plt.scatter(population_density, crime_rate, c=colors, marker='o', s=50)# 添加标题和坐标轴标签
plt.title('城市人口密度与犯罪率关系')
plt.xlabel('人口密度(人/平方公里)')
plt.ylabel('犯罪率(每10万人中的犯罪案件数)')# 显示图例
plt.legend(['小城市', '大城市'], loc='upper right')# 显示图形
plt.show()
在这个例子中,我们使用numpy生成了随机的人口密度、犯罪率和城市类型数据。通过列表推导式根据城市类型生成了对应的颜色列表。使用plt.scatter()函数绘制散点图,c参数传入颜色列表,实现根据城市类型对点进行颜色区分 。添加标题、坐标轴标签和图例后展示图形。通过这个散点图,可以更直观地探索不同类型城市的人口密度和犯罪率之间的关系,以及不同类型城市数据点的分布情况。
四、爬虫数据可视化实战
4.1 爬取数据:获取分析素材
在进行数据可视化之前,我们首先需要获取数据。这里我们使用 Python 爬虫来抓取网页数据,以爬取某电商网站上的商品信息为例,展示如何使用requests库和BeautifulSoup库进行数据爬取。
requests库是 Python 中用于发送 HTTP 请求的强大工具,它可以方便地获取网页内容。BeautifulSoup库则是用于解析 HTML 和 XML 文档的库,能够帮助我们从网页内容中提取出所需的数据 。
以下是一个简单的爬取某电商网站商品信息的代码示例:
import requests
from bs4 import BeautifulSoup# 目标网址
url = 'https://example.com/products' # 请替换为实际网址# 发送HTTP GET请求
response = requests.get(url)# 检查请求是否成功
if response.status_code == 200:# 使用BeautifulSoup解析网页内容soup = BeautifulSoup(response.text, 'html.parser')# 提取商品信息,假设商品信息包含在class为'product-item'的div标签中product_items = soup.find_all('div', class_='product-item')products = []for item in product_items:# 提取商品名称,假设商品名称在class为'product-name'的span标签中name = item.find('span', class_='product-name').text.strip()# 提取商品价格,假设商品价格在class为'product-price'的span标签中price = item.find('span', class_='product-price').text.strip()products.append({'商品名称': name, '商品价格': price})# 打印提取到的商品信息for product in products:print(product)else:print(f'请求失败,状态码: {response.status_code}')
在上述代码中,我们首先导入了requests库和BeautifulSoup库。然后定义了目标网址,使用requests.get()方法发送 HTTP GET 请求获取网页内容。通过检查response.status_code判断请求是否成功,如果成功则使用BeautifulSoup将网页内容解析为可操作的对象 。接着,使用soup.find_all()方法找到所有包含商品信息的div标签,再在每个div标签中通过find()方法提取商品名称和价格。最后,将提取到的商品信息存储在列表中并打印出来。
为了方便后续的数据处理和分析,我们可以将爬取到的数据保存为 CSV 格式的文件。使用 Python 的csv模块可以轻松实现这一功能:
import csv# 将数据保存为CSV文件
with open('products.csv', 'w', newline='', encoding='utf-8') as csvfile:fieldnames = ['商品名称', '商品价格']writer = csv.DictWriter(csvfile, fieldnames=fieldnames)writer.writeheader()for product in products:writer.writerow(product)
在这段代码中,我们使用csv.DictWriter创建一个写入 CSV 文件的对象,指定字段名fieldnames。然后使用writer.writeheader()写入表头,再通过循环使用writer.writerow()将每个商品的数据写入文件 。这样,我们就成功地将爬取到的数据保存为 CSV 文件,为后续的数据预处理和可视化做好了准备。
4.2 数据预处理:清洗和整理数据
从网页上爬取到的数据往往存在各种问题,如重复数据、缺失值、数据格式不一致等,这些问题会影响数据可视化的效果和数据分析的准确性。因此,在进行可视化之前,需要对数据进行预处理。
数据预处理的重要性不言而喻。它可以提高数据的质量,使数据更加准确、完整和一致,从而为后续的数据分析和可视化提供可靠的基础。例如,去除重复数据可以避免在分析和可视化中出现重复计算和误导性的结果;处理缺失值可以确保数据的完整性,避免因缺失数据而导致分析结果的偏差 。
下面通过代码示例展示如何使用 Pandas 库对爬取的数据进行预处理。假设我们已经将爬取到的商品数据保存为products.csv文件,现在读取该文件并进行预处理:
import pandas as pd# 读取CSV文件
data = pd.read_csv('products.csv')# 去除重复数据
data = data.drop_duplicates()# 处理缺失值,这里简单地删除含有缺失值的行
data = data.dropna()# 检查数据类型,如果需要,进行数据类型转换
# 例如,将价格列转换为数值类型
data['商品价格'] = pd.to_numeric(data['商品价格'], errors='coerce')# 打印预处理后的数据
print(data.head())
在上述代码中,首先使用pd.read_csv()函数读取 CSV 文件,将数据加载到 Pandas 的 DataFrame 对象中。然后使用drop_duplicates()方法去除重复数据,确保每一条数据都是唯一的。接着,使用dropna()方法删除含有缺失值的行,保证数据的完整性 。之后,通过pd.to_numeric()方法将价格列转换为数值类型,errors='coerce’参数表示如果转换失败则将该值设为NaN。最后,使用data.head()查看预处理后数据的前几行,以确认预处理的效果。
4.3 可视化展示:让数据说话
经过数据爬取和预处理后,我们就可以根据数据的特点选择合适的图表类型进行可视化展示了。假设我们希望展示不同商品价格的分布情况,这时可以选择柱状图。
下面是使用 Matplotlib 绘制柱状图展示商品价格分布的代码:
import matplotlib.pyplot as plt
import pandas as pd# 读取预处理后的数据
data = pd.read_csv('products.csv')# 提取商品名称和价格
product_names = data['商品名称']
product_prices = data['商品价格']# 绘制柱状图
plt.bar(product_names, product_prices)# 添加标题和坐标轴标签
plt.title('不同商品价格分布')
plt.xlabel('商品名称')
plt.ylabel('商品价格')# 旋转x轴标签,避免重叠
plt.xticks(rotation=45)# 显示图形
plt.show()
在这段代码中,首先读取预处理后的 CSV 数据。然后分别提取商品名称和价格列。接着使用plt.bar()函数绘制柱状图,product_names作为 x 轴的类别,product_prices作为柱状图的高度 。使用plt.title()、plt.xlabel()和plt.ylabel()添加标题和坐标轴标签。为了避免 x 轴标签重叠,使用plt.xticks(rotation=45)将 x 轴标签旋转 45 度。最后,通过plt.show()展示图形。
如果我们希望展示商品价格随时间的变化趋势(假设数据中包含时间信息),则可以使用折线图。假设我们有一个包含时间和价格的数据集prices.csv,代码如下:
import matplotlib.pyplot as plt
import pandas as pd# 读取数据
data = pd.read_csv('prices.csv')# 将时间列转换为日期时间类型
data['时间'] = pd.to_datetime(data['时间'])# 绘制折线图
plt.plot(data['时间'], data['商品价格'])# 添加标题和坐标轴标签
plt.title('商品价格随时间变化趋势')
plt.xlabel('时间')
plt.ylabel('商品价格')# 显示图形
plt.show()
在这个例子中,首先读取数据并使用pd.to_datetime()将时间列转换为日期时间类型,以便 Matplotlib 能够正确处理时间轴。然后使用plt.plot()函数绘制折线图,以时间为 x 轴,商品价格为 y 轴 。添加标题和坐标轴标签后展示图形,通过折线图可以清晰地看到商品价格随时间的变化趋势。
在实际的可视化过程中,还可以对图表进行更多的美化和标注,使其更加美观和易于理解。例如,可以添加图例、调整颜色、设置线条样式等。以柱状图为例,对上述代码进行美化:
import matplotlib.pyplot as plt
import pandas as pd# 读取预处理后的数据
data = pd.read_csv('products.csv')# 提取商品名称和价格
product_names = data['商品名称']
product_prices = data['商品价格']# 绘制柱状图,设置颜色和透明度
plt.bar(product_names, product_prices, color='skyblue', alpha=0.8)# 添加标题和坐标轴标签,设置字体大小和颜色
plt.title('不同商品价格分布', fontsize=16, color='red')
plt.xlabel('商品名称', fontsize=14)
plt.ylabel('商品价格', fontsize=14)# 旋转x轴标签,避免重叠
plt.xticks(rotation=45)# 添加数据标签,显示每个柱子的具体数值
for i, price in enumerate(product_prices):plt.text(i, price, str(price), ha='center', va='bottom')# 显示图形
plt.show()
在这段美化后的代码中,通过color='skyblue’设置柱状图的颜色为天蓝色,alpha=0.8设置透明度为 0.8。使用fontsize参数设置标题和坐标轴标签的字体大小,color='red’设置标题颜色为红色 。通过循环使用plt.text()在每个柱子上方添加数据标签,显示具体的价格数值,ha='center’表示水平居中对齐,va='bottom’表示垂直底部对齐。这样,经过美化后的柱状图更加直观和美观,能够更好地展示数据信息。
五、总结与展望
数据可视化作为数据科学领域的关键技术,能够将抽象的数据转化为直观、易懂的图形,帮助我们更好地理解数据背后的信息。通过 Matplotlib 和 Seaborn 等工具,我们可以轻松地创建各种类型的图表,展示数据的特征、趋势和关系。
Matplotlib 作为 Python 中基础的绘图库,提供了丰富的绘图函数和高度的定制性,能够满足各种复杂的绘图需求。而 Seaborn 则在 Matplotlib 的基础上,进一步简化了绘图流程,提供了更美观的默认样式和强大的统计图表绘制功能,使数据可视化更加高效和专业。
在实际项目中,我们可以根据具体的数据特点和分析目标,选择合适的图表类型和可视化工具。通过数据可视化,我们不仅能够更清晰地展示数据,还能从中发现潜在的规律和问题,为决策提供有力的支持。
未来,随着数据量的不断增长和数据分析需求的日益复杂,数据可视化技术也将不断发展和创新。新的可视化工具和技术将不断涌现,为我们提供更多的选择和更强大的功能。同时,数据可视化也将与人工智能、机器学习等领域深度融合,实现更加智能化、自动化的数据可视化分析。
希望读者在掌握了本文介绍的内容后,能够积极地将数据可视化技术应用到实际项目中,不断探索和尝试新的可视化方法和工具,让数据可视化成为数据分析和决策的得力助手。
相关文章:
【Python爬虫(27)】探索数据可视化的魔法世界
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
网络安全-js安全知识点与XSS常用payloads
简介 JavaScript 是一种轻量级的编程语言,定义了HTML的行为。它与Java的关系类似周杰和周杰伦的关系(即没有关系)。 用法 HTML 中的脚本必须位于 <script> 与 </script> 标签之间。 脚本可被放置在 HTML 页面的 <body>…...
ip属地是电话号码吗怎么改
在数字化时代,IP属地作为网络身份的一部分,对于许多互联网用户来说并不陌生。然而,关于IP属地的具体含义以及如何更改它,却常常让一些用户感到困惑。特别是当提到IP属地与电话号码之间的关系时,更是容易让人产生误解。…...
Ubuntu中使用yum命令出现错误提示:Command ‘yum‘ not found
Ubuntu中使用yum命令出现以下错误提示: 解决方法如下 1、使用su或sudo -s命令使普通用户切换为root用户 2、然后检测是否安装了build-essential程序包,输入命令: apt-get install build-essential 3、进度走完后安装yum,输入命令: apt-get install yum 如果成功安装ÿ…...
【Vue.js 和 React.js 的主要区别是什么?】
Vue.js 和 React.js 的主要区别是什么? 前言 Vue.js 和 React.js 是当前最流行的两个前端框架,它们都用于构建用户界面,但在设计理念、语法和使用方式上有显著差异。本文将从多个维度对比 Vue.js 和 React.js 的主要区别,帮助开…...
HarmonyOS NEXT 全栈开发实战手册(API 12+)
一、HarmonyOS NEXT 架构升级与关键技术 1.1 分布式能力增强(重点标注) 跨设备计算网格:支持动态分配 GPU/CPU/NPU 资源 // 分布式渲染示例(API 12) import renderService from ohos.distributedHardware.render; l…...
【rt-thread】rt-thread 控制 led 的两种方式
1. pin设备 #define LED_PIN 3int led(void) {rt_uint8_t count;rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT); for(count 0 ; count < 10 ;count){ rt_pin_write(LED_PIN, PIN_HIGH);rt_kprintf("led on, count : %d %d\r\n", count, rt_pin_read(LED_PIN));…...
Python爬虫系列教程之第十三篇:构建高可用爬虫系统 —— 混合架构与自动化监控
大家好,欢迎继续关注本系列爬虫教程!随着爬虫项目规模的不断扩大和业务需求的提升,单一技术方案往往难以满足实际应用中对高可用性、稳定性和自动化监控的要求。如何构建一个既能应对多种反爬策略,又能在异常情况下自动恢复、实时…...
picomax 中 rkipc 的main.c文件分析
main函数 int main(int argc, char **argv) {//wait_key_event 这个进程的pidpthread_t key_chk;LOG_DEBUG("main begin\n");//luckfox-pico/project/app/rkipc/rkipc/common/common.c中//显示版本rkipc_version_dump();//设置信号signal(SIGINT, sig_proc);signal(…...
深入理解 JVM 的栈帧结构
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
[oeasy]python068_异常处理之后做些什么_try语句的完全体_最终_finally
068_异常处理之后做些什么_finally 异常处理之后做些什么_try语句的完全体_最终_finally 回忆上次内容 我们了解了 try 的细节 except 可以 捕获到异常 但报错比较简单 添加图片注释,不超过 140 字(可选) 游乐场里面的 报错 更全 更丰富 …...
数据库端性能测试优化案例
数据库端性能测试优化案例 数据库是系统性能的关键瓶颈之一,特别是在高并发、大数据量的场景下。以下是一些典型的数据库端性能测试优化案例,涵盖了查询优化、索引策略、连接池管理、分布式数据库设计等多个方面: 1. 案例:优化慢…...
如何实现使用DeepSeek的CV模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建。...
要使用 DeepSeek 的 CV 模型对管道内模糊、低光照或水渍干扰的图像进行去噪、超分辨率重建,一般可以按照以下步骤实现: 1. 准备工作 1.1 获取 API 访问权限 首先,你需要从 DeepSeek 官方获取 API 访问权限和相应的 API 密钥。这通常需要在 De…...
PySide6学习专栏(四):用多线程完成复杂计算任务
如果计程序中要处理一个非常庞大的数据集中的数据,且数据处理计算很复杂,造成数据处理占用大量时间和CPU资源,如果不用多线程,仅在主进程中来处理数据,将会使整个程序卡死,必须采用多线程来处理这些数据是唯…...
神经网络八股(1)
1.什么是有监督学习,无监督学习 有监督学习是带有标签的,无监督学习是没有标签的,简单来说就是有监督学习的输入输出都是固定的,已知的,无监督学习输入是已知的,输出是不固定的,无监督学习是通…...
深度学习每周学习总结Y1(Yolov5 调用官方权重进行检测 )
🍨 本文为🔗365天深度学习训练营 中的学习记录博客Y1中的内容 🍖 原作者:K同学啊 | 接辅导、项目定制 ** 注意该训练营出现故意不退押金,恶意揣测偷懒用假的结果冒充真实打卡记录,在提出能够拿到视频录像…...
计算机视觉基础|从 OpenCV 到频域分析
一、引言 在当今数字化时代,图像处理已渗透到我们生活的方方面面,从日常使用的智能手机拍照美化,到医学领域的精准诊断,再到自动驾驶中的环境感知,其重要性不言而喻。在图像处理领域中,OpenCV 和频域分析&…...
74. 搜索二维矩阵(LeetCode 热题 100)
题目来源; 74. 搜索二维矩阵 - 力扣(LeetCode) 题目内容: 给你一个满足下述两条属性的 m x n 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &am…...
netcore libreoffice word转pdf中文乱码
一、效果 解决: cd /usr/share/fonts/ mkdir zhFont cd zhFont #windows系统C:\Windows\Fonts 中复制/usr/share/fonts/zhFont sudo apt update sudo apt install xfonts-utils mkfontscale mkfontdir #刷新字体缓存 fc-cache -fv #查看已安装的字体列表 fc-list :…...
qt-C++笔记之创建和初始化 `QGraphicsScene` 和 `QGraphicsView` 并关联视图和场景的方法
qt-C笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 code review! 参考笔记 1.qt-C笔记之创建和初始化 QGraphicsScene 和 QGraphicsView 并关联视图和场景的方法 2.qt-C笔记之QGraphicsScene和 QGraphicsView中setScene、通过scene得到view、通过…...
OpenGL 01--构建GLFW、创建第一个工程、配置GLAD
一、OpenGL介绍 一般它被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,OpenGL本身并不是一个API,它仅仅是一个由Khronos组织制定并维护的规范(Specification)。 OpenGL规…...
【时时三省】(C语言基础)求多项式1-1/2+1/3-1/4+...+1/99-1/100的值 用C语言表示
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 示例: 输出结果是 0.688172...
kafka-集群缩容
一. 简述: 当业务增加时,服务瓶颈,我们需要进行扩容。当业务量下降时,为成本考虑。自然也会涉及到缩容。假设集群有 15 台机器,预计缩到 10 台机器,那么需要做 5 次缩容操作,每次将一个节点下线…...
Ubuntu22.04 - etcd的安装和使用
目录 介绍安装Etcd安装etcd的客户端使用 介绍 Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接watch 功能,能够及时收到数据变化…...
排查JVM的一些命令
查看JVM相关信息的方法 环境: Win10, jdk17 查看端口的Pid netstat -ano | findstr <端口号>列出当前运行的JVM进程 ## 用于输出JVM中运行的进程状态信息。通过jps,可以快速获取Java进程的PID(进程标识符), …...
Apache Doris 实现毫秒级查询响应
1. 引言 1.1 数据分析的重要性 随着大数据时代的到来,企业对实时数据分析的需求日益增长。快速、准确地获取数据洞察成为企业在竞争中脱颖而出的关键。传统的数据库系统在处理大规模数据时往往面临性能瓶颈,难以满足实时分析的需求。例如,一个电商公司需要实时监控销售数据…...
Java 与设计模式(15):模板方法模式
一、定义 模板方法模式是一种行为设计模式,它定义了一个操作中的算法的骨架(也就是大致的步骤和流程),而将一些具体步骤的实现延迟到子类中。这样,子类可以不改变算法的结构即可重新定义算法的某些特定步骤。 二、Ja…...
Arduino 第十六章:pir红外人体传感器练习
Arduino 第十六章:PIR 传感器练习 一、引言 在 Arduino 的众多有趣项目中,传感器的应用是非常重要的一部分。今天我们要学习的主角是 PIR(被动红外)传感器。PIR 传感器能够检测人体发出的红外线,常用于安防系统、自动…...
C++中间件DDS介绍
C DDS 库简介 DDS(Data Distribution Service) 是一种用于实时分布式系统通信的中间件标准,由 OMG(Object Management Group) 提出。它是一种发布/订阅(Publish/Subscribe)模式的数据通信框架&…...
自动化之ansible(二)
一、ansible中playbook(剧本) 官方文档: Ansible playbooks — Ansible Community Documentation 1、playbook的基本结构 一个基本的playbook由以下几个主要部分组成 hosts: 定义要执行任务的主机组或主机。 become: 是否需要使用超级用户…...
