Pandas入门篇(二)-------Dataframe篇5(进阶)(Dataframe的时间序列Dataframe最终篇!!)(机器学习前置技术栈)

目录

  • 概述
  • 一、pandas的日期类型
    • (一)datetime64类型的特点
    • (二) 时间序列的创建
      • 1.从字符串创建datetime64类型
      • 2. 整数(Unix时间戳)创建datetime64类型
      • 3.导入数据时直接转换
    • (三)datetime64作为索引
  • 二、运用时间序列索引获取数据
    • 1.选择特定日期的数据
    • 2. 切片选择时间范围
    • 3. between_time(),at_time()
      • between_time()
      • at_time()
  • 三、重采样时间序列数据
    • resample() 函数
    • 1. 常用的时间规则
    • 2.将日数据重采样为月数据
    • 3. resample后面可以接apply函数,传入自定义函数
    • 4. 注意事项:
  • 四、移动窗口操作
    • rolling() 方法
    • 1.在单列上执行滚动操作
    • 2. 在多个列上执行滚动操作
    • 2.对不同列使用不同的聚合函数
    • 3. 应用自定义函数
    • 4. 注意事项:
  • 五、时间差异计算
    • 1. diff()函数
    • 2.diff()函数在时间序列上的使用
  • 六、时间戳转换和格式化
    • 1. 将字符串转换为日期时间对象
    • 2. 格式化日期时间对象
    • 4. 时区转换
    • 5.注意事项:
  • 下篇内容

概述

使用DataFrame处理时间序列数据时,你可以轻松地进行时间戳的转换和格式化。Pandas提供了丰富的函数和方法来处理日期和时间,如pd.to_datetime()用于将字符串转换为日期时间对象,.dt访问器用于访问日期时间的各个部分,以及strftime()方法用于将日期时间对象格式化为字符串。这些功能使得在DataFrame中处理时间序列数据变得简单而直观。

此外,DataFrame还支持基于时间的索引操作,如between_time()和at_time()。这些方法允许你根据特定的时间范围或时间点来筛选数据,从而快速提取出感兴趣的时间段内的数据。这对于时间序列分析、数据可视化以及预测建模等任务非常有用。

总之,DataFrame的时间序列是数据分析中不可或缺的一部分。通过利用Pandas库的功能,你可以轻松地处理、分析和可视化时间序列数据,从而发现数据中的模式和趋势,为决策提供有力支持。

一、pandas的日期类型

Pandas中的日期类型主要是datetime64,这是一个固定宽度的数据类型,用于表示日期和时间。datetime64类型允许存储从1677年到2262年之间的日期和时间,以纳秒为时间单位。

(一)datetime64类型的特点

固定宽度:datetime64类型在内存中占用固定数量的字节,这有助于高效地存储和处理时间序列数据。

纳秒精度:datetime64类型使用纳秒作为时间单位,因此可以表示非常精确的时间戳。

时间范围:如前所述,datetime64可以表示从1677年到2262年之间的日期和时间。

时区感知:Pandas支持时区感知的datetime64类型,这对于处理跨越不同时区的数据非常有用。

(二) 时间序列的创建

你可以使用pd.to_datetime()函数将字符串、整数、浮点数或其他数据类型转换为datetime64类型。这个函数非常灵活,可以处理多种格式的日期和时间字符串。

1.从字符串创建datetime64类型

import pandas as pd  # 从字符串创建datetime64类型  
date_string = '2023-10-23'  
date = pd.to_datetime(date_string)  
print(date)  

运行结果:
在这里插入图片描述

2. 整数(Unix时间戳)创建datetime64类型

# 从整数(Unix时间戳)创建datetime64类型  
timestamp = 1697606400  # 示例:2023-10-23 00:00:00的Unix时间戳  
dt_from_timestamp = pd.to_datetime(timestamp, unit='s')  
print(dt_from_timestamp)

运行结果:
在这里插入图片描述

3.导入数据时直接转换

使用parse_dates参数直接把需要转换的列转化为datetime64

ebola = pd.read_csv('/export/data/pandas_data/country_timeseries.csv', parse_dates=['Date'])
ebola

运行结果:
在这里插入图片描述

(三)datetime64作为索引

将datetime64类型的列设为索引列

# 将Date类设为索引列
ebola.set_index('Date')

运行结果
在这里插入图片描述
获取2014年12月的数据

二、运用时间序列索引获取数据

导入数据:

