当前位置:首页>python>第218讲:告别“熟人选美”:VBA和Python双方案科学随机抽样在客服质检中的实现与应用

第218讲:告别“熟人选美”:VBA和Python双方案科学随机抽样在客服质检中的实现与应用

  • 2026-04-02 05:41:34
第218讲:告别“熟人选美”:VBA和Python双方案科学随机抽样在客服质检中的实现与应用

在客服质量管理的核心环节——录音抽检中,如何确保抽样的随机性公平性,一直是管理者面临的挑战。抽样如果带有倾向性(如只抽听某几位客服、或只抽特定时段的录音),得出的质检结论将严重失真,既无法公平评价坐席表现,也无法准确发现系统性服务问题。

“从海量通话中随机抽取N条进行考核”,这句话看似简单,但背后涉及抽样方法、随机算法、实现效率等多重考量。本文将深入探讨随机抽样的业务逻辑与技术实现,并提供Excel VBAPython两套可落地的自动化解决方案,让您的质检抽样真正实现科学、公平、高效。


一、 核心逻辑:何为真正的“随机抽样”?

在统计学中,简单随机抽样是指从总体中抽取样本时,总体中每个个体被抽中的概率相等,且每次抽取相互独立。在客服质检场景中,这意味着:

  1. 等概率:每一条符合条件的通话记录,被抽中的机会必须完全相同。

  2. 可再现性:虽然结果是随机的,但抽样过程应可记录、可复现(例如,通过设定随机种子),以便核查。

  3. 排除人为干扰:抽样程序应完全由算法决定,避免质检员主观选择样本。

  4. 覆盖全面性:理想的抽样应能覆盖不同的客服、时段、业务类型,但这通常通过分层抽样(先分组,再在各组内随机抽)来实现,而非简单随机抽样。

本讲聚焦于实现“简单随机抽样”,这是构建更复杂抽样策略(如分层、系统抽样)的基础。我们将从包含数万甚至数十万行记录的通话清单中,无放回地随机抽取N条记录。


二、 Excel VBA实现:基于Rnd函数的随机排序法

对于数据量不大(如数万条)、且抽样工作主要在Excel环境中进行的团队,使用VBA是一种可行的自动化方案。其核心思路是:为每条记录生成一个随机数,然后按随机数排序,最后取排序后的前N条记录。

实现原理与步骤

  1. 生成随机数:使用Rnd函数为每一行生成一个介于0到1之间的随机小数。

  2. 关键初始化:在循环生成随机数前,使用Randomize语句(或Randomize Timer)初始化随机数生成器,以确保每次运行程序时,产生的随机数序列不同,避免抽样结果固定不变。

  3. 排序与选取:按生成的随机数列对整个数据集进行排序(升序或降序),排序后,数据顺序被完全打乱,此时前N行即为随机抽取的样本。

  4. 输出结果:将前N行数据复制到新的工作表或区域,形成抽样清单。

关键代码与详细解析

