使用 scikit-learn 庫對烏克蘭沖突事件數據集進行多維度分類分析

使用scikit-learn庫對烏克蘭沖突事件數據集進行多維度分類分析

背景

在現代沖突研究中,對沖突事件進行多維度分析和可視化可以幫助我們更好地理解沖突的模式、趨勢和影響因素。本次作業將使用開源沖突數據,構建一個完整的機器學習分類流程,從數據預處理到模型構建,再到結果可視化,全面展示如何使用scikit-learn庫處理多維度分類問題。

數據說明

本次使用的是2022-2025年烏克蘭沖突事件數據集,該數據集包含了從2022年俄烏戰爭開始到2025年初烏克蘭境內的詳細地理定位沖突事件。數據集包含以下重要字段:

  • event_id_cnty:事件標識符
  • event_date:事件日期
  • year:事件發生年份
  • time_precision:時間精度
  • disorder_type:沖突類型
  • event_type:事件類型(如戰斗、爆炸/遠程攻擊等)
  • sub_event_type:子事件類型
  • actor1:主要參與方
  • assoc_actor_1:關聯參與方1
  • inter1:參與方1類型代碼
  • actor2:次要參與方
  • assoc_actor_2:關聯參與方2
  • inter2:參與方2類型代碼
  • interaction:參與方交互類型代碼
  • civilian_targeting:是否針對平民
  • admin1/2/3:行政區域劃分(省/州、區、市/鎮)
  • location:地點名稱
  • latitude/longitude:地理位置坐標
  • fatalities:死亡人數
  • timestamp:數據記錄時間戳

需求

本次要求使用scikit-learn庫對烏克蘭沖突事件數據集進行多維度分類分析,具體包括:

  1. 數據預處理:清洗數據、處理缺失值、特征編碼
  2. 特征工程:選擇和構建有意義的特征集
  3. 模型構建:使用隨機森林算法構建分類模型,預測事件類型
  4. 模型評估:計算模型準確率、精確率、召回率等指標
  5. 結果可視化:使用PCA降維和t-SNE可視化分類結果

代碼說明

實現一個完整的多維度分類分析流程,主要包含以下幾個部分:

  1. 數據加載與預處理:讀取CSV文件,處理缺失值,提取時間特征(月份、季度)

  2. 特征工程

    • 選擇與事件類型預測相關的特征
    • 對分類特征進行標簽編碼
    • 對數值特征進行標準化處理
  3. 模型構建與訓練

    • 使用隨機森林算法構建分類模型
    • 訓練模型預測事件類型
  4. 模型評估

    • 計算模型準確率、精確率、召回率和F1分數
    • 生成并可視化混淆矩陣
  5. 特征重要性分析

    • 計算并展示各特征對分類結果的重要性
    • 可視化特征重要性排序
  6. 結果可視化

    • 使用PCA降維展示數據的實際分類情況
    • 使用t-SNE降維展示模型的預測分類結果

通過這個完整的流程,你可以了解如何使用scikit-learn進行多維度分類分析,并通過可視化直觀地理解分類結果和特征重要性。

使用說明

  1. 請將代碼中的file_path變量替換為你實際的CSV文件路徑
  2. 運行代碼后,會在當前目錄生成三個可視化圖片文件
  3. 代碼中的特征選擇和模型參數可以根據實際需求進行調整
  4. 如需增加更多特征或改進模型性能,可以擴展feature_engineeringtrain_model函數

安裝依賴

pip install --upgrade numpy pandas matplotlib seaborn scikit-learn loky

導包

# 先設置環境變量,避免CPU核心數警告
import os# 設置使用的CPU核心數(根據實際情況調整,建議為邏輯核心數的一半)
os.environ["LOKY_MAX_CPU_COUNT"] = "4"# 導入必要的庫
import pandas as pd  # 用于數據處理和分析
import numpy as np  # 用于數值計算
from sklearn.model_selection import train_test_split  # 用于劃分訓練集和測試集
from sklearn.preprocessing import LabelEncoder, StandardScaler  # 用于特征編碼和標準化
from sklearn.ensemble import RandomForestClassifier  # 隨機森林分類器
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score  # 模型評估指標
from sklearn.decomposition import PCA  # 主成分分析,用于降維
from sklearn.manifold import TSNE  # t-SNE算法,用于高維數據可視化
import matplotlib.pyplot as plt  # 繪圖庫
import seaborn as sns  # 高級數據可視化庫# 配置matplotlib支持中文字體和LaTeX數學符號
plt.rcParams.update({# 優先使用中文字體,同時保留serif用于LaTeX數學符號"font.family": ["SimHei", "serif"],"mathtext.fontset": "cm",  # 使用Computer Modern字體渲染數學符號"axes.unicode_minus": False,  # 解決負號顯示問題"text.usetex": False,  # 不強制使用外部LaTeX,依賴matplotlib內置渲染
})

