SPSSPRO,让数据分析更简单,问卷调查类数据分析不再愁 产品介绍 帮助中心 客户端
微信登录
  • 产品简介

  • 我的数据

  • 数据处理

  • 数据分析

    • 描述性分析

    • 问卷分析

    • 综合评价

    • 差异性分析

    • 相关性分析

    • 预测模型

    • 统计建模

    • 计量经济模型

    • 医学统计模型

    • 机器学习分类

    • 机器学习回归

    • 规划求解

    • 研究模型

    • 信号分析

    • 自定义算法

      • 自定义数据处理
      • 自定义数据分析
        • 1、作用
        • 2、操作步骤
          • 2.1代码模式
          • 2.2 输入模式操作步骤
        • 3、内置变量
        • 4、内置函数
        • (1)散点图
        • (2) 箱线图
        • (3) 时序折线图
        • (4) XY折线图
        • (5)柱形图
        • (6)饼图
        • (7)堆叠柱形图
        • (8)词云图
        • (9)象限图
        • (10)叠图
        • (11)XY组合图
        • (12)子图
        • (13)地图
        • (14) 表格
        • (15)文本
        • (16)输出报告
        • (17)异常抛出
        • 5、案例代码
        • 6、可调用库
        • 7、参考文献

自定义数据分析

操作视频
SPSSPRO教程-自定义数据分析

# 1、作用

自定义算法基于 Python,通过自定义代码实现数据分析以及输出分析报告。

# 2、操作步骤

# 2.1代码模式

Step1:在【自定义算法(Python)】中点击新建,按照算法目的来创建脚本。
数据处理:可修改当前数据集 df,随后可用新数据集进行其它算法分析。
数据分析:可自己编写算法,并按照相关代码要求生成输出报告。
​

Step2:对算法命名,当前有两个渠道对算法进行重命名。 ​

Step3:开始填写代码,点击”运行“按钮,也可随时”终止“。

step4:可在代码框中查看报错信息或者 print( ) 运行结果。
step5:运行完成后系统识别到 report,就会生成”查看输出报告“,点击此按钮将跳转到输出报告页面。

# 2.2 输入模式操作步骤

普通的代码模式仅对当前数据具有普适性,针对于不同的数据每次在运行前都需要去修改列名。这时就可以将算法进行封装,后续拖拉拽变量即可生成输出报告。 step1:点击输入模式,随机切换到输入模式 step2:点击输入配置

step3:输入组件有拖拽框、下拉选择框、数字输入器,由于熵权法只需要拖入变量,只设置一个拖拽框即可。(但是需要留意组件前面的“input1”,拖拽框在代码中作为数据框来使用,设置成功后,当拖入了变量进拖拽框后,系统会自动识别input1所包含了哪些变量,并进行运算) step4:同时在代码模式中去使用input1 step5:随后再回到输入模式,将其它变量拖入到变量框中后,点击“开始分析”

step6:查看结果

# 3、内置变量

df:当前数据集,即已经导入 SPSSPRO 并且进入到数据分析模块的数据集。在脚本中可以 print(df)进行查看。
report:输出报告,当内置函数 Report()定制化了一份输出报告后,需将其赋值给 report 才会生成输出报告。

# 4、内置函数

散点图 ScatterPlot()、箱线图 BoxPlot()、折线图 LinePlot()、XY折线图XYLinePlot()、柱形图 BarPlot()、饼图PieChart()、堆叠柱形图StackColumnChart()、词云图 CloudWord()、象限图QuadrantPlot()、地图MapPlot()、叠图OverlapXYPlot()、XY组合图XYPlots()、子图SubPlots()、表格 Table()、文本 Text()、报告 Report()、异常抛出

# (1)散点图

ScatterPlot(x,y,group=None,name,description=None,txt_label=None,font_size=12)

参数 参数说明 参数类型 参数条件
x 横坐标的序列 序列series 允许1个定量序列
y 纵坐标的序列 序列series 允许1个定量序列
group 分组字段,可将散点按照不同组别划分 序列series 允许0或1个序列
name 散点图的标题 字符串string 允许1个字符串
description 散点图的图表说明 字符串string 允许1个字符串
txt_label 各个散点的标签名称 字符串string 允许1个序列
font_size 调整图表中文本字号的大小 整型 允许1个整数
e= ScatterPlot(
x=df['x1'],
y=df['x2'],
group=None,
name = "输出结果:x1-x2散点图",
description = "上图展示了x1-x2散点图。")