Sub RandomSamplingVBA()    Dim wsSource As Worksheet, wsDest As Worksheet    Dim lastRow As Long, lastCol As Long, sampleSize As Long    Dim i As Long    Dim samplingRange As Range    ' 设置工作表与参数    Set wsSource = ThisWorkbook.Sheets("通话总表")    Set wsDest = ThisWorkbook.Sheets.Add(After:=wsSource)    wsDest.Name = "随机抽样结果"    ' 获取原始数据范围    lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row    lastCol = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column    ' 输入抽样数量    sampleSize = Application.InputBox("请输入需要随机抽取的记录数量:""随机抽样", Type:=1)    If sampleSize <= 0 Or sampleSize > (lastRow - 1) Then        MsgBox "抽样数量无效!", vbExclamation        Exit Sub    End If    ' 在原始数据最右侧新增一列,用于存放随机数    wsSource.Cells(1, lastCol + 1).Value = "随机数"    ' 初始化随机数生成器(确保每次运行结果不同)    Randomize    ' 为每一行数据生成随机数(从第2行开始,跳过标题行)    For i = 2 To lastRow        wsSource.Cells(i, lastCol + 1).Value = Rnd()    Next i    ' 定义包含数据和随机数的整个范围    Set samplingRange = wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(lastRow, lastCol + 1))    ' 按“随机数”列对整个范围进行排序(打乱顺序)    samplingRange.Sort Key1:=wsSource.Cells(1, lastCol + 1), Order1:=xlAscending, Header:=xlYes    ' 将排序后的前N行(样本)复制到新工作表    wsSource.Range(wsSource.Cells(1, 1), wsSource.Cells(1, lastCol)).Copy Destination:=wsDest.Range("A1") ' 复制标题    wsSource.Range(wsSource.Cells(2, 1), wsSource.Cells(1 + sampleSize, lastCol)).Copy Destination:=wsDest.Range("A2")    ' 可选:清除原始数据表中的随机数列    wsSource.Columns(lastCol + 1).ClearContents    ' 格式美化    wsDest.Cells.EntireColumn.AutoFit    wsDest.Range("A1").CurrentRegion.Borders.LineStyle = xlContinuous    ' 生成报告    wsDest.Cells(1, lastCol + 2).Value = "抽样说明"    wsDest.Cells(2, lastCol + 2).Value = "抽样时间: " & Now    wsDest.Cells(3, lastCol + 2).Value = "总体数量: " & (lastRow - 1)    wsDest.Cells(4, lastCol + 2).Value = "样本数量: " & sampleSize    wsDest.Cells(5, lastCol + 2).Value = "抽样比例: " & Format(sampleSize / (lastRow - 1), "0.00%")    MsgBox "随机抽样完成!共从 " & (lastRow - 1) & " 条记录中抽取了 " & sampleSize & " 条样本。", vbInformationEnd Sub

VBA方案注意事项与局限

  • 随机性质量Rnd函数是伪随机数生成器,但对于一般的质检抽样需求已足够。Randomize语句利用系统计时器初始化种子,可显著提高随机性。

  • 性能瓶颈:循环为每一行生成随机数并在大数据集上排序,当数据量超过10万行时,速度会明显下降,并可能因Excel的行数限制而无法处理。

  • 数据完整性:上述方法修改了原始数据表的顺序并添加了辅助列。更严谨的做法是将数据读入数组,在数组内生成随机数并排序索引,再输出结果,以避免对源数据的任何改动。

  • 功能单一:难以直接实现“按客服组分层,每组抽5条”这类复杂抽样。


三、 Python实现:pandas的sample方法与专业抽样框架

对于需要处理海量数据、实现复杂抽样逻辑,或希望将抽样流程自动化的场景,Python的pandas库提供了工业级、高性能的解决方案。其核心方法是DataFrame.sample()

核心方法:DataFrame.sample()

df.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)
  • n:抽取的样本数量(条数)。

  • frac:抽取的样本比例(0到1之间的小数)。nfrac只需指定一个。

  • replace:是否允许重复抽样(有放回抽样)。默认为False,即无放回抽样,符合质检常规。

  • weights:样本权重,可为每个样本指定被抽中的概率,实现不等概率抽样。

  • random_state:随机种子。设置一个整数后,每次运行结果相同,保证抽样的可复现性,这对审计至关重要。

  • axis:轴,默认为0(行抽样)。

完整代码与进阶应用

