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

Pandas:数据处理与分析

目录

一、Pandas 简介

二、Pandas 的安装与导入

三、Pandas 的核心数据结构

(一)Series

(二)DataFrame

四、Pandas 数据读取与写入

(一)读取数据

(二)写入数据

五、数据清洗与预处理

(一)处理缺失值

(二)数据去重

(三)数据转换

(四)数据合并与连接

六、数据探索与分析

(一)数据概览

(二)数据分组与聚合

(三)数据筛选与排序

七、Pandas 的实际应用案例

(一)金融数据分析

(二)销售数据分析

八、Pandas 的高级特性

(一)时间序列分析

(二)高级数据透视表

(三)数据管道操作

九、Pandas 的性能优化

十、Pandas 的局限性与注意事项

一、Pandas 简介

Pandas 是一个开源的 Python 数据分析库,由 Wes McKinney 于 2008 年创建。它的名字来源于 “panel data”(面板数据),这是一种在经济学中常用的多维数据类型。Pandas 的目标是为 Python 提供一个功能强大、灵活易用的数据结构和数据分析工具,以满足现实世界中复杂多样的数据处理需求。

Pandas 的核心优势在于其两大主要数据结构:SeriesDataFrameSeries 是一个一维的标签化数组,而 DataFrame 则是一个二维的表格型数据结构,类似于 Excel 中的表格或 SQL 中的表。这些数据结构使得数据的存储、检索、操作和分析变得更加直观和高效。

二、Pandas 的安装与导入

要使用 Pandas,首先需要确保它已正确安装在你的 Python 环境中。可以通过以下方式进行安装:

  • 使用 pip 安装 :在命令行中输入 “pip install pandas”,pip 会自动下载并安装 Pandas 及其依赖项。

  • 使用 conda 安装 :如果你使用 Anaconda 发行版,可以在命令行中输入 “conda install pandas”,conda 会从其仓库中安装合适的 Pandas 版本。

安装完成后,在 Python 脚本或交互式环境中,通过以下代码导入 Pandas:

import pandas as pd

通常我们使用 “pd” 作为 Pandas 的别名,这样在后续代码中可以更简洁地调用 Pandas 的函数和类。

三、Pandas 的核心数据结构

(一)Series

Series 是 Pandas 中的一维数据结构,类似于 NumPy 的一维数组,但带有标签。这些标签可以是任何类型,如整数、字符串等,它们为数据提供了更直观的索引方式。

创建 Series 的基本方法如下

import pandas as pd# 从列表创建 Series
data = [10, 20, 30, 40, 50]
s = pd.Series(data)
print(s)

0    10
1    20
2    30
3    40
4    50
dtype: int64

默认情况下,Series 的索引是从 0 开始的整数序列。你也可以自定义索引:

import pandas as pd# 从列表创建 Series 并自定义索引
data = [10, 20, 30, 40, 50]
index = ['a', 'b', 'c', 'd', 'e']
s = pd.Series(data, index=index)
print(s)

a    10
b    20
c    30
d    40
e    50
dtype: int64

访问 Series 中的元素可以通过索引标签或位置:

# 通过索引标签访问元素
print(s['b'])  # 输出 20# 通过位置访问元素
print(s[2])    # 输出 30

(二)DataFrame

DataFrame 是 Pandas 中的二维数据结构,类似于表格,包含行和列。它是 Pandas 最常用的数据结构之一,适合存储和处理结构化数据。

创建 DataFrame 的基本方法如下:

import pandas as pd# 从字典创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)
print(df)

      Name  Age         City
0    Alice   25     New York
1      Bob   30  Los Angeles
2  Charlie   35       Chicago
3    David   40       Houston

DataFrame 的列可以通过列名进行访问和操作

# 访问某一列
print(df['Name'])

0      Alice
1        Bob
2    Charlie
3      David
Name: Name, dtype: object

你也可以同时访问多列:

# 访问多列
print(df[['Name', 'Age']])

      Name  Age
0    Alice   25
1      Bob   30
2  Charlie   35
3    David   40

DataFrame 的行可以通过 iloc(基于整数位置索引)或 loc(基于标签索引)进行访问:

# 通过 iloc 访问第 2 行
print(df.iloc[2])
Name      Charlie
Age             35
City       Chicago
Name: 2, dtype: object
# 通过 loc 访问索引标签为 1 的行
print(df.loc[1])

输出结果:

Name          Bob
Age           30
City    Los Angeles
Name: 1, dtype: object

四、Pandas 数据读取与写入

Pandas 提供了丰富的函数用于读取和写入各种格式的数据,如 CSV、Excel、SQL 数据库等。

(一)读取数据

  • 读取 CSV 文件

import pandas as pd# 读取 CSV 文件
df = pd.read_csv('data.csv')
print(df.head())  # 显示前 5 行数据
  • 读取 Excel 文件

