当前位置: 首页 > 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…...

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&#xff1…...

-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录

终端报错: -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录原因:由于文件行尾符不匹配导致的。当脚本文件在Windows环境中创建或编辑后,行尾符为CRLF(即回车和换行,\r\n)&#xf…...

【C】memory 详解

<memory.h> 是一个 C 标准库头文件&#xff0c;提供了一组内存管理函数&#xff0c;用于分配、释放和操作动态内存。这些函数主要操作的是未初始化的内存块&#xff0c;是早期 C 编程中常用的内存操作工具。 尽管在现代 C 编程中更推荐使用<cstring>或<memory&…...

Android实训九 数据存储和访问

实训9 数据存储和访问 一、【实训目的】 1、 SharedPreferences存储数据; 2、 借助Java的I/O体系实现文件的存储&#xff0c; 3、使用Android内置的轻量级数据库SQLite存储数据; 二、【实训内容】 1、实现下图所示的界面&#xff0c;实现以下功能&#xff1a; 1&#xff…...

Redis vs. 其他数据库:深度解析,如何选择最适合的数据库?

一、如何为项目选择合适的数据库&#xff1f; 选择合适的数据库是一个复杂的过程&#xff0c;需要综合考虑多个因素。下面几个维度来详细阐述&#xff1a; 1.数据模型 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;适用于高度结构化、关联性强的数据&#xff0c;如电…...

docker 安装 mysql 详解

在平常的开发工作中&#xff0c;我们经常需要用到 mysql 数据库。那么在docker容器中&#xff0c;应该怎么安装mysql数据库呢。简单来说&#xff0c;第一步&#xff1a;拉取镜像&#xff1b;第二步&#xff1a;创建挂载目录并设置 my.conf&#xff1b;第三步&#xff1a;启动容…...

C++实现设计模式---桥接模式 (Bridge)

桥接模式 (Bridge) 桥接模式 是一种结构型设计模式&#xff0c;它通过将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。桥接模式的核心思想是使用组合&#xff08;而非继承&#xff09;来扩展功能。 意图 将抽象部分与实现部分分离&#xff0c;使它们都可以独立地变…...

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”&#xff0c;训练数据会过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented Generati…...

pycharm 运行远程环境问题 Error:Failed to prepare environment.

问题排查 拿到更详细的报错信息&#xff1a; Help > Diagnostic Tools > Debug Log Settings section: 添加下面的配置 com.intellij.execution.configurations.GeneralCommandLine 重显报错&#xff0c;我这里是再次运行代码打开 Help | Collect Logs and Diagnosti…...

Level2逐笔成交逐笔委托毫秒记录:今日分享优质股票数据20250124

逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/1UWVY11Q1IOfME9itDN5aZA?pwdhgeg 提取码: hgeg Level2逐笔成交逐笔委托数据分享下载 通过Level2逐笔成交与逐笔委托的详细数据&#xff0c;这种以毫秒为单位的信息能揭示许多关键点&#xff0c;如庄家意图、误导性行为…...

最新最详细的配置Node.js环境教程

配置Node.js环境 一、前言 &#xff08;一&#xff09;为什么要配置Node.js&#xff1f;&#xff08;二&#xff09;NPM生态是什么&#xff08;三&#xff09;Node和NPM的区别 二、如何配置Node.js环境 第一步、安装环境第二步、安装步骤第三步、验证安装第四步、修改全局模块…...

【Address Overfitting】解决过拟合的三种方法

目录 1. 收集更多数据实践方法&#xff1a;适用场景&#xff1a;优缺点&#xff1a; 2. 特征选择方法介绍&#xff1a;实践示例&#xff1a;适用场景&#xff1a;优缺点&#xff1a; 3. 正则化&#xff08;Regularization&#xff09;正则化类型&#xff1a;实践示例&#xff1…...

【缘于J2ME】

我与 J2ME 的不解之缘 那年我 25 岁&#xff0c;如今已即将退休。 在那个娱乐生活并不丰富的年代&#xff0c;每每响起「小霸王其乐无穷啊」&#xff0c;小伙伴们就会摩拳擦掌、轮番上阵&#xff0c;而我却痴迷于 G-BASIC 编程。 最大的乐趣就是对着仅有的两页说明&#xff0c…...

