当前位置: 首页 > news >正文

第17篇:python进阶:详解数据分析与处理

第17篇:数据分析与处理

内容简介

本篇文章将深入探讨数据分析与处理在Python中的应用。您将学习如何使用pandas库进行数据清洗与分析,掌握matplotlibseaborn库进行数据可视化,以及处理大型数据集的技巧。通过丰富的代码示例和实战案例,您将能够高效地进行数据处理、分析和可视化,为数据驱动的决策提供有力支持。


目录

  1. 数据分析与处理概述
    • 什么是数据分析与处理
    • 数据分析的流程
  2. 使用pandas进行数据清洗与分析
    • pandas简介
    • 数据导入与导出
    • 数据清洗
      • 处理缺失值
      • 数据转换与标准化
      • 去除重复数据
    • 数据分析与操作
      • 数据筛选与过滤
      • 数据分组与聚合
      • 数据合并与连接
  3. 数据可视化
    • matplotlib简介
    • seaborn简介
    • 使用matplotlib进行基本绘图
      • 折线图
      • 柱状图
      • 散点图
    • 使用seaborn进行高级绘图
      • 热力图
      • 箱线图
      • 小提琴图
  4. 处理大型数据集
    • 优化pandas性能
      • 使用合适的数据类型
      • 向量化操作
      • 避免使用循环
    • 使用Dask处理大数据
      • Dask简介
      • 基本使用方法
      • pandas的集成
    • 分布式数据处理工具
      • Apache Spark
      • 其他工具介绍
  5. 示例代码
    • pandas数据清洗与分析示例
    • matplotlib数据可视化示例
    • seaborn数据可视化示例
    • 处理大型数据集示例
  6. 常见问题及解决方法
    • 问题1:如何处理pandas中的缺失数据?
    • 问题2:matplotlibseaborn的选择标准是什么?
    • 问题3:如何提升pandas处理大型数据集的效率?
    • 问题4:在数据可视化中如何选择合适的图表类型?
  7. 总结

数据分析与处理概述

什么是数据分析与处理

数据分析与处理是指通过对数据进行收集、清洗、转换、建模和可视化等步骤,从中提取有价值的信息和见解的过程。数据分析在各行各业中都有广泛应用,如商业决策、科学研究、市场营销等。

数据分析的流程

数据分析通常包括以下几个步骤:

  1. 数据收集:获取原始数据,可以来自数据库、API、文件等。
  2. 数据清洗:处理缺失值、异常值、重复数据等,确保数据质量。
  3. 数据转换:对数据进行格式转换、标准化、特征工程等。
  4. 数据分析:应用统计方法和机器学习算法,发现数据中的模式和关系。
  5. 数据可视化:通过图表和图形展示分析结果,帮助理解和传达信息。
  6. 结果解释与决策:根据分析结果制定相应的策略和决策。

使用pandas进行数据清洗与分析

pandas简介

pandas是Python中最常用的数据分析和数据处理库,提供了强大的数据结构和函数,特别是DataFrameSeries,能够高效地处理和分析结构化数据。

数据导入与导出

pandas支持多种数据格式的导入与导出,如CSV、Excel、JSON、SQL数据库等。

导入数据示例

import pandas as pd# 从CSV文件导入数据
df = pd.read_csv('data.csv')# 从Excel文件导入数据
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1')# 从JSON文件导入数据
df_json = pd.read_json('data.json')

导出数据示例

# 导出到CSV文件
df.to_csv('output.csv', index=False)# 导出到Excel文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)# 导出到JSON文件
df.to_json('output.json', orient='records', lines=True)

数据清洗

数据清洗是数据分析的重要步骤,确保数据的准确性和一致性。

处理缺失值

缺失值在数据集中普遍存在,pandas提供了多种方法处理缺失值。

检测缺失值

# 检查每列的缺失值数量
print(df.isnull().sum())# 检查整个DataFrame是否有缺失值
print(df.isnull().values.any())