import pandas as pd# 读取 Excel 文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())
  • 从 SQL 数据库读取数据

import pandas as pd
import sqlite3# 连接到 SQLite 数据库
conn = sqlite3.connect('database.db')# 从数据库读取数据
df = pd.read_sql_query('SELECT * FROM table_name', conn)
print(df.head())# 关闭数据库连接
conn.close()

(二)写入数据

  • 写入 CSV 文件

import pandas as pd# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 将 DataFrame 写入 CSV 文件
df.to_csv('output.csv', index=False)
  • 写入 Excel 文件

import pandas as pd# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 将 DataFrame 写入 Excel 文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
  • 写入 SQL 数据库

import pandas as pd
import sqlite3# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 连接到 SQLite 数据库
conn = sqlite3.connect('database.db')# 将 DataFrame 写入数据库
df.to_sql('table_name', conn, if_exists='replace', index=False)# 关闭数据库连接
conn.close()

五、数据清洗与预处理

在实际数据分析中,数据往往不完整、不一致或包含错误,需要进行清洗和预处理,以确保数据的质量。Pandas 提供了许多工具来帮助完成这些任务。

(一)处理缺失值

缺失值是数据清洗中常见的问题,Pandas 提供了检测、删除和填充缺失值的函数。

  • 检测缺失值

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())

输出结果:

       A      B      C
0  False  False  False
1  False   True  False
2   True  False  False
3  False  False   True
  • 删除缺失值

# 删除包含缺失值的行
df.dropna(inplace=True)
print(df)
  • 填充缺失值

# 用 0 填充缺失值
df.fillna(0, inplace=True)
print(df)

(二)数据去重

重复数据可能导致分析结果的偏差,Pandas 提供了检测和删除重复数据的功能。

  • 检测重复数据

import pandas as pd# 创建包含重复数据的 DataFrame
data = {'A': [1, 2, 2, 4],'B': [5, 6, 6, 8],'C': [9, 10, 10, 12]
}
df = pd.DataFrame(data)# 检测重复行
print(df.duplicated())
0    False
1    False
2     True
3    False
dtype: bool
  • 删除重复数据

# 删除重复行
df.drop_duplicates(inplace=True)
print(df)

(三)数据转换

数据转换是将数据从一种形式转换为另一种形式的过程,包括数据类型转换、数值缩放、编码等。

  • 数据类型转换

import pandas as pd# 创建 DataFrame
data = {'A': [1, 2, 3, 4],'B': [5.0, 6.5, 7.2, 8.9],'C': ['apple', 'banana', 'orange', 'grape']
}
df = pd.DataFrame(data)# 将列 A 转换为浮点型
df['A'] = df['A'].astype(float)# 将列 B 转换为整型(向下取整)
df['B'] = df['B'].astype(int)print(df.dtypes)

输出结果:

A      float64
B      int32
C     object
dtype: object
  • 数值缩放

import pandas as pd# 创建 DataFrame
data = {'A': [10, 20, 30, 40, 50]
}
df = pd.DataFrame(data)# 使用 Min-Max 缩放将数据缩放到 [0, 1] 范围
df['A'] = (df['A'] - df['A'].min()) / (df['A'].max() - df['A'].min())
print(df)

输出结果:

     A
0  0.0
1  0.25
2  0.5
3  0.75
4  1.0
  • 编码分类数据

import pandas as pd# 创建包含分类数据的 DataFrame
data = {'Color': ['Red', 'Blue', 'Green', 'Red', 'Blue']
}
df = pd.DataFrame(data)# 使用 one-hot 编码转换分类数据
df = pd.get_dummies(df, columns=['Color'])
print(df)

输出结果:

   Color_Blue  Color_Green  Color_Red
0           0            0          1
1           1            0          0
2           0            1          0
3           0            0          1
4           1            0          0

(四)数据合并与连接

在数据分析中,通常需要将多个数据集合并成一个,Pandas 提供了多种方法来实现数据的合并和连接。

  • 合并数据集

import pandas as pd# 创建两个 DataFrame
data1 = {'Key': ['A', 'B', 'C', 'D'],'Value1': [10, 20, 30, 40]
}
df1 = pd.DataFrame(data1)data2 = {'Key': ['B', 'D', 'E', 'F'],'Value2': [50, 60, 70, 80]
}
df2 = pd.DataFrame(data2)# 基于 'Key' 列合并两个 DataFrame
merged_df = pd.merge(df1, df2, on='Key', how='inner')
print(merged_df)

输出结果:

  Key  Value1  Value2
0   B      20      50
1   D      40      60

how 参数可以取以下值:

  • inner :内连接(默认),只保留两个数据集中共有的键。

  • outer :外连接,保留两个数据集中的所有键,缺失值用 NaN 填充。

  • left :左连接,保留左数据集中的所有键,右数据集中缺失的键用 NaN 填充。

  • right :右连接,保留右数据集中的所有键,左数据集中缺失的键用 NaN 填充。

  • 连接数据集