步驟1: 加載數據

# 步驟1: 加載數據
def load_data(file_path):"""加載沖突事件數據"""try:data = pd.read_csv(file_path)print(f"數據加載成功,共{len(data)}條記錄,{len(data.columns)}個字段")return dataexcept FileNotFoundError:print(f"錯誤:文件 {file_path} 不存在")return None
# 文件路徑 - 需要替換為實際數據文件路徑
file_path = 'data/06/russia_ukraine_conflict.csv'# 步驟1: 加載數據
data = load_data(file_path)
數據加載成功,共154251條記錄,31個字段

步驟2: 數據預處理

# 步驟2: 數據預處理
def preprocess_data(data):"""預處理沖突事件數據"""# 復制數據,避免修改原始數據df = data.copy()# 處理缺失值print("處理缺失值...")# 對于分類變量,用最頻繁的值填充for col in df.select_dtypes(include=['object']).columns:# 避免鏈式賦值和inplace=Truedf[col] = df[col].fillna(df[col].mode()[0])# 對于數值變量,用中位數填充for col in df.select_dtypes(include=['int64', 'float64']).columns:if df[col].isnull().sum() > 0:# 避免鏈式賦值和inplace=Truedf[col] = df[col].fillna(df[col].median())# 將event_date轉換為日期格式df['event_date'] = pd.to_datetime(df['event_date'])# 從日期中提取月份和季度作為新特征df['month'] = df['event_date'].dt.monthdf['quarter'] = df['event_date'].dt.quarterreturn df
# 步驟2: 數據預處理
preprocessed_data = preprocess_data(data)
處理缺失值...

步驟3: 特征工程

# 步驟3: 特征工程
def feature_engineering(df):"""特征工程處理"""# 選擇用于分析的特征selected_features = ['disorder_type', 'time_precision', 'interaction', 'civilian_targeting','admin1', 'latitude', 'longitude', 'fatalities', 'month', 'quarter']# 目標變量:事件類型target_variable = 'event_type'# 提取特征和目標變量X = df[selected_features].copy()y = df[target_variable].copy()# 對分類特征進行編碼categorical_features = X.select_dtypes(include=['object']).columnsfor feature in categorical_features:le = LabelEncoder()X[feature] = le.fit_transform(X[feature])# 對目標變量進行編碼le_target = LabelEncoder()y_encoded = le_target.fit_transform(y)# 特征標準化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)return X_scaled, y_encoded, X.columns, le_target
# 步驟3: 特征工程
X, y, feature_names, target_encoder = feature_engineering(preprocessed_data)

步驟4: 劃分訓練集和測試集

# 步驟4: 劃分訓練集和測試集
def split_data(X, y):"""劃分訓練集和測試集"""X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)print(f"訓練集大小: {len(X_train)}, 測試集大小: {len(X_test)}")return X_train, X_test, y_train, y_test
# 步驟4: 劃分訓練集和測試集
X_train, X_test, y_train, y_test = split_data(X, y)
訓練集大小: 123400, 測試集大小: 30851

步驟5: 模型訓練

# 步驟5: 模型訓練
def train_model(X_train, y_train):"""訓練隨機森林分類模型"""# 創建隨機森林分類器model = RandomForestClassifier(n_estimators=100,  # 樹的數量max_depth=10,  # 樹的最大深度random_state=42,  # 隨機種子,保證結果可重現n_jobs=-1  # 使用所有CPU核心)# 訓練模型model.fit(X_train, y_train)return model
# 步驟5: 模型訓練
model = train_model(X_train, y_train)

步驟6: 模型評估