处理缺失值

  • 删除缺失值

    # 删除包含任何缺失值的行
    df_cleaned = df.dropna()# 删除所有列都为缺失值的行
    df_cleaned = df.dropna(how='all')
    
  • 填充缺失值

    # 用特定值填充缺失值
    df_filled = df.fillna(0)# 用前一个有效值填充缺失值
    df_filled = df.fillna(method='ffill')# 用后一个有效值填充缺失值
    df_filled = df.fillna(method='bfill')
    
数据转换与标准化

数据转换包括数据类型转换、数据标准化等操作。

数据类型转换

# 将某列转换为整数类型
df['age'] = df['age'].astype(int)# 将某列转换为日期类型
df['date'] = pd.to_datetime(df['date'])

数据标准化

# 标准化数值列
df['salary_normalized'] = (df['salary'] - df['salary'].mean()) / df['salary'].std()
去除重复数据

重复数据可能会影响分析结果,pandas提供了便捷的方法去除重复数据。

# 查看重复行
duplicates = df[df.duplicated()]
print(duplicates)# 删除重复行,保留第一次出现
df_unique = df.drop_duplicates()# 删除重复行,保留最后一次出现
df_unique = df.drop_duplicates(keep='last')

数据分析与操作

pandas提供了丰富的功能进行数据筛选、分组、聚合和合并等操作。

数据筛选与过滤

筛选特定行

# 筛选年龄大于30的行
df_filtered = df[df['age'] > 30]# 使用多个条件筛选
df_filtered = df[(df['age'] > 30) & (df['gender'] == 'F')]

选择特定列

# 选择单列
age_series = df['age']# 选择多列
subset = df[['name', 'age', 'salary']]
数据分组与聚合

分组操作

# 按性别分组
grouped = df.groupby('gender')# 计算每组的平均年龄
average_age = grouped['age'].mean()
print(average_age)

聚合操作

# 计算每组的总薪资和平均薪资
salary_summary = grouped['salary'].agg(['sum', 'mean'])
print(salary_summary)
数据合并与连接

合并操作

# 合并两个DataFrame,按共同列
merged_df = pd.merge(df1, df2, on='employee_id', how='inner')# 外连接
merged_df = pd.merge(df1, df2, on='employee_id', how='outer')

连接操作

# 上下拼接
concatenated_df = pd.concat([df1, df2], axis=0)# 左右拼接
concatenated_df = pd.concat([df1, df2], axis=1)

数据可视化

matplotlib简介

matplotlib是Python中最基础且功能强大的绘图库,能够创建各种类型的静态、动态和交互式图表。它提供了类似MATLAB的绘图接口,适用于需要高度自定义的可视化需求。

seaborn简介

seaborn是基于matplotlib构建的高级绘图库,专注于统计数据可视化。它简化了复杂图表的创建过程,并提供了美观的默认样式,适合快速生成专业级别的图表。

使用matplotlib进行基本绘图

折线图

折线图适用于展示数据随时间或顺序的变化趋势。

import matplotlib.pyplot as plt# 示例数据
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May']
sales = [250, 300, 280, 350, 400]plt.figure(figsize=(8, 5))
plt.plot(months, sales, marker='o', linestyle='-', color='b')
plt.title('月销售额趋势')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.grid(True)
plt.show()
柱状图

柱状图适用于比较不同类别的数据。

# 示例数据
products = ['Widget', 'Gizmo', 'Gadget']
sales = [150, 200, 120]plt.figure(figsize=(8, 5))
plt.bar(products, sales, color=['skyblue', 'salmon', 'lightgreen'])
plt.title('产品销售量比较')
plt.xlabel('产品')
plt.ylabel('销售量')
plt.show()
散点图

散点图适用于展示两个变量之间的关系。

# 示例数据
import numpy as npnp.random.seed(0)
x = np.random.rand(50)
y = x + np.random.normal(0, 0.1, 50)plt.figure(figsize=(8, 5))
plt.scatter(x, y, color='purple')
plt.title('变量X与Y的关系')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()

使用seaborn进行高级绘图

热力图

热力图适用于展示变量之间的相关性或数据密度。