import pandas as pd# 创建两个 DataFrame
data1 = {'A': [1, 2, 3],'B': [4, 5, 6]
}
df1 = pd.DataFrame(data1, index=['X', 'Y', 'Z'])data2 = {'C': [7, 8, 9],'D': [10, 11, 12]
}
df2 = pd.DataFrame(data2, index=['Y', 'Z', 'W'])# 按行连接两个 DataFrame
concatenated_df = pd.concat([df1, df2], axis=0)
print(concatenated_df)

输出结果:

     A    B     C     D
X  1.0  4.0   NaN   NaN
Y  2.0  5.0   7.0  10.0
Z  3.0  6.0   8.0  11.0
W  NaN  NaN   9.0  12.0

axis 参数指定连接的方向,axis=0 表示按行连接,axis=1 表示按列连接。

六、数据探索与分析

Pandas 提供了丰富的函数用于数据的探索和分析,帮助你快速了解数据的基本特征和统计信息。

(一)数据概览

  • 查看前几行数据

import pandas as pd# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],'Age': [25, 30, 35, 40],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}
df = pd.DataFrame(data)# 查看前 3 行数据
print(df.head(3))

输出结果:

      Name  Age         City
0    Alice   25     New York
1      Bob   30  Los Angeles
2  Charlie   35       Chicago
  • 查看数据的基本信息

# 查看数据的基本信息
df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 3 columns):#   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 0   Name    4 non-null      object1   Age     4 non-null      int64 2   City    4 non-null      object
dtypes: int64(1), object(2)
memory usage: 208.0+ bytes
  • 查看数据的统计摘要

# 查看数据的统计摘要
print(df.describe())

             Age
count   4.000000
mean   32.500000
std     6.454972
min    25.000000
25%    28.750000
50%    32.500000
75%    36.250000
max    40.000000

(二)数据分组与聚合

数据分组与聚合是数据分析中的常见操作,Pandas 提供了方便的 groupby 和聚合函数来实现这些功能。

  • 按某一列分组并求和

import pandas as pd# 创建 DataFrame
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],'Value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)# 按 'Category' 列分组,并对 'Value' 列求和
grouped_df = df.groupby('Category')['Value'].sum()
print(grouped_df)

Category
A    90
B   120
Name: Value, dtype: int64
  • 按多列分组并计算多种聚合统计量

import pandas as pd# 创建 DataFrame
data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],'Subcategory': ['X', 'Y', 'X', 'Y', 'X', 'Y'],'Value': [10, 20, 30, 40, 50, 60]
}
df = pd.DataFrame(data)# 按 'Category' 和 'Subcategory' 列分组,并计算 'Value' 列的均值和总和
grouped_df = df.groupby(['Category', 'Subcategory'])['Value'].agg(['mean', 'sum'])
print(grouped_df)

                     mean  sum
Category Subcategory         
A        X             30   90
B        Y             40  120

(三)数据筛选与排序

  • 数据筛选

import pandas as pd# 创建 DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],'Age': [25, 30, 35, 40, 28],'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Seattle']
}
df = pd.DataFrame(data)# 筛选年龄大于 30 的行
filtered_df = df[df['Age'] > 30]
print(filtered_df)
      Name  Age         City
2  Charlie   35       Chicago
3    David   40       Houston
  • 数据排序

# 按年龄降序排序
sorted_df = df.sort_values(by='Age', ascending=False)
print(sorted_df)

      Name  Age         City
3    David   40       Houston
2  Charlie   35       Chicago
1      Bob   30     Los Angeles
4      Eve   28        Seattle
0    Alice   25        New York

七、Pandas 的实际应用案例

(一)金融数据分析

假设我们有一个股票价格数据集,包含日期、开盘价、收盘价、最高价、最低价和成交量等信息。我们可以使用 Pandas 对这些数据进行分析。

import pandas as pd# 读取股票价格数据
df = pd.read_csv('stock_prices.csv')# 转换日期列为日期时间类型
df['Date'] = pd.to_datetime(df['Date'])# 将日期列设置为索引
df.set_index('Date', inplace=True)# 计算每日收益率
df['Return'] = df['Close'].pct_change() * 100# 绘制收盘价和收益率图
import matplotlib.pyplot as pltfig, ax1 = plt.subplots()ax1.plot(df['Close'], label='Close Price', color='blue')
ax1.set_xlabel('Date')
ax1.set_ylabel('Close Price', color='blue')
ax1.tick_params(axis='y', labelcolor='blue')ax2 = ax1.twinx()
ax2.plot(df['Return'], label='Daily Return', color='red', linestyle='--')
ax2.set_ylabel('Daily Return (%)', color='red')
ax2.tick_params(axis='y', labelcolor='red')plt.title('Stock Price and Daily Return')
fig.tight_layout()
plt.show()

