精华内容
下载资源
问答
  • 生物信息学习正确姿势NGS系列文章包括NGS基础、高颜值在线绘图和分析、转录组分析(Nature重磅综述|关于RNA-seq你想知道全在这)、ChIP-seq分析(ChIP-se...

    生物信息学习的正确姿势

    NGS系列文章包括NGS基础高颜值在线绘图和分析、转录组分析 Nature重磅综述|关于RNA-seq你想知道的全在这、ChIP-seq分析 ChIP-seq基本分析流程、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程)、DNA甲基化分析、重测序分析、GEO数据挖掘典型医学设计实验GEO数据分析 (step-by-step)批次效应处理等内容

    加载需要的包

    library(dplyr)
    library(ggpubr)
    library(tidyr)
    library(ggplot2)
    library(pheatmap)
    library(ggstatsplot)
    library(Hmisc)

    读入数据

    ’row.names’里不能有重复的名字 Duplicate row names

    expr <- read.table("ehbio.simplier.DESeq2.normalized.symbol.txt", row.names = 1, header = T, sep = "\t")

    行名唯一化处理

    这里使用make.names转换行名为唯一,实际需要先弄清楚为什么会有重复名字

    expr <- read.table("ehbio.simplier.DESeq2.normalized.symbol.txt", row.names = NULL, header = T, sep = "\t")
    head(expr)
    
    ##       id untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011
    ## 1    FN1    245667.66      427435.1     221687.51      371144.2  240187.24   450103.21   280226.19   376518.23
    ## 2    DCN    212953.14      360796.2     258977.30      408573.1  210002.18   316009.14   225547.39   393843.74
    ## 3  CEMIP     40996.34      137783.1      53813.92       91066.8   62301.12   223111.85   212724.84   157919.47
    ## 4 CCDC80    137229.15      232772.2      86258.13      212237.3  136730.76   226070.89   124634.56   236237.81
    ## 5 IGFBP5     77812.65      288609.2     210628.87      168067.4   96021.74   217439.21   162677.38   168387.36
    ## 6 COL1A1    146450.41      127367.3     152281.50      140861.1   62358.64    53800.47    69160.97    51044.06

    有哪些基因名是重复出现的?

    expr$id[duplicated(expr$id)]
    
    ##   [1] "MATR3"      "PKD1P1"     "HSPA14"     "OR7E47P"    "POLR2J3"    "ATXN7"      "TMSB15B"    "LINC-PINT" 
    ##   [9] "TBCE"       "SNX29P2"    "SCO2"       "POLR2J4"    "CCDC39"     "RGS5"       "BMS1P21"    "RF00017"   
    ##  [17] "GOLGA8M"    "RF00017"    "DNAJC9-AS1" "CYB561D2"   "RF00017"    "IPO5P1"     "RF00017"    "RF00017"   
    ##  [25] "RF00017"    "SPATA13"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ##  [33] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ##  [41] "RF00019"    "RF00019"    "RF00017"    "RF00017"    "RF00017"    "RF00019"    "BMS1P4"     "RF00019"   
    ##  [49] "RF00019"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ##  [57] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00019"   
    ##  [65] "RF00017"    "RF00017"    "RF00017"    "RF00019"    "RF00017"    "RF00017"    "LINC01238"  "RF00017"   
    ##  [73] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ##  [81] "RF00017"    "RF00017"    "RF02271"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ##  [89] "LINC01297"  "RF00019"    "RF00017"    "RF00012"    "RF00019"    "RF00017"    "RF00017"    "RF00019"   
    ##  [97] "RF00017"    "RF00017"    "RF00017"    "ZNF503"     "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ## [105] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF02271"    "RF00019"    "RF00019"    "RF00017"   
    ## [113] "RF00019"    "RF02271"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00019"    "RF00019"   
    ## [121] "RF00017"    "RF00019"    "ITFG2-AS1"  "RF00019"    "RF00019"    "RF00017"    "RF00019"    "RF00017"   
    ## [129] "RF00017"    "RF00017"    "RF00019"    "RF00017"    "RF00012"    "RF00017"    "RF00017"    "RAET1E-AS1"
    ## [137] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"   
    ## [145] "RF00012"    "RF02271"    "RF00019"    "LINC01422"  "RF02271"    "RF00017"    "RF00019"    "RF00019"   
    ## [153] "RF00019"    "RF00019"    "RF00017"    "LINC01481"  "RF00017"    "SNHG28"     "RF00019"    "RF00019"   
    ## [161] "RF00019"    "RF00019"    "LINC00484"  "LINC00941"  "ALG1L9P"    "RF00017"    "DUXAP8"     "RF00017"   
    ## [169] "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RF00017"    "RMRP"       "RF00017"    "RF00017"   
    ## [177] "RF00017"    "RF00017"    "DIABLO"

    名字唯一化处理

    # 该行命令是展示make.names的效果
    make.names(c("a", "a", "b", "b", "b"), unique = T)
    
    ## [1] "a"   "a.1" "b"   "b.1" "b.2"

    唯一化之后的名字作为行名字,并去掉原来的第一列

    expr_names <- make.names(expr$id, unique = T)
    rownames(expr) <- expr_names
    expr <- expr[, -1]
    head(expr)
    
    ##        untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011
    ## FN1       245667.66      427435.1     221687.51      371144.2  240187.24   450103.21   280226.19   376518.23
    ## DCN       212953.14      360796.2     258977.30      408573.1  210002.18   316009.14   225547.39   393843.74
    ## CEMIP      40996.34      137783.1      53813.92       91066.8   62301.12   223111.85   212724.84   157919.47
    ## CCDC80    137229.15      232772.2      86258.13      212237.3  136730.76   226070.89   124634.56   236237.81
    ## IGFBP5     77812.65      288609.2     210628.87      168067.4   96021.74   217439.21   162677.38   168387.36
    ## COL1A1    146450.41      127367.3     152281.50      140861.1   62358.64    53800.47    69160.97    51044.06

    热图绘制

    library(pheatmap)
    top6 <- head(expr)
    pheatmap(top6)

    提取差异基因绘制热图


    读入差异基因列表

    de_gene <- read.table("ehbio.DESeq2.all.DE.symbol", row.names = NULL, header = F, sep = "\t")
    head(de_gene)
    
    ##        V1                     V2
    ## 1 ARHGEF2 untrt._higherThan_.trt
    ## 2  KCTD12 untrt._higherThan_.trt
    ## 3  SLC6A9 untrt._higherThan_.trt
    ## 4  GXYLT2 untrt._higherThan_.trt
    ## 5   RAB7B untrt._higherThan_.trt
    ## 6   NEK10 untrt._higherThan_.trt

    提取Top3 差异的基因

    # library(dplyr)
    top6_de_gene <- de_gene %>% group_by(V2) %>% dplyr::slice(1:3)
    top6 <- expr[which(rownames(expr) %in% top6_de_gene$V1), ]
    head(top6)
    
    ##         untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011
    ## KCTD12    4700.79369     3978.0401    4416.15169    4792.34174  936.69481    633.4462   979.77576   641.49582
    ## MAOA       438.54451      452.9934     516.63033     258.73279 4628.00860   4429.7201  4629.66529  3778.17351
    ## ARHGEF2   3025.62334     3105.7830    3094.51304    2909.99043 1395.39850   1441.9916  1464.59769  1501.51509
    ## SPARCL1     58.15705      102.5827      80.00997      82.59042 2220.50867   1750.9879  1374.90745  2194.58930
    ## PER1       170.61639      156.3692     194.97497     123.47689 1728.38117   1230.2575  1120.00650  1333.91208
    ## SLC6A9     360.66314      413.8797     365.47650     443.71982   63.90538     56.8962    86.82929    95.33916

    读入样品分组信息作为列注释

    metadata <- read.table("sampleFile", header = T, row.names = 1)
    pheatmap(top6, annotation_col = metadata)

    按行标准化后展示

    pheatmap(top6, annotation_col = metadata, scale = "row", cluster_cols = F)

    箱线图和统计比较

    head(top6)
    
    ##         untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011
    ## KCTD12    4700.79369     3978.0401    4416.15169    4792.34174  936.69481    633.4462   979.77576   641.49582
    ## MAOA       438.54451      452.9934     516.63033     258.73279 4628.00860   4429.7201  4629.66529  3778.17351
    ## ARHGEF2   3025.62334     3105.7830    3094.51304    2909.99043 1395.39850   1441.9916  1464.59769  1501.51509
    ## SPARCL1     58.15705      102.5827      80.00997      82.59042 2220.50867   1750.9879  1374.90745  2194.58930
    ## PER1       170.61639      156.3692     194.97497     123.47689 1728.38117   1230.2575  1120.00650  1333.91208
    ## SLC6A9     360.66314      413.8797     365.47650     443.71982   63.90538     56.8962    86.82929    95.33916

    矩阵转置

    top6_t <- as.data.frame(t(top6))
    top6_t
    
    ##                  KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## untrt_N61311  4700.7937  438.5445 3025.623   58.15705  170.6164 360.66314
    ## untrt_N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## untrt_N080611 4416.1517  516.6303 3094.513   80.00997  194.9750 365.47650
    ## untrt_N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982
    ## trt_N61311     936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## trt_N052611    633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    ## trt_N080611    979.7758 4629.6653 1464.598 1374.90745 1120.0065  86.82929
    ## trt_N061011    641.4958 3778.1735 1501.515 2194.58930 1333.9121  95.33916

    与样本属性信息合并

    top6_t_with_group <- merge(metadata, top6_t, by = 0)
    head(top6_t_with_group)
    
    ##       Row.names conditions individual    KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## 1   trt_N052611        trt    N052611  633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    ## 2   trt_N061011        trt    N061011  641.4958 3778.1735 1501.515 2194.58930 1333.9121  95.33916
    ## 3   trt_N080611        trt    N080611  979.7758 4629.6653 1464.598 1374.90745 1120.0065  86.82929
    ## 4    trt_N61311        trt     N61311  936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## 5 untrt_N052611      untrt    N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## 6 untrt_N061011      untrt    N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982

    修改第一列的列名字

    colnames(top6_t_with_group)[1] = "Sample"
    head(top6_t_with_group)
    
    ##          Sample conditions individual    KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## 1   trt_N052611        trt    N052611  633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    ## 2   trt_N061011        trt    N061011  641.4958 3778.1735 1501.515 2194.58930 1333.9121  95.33916
    ## 3   trt_N080611        trt    N080611  979.7758 4629.6653 1464.598 1374.90745 1120.0065  86.82929
    ## 4    trt_N61311        trt     N61311  936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## 5 untrt_N052611      untrt    N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## 6 untrt_N061011      untrt    N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982

    单基因箱线图

    library(ggpubr)
    
    ggboxplot(top6_t_with_group, x = "conditions", y = "KCTD12", title = "KCTD12", ylab = "Expression", color = "conditions", 
        palette = "jco")

    # palette npg, lancet,

    多基因箱线图 (combine)

    ggboxplot(top6_t_with_group, x = "conditions", y = c("KCTD12", "MAOA", "PER1", "SLC6A9"), ylab = "Expression", combine = T, 
        color = "conditions", palette = "jco")

    多基因箱线图 (merge)

    ggboxplot(top6_t_with_group, x = "conditions", y = c("KCTD12", "MAOA", "PER1", "SLC6A9"), ylab = "Expression", merge = "flip", 
        color = "conditions", palette = "nature")

    数据对数转换后绘制箱线图

    top6_t_with_group_log = top6_t_with_group %>% purrr::map_if(is.numeric, log1p) %>% as.data.frame
    head(top6_t_with_group_log)
    
    ##          Sample conditions individual   KCTD12     MAOA  ARHGEF2  SPARCL1     PER1   SLC6A9
    ## 1   trt_N052611        trt    N052611 6.452752 8.396317 7.274474 7.468506 7.115791 4.058652
    ## 2   trt_N061011        trt    N061011 6.465360 8.237261 7.314896 7.694206 7.196621 4.567875
    ## 3   trt_N080611        trt    N080611 6.888344 8.440456 7.290018 7.226869 7.021982 4.475395
    ## 4    trt_N61311        trt     N61311 6.843425 8.440098 7.241652 7.705942 7.455519 4.172930
    ## 5 untrt_N052611      untrt    N052611 8.288796 6.118083 8.041343 4.640370 5.058595 6.027989
    ## 6 untrt_N061011      untrt    N061011 8.474983 5.559653 7.976249 4.425929 4.824120 6.097444
    
    ggboxplot(top6_t_with_group_log, x = "conditions", y = c("KCTD12", "MAOA", "PER1", "SLC6A9"), ylab = "Expression", merge = "flip", 
        fill = "conditions", palette = "Set3")

    用ggplot2实现ggpubr

    head(top6_t_with_group)
    
    ##          Sample conditions individual    KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## 1   trt_N052611        trt    N052611  633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    ## 2   trt_N061011        trt    N061011  641.4958 3778.1735 1501.515 2194.58930 1333.9121  95.33916
    ## 3   trt_N080611        trt    N080611  979.7758 4629.6653 1464.598 1374.90745 1120.0065  86.82929
    ## 4    trt_N61311        trt     N61311  936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## 5 untrt_N052611      untrt    N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## 6 untrt_N061011      untrt    N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982

    转换为长矩阵

    top6_t_with_group_melt <- gather(top6_t_with_group, key = "Gene", value = "Expr", -conditions, -Sample, -individual)
    top6_t_with_group_melt
    
    ##           Sample conditions individual    Gene       Expr
    ## 1    trt_N052611        trt    N052611  KCTD12  633.44616
    ## 2    trt_N061011        trt    N061011  KCTD12  641.49582
    ## 3    trt_N080611        trt    N080611  KCTD12  979.77576
    ## 4     trt_N61311        trt     N61311  KCTD12  936.69481
    ## 5  untrt_N052611      untrt    N052611  KCTD12 3978.04011
    ## 6  untrt_N061011      untrt    N061011  KCTD12 4792.34174
    ## 7  untrt_N080611      untrt    N080611  KCTD12 4416.15169
    ## 8   untrt_N61311      untrt     N61311  KCTD12 4700.79369
    ## 9    trt_N052611        trt    N052611    MAOA 4429.72011
    ## 10   trt_N061011        trt    N061011    MAOA 3778.17351
    ## 11   trt_N080611        trt    N080611    MAOA 4629.66529
    ## 12    trt_N61311        trt     N61311    MAOA 4628.00860
    ## 13 untrt_N052611      untrt    N052611    MAOA  452.99337
    ## 14 untrt_N061011      untrt    N061011    MAOA  258.73279
    ## 15 untrt_N080611      untrt    N080611    MAOA  516.63033
    ## 16  untrt_N61311      untrt     N61311    MAOA  438.54451
    ## 17   trt_N052611        trt    N052611 ARHGEF2 1441.99162
    ## 18   trt_N061011        trt    N061011 ARHGEF2 1501.51509
    ## 19   trt_N080611        trt    N080611 ARHGEF2 1464.59769
    ## 20    trt_N61311        trt     N61311 ARHGEF2 1395.39850
    ## 21 untrt_N052611      untrt    N052611 ARHGEF2 3105.78299
    ## 22 untrt_N061011      untrt    N061011 ARHGEF2 2909.99043
    ## 23 untrt_N080611      untrt    N080611 ARHGEF2 3094.51304
    ## 24  untrt_N61311      untrt     N61311 ARHGEF2 3025.62334
    ## 25   trt_N052611        trt    N052611 SPARCL1 1750.98786
    ## 26   trt_N061011        trt    N061011 SPARCL1 2194.58930
    ## 27   trt_N080611        trt    N080611 SPARCL1 1374.90745
    ## 28    trt_N61311        trt     N61311 SPARCL1 2220.50867
    ## 29 untrt_N052611      untrt    N052611 SPARCL1  102.58269
    ## 30 untrt_N061011      untrt    N061011 SPARCL1   82.59042
    ## 31 untrt_N080611      untrt    N080611 SPARCL1   80.00997
    ## 32  untrt_N61311      untrt     N61311 SPARCL1   58.15705
    ## 33   trt_N052611        trt    N052611    PER1 1230.25755
    ## 34   trt_N061011        trt    N061011    PER1 1333.91208
    ## 35   trt_N080611        trt    N080611    PER1 1120.00650
    ## 36    trt_N61311        trt     N61311    PER1 1728.38117
    ## 37 untrt_N052611      untrt    N052611    PER1  156.36920
    ## 38 untrt_N061011      untrt    N061011    PER1  123.47689
    ## 39 untrt_N080611      untrt    N080611    PER1  194.97497
    ## 40  untrt_N61311      untrt     N61311    PER1  170.61639
    ## 41   trt_N052611        trt    N052611  SLC6A9   56.89620
    ## 42   trt_N061011        trt    N061011  SLC6A9   95.33916
    ## 43   trt_N080611        trt    N080611  SLC6A9   86.82929
    ## 44    trt_N61311        trt     N61311  SLC6A9   63.90538
    ## 45 untrt_N052611      untrt    N052611  SLC6A9  413.87971
    ## 46 untrt_N061011      untrt    N061011  SLC6A9  443.71982
    ## 47 untrt_N080611      untrt    N080611  SLC6A9  365.47650
    ## 48  untrt_N61311      untrt     N61311  SLC6A9  360.66314
    
    library(ggplot2)
    ggplot(top6_t_with_group_melt, aes(x = Gene, y = Expr)) + geom_boxplot(aes(color = conditions)) + theme_classic()

    配色

    序列型颜色板适用于从低到高排序明显的数据,浅色数字小,深色数字大。

    library(RColorBrewer)
    display.brewer.all(type = "seq")

    离散型颜色板适合带“正、负”的,对极值和中间值比较注重的数据。

    display.brewer.all(type = "div")

    分类型颜色板比较适合区分分类型的数据。

    display.brewer.all(type = "qual")

    箱线图加统计分析

    my_comparisons <- list(c("trt", "untrt"))
    ggboxplot(top6_t_with_group, x = "conditions", y = "PER1",
              title = "PER1", ylab = "Expression",
              add = "jitter",                               # Add jittered points
              #add = "dotplot",
              fill = "conditions", palette = "Paired") +
      stat_compare_means(comparisons = my_comparisons)

    标记点来源的样本

    my_comparisons <- list(c("trt", "untrt"))
    ggboxplot(top6_t_with_group, x = "conditions", y = "PER1",
              title = "PER1", ylab = "Expression",
              add = "jitter",                               # Add jittered points
              add.params = list(size = 0.1, jitter = 0.2),  # Point size and the amount of jittering
              label = "Sample",                # column containing point labels
              label.select = list(top.up = 2, top.down = 2),# Select some labels to display
              font.label = list(size = 9, face = "italic"), # label font
              repel = TRUE,                                 # Avoid label text overplotting
              fill = "conditions", palette = "Paired") +
      stat_compare_means(comparisons = my_comparisons)

    修改统计检验方法

    my_comparisons <- list(c("trt", "untrt"))
    ggboxplot(top6_t_with_group_log, x = "conditions", y = "PER1",
              title = "PER1", ylab = "Expression",
              add = "jitter",                               # Add jittered points
              add.params = list(size = 0.1, jitter = 0.2),  # Point size and the amount of jittering
              label = "Sample",                # column containing point labels
              label.select = list(top.up = 2, top.down = 2),# Select some labels to display
              font.label = list(size = 9, face = "italic"), # label font
              repel = TRUE,                                 # Avoid label text overplotting
              fill = "conditions", palette = "Paired") +
      stat_compare_means(comparisons = my_comparisons, method = "t.test", paired = T)

    小提琴图

    ggviolin(top6_t_with_group, x = "conditions", y = c("KCTD12","MAOA"),
              ylab = "Expression", merge="flip",
              color = "conditions", palette = "jco", 
              add = "boxplot"
              # add = "median_iqr"
             )

    点带图(适合数据比较多时)

    ggstripchart(top6_t_with_group, x = "conditions", y = c("KCTD12","MAOA"),
              ylab = "Expression", combine=T,
              color = "conditions", palette = "jco", 
              size = 0.1, jitter = 0.2,
              add.params = list(color = "gray"),
              # add = "boxplot"
              add = "median_iqr")

    通路内基因的比较

    pathway <- read.table("h.all.v6.2.symbols.gmt.forGO", sep = "\t", row.names = NULL, header = T)
    head(pathway)
    
    ##                                ont    gene
    ## 1 HALLMARK_TNFA_SIGNALING_VIA_NFKB    JUNB
    ## 2 HALLMARK_TNFA_SIGNALING_VIA_NFKB   CXCL2
    ## 3 HALLMARK_TNFA_SIGNALING_VIA_NFKB    ATF3
    ## 4 HALLMARK_TNFA_SIGNALING_VIA_NFKB  NFKBIA
    ## 5 HALLMARK_TNFA_SIGNALING_VIA_NFKB TNFAIP3
    ## 6 HALLMARK_TNFA_SIGNALING_VIA_NFKB   PTGS2

    通路提取

    # HALLMARK_HYPOXIA, HALLMARK_DNA_REPAIR, HALLMARK_P53_PATHWAY
    
    target_pathway <- pathway[pathway$ont %in% c("HALLMARK_HYPOXIA", "HALLMARK_DNA_REPAIR", "HALLMARK_P53_PATHWAY"), ]
    
    target_pathway <- droplevels.data.frame(target_pathway)
    
    summary(target_pathway)
    
    ##      ont                gene          
    ##  Length:550         Length:550        
    ##  Class :character   Class :character  
    ##  Mode  :character   Mode  :character
    
    head(target_pathway)
    
    ##                  ont  gene
    ## 201 HALLMARK_HYPOXIA  PGK1
    ## 202 HALLMARK_HYPOXIA  PDK1
    ## 203 HALLMARK_HYPOXIA  GBE1
    ## 204 HALLMARK_HYPOXIA  PFKL
    ## 205 HALLMARK_HYPOXIA ALDOA
    ## 206 HALLMARK_HYPOXIA  ENO2

    表达矩阵提取

    expr_with_gene <- expr
    expr_with_gene$gene <- rownames(expr_with_gene)
    target_pathway_with_expr <- left_join(target_pathway, expr_with_gene)
    summary(target_pathway_with_expr)
    
    ##      ont                gene            untrt_N61311      untrt_N052611      untrt_N080611     
    ##  Length:550         Length:550         Min.   :     0.0   Min.   :     0.0   Min.   :     0.0  
    ##  Class :character   Class :character   1st Qu.:   254.2   1st Qu.:   240.8   1st Qu.:   235.0  
    ##  Mode  :character   Mode  :character   Median :   781.3   Median :   784.1   Median :   734.9  
    ##                                        Mean   :  2528.6   Mean   :  2895.1   Mean   :  2549.2  
    ##                                        3rd Qu.:  1852.4   3rd Qu.:  1727.2   3rd Qu.:  1932.4  
    ##                                        Max.   :212953.1   Max.   :360796.2   Max.   :258977.3  
    ##                                        NA's   :36         NA's   :36         NA's   :36        
    ##  untrt_N061011        trt_N61311        trt_N052611        trt_N080611        trt_N061011      
    ##  Min.   :     0.0   Min.   :     0.0   Min.   :     0.0   Min.   :     0.0   Min.   :     0.0  
    ##  1st Qu.:   237.9   1st Qu.:   248.2   1st Qu.:   211.0   1st Qu.:   250.6   1st Qu.:   227.9  
    ##  Median :   764.2   Median :   766.6   Median :   723.2   Median :   739.3   Median :   746.0  
    ##  Mean   :  2864.9   Mean   :  2531.8   Mean   :  2783.3   Mean   :  2840.3   Mean   :  3043.6  
    ##  3rd Qu.:  1870.0   3rd Qu.:  1872.4   3rd Qu.:  1832.2   3rd Qu.:  1825.8   3rd Qu.:  1925.1  
    ##  Max.   :408573.1   Max.   :210002.2   Max.   :316009.1   Max.   :225547.4   Max.   :393843.7  
    ##  NA's   :36         NA's   :36         NA's   :36         NA's   :36         NA's   :36

    移除通路中未检测到表达的基因

    target_pathway_with_expr <- na.omit(target_pathway_with_expr)
    summary(target_pathway_with_expr)
    
    ##      ont                gene            untrt_N61311      untrt_N052611      untrt_N080611     
    ##  Length:514         Length:514         Min.   :     0.0   Min.   :     0.0   Min.   :     0.0  
    ##  Class :character   Class :character   1st Qu.:   254.2   1st Qu.:   240.8   1st Qu.:   235.0  
    ##  Mode  :character   Mode  :character   Median :   781.3   Median :   784.1   Median :   734.9  
    ##                                        Mean   :  2528.6   Mean   :  2895.1   Mean   :  2549.2  
    ##                                        3rd Qu.:  1852.4   3rd Qu.:  1727.2   3rd Qu.:  1932.4  
    ##                                        Max.   :212953.1   Max.   :360796.2   Max.   :258977.3  
    ##  untrt_N061011        trt_N61311        trt_N052611        trt_N080611        trt_N061011      
    ##  Min.   :     0.0   Min.   :     0.0   Min.   :     0.0   Min.   :     0.0   Min.   :     0.0  
    ##  1st Qu.:   237.9   1st Qu.:   248.2   1st Qu.:   211.0   1st Qu.:   250.6   1st Qu.:   227.9  
    ##  Median :   764.2   Median :   766.6   Median :   723.2   Median :   739.3   Median :   746.0  
    ##  Mean   :  2864.9   Mean   :  2531.8   Mean   :  2783.3   Mean   :  2840.3   Mean   :  3043.6  
    ##  3rd Qu.:  1870.0   3rd Qu.:  1872.4   3rd Qu.:  1832.2   3rd Qu.:  1825.8   3rd Qu.:  1925.1  
    ##  Max.   :408573.1   Max.   :210002.2   Max.   :316009.1   Max.   :225547.4   Max.   :393843.7
    
    head(target_pathway_with_expr)
    
    ##                ont  gene untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611
    ## 1 HALLMARK_HYPOXIA  PGK1     7567.398     7893.2150     6254.5945      5529.122  7595.0408   6969.6128
    ## 2 HALLMARK_HYPOXIA  PDK1     1009.850     1042.4868      735.9359       673.208   419.6273    365.0062
    ## 3 HALLMARK_HYPOXIA  GBE1     3859.557     1494.4120     3803.5627      3295.191  4769.5464   2359.7150
    ## 4 HALLMARK_HYPOXIA  PFKL     3581.499     3018.0675     2789.4430      3084.570  2867.2464   2599.5095
    ## 5 HALLMARK_HYPOXIA ALDOA    19139.085    19587.3216    18089.5116     15519.899 16388.1123  13949.5659
    ## 6 HALLMARK_HYPOXIA  ENO2     1964.796      979.5255     1041.4660      1288.837  1303.5671    766.9436
    ##   trt_N080611 trt_N061011
    ## 1   15011.823   6076.4392
    ## 2    1056.622    383.6163
    ## 3    4759.809   4296.5471
    ## 4    4399.403   3090.6701
    ## 5   22630.701  14374.3437
    ## 6    1473.336    892.4621

    转换宽矩阵为长矩阵

    target_pathway_with_expr_long <- target_pathway_with_expr %>% gather(key = "Sample", value = "Expr", -ont, -gene)
    
    head(target_pathway_with_expr_long)
    
    ##                ont  gene       Sample      Expr
    ## 1 HALLMARK_HYPOXIA  PGK1 untrt_N61311  7567.398
    ## 2 HALLMARK_HYPOXIA  PDK1 untrt_N61311  1009.850
    ## 3 HALLMARK_HYPOXIA  GBE1 untrt_N61311  3859.557
    ## 4 HALLMARK_HYPOXIA  PFKL untrt_N61311  3581.499
    ## 5 HALLMARK_HYPOXIA ALDOA untrt_N61311 19139.085
    ## 6 HALLMARK_HYPOXIA  ENO2 untrt_N61311  1964.796

    合并样本信息

    metadata$Sample <- rownames(metadata)
    target_pathway_with_expr_conditions_long <- target_pathway_with_expr_long %>% left_join(metadata, by = "Sample")
    
    head(target_pathway_with_expr_conditions_long)
    
    ##                ont  gene       Sample      Expr conditions individual
    ## 1 HALLMARK_HYPOXIA  PGK1 untrt_N61311  7567.398      untrt     N61311
    ## 2 HALLMARK_HYPOXIA  PDK1 untrt_N61311  1009.850      untrt     N61311
    ## 3 HALLMARK_HYPOXIA  GBE1 untrt_N61311  3859.557      untrt     N61311
    ## 4 HALLMARK_HYPOXIA  PFKL untrt_N61311  3581.499      untrt     N61311
    ## 5 HALLMARK_HYPOXIA ALDOA untrt_N61311 19139.085      untrt     N61311
    ## 6 HALLMARK_HYPOXIA  ENO2 untrt_N61311  1964.796      untrt     N61311

    再次画点带图 (也不太好看)

    ggstripchart(target_pathway_with_expr_conditions_long, x = "conditions", y = "Expr",
              ylab = "Expression", combine=F,
              color = "conditions", palette = "jco", 
              size = 0.1, jitter = 0.2,
              facet.by = "ont",
              add.params = list(color = "gray"),
              # add = "boxplot"
              add = "median_iqr")

    表达数据log转换(减小高表达基因的影响)

    target_pathway_with_expr_conditions_long$logExpr <- log2(target_pathway_with_expr_conditions_long$Expr + 1)
    ggstripchart(target_pathway_with_expr_conditions_long, x = "conditions", y = "logExpr",
              ylab = "Expression", combine=F,
              color = "conditions", palette = "jco", 
              size = 0.1, jitter = 0.2,
              facet.by = "ont",
              add.params = list(color = "gray"),
              # add = "boxplot"
              add = "median_iqr")

    head(target_pathway_with_expr_conditions_long)
    
    ##                ont  gene       Sample      Expr conditions individual   logExpr
    ## 1 HALLMARK_HYPOXIA  PGK1 untrt_N61311  7567.398      untrt     N61311 12.885772
    ## 2 HALLMARK_HYPOXIA  PDK1 untrt_N61311  1009.850      untrt     N61311  9.981353
    ## 3 HALLMARK_HYPOXIA  GBE1 untrt_N61311  3859.557      untrt     N61311 11.914593
    ## 4 HALLMARK_HYPOXIA  PFKL untrt_N61311  3581.499      untrt     N61311 11.806750
    ## 5 HALLMARK_HYPOXIA ALDOA untrt_N61311 19139.085      untrt     N61311 14.224310
    ## 6 HALLMARK_HYPOXIA  ENO2 untrt_N61311  1964.796      untrt     N61311 10.940898

    提取P53通路进行后续分析

    HALLMARK_P53_PATHWAY = target_pathway_with_expr_conditions_long[target_pathway_with_expr_conditions_long$ont=="HALLMARK_P53_PATHWAY",]
    ggstripchart(HALLMARK_P53_PATHWAY, x = "conditions", y = "logExpr",
                 title = "HALLMARK_P53_PATHWAY",
              ylab = "Expression",
              color = "conditions", palette = "jco", 
              size = 0.1, jitter = 0.2,
              add.params = list(color = "gray"),
              # add = "boxplot"
              add = "median_iqr")

    ggdotplot(HALLMARK_P53_PATHWAY, x = "conditions", y = "logExpr",
                 title = "HALLMARK_P53_PATHWAY",
              ylab = "Expression",
              color = "conditions", palette = "jco", 
              fill = "white",
              binwidth = 0.1,
              add.params = list(size = 0.9),
              # add = "boxplot"
              add = "median_iqr")

    密度图

    ggdensity(HALLMARK_P53_PATHWAY,
           x="logExpr",
           y = "..density..",
           combine = TRUE,                  # Combine the 3 plots
           xlab = "Expression", 
           add = "median",                  # Add median line. 
           rug = TRUE,                      # Add marginal rug
           color = "conditions", 
           fill = "conditions",
           palette = "jco"
    )

    head(top6_t_with_group)
    
    ##          Sample conditions individual    KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## 1   trt_N052611        trt    N052611  633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    ## 2   trt_N061011        trt    N061011  641.4958 3778.1735 1501.515 2194.58930 1333.9121  95.33916
    ## 3   trt_N080611        trt    N080611  979.7758 4629.6653 1464.598 1374.90745 1120.0065  86.82929
    ## 4    trt_N61311        trt     N61311  936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## 5 untrt_N052611      untrt    N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## 6 untrt_N061011      untrt    N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982
    
    top6_t_with_group_long = top6_t_with_group %>% gather(key = "Gene", value = "Expr", -conditions, -Sample, -individual)
    top6_t_with_group_long$conditions <- as.factor(top6_t_with_group_long$conditions)
    head(top6_t_with_group_long)
    
    ##          Sample conditions individual   Gene      Expr
    ## 1   trt_N052611        trt    N052611 KCTD12  633.4462
    ## 2   trt_N061011        trt    N061011 KCTD12  641.4958
    ## 3   trt_N080611        trt    N080611 KCTD12  979.7758
    ## 4    trt_N61311        trt     N61311 KCTD12  936.6948
    ## 5 untrt_N052611      untrt    N052611 KCTD12 3978.0401
    ## 6 untrt_N061011      untrt    N061011 KCTD12 4792.3417

    ggstatsplot绘图和统计分析

    箱线图

    library(ggstatsplot)
    ggstatsplot::ggwithinstats(
      data = top6_t_with_group,
      x = conditions,
      y = PER1,
      sort = "descending", # ordering groups along the x-axis based on
      sort.fun = median, # values of `y` variable
      pairwise.comparisons = TRUE,
      pairwise.display = "s",
      pairwise.annotation = "p",
      title = "PER1",
      caption = "PER1 compare",
      ggstatsplot.layer = FALSE,
      messages = FALSE
    )

    head(target_pathway_with_expr_conditions_long)
    
    ##                ont  gene       Sample      Expr conditions individual   logExpr
    ## 1 HALLMARK_HYPOXIA  PGK1 untrt_N61311  7567.398      untrt     N61311 12.885772
    ## 2 HALLMARK_HYPOXIA  PDK1 untrt_N61311  1009.850      untrt     N61311  9.981353
    ## 3 HALLMARK_HYPOXIA  GBE1 untrt_N61311  3859.557      untrt     N61311 11.914593
    ## 4 HALLMARK_HYPOXIA  PFKL untrt_N61311  3581.499      untrt     N61311 11.806750
    ## 5 HALLMARK_HYPOXIA ALDOA untrt_N61311 19139.085      untrt     N61311 14.224310
    ## 6 HALLMARK_HYPOXIA  ENO2 untrt_N61311  1964.796      untrt     N61311 10.940898
    
    head(HALLMARK_P53_PATHWAY)
    
    ##                      ont   gene       Sample       Expr conditions individual   logExpr
    ## 322 HALLMARK_P53_PATHWAY CDKN1A untrt_N61311 14406.1316      untrt     N61311 13.814496
    ## 323 HALLMARK_P53_PATHWAY   BTG2 untrt_N61311  1163.7198      untrt     N61311 10.185767
    ## 324 HALLMARK_P53_PATHWAY   MDM2 untrt_N61311  3614.5324      untrt     N61311 11.819992
    ## 325 HALLMARK_P53_PATHWAY  CCNG1 untrt_N61311  5749.1367      untrt     N61311 12.489381
    ## 326 HALLMARK_P53_PATHWAY    FAS untrt_N61311  1029.4007      untrt     N61311 10.008990
    ## 327 HALLMARK_P53_PATHWAY   TOB1 untrt_N61311   829.7721      untrt     N61311  9.698309
    
    library(ggstatsplot)
    ggstatsplot::ggwithinstats(
      data = HALLMARK_P53_PATHWAY,
      x = conditions,
      y = logExpr,
      sort = "descending", # ordering groups along the x-axis based on
      sort.fun = median, # values of `y` variable
      pairwise.comparisons = TRUE,
      pairwise.display = "s",
      pairwise.annotation = "p",
      title = "HALLMARK_P53_PATHWAY",
      path.point = F,
      ggtheme = ggthemes::theme_fivethirtyeight(),
      ggstatsplot.layer = FALSE,
      messages = FALSE
    )

    library(ggstatsplot)
    
    ggstatsplot::grouped_ggwithinstats(
      data = target_pathway_with_expr_conditions_long,
      x = conditions,
      y = logExpr,
      grouping.var = ont,
      xlab = "Condition",
      ylab = "CEMIP expression",
      path.point = F,
      palette = "Set1", # R color brewer
      ggstatsplot.layer = FALSE,
      messages = FALSE
    )

    ggstatsplot::grouped_ggwithinstats(data = top6_t_with_group_long, x = conditions, y = Expr, xlab = "Condition", ylab = "CEMIP expression", 
        grouping.var = Gene, ggstatsplot.layer = FALSE, messages = FALSE)

    head(expr)
    
    ##        untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011
    ## FN1       245667.66      427435.1     221687.51      371144.2  240187.24   450103.21   280226.19   376518.23
    ## DCN       212953.14      360796.2     258977.30      408573.1  210002.18   316009.14   225547.39   393843.74
    ## CEMIP      40996.34      137783.1      53813.92       91066.8   62301.12   223111.85   212724.84   157919.47
    ## CCDC80    137229.15      232772.2      86258.13      212237.3  136730.76   226070.89   124634.56   236237.81
    ## IGFBP5     77812.65      288609.2     210628.87      168067.4   96021.74   217439.21   162677.38   168387.36
    ## COL1A1    146450.41      127367.3     152281.50      140861.1   62358.64    53800.47    69160.97    51044.06

    散点图

    ggstatsplot::ggscatterstats(data = expr, x = untrt_N61311, y = untrt_N052611, xlab = "untrt_N61311", ylab = "untrt_N052611", 
        title = "Sample correlation", messages = FALSE)

    ggstatsplot::ggscatterstats(
      data = log2(expr+1),
      x = untrt_N61311,
      y = trt_N61311,
      xlab = "untrt_N61311",
      ylab = "trt_N61311",
      title = "Sample correlation",
      #marginal.type = "density", # type of marginal distribution to be displayed
      messages = FALSE
    )

    相关性图

    基因共表达

    gene_cor <- cor(t(top6))
    
    head(gene_cor)
    
    ##             KCTD12       MAOA    ARHGEF2    SPARCL1       PER1     SLC6A9
    ## KCTD12   1.0000000 -0.9792624  0.9799663 -0.9619660 -0.9529732  0.9772852
    ## MAOA    -0.9792624  1.0000000 -0.9897706  0.9406196  0.9614877 -0.9871408
    ## ARHGEF2  0.9799663 -0.9897706  1.0000000 -0.9628750 -0.9660416  0.9791535
    ## SPARCL1 -0.9619660  0.9406196 -0.9628750  1.0000000  0.9853858 -0.9510121
    ## PER1    -0.9529732  0.9614877 -0.9660416  0.9853858  1.0000000 -0.9615253
    ## SLC6A9   0.9772852 -0.9871408  0.9791535 -0.9510121 -0.9615253  1.0000000
    
    pheatmap(gene_cor)

    Hmisc::rcorr(as.matrix(top6_t))
    
    ##         KCTD12  MAOA ARHGEF2 SPARCL1  PER1 SLC6A9
    ## KCTD12    1.00 -0.98    0.98   -0.96 -0.95   0.98
    ## MAOA     -0.98  1.00   -0.99    0.94  0.96  -0.99
    ## ARHGEF2   0.98 -0.99    1.00   -0.96 -0.97   0.98
    ## SPARCL1  -0.96  0.94   -0.96    1.00  0.99  -0.95
    ## PER1     -0.95  0.96   -0.97    0.99  1.00  -0.96
    ## SLC6A9    0.98 -0.99    0.98   -0.95 -0.96   1.00
    ## 
    ## n= 8 
    ## 
    ## 
    ## P
    ##         KCTD12 MAOA  ARHGEF2 SPARCL1 PER1  SLC6A9
    ## KCTD12         0e+00 0e+00   1e-04   3e-04 0e+00 
    ## MAOA    0e+00        0e+00   5e-04   1e-04 0e+00 
    ## ARHGEF2 0e+00  0e+00         1e-04   0e+00 0e+00 
    ## SPARCL1 1e-04  5e-04 1e-04           0e+00 3e-04 
    ## PER1    3e-04  1e-04 0e+00   0e+00         1e-04 
    ## SLC6A9  0e+00  0e+00 0e+00   3e-04   1e-04
    
    head(top6_t)
    
    ##                  KCTD12      MAOA  ARHGEF2    SPARCL1      PER1    SLC6A9
    ## untrt_N61311  4700.7937  438.5445 3025.623   58.15705  170.6164 360.66314
    ## untrt_N052611 3978.0401  452.9934 3105.783  102.58269  156.3692 413.87971
    ## untrt_N080611 4416.1517  516.6303 3094.513   80.00997  194.9750 365.47650
    ## untrt_N061011 4792.3417  258.7328 2909.990   82.59042  123.4769 443.71982
    ## trt_N61311     936.6948 4628.0086 1395.398 2220.50867 1728.3812  63.90538
    ## trt_N052611    633.4462 4429.7201 1441.992 1750.98786 1230.2575  56.89620
    
    ggstatsplot::ggcorrmat(
      data = top6_t,
      corr.method = "robust", # correlation method
      sig.level = 0.0001, # threshold of significance
      p.adjust.method = "holm", # p-value adjustment method for multiple comparisons
      # cor.vars = c(sleep_rem, awake:bodywt), # a range of variables can be selected
      # cor.vars.names = c(
      #   "REM sleep", # variable names
      #   "time awake",
      #   "brain weight",
      #   "body weight"
      # ),
      matrix.type = "upper", # type of visualization matrix
      palette = "Set2",
      #colors = c("#B2182B", "white", "#4D4D4D"),
      title = "Correlalogram for mammals sleep dataset",
      subtitle = "sleep units: hours; weight units: kilograms"
    )

    样品相关性

    top100 <- head(expr,100)
    ggstatsplot::ggcorrmat(
      data = top100,
      corr.method = "robust", # correlation method
      sig.level = 0.05, # threshold of significance
      p.adjust.method = "holm", # p-value adjustment method for multiple comparisons
      # cor.vars = c(sleep_rem, awake:bodywt), # a range of variables can be selected
      # cor.vars.names = c(
      #   "REM sleep", # variable names
      #   "time awake",
      #   "brain weight",
      #   "body weight"
      # ),
      matrix.type = "upper", # type of visualization matrix
      palette = "Set2"
      #colors = c("#B2182B", "white", "#4D4D4D"),
    
    )

    节选自:这个为生信学习和生信作图打造的开源R教程真香!!!

    大部分图都可在 高颜值免费在线绘图工具升级版来了~~~制作了

    展开全文
  • 作者:弗拉德公众号:fulade_me数字是一种用来表示数的书写符号:中文数字写作三十七、卅七罗马数字写作...我们平时最常见的就是整数,下面就先来看看Python是如何管理整数的。整数在Python中,可对整数执行加+...

    作者:弗拉德

    公众号:fulade_me

    数字是一种用来表示数的书写符号:

    中文数字写作三十七、卅七

    罗马数字写作XXXVII

    阿拉伯数字二进制写作100101

    文章首发地址

    数字

    在编程中,经常使用数字来记录游戏得分、表示可视化数据、存储Web应用信息等。Python 根据数字的用法以不同的方式处理它们。我们平时最常见的就是整数,下面就先来看看Python是如何管理整数的。

    整数

    在Python中,可对整数执行加+减-乘*除/运算。

    >>> 2 + 3

    5

    >>> 3 - 2

    1

    >>> 2 * 3

    6

    >>> 3 / 2

    1.5

    在终端(命令行)会话中,Python直接返回运算结果。Python使用两个乘号表示乘方运算:

    >>> 3 ** 2

    9

    >>> 3 ** 3

    27

    >>> 10 ** 6

    1000000

    Python还支持运算次序,因此你可在同一个表达式中使用多种运算。当然我们也可以使用括号来修改运算次序,让Python按你指定的次序执行运算,如下所示:

    >>> 2 + 3*4

    14

    >>> (2 + 3) * 4

    20

    浮点数

    Python将带小数点的数字都称为浮点数。大多数编程语言都使用了这个术语,它指出了这样 一个事实:小数点可出现在数字的任何位置。

    每种编程语言都须细心设计,以妥善地处理浮点数, 确保不管小数点出现在什么位置,数字的行为都是正常的。

    从很大程度上说,使用浮点数时都无需考虑其行为。你只需输入要使用的数字,Python通常都会按你期望的方式处理它们:

    >>> 0.1 + 0.1

    0.2

    >>> 0.2 + 0.2 9 0.4

    >>>2 * 0.1

    0.2

    >>>2 * 0.2

    0.4

    但需要注意的是,结果包含的小数位数可能是不确定的:

    >>> 0.2 + 0.1

    0.30000000000000004

    >>> 3 * 0.1

    0.30000000000000004

    所有语言都存在这种问题,没有什么可担心的。Python会尽力找到一种方式,以尽可能精确地表示结果,但鉴于计算机内部表示数字的方式,这在有些情况下很难。就现在而言,暂时忽略多余的小数位数即可。

    使用函数str()避免类型错误

    你经常需要在消息中使用变量的值。例如,假设你要祝别人生日快乐,可能会编写类似于下面的代码(将下面代码保存为birthday.py):

    age = 23

    message = "Happy " + age + "rd Birthday!"

    print(message)

    你可能认为,上述代码会打印一条简单的生日祝福语:Happy 23rd birthday!。但如果你运行这些代码,将发现它们会引发错误:

    Traceback (most recent call last):

    File "birthday.py", line 2, in

    message = "Happy " + age + "rd Birthday!"

    TypeError: Can't convert 'int' object to str implicitly

    这是一个类型错误,意味着Python无法识别你使用的信息。在这个示例中,Python发现你使 用了一个值为整数(int)的变量,但它不知道该如何解读这个值(见)。Python知道,这个变 量表示的可能是数值23,也可能是字符2和3。像上面这样在字符串中使用整数时,需要显式地指 出你希望Python将这个整数用作字符串。为此,可调用函数str(),它让Python将非字符串值表示 为字符串:

    age = 23

    message = "Happy " + str(age) + "rd Birthday!"

    print(message)

    这样,Python就知道你要将数值23转换为字符串,进而在生日祝福消息中显示字符2和3。经 过上述处理后,将显示你期望的消息,而不会引发错误:

    Happy 23rd Birthday!

    大多数情况下,在Python中使用数字都非常简单。如果结果出乎意料,请检查Python是否按 你期望的方式将数字解读为了数值或字符串。

    小作业

    6-1 编写 4 个表达式,它们分别使用加法、减法、乘法和除法运算,但结果都是数字 8。

    为使用 print 语句来显示结果,务必将这些表达式用括号括起来,也就是说,你应该编写4行类似于下面的代码:

    print(5 + 3)

    输出应为 4 行,其中每行都只包含数字8。命名为eight.py

    6-2 将你最喜欢的数字存储在一个变量中,再使用这个变量创建一条消息,指出你最喜欢的数字,然后将这条消息打印出来。命名为number.py

    想查看作业答案可以去我的Githu仓库

    展开全文
  • 据国际信息技术咨询企业国际数据公司(IDC)的报告,2020年全球数据存储量将达到44ZB(1021),到2030年将达到2500ZB。数据如此庞大,管理和理解变得愈发...您可以通过多种方式呈现数据,而表格是最常见的方法之一,以...
    776acc474d9b8b2b897db186d458096b.png

    点击上方蓝字,关注数据轩

    近些年来,数据规模指数爆炸增长。据国际信息技术咨询企业国际数据公司(IDC)的报告,2020年全球数据存储量将达到44ZB(1021),到2030年将达到2500ZB。数据如此庞大,管理和理解变得愈发困难。任何人都不可能通过逐行浏览数据来了解不同的模式和得出观察结果,如何处理海量的复杂数据的能力变得尤其重要。

    您可以通过多种方式呈现数据,而表格是最常见的方法之一,以下是表格呈现的数据。

    8429180442235efbb4c63fbc78ea8997.png

    以上表格的确可以准确显示所需信息,但是我们很难了解趋势和数据所反映的情况,下面是可视化呈现的数据

    b891e9292c669f3434722655f719b66e.png

    通过可视化图形,观察者可迅速地从数据中发现它们的不同模式和规律。

    根据美国人口普查局发布的2017-2018年《美国时间使用调查》显示,当你观察一天中睡眠不足的百分比时,你会得到一个类似的上升趋势。

    0e78aad0e2e4e95cad495ecdedbf4ae1.gif

    折线图可以使我们直观清晰的看到随着年纪越大,人们失眠的概率越大,睡眠时间更少。

    时空数据是同时具有时间和空间维度的数据,时空数据类型多样,结构复杂并且数据量极大,数据可视化专家Max Galka为了让大家更直观的感受到国际贸易流动的情况和趋势,用Blueshif工具对时空数据进行有效整合,创造了这个世界地图,通过交互可视化的方式展现国际贸易流动的情况和趋势,地图上的彩色原点代表不同的类别,左下角的色卡对不同的颜色做出标注,比如食物、木材、机械等。交互可视化使得抽象的贸易概念变得更具触觉,同时视觉上也更容易吸收信息。

    94459a8721f94d08c7807e7be5b52f93.gif

    同样的数据给人的感觉可能会千差万别:或冰冷枯燥,让人望而生畏、百思不解其意;或生动有趣,让人一目了然、豁然开朗。为了达到后一种效果,我们需要采用一种特别的方式来展示数据,来解释、分析和应用它。这就是数据可视化技术。

    数据可视化可以利用人眼的感知能力对数据进行交互的可视化表达以增强认知的技术,它将不可见或难以直接显示的数据转化为可感知的图形,符号,颜色等,增强数据识别效率,传递有效信息,让数据变得栩栩如生,易于理解。

    那是否有一款简单易上手的可视化工具呢?

    洞见是一款采用分布式架构的时空大数据可视化场景编辑器,可以对包含时空属性的各类数据进行可视化展示,将隐藏在数据背后的价值从时间、空间的维度,更直观、实时、多模式的展现出来,它可以通过柱状图、折线图、雷达图和三维地图等多种组件将数据文件展现出来,洞见除了具备极其丰富的图表,还能够满足多样的数据可视化场景诉求,接下来将依次介绍常用图表类型,分析其适用场景和优势,从而帮助大家通过图表更加直观的传递所表达的信息。

    常见的图表

    柱状图

    010f785d5bec04626112f9c2f7515753.png

    柱状图展示多个分类的数据变化和同类别各变量之间的比较情况。

    适用:当您需要比较某个时间范围内的多个变量或者单个变量在时间序列中的情况时,使用柱状图最为合适。

    优势:利用图形高度反应数据的差异,效果直观。

    折线图

    889662edcaeed9ab7b8706d20bcd15e7.png

    折线图可显示一个或多个变量随时间或有序类别的波动情况的趋势变化。适用:主要用于趋势分析,属性列类别较多时尤其适用。                        

    优势:可以清晰地反映和表达数据的变化趋势。

    饼图

    ae47c4c52116649d7ea4a13564a1e038.png

    饼图采用了饼干的隐喻,用环状方式呈现各分量在整体中的比例。

    适用:希望以百分比形式了解各部分在整体中的情况时。多适用于用户群体倾向和渠道来源等场景。

    优势:明确直观地显示比例情况。

    散点图

    ff4ac598b879151a4ebaa8d90187a6a0.png

    散点图是表达二维数据的标准方法,在散点图中,所有数据以点的形式出现在坐标系中,每个点所对应的横纵坐标,即代表该数据在坐标轴所表示维度上的属性值大小。

    适用:希望了解两个变量之间的相关性时,多用来观察各个数据点之间的关系以及分析变量之间的联系。

    优势:直观的看出数据的分布情况以及特殊的离群值。

    雷达图

    3a7f4c8529d3b7d9a4a9423c2a347464.png

    雷达图将多个分类的数据量映射到坐标轴上,来表现一个整体中的各项个体比率的情况。

    适用:主要用于各项指标整体情况分析,了解同类别的不同属性的综合情况,以及比较不同类别的相同属性差异。

    优势:直观反应整体中各组数据之间的占比差异。

    矩形树图

    f850f21355ed1a5e2054a7fcbf48af13.png

    矩形树图用矩形面积表示数据的大小。各个小矩形的面积越大,表示占比越大。

    适用:当您需要比较某个时间范围内的多个变量或者单个变量在时间序列中的情况时,使用柱状图最为合适。

    优势:虽然和饼图、柱状图一样,都可以进行占比分析,但是对于类目数据较多时,使用矩形树图更能清晰地比较数据的占比关系。

    桑基图

    7308c82a61f09102f7a847b428b369f3.png

    桑基图是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,起始流量总和始终与结束流量总和保持平衡。

    适用:不仅仅是流向的数据,只要是具有层级的分类数据,都可以用桑基图来展现。

    优势:桑基图由于其独特的特征,能够很好的反映组间变量的相互作用关系。

    时空数据可视化表达

    二维地图

    306f6fc6608a45a0aad762b2d8507e04.png

    在二维地图上叠加可以描述时间变化的要素,来描述时空属性数据与空间范围内的变化特征。这些用于表达时空属性数据的要素可以通过不同的符号、注记、标绘符号、统计图表等多种方式来表达,也可以将多个时间的专题地图同时展示进行对比。

    适用:适用于查看某地域上的空间布局或数据分布。

    优势:当你的数据量非常大,用地图和点的组合方式,既能不丢失数据细节,也能从整体上看出数据的分布规律。

    三维地图

    a061b12bbf75e501800490d8ad2fabd2.png

    三维地图将时空数据在动态变化的地图或三维场景中呈现出来,可以直观生动地表示各种空间信息的变化过程。按照一定比例对现实世界或其中一部分的一个或多个方面的三维、抽象的展示出来,运用符号、颜色、文字注记等描绘显示地球表面的自然地理、行政区域、社会经济状况的图形。

    适用:三维地图提供了多层次的图形化展示,并具备多方面的控制能力,配合上一些个性化交互,可以良好地满足业务使用、数据管理、开发运维不同应用场景的图形查询和辅助分析需求。

    优势:通过对物体进行全方位的监控,构建基于现实的3D虚拟现实效果,让数据展现更为直观和容易理解。解决了平面地图对具有不同空间高程对象的运动轨迹难以表达的关键问题。

    三维模型

    e6fab7e2e91e4b7b1472c72895b27e55.png

    三维模型结合数据实时渲染技术、空间数据可视化技术,实现数据实时图形可视化、场景化以及实时交互,通过三维虚拟现实让使用者更加方便地进行数据的理解和空间知识的呈现。

    适用:应用于指挥监控、视景仿真及三维交互等众多领域。

    优势:多维度、多层次的数据展现;更直观的数据信息展示;更易信息传达的展现方式。

    三维可视化的发展,缩短了现实世界和计算机虚拟世界的差距,并且拓宽了人们的视野,掌握和了解可视化工具后,面对数据时就不会束手无策,创作出你想要的数据图也会更加容易。各种尺寸和形式的图表将数据表达的非常清晰,简洁,可以更好的帮助我们理解数据背后的意义。

    技术的进步,让我们能够采集到比以前多得多的信息,数据规模不断增长,大数据时代下,数据的内容和类型也比以前要丰富得多,在数据来源多样化的情况下,数据的可靠性和实用性,直接影响到统计分析是否得到正确的结论,如果数据不通,标准不一致,质量不高,就无法做分析,有效的数据管理是一项重要任务,保证数据质量,数据治理是必须的手段。

    洞见是集时空数据治理、整合、分析和可视化展示为一身的数字孪生平台,依托数字孪生技术,利用城市信息模型和叠加在模型上的多元数据集合,打造精准、动态、可视化的数字孪生城市大脑。

    e8bd94114db02785df55dad9f16b544c.png

    人的视觉感知是最主要的信息界面,它输入了人从外界获取的70%信息。俗语说“一图胜千言”,通过洞见将数据以可视的方式呈现给用户,将直接提升对信息认知的效率,并引导用户从可视化结果分析和推理出有效信息。这种直观的信息感知机制,极大地降低了数据理解的复杂度,突破了常规统计分析方法的局限性。

    24dfda40009d53b879cbedac6474474a.png

    格 网 改 变 生 活

    电 话:0371-55019103

    邮 箱:jx@jx-lab.com

    地址:郑州市中原区陇海西路338号升龙金中环B座36层

    展开全文
  • 作为一名IT人,即使有结构化的思维方式,但通常也缺少结构化的表达方式,这里分享一个非常好的实用技巧,教你怎么快速提升表达和组织能力,让领导眼前一亮,让工作更好的开展。 【常见的表达误区】 首先,想象一个...

    作为一名IT人,即使有结构化的思维方式,但通常也缺少结构化的表达方式,这里分享一个非常好的实用技巧,教你怎么快速提升表达和组织能力,让领导眼前一亮,让工作更好的开展。

    【常见的表达误区】

    首先,想象一个场景,在一个会议上,我来向你汇报某个新产品的进展情况,我是这样说的:

    “这个产品的搜索指数是排在前几名的,尤其是前期的广告费用分配很合理,官网的流量也非常大。目前市面上的激活码特别抢手,上线活动的运营方案准备得也非常充分。总之,我认为这个产品将非常成功,现在媒体报道也非常多,我建议加大研发力度。而且经过对测试用户的测试,用户留存率高。另外,这款产品的代言人是‘欧巴’,传播效率会非常好。”

    听完这个汇报,你有什么感受?乱吗?没错,乱就对了。而且不要急着嘲笑这个汇报的人,你仔细想一想,这种表达方式是不是在我们日常工作中经常会碰到?

    总有人拉着你,说呀说,说呀说,好像每条信息都对,但他说了半天,你就是不知道他到底想说什么。原因其实挺简单的,他们的表达没有结构。

    那下面,我就基于这个场景教你如何运用结构化思维来清晰地表达你的所思所想。

    首先,我们来分析一下,你为什么会觉得这次汇报很乱呢? 实际上,我们总说,“不知道你想说什么”,意思其实是,“不知道你的结论是什么”。

    刚刚在我的工作汇报中,其实是有结论的。我的结论是,“我认为这是一个非常成功的产品,需要加大研发力度。”

    那为什么你没能听出来呢?因为我没有在一开始的时候就告诉你。所以在听我汇报的时候,你必须时时刻刻来分析和筛选我想讲的细节,来判断我的结论到底是什么。更何况,我给你的细节还是一大段非常琐碎的罗列,也没有什么规律,连记都记不住,就别说听懂了。

    其实,我刚刚说的这些信息都是有规律可循的。比如,“产品的激活码抢手”,“试用用户留存率高”,这些都是销售方面的。再比如说,广告费用、媒体传播、代言人,这些是营销方面。最后,上线活动这些,其实是运营方面的。

    我这样给你归纳了一下,是不是感觉这些细节不像我汇报的那么复杂了? 所以,为什么我的汇报让你听不懂,就是因为开头没结论,细节之间没有分类,话与话之间还没有联系。    

     

    【清晰表达四原则】

    想要做到让人听懂,其实同样是有套路的。我把这个套路简称为 “论、证、类、比” 四个原则。接下来我一个一个讲给你听。

    1. 第一个原则,论。也就是结论先行。 一次表达只支持一个思想,最好能够出现在开头,这叫结论先行。
    2. 第二个原则,证。也就是以上统下。 说的是,任何一个层次的要点都必须是它下一个层次要点的总结概括,直到最后一个层级的内容是客观事实或数据为止。
    3. 第三个原则叫类,也就是归类分组。 就是每一组要点必须要属于同一个范畴。
    4. 第四个原则叫比,也就是逻辑递进。 所以每个要点都需要按照一定的逻辑顺序进行排列。

    结合这四个原则,我们再重新汇报一次,就变成:

    “我认为这个产品将成为非常成功的产品,可以继续加大研发力度。原因有三点:

    第一,在销售方面,用户数据非常乐观。比如,用户有效产品激活码为3万多个;试用用户的留存率为80%。
    第二,在营销方面,市场热度非常高,由于前期投入大幅度的广告费用,还请了欧巴代言,所以我们的产品搜索指数在一周内也排在前五名,吸引了30多家媒体的报道。
    第三,在运营方面,这次准备更加充分,上线的活动方案已经准备好,只差执行了。”

    最后,如果你为了加强听众的印象,还可以再强化一下结论,“我们一定要在研发力度上再加把劲,帮咱们这个产品在市场上获得更大的成功。”这样是不是清晰了很多。

    没错,有结构的表达就是以结论为开头,层层论证结论,最后再强化结论的过程。

    其实,你仔细想一下就会发现,这个表达的结构同样符合我们的金字塔结构

    纵向上,顶层是总结论,然后支撑结论的要点要层层下分,直到客观事实跟数据;横向上,每一组要点都有一定的规律和分类,彼此也是有逻辑关系的。

    而且,有了这样一张结构图以后,你会发现你可以在任何短的时间内把一件事说清,说全,只是深入的程度不同而已。

    举个例子,比如:

    你只有一秒钟或两秒钟的时间,你只需要说结论就可以了,“我们这个产品会成功,要加大研发力度。”
    那如果你有一分钟呢?就可以说到金字塔结构的第二层,“我这个产品会成功要加大研发力度,原因有三点:(1)销售方面,用户数据非常乐观;(2)营销方面,市场热度非常高;(3)运营方面,这次准备更加充分。”
    那么如果你有两到三分钟呢?就可以按照我们刚刚给的完整版来说了。

    所以,我们说如果给你30秒钟的时间,你要是说不清楚一件事,那么给你30分钟,给你半天,我们认为你也未必能说清楚。为什么?你的表达没有结构,没有重点。    

    ​​​​​​图为“论、证、类、比”的金字塔结构图


    【重要的事情说三点】

    结构化的表达是可以被训练的。我教你一个简单的训练方法,叫“重要的事情说三点”。

    不知道你有没有发现,领导讲话都喜欢说三点。因为“三”是一个特别神奇的数字,它可以帮我们用最简单的结构把问题表述清楚,一太少,二不够,三正好。 

    当对方向你提问的时候,如果你可以立刻回答出有三点,一定可以给对方留下脑子很快的印象。

    你不要认为这件事情很简单,一个人能够准确地将事情概括为三点,一定具备对信息快速归纳、整理和提炼的能力。你不信的话,轮到你发言的时候,你可以试一下。

    比如你说,“关于这事我有以下三点看法”。说完会有几种情况呢?

    第一种情况,正好说三点。
    第二种情况,说完两点以后就没有了。你只能说,我再强调一下第二点。
    第三种情况,说完三点以后,发现还有两点特别重要,你是说还是不说吧,你只能说我再补充两点。

    所以,可以一开始就说三点,而且最后正好说三点。这件事看似简单,其实背后隐藏着非常强的结构化思考能力:

    首先,你要给出个结论;
    然后,再给出支撑这个结论的三个理由。它们之间还要符合“论证类比”的原则。

    比如,当我们在说一些逻辑性非常强的话题的时候,对话题的把握就要非常周密: 

    横向上要符合“类”和“比”,话题不能有遗漏和疏忽,还要有先后次序;纵向上,要符合“论”和“证”,挖掘思考的深度。

    这都是非常考验大脑对信息处理功力的,更何况你还用三点把整个事情说清楚了。

    想要做到这样的话,还需要配合大量的训练。最简单的建议就是, 在生活和工作当中,任何人问你问题,你都可以尝试着用三点来回答。 不管你是不是真的想到了具体的内容,总之先说出有三点,然后再一边解释,一边思考具体内容。

    相信我,实践了三点法则以后,周围的人就会立刻对你产生变化,因为你的表达方式不仅变得自然有逻辑,而且还非常干净利索。

    结构化思维可不仅仅是一种思维方式,它更是一种透过结构看世界的视角。

    展开全文
  • 转载自 自然语言处理中CNN模型几种常见的Max Pooling操作 自然语言处理中CNN模型几种...一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X...
  • 目前业界普遍认为可视化是最优秀(或者说是惟一一种)数据内容表达方式,甚至如果不对数据进行可视化处理,我们将错失大量宝贵信息。  可视化是获取并分享观点绝佳途径,但很多大数据团队却没能选对正确方式...
  • 常见可视化工具

    2020-12-20 04:10:50
    传递信息的方式 文字:不太适合于数据的表达 图片:简单直观 体现走势 体现大小 体现比例 声音:不太适合数据的表达 视频:图片+声音 2、目的 通过图片来展示数据结果,从图中可以发现数据
  • 2011-11-02 00:06:42| 分类: 技术...如果在这里找到有用的信息,请留下您的痕迹,如果对相同的问题有更好的解决方法,欢迎留言提示! 1.说明,访问数据列有三种方式,如上面的row.id,或者可以使用row["...
  • 目前业界普遍认为可视化是最优秀(或者说是惟一一种)数据内容表达方式,甚至如果不对数据进行可视化处理,我们将错失大量宝贵信息。 可视化是获取并分享观点绝佳途径,但很多大数据团队却没能选对正确方式。...
  • 这是我自己在学birt的时候做的记录,版本是birt2.5.2,文字功底有限,表达的很不严谨,在这里仅供大家参孝学习:如果在这里找到有用的信息,请留下您的痕迹,如果对相同的问题有更好的解决方法,欢迎留言提示!...
  • 绝对路径: 基于根目录路径表达方式 /home/dev; 相对路径: 相对当前所在路径的表达方式 …/dev/; 当前所在路径的表达方式: 在每一个目录下都会有两个目录 . 目录自身 … 自身上一层路径 (3)mkdir(创建目录)...
  • Java 5 推出,加上当年基于纯 Java Annotation 依赖注入框架 Guice 出现,使得Spring框架及其社区也“顺应民意”,推出并持续完善了基于 Java 代码和 Annotation 元信息的依赖关系绑定描述方式,即 JavaConfig...
  • Java 5 推出,加上当年基于纯 Java Annotation 依赖注入框架 Guice 出现,使得 Spring 框架及其社区也“顺应民意”,推出并持续完善了基于 Java 代码和 Annotation 元信息的依赖关系绑定描述方式,即 Java...
  • o 6.5 在使用非全零作为空指针内部表达的机器上, NULL 是如何定义? o 6.6 如果 NULL 定义成 #define NULL ((char *)0) 难道不就可以向函数传入不加转换 NULL 了吗? o 6.7 如果 NULL 和 0 作为空指针常数是...
  • Java5 推出,加上当年基于纯 Java Annotation 依赖注入框架 Guice 出现,使得Spring框架及其社区也“顺应民意”,推出并持续完善了基于 Java 代码和 Annotation 元信息的依赖关系绑定描述方式,即 JavaConfig ...
  • 视频在采集阶段颜色空间表达方式,和其采样及存储方式。并且通过对物理采集中变焦、曝光概念初识,理解了视频采集设备重要性。 如果采集后视频已经在YUV阶段进行了一部分压缩,为了兼顾画质和传输稳定...
  • 起初,子弹图的发展是为了取代仪表盘上常见的那种里程表,时速表等基于圆形的信息表达方式。子弹图无修饰的线性表达方式使我们能够在狭小的空间中表达丰富的数据信息,这种情况在寸尺寸金的报纸媒介上尤其明显。与...
  • 边缘能够紧凑的表达图像里内容信息提取使用倒数,为极值时候为边缘 边缘提取与拟合 另一种定义边缘的方式 Prewitt:对左右点单点噪声不太敏感,将自身考虑乘0,左右两侧分别是-1和1,否则[-1,1]这种...
  • 因为数据传输的方式千奇百怪,为了数据之间传达方便与统一,XML提供了一套数据存储、交换、表达的标准,被用来结构化、存储以及传输信息。 Dom4J Dom4J是XML文件API,可以在JAVA平台上对XML文件进行读写。 XML...
  • 用户可以根据自己对数据需求,使用不同查询方式。通过不同查询方式,可以获得不同数据。MySQL中是使用SELECT语句来查询数据。在这一章中将讲解内容包括。 1、查询语句基本语法 2、在单表上查询数据 3...
  • 补码编码:有符号整数常见表达方式,可正可负;浮点数编码:实数科学记数法以2为基数。其中整数编码表达是精确,而浮点数编码是近似。 2.1信息存储: 字节:8个位组成块,是最小可寻址内存单元...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 204
精华内容 81
关键字:

常见的信息表达方式