import seaborn as sns# 示例数据
data = sns.load_dataset('iris')
corr = data.corr()plt.figure(figsize=(8, 6))
sns.heatmap(corr, annot=True, cmap='coolwarm')
plt.title('Iris数据集特征相关性热力图')
plt.show()
箱线图

箱线图适用于展示数据的分布情况及异常值。

plt.figure(figsize=(8, 5))
sns.boxplot(x='species', y='sepal_length', data=data)
plt.title('不同物种的萼片长度分布')
plt.xlabel('物种')
plt.ylabel('萼片长度 (cm)')
plt.show()
小提琴图

小提琴图结合了箱线图和密度图的特点,展示数据分布的更详细信息。

plt.figure(figsize=(8, 5))
sns.violinplot(x='species', y='petal_length', data=data, palette='Pastel1')
plt.title('不同物种的花瓣长度分布')
plt.xlabel('物种')
plt.ylabel('花瓣长度 (cm)')
plt.show()

处理大型数据集

优化pandas性能

处理大型数据集时,pandas的性能可能成为瓶颈。以下是一些优化方法:

使用合适的数据类型

合理选择数据类型可以显著减少内存使用,提高处理速度。

# 查看数据类型
print(df.dtypes)# 将整数列转换为更小的整数类型
df['age'] = df['age'].astype('int8')# 将分类数据转换为类别类型
df['gender'] = df['gender'].astype('category')
向量化操作

尽量使用pandasnumpy的向量化操作,避免使用显式的Python循环。

# 向量化计算新列
df['total_price'] = df['quantity'] * df['price']# 使用`apply`进行高效计算
df['discounted_price'] = df['total_price'].apply(lambda x: x * 0.9)
避免使用循环

循环在pandas中效率较低,尽量使用内置函数和方法。

# 不推荐:使用循环进行数据操作
for index, row in df.iterrows():df.at[index, 'total'] = row['quantity'] * row['price']# 推荐:使用向量化操作
df['total'] = df['quantity'] * df['price']

使用Dask处理大数据

Dask是一个并行计算库,能够处理比内存更大的数据集,扩展pandas的功能。

Dask简介

Dask提供了与pandas类似的接口,但支持延迟计算和并行处理,适合处理大型数据集和复杂的计算任务。

基本使用方法
import dask.dataframe as dd# 从CSV文件读取数据
ddf = dd.read_csv('large_data.csv')# 进行数据清洗和转换
ddf = ddf.dropna()
ddf['total'] = ddf['quantity'] * ddf['price']# 进行分组与聚合
result = ddf.groupby('category')['total'].sum().compute()
print(result)
pandas的集成

Dask可以与pandas无缝集成,允许在必要时转换为pandas对象进行进一步处理。

# 将Dask DataFrame转换为pandas DataFrame
pdf = ddf.compute()# 继续使用pandas进行处理
pdf['average'] = pdf['total'] / pdf['quantity']

分布式数据处理工具

对于极其庞大的数据集和复杂的计算任务,分布式数据处理工具如Apache Spark提供了强大的能力。

Apache Spark

Apache Spark是一个快速、通用的大数据处理引擎,支持分布式数据处理和机器学习任务。PySpark是Spark的Python API,允许在Python中编写Spark应用。

基本使用示例

from pyspark.sql import SparkSession# 初始化SparkSession
spark = SparkSession.builder.appName('DataAnalysis').getOrCreate()# 读取数据
df = spark.read.csv('large_data.csv', header=True, inferSchema=True)# 数据清洗
df_clean = df.dropna()# 数据分析
df_grouped = df_clean.groupBy('category').sum('price')# 显示结果
df_grouped.show()# 关闭SparkSession
spark.stop()
其他工具介绍
  • Vaex:高性能的DataFrame库,适用于处理大规模数据集,支持内存映射和延迟计算。
  • Modin:通过多线程和分布式计算加速pandas操作,提供与pandas完全兼容的API。
  • Ray:用于构建分布式应用的框架,支持并行和分布式数据处理任务。

示例代码

pandas数据清洗与分析示例

以下示例展示了如何使用pandas进行数据导入、清洗、分析和导出。