(二)销售数据分析

假设我们有一个销售数据集,包含产品名称、销售日期、销售数量、销售价格等信息。我们可以使用 Pandas 分析产品的销售趋势和收益情况。

import pandas as pd# 读取销售数据
df = pd.read_csv('sales_data.csv')# 转换销售日期列为日期时间类型
df['Sale Date'] = pd.to_datetime(df['Sale Date'])# 按月统计销售数量和销售额
monthly_sales = df.resample('M', on='Sale Date').agg({'Quantity': 'sum','Price': 'sum'
})
monthly_sales.columns = ['Total Quantity', 'Total Sales']# 绘制月度销售趋势图
import matplotlib.pyplot as pltmonthly_sales.plot(kind='line', secondary_y='Total Sales')
plt.title('Monthly Sales Trend')
plt.xlabel('Month')
plt.ylabel('Total Quantity')
plt.gcf().axes[1].set_ylabel('Total Sales')
plt.tight_layout()
plt.show()

八、Pandas 的高级特性

(一)时间序列分析

Pandas 提供了强大的时间序列处理功能,包括日期范围生成、时间索引操作、时间序列重采样等。

  • 生成日期范围

import pandas as pd# 生成从 2023-01-01 到 2023-12-31 的日期范围
date_range = pd.date_range(start='2023-01-01', end='2023-12-31', freq='D')
print(date_range)
  • 时间序列重采样

import pandas as pd# 创建时间序列数据
index = pd.date_range(start='2023-01-01', periods=100, freq='D')
data = np.random.randn(100)
ts = pd.Series(data, index=index)# 按周重采样并计算周平均值
weekly_mean = ts.resample('W').mean()
print(weekly_mean)

(二)高级数据透视表

数据透视表是一种用于数据汇总和分析的强大工具,Pandas 提供了灵活的 pivot_table 函数来创建数据透视表。

import pandas as pd# 创建示例数据
data = {'Product': ['A', 'B', 'A', 'B', 'A', 'B'],'Category': ['X', 'X', 'Y', 'Y', 'X', 'Y'],'Region': ['North', 'South', 'East', 'West', 'North', 'South'],'Sales': [100, 150, 200, 180, 120, 160]
}
df = pd.DataFrame(data)# 创建数据透视表,按产品和类别汇总销售额
pivot_table = pd.pivot_table(df, values='Sales', index='Product', columns='Category', aggfunc='sum', fill_value=0)
print(pivot_table)

Category   X   Y
Product        
A        220 200
B        150 340

(三)数据管道操作

数据管道是一种将多个数据处理步骤组合在一起的技术,Pandas 支持使用 apply 函数实现数据管道操作。

import pandas as pd# 创建示例数据
data = {'Text': ['apple', 'banana', 'orange', 'grape', 'pineapple']
}
df = pd.DataFrame(data)# 定义数据处理管道函数
def text_processing(text):# 转换为小写text = text.lower()# 替换特定字符text = text.replace('a', 'X')# 返回处理后的文本return text# 应用数据处理管道
df['Processed Text'] = df['Text'].apply(text_processing)
print(df)
          Text Processed Text
0        apple         Xpple
1       banana       bXnXnX
2       orange        orgXnge
3        grape        grXpe
4  pineapple    pXnXpXle

九、Pandas 的性能优化

在处理大规模数据时,Pandas 的性能可能会受到挑战。以下是一些优化 Pandas 性能的技巧:

  • 使用合适的数据类型 :选择合适的数据类型可以减少内存占用,提高计算速度。例如,将整数列转换为更小的数据类型:

import pandas as pd# 创建 DataFrame
df = pd.DataFrame({'A': np.random.randint(0, 100, size=1000000)
})# 转换列 A 的数据类型为更小的整数类型
df['A'] = df['A'].astype(np.int8)
  • 避免使用 apply 函数apply 函数在大多数情况下比矢量化操作慢得多。尽量使用 Pandas 的内置矢量化函数:

import pandas as pd# 创建 DataFrame
df = pd.DataFrame({'A': np.random.randn(1000000)
})# 使用矢量化操作计算平方(推荐)
df['A_squared'] = df['A'] ** 2# 使用 apply 函数计算平方(不推荐)
# df['A_squared'] = df['A'].apply(lambda x: x ** 2)
  • 使用 chunksize 读取大文件 :当处理无法一次性加载到内存的大文件时,可以使用 chunksize 参数分块读取:

import pandas as pd# 分块读取 CSV 文件
chunk_size = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunk_size):# 对每个数据块进行处理process(chunk)

十、Pandas 的局限性与注意事项