# 步驟6: 模型評估
def evaluate_model(model, X_test, y_test, target_encoder):"""評估模型性能"""# 預測測試集y_pred = model.predict(X_test)# 計算準確率accuracy = accuracy_score(y_test, y_pred)print(f"模型準確率: {accuracy:.4f}")# 打印分類報告target_names = target_encoder.classes_print("\n分類報告:")print(classification_report(y_test, y_pred, target_names=target_names))# 繪制混淆矩陣plt.figure(figsize=(10, 8))cm = confusion_matrix(y_test, y_pred)sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',xticklabels=target_names, yticklabels=target_names)plt.xlabel('預測類別')plt.ylabel('實際類別')plt.title('混淆矩陣')plt.tight_layout()plt.savefig('confusion_matrix.png')plt.show()plt.close()return accuracy
# 步驟6: 模型評估
accuracy = evaluate_model(model, X_test, y_test, target_encoder)
print("混淆矩陣圖已保存為'confusion_matrix.png'")
模型準確率: 0.9114分類報告:precision    recall  f1-score   supportBattles       0.77      0.92      0.84      7830
Explosions/Remote violence       0.97      0.91      0.94     23021accuracy                           0.91     30851macro avg       0.87      0.91      0.89     30851weighted avg       0.92      0.91      0.91     30851

scikit-learn 評估模型繪制混淆矩陣
混淆矩陣圖已保存為’confusion_matrix.png’

步驟7: 特征重要性分析

# 步驟7: 特征重要性分析
def feature_importance_analysis(model, feature_names):"""分析特征重要性"""# 獲取特征重要性importances = model.feature_importances_indices = np.argsort(importances)[::-1]# 打印特征重要性排名print("\n特征重要性排名:")for f in range(len(feature_names)):print(f"{f + 1}. {feature_names[indices[f]]} ({importances[indices[f]]:.4f})")# 繪制特征重要性圖plt.figure(figsize=(12, 6))plt.title('特征重要性')plt.bar(range(len(feature_names)), importances[indices], align='center')plt.xticks(range(len(feature_names)), [feature_names[i] for i in indices], rotation=90)plt.xlim([-1, len(feature_names)])plt.tight_layout()plt.savefig('feature_importance.png')plt.show()plt.close()
# 步驟7: 特征重要性分析
feature_importance_analysis(model, feature_names)
print("特征重要性圖已保存為'feature_importance.png'")
特征重要性排名:
1. interaction (0.6118)
2. longitude (0.1800)
3. latitude (0.0971)
4. fatalities (0.0726)
5. admin1 (0.0236)
6. month (0.0084)
7. quarter (0.0040)
8. time_precision (0.0024)
9. civilian_targeting (0.0000)
10. disorder_type (0.0000)

scikit-learn 特征重要性分析
特征重要性圖已保存為’feature_importance.png’

步驟8: 可視化分類結果

# 步驟8: 可視化分類結果
def visualize_results(X_test, y_test, y_pred, target_encoder):"""可視化分類結果"""# 使用PCA降維到2Dpca = PCA(n_components=2)X_test_pca = pca.fit_transform(X_test)# 使用t-SNE降維(計算量較大)tsne = TSNE(n_components=2, random_state=42)X_test_tsne = tsne.fit_transform(X_test)# 獲取類別名稱target_names = target_encoder.classes_# 創建畫布fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8))# 繪制PCA可視化結果scatter1 = ax1.scatter(X_test_pca[:, 0], X_test_pca[:, 1], c=y_test,cmap='viridis', s=50, alpha=0.7)legend1 = ax1.legend(*scatter1.legend_elements(), title="實際類別",bbox_to_anchor=(1.05, 1), loc='upper left')ax1.add_artist(legend1)ax1.set_title('PCA降維后的實際分類結果')ax1.set_xlabel('主成分1')ax1.set_ylabel('主成分2')# 繪制t-SNE可視化結果scatter2 = ax2.scatter(X_test_tsne[:, 0], X_test_tsne[:, 1], c=y_pred,cmap='plasma', s=50, alpha=0.7)legend2 = ax2.legend(*scatter2.legend_elements(), title="預測類別",bbox_to_anchor=(1.05, 1), loc='upper left')ax2.add_artist(legend2)ax2.set_title('t-SNE降維后的預測分類結果')ax2.set_xlabel('t-SNE維度1')ax2.set_ylabel('t-SNE維度2')plt.tight_layout()plt.savefig('classification_visualization.png')plt.show()plt.close()
# 步驟8: 可視化分類結果
visualize_results(X_test, y_test, model.predict(X_test), target_encoder)
print("分析完成!分類結果可視化已保存為'classification_visualization.png'")