crime = pd.read_csv('/export/data/pandas_data/crime.csv',parse_dates=['REPORTED_DATE'],index_col='REPORTED_DATE')
crime =crime.sort_index()
crime

运行结果:
在这里插入图片描述

利用时间索引,你可以像处理普通索引一样对数据进行切片。

1.选择特定日期的数据

# 提取2012年1月2日的数据
crime['2012-01-02']

运行结果:
在这里插入图片描述

# 提取2012年1月的数据
crime['2012-01']

运行结果:
在这里插入图片描述

2. 切片选择时间范围

# 提取2012年1月-2月的数据的数据
crime['2012-01':'2012-02'] # 新版已停用
crime.loc['2012-01':'2012-02'] # 标准写法

运行结果:
在这里插入图片描述

注意:
运用时间序列获取数据的时候,先对时间序列排序在切片运行效率会提高很多

3. between_time(),at_time()

between_time() 和 at_time() 是两个用于根据时间筛选DataFrame中特定时间段的便捷方法,它们特别适用于那些索引为日期时间类型(DatetimeIndex)的DataFrame。这两个方法允许你基于时间进行快速筛选,无需复杂的布尔索引或查询。

between_time()

between_time() 方法用于选择指定开始时间和结束时间之间的所有行。

  • 用法:
DataFrame.between_time(start_time, end_time, include_start=True, include_end=True, tz=None)
  • 参数:

    • start_time:字符串,表示开始时间,格式为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • end_time:字符串,表示结束时间,格式同样为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • include_start:布尔值,默认为 True,表示是否包含开始时间。
    • include_end:布尔值,默认为 True,表示是否包含结束时间。
    • tz:时区字符串或 None,用于指定时区。如果DataFrame的索引已经有时区信息,这个参数可以用来覆盖它。
import pandas as pd  # 创建一个示例DataFrame,索引为日期时间  
dates = pd.date_range('2023-01-01', periods=10, freq='H')  # 每小时一个数据点  
data = {'value': range(10)}  
df = pd.DataFrame(data, index=dates)  # 筛选早上8点到9点之间的数据  
between_8_and_9 = df.between_time('8:00', '9:00')  
print(between_8_and_9)

运行结果:
在这里插入图片描述

at_time()

at_time() 方法用于选择指定时间的所有行。

  • 用法:
DataFrame.at_time(time, tz=None)
  • 参数:

    • time:字符串,表示要筛选的时间,格式为 ‘HH:MM’ 或 ‘HH:MM:SS’。
    • tz:时区字符串或 None,与 between_time() 中的 tz 参数相同。

仍然使用上面的DataFrame,并且筛选出早上8点的所有行:

# 筛选早上8点的数据  
at_8 = df.at_time('8:00')  
print(at_8)

运行结果:
在这里插入图片描述

这两个方法都返回一个新的DataFrame,其中只包含满足时间条件的行。它们对于处理时间序列数据,特别是那些需要基于特定时间窗口进行筛选的数据集时,非常有用。

三、重采样时间序列数据

resample() 函数

resample()是用于时间序列数据重采样的强大工具。它允许将时间序列数据从一个频率转换为另一个频率,并通过聚合函数(如求和、均值、最大值等)来减少数据的粒度。这个函数通常应用于 Pandas 的 DataFrame 或 Series 对象,这些对象有一个 DatetimeIndex。

1. 常用的时间规则

  • ‘D’ 或 ‘B’:每日频率,‘D’ 包括周末,‘B’ 仅包括工作日(周一至周五)。
  • ‘H’:每小时频率。
  • ‘T’ 或 ‘min’:每分钟频率。
  • ‘S’:每秒频率。
  • ‘M’:月末频率,即每个日历月末。
  • ‘SM’:每月的开始,即每个月的第一天。
  • ‘BM’:每个业务月(工作日)的月末。
  • ‘BMS’:每个业务月(工作日)的开始。
  • ‘Q’:季度末频率,即每个日历季度的末尾。
  • ‘BQ’:每个业务季度的末尾。
  • ‘QS’:每个季度的开始。
  • ‘BQS’:每个业务季度的开始。
  • ‘A’ 或 ‘Y’:年末频率,即每年的最后一个日历日。
  • ‘AS’ 或 ‘YS’:每年的开始。
  • ‘BA’ 或 ‘BY’:每个业务年的末尾。
  • ‘BAS’ 或 ‘BYS’:每个业务年的开始。
  • ‘W-MON’:每周一频率。你可以使用 ‘W-TUE’、‘W-WED’、‘W-THU’、‘W-FRI’、‘W-SAT’ 或 ‘W-SUN’ 来指定每周的任意一天。
  • ‘W’:每周频率,默认从周日开始,但可以通过 offset 参数进行更改。
  • 自定义偏移量:你还可以创建自定义的日期偏移量,例如 pd.offsets.MonthEnd(3) 表示每个月的第三个日历日的末尾。