尽管 Pandas 功能强大,但它也有一些局限性和需要注意的地方:

  • 处理大规模数据的性能瓶颈 :对于非常大的数据集(如数十亿条记录),Pandas 可能会遇到性能瓶颈。在这种情况下,可以考虑使用分布式计算框架(如 Dask、Spark)或数据库解决方案。

  • 复杂的文本处理能力有限 :对于复杂的文本处理任务,Pandas 的功能可能不如专门的文本处理库(如 NLTK、spaCy)强大。在这种情况下,可以结合使用 Pandas 和其他文本处理库。

  • 实时数据处理的适用性有限 :Pandas 主要设计用于批处理数据,对于实时数据处理任务可能不太适用。实时数据处理通常需要使用流处理框架(如 Apache Kafka、Apache Flink)

相关文章:

Pandas:数据处理与分析

目录 一、Pandas 简介 二、Pandas 的安装与导入 三、Pandas 的核心数据结构 &#xff08;一&#xff09;Series &#xff08;二&#xff09;DataFrame 四、Pandas 数据读取与写入 &#xff08;一&#xff09;读取数据 &#xff08;二&#xff09;写入数据 五、数据清洗…...

非阻塞式IO-Java NIO

一、NIO简介 Java NIO是Java1.4引入的一种新的IO API&#xff0c;它提供了非阻塞式IO&#xff0c;选择器、通道、缓冲区等新的概念和机制。相比传统的IO&#xff0c;多出的N不单纯是新的&#xff0c;更表现在Non-blocking非阻塞&#xff0c;NIO具有更高的并发性、可扩展性以及…...

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…...

(二)Linux下基本指令 2

【知识预告】 16. date 指令 17. cal 指令 18. find 指令 19. which指令 20. whereis 指令 21. alias 指令 22. grep 指令 23. zip/unzip 指令 24. tar 指令 25. bc 指令 26. uname ‒r 指令 27. 重要的⼏个热键 28. 关机 16 date 指令 指定格式显⽰时间&#xff1a;date %Y-…...

[ctfshow web入门] web70

信息收集 使用cinclude("php://filter/convert.base64-encode/resourceindex.php");读取的index.php error_reporting和ini_set被禁用了&#xff0c;不必管他 error_reporting(0); ini_set(display_errors, 0); // 你们在炫技吗&#xff1f; if(isset($_POST[c])){…...

第三章 Freertos智能小车遥控控制

本文基于小车APP&#xff0c;通过与蓝牙模块进行连接&#xff0c;发送特定信号给小车主控&#xff0c;实现对小车的模式切换、灯光控制、前进、后退、左右控制。目前还未加入电机控制&#xff0c;具体的电机控制效果还不能实现&#xff0c;但是可以进行模式切换与灯光控制。 …...

Spring 6.x 详解介绍

Spring 6.x 是 Spring Framework 的最新主版本&#xff0c;于2022年11月正式发布&#xff0c;标志着对 Java 17 和 Jakarta EE 9 的全面支持&#xff0c;同时引入了多项革新性特性&#xff0c;旨在优化性能、简化开发并拥抱现代技术趋势。 一、核心特性与架构调整 Java 17 与 J…...

阿里云OSS+CDN自动添加文章图片水印配置指南

文章目录 一、环境准备二、OSS水印样式配置三、CDN关键配置四、Handsome主题自动化配置五、水印效果验证六、常见问题排查 一、环境准备 资源清单 阿里云OSS Bucket&#xff08;绑定自定义域名 static.example.com&#xff09;阿里云CDN加速域名&#xff0c;回源为Bucket的域名…...

hot100-子串-JS

一、560.和为k的子串 560. 和为 K 的子数组 提示 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2…...

LeetCode 270:在二叉搜索树中寻找最接近的值(Swift 实战解析)

文章目录 摘要描述题解答案题解代码分析示例测试及结果时间复杂度空间复杂度总结 摘要 在日常开发中&#xff0c;我们经常需要在一组有序的数据中快速找到最接近某个目标值的元素。LeetCode 第 270 题“Closest Binary Search Tree Value”正是这样一个问题。本文将深入解析该…...

《操作系统真象还原》第十三章——编写硬盘驱动程序

文章目录 前言硬盘及分区表创建从盘及获取安装的磁盘数创建磁盘分区表硬盘分区表浅析 编写硬盘驱动程序硬盘初始化修改interrupt.c编写ide.h编写ide.c 实现thread_yield和idle线程修改thread.c 实现简单的休眠函数修改timer.c 完善硬盘驱动程序继续编写ide.c 获取硬盘信息&…...

DNS服务实验

该文章将介绍DNS服务的正向和反向解析实验、主从实验、转发服务器实验以及Web解析实验 正向解析实验&#xff1a;将域名解析为对应的IP地址 反向解析实验&#xff1a;将IP地址解析为对应的域名 主从实验&#xff1a;主服务器区域数据文件发送给从服务器&#xff0c;从服务器…...

