QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2071|回复: 0
打印 上一主题 下一主题

搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错

[复制链接]
字体大小: 正常 放大
杨利霞        

5273

主题

82

听众

17万

积分

  • TA的每日心情
    开心
    2021-8-11 17:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    网络挑战赛参赛者

    网络挑战赛参赛者

    自我介绍
    本人女,毕业于内蒙古科技大学,担任文职专业,毕业专业英语。

    群组2018美赛大象算法课程

    群组2018美赛护航培训课程

    群组2019年 数学中国站长建

    群组2019年数据分析师课程

    群组2018年大象老师国赛优

    跳转到指定楼层
    1#
    发表于 2022-9-7 15:33 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    搞 AI 建模预测都在用 Python,其实入门用 SPL 也不错9 V1 M! X2 O6 f  {. }) v, E
    ! r2 [- x3 t( o. B4 @4 T
    可用来做人工智能建模预测的工具非常多,比如Python, R, SAS,SPSS等,其中Python由于简单易学、丰富的数据科学库、开源免费等特点备受欢迎。但是对于不太熟悉数据建模算法的程序员来说,使用Python建模还是比较复杂,很多时候拿到数据并不清楚该做怎样的处理,选择什么样的算法。其实,在做数据分析和数据建模时,SPL也是不错的选择,它比Python更简单易用,计算速度也快,交互式的界面对数据分析十分友好,同时还提供自动数据建模功能和一些数据处理以及统计学函数,用起来也很方便。
    % Z$ B: a2 D7 h% |  ]3 d% p( k+ _) E7 R
    下面就以一份用户贷款违约预测的数据为例,使用SPL手把手的进行数据建模预测。7 H- |+ s; @: q/ `; s- V2 u
    ( i" s& Q, n. [, X9 H  x! o
    1. 确定目标,准备数据
    4 p" H6 q: ?) C& W建模预测就是从历史数据中挖掘出规律,然后使用规律对未来可能发生的事情做出预测。这个规律就是一般所说的模型。
    . O/ \0 N) {9 N6 q( w
    " L) ^3 C# }, j: @  o% Q3 [- g+ ^8 }历史数据通常是一张我们俗称的宽表,比如在用户贷款违约预测的例子中历史数据是如下图这样的Excel表格:
    . P* U" ~% D. s* S# t; d. x
    3 }5 T2 [& \3 p首先,宽表中一定要包括我们想预测的事情,通常称作预测目标,上图中的预测目标就是历史用户的违约行为,也就是图中y那一列,yes表示违约,no表示不违约。预测目标还可以是一个数值,比如产品的销量、售价……,或者是预测属于什么种类,比如预测产品质量是优、良、合格还是差。有时目标在原始数据里就有,可以直接使用,有时目标还需要人工标注。; i6 j2 G9 N& a# \1 m+ W

    4 ~* ?9 |( W, h, t除了预测目标外,这里还需要很多信息,如表中的用户年龄、工作,房产,贷款情况……,这里的每一列称为变量,也就是和贷款人将来是否违约可能会相关的信息,原则上能收集到的变量越多越好。例如预测客户是否会购买产品,可以搜集客户的行为信息,购物偏好,以及产品的特征信息,促销力度等;预测汽车保险理赔风险,需要保单数据,车辆信息、车主交通习惯以及历史理赔情况等等,如果是预测健康险还需要一些被保人的生活习惯,身体状况,就医看病的信息;预测商场超市的销售情况,需要历史的销售订单,客户信息,商品信息;预测不良产品,需要生产的工艺参数,环境,原料情况等数据。总之,收集到的相关信息越多,预测效果也会越好。
    0 a& ]+ C$ {1 s% h) d. F
    * c+ h5 q( e0 g1 g$ [8 V$ I采集数据时,通常会截取某一段时期的历史数据来制作宽表,比如我们想预测7月份用户的违约情况,可以采集1-6月份的数据来训练建立模型。数据采集的时间范围并不是固定的,可以灵活操作,例如也可以是近1年或者近3个月等等。. ^% V8 H! ?: w

    ) t/ }9 |% B+ i/ Y- [4 G准备好的宽表可以是Excel格式或csv格式,第一行是标题,后面每一行都是一条历史记录。
    5 J. P2 u: G6 i& p
    8 @5 x. w3 D6 z4 K; S9 b如果企业有建设好的信息系统,那可以找IT部门要这些数据,很多企业的BI系统中可以直接导出这种数据。" V, R* L7 f0 r7 K  f
    : e- y+ |' x: J/ t8 \  g
    2. 下载软件,配置建模外部库
    4 E+ p& H! q# ASPL 在易明建模外部库的配合下可以提供全自动化的建模预测功能。
    4 T4 Z7 x! ]* s" q" R
    & p8 L0 {* i+ j- k(1)下载安装集算器(SPL)和易明建模软件/ d/ V# d2 K9 e( [# ~* m7 b
    集算器下载:
    $ [4 C& H* y5 x1 G6 K- K“http://c.raqsoft.com.cn/article/1595816810031”, J  v1 _) V; V& ^& A. u! G

    $ e7 J6 u$ k7 A' H# s易明建模下载: “http://www.raqsoft.com.cn/download/download-ymodel”3 P' a% t; v4 }; L
    / G; }( Z, D! A( a6 \
    安装集算器和建模软件,并记录安装目录,比如:C:\Program Files\raqsoft\ymodel4 t) ~* @  R4 @) W9 P. ]- w. P

    " r! c3 q7 [8 E& V: Y  @* ?+ u- _$ T& e

    6 T" m( h5 e, k" Y(2)在SPL中配置外部库, f, W5 D! q5 i( \. o/ j
    (a)复制外部库所需要的文件
    ; l! w3 s! i7 e, P+ H* Q5 A在易明建模的安装目录下找 YModelCil 和 lib 文件夹2 d6 V0 B" d! @; J

    4 |/ K% E) O, q* D+ i
    : c4 W) f4 p7 ]# v% R
    % G" X+ y( L* m9 G" e然后去这两个文件夹里找到建模外部库所需要的文件,复制到集算器目录(【安装根目录】\esProc\extlib\YModelCil),比如C:\Program Files\raqsoft\esProc\extlib\YModelCli。# N$ F6 K! x$ }2 |* Y4 Y8 q4 F
    . Q, [" z& C. B& k) y
    建模外部库所需的文件有:# U5 i+ _* Y  v! R, L5 g. d
    6 x9 V9 ^; B9 _2 @
    1>易明建模目录的YModelCil中含有以下jar和xml* ^( i" [& d) _5 R

    # M) ?# `3 W& ?/ l' R! S, Zant-1.8.2.jar
    : Q0 o2 y, z9 B: H3 m8 dcommons-beanutils.jar/ F: I" Z% ^1 Z# y
    commons-lang-2.6.jar3 i7 w+ v" E; F. D
    ezmorph-1.0.2.jar
    " P# J# x& Q2 f$ @json-lib-1.1-jdk13.jar
    7 g* s  z& k$ g2 l0 N" Xraq-ymodel-cli-2.10.jar
    : Y4 A9 h1 x6 f: H# M1 T8 z" P9 Euserconfig.xml4 T# ~9 ^. g+ @# r! u8 e, Z* n# J& j  O
    % n/ X$ b2 W* p
    2>易明建模的lib中含有以下jar
    % j# u3 Z0 M7 ^& |
    " H2 ]0 n4 F" f3 X* M7 T3 r& E6 E& R. g+ ecommons-io-2.4.jar  Q1 d8 w( ^- Q$ T2 b- ?
    esproc-ext-20211104.jar
    7 C# E7 o; k5 ~1 s9 Q" bfastjson-1.2.58.jar
    8 V  M; J7 c* T- m5 [8 R# N* Q% Qgson-2.8.0.jar
    6 o6 ~+ m) S/ S4 M2 Gjackson-annotations-2.9.6.jar$ c5 Y  v  C8 [; i' \/ Q2 z
    jackson-core-2.9.6.jar
    7 w& ^4 g; Z4 b. o9 h! ~4 Kjackson-databind-2.9.6.jar3 d" N  I6 \* m% Z* k8 |
    jackson-databind-2.9.6-sources.jar/ _: E6 p4 V- O3 P
    jackson-dataformat-msgpack-0.8.14.jar
    ! |* I$ Z* P3 smining.jar
    5 v" x; }' y: umsgpack-0.6.12.jar0 P* \7 ^7 O1 U3 O  J& |3 f+ d  l
    msgpack-core-0.8.16.jar$ g6 j; L# d6 a! I; _0 _2 X/ g$ V

    : ?+ Z  |2 f/ Y0 X7 c. c$ V' ]8 Z(b)设置userconfig.xml文件参数
    , A; ~; a  U8 G) Z9 d' M2 T& t在集算器目录esProc\extlib\YModelCil下的userconfig.xml文件中设置参数* `  ^  j( w: p0 d9 ]' l% r+ @

    " c1 U* K& [1 k9 T: {+ a名称        参数说明
    & u* N2 e, A9 W9 @sAppHome        易明建模的安装目录
    . j* r8 O9 E# b  Z. ]sPythonHome        易明建模目录的Python路径 Windows: raqsoft\ymodel\Python37 Linux: raqsoft/ymodel/Python37/bin/python3.7
    0 k* O5 H. @, b/ aiPythonServerPort        Python服务网络端口
    3 ]5 p! O2 ^: X1 D2 b6 {( i3 biPythonProcessNumber        Python进程数3 h7 Y+ R, R3 r0 h' f+ a8 Y
    bAutoDecideImpute        是否智能补缺
    / s; l8 Z7 e: t2 u( G" ?iResampleMultiple        重抽样次数
    + j3 |& D% s3 y) v+ x6 r( j其中必须要配置的参数为sAppHome和sPythonHome,其他参数可以采用默认值,有需要再进行修改。比如可以配置参数如下,加粗部分是必须要配置的,根据自己的安装路径。
    6 ?- r( ?) M% K8 [. X7 ^" X# Y( d8 e8 B; c- u: L  d) Q
    <?xml version="1.0" encoding="UTF-8"?>
    $ |( V5 ]% m: n& L$ b8 t$ g<Config Version="1">( ~- J5 v- \/ c
        <Options>& A. C$ ~  Y  s. o" n2 {2 {: Z
            <Option Name="sAppHome" Value="C:\Program Files\raqsoft\ymodel"/># j2 x9 ^6 G4 v$ @
                    <Option Name="sPythonHome" Value="C:\Program Files\raqsoft\ymodel\Python37\python.exe"/>
    ) W1 ]- `( N) H5 h% h& i                <Option Name="iPythonServerPort" Value="8510"/>
    # ^7 I2 L$ N. A: u: `' o                <Option Name="iPythonProcessNumber" Value="2"/>
    ( n4 y( o4 ~' X6 f              <Option Name="bAutoDecideImpute" Value="true"/>7 p* G4 ^9 Z/ F5 \" J
                    <Option Name="iResampleMultiple" Value="150"/>                               
    9 O$ W. d4 B$ ]% G! w$ Z/ o    </Options>' ~! S0 Q/ C  n/ L' C' G
    </Config>' w/ G" s1 l3 S6 p
    1
    5 n  l  e  v6 t# c2 N21 y1 K: c! y4 H" K
    3
    * Y# W. W7 S& P5 n5 |4
    + ?9 \, `7 Y4 \8 f% a% {54 v$ V& K7 n, A6 C& ~- L
    6
    7 Z3 _$ }+ s" m8 U5 ?3 n/ j77 |( t& h( r6 L/ i
    8
    / m& O& \4 [* \0 m6 G9
    6 p8 R  X" y% H3 Q/ l: I8 J10
    6 M" v. G4 f( P& U0 ~7 Y6 V0 t" D11
    * j7 s7 V. B2 @0 h: H, c. G: y! E, L' Z其实,从这里可以看出,易明建模也是基于Python写的,但它将Python算法做了封装后,程序员就不必再理解算法的数学原理和运行细节了。
    + Z$ G2 p4 v: o8 }2 x" r' C* \6 S0 t6 ]
    (c)SPL环境配置" `. v0 m( H5 V8 r# e
    1>. 配置外部库5 S+ T' e- K7 f( c8 {. A! _, D

    9 T% R5 |& d" m# {& g5 U& D打开SPL,在选项菜单里,外部库选择里勾选YModelCli,使其生效。外部库的路径为第(1)步骤中集算器YModelCli的安装路径。+ l" e4 a2 @0 @! ]  d$ ?( @
    % k. p2 N' U- D- }/ Z! d, e5 Q! j) Y  w

    $ F5 I- d  \8 b: S5 i7 @& f+ o' t: S# ]# A# S  o5 c
    在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置外部库路径和名称。" p- L, r& _7 d7 t1 m0 [
    9 L5 `! r, M/ w- F2 P2 M- q, Y" v
    <extLibsPath>外部库路径% u1 m$ f4 `  O. Q. W  D
    2 ~+ B, Q: y% p0 I( t
    <importLibs>外部库名称(可多个)
    ; ~. Z: p3 w( @7 n2 s( N3 i5 P4 ?9 x1 F2 M
    2>. 线程数设置
    ' C6 L3 z. t* S) u9 [) N$ f
    . i6 `: o3 ?" z1 z如果有并发预测,还需要在SPL设置“最大并行数”,也就是线程数。设置多少用户根据需求和机器情况自行设定。: `$ }3 c9 z* Q% s
    1 o; _( R( B5 ~+ O9 M6 X

    ( d% c! n9 v( x" ?$ W" Q* D) j% x" d
    / D+ h. u" Y" [0 P+ C' {0 H. e$ [在无图形界面的服务器中去集算器的安装目录下esProc\config\raqsoftConfig.xml文件中进行配置。! H* ?4 ~  n, ]
    % E) W/ S# |& _4 B
    <parallelNum>最大并行数) o$ j, U' B& ~" q4 w! ~) C

    ! j' o: c/ v2 ~% y到此,环境配置完成。
    ; _+ r9 O" d* v* a( |+ \" r: N& a& b" z0 v
    3. 建模和预测$ t% `% i/ x* p& T& T9 c
    (1)加载数据
    5 g* B  n& |- x( n8 s  ^SPL能支持csv,excel或数据库中的数据用于建模,这里以csv为例,其它数据源类似。, Y- P$ T4 I. u3 \. B4 K

    ( D' Q: S+ Q) h/ f设有一个贷款违约数据表如下,需要建模来预测新用户是否会发生违约行为。
    3 ^9 h1 E& R4 S0 Z8 ^
      t; O4 S& a9 U; `
    & ^- ^$ X7 M1 Q' R. b* T% V3 H  j7 h# n/ {+ G2 }" C- S# `, P
    文件命名为bank-full.csv;  S( R; d$ h1 J* E) |

    % H5 N9 @% x% n0 l0 z! V" }4 fA
    + W% y" U3 I0 t# z1        =file("bank-full.csv").import@tc()
    : E. F1 g# A* b! g, V# C! Z; f3 ?2        =ym_env()
    6 o: D- U% s9 m$ I) R3        =ym_model(A2,A1)( S5 N. T) U5 l+ Z8 Q- {
    A1 导入建模数据,读成序表0 o5 Z3 p8 f4 G

      j9 v1 w, n. M( G, X: ~- l; D) Y/ k9 V; D( {* j
      J9 o& Q6 }! v( \0 L6 |+ z! ?3 g
    A2 初始化环境,执行A2后会在易明建模的安装目录下生成store目录及子目录用以保存数据及结果文件。
    : k. t% q% D" ?: _9 l, ]$ o: n0 ?0 m3 h
    A3 加载建模文件,生成md对象$ Y7 ^" Y9 V6 n, F8 [# W* l
    3 z/ {( f" U6 h
    (2)目标变量设置和变量统计5 A0 f% \4 r2 [% F, J
    数据加载进来后要设置目标变量: v9 l5 @; M4 g
    - K- P- h$ ~% B9 V5 g5 V0 u' Q& {
    A5 g. N" Q( A. W
    …        …
    " @/ r6 R8 S) h6 C4        =ym_target(A3,"y")% O# U, u0 q; e
    5        =ym_statistics(A3,"age")
    7 _* x/ i$ _0 q( b, R6        =A1.fname().(ym_statistics(A3,~))
    , h/ e: F* W/ @. x1 ^% j  zA4 表示将字段“y”设置为目标变量,目标变量可以是二值变量或数值型变量。" s+ C+ D, Q6 v" O) K7 Y: g

    ! W1 U4 j: p" a: oA5 查看某个变量的统计指标,比如 “age”,返回值中可以看到缺失率,最大最小值,异常值,数据分布图等参数。/ Q8 F& K0 I9 g2 A* l

    7 n/ b) E/ A5 R( O- d
    ( i- Q* O) [% F  L; L. \( a* {8 v; K
    A6 循环变量名查看所有字段的统计信息,返回包含所有字段的统计信息二级序列。9 a, x" S  V5 Y7 ~  n3 v9 r. I

    # Y( ?0 V9 b! S* I/ h7 _3 ^- f+ P) N& S
    : F, E. k- _5 Z$ c# H" r$ P
    (3)建立模型和模型表现3 x! g" `# G# P  a9 b8 G. H* \
    A$ E6 p' D6 S1 t) o# X0 b
    …        …$ o( |5 v" H6 \
    7        =ym_build_model(A3)/ b/ ]0 H- |& v
    8        =ym_present(A7)
    - k: L4 ]7 A; ^$ d% J( D7 ~! ~9        =ym_performance(A7)& k- I9 k# q% \4 r" w
    10        =ym_importance(A7).sort@z(Importance)# }# I$ W; c! v0 Q3 \5 c
    A7 使用建模函数建立模型,执行后在后台会进行全自动化数据预处理和建模过程,此过程会耗费一些时间,时间长短取决于数据量。结果返回pd模型对象。
    8 p3 k' @! l, r! M1 c3 o" ]. T5 P) X. h$ P' y; s
    模型建好后,可以调用pd模型对象查看模型信息、模型质量和重要度。
    9 [( k# Z4 ?/ L4 d- f/ i
    2 S" m* E5 P& p* J' BA8 返回模型AUC值及参数
    3 j3 ?3 f7 t) m4 e3 b( E9 \2 a. ]/ J( G8 J2 n, n+ {2 m

    7 y( q) u- \# V/ ?2 D- Q! ~* a6 E! S$ ?. F3 `; P6 N4 w, l+ E
    A9 返回多种模型指标和图形,诸如AUC,ROC, Lift……
    ' c2 A7 \9 [5 h. c8 H% `( ^2 ^3 f! \

    3 k% j( N( t9 Q% Z1 w' e5 b
    ( L0 t  w. l$ R  l# L' I比如点击A9的第6条记录的Value,然后点击右上角“图形浏览”图标,数值字段选择“Lift”,就可以查看Lift曲线9 r. ?- X! w1 g0 Z, R

    2 f- O/ h- n" {4 p* i  j3 H' r& Y& d. ^2 |" ^0 ~$ j

    - D* L; {7 Q9 C1 A7 M2 {A10 会返回每个变量对目标变量的影响程度并且按照重要度降序排列。数值越大对目标变量的影响程度越大。降序排列分析起来更加直观。& |) Z+ Q' _: S' ?5 P; p8 G
    ! N; Y; O' H  ~1 z
    7 [/ ?2 r6 k$ y  h5 o3 \! k
    1 b, `% m3 Y8 X' x5 D' x1 P
    (4)保存模型! R4 R. C$ F+ i$ {# K; S% i) d, H
    A
    5 ^4 `& C# |4 g3 ^: N…        …9 c/ }& y  w" u" Z3 d0 o5 J" D+ e
    11        =ym_save_pcf(A7,"bankfull.pcf")
    5 a0 T: m/ ~1 G; x12        =ym_json(A7)
    + P3 U  `5 M2 Q! W9 A13        >ym_close(A2)9 z. d  x- \6 p3 R
    A11 将模型保存为”bankfull.pcf”,默认保存路径为[sAppHome]/store/predict。
    " W7 Q$ B3 h, @5 S: c
    $ a. b6 ?4 H8 \/ o  {8 e( FA12 将模型信息以json串形式返回。json内容详解可参考在线文档《json参数说明》' Q9 P2 h, @9 y1 E4 c* m

    " C# `% U/ E& e, ~  e* YA13 关闭环境,释放资源。6 t% v" e  k5 n2 i' s

    2 \2 P" Q$ G4 p1 N$ R(5)预测2 f7 q6 G' [; R( U0 ~
    预测之前需要有pcf模型文件和预测数据集$ X/ Q7 B) d* a

    % e! _, A- Q0 u: `1 N9 wA
    6 B' R5 j2 k% f1        =ym_env()
    ' {& K4 o0 G# S7 l2        =ym_load_pcf("bankfull.pcf")" b4 n/ P8 d4 I) k2 }! B3 A/ c2 O
    3        =file("bank-full2.csv").import@tc()
    1 T% I6 S, v$ p6 F" e4        =ym_predict(A2,A3)% F4 B6 Z9 K" [9 N
    5        =ym_result(A3)8 Q8 l4 ]. u2 c9 w0 [1 f
    6        =file("bank-full_result.csv").export@tc(A4)
    , H* d8 b' ^, _0 w8 }7        >ym_close(A1)$ G8 A& E! {# s, y
    A1 初始化环境1 B  p, j% \9 F. f4 _
    ) Q; U9 E, `2 S4 d6 E/ Y$ d
    A2 导入pcf模型文件,生成pd模型对象。1 m5 G7 R& m% u# w8 q1 @
    - v5 ^+ G" T! N/ T
    A3 导入预测数据集,读成序表; A5 [. X0 h3 c3 _3 [7 N
    + t. V! d2 ?9 N) P2 |' K% h
    A4 对序表数据执行预测。除序表外,还支持游标、csv文件和mtx文件,比如A4也可以直接写成ym_predict(A2,“bankfull2.csv”)
    ( Z. q/ K+ y) C& I% S$ w+ `" ^
    ( p, n/ K: d8 p$ pA5 获取预测结果# b1 R: F2 }0 a% Z- m
    ' I8 m. M- P2 L/ k$ _% s( T/ N
    A6 将预测结果导出,在本例中预测结果为用户发生违约行为的概率。# S$ t0 B$ O( b" b8 G

    ( S) A* B/ q$ ?& i0 R3 x) Z- h8 \& q0 j" n& ^" ~
    A7 关闭环境,释放资源' T, @) O" G9 ^7 u

    # b* f+ @# J/ M4. 集成调用
    " D# F: A7 I+ H# i6 SSPL还可以被上层应用集成调用,比如SPL可以嵌入到Java应用,详情请参考:http://c.raqsoft.com.cn/article/1615765346560
    # T  z4 v: B* u8 ~: `3 e8 M
    6 [, ^4 s" u+ ^! L6 ?9 x总结8 K7 d5 l' A0 N; k
    使用SPL配合易明建模来实现数据建模预测非常简单,程序员不需要理解深奥的数学原理,只要准备好训练数据,简单几步就可以完成数据建模任务了。而且还可以轻松地把这个功能嵌入到应用程序中,高深的人工智能不再是少量数据科学家的专利。: M: A% m+ {, e; B; t

    ( b0 O- y$ O. H' dSPL本来就超强的数据处理能力,能更方便地完成人工智能算法之前的数据准备工作,同时也提供了丰富的数学函数: SPL Math 例程,有些数学基础想自己实现建模过程的同学也可以进一步研究。
    * q# J; M. D* L- L————————————————
    , x. E% r( x0 k6 z5 J版权声明:本文为CSDN博主「java李杨勇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( `9 U& L7 m$ \* \' h% f3 S原文链接:https://blog.csdn.net/weixin_39709134/article/details/126698462" z* N( }  c* B7 c, x$ |

    4 P* a! i' h! N" K' O( C4 m0 I9 r5 ?; r& n4 b- D
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-28 15:34 , Processed in 0.304529 second(s), 51 queries .

    回顶部