2.将日数据重采样为月数据

# 求每个月犯罪的总数
crime.resample('M')['IS_CRIME'].sum()

运行结果:
在这里插入图片描述

3. resample后面可以接apply函数,传入自定义函数

# 计数自定义函数
def my_count(x):return x.count()
# 求每个季度犯罪的总数
crime.resample('QS')['IS_CRIME'].apply(my_count)

运行结果:
在这里插入图片描述

4. 注意事项:

  • resample() 函数默认不对数据进行任何聚合,它只是改变了数据的索引频率。为了实际进行聚合操作,你需要链式调用一个聚合函数,如 mean(), sum(), max(), min() 等,或者使用 agg() 函数来指定多个聚合操作。
  • 如果你的 DataFrame 有一个非时间戳的索引,你需要首先将其设置为时间戳索引,才能使用 resample() 函数。这可以通过 set_index() 方法来实现,如上面的示例所示。
  • 在使用 resample() 时,确保你的数据已经按时间顺序排序,因为重采样操作依赖于数据的顺序。如果数据未排序,你可以使用 sort_index() 方法先对数据进行排序。

四、移动窗口操作

rolling() 方法

rolling() 方法用于在 DataFrame 或 Series 对象上执行滚动(或窗口)操作。滚动操作允许你对时间序列数据或其他连续数据执行一系列计算,这些计算是在一个固定大小的窗口上进行的,窗口会沿着数据移动。这对于计算诸如滚动平均值、滚动标准差、滚动最大值等统计量非常有用。

1.在单列上执行滚动操作

# 创建一个示例 DataFrame  
data = {  'date': pd.date_range(start='2023-01-01', periods=10),  'price': [100, 101, 105, 104, 107, 106, 108, 110, 112, 111]  ,'price2': [110, 121, 135, 144, 157, 166, 178, 180, 192, 110] 
}  
df = pd.DataFrame(data)  
df.set_index('date', inplace=True)  # 计算五天的滚动平均值  
rolling_mean = df['price'].rolling(window=5).mean()  rolling_mean

在这里插入图片描述

2. 在多个列上执行滚动操作

如果你的 DataFrame 有多个列,并且你想要对多列都执行滚动操作, rolling() 后指定多列。

# 对 DataFrame 中的每一列计算五天的滚动平均值  
rolling_df = df.rolling(window=5)[['price','price2']].mean()  
rolling_df

运行结果:
在这里插入图片描述

2.对不同列使用不同的聚合函数

同分组聚合一样使用agg函数,进行对不同的列进行不同的操作

rolling_df = df.rolling(window=5)[['price','price2']].agg({'price': 'sum', 'price2': 'mean'})  
rolling_df

运行结果:
在这里插入图片描述

3. 应用自定义函数

还可以使用 apply() 方法与 rolling() 结合来应用自定义函数。

# 自定义函数来计算滚动窗口中的值之和的平方  
def custom_func(series):  return (series.sum()) ** 2  # 应用自定义函数到滚动窗口  
rolling_custom = df['price'].rolling(window=5).apply(custom_func)  print(rolling_custom)

运行结果:
在这里插入图片描述

4. 注意事项:

  • rolling() 方法默认不会改变原始数据,而是返回一个新的 DataFrame 或 Series 对象,其中包含了滚动操作的结果。
  • window 参数指定了滚动窗口的大小。它必须是一个整数,表示窗口中包含的元素的数量。
  • 滚动操作会忽略窗口大小小于窗口中元素数量的部分,因此在结果的开头,你会看到一些 NaN 值,这些值表示没有足够的数据来计算滚动统计量。
  • 你可以通过链式调用其他方法(如 dropna())来删除这些 NaN 值。

五、时间差异计算

1. diff()函数