SierraNet M1288网络损伤功能显著助力GPU互联网络的测试验证,包含包喷洒,LLR等复杂特性的验证测试

SierraNet M1288 以太网协议分析仪 产品概述 SierraNet M1288 是一款兼具高性价比与全面功能的以太网和光纤通道数据捕获及协议验证系统。它能够以全线路速率 100% 记录所有流量&#xff0c;并借助 InFusion™ 工具实现高级错误注入和流量破坏功能&#xff0c;为开发人员和协议…...

HunyuanCustom:文生视频框架论文速读

《HunyuanCustom: A Multimodal-Driven Architecture for Customized Video Generation》论文讲解 一、引言 本文提出了 HunyuanCustom&#xff0c;这是一个基于多模态驱动的定制化视频生成框架。该框架旨在解决现有视频生成模型在身份一致性&#xff08;identity consistenc…...

HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对

HTTP、HTTPS、SSH区别以及如何使用ssh-keygen生成密钥对 HTTP (HyperText Transfer Protocol) 定义&#xff1a;应用层协议&#xff0c;用于通过Web传输数据&#xff08;如网页、文件&#xff09;默认端口&#xff1a;80机制&#xff1a;客户端发送Get请求&#xff0c;服务器…...

如何启动vue项目及vue语法组件化不同标签应对的作用说明

如何启动vue项目及vue语法组件化不同标签应对的作用说明 提示&#xff1a;帮帮志会陆续更新非常多的IT技术知识&#xff0c;希望分享的内容对您有用。本章分享的是node.js和vue的使用。前后每一小节的内容是存在的有&#xff1a;学习and理解的关联性。【帮帮志系列文章】&…...

Ubuntu22.04安装显卡驱动/卸载显卡驱动

报错 今日输入nvidia-smi报错,在安装了535和550,包括560都没办法解决,但是又怕乱搞导致环境损坏,打算把显卡卸载然后重新安装系统默认推荐版本的显卡驱动 qinqin:~$ nvidia-smi Failed to initialize NVML: Driver/library version mismatch NVML library version: 560.35卸载…...

【桌面】【输入法】常见问题汇总

目录 一、麒麟桌面系统输入法概述 1、输入法介绍 2、输入法相关组件与服务 3、输入法调试相关命令 3.1、输入法诊断命令 3.2、输入法配置重新加载命令 3.3、启动fcitx输入法 3.4、查看输入法有哪些版本&#xff0c;并安装指定版本 3.5、重启输入法 3.6、查看fcitx进程…...

Web3 初学者学习路线图

目录 🌟 Web3 初学者学习路线图 🧩 第一步:搞懂 Web3 是什么 ✅ 学什么? 🔧 推荐工具: 🎥 推荐学习: 🛠️ 第二步:了解智能合约和 Solidity(核心技能) ✅ 学什么? 🔧 工具: 📘 推荐课程: 🌐 第三步:连接前端和区块链,创建简单 DApp ✅ 学…...

python打卡day21

常见的降维算法 知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 之前学了特征降维的两个思路&#xff0c;特征筛选&#xff08;如树模型重要性、方差筛选&#xff09;和特征组合&#xff08;如SVD/PCA&#xff09;。 现在引入特征降维的另一种分类&#xff1a;无/有…...

KNOWLEDGE-BASED SYSTEMS(KBS期刊)投稿经验分享

期刊介绍&#xff1a; KBS是计算机一区&#xff0c;CCF-c期刊&#xff0c;&#xff08;只看大类分区&#xff0c;小类不用看&#xff0c;速度很快&#xff0c;桌拒比较多&#xff0c;能送审就机会很大&#xff01;&#xff09; 具体时间流程&#xff1a; 7月初投稿&#xf…...

vue使用rules实现表单校验——校验用户名和密码

