当前位置:首页>学习资料>机器学习实战项目:贷款违约预测 (附学习资料)

机器学习实战项目:贷款违约预测 (附学习资料)

  • 2026-03-09 16:31:25
机器学习实战项目:贷款违约预测 (附学习资料)
很多同学可能在找真实场景下的机器学习应用项目,一般寻找的途径有Github,阿里天池竞赛,Kaggle竞赛这几个,但想要找到合适的项目也不是那么的容易
如果你是想要找一个机器学习项目可以写在简历上,又或者想要机器学习项目练手,再或者想要打数据科学方向的竞赛,那这个项目非常适合你,当然想要做相关毕业设计的同学也是适用的
这一期主要是给大家推荐阿里天池的金融风控竞赛:个人贷款违约预测
下面具体来介绍一下这个竞赛
赛题说明赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。通过这道赛题来引导大家了解金融风控中的一些业务背景,解决实际问题
数据说明:给出训练集数据和测试集数据,测试集数据是没有标签的,数据存在缺失值,需要对raw data进行处理
下面具体来介绍一下这个项目模型搭建流程:
第一步:数据描述
采用pandas的read_csv函数直接读取训练集和测试集,合并至dataset,便于统一进行特征处理
import pandas as pdimport numpy as npdf_train=pd.read_csv('train.csv')df_test=pd.read_csv('testA.csv')dataset=[df_train,df_test]df_train.info()
缺失的数据进行可视化
import seaborn as snsimport matplotlib.pyplot as pltnulls=df_train.isnull().sum()/len(df_train)nulls=nulls[nulls>0]nulls.plot.bar()plt.show()
筛选离散型特征和数值型特征,这两类特征后面需要分开处理:
# 查看特征数值类型,对象类型# 将特征按object,number类型进行分类;numberical_fea为数值型特征,category_fea为对象特征numerical_fea = list(df_train.select_dtypes(exclude=['object']).columns)category_fea = list(filter(lambda x: x not in numerical_fea,list(df_train.columns)))# category_fea = list(data_train.select_dtypes(include = ['object']).columns)# 过滤数值型类别特征def get_numerical_serial_fea(data,feas):    numerical_serial_fea = []    numerical_noserial_fea = []    for fea in feas:        temp = data[fea].nunique()        if temp <= 10:            numerical_noserial_fea.append(fea)            continue        numerical_serial_fea.append(fea)    return numerical_serial_fea,numerical_noserial_feanumerical_serial_fea,numerical_noserial_fea = get_numerical_serial_fea(df_train,numerical_fea)# 对离散型数值特征进行一个统计i = 1for fea in numerical_noserial_fea:    if i <= len(numerical_noserial_fea):        print(f'{fea}的汇总统计如下:')        print(df_train[fea].value_counts().sort_index())        print('----------------------分割线------------------------')        i+=1
检查是否存在异常值,采用箱线图来查看:
def fill_outliers(df,features):    for col in features:        # 1st quartile (25%)        Q1 = np.percentile(df[col], 25)        # 3rd quartile (75%)        Q3 = np.percentile(df[col],75)        # Interquartile range (IQR)        IQR = Q3 - Q1#         print (Q1,Q3)        # outlier step        outlier_step = 1.5 * IQR        df[col].loc[(df[col] < Q1 - outlier_step)]= Q1        df[col].loc[(df[col] > Q3 + outlier_step)]= Q3#         datamap[col]=[len(outlier_list_col),len(not_outlier_list_col)]    return df
查看连续型特征,看是否存在左偏和右偏的情况,对偏度较大的特征取对数,使得尽量符合正态分布
# 连续型数值变量的分析f = pd.melt(df_train,value_vars=numerical_serial_fea)g = sns.FacetGrid(f,col="variable",col_wrap=2,sharex=False,sharey=False)g = g.map(sns.distplot,"value")
时间格式数据进行处理:
#转化成时间格式import datetimedf_train['issueDate'] = pd.to_datetime(df_train['issueDate'],format='%Y-%m-%d')df_test['issueDate'] = pd.to_datetime(df_test['issueDate'],format='%Y-%m-%d')startdate = datetime.datetime.strptime('2007-06-01''%Y-%m-%d')df_train['issueDateDT'] = df_train['issueDate'].apply(lambda x: x-startdate).dt.daysdf_test['issueDateDT'] = df_test['issueDate'].apply(lambda x: x-startdate).dt.daysdf_train['earliesCreditLine'] = df_train['earliesCreditLine'].apply(lambda s: int(s[-4:]))startyear = 1944df_test['earliesCreditLine'] = df_test['earliesCreditLine'].apply(lambda s: int(s[-4:]))df_train['earliesCreditLine'] = df_train['earliesCreditLine'].apply(lambda x:int(x)-startyear)df_test['earliesCreditLine'] = df_test['earliesCreditLine'].apply(lambda x:int(x)-startyear)import redef get_employmentLength(data):    if isinstance(data,str):        return (int(re.findall('[0-9]+',data)[0]))    else:        return Nonedf_train['employmentLength']=df_train['employmentLength'].map(lambda x:get_employmentLength(x))df_test['employmentLength']=df_test['employmentLength'].map(lambda x:get_employmentLength(x))
第二步:特征工程
区分离散型特征和连续型特征
discrete_fea = ['term','grade','subGrade','employmentLength','homeOwnership','verificationStatus',               'purpose','regionCode','delinquency_2years','ficoRangeLow','ficoRangeHigh','pubRec',                'initialListStatus','applicationType'               ]continuous_fea = ['loanAmnt','interestRate','installment','annualIncome','issueDate','dti','openAcc',                 'revolBal','revolUtil','totalAcc']
填充缺失值,采用中位数来填充,也可以采用平均值之类来填充:
for df in [df_train, df_test]:    j=df.isnull().sum()    null_col_df=j.to_frame().reset_index()    null_col_df.columns=['feature','nullcounts']    # 填空值    for i in range(len(null_col_df)):        if null_col_df['nullcounts'][i]>0:    #             print (null_col_df['feature'][i])            df[null_col_df['feature'][i]].fillna(df[null_col_df['feature'][i]].median(),inplace = True)
统计离散型特征的类别次数并排序:
for data in  [df_train, df_test]:    for f in ['employmentTitle''postCode''title']:        data[f+'_cnts'] = data.groupby([f])['id'].transform('count')        data[f+'_rank'] = data.groupby([f])['id'].rank(ascending=False).astype(int)
对类别太多的离散型特征进行target encoding:
for col in ['grade''subGrade','pubRec','regionCode']:  #分类数据    temp_dict = df_train.groupby([col])['isDefault'].agg(['mean']).reset_index().rename(columns={'mean': col + '_target_mean'})    temp_dict.index = temp_dict[col].values    temp_dict = temp_dict[col + '_target_mean'].to_dict()    df_train[col + '_target_mean'] = df_train[col].map(temp_dict)    df_test[col + '_target_mean'] = df_test[col].map(temp_dict)
用loanAmnt除以installment,衍生出新特征loanTerm(贷款期限)。并对loanAmnt取log,降低偏度
for data in [df_traindf_test]:    #贷款金额/分期付款金额 = 贷款期限    data['loanTerm'] = data['loanAmnt'] / data['installment']    #手动分箱    data['pubRec'] = data['pubRec'].apply(lambda x: 7.0 if x >= 7.0 else x)    data['pubRecBankruptcies'] = data['pubRecBankruptcies'].apply(lambda x: 7.0 if x >= 7.0 else x)df_train['loanAmnt_Log'] = np.log(df_train['loanAmnt'])df_test['loanAmnt_Log'] = np.log(df_test['loanAmnt'])
离散型特征进行二阶交叉,提取两个分类变量的共现次数,熵和比例偏好:
from tqdm import tqdm_notebookimport mathdef entropy(c):    result=-1;    if(len(c)>0):        result=0;    for x in c:        result+=(-x)*math.log(x,2)    return resultdef cross_qua_cat_num(df):    for f_pair in tqdm_notebook([        ['subGrade''regionCode'], ['grade''regionCode'], ['subGrade''postCode'], ['grade''postCode'], ['employmentTitle','title'],        ['regionCode','title'], ['postCode','title'], ['homeOwnership','title'], ['homeOwnership','employmentTitle'],['homeOwnership','employmentLength'],        ['regionCode''postCode']    ]):        ### 共现次数        df['_'.join(f_pair) + '_count'] = df.groupby(f_pair)['id'].transform('count')        df[f_pair[1] + '_count'] = df.groupby(f_pair[1])['id'].transform('count')        df[f_pair[0] + '_count'] = df.groupby(f_pair[0])['id'].transform('count')        ### n unique、熵        df = df.merge(df.groupby(f_pair[0], as_index=False)[f_pair[1]].agg({            '{}_{}_nunique'.format(f_pair[0], f_pair[1]): 'nunique',            '{}_{}_ent'.format(f_pair[0], f_pair[1]): lambda x: entropy(x.value_counts() / x.shape[0])        }), on=f_pair[0], how='left')        df = df.merge(df.groupby(f_pair[1], as_index=False)[f_pair[0]].agg({            '{}_{}_nunique'.format(f_pair[1], f_pair[0]): 'nunique',            '{}_{}_ent'.format(f_pair[1], f_pair[0]): lambda x: entropy(x.value_counts() / x.shape[0])        }), on=f_pair[1], how='left')        ### 比例偏好        df['{}_in_{}_prop'.format(f_pair[0], f_pair[1])] = df['_'.join(f_pair) + '_count'] / df[f_pair[1] + '_count']        df['{}_in_{}_prop'.format(f_pair[1], f_pair[0])] = df['_'.join(f_pair) + '_count'] / df[f_pair[0] + '_count']    return (df)df_train=cross_qua_cat_num(df_train)df_test=cross_qua_cat_num(df_test)
采用决策树对连续型特征进行分箱处理:
discrete_fea = ['term','grade','subGrade','employmentLength','homeOwnership','verificationStatus',               'purpose','regionCode','delinquency_2years','ficoRangeLow','ficoRangeHigh','pubRec',                'initialListStatus','applicationType'               ]continuous_fea = ['loanAmnt','interestRate','installment','annualIncome','issueDate','dti','openAcc',                 'revolBal','revolUtil','totalAcc']from sklearn.tree import DecisionTreeClassifierdef optimal_binning_boundary(x: pd.Series, y: pd.Series, nan: float = -999.) -> list:    '''        利用决策树获得最优分箱的边界值列表    '''    boundary = []  # 待return的分箱边界值列表    x = x.fillna(nan).values  # 填充缺失值    y = y.values    clf = DecisionTreeClassifier(criterion='entropy',    #“信息熵”最小化准则划分                                 max_leaf_nodes=6,       # 最大叶子节点数                                 min_samples_leaf=0.05)  # 叶子节点样本数量最小占比    clf.fit(x.reshape(-11), y)  # 训练决策树    n_nodes = clf.tree_.node_count    children_left = clf.tree_.children_left    children_right = clf.tree_.children_right    threshold = clf.tree_.threshold    for i in range(n_nodes):        if children_left[i] != children_right[i]:  # 获得决策树节点上的划分边界值            boundary.append(threshold[i])    boundary.sort()    min_x = x.min()-0.1    max_x = x.max() + 0.1  # +0.1是为了考虑后续groupby操作时,能包含特征最大值的样本    boundary = [min_x] + boundary + [max_x]    return boundaryfor fea in continuous_fea:    print (fea)    boundary = optimal_binning_boundary(x=df_train[fea],                             y=df_train['isDefault'])     df_train[fea+'bins'] = pd.cut(df_train[fea], bins= boundary, labels=False)    df_test[fea+'bins'] = pd.cut(df_test[fea], bins= boundary, labels=False)
对n开头的一系列特征,暴力提取其特征,主要有sum,mean等:
def myEntro(x):    """        calculate shanno ent of x    """    x = np.array(x)    x_value_list = set([x[i] for i in range(x.shape[0])])    ent = 0.0    for x_value in x_value_list:        p = float(x[x == x_value].shape[0]) / x.shape[0]        logp = np.log2(p)        ent -= p * logp    #     print(x_value,p,logp)    # print(ent)    return ent#求均方根def myRms(records):    records = list(records)    """    均方根值 反映的是有效值而不是平均值    """    return np.math.sqrt(sum([x ** 2 for x in records]) / len(records))# 求取众数def myMode(x):    return np.mean(pd.Series.mode(x))# 求值的范围def myRange(x):    return pd.Series.max(x) - pd.Series.min(x)n_feat = ['n0''n1''n2''n4''n5''n6''n7''n8''n9''n10''n11''n12''n13''n14', ]nameList = ['min''max''mean''median']statList = ['min''max''mean''median']# dataset2 =  pd.concat(objs=[df_train, df_test], axis=0).reset_index(drop=True)for i in tqdm_notebook(range(len(nameList))):    df_train['n_feat_{}'.format(nameList[i])] = df_train[n_feat].agg(statList[i], axis=1)    df_test['n_feat_{}'.format(nameList[i])] = df_train[n_feat].agg(statList[i], axis=1)
对loanAmnt进行手工分箱
for data in [df_traindf_test]:    data['loanAmnt_bn1'] = np.floor_divide(data['loanAmnt'], 1000)    ## 通过对数函数映射到指数宽度分箱    data['loanAmnt_bin2'] = np.floor(np.log10(data['loanAmnt']))#     分位数分箱    data['loanAmnt_bin3'] = pd.qcut(data['loanAmnt'], 10, labels=False)
类别比较少的离散型特征进行One-hot编码:
for data in  [df_traindf_test]:    data = pd.get_dummies(data, columns=['subGrade''homeOwnership''verificationStatus''purpose''regionCode'], drop_first=True)
类别较多的离散型特征进行target encoding:
from tqdm import tqdm_notebookfrom sklearn import preprocessingfor col in tqdm_notebook(category_fea):    le = preprocessing.LabelEncoder()    le.fit(list(df_train[col].astype(str).values) + list(df_test[col].astype(str).values))    df_train[col] = le.transform(list(df_train[col].astype(str).values))    df_test[col] = le.transform(list(df_test[col].astype(str).values))print('Label Encoding 完成')
第三步:模型搭建
采用sklearn包,调用xgboost模型进行预测
from sklearn.model_selection import KFoldnumerical_fea = list(df_train.select_dtypes(exclude=['object']).columns)category_fea = list(filter(lambda x: x not in numerical_fea,list(df_train.columns)))train_df=df_train.copy()test_df=df_test.copy()Y = train_df["isDefault"]X = train_df.drop(labels = ["isDefault","id"],axis = 1)X=X.drop(labels = category_fea, axis = 1)test_df= test_df.drop(labels = category_fea,axis = 1)# 去除合并数据集产生的索引列# X_test.drop(columns="Unnamed: 0", inplace=True)# X_train.drop(columns="Unnamed: 0", inplace=True)#"""对训练集数据进行划分,分成训练集和验证集,并进行相应的操作"""from sklearn.model_selection import train_test_splitimport lightgbm as lgb# 数据集划分X_train_split, X_val, y_train_split, y_val = train_test_split(X, Y, test_size=0.25)train_matrix = xgb.DMatrix(X_train_split , label=y_train_split)#             print (train_matrix)valid_matrix = xgb.DMatrix(X_val , label=y_val)#             test_matrix= clf.DMatrix(test_x , label=test_x)params = {'booster''gbtree',          'objective''binary:logistic',          'eval_metric''auc',          'gamma'1,          'min_child_weight'1.5,          'max_depth'5,          'lambda'10,          'subsample'0.7,          'colsample_bytree'0.7,          'colsample_bylevel'0.7,          'eta'0.04,          'tree_method''exact',          'seed'2020,          'nthread'36,          "silent"True,          }watchlist = [(train_matrix, 'train'),(valid_matrix, 'eval')]model = xgb.train(params, train_matrix, num_boost_round=50000, evals=watchlist, verbose_eval=200, early_stopping_rounds=200)#"""使用训练集数据进行模型训练"""# 对验证集进行预测from sklearn import metricsfrom sklearn.metrics import roc_auc_score"""预测并计算roc的相关指标"""val_pre_lgb = model.predict(xgb.DMatrix(X_val), ntree_limit=model.best_ntree_limit)fpr, tpr, threshold = metrics.roc_curve(y_val, val_pre_lgb)roc_auc = metrics.auc(fpr, tpr)print('未调参前xgb单模型在验证集上的AUC:{}'.format(roc_auc))"""画出roc曲线图"""plt.figure(figsize=(88))plt.title('Validation ROC')plt.plot(fpr, tpr, 'b', label = 'Val AUC = %0.4f' % roc_auc)plt.ylim(0,1)plt.xlim(0,1)plt.legend(loc='best')plt.title('ROC')plt.ylabel('True Positive Rate')plt.xlabel('False Positive Rate')# 画出对角线plt.plot([0,1],[0,1],'r--')plt.show()
根据拟合的模型进行预测:
pre = model.predict(xgb.DMatrix(test_df), ntree_limit=model.best_ntree_limit)results = pd.concat([df_test['id'],pd.Series(pre)],axis=1)results.columns=['id','isDefault']results.to_csv('result'+datetime.datetime.now().strftime('%Y-%m-%d %H%M%S')+'.csv',index=False)
采用逻辑回归模型进行预测:
from sklearn.model_selection import train_test_splitimport sklearn.linear_model as lmimport  sklearnfrom sklearn.model_selection import cross_val_score,KFoldtrain_df=df_train.copy()test_df=df_test.copy()Y = train_df["isDefault"]X = train_df.drop(labels = ["isDefault","id"],axis = 1)X=X.drop(labels = category_fea, axis = 1)test_df= test_df.drop(labels = category_fea,axis = 1)X_train, X_test, y_train, y_test=train_test_split(X,Y,test_size=0.5)lr=sklearn.linear_model._logistic.LogisticRegression()lr.fit(X_train,y_train)lr.score(X_test,y_test)
对于其他机器学习模型来完成这个任务也是类似的方法调用sklearn,上面的内容非常多,涉及数据处理的各个方面,以及如何调用机器学习模型模型评估的指标等,可以学到很多技巧
上述资料获取:
1. 关注本公众号
2. 发送口令“贷款违约预测”领取(人工回复可能有时差,都会发给大家的,不用着急
      [资料仅供学习使用,侵权请联系删除]

最新文章

随机文章

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