Python打卡訓練營Day56

DAY 56 時序數據的檢驗

知識點回顧:

  1. 假設檢驗基礎知識
    1. 原假設與備擇假設
    2. P值、統計量、顯著水平、置信區間
  2. 白噪聲
    1. 白噪聲的定義
    2. 自相關性檢驗:ACF檢驗和Ljung-Box 檢驗
    3. 偏自相關性檢驗:PACF檢驗
  3. 平穩性
    1. 平穩性的定義
    2. 單位根檢驗
  4. 季節性檢驗
    1. ACF檢驗
    2. 序列分解:趨勢+季節性+殘差

記憶口訣:p越小,落在置信區間外,越拒絕原假設。

時序部分需要鋪墊的知識非常多,相信這次應該說清楚了假設檢驗相關的基礎知識。

import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
# 中文顯示設置
plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置中文字體
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示為方塊的問題# --- 1. 生成隨機序列數據 ---# 為了讓每次運行的結果都一樣,設置一個隨機種子(可選)
np.random.seed(42)# 定義序列的長度
num_points = 200# 生成一個包含 200 個點的隨機序列
# np.random.randn() 從標準正態分布(均值為0,方差為1)中抽取隨機樣本
random_sequence = np.random.randn(num_points)print("生成的前10個數據點:")
print(random_sequence[:10])# --- 2. 可視化序列 ---# 設置圖形大小
plt.figure(figsize=(12, 6))# 繪制線圖
plt.plot(random_sequence, label='Random Sequence (White Noise)')# 添加標題和標簽
plt.title('Visualization of a Randomly Generated Sequence', fontsize=16)
plt.xlabel('Time Step (時間步)', fontsize=12)
plt.ylabel('Value (值)', fontsize=12)# 添加一條水平線,表示序列的均值(接近于0)
plt.axhline(y=0, color='r', linestyle='--', label='Mean (均值 ≈ 0)')# 顯示網格和圖例
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()# 顯示圖形
plt.show()from statsmodels.graphics.tsaplots import plot_acf 
print("--- 開始檢驗白噪聲屬性 ---")# 檢驗 1: 均值是否接近 0
mean = np.mean(random_sequence)
print(f"1. 序列的均值: {mean:.4f}")
if -0.1 < mean < 0.1:print("   (結論: 均值非常接近0,滿足條件。)\n")
else:print("   (結論: 均值偏離0較遠。)\n")# 檢驗 2: 方差是否恒定(且接近理論值1)
# 對于我們生成的數據,方差恒定是與生俱來的。我們主要檢查其值。
variance = np.var(random_sequence)
print(f"2. 序列的方差: {variance:.4f}")
if 0.8 < variance < 1.2:print("   (結論: 方差接近于1,滿足條件。np.random.randn理論方差為1)\n")
else:print("   (結論: 方差偏離1較遠。)\n")# 檢驗 3: 自相關性是否為 0
# 這是最核心的檢驗。我們通過繪制ACF圖來完成。
print("3. 檢驗自相關性 (使用ACF圖):")
print("   - ACF圖展示了序列與它過去值之間的相關性。")
print("   - 對于白噪聲,只有lag=0時相關性為1,其他所有lag的相關性都應在藍色置信區間內(統計上不顯著)。")# 創建一個新的圖形來繪制ACF圖
fig, ax = plt.subplots(figsize=(12, 5))
plot_acf(random_sequence, lags=30, ax=ax) # 我們查看前30個滯后的相關性
ax.set_title('序列的自相關函數圖 (ACF Plot)')
ax.set_xlabel('Lag (滯后階數)')
ax.set_ylabel('Autocorrelation (自相關系數)')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()from statsmodels.graphics.tsaplots import plot_pacf # 引入PACF圖
# --- 繪制PACF圖 ---
fig, ax = plt.subplots(figsize=(12, 5))
plot_pacf(random_sequence, lags=30, ax=ax)
ax.set_title('序列的偏自相關函數圖 (PACF Plot)')
ax.set_xlabel('Lag (滯后階數)')
ax.set_ylabel('Partial Autocorrelation')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()# --- 新增:使用 Ljung-Box 檢驗進行嚴格的白噪聲檢驗 ---
# 引入Ljung-Box檢驗的函數
from statsmodels.stats.diagnostic import acorr_ljungbox 
print("\n" + "="*50)
print("4. 進行嚴格的白噪聲檢驗 (Ljung-Box Test)")
print("="*50)
print("   - 原假設(H?): 序列是白噪聲。")
print("   - 判斷標準: 如果 p-value > 0.05,則接受原假設,認為序列是白噪聲。")# 執行Ljung-Box檢驗
# 我們通常會檢查一系列的滯后項,比如前10、20、30個
# 函數返回一個包含統計量和p值的DataFrame
ljung_box_result = acorr_ljungbox(random_sequence, lags=[10, 20, 30], return_df=True)print("\nLjung-Box檢驗結果:")
print(ljung_box_result)# --- 結論解釋 ---
print("\n--- 檢驗結論 ---")
# 我們可以檢查最后一個(最嚴格的)p值
# .iloc[-1] 獲取最后一行, .loc['lb_pvalue'] 獲取p值
last_p_value = ljung_box_result.iloc[-1]['lb_pvalue']if last_p_value < 0.05:print(f"在滯后30階時,p-value ({last_p_value:.4f}) 小于 0.05。")print("結論:我們拒絕原假設,該序列不是白噪聲。")
else:print(f"在滯后30階時,p-value ({last_p_value:.4f}) 大于 0.05。")print("結論:我們無法拒絕原假設,該序列是白噪聲。")# 引入ADF檢驗的函數
from statsmodels.tsa.stattools import adfuller # --- 新增:使用ADF檢驗來判斷平穩性 ---print("開始進行ADF平穩性檢驗...")# 執行ADF檢驗
# adfuller()函數會返回一個包含多個結果的元組
adf_result = adfuller(random_sequence)# 提取并展示主要結果
adf_statistic = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]print(f"ADF統計量 (ADF Statistic): {adf_statistic:.4f}")
print(f"p值 (p-value): {p_value:.4f}")
print("臨界值 (Critical Values):")
for key, value in critical_values.items():print(f'    {key}: {value:.4f}')print("\n--- 檢驗結論 ---")
# 根據p值進行判斷
if p_value < 0.05:print(f"p-value ({p_value:.4f}) 小于 0.05,我們強烈拒絕原假設(H?)。")print("結論:該序列是平穩的 (Stationary)。")
else:print(f"p-value ({p_value:.4f}) 大于或等于 0.05,我們無法拒絕原假設(H?)。")print("結論:該序列是非平穩的 (Non-stationary)。")# 也可以通過比較ADF統計量和臨界值來判斷,結論是一致的
if adf_statistic < critical_values['5%']:print("\n補充判斷:ADF統計量小于5%的臨界值,同樣表明序列是平穩的。")import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import seasonal_decompose
from statsmodels.graphics.tsaplots import plot_acf
# 顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 設置中文字體
plt.rcParams['axes.unicode_minus'] = False# --- 1. 創建一個帶季節性的序列 ---
# 我們模擬一個為期5年的月度數據(60個點)
num_points = 60
time = np.arange(num_points)# a. 創建一個線性趨勢
trend = 0.5 * time# b. 創建一個季節性成分(周期為12個月)
# 使用sin函數來模擬年度周期性波動
seasonal_component = 15 * np.sin(2 * np.pi * time / 12)# c. 創建一些隨機噪聲
np.random.seed(10)
noise = np.random.randn(num_points) * 2# d. 合成最終序列
seasonal_data = trend + seasonal_component + noise# --- 2. 開始檢驗季節性 ---# 方法一:肉眼觀察
print("--- 方法一:肉眼觀察 ---")
plt.figure(figsize=(14, 6))
plt.plot(seasonal_data)
plt.title('帶趨勢和季節性的時間序列圖', fontsize=16)
plt.xlabel('時間步 (月)')
plt.ylabel('值')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 觀察:我們可以清晰地看到一個整體上升的趨勢,以及每年重復的波峰和波谷。# 方法二:ACF圖
print("\n--- 方法二:ACF圖 ---")
fig, ax = plt.subplots(figsize=(14, 6))
plot_acf(seasonal_data, lags=30, ax=ax)
ax.set_title('季節性序列的ACF圖')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 觀察:ACF圖不僅整體緩慢下降(表明有趨勢),更重要的是在lag=12和24的位置出現了明顯的峰值!# 方法三:序列分解
print("\n--- 方法三:序列分解 ---")
# 使用statsmodels進行分解(假設為加法模型)
decomposition = seasonal_decompose(seasonal_data, model='additive', period=12)# 繪制分解圖
fig = decomposition.plot()
fig.set_size_inches(14, 8)
plt.suptitle('時間序列分解圖', y=1.02, fontsize=16)
plt.show()
# 觀察:分解圖清晰地將數據拆分成了趨勢、季節性和殘差。季節性部分呈現完美的年度周期,而殘差看起來像隨機噪聲。