c#使用log4Net配置日志文件

1.# 写一个通用类 LogHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net;namespace WindowsFormsApplication22 {public class LogHelper{static ILog mylog LogManager.GetLogge…...

[ACTF2020 新生赛]Include1

题目 点击tips后&#xff1a; 使用PHP伪协议直接读取flag /?filephp://filter/readconvert.base64-encode/resourceflag.php base64解码 拿下flag flag{6cce5a3d-997a-4c8a-ba07-f6652ee462a9}...

【数据结构】树的基本:结点、度、高度与计算

树是数据结构中一种重要的非线性结构&#xff0c;广泛应用于计算机科学的各个领域&#xff0c;例如文件系统、数据库索引、编译器等。理解树的各种性质&#xff0c;如结点数、度、高度等&#xff0c;对于解决实际问题至关重要。 本文将会探讨树的基本概念&#xff0c;以及给出几…...

1.24 共享内存和信号灯集

使用共享内存信号灯集实现两个进程之间相互对话。 程序代码&#xff1a; #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stst.h> #include <fcntl.h> #…...

正则表达式以及Qt中的使用

目录 一、正则表达式 1、基本匹配&#xff1a; 2、元字符&#xff1a; 2.1 .运算符&#xff1a; 2.2 字符集&#xff1a; 2.3 重复次数&#xff1a; 2.4 量词{} 2.5 特征标群() 2.6 或运算符 2.7 \反斜线转码特殊字符 2.8 锚点 3、简写字符 4、零宽度断言 4.1 正…...

STM32简介

STM32简介 STM32是ST公司基于ARMCortex-M内核开发的32位微控制器 &#xff08;Microcontroller&#xff09; MCU微控制器、MPU微处理器、CPU中央处理器 1.应用领域 STM32常应用于嵌入式领域。 如智能车&#xff1a;循迹小车 读取光电传感器或者摄像头的数据&#xff0c;…...

【设计模式-行为型】访问者模式

一、什么是访问者模式 说起来访问者模式&#xff0c;其实很少用。我一直在思考该用什么样的例子把这个设计模式表述清晰&#xff0c;最近突然想到一个例子也许他就是访问者。港片有过很辉煌的年代&#xff0c;小的时候一直在看港片觉得拍的非常好&#xff0c;而且演员的演技也在…...

上海亚商投顾:沪指冲高回落 大金融板块全天强势 上海亚商投

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一&#xff0e;市场情绪 市场全天冲高回落&#xff0c;深成指、创业板指午后翻绿。大金融板块全天强势&#xff0c;天茂集团…...

docker部署jenkins

环境&#xff1a; centos7.9 jenkins/jenkins:lts-jdk11 1、拉去jenkins镜像&#xff0c;请指明版本号 [rootlocalhost ~]# docker pull jenkins/jenkins:lts 开始拉取 拉取完成 [rootlocalhost ~]# docker pull jenkins/jenkins:lts lts: Pulling from jenkins/jenkins 0a9…...

初阶数据结构:链表(二)

目录 一、前言 二、带头双向循环链表 1.带头双向循环链表的结构 &#xff08;1)什么是带头&#xff1f; (2)什么是双向呢&#xff1f; &#xff08;3&#xff09;那什么是循环呢&#xff1f; 2.带头双向循环链表的实现 &#xff08;1&#xff09;节点结构 &#xff08;2…...

Django实现数据库的表间三种关系

Django实现数据库的表间三种关系 1. 一对多&#xff08;One-to-Many&#xff09;关系示例&#xff1a;关系说明&#xff1a;查询示例&#xff1a; 2. 一对一&#xff08;One-to-One&#xff09;关系示例&#xff1a;关系说明&#xff1a;查询示例&#xff1a; 3. 多对多&#x…...

AI导航工具我开源了利用node爬取了几百条数据