import pandas as pddef clean_and_analyze(csv_file):# 导入数据df = pd.read_csv(csv_file)print("原始数据概览:")print(df.head())# 处理缺失值df = df.dropna()# 转换数据类型df['age'] = df['age'].astype(int)df['gender'] = df['gender'].astype('category')# 添加总价列df['total_price'] = df['quantity'] * df['price']# 分组聚合sales_summary = df.groupby('category')['total_price'].sum()print("\n按类别分组的总销售额:")print(sales_summary)# 导出清洗后的数据df.to_csv('cleaned_data.csv', index=False)print("\n清洗后的数据已保存到'cleaned_data.csv'")# 使用示例
clean_and_analyze('sales_data.csv')

输出(假设sales_data.csv内容如下):

原始数据概览:name  age gender category  quantity  price
0  A    25      M      A        5     20.0
1  B    30      F      B        3     15.0
2  C    22      M      A        2     20.0
3  D    28      F      C        4     25.0
4  E    35      M      B        1     15.0按类别分组的总销售额:
category
A    140.0
B     60.0
C    100.0
Name: total_price, dtype: float64清洗后的数据已保存到'cleaned_data.csv'

matplotlib数据可视化示例

以下示例展示了如何使用matplotlib绘制销售额折线图和柱状图。

import matplotlib.pyplot as plt
import pandas as pddef plot_sales_trends(csv_file):# 导入数据df = pd.read_csv(csv_file)# 按月份分组计算总销售额monthly_sales = df.groupby('month')['total_price'].sum()# 绘制折线图plt.figure(figsize=(10, 6))plt.plot(monthly_sales.index, monthly_sales.values, marker='o', linestyle='-', color='b')plt.title('月销售额趋势')plt.xlabel('月份')plt.ylabel('销售额')plt.grid(True)plt.show()# 绘制柱状图plt.figure(figsize=(10, 6))plt.bar(monthly_sales.index, monthly_sales.values, color='skyblue')plt.title('月销售额柱状图')plt.xlabel('月份')plt.ylabel('销售额')plt.show()# 使用示例
plot_sales_trends('cleaned_data.csv')

输出

两张图表分别展示了月销售额的折线趋势和柱状比较。

seaborn数据可视化示例

以下示例展示了如何使用seaborn绘制热力图和箱线图。

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pddef visualize_data(csv_file):# 导入数据df = pd.read_csv(csv_file)# 计算相关性矩阵corr_matrix = df.corr()# 绘制热力图plt.figure(figsize=(8, 6))sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')plt.title('特征相关性热力图')plt.show()# 绘制箱线图plt.figure(figsize=(8, 6))sns.boxplot(x='category', y='total_price', data=df)plt.title('各类别销售额分布箱线图')plt.xlabel('类别')plt.ylabel('总销售额')plt.show()# 使用示例
visualize_data('cleaned_data.csv')

输出

两张图表分别展示了数据特征的相关性热力图和各类别销售额的分布箱线图。

处理大型数据集示例

以下示例展示了如何使用Dask处理大型CSV文件,并进行分组聚合分析。

import dask.dataframe as dddef process_large_data(csv_file):# 使用Dask读取大型CSV文件ddf = dd.read_csv(csv_file)# 处理缺失值ddf = ddf.dropna()# 添加总价列ddf['total_price'] = ddf['quantity'] * ddf['price']# 按类别分组并计算总销售额sales_summary = ddf.groupby('category')['total_price'].sum().compute()print("按类别分组的总销售额:")print(sales_summary)# 使用示例
process_large_data('large_sales_data.csv')

输出(假设large_sales_data.csv内容如下):

按类别分组的总销售额:
category
A    150000.0
B     80000.0
C    120000.0
Name: total_price, dtype: float64

常见问题及解决方法

问题1:如何处理pandas中的缺失数据?

原因:缺失数据可能会影响数据分析的准确性和结果。

解决方法

  1. 检测缺失数据

    • 使用isnull()isna()方法检测缺失值。
    • 使用info()方法查看数据概况。
  2. 处理缺失数据

    • 删除缺失值:使用dropna()方法删除包含缺失值的行或列。
    • 填充缺失值:使用fillna()方法填充缺失值,可以选择特定值、均值、中位数或前后值等。