作業:自行構造數據集,來檢查是否符合這個要求。

記憶口訣:p越小,落在置信區間外,越拒絕原假設。

什么叫做白噪聲呢?他需要滿足以下條件:

1. 均值為0

2. 方差恒定

3. 自相關性為0(即過去的值對未來的值沒有影響)

# 構造數據集 24h動態變化周期性的函數 模擬5day中每個24h人口流動的數據集 
num_points = 120
time = np.arange(num_points)# a. 創建一個線性趨勢
trend = 1.0 * time# b. 創建一個季節性成分(周期為24h)
# 使用sin函數來模擬周期性波動
day_component = 15 * np.sin(2 * np.pi * time / 24)# c. 創建一些隨機噪聲
np.random.seed(10)
noise = np.random.randn(num_points) * 2# d. 合成最終序列
daily_data = trend + day_component + noise#step0 可視化
# 設置圖形大小
plt.figure(figsize=(12, 6))# 繪制線圖
plt.plot(daily_data, label='Daily Data')# 添加標題和標簽
plt.title('Visualization of a 24h Dynamic Periodic Time Series', fontsize=16)
plt.xlabel('Time Step (時間步)', fontsize=12)
plt.ylabel('Value (值)', fontsize=12)# 添加一條水平線,表示序列的均值(接近于0)
plt.axhline(y=0, color='r', linestyle='--', label='Mean (均值 ≈ 0)')# 顯示網格和圖例
plt.grid(True, linestyle='--', alpha=0.6)
plt.legend()# 顯示圖形
plt.show()#step1 可預測性檢驗 使用 Ljung-Box 檢驗進行嚴格的白噪聲檢驗 
print("\n" + "="*50)
print("4. 進行嚴格的白噪聲檢驗 (Ljung-Box Test)")
print("="*50)
print("   - 原假設(H?): 序列是白噪聲。")
print("   - 判斷標準: 如果 p-value > 0.05,則接受原假設,認為序列是白噪聲。")# 執行Ljung-Box檢驗
# 我們通常會檢查一系列的滯后項,比如前10、20、30個
# 函數返回一個包含統計量和p值的DataFrame
ljung_box_result = acorr_ljungbox(daily_data, lags=[10, 20, 30], return_df=True)print("\nLjung-Box檢驗結果:")
print(ljung_box_result)# --- 結論解釋 ---
print("\n--- 檢驗結論 ---")
# 我們可以檢查最后一個(最嚴格的)p值
# .iloc[-1] 獲取最后一行, .loc['lb_pvalue'] 獲取p值
last_p_value = ljung_box_result.iloc[-1]['lb_pvalue']if last_p_value < 0.05:print(f"在滯后30階時,p-value ({last_p_value:.4f}) 小于 0.05。")print("結論:我們拒絕原假設,該序列不是白噪聲。")
else:print(f"在滯后30階時,p-value ({last_p_value:.4f}) 大于 0.05。")print("結論:我們無法拒絕原假設,該序列是白噪聲。")#step2 平穩性檢驗
# --- 新增:使用ADF檢驗來判斷平穩性 ---print("開始進行ADF平穩性檢驗...")# 執行ADF檢驗
# adfuller()函數會返回一個包含多個結果的元組
adf_result = adfuller(daily_data)# 提取并展示主要結果
adf_statistic = adf_result[0]
p_value = adf_result[1]
critical_values = adf_result[4]print(f"ADF統計量 (ADF Statistic): {adf_statistic:.4f}")
print(f"p值 (p-value): {p_value:.4f}")
print("臨界值 (Critical Values):")
for key, value in critical_values.items():print(f'    {key}: {value:.4f}')print("\n--- 檢驗結論 ---")
# 根據p值進行判斷
if p_value < 0.05:print(f"p-value ({p_value:.4f}) 小于 0.05,我們強烈拒絕原假設(H?)。")print("結論:該序列是平穩的 (Stationary)。")
else:print(f"p-value ({p_value:.4f}) 大于或等于 0.05,我們無法拒絕原假設(H?)。")print("結論:該序列是非平穩的 (Non-stationary)。")# 也可以通過比較ADF統計量和臨界值來判斷,結論是一致的
if adf_statistic < critical_values['5%']:print("\n補充判斷:ADF統計量小于5%的臨界值,同樣表明序列是平穩的。")#step3 結構識別(序列分解,ACF/PACF)
print("\n--- 方法二:ACF圖 ---")
fig, ax = plt.subplots(figsize=(14, 6))
plot_acf(daily_data, lags=30, ax=ax)
ax.set_title('24h序列的ACF圖')
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 觀察:ACF圖不僅整體緩慢下降(表明有趨勢)# 方法三:序列分解
print("\n--- 方法三:序列分解 ---")
# 使用statsmodels進行分解(假設為加法模型)
decomposition = seasonal_decompose(daily_data, model='additive', period=24)# 繪制分解圖
fig = decomposition.plot()
fig.set_size_inches(14, 8)
plt.suptitle('時間序列分解圖', y=1.02, fontsize=16)
plt.show()
# 觀察:分解圖清晰地將數據拆分成了趨勢、季節性和殘差。季節性部分呈現完美的年度周期,而殘差看起來像隨機噪聲。#stpe4 數據清洗 箱線圖和Z分數識別異常值
# 繪制箱線圖
plt.figure(figsize=(12, 6))
plt.boxplot(daily_data, vert=False, widths=0.5, patch_artist=True, boxprops=dict(facecolor='blue', color='blue'))
plt.title('24h動態周期性時間序列的箱線圖', fontsize=16)
plt.xlabel('值', fontsize=12)
plt.yticks([])  # 隱藏y軸刻度
plt.grid(True, linestyle='--', alpha=0.6)
plt.show()
# 觀察:箱線圖顯示了數據的四分位數、中位數和異常值。這里沒有明顯的異常值,數據分布相對比較均勻。# 計算Z分數并識別異常值
# 計算Z分數
z_scores = np.abs((daily_data - daily_data.mean()) / daily_data.std())# 定義Z分數閾值(例如:超過3個標準差)
z_threshold = 3# 識別異常值
outlier_indices = np.where(z_scores > z_threshold)[0]# 打印異常值的索引和值
if outlier_indices.size > 0:print(f"發現 {outlier_indices.size} 個異常值(超過Z分數閾值):")for idx in outlier_indices:print(f"索引 {idx}: 值 {daily_data[idx]:.4f}, Z分數 {z_scores[idx]:.4f}")
else:print("沒有發現異常值。")

