当前位置:首页>python>从零到一:用Python构建你的第一个机器学习预测模型

从零到一:用Python构建你的第一个机器学习预测模型

  • 2026-03-24 23:00:37
从零到一:用Python构建你的第一个机器学习预测模型
大家好,我是Python与AI智能研习社的小编。今天我们要一起完成一个激动人心的任务——用Python构建你的第一个机器学习预测模型!无论你是刚刚学完Python基础,还是对AI充满好奇但不知从何下手,这篇文章都将带你走完一个完整机器学习项目的全流程。
我知道,第一次接触机器学习可能会觉得有些高深莫测,那些术语和步骤听起来就像天书。别担心,今天我不讲复杂理论,咱们就像朋友一起做项目那样,一步步把代码跑起来,看到结果。我保证,跟着做完这个项目,你会对机器学习有实实在在的把握感。
我们将使用经典的乳腺癌数据集,通过数据准备、特征工程、模型训练、评估优化,最终构建一个能预测肿瘤是良性还是恶性的分类模型。准备好了吗?让我们开始吧!
1.项目概述:问题定义与业务场景
在开始写代码之前,我们先明确要解决什么问题。假设你是一名医疗数据分析员,医院给了你一批乳腺肿瘤的特征数据(如肿瘤半径、质地、周长等),希望你能建立一个模型,根据这些特征自动判断肿瘤是良性(benign)还是恶性(malignant)。
业务价值:这样的模型可以帮助医生进行初步筛查,提高诊断效率,为患者争取宝贵时间。
技术目标:构建一个二分类预测模型,输入肿瘤特征,输出“良性”或“恶性”预测结果。
项目流程全景图
整个过程就像烹饪一道菜:先准备食材(数据清洗),再切配调味(特征工程),然后选择烹饪方法(模型选择),接着开火烹饪(模型训练),最后尝味道调整(评估优化),直到菜品上桌(部署应用)。
2.数据收集与清洗:使用Pandas处理真实数据集
任何机器学习项目都始于数据。幸运的是,Python的scikit-learn库自带了一些经典数据集,我们今天就用乳腺癌数据集(Breast Cancer Wisconsin Dataset),它包含了569个样本、30个特征和1个目标标签(恶性/良性)。
2.1 加载数据
# 导入必要的库import pandas as pdimport numpy as npfrom sklearn.datasets import load_breast_cancerimport matplotlib.pyplot as pltimport seaborn as sns# 设置中文字体(如果需要显示中文)plt.rcParams['font.sans-serif'] = ['Noto Sans CJK JP']plt.rcParams['axes.unicode_minus'] = False# 加载数据集cancer = load_breast_cancer()print("数据集特征名称:", cancer.feature_names[:5], "...")  # 显示前5个特征名print("目标标签含义:", cancer.target_names)  # 显示目标标签含义print("数据形状: 特征矩阵", cancer.data.shape, "目标向量", cancer.target.shape)
运行这段代码,你会看到:
数据集特征名称: ['mean radius''mean texture''mean perimeter''mean area''mean smoothness'] ...目标标签含义: ['malignant''benign']数据形状: 特征矩阵 (56930) 目标向量 (569,)
2.2 探索性数据分析(EDA)
在清洗之前,我们先看看数据长什么样,有没有明显问题。
# 将数据转为DataFrame方便处理df = pd.DataFrame(cancer.data, columns=cancer.feature_names)df['diagnosis'] = cancer.target  # 添加目标列df['diagnosis'] = df['diagnosis'].map({0'malignant'1'benign'})  # 映射为可读标签# 查看前几行print("数据预览:")print(df.head())# 查看基本信息print("\n数据基本信息:")print(df.info())# 查看统计摘要print("\n数值特征统计摘要:")print(df.describe().round(2))
2.3 数据清洗
真实数据往往有缺失值、异常值等问题,但这个数据集已经过预处理,相对干净。我们还是要检查一下:
# 检查缺失值missing_values = df.isnull().sum()print("缺失值统计:")print(missing_values[missing_values > 0])# 检查类别分布(是否均衡)class_distribution = df['diagnosis'].value_counts()print("\n类别分布:")print(class_distribution)print("恶性比例: {:.1%}".format(class_distribution['malignant'] / len(df)))
如果发现有缺失值,常用的处理方法有:删除缺失行、用均值/中位数填充、用算法预测填充等。今天的数据很完整,我们可以跳过这一步。
3.特征工程:特征选择、转换与标准化
特征工程是机器学习的“灵魂”,好的特征能让模型性能大幅提升。我们分三步:特征选择、转换、标准化。
3.1 特征选择
30个特征是否都需要?也许有些特征与目标关系不大,甚至带来噪音。我们先看看特征与目标的相关性。
# 计算特征与目标的相关性(需要将目标转为数值)df_numeric = df.copy()df_numeric['diagnosis'] = df_numeric['diagnosis'].map({'malignant'0'benign'1})# 计算相关系数correlation = df_numeric.corr()['diagnosis'].sort_values(ascending=False)print("与诊断结果相关性最高的10个特征:")print(correlation.head(10))# 可视化相关性plt.figure(figsize=(106))correlation.drop('diagnosis').plot(kind='bar')plt.title('特征与诊断结果的相关性')plt.xlabel('特征')plt.ylabel('相关系数')plt.tight_layout()plt.savefig('outputs/文章/首周/特征相关性.png', dpi=300, bbox_inches='tight')plt.show()
从图中可以看到,worst radiusworst perimeter等特征与诊断结果高度相关(负相关表示恶性时这些值较大)。我们保留所有特征进行后续建模,但在实际项目中,可能会选择 top-k 特征或使用更复杂的特征选择方法。
3.2 特征转换
某些特征的分布可能偏斜,我们可以进行对数转换、平方根转换等。这里我们先检查特征的分布。
# 查看几个重要特征的分布important_features = ['worst radius''mean concave points''worst texture''mean radius']fig, axes = plt.subplots(22, figsize=(128))axes = axes.flatten()for i, feature in enumerate(important_features):    axes[i].hist(df[feature], bins=30, alpha=0.7, color='skyblue', edgecolor='black')    axes[i].set_title(f'{feature} 分布')    axes[i].set_xlabel(feature)    axes[i].set_ylabel('频数')plt.tight_layout()plt.savefig('outputs/文章/首周/特征分布.png', dpi=300, bbox_inches='tight')plt.show()
3.3 特征标准化
很多机器学习算法(如SVM、逻辑回归、KNN)对特征的尺度敏感,我们需要将特征标准化到相似的范围。常用方法有:标准化(均值为0,标准差为1)和归一化(缩放到[0,1]区间)。
from sklearn.preprocessing import StandardScaler# 分离特征和目标X = df_numeric.drop('diagnosis', axis=1)y = df_numeric['diagnosis']# 标准化特征scaler = StandardScaler()X_scaled = scaler.fit_transform(X)print("标准化后的特征示例(前5行前5列):")print(pd.DataFrame(X_scaled[:5, :5], columns=X.columns[:5]).round(3))
4.模型选择与训练:Scikit-learn常用算法对比
现在是选择“烹饪方法”的时候了。我们将尝试三种经典算法,比较它们的性能。
4.1 划分训练集和测试集
首先要把数据分成两部分:训练集(用来教模型)和测试集(用来评估模型,模拟新数据)。
from sklearn.model_selection import train_test_split# 划分数据集:80%训练,20%测试X_train, X_test, y_train, y_test = train_test_split(    X_scaled, y, test_size=0.2, random_state=42, stratify=y)print("训练集大小:", X_train.shape)print("测试集大小:", X_test.shape)print("训练集中恶性比例: {:.1%}".format(1 - y_train.mean()))
4.2 训练三个候选模型
我们选择逻辑回归、随机森林和支持向量机(SVM)这三个常用算法。
from sklearn.linear_model import LogisticRegressionfrom sklearn.ensemble import RandomForestClassifierfrom sklearn.svm import SVCfrom sklearn.metrics import accuracy_score# 初始化模型models = {'逻辑回归': LogisticRegression(random_state=42, max_iter=1000),'随机森林': RandomForestClassifier(random_state=42, n_estimators=100),'支持向量机': SVC(random_state=42, probability=True)}# 训练并评估每个模型results = {}for name, model in models.items():    model.fit(X_train, y_train)    y_pred = model.predict(X_test)    accuracy = accuracy_score(y_test, y_pred)    results[name] = accuracy    print(f"{name} 测试集准确率: {accuracy:.3f}")# 找出最佳模型best_model_name = max(results, key=results.get)print(f"\n最佳模型: {best_model_name} (准确率: {results[best_model_name]:.3f})")
运行后,你可能会看到随机森林表现最好(准确率约0.96-0.98)。我们选择随机森林作为基础模型进行后续优化。
5.模型评估:准确率、召回率、F1-score等指标解读
准确率很高,是不是模型就完美了?不一定!我们需要更全面的评估,特别是对于医疗这种不平衡数据(恶性样本较少)。
5.1 混淆矩阵
混淆矩阵能清晰展示模型的预测情况。
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay# 使用随机森林模型best_model = models['随机森林']y_pred = best_model.predict(X_test)cm = confusion_matrix(y_test, y_pred, labels=[01])# 可视化混淆矩阵disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=['恶性''良性'])disp.plot(cmap='Blues')plt.title('随机森林混淆矩阵')plt.savefig('outputs/文章/首周/混淆矩阵.png', dpi=300, bbox_inches='tight')plt.show()
5.2 分类报告
from sklearn.metrics import classification_reportprint("分类报告:")print(classification_report(y_test, y_pred, target_names=['恶性''良性']))
关键指标解读:
  • 精确率(Precision) :预测为恶性的样本中,真正是恶性的比例。我们希望这个值高,避免误诊(将良性误判为恶性)。
  • 召回率(Recall) :实际恶性样本中,被正确预测出来的比例。我们希望这个值高,避免漏诊(将恶性误判为良性)。
  • F1-score:精确率和召回率的调和平均数,综合衡量模型性能。