示例

import pandas as pd# 创建示例DataFrame
data = {'A': [1, 2, None, 4],'B': [5, None, 7, 8],'C': [9, 10, 11, None]}
df = pd.DataFrame(data)# 检测缺失值
print(df.isnull().sum())# 删除包含任何缺失值的行
df_dropped = df.dropna()
print(df_dropped)# 用列的均值填充缺失值
df_filled = df.fillna(df.mean())
print(df_filled)

输出

A    1
B    1
C    1
dtype: int64A    B     C
0  1.0  5.0   9.0A    B     C
0  1.0  5.0   9.0
1  2.0  6.0  10.0
2  2.333333  7.0  11.0
3  4.0  8.0  10.0

问题2:matplotlibseaborn的选择标准是什么?

原因matplotlibseaborn都是强大的数据可视化工具,选择合适的库可以提高工作效率和图表质量。

解决方法

  1. 自定义需求

    • 如果需要高度自定义的图表,适合使用matplotlib
    • 如果需要快速生成美观的统计图表,适合使用seaborn
  2. 统计可视化

    • seaborn内置了许多统计图表,如箱线图、小提琴图、热力图等,适合用于统计数据的可视化。
  3. 复杂图表

    • 对于复杂的多层次图表,matplotlib提供了更灵活的控制。
  4. 集成使用

    • 可以结合使用matplotlibseaborn,先用seaborn绘制基础图表,再使用matplotlib进行进一步的自定义。

示例

import matplotlib.pyplot as plt
import seaborn as sns# 使用seaborn绘制箱线图
sns.boxplot(x='category', y='total_price', data=df)
plt.title('各类别销售额分布')
plt.show()# 使用matplotlib进行进一步自定义
plt.figure(figsize=(10, 6))
sns.boxplot(x='category', y='total_price', data=df)
plt.title('各类别销售额分布')
plt.xlabel('类别')
plt.ylabel('总销售额')
plt.grid(True)
plt.show()

问题3:如何提升pandas处理大型数据集的效率?

原因:当数据集非常大时,pandas的内存占用和处理速度可能成为瓶颈。

解决方法

  1. 优化数据类型

    • 使用更小的数据类型,如int8float32,减少内存使用。
  2. 分块读取数据

    • 使用chunksize参数分块读取大文件,逐块处理数据。
    import pandas as pdchunksize = 10 ** 6
    for chunk in pd.read_csv('large_data.csv', chunksize=chunksize):process(chunk)
    
  3. 使用并行计算库

    • 使用DaskModin等库,利用多核处理器加速数据处理。
  4. 减少内存复制

    • 尽量避免不必要的数据复制,使用inplace=True参数进行原地操作。
  5. 向量化操作

    • 利用pandasnumpy的向量化功能,避免使用循环。

示例

import pandas as pd# 优化数据类型
df = pd.read_csv('large_data.csv', dtype={'age': 'int8', 'gender': 'category'})# 分块处理
chunksize = 500000
total = 0
for chunk in pd.read_csv('large_data.csv', chunksize=chunksize):total += chunk['quantity'].sum()
print(f"总数量: {total}")

问题4:在数据可视化中如何选择合适的图表类型?

原因:不同的图表类型适用于不同的数据和分析目的,选择合适的图表能够更有效地传达信息。

解决方法

  1. 了解数据类型和关系

    • 分类数据、数值数据、时间序列数据等需要不同的图表类型。
  2. 确定可视化目的

    • 比较、分布、关系、组成等不同的可视化目的对应不同的图表。
  3. 选择合适的图表

    可视化目的图表类型
    比较柱状图、条形图、折线图
    分布直方图、箱线图、小提琴图
    关系散点图、气泡图、热力图
    组成饼图、堆叠柱状图、面积图
  4. 考虑图表的可读性和美观性

    • 避免过度复杂的图表,保持清晰和简洁。