方法在 Pandas 中是一个非常实用的函数,用于计算序列中相邻元素之间的差异。这个方法在处理时间序列数据、金融数据以及其他需要计算相邻元素差值的场景中非常有用。

  • diff() 方法的基本格式:
    对于 DataFrame:DataFrame.diff(periods=1, axis=0, fill_value=None)
    对于 Series:Series.diff(periods=1)
  • 参数说明:
    • periods:指定要计算差值的时期数,可以是正数或负数,默认为1。正数表示后一个元素减去前一个元素,负数则表示前一个元素减去后一个元素。
    • axis:对于 DataFrame,此参数指定计算差值的轴向。如果为0或者’index’,则上下移动;如果为1或者’columns’,则左右移动。默认值为0,即沿着行方向(索引)进行计算。
    • fill_value:用于指定缺失值填充值。如果原数据中存在缺失值(NaN),可以用此参数指定的值进行填充,然后再进行差值计算。

2.diff()函数在时间序列上的使用

diff() 函数在 Pandas 中用于计算时间序列数据中相邻观测值之间的差异。对于时间序列数据,这通常意味着计算连续时间点之间值的变化。这种变化可能代表增长率、速度、加速度或其他任何需要测量连续时间点之间变化量的指标。

  • 计算日变化量
    假设你有一个包含每日股票价格的时间序列 DataFrame,你想要计算每日价格变化。
import pandas as pd  
import numpy as np  # 创建一个包含日期和价格的示例 DataFrame  
dates = pd.date_range(start='2023-01-01', periods=5)  
prices = [100, 102, 105, 103, 106]  
df = pd.DataFrame({'date': dates, 'price': prices})  
df.set_index('date', inplace=True)  # 计算每日价格变化  
daily_changes = df['price'].diff()  daily_changes

运行结果:
在这里插入图片描述
输出会显示每日价格与前一天价格的差异。

  • 计算周变化量
    如果你想计算每周的变化量,你可以通过调整 periods 参数来实现。
# 计算每周价格变化(假设数据是每日的,并且每周有7天)  
weekly_changes = df['price'].diff(periods=7)  # 注意:这将只在有足够的数据点来计算7天差异时返回非NaN值  
weekly_changes

在这里插入图片描述

  • 处理缺失值
    如果时间序列中存在缺失值,diff() 函数将在缺失值的位置返回 NaN。你可以使用 fill_value 参数来填充这些缺失值,然后再进行差分计算。
# 假设价格数据中有缺失值  
prices_with_nan = [100, np.nan, 105, 103, 106]  
df_with_nan = pd.DataFrame({'date': dates, 'price': prices_with_nan})  
df_with_nan.set_index('date', inplace=True)  # 使用前一个有效值填充缺失值,并计算差异  
filled_changes = df_with_nan['price'].fillna(method='ffill').diff()  print(filled_changes)

运行结果:
在这里插入图片描述

在这个例子中,fillna(method=‘ffill’) 使用前一个有效值填充了缺失值。然后,diff() 函数计算了填充后序列的差异。

  • 注意事项
    diff() 方法的工作原理可以简单理解为两个步骤:首先,通过 shift() 方法将数据序列进行移动;然后,将移动后的数据与原数据进行相减,得到相邻元素之间的差异。

需要注意的是,diff() 方法返回的是一个与原数据形状相同的新序列,其中包含了相邻元素的差值。由于计算差值时涉及到了元素的移动,因此在结果序列的开头或结尾部分,可能会因为没有足够的相邻元素而导致出现 NaN 值。

六、时间戳转换和格式化

1. 将字符串转换为日期时间对象

使用pd.to_datetime()函数将其转换为Pandas的日期时间对象。

import pandas as pd  # 假设df是一个DataFrame,其中'date_str'列包含日期时间字符串  
df = pd.DataFrame({  'date_str': ['2023-01-01 12:00:00', '2023-01-02 14:30:00']  
})  # 将字符串转换为日期时间对象  
df['date_time'] = pd.to_datetime(df['date_str'])  print(df)

运行结果:
在这里插入图片描述

2. 格式化日期时间对象

  • 使用.dt访问器来访问日期时间的各个部分
# 访问日期时间的各个部分  
df['year'] = df['date_time'].dt.year  
df['month'] = df['date_time'].dt.month  
df['day'] = df['date_time'].dt.day  
df['hour'] = df['date_time'].dt.hour  
df['minute'] = df['date_time'].dt.minute  
df['second'] = df['date_time'].dt.second  
df

运行结果:
在这里插入图片描述

  • 使用strftime()方法来格式化日期时间为字符串。