import pandas as pdimport numpy as npfrom datetime import datetimedef random_sampling_pandas(data_path, output_path, sample_n=None, sample_frac=None, random_seed=2023, stratify_by=None):    """    从通话记录中随机抽取样本。    参数:    data_path: 原始数据文件路径(CSV/Excel)。    output_path: 抽样结果输出路径。    sample_n: 抽取的绝对数量。    sample_frac: 抽取的相对比例(0-1)。n和frac二选一。    random_seed: 随机种子,用于确保结果可复现。    stratify_by: 进行分层抽样的列名(如'客服组')。如果提供,则在每层内按比例抽取。    返回:    抽样结果的DataFrame,并保存为文件。    """    # 1. 加载数据    df = pd.read_csv(data_path)  # 如果是Excel,使用 pd.read_excel    print(f"原始数据记录数: {len(df)}")    # 2. 抽样逻辑    if sample_n is not None and sample_frac is not None:        raise ValueError("不能同时指定 sample_n 和 sample_frac,请只指定一个。")    elif sample_n is None and sample_frac is None:        raise ValueError("必须指定 sample_n 或 sample_frac 中的一个。")    sampled_df = None    if stratify_by is not None:        # 分层随机抽样:确保每个子群在样本中都有代表        if sample_frac is not None:            # 按比例分层抽样:每层按相同比例抽取            sampled_df = df.groupby(stratify_by, group_keys=False).apply(                lambda x: x.sample(frac=sample_frac, random_state=random_seed, replace=False)            )        elif sample_n is not None:            # 按样本量分层抽样:计算每层应抽数量(这里使用按比例分配)            # 更常见的需求是每层抽取固定数量,可以使用 groupby + sample(n=固定值)            # 此处演示按总体比例分配样本            group_counts = df[stratify_by].value_counts()            # 计算每层应抽数量(按比例,并确保至少1条,不超过该层总数)            sample_sizes = (group_counts / group_counts.sum() * sample_n).round().astype(int)            # 处理可能因四舍五入导致的总数偏差            diff = sample_n - sample_sizes.sum()            if diff != 0:                # 将偏差加到最大的组(或其他调整策略)                sample_sizes[sample_sizes.idxmax()] += diff            sampled_df = pd.DataFrame()            for group, size in sample_sizes.items():                group_data = df[df[stratify_by] == group]                if len(group_data) > 0 and size > 0:                    sampled_group = group_data.sample(n=min(size, len(group_data)),                                                       random_state=random_seed,                                                       replace=False)                    sampled_df = pd.concat([sampled_df, sampled_group])    else:        # 简单随机抽样        if sample_n is not None:            sampled_df = df.sample(n=min(sample_n, len(df)), random_state=random_seed, replace=False)        else:  # sample_frac            sampled_df = df.sample(frac=sample_frac, random_state=random_seed, replace=False)    # 3. 重置索引并排序(按原始顺序或随机顺序)    sampled_df = sampled_df.reset_index(drop=True)    # 可以按原始ID或时间排序,这里按原始数据顺序的ID排序,便于查找    if '通话ID' in sampled_df.columns:        sampled_df = sampled_df.sort_values('通话ID').reset_index(drop=True)    # 4. 输出抽样报告    report = {        "抽样时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),        "总体容量"len(df),        "样本容量"len(sampled_df),        "抽样比例"f"{(len(sampled_df)/len(df))*100:.2f}%",        "随机种子": random_seed,        "抽样方法""分层随机抽样" if stratify_by else "简单随机抽样",        "分层字段": stratify_by if stratify_by else "无"    }    print("\n" + "="*50)    print("随机抽样完成报告")    print("="*50)    for key, value in report.items():        print(f"{key}{value}")    if stratify_by:        print("\n样本分层分布:")        strat_dist = sampled_df[stratify_by].value_counts()        for group, count in strat_dist.items():            orig_count = df[df[stratify_by]==group].shape[0]            print(f"  {group}: 样本 {count} 条 (占该层 {count/orig_count*100:.1f}%,占总体 {count/len(df)*100:.1f}%)")    # 5. 保存结果    sampled_df.to_csv(output_path, index=False, encoding='utf-8-sig')    print(f"\n抽样结果已保存至: {output_path}")    return sampled_df, report# --- 使用示例 ---# 模拟生成通话数据np.random.seed(42)n_total = 10000data = {    '通话ID'range(1000110001 + n_total),    '客服工号': np.random.choice(['CS1001''CS1002''CS1003''CS1004''CS1005'], n_total),    '客服组': np.random.choice(['售前组''售后组''技术支持组'], n_total, p=[0.40.40.2]),    '通话时长': np.random.randint(30600, n_total),    '通话日期': pd.date_range('2023-10-01', periods=n_total, freq='T').strftime('%Y-%m-%d %H:%M')}df = pd.DataFrame(data)df.to_csv('all_call_records.csv', index=False, encoding='utf-8-sig')print("=== 示例1:简单随机抽样(按数量)===")sample1, report1 = random_sampling_pandas('all_call_records.csv'                                          'simple_random_sample_100.csv'                                          sample_n=100                                          random_seed=218)print("\n\n=== 示例2:简单随机抽样(按比例)===")sample2, report2 = random_sampling_pandas('all_call_records.csv'                                          'simple_random_sample_1percent.csv'                                          sample_frac=0.01,  # 1%                                          random_seed=218)print("\n\n=== 示例3:分层随机抽样(按客服组)===")sample3, report3 = random_sampling_pandas('all_call_records.csv'                                          'stratified_sample_200.csv'                                          sample_n=200                                          stratify_by='客服组',                                          random_seed=218)