示例

  • 比较:使用柱状图比较不同类别的销售额。
  • 分布:使用箱线图展示销售额的分布情况。
  • 关系:使用散点图分析销售数量与价格的关系。
  • 组成:使用饼图展示各类别在总销售额中的比例。

总结

在本篇文章中,我们深入探讨了数据分析与处理的核心内容,重点介绍了如何使用pandas进行数据清洗与分析,掌握了matplotlibseaborn进行数据可视化的方法,并学习了处理大型数据集的优化技巧。通过丰富的代码示例和实战案例,您已经具备了进行高效数据分析和处理的基本能力。

学习建议

  1. 实践项目:尝试在实际项目中应用所学的pandas和可视化工具,如数据报告、商业分析或科学研究。
  2. 深入学习pandas:探索pandas的高级功能,如时间序列分析、合并复杂数据集等,提升数据处理能力。
  3. 掌握高级可视化技术:学习使用seaborn的高级功能和matplotlib的自定义技巧,创建更具表现力的图表。
  4. 处理更大规模的数据:通过学习DaskModin等工具,提升处理大型数据集的能力。
  5. 学习统计与机器学习基础:结合数据分析,学习统计学和机器学习的基本概念和方法,扩展分析深度。
  6. 参与数据科学社区:加入数据科学相关的社区和论坛,分享经验,学习他人的最佳实践。
  7. 阅读相关书籍和文档:如《Python for Data Analysis》、《Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow》,系统性地提升数据分析与处理能力。

接下来的系列文章将继续深入探讨Python的机器学习与人工智能,帮助您进一步掌握Python在智能应用中的核心概念和技术。保持学习的热情,持续实践,您将逐步成为一名优秀的数据科学家!


如果您有任何问题或需要进一步的帮助,请随时在评论区留言或联系相关技术社区。

相关文章:

第17篇:python进阶:详解数据分析与处理

第17篇:数据分析与处理 内容简介 本篇文章将深入探讨数据分析与处理在Python中的应用。您将学习如何使用pandas库进行数据清洗与分析,掌握matplotlib和seaborn库进行数据可视化,以及处理大型数据集的技巧。通过丰富的代码示例和实战案例&am…...

三天急速通关Java基础知识:Day1 基本语法

三天急速通关JAVA基础知识:Day1 基本语法 0 文章说明1 关键字 Keywords2 注释 Comments2.1 单行注释2.2 多行注释2.3 文档注释 3 数据类型 Data Types3.1 基本数据类型3.2 引用数据类型 4 变量与常量 Variables and Constant5 运算符 Operators6 字符串 String7 输入…...

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程,只有…...

【Mysql】记录锁、间隙锁和临键锁的区别

InnoDB通过MVCCNext-Key Locks,解决了可重复读的事务隔离级别出现的幻读问题。 记录锁 记录锁就是为某行数据进行加锁,它封锁该行的索引记录 SELECT * FROM table WHERE id 1 FOR UPDATE id为1的记录行会被锁住。需要注意的的:id列必须为…...

神经网络|(二)sigmoid神经元函数

【1】引言 在前序学习进程中,我们已经了解了基本的二元分类器和神经元的构成,文章学习链接为: 神经网络|(一)加权平均法,感知机和神经元-CSDN博客 在此基础上,我们认识到神经元本身在做二元分类,是一种非…...

w-form-select.vue(自定义下拉框组件)(与后端字段直接相关性)

文章目录 1、w-form-select.vue 组件中每个属性的含义2、实例3、源代码 1、w-form-select.vue 组件中每个属性的含义 好的,我们来详细解释 w-form-select.vue 组件中每个属性的含义,并用表格列出它们是否与后端字段直接相关: 属性解释表格&…...

【JVM】垃圾收集器详解

你将学到 1. Serial 收集器 2. ParNew 收集器 3. Parallel Scavenge 收集器 4. Serial Old 收集器 5. Parallel Old 收集器 6. CMS 收集器 7. G1 收集器 在 Java 中,垃圾回收(GC)是自动管理内存的一个重要机制。HotSpot JVM 提供了多种…...

python创建一个httpServer网页上传文件到httpServer