# 格式化日期时间为字符串  
df['formatted_date'] = df['date_time'].dt.strftime('%Y-%m-%d %H:%M:%S')  
df['formatted_date']

运行结果:
在这里插入图片描述

4. 时区转换

如果你的日期时间数据包含时区信息,并且你需要进行时区转换,你可以使用tz_convert()方法。

# 假设你的日期时间数据是UTC时区的  
df['utc_time'] = pd.to_datetime(df['date_str']).dt.tz_localize('UTC')  # 转换为另一个时区,比如纽约时区(America/New_York)  
df['ny_time'] = df['utc_time'].dt.tz_convert('America/New_York')

5.注意事项:

  • 确保你的日期时间字符串格式与pd.to_datetime()函数能够解析的格式相匹配。如果格式不匹配,你可能需要指定format参数来告诉Pandas如何解析日期时间字符串。
  • 在处理时区时,确保你的环境中安装了pytz库,因为Pandas使用pytz来处理时区信息。
  • 当格式化日期时间为字符串时,strftime()方法中的格式字符串应该遵循Python的日期时间格式化规则。

下篇内容

matplotlib入门

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

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

相关文章

打印机-STM32版本 硬件部分

最终PCB EDA工程: 一、确定芯片型号 根据项目需求,梳理需要用到的功能, 电量检测:ADC 按键:IO input外部中断 LED:IO output 温度检测:ADC 电机控制:IO output 打印通讯:SPI …

C++string类使用大全

目录 温馨提示:这篇文章有约两万字 什么是string类? 一. 定义和初始化string对象 1.string的构造函数的形式: 2.拷贝赋值运算符 3.assign函数 二.string对象上的操作 1.读写string对象 2.读取未知数量的string对象 3.使用getline …

windows ubuntu sed,awk,grep篇:10.awk 变量的操作符

目录 62. 变量 64. 算术操作符 65. 字符串操作符 66. 赋值操作符 67. 比较操作符 68. 正则表达式操作符 62. 变量 Awk 变量以字母开头,后续字符可以是数字、字母、或下划线。关键字不能用作 awk 变量。 不像其他编程语言, awk 变量可以直接使…

实习面试之算法准备:数学题

目录 1 技巧2 例题2.1 Nim 游戏2.2 石子游戏2.3 灯泡开关 1 技巧 稍加思考,找到规律 2 例题 2.1 Nim 游戏 你和你的朋友,两个人一起玩 Nim 游戏: 桌子上有一堆石头。 你们轮流进行自己的回合, 你作为先手 。 每一回合&#xf…

SpringBoot 打包所有依赖

SpringBoot 项目打包的时候可以通过插件 spring-boot-maven-plugin 来 repackage 项目&#xff0c;使得打的包中包含所有依赖&#xff0c;可以直接运行。例如&#xff1a; <plugins><plugin><groupId>org.springframework.boot</groupId><artifact…

2024五一杯数学建模B题思路代码文章教学-交通需求规划与可达率问题

交通需求规划与可达率问题 问题总结&#xff1a; 问题一&#xff1a;在一个小型交通网络中&#xff0c;给定的起点和终点之间的交通需求需分配到相应路径上。目标是最大化任意一条路段出现突发状况时的交通需求期望可达率。 问题二&#xff1a;在一个较大的交通网络中&#xff…

负债56亿,购买理财产品遭违约,操纵虚假粉丝,流量在下滑,客户数量减少,汽车之家面临大量风险(三)

本文由猛兽财经历时5个多月完成。猛兽财经将通过以下二十二个章节、8万字以上的内容来全面、深度的分析汽车之家这家公司。 由于篇幅限制&#xff0c;全文分为&#xff08;一&#xff09;到&#xff08;十&#xff09;篇发布。 本文为全文的第七章、第八章、第九章。 目录 …

【Linux—进程间通信】共享内存的原理、创建及使用

什么是共享内存 共享内存是一种计算机编程中的技术&#xff0c;它允许多个进程访问同一块内存区域&#xff0c;以此作为进程间通信&#xff08;IPC, Inter-Process Communication&#xff09;的一种方式。这种方式相对于管道、套接字等通信手段&#xff0c;具有更高的效率&…

一文入门交叉编译

前言: 在阅读本文之前&#xff0c;你哦需要了解makefile文件的编写规则&#xff0c;这里我们推荐两篇入门: Makefile 规则-CSDN博客 Makefile 快速入门-CSDN博客 编译定义 编译是指将源代码文件&#xff08;如C/C文件&#xff09;经过预处理、编译、汇编和链接等步骤&#x…