scikit-learn
分析完成!分類結果可視化已保存為’classification_visualization.png’

完整代碼

# 先設置環境變量,避免CPU核心數警告
import os# 設置使用的CPU核心數(根據實際情況調整,建議為邏輯核心數的一半)
os.environ["LOKY_MAX_CPU_COUNT"] = "4"# 導入必要的庫
import pandas as pd  # 用于數據處理和分析
import numpy as np  # 用于數值計算
from sklearn.model_selection import train_test_split  # 用于劃分訓練集和測試集
from sklearn.preprocessing import LabelEncoder, StandardScaler  # 用于特征編碼和標準化
from sklearn.ensemble import RandomForestClassifier  # 隨機森林分類器
from sklearn.metrics import classification_report, confusion_matrix, accuracy_score  # 模型評估指標
from sklearn.decomposition import PCA  # 主成分分析,用于降維
from sklearn.manifold import TSNE  # t-SNE算法,用于高維數據可視化
import matplotlib.pyplot as plt  # 繪圖庫
import seaborn as sns  # 高級數據可視化庫# 配置matplotlib支持中文字體和LaTeX數學符號
plt.rcParams.update({# 優先使用中文字體,同時保留serif用于LaTeX數學符號"font.family": ["SimHei", "serif"],"mathtext.fontset": "cm",  # 使用Computer Modern字體渲染數學符號"axes.unicode_minus": False,  # 解決負號顯示問題"text.usetex": False,  # 不強制使用外部LaTeX,依賴matplotlib內置渲染
})# 步驟1: 加載數據
def load_data(file_path):"""加載沖突事件數據"""try:data = pd.read_csv(file_path)print(f"數據加載成功,共{len(data)}條記錄,{len(data.columns)}個字段")return dataexcept FileNotFoundError:print(f"錯誤:文件 {file_path} 不存在")return None# 步驟2: 數據預處理
def preprocess_data(data):"""預處理沖突事件數據"""# 復制數據,避免修改原始數據df = data.copy()# 處理缺失值print("處理缺失值...")# 對于分類變量,用最頻繁的值填充for col in df.select_dtypes(include=['object']).columns:# 避免鏈式賦值和inplace=Truedf[col] = df[col].fillna(df[col].mode()[0])# 對于數值變量,用中位數填充for col in df.select_dtypes(include=['int64', 'float64']).columns:if df[col].isnull().sum() > 0:# 避免鏈式賦值和inplace=Truedf[col] = df[col].fillna(df[col].median())# 將event_date轉換為日期格式df['event_date'] = pd.to_datetime(df['event_date'])# 從日期中提取月份和季度作為新特征df['month'] = df['event_date'].dt.monthdf['quarter'] = df['event_date'].dt.quarterreturn df# 步驟3: 特征工程
def feature_engineering(df):"""特征工程處理"""# 選擇用于分析的特征selected_features = ['disorder_type', 'time_precision', 'interaction', 'civilian_targeting','admin1', 'latitude', 'longitude', 'fatalities', 'month', 'quarter']# 目標變量:事件類型target_variable = 'event_type'# 提取特征和目標變量X = df[selected_features].copy()y = df[target_variable].copy()# 對分類特征進行編碼categorical_features = X.select_dtypes(include=['object']).columnsfor feature in categorical_features:le = LabelEncoder()X[feature] = le.fit_transform(X[feature])# 對目標變量進行編碼le_target = LabelEncoder()y_encoded = le_target.fit_transform(y)# 特征標準化scaler = StandardScaler()X_scaled = scaler.fit_transform(X)return X_scaled, y_encoded, X.columns, le_target# 步驟4: 劃分訓練集和測試集
def split_data(X, y):"""劃分訓練集和測試集"""X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)print(f"訓練集大小: {len(X_train)}, 測試集大小: {len(X_test)}")return X_train, X_test, y_train, y_test# 步驟5: 模型訓練
def train_model(X_train, y_train):"""訓練隨機森林分類模型"""# 創建隨機森林分類器model = RandomForestClassifier(n_estimators=100,  # 樹的數量max_depth=10,  # 樹的最大深度random_state=42,  # 隨機種子,保證結果可重現n_jobs=-1  # 使用所有CPU核心)# 訓練模型model.fit(X_train, y_train)return model# 步驟6: 模型評估
def evaluate_model(model, X_test, y_test, target_encoder):"""評估模型性能"""# 預測測試集y_pred = model.predict(X_test)# 計算準確率accuracy = accuracy_score(y_test, y_pred)print(f"模型準確率: {accuracy:.4f}")# 打印分類報告target_names = target_encoder.classes_print("\n分類報告:")print(classification_report(y_test, y_pred, target_names=target_names))# 繪制混淆矩陣plt.figure(figsize=(10, 8))cm = confusion_matrix(y_test, y_pred)sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',xticklabels=target_names, yticklabels=target_names)plt.xlabel('預測類別')plt.ylabel('實際類別')plt.title('混淆矩陣')plt.tight_layout()plt.savefig('confusion_matrix.png')plt.show()plt.close()return accuracy# 步驟7: 特征重要性分析
def feature_importance_analysis(model, feature_names):"""分析特征重要性"""# 獲取特征重要性importances = model.feature_importances_indices = np.argsort(importances)[::-1]# 打印特征重要性排名print("\n特征重要性排名:")for f in range(len(feature_names)):print(f"{f + 1}. {feature_names[indices[f]]} ({importances[indices[f]]:.4f})")# 繪制特征重要性圖plt.figure(figsize=(12, 6))plt.title('特征重要性')plt.bar(range(len(feature_names)), importances[indices], align='center')plt.xticks(range(len(feature_names)), [feature_names[i] for i in indices], rotation=90)plt.xlim([-1, len(feature_names)])plt.tight_layout()plt.savefig('feature_importance.png')plt.show()plt.close()# 步驟8: 可視化分類結果
def visualize_results(X_test, y_test, y_pred, target_encoder):"""可視化分類結果"""# 使用PCA降維到2Dpca = PCA(n_components=2)X_test_pca = pca.fit_transform(X_test)# 使用t-SNE降維(計算量較大)tsne = TSNE(n_components=2, random_state=42)X_test_tsne = tsne.fit_transform(X_test)# 獲取類別名稱target_names = target_encoder.classes_# 創建畫布fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(20, 8))# 繪制PCA可視化結果scatter1 = ax1.scatter(X_test_pca[:, 0], X_test_pca[:, 1], c=y_test,cmap='viridis', s=50, alpha=0.7)legend1 = ax1.legend(*scatter1.legend_elements(), title="實際類別",bbox_to_anchor=(1.05, 1), loc='upper left')ax1.add_artist(legend1)ax1.set_title('PCA降維后的實際分類結果')ax1.set_xlabel('主成分1')ax1.set_ylabel('主成分2')# 繪制t-SNE可視化結果scatter2 = ax2.scatter(X_test_tsne[:, 0], X_test_tsne[:, 1], c=y_pred,cmap='plasma', s=50, alpha=0.7)legend2 = ax2.legend(*scatter2.legend_elements(), title="預測類別",bbox_to_anchor=(1.05, 1), loc='upper left')ax2.add_artist(legend2)ax2.set_title('t-SNE降維后的預測分類結果')ax2.set_xlabel('t-SNE維度1')ax2.set_ylabel('t-SNE維度2')plt.tight_layout()plt.savefig('classification_visualization.png')plt.show()plt.close()# 主函數
def main():# 文件路徑 - 需要替換為實際數據文件路徑file_path = 'data/06/russia_ukraine_conflict.csv'# 步驟1: 加載數據data = load_data(file_path)if data is None:return# 步驟2: 數據預處理preprocessed_data = preprocess_data(data)# 步驟3: 特征工程X, y, feature_names, target_encoder = feature_engineering(preprocessed_data)# 步驟4: 劃分訓練集和測試集X_train, X_test, y_train, y_test = split_data(X, y)# 步驟5: 模型訓練model = train_model(X_train, y_train)# 步驟6: 模型評估accuracy = evaluate_model(model, X_test, y_test, target_encoder)# 步驟7: 特征重要性分析feature_importance_analysis(model, feature_names)# 步驟8: 可視化分類結果visualize_results(X_test, y_test, model.predict(X_test), target_encoder)print("\n分析完成!分類結果可視化已保存為'classification_visualization.png'")print("特征重要性圖已保存為'feature_importance.png'")print("混淆矩陣圖已保存為'confusion_matrix.png'")if __name__ == "__main__":main()
數據加載成功,共154251條記錄,31個字段
處理缺失值...
訓練集大小: 123400, 測試集大小: 30851
模型準確率: 0.9114分類報告:precision    recall  f1-score   supportBattles       0.77      0.92      0.84      7830
Explosions/Remote violence       0.97      0.91      0.94     23021accuracy                           0.91     30851macro avg       0.87      0.91      0.89     30851weighted avg       0.92      0.91      0.91     30851

