上一篇咱们拆分时序数据的 4 大组成部分,用的是 “干净的奶茶店数据”,没有一天缺失,也没有离谱的异常值。但很多同学留言说:“我拿到的真实数据,要么某几天没记录,要么突然冒出来一个‘天价销量’,根本没法直接拆分建模!”

这就是时序分析的 “预处理难关”:缺失值(数据漏记)和异常值(数据错记 / 突发) 会直接打乱趋势、季节规律,甚至让模型完全失效。比如某天真没记销量(缺失),直接空着会导致拆分报错;某天把 “300 杯” 输成 “3000 杯”(异常),会让趋势线突然飙升,分析结果全错。

今天咱们就解决这两个问题,共讲 6 种实用方法,3 种处理缺失值,3 种处理异常值,每种都带 Python 代码和避坑点,看完你就能把 “脏数据” 救回来。

一、缺失值怎么填?(3 种方法,按场景选)

时序数据的缺失不能乱填(比如普通数据常用的 “均值填充”,用在时序里会破坏趋势),得根据 “缺失时长” 和 “数据规律” 选方法。咱们还用之前生成的 “奶茶店 2023 年销量数据”,先故意造一些缺失值,再演示怎么处理。

第一步:先造点 “缺失值”(模拟真实场景)

先运行这段代码,给干净数据加 3 处缺失(分别对应 “短期缺失”、“趋势中缺失”、“季节中缺失”):

import pandas as pd

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")

# 保存原始数据
df_raw = df.copy()

# 场景1:短期缺失(2023-02-01到2023-02-02,2天,冬天平稳期)
df.loc["2023-02-01":"2023-02-02", "销量"] = np.nan
# 场景2:趋势中缺失(2023-05-10到2023-05-12,3天,春夏过渡,销量上升期)
df.loc["2023-05-10":"2023-05-12", "销量"] = np.nan
# 场景3:季节峰值缺失(2023-07-14,1天,周五,夏天旺季峰值)
df.loc["2023-07-14", "销量"] = np.nan


# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 缺失数据
plt.plot(df_raw.index, df_raw["销量"], color="gray", linestyle="--", alpha=0.6, label="缺失数据")
# 原始数据
plt.plot(df.index, df["销量"], color="#ff7f0e", linewidth=1.5, label="原始数据")