Python方案的核心优势

  1. 功能强大且简洁:一行df.sample(n=100)即可完成核心抽样,参数丰富,满足多种需求。

  2. 性能卓越pandas的抽样算法高度优化,即使面对百万行数据,也能在瞬间完成。

  3. 专业抽样方法:轻松实现分层抽样,确保样本在关键维度(如客服组、业务类型)上的分布与总体一致,使样本更具代表性,这是简单随机抽样无法保证的。

  4. 可复现性:通过设置random_state参数,可以完全复现某次抽样结果,这对于质检审计、结果复核至关重要。

  5. 易于集成:抽样代码可轻松嵌入自动化流水线,例如每天自动从当日通话中抽取样本,并推送质检任务。


四、 方案对比与决策指南

维度

Excel VBA 方案

Python (pandas) 方案

易用性与学习成本

中,需掌握VBA基础,但可在Excel内直接完成

中高,需掌握Python及pandas,但代码更简洁直观

数据处理能力

弱,受限于Excel行数(约104万)和性能,数万行以上体验不佳

极强,可处理数百万乃至上千万行数据,速度极快

抽样方法丰富性

弱,实现简单随机抽样已较复杂,分层等高级方法实现困难

极强,内置简单随机、分层、加权抽样,并易于扩展

可复现性与审计

弱,需额外代码保存随机种子,且受Excel环境影响

,通过random_state参数天然支持,结果绝对可复现

自动化与集成

中,可定时运行宏,但集成外部系统能力弱

,可作为独立脚本或集成到数据平台、任务调度系统中

选型建议

  • 选择Excel VBA:如果你的数据量在数万条以内,抽样是偶尔进行的手动任务,且团队没有Python使用环境,希望所有操作在熟悉的Excel界面内完成。

  • 选择Python:如果你的数据量巨大,抽样是日常或周期性的常规工作,需要确保抽样科学性和可审计性,或希望实现分层抽样等高级功能。这是构建专业化、规模化质检体系的必然选择。


五、 从抽样到洞察:构建科学的质检体系

科学的随机抽样是起点,而非终点:

  1. 制定抽样计划:根据业务目标(如发现共性问题、评估个人表现、监控新流程效果)确定总抽样量、抽样频率(每日/每周)和抽样方法(简单随机/分层/重点抽样)。

  2. 样本分配:利用分层抽样,确保样本覆盖所有关键维度(新人/老人、不同业务线、高低峰时段),使评估更全面公平。

  3. 过程记录:务必记录每次抽样的随机种子总体范围抽样方法样本列表,形成完整的质检抽样档案。

  4. 结果外推:理解样本统计量(如样本中的不满意率)是对总体参数的估计,存在抽样误差。在根据样本结果做出管理决策时,需结合置信区间等统计概念进行审慎判断。