如何从0深入PostgreSQL内核写一个执行器算子?

如何从0深入PostgreSQL内核写一个执行器算子&#xff1f; 大家好&#xff0c;我叫光城&#xff0c;昨天分享了一个主题&#xff1a;如何从0深入PostgreSQL内核写一个执行器算子&#xff1f;今天来总结一下&#xff0c;本篇文章的直播回放可以在b站观看&#xff0c;点击原文或者…

[PS小技能学习]抠图和切图

详情见视频教程&#xff1a;PS小技巧--抠图与切图 今天我们来学习如何使用PS对表情包合辑进行抠图和裁剪保存 1、首先&#xff0c;将图片导入&#xff0c;双击图层新建一个图层 2、然后点击工具栏的魔棒工具&#xff0c;再点击顶部菜单栏的添加到选区 3、点击图片的空白区域即…

IMU状态预积分功能实现与测试

IMU状态预积分功能实现与测试 前言实现IMU状态预积分类测试程序验证预积分与直接积分的效果结果 前言 预积分&#xff1a;是一种十分常见的IMU数据处理方法。 与传统的IMU运动学积分不同&#xff0c;预积分可以将一段时间内的IMU测量数据累积&#xff0c;建立预积分测量&#…

两院院士泌尿外科专家吴阶平教授

吴阶平&#xff08;1917-2011&#xff09;&#xff0c;男&#xff0c;江苏常州人&#xff0c;1933年天津汇文中学毕业&#xff0c;保送到北平燕京大学医预科&#xff0c;1937年毕业于北平燕京大学获理学士学位&#xff0c;1942年毕业于北平协和医学院获医学博士学位&#xff0c…

银行卡归属地查询API接口快速对接

银行卡归属地查询API接口指的是通过银行卡号查询该银行卡详细信息&#xff0c;包括银行卡名称、卡种、卡品牌、发卡行、编号以及归属地等信息&#xff0c;支持一千多家银行返回归属地信息&#xff0c;那么银行卡归属地查询API接口如何快速对接呢&#xff1f; 首先找到有做银行…

SpringBoot集成Kafka开发

4.SpringBoot集成Kafka开发 4.1 创建项目 4.2 配置文件 application.yml spring:application:name: spring-boot-01-kafka-basekafka:bootstrap-servers: 192.168.2.118:90924.3 创建生产者 package com.zzc.producer;import jakarta.annotation.Resource; import org.spri…

Thread类及常见方法

目录 1.Thread类概念 2.Thread的常见构造方法 3.Thread的几个常见属性 4.启动一个线程—start( ) 5.中断一个线程 1.使用自定义的变量来作为标志位 2.使用interrupt() 3.观察标志位是否被清除 6.等待一个线程-join() 7.获取当前线程引用 8.休眠当前线程 1.Thread类概…

GitHub Copilot 简单使用

因为公司安全原因&#xff0c;并不允许在工作中使用GitHub Copilot&#xff0c;所以&#xff0c;一直没怎么使用。最近因为有一些其它任务&#xff0c;所以&#xff0c;试用了一下&#xff0c;感觉还是很不错的。&#xff08;主要是C和Python编程&#xff09; 一&#xff1a;常…

探索洗牌算法的魅力与杨辉三角的奥秘:顺序表的实际运用

目录 目录 前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 洗牌算法 准备工作 买一副牌 洗牌 发牌 测试整体 &#x1f3af;&#x1f3af;很重要的一点 杨辉三角 总结 前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ …

06_电子设计教程基础篇(学习视频推荐)

文章目录 前言一、基础视频1、电路原理3、模电4、高频电子线路5、电力电子技术6、数学物理方法7、电磁场与电磁波8、信号系统9、自动控制原理10、通信原理11、单片机原理 二、科普视频1、工科男孙老师2、达尔闻3、爱上半导体4、华秋商城5、JT硬件乐趣6、洋桃电子 三、教学视频1…

分布式与一致性协议之Raft算法与一致哈希算法(一)

Raft算法 Raft与一致性 有很多人把Raft算法当成一致性算法&#xff0c;其实它不是一致性算法而是共识算法&#xff0c;是一个Multi-Paxos算法&#xff0c;实现的是如何就一系列值达成共识。并且&#xff0c;Raft算法能容忍少数节点的故障。虽然Raft算法能实现强一致性&#x…