==================================================

進行嚴格的白噪聲檢驗 (Ljung-Box Test) ================================================== -

原假設(H?): 序列是白噪聲。

- 判斷標準: 如果 p-value > 0.05,則接受原假設,認為序列是白噪聲。

Ljung-Box檢驗結果: lb_stat lb_pvalue 10 869.534899 2.289377e-180 20 1307.450690 7.507512e-265 30 1529.131369 2.447689e-303

--- 檢驗結論 --- 在滯后30階時,p-value (0.0000) 小于 0.05。

結論:我們拒絕原假設,該序列不是白噪聲。

開始進行ADF平穩性檢驗

... ADF統計量 (ADF Statistic): -0.2350

p值 (p-value): 0.9342

臨界值 (Critical Values): 1%: -3.4936? ? 5%: -2.8892? ?10%: -2.5815

--- 檢驗結論 --- p-value (0.9342) 大于或等于 0.05,我們無法拒絕原假設(H?)。

結論:該序列是非平穩的 (Non-stationary)。

Z-scores 沒有發現異常值。

浙大疏錦行-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/84724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/84724.shtml
英文地址,請注明出處:http://en.pswp.cn/web/84724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[GESP202312 五級] 烹飪問題

題目描述 有 N N N 種食材&#xff0c;編號從 0 0 0 至 N ? 1 N-1 N?1&#xff0c;其中第 i i i 種食材的美味度為 a i a_i ai?。 不同食材之間的組合可能產生奇妙的化學反應。具體來說&#xff0c;如果兩種食材的美味度分別為 x x x 和 y y y &#xff0c;那么它們…