记住,科学的抽样不是为随机而随机,而是为了通过一个公平、高效、有代表性的“窗口”,去更真实地洞察“全景”,从而驱动服务质量的持续改善。


知识检验:5道选择题

  1. 在统计学中,从总体中抽取样本,每个个体被抽中的概率相同,且每次抽取相互独立,这种抽样方法称为?

    A) 系统抽样

    B) 分层抽样

    C) 整群抽样

    D) 简单随机抽样

  2. 在Python的pandas库中,要从一个名为df的DataFrame中无放回地随机抽取100行作为样本,正确的代码是?

    A) df.head(100)

    B) df.sample(n=100)

    C) df.sample(n=100, replace=True)

    D) df.tail(100)

  3. 在VBA中,使用Rnd函数生成随机数时,为了确保每次运行程序时产生的随机数序列不同(避免抽样结果固定),通常需要在循环生成随机数前执行什么语句?

    A) Rnd = Timer

    B) Randomize

    C) Seed = 1

    D) ResetRnd

  4. 在客服质检场景中,如果希望样本中“售前组”和“售后组”的客服比例与总体中的比例基本保持一致,应该采用以下哪种抽样方法?

    A) 简单随机抽样

    B) 方便抽样

    C) 分层随机抽样(以“客服组”为分层变量)

    D) 判断抽样

  5. pandasdf.sample()方法中,参数random_state的主要作用是?

    A) 提高抽样的运行速度

    B) 指定抽样的比例

    C) 设置随机种子,使得每次抽样的结果可以完全复现

    D) 允许有放回抽样


答案

  1. D。简单随机抽样是最基本的概率抽样方法,其核心特征是总体中每个个体被抽中的概率相等,且抽样是独立的。选项A、B、C是其他概率抽样方法,各有不同的适用场景和规则。

  2. B。df.sample(n=100)默认进行无放回抽样(replace=False),随机抽取100行。C选项的replace=True表示有放回抽样,不符合常规质检需求。A和D是抽取固定位置的行,不是随机的。

  3. B。Randomize语句(或Randomize Timer)用于初始化VBA的随机数生成器,它通常以系统计时器为种子,从而确保每次运行程序时,Rnd函数产生的随机数序列起点不同,进而得到不同的抽样结果。

  4. C。分层随机抽样是先将总体按照某种特征(如“客服组”)分成不同的层(子总体),然后在各层内独立地进行简单随机抽样。这种方法可以保证样本在各层的分布与总体一致,特别适用于组间差异较大的情况。简单随机抽样无法保证样本的组成比例。

  5. C。random_state参数接收一个整数作为随机种子。设置固定的种子后,每次运行sample()方法产生的随机样本序列将是完全相同的,这保证了抽样的可复现性,对于实验、审计和调试至关重要。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-03 11:28:30 HTTP/2.0 GET : https://f.mffb.com.cn/a/483949.html
  2. 运行时间 : 0.110068s [ 吞吐率:9.09req/s ] 内存消耗:4,775.71kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=30e3f338884b7da2b84042fd508e48b7
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000677s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000562s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000293s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.002082s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000557s ]
  6. SELECT * FROM `set` [ RunTime:0.007979s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000723s ]
  8. SELECT * FROM `article` WHERE `id` = 483949 LIMIT 1 [ RunTime:0.000793s ]
  9. UPDATE `article` SET `lasttime` = 1775186910 WHERE `id` = 483949 [ RunTime:0.016027s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000393s ]
  11. SELECT * FROM `article` WHERE `id` < 483949 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000573s ]
  12. SELECT * FROM `article` WHERE `id` > 483949 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001360s ]
  13. SELECT * FROM `article` WHERE `id` < 483949 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.003447s ]
  14. SELECT * FROM `article` WHERE `id` < 483949 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.003627s ]
  15. SELECT * FROM `article` WHERE `id` < 483949 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.002000s ]
0.111745s