序言 别因今天的懒惰&#xff0c;让明天的您后悔。输出文章的本意并不是为了得到赞美&#xff0c;而是为了让自己能够学会总结思考&#xff1b;当然&#xff0c;如果有幸能够给到你一点点灵感或者思考&#xff0c;那么我这篇文章的意义将无限放大。 背景 随着AI的发展市面上…...

概率密度函数(PDF)分布函数(CDF)——直方图累积直方图——直方图规定化的数学基础

对于连续型随机变量&#xff0c;分布函数&#xff08;Cumulative Distribution Function, CDF&#xff09;是概率密度函数&#xff08;Probability Density Function, PDF&#xff09;的变上限积分&#xff0c;概率密度函数是分布函数的导函数。 如果我们有一个连续型随机变量…...

OpenHarmony OTA升级参考资料记录

OpenHarmony 作为一个开源分布式操作系统,通过其强大的 OTA(Over-The-Air)升级能力,为开发者和厂商提供了一套灵活而安全的系统升级方案。 OTA升级方式 根据升级包的应用方式,OpenHarmony 的 OTA 升级可以分为两种:本地升级和网络OTA升级。 本地升级 本地升级是将已制作…...

从 Spark 到 StarRocks:实现58同城湖仓一体架构的高效转型

作者&#xff1a;王世发&#xff0c;吴艳兴等&#xff0c;58同城数据架构部 导读&#xff1a; 本文介绍了58同城在其数据探查平台中引入StarRocks的实践&#xff0c;旨在提升实时查询性能。在面对传统Spark和Hive架构的性能瓶颈时&#xff0c;58同城选择StarRocks作为加速引擎&…...

网络知识小科普--5

81、什么是组播路由? 组播路由是一种有针对性的广播形式&#xff0c;将消息发送到所选择的用户组&#xff0c;而不是将其发送到子网上的所有用户。 82、加密在网络上的重要性是什么? 加密是将信息转换成用户不可读的代码的过程。然后使用秘密密钥或密码将其翻译或解密回其…...

【JWT】jwt实现HS、RS、ES、ED签名与验签

JWT 实现 HS、RS、ES 和 ED 签名与验签 签名方式算法密钥类型签名要点验签要点HSHMAC-SHA256对称密钥- 使用 crypto/hmac 和对称密钥生成 HMAC 签名- 将 header.payload 作为数据输入- 使用同一密钥重新计算 HMAC 签名- 比较计算结果与接收到的签名是否一致RSRSA-SHA256公钥 …...

cherry USB 键盘分析

文章目录 cherry USB 键盘分析描述符结构设备描述符配置描述符集合配置描述符接口 1 描述符HID 描述符端点 IN 描述符接口 2 描述符HID 描述符端点 IN 描述符端点 OUT 描述符字符串描述符语言 ID (字符串索引为 0)厂商字符串(字符串索引为 1)产品字符串(字符串索引为 2)HID 报告…...

R语言学习笔记之高效数据操作

一、概要 数据操作是R语言的一大优势&#xff0c;用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作&#xff0c;包括排序、更新、分组汇总等。R数据操作包&#xff1a;data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具&#xff0c;可以实现快…...

高阶C语言|数组名的深度解析(数组名结合sizeof与strlen的详解)

&#x1f4ac; 欢迎讨论&#xff1a;在阅读过程中有任何疑问&#xff0c;欢迎在评论区留言&#xff0c;我们一起交流学习&#xff01; &#x1f44d; 点赞、收藏与分享&#xff1a;如果你觉得这篇文章对你有帮助&#xff0c;记得点赞、收藏&#xff0c;并分享给更多对C语言感兴…...

Vue3 v-bind 和 v-model 对比

1. 基本概念 1.1 v-bind 单向数据绑定从父组件向子组件传递数据简写形式为 : 1.2 v-model 双向数据绑定父子组件数据同步本质是 v-bind 和 v-on 的语法糖 2. 基础用法对比 2.1 表单元素绑定 <!-- v-bind 示例 --> <template><input :value"text&quo…...

科家多功能美发梳:科技赋能,重塑秀发新生