编写校验规则 常规校验 const rules {username: [{ required: true, message: 请输入用户名, trigger: blur },{ min: 5, max: 16, message: 长度在 5 到 16 个字符, trigger: blur }],password: [{ required: true, message: 请输入密码, trigger: blur },{ min: 5, max: 1…...

[CANN] 安装软件依赖

环境 昊算平台910b NPUdocker容器 安装步骤 安装依赖-安装CANN&#xff08;物理机场景&#xff09;-软件安装-开发文档-昇腾社区 apt安装miniconda安装 Apt 首先进行换源&#xff0c;参考昇腾NPU容器内 apt 换源 Miniconda 安装miniconda mkdir -p ~/miniconda3 wget …...

代码随想录算法训练营第三十七天

LeetCode题目: 300. 最长递增子序列674. 最长连续递增序列718. 最长重复子数组2918. 数组的最小相等和(每日一题) 其他: 今日总结 往期打卡 300. 最长递增子序列 跳转: 300. 最长递增子序列 学习: 代码随想录公开讲解 问题: 给你一个整数数组 nums &#xff0c;找到其中最长…...

Qt开发经验 --- 避坑指南(11)

文章目录 [toc]1 QtCreator同时运行多个程序2 刚安装的Qt编译报错cannot find -lGL: No such file or directory3 ubuntu下Qt无法输入中文4 Qt版本发行说明5 Qt6.6 VS2022报cdb.exe无法定位dbghelp.dll输入点6 Qt Creator13.0对msvc-qmake-jom.exe支持有问题7 银河麒麟系统中ud…...

vue 组件函数式调用实战:以身份验证弹窗为例

通常我们在 Vue 中使用组件&#xff0c;是像这样在模板中写标签&#xff1a; <MyComponent :prop"value" event"handleEvent" />而函数式调用&#xff0c;则是让我们像调用一个普通 JavaScript 函数一样来使用这个组件&#xff0c;例如&#xff1a;…...

青藏高原东北部祁连山地区250m分辨率多年冻土空间分带指数图(2023)

时间分辨率&#xff1a;10年 < x < 100年空间分辨率&#xff1a;100m - 1km共享方式&#xff1a;开放获取数据大小&#xff1a;24.38 MB数据时间范围&#xff1a;近50年来元数据更新时间&#xff1a;2023-10-08 数据集摘要 多年冻土目前正在经历大规模的退化&#xff0c…...

[6-2] 定时器定时中断定时器外部时钟 江协科技学习笔记(41个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 V 30 31 32 33 34 35 36 37 38 39 40 41...

抖音视频去水印怎么操作

在抖音上保存或分享视频时&#xff0c;水印通常会自动添加。如果想去除水印&#xff0c;可以尝试以下方法&#xff0c;但请注意尊重原创作者的版权&#xff0c;仅限个人合理使用。 方法 1&#xff1a;使用第三方去水印工具&#xff08;手机/电脑均可&#xff09; 复制视频链接 …...

Java并发编程

Java并发编程的核心挑战 线程安全与数据竞争 线程安全的概念及其重要性数据竞争的产生原因及常见场景如何通过同步机制&#xff08;如锁、原子类&#xff09;避免数据竞争 // 示例&#xff1a;使用synchronized关键字实现线程安全 public class Counter {private int count …...

【ospf综合实验】

拓扑图&#xff1a;...

NVMe控制器之仿真平台搭建

本设计采用Verilog HDL语言进行实现并编写测试激励&#xff0c;仿真工具使用Mentor公司的QuestaSim 10.6c软件完成对关键模块的仿真验证工作&#xff0c;由于是基于Xilinx公司的Kintex UltraScale系列FPGA器件实现的&#xff0c;因此使用Xilinx公司的Vivado2019.1设计套件工具进…...

深入探究 InnoDB 的写失效问题

在 MySQL 数据库的世界中&#xff0c;InnoDB 存储引擎凭借其卓越的性能和可靠性&#xff0c;成为众多应用的首选。然而&#xff0c;如同任何复杂的系统一样&#xff0c;InnoDB 也面临着一些挑战&#xff0c;其中写失效问题便是一个值得深入探讨的关键议题。本文将带您全面了解 …...

边缘计算从专家到小白

“云-边-端”架构 “云” &#xff1a;传统云计算的中心节点&#xff0c;是边缘计算的管控端。汇集所有边缘的感知数据、业务数据以及互联网数据&#xff0c;完成对行业以及跨行业的态势感知和分析。 “边” &#xff1a;云计算的边缘侧&#xff0c;分为基础设施边缘和设备边缘…...

智能商品推荐系统技术路线图

智能商品推荐系统技术路线图 系统架构图 --------------------------------------------------------------------------------------------------------------- | 用户交互层 (Presentation Layer) …...

SpringMVC面试内容

SpringMVC运行流程 SpringMVC的运行流程SpringBoot Vue交互流程HTTP 的 GET 和 POST 区别跨域请求是什么&#xff1f;有什么问题&#xff1f;怎么解决?浏览器访问资源没有响应,怎么排查Cookie的理解Session的理解 Cookie和Session的区别 SpringMVC的运行流程 1、域名解析…...

Python 核心概念速查清单

本文大纲 1. 变量与字符串 (Variables and Strings) 变量 (Variables): 用于存储值。字符串 (String): 由单引号或双引号包围的字符序列。 示例:打印 “Hello world!” print("Hello world!")使用变量打印: msg = "Hello world!" print(msg)字符串拼接…...

Unity.UGUI DrawCall合批笔记

前言 昨天在通过FrameDebug查看DrawCall时&#xff0c;发现批次结果与理解中的不一致&#xff0c;又去补充了一下这方面知识&#xff0c;笔记记录下&#xff0c;只关乎UGUI。 基础场景 首先列一下无法合批的一些基础场景 1.图片无图集或图集不同&#xff0c;图片是运行时生成的…...

高精度加减

1、高精度加法 主要有以下几步&#xff1a; 输入处理&#xff1a;使用字符串来存储大整数&#xff0c;避免数值范围限制。对齐数字&#xff1a;确保两个数字的数位对齐&#xff08;前面补零&#xff09;。逐位相加&#xff1a;从最低位开始&#xff0c;逐位相加并处理进位。最…...

day21python打卡

知识点回顾&#xff1a; LDA线性判别PCA主成分分析t-sne降维 还有一些其他的降维方式&#xff0c;也就是最重要的词向量的加工&#xff0c;我们未来再说 作业&#xff1a; 自由作业&#xff1a;探索下什么时候用到降维&#xff1f;降维的主要应用&#xff1f;或者让ai给你出题&…...

DataBinding与Kotlin优化视图绑定

在 Android 开发中&#xff0c;DataBinding 与 Kotlin 的结合可以显著提升代码的简洁性和可维护性&#xff0c;彻底摆脱传统 findViewById 的繁琐操作。以下是如何通过 DataBinding 优化视图绑定的完整指南&#xff1a; 一、为何要告别 findViewById&#xff1f; 模板代码冗余…...

CDGP主观题题库与范例解答

本文共8400字,涉及数据建模、数据安全、主数据、数据架构等主观题解答范例 数据建模题目 初次访问网购网站的访客,如试图在网站上购物,则需要申请会员。申请会员时需要填写会员姓名、性别、身份证号码、联系电话、会员ID、密码等信息。会员申请成功后,通过会员ID和密码便…...

2.商户查询缓存

2.0 问题记录 2.0.1 为什么要给缓存 TTL 1. 防止内存泄漏&#xff1a;如果不设置过期时间&#xff0c;缓存数据会永久存在于 Redis 中&#xff0c;随着时间推移可能导致 Redis 内存耗尽。2. 数据一致性&#xff1a;设置合理的过期时间可以确保缓存不会长期存储过时数据&#…...

vs python“““标记注释报错,vs使用自带环境安装 python第三方库

文章目录 vs python"""标记注释报错vs使用自带环境安装 python第三方库 vs python"""标记注释报错 解决方法&#xff1a; 切换编码 文件-高级保存选项-编码处选择下拉菜单中的“Unicode(UTF-8带签名)-代码页65001”-确定 这里更详细&#xff1a;…...

区块链技术中的Java SE实战:从企业级应用到5大核心问题解析

区块链技术中的Java SE实战&#xff1a;从企业级应用到5大核心问题解析 问题1&#xff1a;如何在Java SE中实现区块链的基本数据结构&#xff1f; 回答1&#xff1a; 区块链的核心数据结构是链式区块&#xff0c;每个区块包含数据、哈希值以及前一个区块的哈希值。以下是一个…...

数据结构—(概述)

目录 一 数据结构&#xff0c;相关概念 1. 数据结构&#xff1a; 2. 数据(Data): 3. 数据元素(Data Element): 4. 数据项&#xff1a; 5. 数据对象(Data Object): 6. 容器&#xff08;container&#xff09;&#xff1a; 7. 结点&#xff08;Node&#xff09;&#xff…...

UE5 PCG学习笔记

https://www.bilibili.com/video/BV1onUdY2Ei3/?spm_id_from333.337.search-card.all.click&vd_source707ec8983cc32e6e065d5496a7f79ee6 一、安装PCG 插件里选择以下进行安装 移动目录后&#xff0c;可以使用 Update Redirector References&#xff0c;更新下&#xff0…...

Harness: 全流程 DevOps 解决方案,让持续集成如吃饭般简单

引言 在当今快速发展的软件开发世界中,高效的 DevOps 工具变得越来越重要。Harness 作为一个开源的运维平台,为开发和运维团队提供了从代码托管到 CI/CD 的全流程解决方案,同时实现自动化的开发环境和制品管理。这种集中化的工具可以显著减少运维难度,提高团队效率,真正解…...

Windows:Powershell的使用

文章目录 零、格式化输出命令1、Format-List&#xff08;别名&#xff1a;fl&#xff09; 一、服务管理SC命令二、软件管理命令三、权限管理命令1、Get-Acl2、Set-Acl 总结 零、格式化输出命令 1、Format-List&#xff08;别名&#xff1a;fl&#xff09; 可通过管道符传递对象…...

AIGC时代大模型幻觉问题深度治理:技术体系、工程实践与未来演进

文章目录 一、幻觉问题的多维度透视与产业冲击1.1 幻觉现象的本质特征与量化评估1.2 产业级影响案例分析 二、幻觉问题的根源性技术解剖2.1 数据污染的复合效应2.1.1 噪声数据类型学分析2.1.2 数据清洗技术实现 2.2 模型架构的先天缺陷2.2.1 注意力机制的局限性2.2.2 解码策略的…...