一、代码 1.server.py import os from http.server import SimpleHTTPRequestHandler, HTTPServer import cgi # 自定义请求处理类 class MyRequestHandler(SimpleHTTPRequestHandler):# 处理GET请求def do_GET(self):if self.path /:# 响应200状态码self.send_response(2…...

【Maui】提示消息的扩展

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 消息扩展库3.2 消息提示框使用3.3 错误消息提示使用3.4 问题选择框使用 四、项目展示 前言 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移…...

租车骑绿岛

租车骑绿岛 真题目录: 点击去查看 E 卷 100分题型 题目描述 部门组织绿岛骑行团建活动。租用公共双人自行车,每辆自行车最多坐两人,最大载重M。给出部门每个人的体重,请问最多需要租用多少双人自行车。 输入描述 第一行两个数字m、n&…...

Pytorch - YOLOv11自定义资料训练

►前言 本篇将讲解目前最新推出的YOLOv11搭配Roboflow进行自定义资料标注训练流程,透过Colab上进行实作说明,使大家能够容易的了解YOLOv11的使用。 ►YOLO框架下载与导入 ►Roboflow的资料收集与标注 进行自定义资料集建置与上传 透过Roboflow工具进行…...

微服务与docker

准备工作 在课前资料中给大家提供了黑马商城项目的资料,我们需要先导入这个单体项目。不过需要注意的是,本篇及后续的微服务学习都是基于Centos7系统下的Docker部署,因此你必须做好一些准备: Centos7的环境及一个好用的SSH客户端装好Docker会使用Docker如果是学习过上面Doc…...

1.23 消息队列

使用消息队列&#xff0c;实现两个终端相互聊天 程序代码&#xff1a; w1.c #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h&g…...

【华为路由的arp配置】

华为路由的arp配置 ARP&#xff1a;IP地址与MAC地址的映射。 R1: g0/0/0:10.1.1.254/24 g0/0/1:10.1.2.254/24 PC1: 10.1.1.1/16 PC2: 10.1.1.2/16 PC3: 10.1.2.3/16 动态ARP 查看PC1的arp表&#xff0c;可以看到&#xff0c;列表为空。 查看R1的arp表 在PC3上ping命令测…...

绘制决策树的尝试1

代码复制 import pydotplus 复制 - 这一行代码用于导入pydotplus模块&#xff0c;这是一个用来在Python中创建图形的工具。2. python from IPython.display import Image 这一行代码用于从IPython显示模块中导入Image类&#xff0c;它允许我们在Jupyter笔记本中显示图像。…...

概率论里的特征函数,如何用卷积定理去理解

概率论里的特征函数&#xff0c;如何用卷积定理去理解_哔哩哔哩_bilibili...

Spring 是如何解决循环依赖问题

Spring 框架通过 三级缓存 机制来解决循环依赖问题。循环依赖是指两个或多个 Bean 相互依赖&#xff0c;形成一个闭环&#xff0c;例如 Bean A 依赖 Bean B&#xff0c;而 Bean B 又依赖 Bean A。Spring 通过提前暴露未完全初始化的 Bean 来解决这个问题。 以下是 Spring 解决…...

Linux 目录操作详解

Linux目录操作详解 1. 获取当前工作目录1.1 getcwd()1.2 get_current_dir_name() 2. 切换工作目录2.1 chdir() 3. 创建和删除目录3.1 mkdir()3.2 rmdir() 4. 获取目录中的文件列表4.1 opendir() 打开目录4.2 readdir() 读取目录内容4.3 closedir() 关闭目录 5. dirent 结构体6.…...

Elasticsearch的经典面试题及详细解答

以下是一些Elasticsearch的经典面试题及详细解答&#xff1a; 一、基础概念与原理 什么是Elasticsearch&#xff1f; 回答&#xff1a; Elasticsearch是一个基于Lucene的分布式搜索引擎&#xff0c;提供了RESTful API&#xff0c;支持多租户能力。它能够快速、近实时地存储、搜…...

Linux-arm(1)ATF启动流程