在繁忙的都市生活中,头皮健康与秀发养护成为了现代人不可忽视的日常课题。近日,科家电动按摩梳以其卓越的性能和创新设计,赢得了广大消费者的青睐。这款集科技与美学于一身的美发梳,不仅搭载了2亿负离子、6000次/分钟的声波振动等前沿技术,更融入了650nm聚能环红光与415nm强劲蓝…...

systemverilog中的force,release和assign

1 assign assign 语句用于为 wire 类型的信号提供连续赋值。它建立了一个驱动源&#xff0c;根据右侧表达式的值持续驱动 wire 信号。 module Example;wire a, b, c;assign c a & b; endmodule 2 force force 用于强制将一个信号的值设定为某个特定值&#xff0c;会覆盖…...

9【如何面对他人学习和生活中的刁难】

我们在学习的过程中&#xff0c;会遇到很多来自于他人的刁难与嘲讽&#xff0c;如果处理不好&#xff0c;这会大大影响我们的心情&#xff0c;从而影响学习的效率 我建议&#xff0c;如果你学习或生活中也遇到了类似的问题&#xff0c;不要去生气&#xff0c;更不要发生冲突&a…...

新项目传到git步骤

1.首先创建远程仓库,创建一个空白项目,即可生成一个克隆URL,可以是http也可以是SSH,copy下这个地址 2.找到项目的本机目录,进入根目录,打开git bash here命令行 3.初始化: git init 4.关联远程地址: git remote add origin "远程仓库的URL" 5.查看关联 git re…...

docker搭建redis集群(三主三从)

本篇文章不包含理论解释&#xff0c;直接开始集群&#xff08;三主三从&#xff09;搭建 环境 centos7 docker 26.1.4 redis latest &#xff08;7.4.2&#xff09; 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客&#xf…...

DDD架构实战第七讲总结:分层模型和代码组织

云架构师系列课程之DDD架构实战第七讲总结:分层模型和代码组织 一、引言 在前几讲中,我们介绍了领域驱动设计(DDD)的基本构造块和生命周期模型中的聚合。本讲将重点讨论如何将这些构造块和代码组织起来,探讨分层架构和六边形模型,以及如何组织代码结构。 二、工厂和资…...

LabVIEW太阳能照明监控系统

在公共照明领域&#xff0c;传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统&#xff0c;通过智能控制和实时监测&#xff0c;提高能源利用效率&#xff0c;降低维护成本&#xff0c;实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…...

C# 结构体

总目录 前言 在 C# 编程中&#xff0c;结构体&#xff08;struct&#xff09;是一种非常重要的数据结构&#xff0c;它为我们提供了一种轻量级的存储和操作数据的方式。本教程将带你深入了解结构体的概念、特点、使用方法&#xff0c;以及一些使用结构体的最佳实践。 一、什么…...

C++小病毒-1.0勒索(更新次数:1)

内容供学习使用,不得转卖,代码复制后请1小时内删除,此代码会危害计算机安全,谨慎操作 在C20环境下,并在虚拟机里运行此代码!&#xff0c;病毒带来后果自负! 使用时请删除在main()里的注释,并修改位置至C:\\(看我代码注释)//可以改成WIN Main() #include <iostream> #i…...

RabbitMQ---面试题

常见面试题 1.MQ的作用及应用场景 类似问题&#xff1a;项目什么情况下用到了MQ&#xff0c;为什么要用MQ MQ的主要应用场景&#xff0c;消息队列的应用场景&#xff0c;为什么说消息队列可以削峰 首先MQ是一种用来接收和转发消息的队列&#xff0c;常见的应用常见如下&…...

CSS中相对定位和绝对定位详解

文章目录 CSS中相对定位和绝对定位详解一、引言二、相对定位1、相对定位的概念1.1、代码示例 三、绝对定位1、绝对定位的概念1.1、代码示例 四、相对定位与绝对定位的区别五、使用示例六、总结 CSS中相对定位和绝对定位详解 一、引言 在CSS布局中&#xff0c;定位是一种强大的…...

【深度学习基础】多层感知机 | 权重衰减

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈PyTorch深度学习 ⌋ ⌋ ⌋ 深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上&#xff0c;结合当代大数据和大算力的发展而发展出来的。深度学习最重…...