plt.title("奶茶店销量数据(含3处缺失值标注)", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

方法 1:前向填充(Forward Fill)适合 “短期、平稳期缺失”。它的核心逻辑是用缺失值 “前一天” 的数值填充。它适用场景为缺失时长≤3 天,且数据处于平稳期(无明显趋势 / 季节波动),比如冬天的非周末、无促销期。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")

# 复制原始数据
df_raw = df.copy()

# 场景1:短期缺失(2023-02-01到2023-02-02,2天,冬天平稳期)
df.loc["2023-02-01":"2023-02-02", "销量"] = np.nan
# 场景2:趋势中缺失(2023-05-10到2023-05-12,3天,春夏过渡,销量上升期)
df.loc["2023-05-10":"2023-05-12", "销量"] = np.nan
# 场景3:季节峰值缺失(2023-07-14,1天,周五,夏天旺季峰值)
df.loc["2023-07-14", "销量"] = np.nan

# 复制原始带缺失值的数据
df_interp = df.copy()
# 前向填充
df_interp["销量"] = df_interp["销量"].fillna(method="ffill", limit=3)


# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 缺失数据
plt.plot(df_raw.index, df_raw["销量"], color="gray", linestyle="--", alpha=0.6, label="缺失数据")
# 原始数据
plt.plot(df_interp.index, df_interp["销量"], color="#ff7f0e", linewidth=1.5, label="原始数据")
# 标注插值的缺失段(红色线段+圆点)
interp_dates = pd.date_range(start="2023-02-01", end="2023-02-02")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7,
    label="插值填充段"
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-05-10", end="2023-05-12")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-07-14", end="2023-07-14")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
plt.title("前向填充", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:简单快,不破坏短期平稳性;

  • 缺点:若缺失在趋势/季节峰值,会填错;

方法 2:线性插值(Linear Interpolation),适合 “趋势期缺失”。核心逻辑是用缺失值 “前后两端” 的数值,画一条直线,中间缺失值按直线比例填。适用场景为缺失时长≤5天,且数据处于趋势期(上升/下降),比如春夏过渡、新店增长期。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")
# 复制原始数据
df_raw = df.copy()
# 场景1:短期缺失(2023-02-01到2023-02-02,2天,冬天平稳期)
df.loc["2023-02-01":"2023-02-02", "销量"] = np.nan
# 场景2:趋势中缺失(2023-05-10到2023-05-12,3天,春夏过渡,销量上升期)
df.loc["2023-05-10":"2023-05-12", "销量"] = np.nan
# 场景3:季节峰值缺失(2023-07-14,1天,周五,夏天旺季峰值)
df.loc["2023-07-14", "销量"] = np.nan
# 复制原始带缺失值的数据
df_interp = df.copy()
# 线性插值(method="linear",自动根据前后非空值计算中间值)
df_interp["销量"] = df_interp["销量"].interpolate(method="linear")
# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 缺失数据
plt.plot(df_raw.index, df_raw["销量"], color="gray", linestyle="--", alpha=0.6, label="缺失数据")
# 原始数据
plt.plot(df_interp.index, df_interp["销量"], color="#ff7f0e", linewidth=1.5, label="原始数据")
# 标注插值的缺失段(红色线段+圆点)
interp_dates = pd.date_range(start="2023-02-01", end="2023-02-02")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7,
    label="插值填充段"
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-05-10", end="2023-05-12")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-07-14", end="2023-07-14")
plt.plot(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_interp.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
plt.title("线性插值", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:能跟随趋势,比前向填充更准;

  • 缺点:若缺失在季节峰值,没法体现 “峰值” 规律;

方法 3:季节性填充(Seasonal Fill),适合 “季节/周期缺失”。核心逻辑是用 “同季节、同星期” 的历史数据填充。适用场景为缺失在季节峰值/谷值,或有明显周期的数据。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")
# 复制原始数据
df_raw = df.copy()
# 场景1:短期缺失(2023-02-01到2023-02-02,2天,冬天平稳期)
df.loc["2023-02-01":"2023-02-02", "销量"] = np.nan
# 场景2:趋势中缺失(2023-05-10到2023-05-12,3天,春夏过渡,销量上升期)
df.loc["2023-05-10":"2023-05-12", "销量"] = np.nan
# 场景3:季节峰值缺失(2023-07-14,1天,周五,夏天旺季峰值)
df.loc["2023-07-14", "销量"] = np.nan
# 复制原始带缺失值的数据
df_seasonal = df.copy()
# 定义季节性填充函数:找缺失日期的“前N个同星期”的数据(这里N=1,即前一周同星期)
def seasonal_fill(row):
    if pd.isna(row["销量"]):
        date = row.name  # 缺失日期(索引)
        weekday = date.weekday()  # 获取缺失日期的星期(0=周一,6=周日)
        # 找“前一周的同星期”(比如周五找前一个周五)
        prev_week_date = date - pd.Timedelta(weeks=1)
        # 检查前一周同星期是否在数据中且非空,若空则找前两周
        for n in [1, 2]:
            target_date = date - pd.Timedelta(weeks=n)
            if target_date in df_seasonal.index and not pd.isna(df_seasonal.loc[target_date, "销量"]):
                # 打印填充逻辑,方便理解
                print(f"填充逻辑:{date.strftime('%Y-%m-%d')}(周{weekday+1})缺失,用前{n}周同星期{target_date.strftime('%Y-%m-%d')}的{df_seasonal.loc[target_date, '销量']}杯填充")
                return df_seasonal.loc[target_date, "销量"]
        # 若找不到历史同星期数据,用当月同星期均值填充(兜底方案)
        month = date.month
        same_weekday_in_month = df_seasonal[(df_seasonal.index.month == month) & (df_seasonal.index.weekday == weekday)]
        month_weekday_mean = same_weekday_in_month["销量"].mean()
        print(f"填充逻辑:{date.strftime('%Y-%m-%d')}(周{weekday+1})缺失,用当月同星期均值{month_weekday_mean:.0f}杯填充")
        return month_weekday_mean
    else:
        return row["销量"]
df_seasonal["销量"] = df_seasonal.apply(seasonal_fill, axis=1)
# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 缺失数据
plt.plot(df_raw.index, df_raw["销量"], color="gray", linestyle="--", alpha=0.6, label="缺失数据")
# 原始数据
plt.plot(df_seasonal.index, df_seasonal["销量"], color="#ff7f0e", linewidth=1.5, label="原始数据")
# 标注插值的缺失段(红色线段+圆点)
interp_dates = pd.date_range(start="2023-02-01", end="2023-02-02")
plt.plot(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7,
    label="插值填充段"
)
plt.scatter(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-05-10", end="2023-05-12")
plt.plot(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
interp_dates = pd.date_range(start="2023-07-14", end="2023-07-14")
plt.plot(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    linewidth=3,
    alpha=0.7
)
plt.scatter(
    interp_dates,
    df_seasonal.loc[interp_dates, "销量"],
    color="red",
    s=5,
    marker="o",
    edgecolor="black",
    zorder=5
)
plt.title("季节性填充", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:能保留季节规律,适合周期性缺失;

  • 缺点:需要有足够的历史数据(至少 1 个完整周期,比如 1 周),否则找不到同季节数据;

方法

适用场景

优点

缺点

前向填充

平稳期

简单快,保平稳

不适合趋势/季节期

线性插值

趋势期

跟随趋势,精度高

不适合季节峰值

季节性填充

季节/周期

保季节规律

需要历史周期数据

二、异常值怎么处理?(3 种方法,从简单到精准)

异常值就是 “明显偏离正常范围” 的数据,比如奶茶店平时周五卖 480 杯,某天突然记成 1800 杯(输错了),或某天只卖 80 杯(停电了)。咱们先给干净数据加 2 个异常值,再处理。

第一步:先造点 “异常值”(2 种典型场景)

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")
# 保存原始数据
df_raw = df.copy()
# 场景1:极端高异常
df.loc["2023-06-20", "销量"] = 1800
# 场景2:极端低异常
df.loc["2023-09-05", "销量"] = 80
# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 异常数据
plt.plot(df.index, df["销量"], color="red", alpha=0.6, label="异常数据")
# 原始数据
plt.plot(df_raw.index, df_raw["销量"], color="blue", alpha=0.6, label="原始数据")
plt.title("奶茶店销量数据(含2处异常值标注)", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

方法 1:箱线图法(Box Plot),适合 “快速识别、简单处理”。核心逻辑是用数据的 “四分位数” 划定正常范围,超出范围的就是异常值,然后用 “中位数” 或 “相邻正常值” 替换。适用场景为快速排查异常,数据分布较均匀(无太多极端值),比如日常销量、温度数据。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")
# 保存原始数据
df_raw = df.copy()
# 场景1:极端高异常
df.loc["2023-06-20", "销量"] = 1800
# 场景2:极端低异常
df.loc["2023-09-05", "销量"] = 80
# 复制数据
df_box = df.copy()
# 计算箱线图的异常值阈值(Q1-1.5×IQR,Q3+1.5×IQR)
Q1 = df_box["销量"].quantile(0.25)  # 下四分位数(25%分位数)
Q3 = df_box["销量"].quantile(0.75)  # 上四分位数(75%分位数)
IQR = Q3 - Q1                      # 四分位距
lower_bound = Q1 - 1.5 * IQR       # 异常值下限
upper_bound = Q3 + 1.5 * IQR       # 异常值上限
# 筛选异常点
outliers = df[(df["销量"] < lower_bound) | (df["销量"] > upper_bound)]
# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 带异常数据
plt.plot(df.index, df["销量"], color="blue", alpha=0.6, label="异常数据")
# 标记异常点(用红色圆点突出显示)
plt.scatter(outliers.index, outliers["销量"], color="red", s=50, label="检测到的异常点")
plt.title("箱线图法", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:简单直观,不用懂复杂统计;

  • 缺点:对 “有季节波动” 的数据不太准;

方法 2:Z-score 法,适合 “数据近似正态分布”。核心逻辑是计算每个数据的 “标准化距离”(Z-score = (x - 均值)/ 标准差),通常认为 | Z-score|>3 的是异常值,再用 “均值” 或 “线性插值” 替换。适用场景是数据近似正态分布,精度比箱线图高。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题

# 加载之前生成的干净数据
# 这里使用模拟数据代替,实际使用时替换为pd.read_csv("milk_tea_sales_2023.csv")
dates = pd.date_range(start="2023-01-01", end="2023-12-31")
df = pd.DataFrame({"日期": dates, "销量": np.random.randint(300, 800, size=len(dates))})
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")

# 保存原始数据
df_raw = df.copy()

# 场景1:极端高异常
df.loc["2023-06-20", "销量"] = 1800
# 场景2:极端低异常
df.loc["2023-09-05", "销量"] = 80

# 复制数据
df_zscore = df.copy()

# 计算Z-score - 修改部分:保持原始索引
def calculate_zscore(group):
    mean = group["销量"].mean()    # 当月均值
    std = group["销量"].std()      # 当月标准差
    group["Z-score"] = (group["销量"] - mean) / std  # 标准化距离
    return group

# 按月份分组计算Z-score,但不改变原始索引
df_zscore["月份"] = df_zscore.index.month
df_zscore = df_zscore.groupby("月份", group_keys=False).apply(calculate_zscore).drop(columns="月份")

# 识别异常值(|Z-score|>3,即概率<0.1%的极端值)
outlier_threshold = 3
outliers = df_zscore[abs(df_zscore["Z-score"]) > outlier_threshold]

# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))

# 带异常数据
plt.plot(df.index, df["销量"], color="blue", alpha=0.6, label="异常数据")
# 标记异常点(用红色圆点突出显示)
plt.scatter(outliers.index, outliers["销量"], color="red", s=50, label="检测到的异常点")

plt.title("Z-score法", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:考虑数据分布,精度高;

  • 缺点:对非正态数据不准;

方法 3:移动标准差法,适合 “时序数据动态异常”。核心逻辑是用 “滑动窗口”计算每个点的 “局部均值和标准差”,超出 “局部均值 ±2× 局部标准差” 的是异常值,用 “局部均值” 替换。适用场景为时序数据的动态异常(比如某天销量突然偏离最近一周的趋势),最贴合时序特点。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 解决中文乱码
plt.rcParams['axes.unicode_minus'] = False    # 解决负号显示问题
# 加载之前生成的干净数据
df = pd.read_csv("milk_tea_sales_2023.csv")
df["日期"] = pd.to_datetime(df["日期"])
df = df.set_index("日期")
# 保存原始数据
df_raw = df.copy()
# 场景1:极端高异常
df.loc["2023-06-20", "销量"] = 1800
# 场景2:极端低异常
df.loc["2023-09-05", "销量"] = 80
# 复制数据
df_rolling = df.copy()
# 计算移动窗口统计(窗口=7天,前后各3天)
window = 7  # 窗口大小=1周(符合周周期规律)
df_rolling["滚动均值"] = df_rolling["销量"].rolling(window=window, center=True).mean()  # 局部均值
df_rolling["滚动标准差"] = df_rolling["销量"].rolling(window=window, center=True).std()  # 局部标准差
df_rolling["滚动上限"] = df_rolling["滚动均值"] + 2 * df_rolling["滚动标准差"]  # 异常值上限
df_rolling["滚动下限"] = df_rolling["滚动均值"] - 2 * df_rolling["滚动标准差"]  # 异常值下限
# 识别异常值(超出滚动上下限)
outliers = df_rolling[(df_rolling["销量"] < df_rolling["滚动下限"]) | (df_rolling["销量"] > df_rolling["滚动上限"])]
# 画趋势期填充效果对比图
plt.figure(figsize=(12, 6))
# 带异常数据
plt.plot(df.index, df["销量"], color="blue", alpha=0.6, label="异常数据")
# 标记异常点(用红色圆点突出显示)
plt.scatter(outliers.index, outliers["销量"], color="red", s=50, label="检测到的异常点")
plt.title("移动标准差法", fontsize=14)
plt.xlabel("日期", fontsize=12)
plt.ylabel("销量(杯)", fontsize=12)
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()

图片

  • 优点:动态适应时序变化,不会误判季节峰值;

  • 缺点:窗口大小难选(太小易误判,太大反应慢);

方法

适用场景

优点

缺点

箱线图法

快速排查、数据均匀

简单直观

不适合季节数据

Z-score法

数据近似正态分布

精度高

非正态数据不准

移动标准差法

时序动态异常、有周期

贴合时序特点,最准

窗口大小需要调试

所有代码自取:

通过网盘分享的文件:代码:时序数据预处理避坑指南:缺失值和异常值怎么处理?(附 6 种实用方法)

链接: https://pan.baidu.com/s/1I8O-O_lgRBfD2I72uzxNZg 提取码: d7ua 

--来自百度网盘超级会员v7的分享

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