scikit-learn 評估模型繪制混淆矩陣

特征重要性排名:
1. interaction (0.6118)
2. longitude (0.1800)
3. latitude (0.0971)
4. fatalities (0.0726)
5. admin1 (0.0236)
6. month (0.0084)
7. quarter (0.0040)
8. time_precision (0.0024)
9. civilian_targeting (0.0000)
10. disorder_type (0.0000)

scikit-learn 特征重要性分析
scikit-learn

分析完成!分類結果可視化已保存為'classification_visualization.png'
特征重要性圖已保存為'feature_importance.png'
混淆矩陣圖已保存為'confusion_matrix.png'

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

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

相關文章

工作流 x 深度學習:揭秘藍耘元生代如何用 ComfyUI 玩轉 AI 開發

目錄 一、從 “代碼噩夢” 到 “積木游戲”:我與工作流的初次碰撞 二、深度學習:復雜而迷人的 “數字迷宮” (一)深度學習的神秘面紗 (二)深度學習的發展歷程 (三)深度學習面臨…

《軟件工程》第 14 章 - 持續集成

在軟件工程的開發流程中,持續集成是保障代碼質量與開發效率的關鍵環節。本章將圍繞持續集成的各個方面展開詳細講解,結合 Java 代碼示例與可視化圖表,幫助讀者深入理解并實踐相關知識。 14.1 持續集成概述 14.1.1 持續集成的相關概念 持續集…