# (2) 箱线图

BoxPlot(x,name,description=None,font_size=12)

参数 参数说明 参数类型 参数条件
x 生成箱状图的序列 序列series 允许1个及以上的定量序列
name 箱状图的标题 字符串string 允许1个字符串
description 箱状图的图表说明 字符串string 允许1个字符串
font_size 调整图表中文本字号的大小 整型 允许1个整数
e = BoxPlot(
x=[df['x1'],df['x2']],name="输出结果:x1/x2箱线图",description ="上图展示了x1/x2箱线图。")

# (3) 时序折线图

LinePlot(index,y,name,description=None,font_size=12)

参数 参数说明 参数类型 参数条件
index 横坐标的索引序列 序列series 允许1个序列
y 纵坐标的序列 序列series 允许1个及以上的定量序列
name 折线图的标题 字符串string 允许1个字符串
description 折线图的图表说明 字符串string 允许1个字符串
font_size 调整图表中文本字号的大小 整型 允许1个整数
indexS=np.arange(1,len(df)+1,1)
e = LinePlot(
index=pd.Series(indexS),
y=[df['x2'],df['x3']],name="输出结果:X2/X3时序折线图",description = "上图展示了X2/X3时序折线图。")

# (4) XY折线图

XYLinePlot(x,y,name,description=None,txt_label=None,font_size=12)

参数 参数说明 参数类型 参数条件
index 横坐标的序列 序列series 允许1个序列
y 纵坐标的序列 序列series 允许1个定量序列
name 折线图的标题 字符串string 允许1个字符串
description 折线图的图表说明 字符串string 允许1个字符串
txt_label 各个散点的标签名称 字符串string 允许1个序列
font_size 调整图表中文本字号的大小 整型 允许1个整数
e= LinePlot(
x=df['x1'],
y=df['x2'],name="输出结果:以x1-x2折线图",description = "上图展示了以x1为横轴,x2为纵轴的折线图。")

# (5)柱形图

BarPlot(x,y,name,description, percent= False,percent_label= False,data_labels=True,font_size=12)

参数 参数说明 参数类型 参数条件
x 横坐标的序列 序列series 允许1个序列
y 纵坐标的序列 序列series 允许1个及以上的定量序列
name 柱形图的标题 字符串string 允许1个字符串
description 柱形图的图表说明 字符串string 允许1个字符串
percent True:自动根据数值求百分比 bool True、False
data_labels True:数值展示在图表上 bool True、False
percent_label True:数值的后面加上“%” bool True、False
font_size 调整图表中文本字号的大小 整型 允许1个整数
a=pd.Series(['A','B','C'])
b=pd.Series([34,50,16])
c=pd.Series([80,50,16])
e= BarPlot(x=a,y=[b,c],name='输出结果:分组柱状图',description='上图展示了分组柱状图。')

# (6)饼图

PieChart(x,y=None,name,description=None, percent= False,percent_label= False,data_labels=True,font_size=12)

参数 参数说明 参数类型 参数条件
x 若只传入x序列,则自动会对去重项进行频数统计 序列 series 允许 1 个序列
y 若同时传入x,y序列,其中x代表去重项,y代表去重项的数值 序列 series 允许 1 个及以上的序列
name 标题(名称) 字符串string 允许 1 个字符串
description 图表说明(文本描述) 字符串string 允许 1 个字符串
percent True:自动根据数值求百分比后展示 bool True、False
data_labels True:数值展示在图表上 bool True、False
percent_label True:数值以及坐标值的展现加上“%” bool True、False
font_size 调整图表中文本字号的大小 整型 允许1个整数
a=pd.Series(['A','B','C','A','B','C','A','B','C','A','B','C'])
e= PieChart(x=a,name='输出结果:饼图',description='上图展示了饼图。')

# (7)堆叠柱形图

StackColumnChart(x,y,name,description=None, percent= False,percent_label= False,data_labels=True,font_size=12)

