精华内容
下载资源
问答
  • Latex基本表格绘制

    万次阅读 多人点赞 2017-08-12 14:18:56
    latex基本表格绘制

    Latex基本表格绘制

    1.基本格式

    \documentclass{article}
    
    \begin{document}
    
    \begin{tabular}{cc}%一个c表示有一列,格式为居中显示(center)
    (1,1)&(1,2)\\%第一行第一列和第二列  中间用&连接
    (2,1)&(2,2)\\%第二行第一列和第二列  中间用&连接
    \end{tabular}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    2.添加竖线和横线

    \documentclass{article}
    
    \begin{document}
    
    \begin{tabular}{|c|c|}% 通过添加 | 来表示是否需要绘制竖线
    \hline  % 在表格最上方绘制横线
    (1,1)&(1,2)\\
    \hline  %在第一行和第二行之间绘制横线
    (2,1)&(2,2)\\
    \hline % 在表格最下方绘制横线
    \end{tabular}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    3.设置每一列的单元格格式

    \documentclass{article}
    
    \begin{document}
    
    \begin{tabular}{|l|c|r|} %l(left)居左显示 r(right)居右显示 c居中显示
    \hline 
    Name&Steve&Bill\\
    \hline  
    Matlab&Mathmatica&Maple\\
    \hline 
    \end{tabular}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    4.常见的三线表

    \documentclass[UTF8]{ctexart}
    \begin{document}
    
    \begin{tabular}{ccc}
    \hline
    姓名& 学号& 性别\\
    \hline
    Steve Jobs& 001& Male\\
    Bill Gates& 002& Female\\
    \hline
    \end{tabular}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    通常来说,我们会希望表格的第一根线和最后一根线比表格中的横线更粗一些。

    booktabs 宏包为我们提供了这个功能,加载 booktabs 宏包之后可以使用 \toprule 和 \bottomrule 命令分别画出表格头和表格底的粗横线,而用 \midrule 画出表格中的横线。

    \documentclass[UTF8]{ctexart}
    \usepackage{booktabs} %需要加载宏包{booktabs}
    \begin{document}
    
    \begin{tabular}{ccc}
    \toprule  %添加表格头部粗线
    姓名& 学号& 性别\\
    \midrule  %添加表格中横线
    Steve Jobs& 001& Male\\
    Bill Gates& 002& Female\\
    \bottomrule %添加表格底部粗线
    \end{tabular}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    5.table环境

    \documentclass[UTF8]{ctexart}
    \usepackage{booktabs}
    \begin{document}
    
    \begin{table}[!htbp]
    \centering
    \caption{这是一张三线表}\label{tab:aStrangeTable}%添加标题 设置标签
    \begin{tabular}{ccc}
    \toprule
    姓名& 学号& 性别\\
    \midrule
    Steve Jobs& 001& Male\\
    Bill Gates& 002& Female\\
    \bottomrule
    \end{tabular}
    %\caption{这是一张三线表}\label{tab:aStrangeTable}  标题放在这里也是可以的
    \end{table}
    
    \end{document}
    

    {table}有若干可选参数 [!htbp]
    h代表here,将表格排在当前文字位置
    t 表示将表格放在下一页的 top (页首)
    b 表示将表格放在当前页的 bottom (底部)
    !表示忽略美观因素,尽可能按照参数指定的方式来处理表格浮动位置。
    表格将会按照所给参数,依次尝试按照每个参数进行排版,当无法排版时,将会按照下一个参数

    6.单元格合并

    \documentclass[UTF8]{ctexart}
    \begin{document}
    
    \begin{table}[!htbp]
    \centering
    \begin{tabular}{|c|c|c|}
    \hline
    \multicolumn{3}{|c|}{学生信息}\\ % 用\multicolumn{3}表示横向合并三列 
                            % |c|表示居中并且单元格两侧添加竖线 最后是文本
    \hline
    姓名&学号&性别\\
    \hline
    Jack& 001& Male\\
    \hline
    Angela& 002& Female\\
    \hline
    \end{tabular}
    \caption{这是一张三线表}
    \end{table}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    \documentclass[UTF8]{ctexart}
    \usepackage{multirow}
    \begin{document}
    
    \begin{table}[!htbp]
    \centering
    \begin{tabular}{|c|c|c|c|c|c|c|} %表格7列 全部居中显示
    \hline
    \multicolumn{7}{|c|}{事件}\\  %横向合并7列单元格  两侧添加竖线
    \hline
    \multirow{4}*{策略}&50&0&100&200&300&300\\  %纵向合并4行单元格 
    \cline{2-7}  %为第二列到第七列添加横线
    &100&100&0&100&200&200\\
    \cline{2-7}
    &150&200&100&0&100&200\\
    \cline{2-7}
    &200&300&200&100&0&300\\
    \hline
    \end{tabular}
    \end{table}
    
    \end{document}
    

    这里写图片描述

    横向合并和纵向合并可以嵌套,代码如下:

    \documentclass[UTF8]{ctexart}
    \usepackage{multirow}
    \begin{document}
    
    \begin{table}[!htbp]
    \centering
    \begin{tabular}{|c|c|c|c|c|c|c|}
    \hline
    
    \multicolumn{2}{|c|}{ \multirow{2}*{$S_i$} }& \multicolumn{4}{c|}{事件} &\multirow{2}*{max}\\
    \cline{3-6}
    \multicolumn{2}{|c|}{}&50&100&150&200&\\
    \hline
    \multirow{4}*{策略}&50&0&100&200&300&300\\
    \cline{2-7}
    &100&100&0&100&200&200\\
    \cline{2-7}
    &150&200&100&0&100&200\\
    \cline{2-7}
    &200&300&200&100&0&300\\
    \hline
    \end{tabular}
    \end{table}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    7.斜线表头

    需要使用{diagbox}宏包

    \documentclass{UTF8}{ctexart}
    \usepackage{diagbox} % 加载宏包
    \begin{document}
    
    \begin{table}[!htbp]
    \centering
    \begin{tabular}{|c|c|c|c|}
    \hline
    \diagbox{甲}{$\alpha_{i,j}$}{乙}&$\beta_1$&$\beta_2$&$\beta_3$\\ %添加斜线表头
    \hline
    $\alpha_1$&-4&0&-8\\
    \hline
    $\alpha_2$&3&2&4\\
    \hline
    $\alpha_3$&16&1&-9\\
    \hline
    $\alpha_4$&-1&1&7\\
    \hline
    \end{tabular}
    \end{table}
    
    \end{document}
    

    效果如下:
    这里写图片描述

    8.其他(2018.11.23)

    对于多行多列嵌套斜线表头的情况,不加参数会出现斜线不处于对角线位置的情况
    多行多列嵌套斜线表头
    可以通过添加参数\diagbox[innerwidth=2cm](参数大小取决于列宽度)解决。

    \documentclass{ctexart}
    \usepackage{multirow}
    \usepackage{diagbox} % 加载宏包
    \begin{document}
    
    \begin{table}[!htbp]
      \centering
      \begin{tabular}{|c|c|c|c|c|c|c|}
       \hline
       \multicolumn{2}{|c|}{\multirow{2}*{\diagbox[innerwidth=2cm]{$S_i$}{$\lambda_i$}}}& \multicolumn{4}{c|}{事件} &\multirow{2}*{max}\\
       \cline{3-6}
       \multicolumn{2}{|c|}{}&50&100&150&200&\\
       \hline
       \multirow{4}*{策略}&50&0&100&200&300&300\\
       \cline{2-7}
       &100&100&0&100&200&200\\
       \cline{2-7}
       &150&200&100&0&100&200\\
       \cline{2-7}
       &200&300&200&100&0&300\\
       \hline
      \end{tabular}
     \end{table}
    \end{document}
    
    

    效果如下:
    多行多列嵌套斜线表头

    展开全文
  • Cox比例风险回归模型单因素多因素生存分析

    万次阅读 多人点赞 2020-03-13 12:00:20
    Cox比例风险回归模型单因素多因素生存分析 欢迎使用Markdown编辑器 Cox比例风险回归模型临床应用非常广泛,Cox分析得到的结果是可以直接运用到临床应用的,所以这个分析对癌症临床诊断有非常关键的作用,检测高低...

    TCGA

    Cox比例风险回归模型临床应用非常广泛,Cox分析得到的结果是可以直接运用到临床应用的,所以这个分析对癌症临床诊断有非常关键的作用,检测高低风险的关键基因,就可以预测病人5年生存率。

    Cox比例风险回归模型,简称Cox回归模型。该模型又英国统计学家D.R.Cox于1972年提出,主要用于肿瘤和其他慢性病的预后分析,也可用于队列研究的病因探索。Cox回归模型能处理多个因素对生存时间影响的问题。

    这里用到的癌症是:宫颈鳞状细胞癌CESC(临床307个样本,基因表达有304个样本)

    1.TCGA数据库下载宫颈鳞状细胞癌数据

    首先需要合并差异基因得到的表达量和临床信息

    这个步骤非常重要,也是让很多人感觉麻烦的地方,TCGA数据库样本量大,一个重要的癌症样本300-500个,临床信息又是独立存在,这里用到的是总生存时间和生存状态,得到一个行名是样本,列名包括总生存时间、生存状态、以及所有差异基因,对应的数据是差异基因的表达量,当然这个表达量是处理过的,不是TCGA下载下载下来的原始数据。

    如果还没有得到生存时间、生存状态的文件,也没有得到差异基因的表达量,那就要先做差异分析,提取生存时间。简单回顾一下,提取生存时间会用到TCGA数据库下载的metadata.txt文件,这个文件大家很熟悉,可以直接在TCGA数据库下载的;差异分析涉及的内容就比较多,首先要从TCGA数据库下载基因表达数据,然后用perl脚本合并所有样本的表达矩阵,得到矩阵之后,要对ID进行转换,TCGA数据库用的是ensmbol ID,需要转换gene symobl,得到gene symobl的矩阵之后,就可以做差异分析,做了差异分析,就可以接着我们上面的合并工作了。
    在这里插入图片描述TCGA临床数据于表达数据合并

    2.单因素Cox分析

    有了生存时间和表达量合并的文件,就可以做单因素Cox分析,直接用我们的R做分析,得到这样一个表格文件。
    在这里插入图片描述单因素cox分析

    3.提取单因素P值

    Cox单因素分析得到了单个基因的风险比和P值,可以筛选P值一个标准的基因,拿到这些基因,然后把这些基因的表达量筛选出来,还有样本的生存时间和生存状态,放在一个文件里面,用来做这些基因的多因素分析,当然了,筛选的基因不要多,控制在20个左右。简单点说,就是筛选这20个左右基因如同步骤一的文件。

    4.多因素Cox分析

    利用上面得到的关键基因的表达量做多因素分析,方法和单因素的差不多,只是这时用到了所有基因,而单因素是对每个基因做分析,多因素是用这些关键基因一起分析。可以得到风险值和高低风险分类。
    风险表格风险表格

    5.绘制生存曲线、ROC曲线

    用到的都是上面多因素分析得到的数据,用所有样本的风险比例,生存时间,就可以做生存曲线,ROC曲线。在这里插入图片描述风险生存曲线
    在这里插入图片描述ROC曲线

    6.高低风险热图绘制

    这里需要用到两个数据,一个是Cox多因素分析得到的基因,这个是根据Cox公式计算得到的,这里我们得到了7个,提取这7个基因的表达量,还有这7个基因在高低风险的分类,就可以绘制一张热图,热图从左到右的样本是风险分值以此从低到高的。在这里插入图片描述在这里插入图片描述
    R语言实例练习:
    单因素回归分析:

    library("survival")
    #install.packages('survminer')
    library("survminer")
    data("lung")
    #Surv()函数创建生存数据对象(主要输入生存时间和状态逻辑值),再用survfit()函数对生存数据对象拟合生存函数
        
    #Surv:用于创建生存数据对象
    #survfit:创建KM生存曲线或是Cox调整生存曲线
    fit <- survfit(Surv(time, status) ~ sex, data = lung)
    #survdiff:用于不同组的统计检验
    survdiff(Surv(time, status) ~ sex, data = lung)
    #三种作图方法:
    plot(fit)
    ggsurvplot(fit,
               pval = TRUE, conf.int = TRUE,
               risk.table = TRUE, # Add risk table
               risk.table.col = "strata", # Change risk table color by groups
               linetype = "strata", # Change line type by groups
               surv.median.line = "hv", # Specify median survival
               ggtheme = theme_bw(), # Change ggplot2 theme
               palette = c("#E7B800", "#2E9FDF")
    )
    plot(fit,xlab="Time(Days)",ylab="Survival",main="title",col=c("blue","red"),lty=2,lwd=2) 
    legend("topright",c("A","B"),col=c("blue","red"),lty=2,lwd=2,cex=0.7)
    

    第一个作图语句输出:
    在这里插入图片描述
    Cox回归分析:

    library("survival")
    library("survminer")
    #Cox模型主要用到的是coxph()函数,但需要先用Surv()函数产生一个生存对象;
    #另外coxph()函数支持的方法有:exact,breslow以及exact,默认是exact
    data("lung")
    # res.cox <- coxph(Surv(time, status) ~ sex, data = lung)
    # summary(res.cox)
    #coef就是公式中的回归系数b(有时也叫做beta值)
    #因此exp(coef)则是Cox模型中最主要的概念风险比(HR-hazard ratio)
    # HR = 1: No effect
    # HR < 1: Reduction in the hazard
    # HR > 1: Increase in Hazard
    # 在癌症研究中:
    # hazard ratio > 1 is called bad prognostic factor
    # hazard ratio < 1 is called good prognostic factor
    res.cox <- coxph(Surv(time, status) ~ age + sex + ph.ecog, data =  lung)
    summary(res.cox)
    # Create the new data  
    sex_df <- with(lung,
                   data.frame(sex = c(1, 2), 
                              age = rep(mean(age, na.rm = TRUE), 2),
                              ph.ecog = c(1, 1)
                   )
    )
    fit <- survfit(res.cox, newdata = sex_df)
    ggsurvplot(fit, data = sex_df, conf.int = TRUE, 
               legend.labs=c("Sex=1", "Sex=2"),
               ggtheme = theme_minimal())
    
    
    
    

    在这里插入图片描述

    展开全文
  • 数据来源:经典的titanic数据分析,大多数人都会从这个案例教学或者做练习,数据可从kaggle(https://www.kaggle.com/c/titanic/data)上一个机器学习的数据集,可用作数据分析的数据源,kaggle有三个表格,我们现在...

    一、提出问题:
    获救与其他因素(性别、年龄、舱位)的关系大小

    二、整理数据:
    数据来源:经典的titanic数据分析,大多数人都会从这个案例做教学或者做练习,数据可从kaggle(https://www.kaggle.com/c/titanic/data)上一个机器学习的数据集获得,kaggle有三个表格,我们现在用train这个表。

    工具:jupyter notebook,可以更好的展示分析思维和过程。

    导入python的数据分析库

    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    %matplotlib inline  #可视化在页面展示
    

    导入数据

    df = pd.read_csv(r'C:\Users\jessie\train.csv',engine='python')
    

    查看数据
    行列数

    df.shape
    #输出:(891, 12)
    

    查看数据信息

    df.info()
    
    #输出:
    <class 'pandas.core.frame.DataFrame'>
    RangeIndex: 891 entries, 0 to 890
    Data columns (total 12 columns):
    PassengerId    891 non-null int64
    Survived       891 non-null int64
    Pclass         891 non-null int64
    Name           891 non-null object
    Sex            891 non-null object
    Age            714 non-null float64
    SibSp          891 non-null int64
    Parch          891 non-null int64
    Ticket         891 non-null object
    Fare           891 non-null float64
    Cabin          204 non-null object
    Embarked       889 non-null object
    dtypes: float64(2), int64(5), object(5)
    memory usage: 83.6+ KB
    

    如果只想单纯查看数据的数据类型,可以用dtypes

    df.dtypes
    #输出:
    PassengerId      int64
    Survived         int64
    Pclass           int64
    Name            object
    Sex             object
    Age            float64
    SibSp            int64
    Parch            int64
    Ticket          object
    Fare           float64
    Cabin           object
    Embarked        object
    dtype: object
    

    查看列名

    df.columns
    #输出
    Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
           'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
          dtype='object')
    

    做到这里我们对泰坦尼克号的数据有了基本了解:
    1.数据一共有891行,12列;
    2.列【Age】、【Cabin】、【Embarked】有缺失值;
    3.有些数据需要修改数据类型,如【PassengerId】,ID是纯文本,不应是数字类型

    我们对数据作更进一步了解,可以查看数据的前N行或后N行

    df.head()
    #输出
    

    在这里插入图片描述
    ps:如果你用的其他例子列数比较多,可以用pd.set_option(‘max_columns’, 1000)来展示所有的列
    展示的前5行,列【Cabin】有三个NaN缺失值,处理缺失值的方法有删除、填充中位数或者平均数,删除会使数据量减少,如果数据量大还好,数据量小会影响整个的分析结果,填充平均数或者中位数是更常见的方法

    三、数据清洗
    如前面所说,有三列数据是有缺失值,选择不删除用填充的方法来解决,【Age】这一列用平均值来填充
    在这里插入图片描述
    列【Embarked】只有两个缺失值,这里我们用中位数来填充
    在这里插入图片描述
    在这里插入图片描述
    【Cabin】这列缺失值太多,先放着

    至此,我们的数据清洗已完成,下面开始数据分析+视化

    四、数据分析

    1.单因素分析

    1.1、先计算泰坦尼克号的获救人数和获救率

    total_survived = df.Survived.value_counts()  #对列【Survived】进行计数
    total_survived.index = total_survived.index.astype('str')  #将index由数字0,1转化为字符串“0”,“1”
    _x = total_survived.index  #赋值
    _y = total_survived.values  #赋值
    
    #下面画图
    plt.figure(figsize=(10, 5), dpi=80)  #figsize设置画布大小,dpi设置图片的精度
    plt.subplot(121)  #画两个左右对称的子图,现在是画第一个
    
    plt.bar(_x[0], _y[0],label='survived',color='#39CC6A',align='center')
    plt.bar(_x[1], _y[1],label='not survived',color='#FF9361',align='center')
    plt.xlabel('survived or not',fontsize=10)  
    plt.ylabel('count',fontsize=10)
    plt.ylim(0,600)
    plt.title('Survival Count')
    
    plt.subplot(122)  #现在是画第二个
    plt.pie(total_survived, labels=total_survived.index,colors=['#FF9361','#39CC6A'], autopct='%3.0f%%', startangle=230,pctdistance = 0.6, labeldistance = 1.1)
    plt.title('Survival Rate')
    plt.axis('equal') #设置为正圆
    
    plt.show()
    

    在这里插入图片描述
    由图形可以看出,这891名乘客中,获救的占38%,没获救的占比62,死亡率很高

    1.2、下面是计算Pclass和获救的关系

    df['Pclass'] = df['Pclass'].astype('str')  #将数字类型改为字符串
    df_survived = df['Pclass'][df['Survived'] == 1]  #将获救的Pclass数据取出来,右边等式返回的是索引值和Pclass值
    df_not_survived = df['Pclass'][df['Survived'] == 0]
    
    plt.figure(figsize=(5, 5),dpi = 80)
    
    plt.hist([df_survived df_not_survived], stacked=True,color=['#39CC6A','#FF9361'],label=['Survived','not Survived'])
    plt.xticks(['1','2','3'],['Upper','Middle','lower'])
    plt.legend()
    plt.xlabel('Pclass',fontsize=10)  
    plt.ylabel('count',fontsize=10)
    plt.title('Pclass_Survived')
    plt.ylim(0,600)
    
    plt.show()
    

    在这里插入图片描述
    结论:第3层的船舱人数越多,获救率反而最小,船舱等级越高,获救率越大

    1.3、下面是计算性别对获救的影响

    df_sex1=df['Sex'][df['Survived']==1]
    df_sex0=df['Sex'][df['Survived']==0]
    
    plt.figure(figsize=(5, 5), dpi=80)
    plt.hist([df_sex1,df_sex0],stacked=True,color=['#39CC6A','#FF9361'],label=['Survived','not Survived'],rwidth=10)
    plt.xticks([-1,0,1,2],[-1,'F','M',2])
    plt.legend()
    plt.xlabel('Sex',fontsize=10)  
    plt.ylabel('count',fontsize=10)
    plt.title('Sex_Survived')
    
    plt.show()
    

    在这里插入图片描述
    由数据可以看出,船上男性的人数比女性多,但女性的获救率远大于男性

    1.4、计算年龄对获救的影响

    先对年龄分层

    def age_level(age):
            if age <= 9:
                return str('1')
            elif age <=24:
                return str('2')
            elif age <=59:
                return str('3')
            else:
                return str('4')
    

    这个分类标准标准是小于等于9岁的是儿童,小于等于24岁的是青年,小于等于59岁的是中年,大于59岁的是老年

    plt.figure(figsize=(5, 5), dpi=80)
    df_age1=df['age_level'][df['Survived']==1]
    df_age0=df['age_level'][df['Survived']==0]
    plt.hist([df_age1,df_age0],stacked=True,color=['#39CC6A','#FF9361'],label=['Survived','not Survived'])
    plt.xticks(['1','2','3','4'],['child','youth','middle','elderly'])
    plt.legend()
    plt.xlabel('Age_level',fontsize=10)
    plt.ylabel('count',fontsize=10)
    plt.title('Age_Survived')
    plt.ylim(0,700)
    
    plt.show()
    

    在这里插入图片描述
    可以看到中年人(24-59岁)的人数最多,获救人数也最多,儿童(0-9岁)的获救率最高

    2多因素分析

    2.1、Age和Pclass共同对获救的影响

    先导入其他的库

    from __future__ import division
    from scipy import stats
    import seaborn as sns
    

    定义获救人员

    survives_passenger_df=df[df['Survived']==1]
    
    #定义几个常用的方法
    
    #按照xx对乘客进行分组,计算每组的人数
    def xx_group_all(df,xx):
        #按照xx对乘客进行分组后 ,每个组的人数
        return df.groupby(xx)['PassengerId'].count()
    
    #计算每个组的生还率
    def group_passenger_survived_rate(xx):
        #按xx对乘客进行分组后每个组的人数
        group_all=xx_group_all(df,xx)
        #按xx对乘客进行分组后每个组生还者的人数
        group_survived_value=xx_group_all(survives_passenger_df,xx)
        #按xx对乘客进行分组后,每组生还者的概率
        return group_survived_value/group_all
    
    #输出饼图
    def print_pie(group_data,title):
        group_data.plt.pie(title=title,figsize=(6,6),autopct='%.2f%%'\
                          ,startangle=90,legend=True)
    
    #输出柱状图
    def print_bar(data,title):
        bar=data.plot.bar(title=title)
        for p in bar.patches:
            bar.annotate('%.2f%%'%(p.get_height()*100),(p.get_x()*1.005\
                         ,p.get_height()*1.005))
    
    print_bar(group_passenger_survived_rate(['Sex','Pclass']),'Sex_Pclass_Survived')
    

    在这里插入图片描述
    可以看到,对获救率的影响Age>Pclass,其次是Pclass对获救率的影响是1>2>3等级

    2.2、性别和年龄共同对获救率的影响

    #按Pclass分组计算每组的人数
    def Pclass_survived_all(data,Pclass):
        return data.groupby(Pclass)['Sex'].count()
    
    dd0=df[['age_level','Sex','Pclass']]
    dd11=df[['age_level','Sex','Pclass']][df['Survived']==1]
    c=Pclass_survived_all(dd11,['age_level','Sex','Pclass'])
    dd0['Sex'].count()
    
    #按Pclass分组计算每组的生还率
    def Pclass_survived_probability(data):
        #计算每组生还者的人数
        groupby_survived=Pclass_survived_all(dd11,data)
        #计算每组的总人数
        groupby_survived_all=Pclass_survived_all(dd0,data)
        return groupby_survived/groupby_survived_all
    
    print_bar(Pclass_survived_probability(['Sex','age_level']),'Sex_Sge_Survived')
    

    可以看出,对获救率影响大的是性别,女性>男性
    其次儿童的获救率大于青年、中年和老年,青年跟中年的获救率差不多,老年人最低。

    2.3、年龄和乘客等级共同对生还率的影响

    print_bar(Pclass_survived_probability(['age_level','Pclass']),'age_pclass_Survivedd')
    

    在这里插入图片描述
    可以看出乘客的等级对获救率的影响>乘客年龄的影响
    年龄越大获救率越小,乘客等级越差获救率越差

    五、结论
    通过分析,可以看出对获救率影响最大的因素是乘客等级,其次是性别,最后年龄段也对生化率有影响

    六、分析的局限性

    这里并没有从统计上分析得出这些结果的偶然性,所以并不知道这里的结果是真正的差异造成的还是噪音造成的
    年龄字段有一些缺失值,因为是连续数据这里用的是全体乘客年龄的均值填充缺失值,这样会缩小年龄之间的差异,也会影响分析结果

    七、结果的相关性
    这里的数据并非通过试验得出,所以无法说自变量之间的因果性,只能说她们之间有相关性

    八、参考文章:
    https://www.jianshu.com/p/17f99100525a
    https://zhuanlan.zhihu.com/p/30920420

    展开全文
  • vue+element实现动态:根据后台返回的属性名和字段动态生成可变表格element表格使用插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义...

    vue+element实现动态表格:根据后台返回的属性名和字段动态生成表头可变表格

    由于项目需求,需要有一个动态表格,可以根据配置或从后台获取表格属性列。

    场景描述:

    现有一个胡萝卜厂生产不同品种的胡萝卜,为了便于客户了解产品,现需在官网展示胡萝卜信息。现有的萝卜信息:编号(id)、名称(name)、保质期(age)、特点(remark),但是日后会有扩展信息,可能会加上颜色、体积等信息。

    问题分析:

    现在可以确定胡萝卜有4个属性要展示,以后还要扩展信息,而且这个厂以后可能生产别的蔬菜水果,也需要展示相应信息,需求变动的话要修改很多代码。这时候如果有一个动态表格,表格的表头信息从后台获取(或在js中配置),那日后修改胡萝卜表的属性(增加或删除表字段)时就不用修改前端页面代码,长远一点来看,日后这个厂生产别的蔬菜水果也需要信息展示时,这个表格就可以复用(把表格抽出来当一个模板,需要用的页面引用即可,这个代码我有时间会从项目中整理出来)。

    代码上场啦!!!

    动态表格

    动态表格核心代码如下:

         <el-row>
            <el-row> 
              <el-col><span>可选择属性:</span></el-col>
              <el-col>
                <el-checkbox-group v-model="checkArr" size="medium">
                    <el-col :span=12 v-for="item in optionalColumnList" :key="item.prop">
                        <el-row :gutter=20>
                          <el-col>
                            <el-col :span=2><el-checkbox :label="item.propName" @change="menuChange(item)" ></el-checkbox></el-col>
                          </el-col>   
                       </el-row>
                    </el-col>
                </el-checkbox-group>
              </el-col>
            </el-row>
        </el-row>
     <el-table class="fixedtableHeight" v-loading="listLoading" ref="multipleTable" :data="showList" :header-cell-style="{background:'#96CDCD'}" stripe tooltip-effect="dark" style="width: 100%;margin-top:1%;">
            <el-table-column :label="item.propName" :property="item.prop" v-for="item in tableColumnList" :key="item.prop" align="center">
                  <template slot-scope="scope">
                        <span>{{scope.row[scope.column.property]}}</span>
                  </template>
              </el-table-column>
      </el-table>
    

    注意tableColumnList就是实现动态的关键因素!
    tableColumnList里面存放的就是我们通过js文件或者接口获取到的表头属性,内容如下:

    [{prop: ‘id’, propName: ‘编号’},
    {prop: ‘name’, propName: ‘名称’},
    {prop: ‘age’, propName: ‘保质期’},
    {prop: ‘remark’, propName: ‘特点’}],

    prop跟胡萝卜表中的字段是一一对应的,propName就是每个字段的中文名,也即在表头显示的名字。

    tableColumnList的获取方法有两种:

    (1)在前端js中配置

    我是放在static文件夹下面的config.js中,目录如下:
    在这里插入图片描述
    内容:直接声明一个数组变量并赋值就好,用的时候引入js直接使用名字就可以使用
    在这里插入图片描述
    放在这里的好处:前端项目打包成dist时,会把这个static文件夹放在dist里面,以后修改的时候就直接修改js配置文件,不用动.vue源代码。

    (2)从后端接口获取

    注意,采用此种方法获取。后端接口一定要同时返回属性的中文名和英文名,即prop和propName。

    还有一个关键步骤,就是一定要在在页面渲染之前获取到tableColumnList,然后再去渲染表格,这就涉及到vue的生命周期了,这块不做多余解释,我是直接在created中调用获取tableColumnList的方法,整个js如下:

    <script>
    export default {
      data() {
        return {
          listLoading: false,
          showList: [],
          // 这里为了简便我就没有调用后台接口获取数据,直接写的假数据  你要用的话可以调用后台接口获取tableColumnList,注意数据格式
          tableColumnList: [{prop: 'id', propName: '编号'},
                            {prop: 'name', propName: '名字'},
                            {prop: 'age', propName: '保质期'},
                            {prop: 'remark', propName: '特点'}],
          // 这里为了简便我就没有调用后台接口获取数据,直接写的假数据
          dataList: [{'id': '100001','name': '小红萝卜','age': '2年','remark': '适合油炸','country': '中国','address': '广东省深圳市'},
                     {'id': '100002','name': '萝卜妹','age': '2年','remark': '适合水煮','country': '美国','address': '硅谷'},
                     {'id': '100003','name': '胖萝卜头','age': '1年','remark': '适合玩儿','country': '泰国','address': '清迈'},
                     {'id': '100004','name': '萝卜酱','age': '4年','remark': '适合吃火锅','country': '韩国','address': '首尔'}],
          optionalColumnList: [{prop: 'country', propName: '出口国家'},
                               {prop: 'address', propName: '零售点'}],
          checkArr:[]
        }
      },
      created() {
        this.queryFn()
      },
      methods: {
        queryFn() {
          // 调用后台接口获取tableColumnList和dataList的方法写在这里
            // getData().then(response =>{
            //   this.tableColumnList = response.data.tableColumnList
            //   this.dataList = response.data.dataList
            // })
            this.showList = this.dataList
        },
        clearQuery() {
          this.query.name = ''
          this.queryFn()
        },
        menuChange(item){
          // 注意  我这里都用的假数据,要从后台获取tableColumnList和dataList的时候
          //,每一次调用menuChange都要重新获取tableColumnList和dataList,保证属性和数据是对应的   
          let flag = true
          for(var i=0;i<this.checkArr.length;i++){
            if(this.checkArr[i] === item.propName){
              flag = false
              break
            }
          }
          if(!flag){
            this.tableColumnList.push(item)
          }
          if(flag){
            Array.prototype.contains = function(obj) {
              var j = this.length;
              while (j--) {
                if (this[j] === obj) {
                return j; // 返回的这个 i 就是元素的索引下标,
                }
              }
              return false
            }
            this.tableColumnList.splice(this.tableColumnList.contains(item),1)
          }
        },
      }
    }
    </script>
    

    解释一下menuChange方法:
    当用户勾选一个可选择属性之后,就触发这个方法,这个方法主要做一件事情:

    改变tableColumnList的值,从而动态改变表格的列

    页面效果如下:
    在这里插入图片描述
    可选择属性有两个(也可以看作以后可能扩展的属性,这里只演示一下动态效果),勾选之后:
    在这里插入图片描述

    注意

    动态表格与element一般表格在使用方法上的两个区别:

    1、label与property的赋值方式
    动态表格,表格的label和property是动态根据后台返回的数据(或者从js获取)来取值的,后台返回的数据就是上面的tableColumnList。

    • 通过 :label=“item.propName” 取得tableColumnList中的propName,也就是表头每一列的名字;
    • 通过 :property=“item.prop” 取得tableColumnList中对象的prop,也就是后台实体类中的属性名,

    2、属性和数据双向绑定方式,也就是 scope.row.*

    • 通过 ** scope.row[scope.column.property]** 来获取每一个属性对应的数据, scope.column.property 中的property取的就是 :property=“item.prop” 中的值;

    好了,至此已经实现了基于vue+element的动态表格,核心代码我基本都贴出来了。之前的那篇我写的可能不是很清楚,导致大家看不懂直接找我要源码,这次修改之后我觉得是很清楚的了!认真看下来一定可以自己写出来的!你要实在写不出来,在私信我源码吧,我看到一定回复你。

    实现表格间的互相拖拽功能,其实也用到了这种动态生成表格的方法,我在项目中就这样做的,但我最近太忙了,有时间一定整理出来。
    对你有用记得点赞我哦!
    在这里插入图片描述
    代码我最近花时间整理了一下,下载链接:https://download.csdn.net/download/weixin_43714266/12321382

    不需要花积分,免费的,下载完解压后直接访问index.html即可。
    拿走要点赞哟~

    展开全文
  • Python 自动整理 Excel 表格

    千次阅读 2019-08-01 14:48:08
    Python 自动整理 Excel 表格 相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 ...
  • 相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格的自动化整理。 ...
  • 划分方法有4种,常见有: 第1,按功能;...关于WBS设计的相关精华内容,在我整理的:技法-WBS,本表格思路来自于此 这篇文章提供了另外一个更高的划分思路:因式分解和因素分解也可以参考 ht...
  • 前文《JSP表格模板升级(1)-- 用Java反射动态指定方法和参数》已经实现了动态指定具体的业务方法,达到了...由于表格从两列的Key-Value的形式变为可变列,所以数据结构应变为一对的关系。为简单起见,笔者定义了一
  • Python 合并 Excel 表格

    2019-12-13 08:18:00
    作者:TED 来源:TEDxPY之前曾尝试用 Python 写过整理 Excel 表格的代码,记录在《Python 自动整理 Excel 表格》中。当时也是自己初试 p...
  • XMind允许用户通过电子表格的形式添加信息,同时在每个单元格中包含个主题,且拥有独立的外观与结构。XMind电子表格是一种全新的思维导图结构,可以用来对复杂的因素进行分析,譬如影响同一行为的不同因素、某因素...
  • 基于MaskRcnn以及形态学操作的文本图像中表格区域的提取 训练一个可用于检测表格区域的分割网络,在得到网络的输出即文本图像中表格区域后,利用形态学中的开运算提取表格区域中的线段用于后续的操作。 MaskRcnn ...
  • css拼接表格,达到冻结列的效果

    千次阅读 2018-09-08 15:14:11
    一、背景  项目中有一个表单填报,表单基本可分为左右两边,左边... 当每一个评分因素评完分之后,需要自动计算该评分项的小计总分以及该被评分人的总计得分,且此处表格存在合并单元格的样式。  二、解决方案 ...
  • Python自动化整理Excel 表格

    千次阅读 2019-09-15 20:14:41
    相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格的自动化整理。 ...
  • LATEX关于表格的一些处理

    千次阅读 2020-07-05 15:21:18
    文章目录1、表格初步1.1 导言区11.2 导言区21.3 其他指令2、单元格的合并2.1 按照列合并2.2 按照行合并2.3 行列合并3 列的设置技巧3.1 固定列宽设置(水平对齐)3.2 固定列宽设置(垂直左中右对齐)3.3 列设置(设置...
  • 如何识别图片中的表格数据

    万次阅读 2018-12-24 10:34:44
      在很时候,我们的数据来源形式是多种多样的,有时候数据(或表格)也会呈现在图片中。那么,我们如何来获取图片中的有用数据呢?当一张图片中含有表格数据的时候,我们可以用OpenCV识别表格中的直线,然后再用...
  • Google 电子表格函数列表

    千次阅读 2013-10-23 22:25:08
    Google 电子表格支持的单元格公式都是在大多数桌面电子表格程序包中可找到的典型公式。您可以使用这些公式创建函数,处理数据并计算字符串和数字。 以下是每个类别中所有可用函数的列表。在使用这些函数时,请别...
  • 相信有不少朋友日常工作会用到 Excel 处理各式表格文件,更有甚者可能要花大把时间来做繁琐耗时的表格整理工作。最近有朋友问可否编程来减轻表格整理工作量,今儿我们就通过实例来实现 Python 对表格的自动化整理。 ...
  • ,那么需要知道是第几行中的起始列(startCloumn)~终止列(endCloumn),同时还需要注意的是,如果这一行中,起始列到终止列的中间,以及存在列的合并了,那么这个因素也是要考虑的。 在需要合并的单元格,都...
  • 本文从三篇表格识别领域的精选论文出发,深入分析了深度学习在表格识别任务...人工处理表格的方式存在很问题,一是,由于表格数量大,编辑过程中经常更新,不同的表格中可能写入了相同的内容,对这些表格进行手动交.
  • table表格宽带width属性研究

    千次阅读 2018-06-14 22:23:59
    今天在开发过程中有利用到table中的width属性,涉及百分比和像素,由于对width内部属性的不明确,导致表格的数据展示不完美,闲下来自己捣鼓,所以才有这份研究,仅作为个人成长记录,以及提供参考 情况分析: 1....
  • 均匀试验设计表格的问题

    千次阅读 2014-02-23 09:26:14
    仍然有很同学不知道如何用均匀试验表格,不知道哪里查找. 不妨去浸会大学的网站,uniform experimental design思想的提出者方开泰工作的大学网址看看 http://uic.edu.hk/isci/UniformDesign/UD%20Tables.html ...
  • 评估表格如下:目标领域权重自评分(满分10分)职业价值学习影响力乐趣奖励年度职业价值总分接下来,我们分别介绍四个因素、权重、自评分和职业价值这四列的含义和使用方法,最后再说说如何使用这个工具的指导我们...
  • vue.js 下载table表格的两种方法 ...这种方法简单实用,也比较秒,不用你设置表头之类的,下载的就是table表格中的数据,但是不可控的因素就是做了分页之后,只能下载本页数据,还没有处理说是可以下载所有的数据 ...
  •   在很时候,我们的数据来源形式是多种多样的,有时候数据(或表格)也会呈现在图片中。那么,我们如何来获取图片中的有用数据呢?当一张图片中含有表格数据的时候,我们可以用OpenCV识别表格中的直线,然后再用...
  • ICDAR 2019表格识别论文与竞赛综述(上)表格作为一种有效的数据组织与展现方法被广泛应用,也成为各类文档中常见的页面对象。随着文档数目的爆炸性增长,如何高效地从文档中找到表格并获取...
  • 你的Excel表格颜色搭配的对么?

    千次阅读 2017-12-29 15:14:00
    在昨天的文章中,我们讨论了《Excel表格制作的基本九大原则》,今天我们还要继续聊聊,Excel表格的颜色搭配规则。 一个表格的美丑与否,除了基本的格式之外,如何配色也是非常关键的,如果只是单纯的罗列数字,对...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 48,370
精华内容 19,348
关键字:

多因素表格