1992-2021年各省工業增加值數據(無缺失)

1992-2021年各省工業增加值數據(無缺失) 1、時間:1992-2021年 2、來源:國家統計局、統計年鑒 3、指標:工業增加值 4、范圍:31省 5、缺失情況:無缺失 6、指標說明:工業增加值是…

Android15 Camera Hal設置logLevel控制日志輸出

這里說明三個內容 Camera Hal Demo默認使用的也是Android原生日志接口(例如:ALOGD, ALOGV),為什么logLevel設置為V級別,但是通過ALOGV打印的日志不輸出,不生效Camera Hal Demo在不修改ALOGX接口使用的情況…

C++:設計模式--工廠模式

更多內容:XiaoJ的知識星球 目錄 1.簡單工廠模式1.1 簡單工廠1.2 實現步驟1.3 實現代碼1.4 優缺點 2.工廠模式2.1 工廠模式2.2 實現步驟2.3 實現代碼2.4 優缺點 3.抽象工廠模式3.1 抽象工廠模式3.2 實現步驟3.3 實現代碼3.4 優缺點 1.簡單工廠模式 . 1.1 簡單工廠 …

【DSP筆記】掌握數字世界的律動:時域離散信號與系統基礎

掌握數字世界的律動:時域離散信號與系統基礎 想象一下,你用手機拍了一張照片,或者聽了一首MP3歌曲。這些圖片和聲音,原本都是連續變化的模擬信號,但為什么它們能被你的手機存儲和處理呢?秘密就在于“數字化…

織夢dedecms上傳附件不自動改名的辦法

織夢dedecms的系統在上傳附件后,會將文件自動改名字,那怎么樣才能讓附件上傳后不自動改名字呢,讓附件上傳后不自動改名字(中文名的附件將會改成拼音文件名稱),現在說一下方法吧: 我們打開網站目錄下include\dialog\se…

https下git拉取gitlab倉庫源碼

git init 創建倉庫 參考下面創建公私秘鑰對 GitLab配置ssh key - 阿豪聊干貨 - 博客園 Your identification has been saved in /home/xxx/.ssh/id_ed25519 Your public key has been saved in /home/xxx/.ssh/id_ed25519.pub 然后查看對應公鑰,復制 cat ~/.ss…