参数 参数说明 参数类型 参数条件
x 横坐标的索引序列 序列 series 允许 1 个序列
y 多个y轴进行堆叠 序列 series 允许 1 个及 1 个以上的序列
name 标题(名称) 字符串 string 允许 1 个字符串
description 图表说明(文本描述) 字符串 string 允许 1 个字符串
percent True:自动根据数值求百分比后展示 bool True、False
data_labels True:数值展示在图表上 bool True、False
percent_label True:数值以及坐标值的展现加上“%” bool True、False
font_size 调整图表中文本字号的大小 整型 允许1个整数
a=pd.Series(['A','B','C'])
b=pd.Series([34,50,16])
c=pd.Series([80,50,16])
e = StackColumnChart(x=a,y=[b,c],name='输出结果 :堆叠柱状图',description='上图展示了堆叠柱状图。')

# (8)词云图

CloudWord(x,y=None,name,description=None)

参数 参数说明 参数类型 参数条件
x 若只传入x序列,则自动会对去重项进行频数统计 序列 series 允许 1 个序列
y 若同时传入x,y序列,其中x代表去重项,y代表去重项的数值 序列 series 允许 1 个及 1 个以上的序列
name 标题(名称) 字符串 string 允许 1 个字符串
description 图表说明(文本描述) 字符串 string 允许 1 个字符串
a=pd.Series(['A','B','C','C','B','C','C'])
e = CloudWord(x=a,name='输出结果 :词云图',description='上图展示了词云图。')

# (9)象限图

QuadrantPlot(x,y,name,description=None,txt_label=Series,font_size=12)

参数 参数说明 参数类型 参数条件
x 横坐标的序列 序列series 允许1个定量序列
y 纵坐标的序列 序列series 允许1个定量序列
name 标题(名称) 字符串 string 允许 1 个字符串
description 图表说明(文本描述) 字符串 string 允许 1 个字符串
txt_label 各个散点的标签名称 字符串string 允许1个序列
font_size 调整图表中文本字号的大小 整型 允许1个整数
e = QuadrantPlot(x=df['x1'],y=df['x2'],name = "输出结果:象限图",description = "上图展示了以x1的均值和x2的均值作为辅助线的象限图。")

# (10)叠图

OverlapXYPlot(x,y,name,description=None,scatter=False)

参数 参数说明 参数类型 参数条件
x 横坐标的序列 序列series 允许1个定量序列
y 纵坐标的序列 序列series 允许1个及以上定量序列
subname 叠图中各个子图的名称 列表list 1个列表
name 标题(名称) 字符串 string 允许 1 个字符串
description 图表说明(文本描述) 字符串 string 允许 1 个字符串
scatter True:叠图中各个折线图上标注散点 bool True、False
e = OverlapXYPlot(
x=df['x1'],
y=[df['x2'],df['x3'],df['x4']],
name = "输出结果:象限图",
description = "上图展示了以x1为横坐标,x2、x3、x4分别为纵坐标的叠图")

# (11)XY组合图

XYPlots(elements , name=None , description)