JSON Mock 工具:從接口模擬到前端聯調(二)

JSON Mock 工具&#xff1a;模擬JSON API 接口&#xff08;一&#xff09;-CSDN博客 上一篇學習到&#xff0c;JSON Mock 工具&#xff0c;是用于模擬返回 JSON 數據的 API 接口&#xff0c;解決后端接口未就緒時前端無法開發測試的問題&#xff0c;實現 “無后端依賴” 的前端…

質量小議55 - 搜索引擎與AI

先有搜索引擎(谷歌、百度)&#xff0c;后有AI(chatGPT&#xff0c;deepSeek&#xff0c;文心一主&#xff0c;CSDN助手) 慢慢的百度用的少了&#xff0c;更多的是直接向AI工具提問 雖然搜索引擎也有了AI版的結果&#xff0c;而且是置頂的&#xff0c;但更多的時間在用A…

Life:Internship in OnSea Day 0

Prolog This will be a new serial Blog to record my internship life in OnSea(I like this straightly translation of hell divers). As usual&#xff0c;這些 Blogs 主要還是給 自分自身 看的&#xff0c;以便日后考古自己的 career。 既然已經這個系列歸類到了 Life 類…

ChangeNotifierProvider 本質上也是 Widget

場景 void main() {runApp(MyApp()); }class MyApp extends StatelessWidget {const MyApp({super.key});overrideWidget build(BuildContext context) {return ChangeNotifierProvider(create: (context) > MyAppState(),child: MaterialApp(title: Namer App,theme: Them…

【軟考高級系統架構論文】論負載均衡技術在Web系統中的應用

論文真題 負載均衡技術是提升Web系統性能的重要方法。利用負載均衡技術&#xff0c;可將負載(工作任務)進行平衡、分攤到多個操作單元上執行&#xff0c;從而協同完成工作任務&#xff0c;達到提升Web系統性能的目的。 請圍繞“負載均衡技術在Web系統中的應用”論題&#xff…

pyqt5工具-串口調試工具

目錄 功能界面代碼功能 串口設置:支持選擇串口、波特率、數據位、停止位和校驗位 串口操作:掃描串口、打開 / 關閉串口連接 數據收發: 支持文本和 Hex 模式顯示與發送 可設置自動添加換行符 接收區自動滾動 支持中文顯示 輔助功能:清空接收區、狀態欄顯示連接狀態 多串口管…

Mybatis-Plus支持多種數據庫

使用Mybatis-Plus進行數據庫的訪問&#xff0c;但是由于不同的數據庫有不同的方言&#xff0c;所以需要進行適配。 有2種實現方式&#xff1a; databaseId方式Mapper Location方式 指定databaseId方式 通過databaseId指定所使用的數據庫&#xff0c;選擇同步的SQL。 Mappe…

【系統分析師】2018年真題:綜合知識-答案及詳解

【第1題】 面向對象分析中&#xff0c;對象是類的實例。對象的構成成分包含了&#xff08;1&#xff09;&#xff0c;屬性和方法&#xff08;或操作&#xff09;。 (1)A.標識 B.消息 C.規則 D.結構 【解析】本題考查的是面向對象的基本概念 對象的三要素為&#xff1a;屬性…

從Git歷史中刪除大文件的完整解決方案

從Git歷史中刪除大文件的完整解決方案 當你意外提交了一個大文件導致無法推送到遠程倉庫時&#xff0c;可以按照以下步驟徹底從Git歷史中刪除這個大文件。 情況分析 首先確認你的問題屬于以下哪種情況&#xff1a; 大文件在最近一次提交中&#xff1a;相對容易處理大文件在…

[xiaozhi-esp32] 應用層(9種state) | 音頻編解碼層 | 雙循環架構

第三章&#xff1a;應用層 在第一章&#xff1a;開發板抽象層中&#xff0c;我們實現了硬件交互標準化&#xff1b;在第二章&#xff1a;通信協議層中&#xff0c;我們構建了云端通信橋梁。 現在需要將這些能力有機整合——這便是應用層的使命 應用層的本質 應用層是設備的…

Java 鎖升級的過程詳解

Java 鎖升級的過程詳解 Java 虛擬機(JVM)為了提高多線程并發的效率,對內置鎖(synchronized 關鍵字)的實現進行了一系列優化。這些優化體現在鎖的升級過程中,即當競爭程度從低到高變化時,鎖的狀態會從偏向鎖逐漸升級為輕量級鎖,最終升級為重量級鎖。這個過程是不可逆的…

使用vitis tcl腳本構建vitis app工程

一&#xff1a;最近重新學習了zynq系列開發&#xff0c;想著使用tcl創建工程&#xff0c;因此分享一下腳本例子 #!/bin/bashsource /tools/Xilinx/Vitis/2022.2/settings64.sh cd ../../ . ./script/project.sh cd app/script #tcl腳本只能在虛擬機桌面執行 xsct build_vitis…

電腦商城--購物車

加入購物車 1 購物車-創建數據表 1.使用use命令先選中store數據庫。 USE store; 2.在store數據庫中創建t_cart用戶數據表。 CREATE TABLE t_cart (cid INT AUTO_INCREMENT COMMENT 購物車數據id,uid INT NOT NULL COMMENT 用戶id,pid INT NOT NULL COMMENT 商品id,price BIG…

2024-2025學年度下期《網頁設計》期末模擬測試

一、 單選題 1. HTML文檔的根標簽是( ) A. <html> B. <head> C. <body> D. <!DOCTYPE> 2. 用于定義段落內容的標簽是&#xff1a;( ) A. <div> B. <p> C. <span> D. <br> 3. 網以下哪個屬性用于定義CSS內聯樣式…

搭建加解密網站遇到的問

本機向云服務器傳輸文件 用winscp 服務器在安裝 SSH 服務時自動生成密鑰對&#xff08;公鑰私鑰&#xff09; 為什么要有指紋驗證&#xff1f; 防止中間人攻擊&#xff08;Man-in-the-Middle&#xff09; 指紋驗證打破這個攻擊鏈&#xff1a; 小問題 安裝python時 ./confi…

CSS 制作學成在線網頁

1 項目結構 1.1 總結 2 網頁制作思路 3 header 區域 - 布局 3.1 通欄 3.2 logo 3.3 導航 3.4 搜索區域 3.5 用戶區域 4 banner 區域 4.1 左側側導航 4.2 右側課程表 5 精品推薦 6 推薦課程區域 參考鏈接&#xff1a; 82-準備工作-項目目錄與版心_嗶哩嗶哩_bilibili

圖靈完備之路(數電學習三分鐘)----門的多路化

上一章中我們學習了如何用與非門實現其他邏輯門&#xff0c;但上節中的輸入信號始終為2&#xff0c;但在現實中&#xff0c;輸入的信號數量是不確定的&#xff0c;所以我們需要設計多輸入的門&#xff1a; 1.三路與非門&#xff08;卡諾圖法&#xff09; 我們還是從與非門開始…

【前端】二進制文件流下載(get、post)再談一次

最近二進制文件流下載可謂是又出幺蛾子&#xff0c;翻閱以前的文章也找不到解決方案&#xff0c;感覺還是沒用完全理解&#xff0c;這次再整理一遍。 先說一個通用場景&#xff0c;就是無論get還是post在接口請求的時候設定好 headers: { Content-Type: application/json;cha…

uv功能介紹和完整使用示例總結

以下是關于 UV 工具的完整使用示例總結,結合其核心功能與典型場景,幫助用戶快速上手并高效管理 Python 項目: 一、安裝與配置 快速安裝 macOS/Linux:curl -LsSf https://astral.sh/uv/install.sh | shWindows:powershell -ExecutionPolicy ByPass -c "irm https://as…