5.3 ROC曲线与AUC
ROC曲线能展示模型在不同阈值下的性能,AUC(曲线下面积)越接近1,模型区分能力越强。
from sklearn.metrics import roc_curve, auc# 获取预测概率y_prob = best_model.predict_proba(X_test)[:, 1]  # 取正类(良性)概率# 计算ROC曲线fpr, tpr, thresholds = roc_curve(y_test, y_prob)roc_auc = auc(fpr, tpr)# 绘制ROC曲线plt.figure(figsize=(86))plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC曲线 (AUC = {roc_auc:.3f})')plt.plot([01], [01], color='navy', lw=1, linestyle='--', label='随机猜测')plt.xlim([0.01.0])plt.ylim([0.01.05])plt.xlabel('假正率(False Positive Rate)')plt.ylabel('真正率(True Positive Rate)')plt.title('随机森林ROC曲线')plt.legend(loc='lower right')plt.grid(alpha=0.3)plt.savefig('outputs/文章/首周/ROC曲线.png', dpi=300, bbox_inches='tight')plt.show()print(f"AUC分数: {roc_auc:.3f}")
6.模型优化:超参数调优与交叉验证
现在的模型是默认参数,我们可以通过调参进一步提升性能。使用网格搜索(Grid Search)和交叉验证(Cross-Validation)。
6.1 定义参数网格
from sklearn.model_selection import GridSearchCV# 定义随机森林的参数网格param_grid = {'n_estimators': [50100200],'max_depth': [None102030],'min_samples_split': [2510],'min_samples_leaf': [124]}# 初始化网格搜索grid_search = GridSearchCV(    estimator=RandomForestClassifier(random_state=42),    param_grid=param_grid,    cv=5,  # 5折交叉验证    scoring='accuracy',    n_jobs=-1,  # 使用所有CPU核心    verbose=1)# 执行搜索grid_search.fit(X_train, y_train)print("最佳参数:", grid_search.best_params_)print("最佳交叉验证准确率: {:.3f}".format(grid_search.best_score_))
6.2 评估优化后的模型
# 使用最佳参数重新训练optimized_model = grid_search.best_estimator_y_pred_opt = optimized_model.predict(X_test)accuracy_opt = accuracy_score(y_test, y_pred_opt)print(f"优化后模型测试集准确率: {accuracy_opt:.3f}")print(f"相比默认模型提升: {(accuracy_opt - results['随机森林']):.3f}")# 特征重要性分析feature_importance = optimized_model.feature_importances_importance_df = pd.DataFrame({'特征': X.columns,'重要性': feature_importance}).sort_values('重要性', ascending=False)print("\nTop 10 重要特征:")print(importance_df.head(10))# 可视化特征重要性plt.figure(figsize=(106))plt.barh(importance_df['特征'][:10][::-1], importance_df['重要性'][:10][::-1])plt.xlabel('特征重要性')plt.title('Top 10 特征重要性')plt.tight_layout()plt.savefig('outputs/文章/首周/特征重要性.png', dpi=300, bbox_inches='tight')plt.show()
7.部署与实战:将模型保存并集成到简单Web应用
模型训练好了,接下来就是“上菜”——部署成可用的服务。我们将模型保存为文件,并创建一个简单的Flask Web应用。
7.1 保存模型和标准化器
import joblib# 保存优化后的模型joblib.dump(optimized_model, 'outputs/文章/首周/breast_cancer_model.pkl')# 保存标准化器(新数据预测时需要同样的标准化)joblib.dump(scaler, 'outputs/文章/首周/scaler.pkl')print("模型和标准化器已保存")
7.2 创建Flask Web应用
创建一个新的Python文件 app.py
# app.pyfrom flask import Flask, request, jsonify, render_templateimport joblibimport numpy as npimport pandas as pdapp = Flask(__name__)# 加载模型和标准化器model = joblib.load('breast_cancer_model.pkl')scaler = joblib.load('scaler.pkl')# 特征名称(与训练时一致)feature_names = ['mean radius''mean texture''mean perimeter''mean area','mean smoothness''mean compactness''mean concavity','mean concave points''mean symmetry''mean fractal dimension','radius error''texture error''perimeter error''area error','smoothness error''compactness error''concavity error','concave points error''symmetry error''fractal dimension error','worst radius''worst texture''worst perimeter''worst area','worst smoothness''worst compactness''worst concavity','worst concave points''worst symmetry''worst fractal dimension']@app.route('/')defhome():return render_template('index.html', features=feature_names)@app.route('/predict', methods=['POST'])defpredict():try:# 获取JSON数据        data = request.get_json()# 提取特征值        features = []for name in feature_names:            features.append(float(data.get(name, 0)))# 转换为数组并标准化        features_array = np.array(features).reshape(1-1)        features_scaled = scaler.transform(features_array)# 预测        prediction = model.predict(features_scaled)        probability = model.predict_proba(features_scaled)# 返回结果        result = {'prediction''良性'if prediction[0] == 1else'恶性','probability_benign': float(probability[0][1]),'probability_malignant': float(probability[0][0]),'confidence': float(max(probability[0]))}return jsonify(result)except Exception as e:return jsonify({'error': str(e)}), 400if __name__ == '__main__':    app.run(debug=True, host='0.0.0.0', port=5000)
7.3 创建HTML界面
创建一个 templates/index.html 文件:
<!DOCTYPE html><htmllang="zh-CN"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>乳腺癌预测模型</title><style>body { font-family: Arial, sans-serif; max-width800pxmargin0 auto; padding20px; }h1 { color#2c3e50; }.form-group { margin-bottom15px; }label { display: inline-block; width250px; }input { width150pxpadding5px; }button { background-color#3498dbcolor: white; border: none; padding10px20pxcursor: pointer; }#result { margin-top20pxpadding15pxborder-radius5pxdisplay: none; }.benign { background-color#d4eddacolor#155724; }.malignant { background-color#f8d7dacolor#721c24; }</style></head><body><h1>乳腺癌预测模型</h1><p>请输入肿瘤特征值(示例值已预填):</p><formid="prediction-form">        {% for feature in features %}<divclass="form-group"><labelfor="{{ feature }}">{{ feature }}:</label><inputtype="number"id="{{ feature }}"name="{{ feature }}"step="0.01"value="{{ (range(10, 30) | random) / 10 }}"></div>        {% endfor %}<buttontype="submit">预测诊断结果</button></form><divid="result"></div><script>document.getElementById('prediction-form').addEventListener('submit'asyncfunction(e{            e.preventDefault();const formData = {};{% for feature in features %}            formData['{{ feature }}'] = document.getElementById('{{ feature }}').value;{% endfor %}const response = await fetch('/predict', {method'POST',headers: { 'Content-Type''application/json' },bodyJSON.stringify(formData)});const result = await response.json();const resultDiv = document.getElementById('result');if (result.error) {                resultDiv.innerHTML = `<div style="background-color:#f8d7da; color:#721c24; padding:15px;">错误: ${result.error}</div>`;} else {const isBenign = result.prediction === '良性';const confidence = (result.confidence * 100).toFixed(1);                resultDiv.innerHTML = `                    <div class="${isBenign ? 'benign' : 'malignant'}" style="padding:15px;">                        <h2>预测结果: ${result.prediction}</h2>                        <p>置信度: ${confidence}%</p>                        <p>良性概率: ${(result.probability_benign * 100).toFixed(1)}%</p>                        <p>恶性概率: ${(result.probability_malignant * 100).toFixed(1)}%</p>                        <p><small>注意:此结果为模型预测,仅供参考。实际诊断请咨询专业医生。</small></p>                    </div>                `;}            resultDiv.style.display = 'block';});</script></body></html>
7.4 运行应用
pip install flask scikit-learn pandas numpypython app.py
访问 http://localhost:5000 即可使用预测界面。输入肿瘤特征值,点击预测,就能看到模型给出的诊断预测和置信度。
8.总结与扩展:下一步学习建议与资源推荐
恭喜你!你已经完成了第一个完整的机器学习项目。让我们回顾一下今天的成果:
  1. 完整流程体验:从数据收集到模型部署,走完了机器学习项目全流程
  2. 实战技能掌握:学会了数据清洗、特征工程、模型训练与评估、超参数调优
  3. 可复用代码:获得了可以直接复用的Python代码,稍作修改就能应用到其他项目
项目亮点
  • 使用真实医疗数据集,解决有实际价值的问题
  • 全面评估模型,不只关注准确率,还重视召回率、ROC曲线等指标
  • 将模型部署为Web应用,让技术真正产生价值
常见坑点与提醒
  1. 数据泄露:切记不要在标准化时使用测试集的数据来拟合(即 scaler.fit(X_test)),否则会高估模型性能
  2. 过拟合:模型在训练集上表现极好,但在测试集上差很多,可能是过拟合。增加数据、简化模型、使用正则化
  3. 类别不平衡:医疗数据中恶性样本通常较少,可使用过采样(SMOTE)、欠采样或调整类别权重

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 11:40:34 HTTP/2.0 GET : https://f.mffb.com.cn/a/481305.html
  2. 运行时间 : 0.126034s [ 吞吐率:7.93req/s ] 内存消耗:4,838.17kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=c65d8ab3f87a0a6fb1a47858a7a43b99
  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.000425s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000736s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000341s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.011979s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000762s ]
  6. SELECT * FROM `set` [ RunTime:0.000262s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000769s ]
  8. SELECT * FROM `article` WHERE `id` = 481305 LIMIT 1 [ RunTime:0.003025s ]
  9. UPDATE `article` SET `lasttime` = 1774582834 WHERE `id` = 481305 [ RunTime:0.009496s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000306s ]
  11. SELECT * FROM `article` WHERE `id` < 481305 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001563s ]
  12. SELECT * FROM `article` WHERE `id` > 481305 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002330s ]
  13. SELECT * FROM `article` WHERE `id` < 481305 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.011505s ]
  14. SELECT * FROM `article` WHERE `id` < 481305 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.008682s ]
  15. SELECT * FROM `article` WHERE `id` < 481305 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003451s ]
0.127559s