参数 参数说明 参数类型 参数条件
elements 子图的元素(仅允许ScatterPlot和XYLinePlot) 列表 允许1个列表,列表内是已经绘制的散点图和xy折线图
name 标题(名称) 字符串 string 允许 1 个字符串
description 图表说明(文本描述) 字符串 string 允许 1 个字符串
e1 = ScatterPlot(
x=df['x1'],
y=df['x2'])
e2 = LinePlot(
x=df['x1'],
y=[df['x2'])
e=XYPlots(elements=[e1,e2],
name="输出结果:XY组合图",
description="上图展现的是一个散点图和一个折线图的组合图")

# (12)子图

SubPlots(shape,elements,subname,name,desciption=None)

参数 参数说明 参数类型 参数条件
shape=[row,col] 子图的个数[row,col] 列表list row代表行数,col代表列数,比如[4,3]代表四行三列,最多放4*3=12个图表
elements 子图的元素 列表list 允许1个列表,列表内是已经绘制的各个图表
subname 叠图中各个子图的名称 列表list 1个列表
name 标题 字符串 string 允许 1 个字符串
description 图表说明 字符串 string 允许 1 个字符串
e1 = ScatterPlot(
x=df['x1'],
y=df['x2'])
e2 = LinePlot(
x=df['x1'],
y=[df['x2'])
a=pd.Series(['A','B','C'])
b=pd.Series([34,50,16])
e3=BarPlot(x=a,y=b)
e=SubPlots(shape=[2,2],elements=[e1,e2,e3],subname=['图1','图2','图3'],name='输出结果:子图",description='上图中展现了三个子图')

# (13)地图

MapPlot(area,number,name ,description=None,data_label=False)

参数 参数说明 参数类型 参数条件
area 当前仅支持中国省份简称,如广东省、上海市、新疆维吾尔自治区,应被写成广东、上海、新疆 序列Series 允许1个序列
number 各个省份的数值 序列Series 允许1个定量序列
name 标题 字符串 string 允许 1 个字符串
description 图表说明 字符串 string 允许 1 个字符串
data_label True:将各个省份的number值展示出来 bool True、False
MapPlot(
area=df['地区‘],
number=df['人数'],
name= "输出结果 :地图",
description = "上图展示了地图。",
data_label=False)

# (14) 表格

Table(form,name,description=None)

参数 参数说明 参数类型 参数条件
form 表格的内容(包括表头和数据值) 数据框dataframe 允许1个数据框
name 表格的标题 字符串string 允许1个字符串
description 表格的图表说明 字符串string 允许1个字符串
data = [[110, 120, 110], [130, 130, 130], [130, 120, 130]]
columns = ['语文', '数学', '英语']
score= pd.DataFrame(data=data, columns=columns)
tb = Table(
  form=score,
  name='输出结果5:成绩表格',
  description='上图展示了各科成绩表格。')

# (15)文本

Text(name,description)

参数 参数说明 参数类型 参数条件
name 标题(名称) 字符串string 允许1个字符串
description 图表说明(文本描述) 字符串string 允许1个字符串
txt = Text(
   name='输出结果6:总结',
   description='由以上分析,得出XX结论')

# (16)输出报告

将上述绘图对象作为参数传给Report(),并且还需要Report赋值给report,当系统成功识别到report,就会生成输出报告。 report=Report(elements)

参数 参数说明 参数类型 参数条件
elements 将绘制的各个图标放进报告后输出 列表 允许1个列表,列表内是已经绘制的各个图表
e1 = ScatterPlot(
x=df['x1'],
y=df['x2'])
e2 = LinePlot(
x=df['x1'],
y=[df['x2'])
a=pd.Series(['A','B','C'])
b=pd.Series([34,50,16])
e3=BarPlot(x=a,y=b)

report=Report(elements=[e1,e2,e3])

# (17)异常抛出

当if满足了某个条件时,就异常抛出,中断算法运行,并给出提示”算法报错,请检查数据“

if True:
  raise CustomScriptError('算法报错,请检查数据')

# 5、案例代码

以下是将熵权法的结果进行封装的案例,如果仅使用代码模式,我们需要提取参与计算的数据data=df[['容积率','绿化率','物业费']],但如果使用输入配置,则data=input1,直接在输入页面将变量进行拖入即可。

import numpy as np
import pandas as pd
#取数据
#data=df[['容积率','绿化率','物业费']]
data=input1

#计算
print(data)
p = data / data.sum()
e = -p * np.log2(p)
e = e.sum()
w = (1 - e) / (len(data.columns) - e.sum())
z=pd.DataFrame({'字段':data.columns,'权重':w})

#输出报告
tb = Table(form=round(z,3),name='输出结果 1:权重表格',description='上图展示了权重表格。')
bp= BarPlot(x= z['字段'],y=round(z['权重']*100,3),name='输出结果 2:柱状图',description='上图展示了权重柱状图。',percent_label=True)
report=Report(elements=[tb,bp])

# 6、可调用库

numpy、pandas、statsmodels、scipy 、random、math、re、datetime、sklearn、symbol

Python 库需求收集

# 7、参考文献

[1] Scientific Platform Serving for Statistics Professional 2021. SPSSPRO. (Version 1.0.11)[Online Application Software]. Retrieved from https://www.spsspro.com.

建议反馈