Linux-arm(1)ATF启动流量 Author&#xff1a;Once Day Date&#xff1a;2025年1月22日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Linux实践记录_Once_day的博客-CSDN博客 参考文档&#xff1a; ARM Trusted Firmware分析——启动、PSCI、OP-TEE接口 Arnold Lu 博…...

C#编程:List.ForEach与foreach循环的深度对比

在C#中&#xff0c;List<T>.ForEach 方法和传统的 foreach 循环都用于遍历列表中的元素并对每个元素执行操作&#xff0c;但它们之间有一些关键的区别。 List<T>.ForEach 方法 方法签名&#xff1a;public void ForEach(Action<T> action)类型&#xff1a;…...

C语言文件操作:标准库与系统调用实践

目录 1、C语言标准库文件操作 1.1.题目要求&#xff1a; 1.2.函数讲解&#xff1a; fopen 函数原型 参数 常用的打开模式 返回值 fwrite函数 函数原型 参数 返回值 注意事项 fseek函数 函数原型 参数 返回值 fread函数 函数原型 参数 返回值 fclose 函数…...

代码随想录 栈与队列 test 7

347. 前 K 个高频元素 - 力扣&#xff08;LeetCode&#xff09; 首先想到哈希&#xff0c;用key来存元素&#xff0c;value来存出现次数&#xff0c;最后进行排序&#xff0c;时间复杂度约为o(nlogn)。由于只需求前k个&#xff0c;因此可以进行优化&#xff0c;利用堆来维护这…...

C语言练习(21)

有一行电文&#xff0c;已按下面规律译成密码&#xff1a; A→Za→Z B→Yb→y C→Xc→X 即第1个字母变成第26个字母&#xff0c;第2个字母变成第25个字母&#xff0c;第i个字母变成第&#xff08;26-i十1&#xff09;个字母。非字母字符不变。假如已知道密码是Umtorhs&…...

智能手机“混战”2025:谁将倒下而谁又将突围?

【潮汐商业评论原创】 “去年做手机比较艰难&#xff0c;几乎每个品牌都在调价、压货&#xff0c;像华为这种以前都不给我们分货的厂商&#xff0c;也开始成为我的主要库存。不过今年开头比较好&#xff0c;20号国补一开始&#xff0c;店里的人流和手机销量就明显涨了不少&…...

计算机图形学:实验一 OpenGL基本绘制

1.OpenGL的环境配置&#xff1a; 集成开发环境Visual Studio Community 2019的安装&#xff1a; 在Windows一栏选择使用C的桌面开发&#xff1b;再转到“单个组件”界面&#xff0c;在“编译器、生成工具和运行时”一栏选择用于“Windows的C CMake工具”&#xff1b;然后转到…...

二分查找题目:快照数组

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;快照数组 出处&#xff1a;1146. 快照数组 难度 7 级 题目描述 要求 实现支持下列接口的快照数组&#xff1a; SnapshotArray(int length) \textt…...

深度学习|表示学习|卷积神经网络|参数共享是什么?|07

如是我闻&#xff1a; Parameter Sharing&#xff08;参数共享&#xff09;是卷积神经网络&#xff08;CNN&#xff09;的一个重要特性&#xff0c;帮助它高效地处理数据。参数共享的本质就是参数“本来也没有变过”。换句话说&#xff0c;在卷积层中&#xff0c;卷积核的参数&…...

基于相机内参推导的透视投影矩阵

基于相机内参推导透视投影矩阵&#xff08;splatam&#xff09;&#xff1a; M c a m [ 2 ⋅ f x w 0.0 ( w − 2 ⋅ c x ) w 0.0 0.0 2 ⋅ f y h ( h − 2 ⋅ c y ) h 0.0 0 0 f a r n e a r n e a r − f a r 2 f a r ⋅ n e a r n e a r − f a r 0.0 0.0 − 1.0 0.0 ] M_…...

浅析Dubbo 原理:架构、通信与调用流程

一、Dubbo 简介 Dubbo 是阿里巴巴开源的高性能、轻量级的 Java RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;框架&#xff0c;旨在实现不同服务之间的远程通信和调用。在分布式系统中&#xff0c;不同服务可能部署在不同的服务器上&#xff0c;D…...