Mybatis使用update更新值為null時不生效問題解決

1.出現的問題 前端修改數據時把屬性內容刪除然后進行保存,默認傳的null,后端更新時屬性值為null, 然后調用updateById進行更新時發現該屬性還是原來的值: update方法不會對屬性null的進行更新 2.原因 mybatis-plus FieldStrat…

JAVA 學習日志

$2 周期小結 #8 工作匯報 數學建模部分 前三天的主要精力用在電工杯數學建模大賽上了,雖然這是Java學習筆記 當是還是總結一下吧 首先是任務分工方面 需要三個人都會python基礎語法 然后一起寫論文 ,就是需要邊建模邊寫論文 ,然后在 后續…

Java網絡編程性能優化

1.網絡編程性能優化基礎 1. 性能關鍵指標 指標 描述 優化目標 響應時間 從請求到響應的總時間 降低到毫秒級 吞吐量 單位時間內處理的請求數量 提高到每秒數千至數萬請求 并發用戶數 系統同時處理的用戶數量 支持數千至數萬并發連接 資源利用率 CPU、內存、網絡帶…

react native搭建項目

React Native 項目搭建指南 React Native 是一個使用 JavaScript 和 React 構建跨平臺移動應用的框架。以下是搭建 React Native 項目的詳細步驟: 1. 環境準備 安裝 Node.js 下載并安裝 Node.js (推薦 LTS 版本) 安裝 Java Development Kit (JDK) 對于 Androi…

Redis 容器啟動失敗Fatal error loading the DB, check server logs. Exiting.的解決方法

? 問題分析:Redis 容器啟動失敗 根據提供的 Redis 啟動日志,關鍵信息如下: 🔍 模塊加載情況 模塊名稱狀態備注RedisCompat? 成功search? 成功RediSearch 模塊timeseries? 成功RedisTimeSeries 模塊ReJSON? 成功bf? 成功R…

chrome打不開axure設計的軟件產品原型問題解決辦法

1、打開原型文件夾,進入到其中的如下目錄中:resources->chrome->axure-chrome-extension.crx,找到 Axure RP Extension for Chrome插件。 2、axure-chrome-extension.crx文件修改擴展名.rar,并解壓到文件夾 axure-chrome-ex…

Java 各版本核心新特性的詳細說明

一、Java 8(2014)—— 函數式編程的里程碑 1. Lambda 表達式 作用:簡化匿名內部類,支持函數式編程。示例:// 傳統匿名內部類 Runnable r1 new Runnable() {Overridepublic void run() {System.out.println("He…

【md2html python 將 Markdown 文本轉換為 HTML】

測試md文本 md_text """ # title## subtitle\python print("Hello, World!") \- item 1| Header 1 | Header 2 | |----------|----------| | Row 1 Col 1 | Row 1 Col 2 |- item 2> This is a blockquote.### SubsubtitleThis is a paragraph wi…

Prompt Engineering 提示工程介紹與使用/調試技巧

1. 介紹 Prompt Engineering 是一種人工智能(AI)技術,它通過設計和改進 AI 的 prompt 來提高 AI 的表現。Prompt Engineering 的目標是創建高度有效和可控的 AI 系統,使其能夠準確、可靠地執行特定任務。 如果你從來沒有使用過Pr…

如何把 Microsoft Word 中所有的漢字字體替換為宋體?

Ctrl H ,然后,點擊更多,勾選使用通配符,查找內容中填入 [一-龥]{1,}, 這是 Word 通配符匹配漢字的經典寫法(匹配 Unicode 范圍內的 CJK 漢字)。 然后, “替換為”留空,點…

CMake從入門到實戰:現代C++項目構建指南

CMake從入門到實戰:現代C項目構建指南 引言 在跨平臺開發成為主流的今天,CMake作為開源構建系統的標桿工具,憑借其跨平臺性、靈活性和可擴展性,已成為C/C項目的事實標準。本文將帶你系統掌握CMake的核心機制,通過實戰…

Web安全滲透之長城杯奪旗賽

Web-Git flag1 掃描WEB目錄發現存在Git泄露(這里是隊友掃的,我這圖是拿的我后面掃的截圖,所以時間對不上。 使用GitHub - gakki429/Git_Extract: 提取遠程 git 泄露或本地 git 的工具拉取泄露代碼。 讀取到flag,全場一血捏。…