python - Omics - Hunter https://evvail.com Evvail | 一个经验分享的地方 Tue, 23 Mar 2021 15:35:57 +0000 zh-CN hourly 1 https://evvail.com/wp-content/uploads/2019/08/cropped-1-32x32.jpg python - Omics - Hunter https://evvail.com 32 32 如何快速提取PDF表格?PDFPlumber https://evvail.com/2021/03/23/2300.html https://evvail.com/2021/03/23/2300.html#respond Tue, 23 Mar 2021 15:35:55 +0000 https://evvail.com/?p=2300 一般我们经常会遇见一种情况:把一个pdf里面的表格需要整理到exc...

The post 如何快速提取PDF表格?PDFPlumber first appeared on Omics - Hunter.

]]>
一般我们经常会遇见一种情况:把一个pdf里面的表格需要整理到excel,很多人可能会想到用ABBYY等软件,但是如果是企业用就要小心了,目前市面上的大部分软件是商用收费的,但是我们也可以用开源的软件来试先这个过程,比如: Pdfplumber

Pdfplumber是一个可以处理pdf文件的python库,可以查找文本字符、矩阵、和行的详细信息,也可以对表格进行提取等操作,非常方便。

安装:pip install pdfplumber

安装完成后在终端输入:pdfplumber --help可以产看帮助信息


使用说明: pdfplumber [-h] [--format {csv,json}]
                  [--types {char,rect,line,curve,image,annot} [{char,rect,line,curve,image,annot} ...]]
                  [--pages PAGES [PAGES ...]] [--indent INDENT]
                  [infile]

必要参数:
  infile

可选参数:
  -h, --help            显示帮助信息
  --format {csv,json}   csv or json,json格式返回更多信息; 它包含PDF级别的元数据(metadata)和每个页面的高度/宽度信息。
  --types {char,rect,line,curve,image,annot} [{char,rect,line,curve,image,annot} ...]
  --pages PAGES [PAGES ...] 一个以空格分隔,以1索引开头的页面或带连字符的页面范围的列表。
  --indent INDENT       JSON美化标准

下面用一个示例演示表格提取:

官方示例文件

# 简单的示例
import pdfplumber
import pandas as pd

with pdfplumber.open("background-checks.pdf") as pdf:
    # 提取第一页文字信息
    page = pdf.pages[0]
    text = page.extract_text()
    print(text)
    # 提取第一页表格信息
    table = page.extract_tables()
    for t in table:
        # 转化成DataFrame
        df = pd.DataFrame(t[1:], columns=t[0])
        # 将表格输出到csv文件
        df.to_csv("background-checks-table.csv")
        print(df)

总体来说识别效果还是很好的,表头由于有很多合并列,所以输出csv的时候会有错位。同时 pdfplumber 提供了debug功能,能够获取pdf页面中的表格,可以对其进行调整,以优化识别的情况 ,更多详细可以参考官方github。

参考资料:

1.https://github.com/jsvine/pdfplumber

The post 如何快速提取PDF表格?PDFPlumber first appeared on Omics - Hunter.

]]>
https://evvail.com/2021/03/23/2300.html/feed 0
进化树可视化工具-GraPhlAn https://evvail.com/2021/02/28/2226.html https://evvail.com/2021/02/28/2226.html#respond Sun, 28 Feb 2021 15:51:05 +0000 https://evvail.com/?p=2226 进化树在生物学中运用广泛,通常是用来表示物种之间的进化关系。生物分...

The post 进化树可视化工具-GraPhlAn first appeared on Omics - Hunter.

]]>
进化树在生物学中运用广泛,通常是用来表示物种之间的进化关系。生物分类学家往往根据各类生物间的亲缘关系的远近,把各类生物展示在有分枝的树状的图表上,简明地表示生物的进化历程和亲缘关系。其中使用比较广泛的一个工具是来自Segata实验室的GraPhlAn

GraPhlAn是一种用于生成分类和系统发育树的综合可视化工具,其使用python语言编写而成,主要有graphlan.py和graphlan_annotate.py脚本。

GraPhlAn结构如下图:

1)GraPhlAn安装:

  • 通过 Bioconda:conda install -c bioconda graphlan
  • 直接安装:pip install graphlan
  • 从github安装(推荐,最新版的支持python3):
    >git clone https://github.com/biobakery/graphlan.git
    >pip install .
  • docker执行:docker run -it biobakery/graphlan bash

2)绘图

作者文章给出的示例也非常精美:

软件运行需要两个文件一个是构建进化树的文件一个是注释文件。

一般我们需要两步:

Step 1:合并树和注释文件-graphlan_annotate.py


usage: graphlan_annotate.py [-h] [--annot annotation_file] [-v]
                            input_tree [output_tree]

positional arguments:
  input_tree            支持Newick, Nexus, PhyloXML或者文本文件
  output_tree           输出含有注释的树文件,如果不指定将会覆盖源文件

optional arguments:
  -h, --help            帮助
  --annot annotation_file
                        注释文件
  -v, --version         版本

Step 2:绘制进化树-graphlan.py


usage: graphlan.py [-h] [--format ['output_image_format']]
                   [--warnings WARNINGS] [--positions POSITIONS]
                   [--dpi image_dpi] [--size image_size] [--pad pad_in]
                   [--external_legends] [--avoid_reordering] [-v]
                   input_tree output_image


positional arguments:
  input_tree            输入文件,PhyloXML格式
  output_image          输出图像名称,可以使用--format调整文件
                        格式: png, pdf, ps, eps, svg

optional arguments:
  -h, --help            帮助
  --format ['output_image_format']
                        指定图像格式
  --warnings WARNINGS   警告
  --positions POSITIONS
                        设置点的绝对位置是否应该显示到标准输出,r或theta
  --dpi image_dpi       设置dpi
  --size image_size     图片大小 (inche, 默认是 7.0)
  --pad pad_in          图像的画布设置
  --external_legends    图例设置(默认)
  --avoid_reordering    指定树是否会重构
  -v, --version         版本

示例:利用作者提供的HMP_tree数据集


graphlan_annotate.py hmptree.xml hmptree.annot.xml --annot annot.txt
graphlan.py hmptree.annot.xml hmptree.png --dpi 150 --size 14 

更多的参数介绍请查看参考资料。

参考资料:

1. https://github.com/biobakery/graphlan

2. https://github.com/biobakery/biobakery/wiki/graphlan

3. https://segatalab.github.io/tools/graphlan/

The post 进化树可视化工具-GraPhlAn first appeared on Omics - Hunter.

]]>
https://evvail.com/2021/02/28/2226.html/feed 0
python – 绘制热图、设置colorbar大小 https://evvail.com/2021/01/18/2161.html https://evvail.com/2021/01/18/2161.html#respond Mon, 18 Jan 2021 15:53:27 +0000 https://evvail.com/?p=2161 热图是最常见的数据可视化方式之一,广泛用于数据的展示。本文旨在通过...

The post python – 绘制热图、设置colorbar大小 first appeared on Omics - Hunter.

]]>
热图是最常见的数据可视化方式之一,广泛用于数据的展示。本文旨在通过matplotlib来绘制热图,并调整colorbar样式来呈现最佳的可视化方式。

关于matplotlib介绍此处不在赘述,下面直接通过实例演示:


# 加载包
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
from numpy.random import randn

# 设置随机种子
np.random.seed(2021)

# 定义画布
fig, ax = plt.subplots()

# 生成数据
data = np.clip(randn(100, 200), -1, 1)

# 绘图
cax = ax.imshow(data, cmap=cm.coolwarm)

# 设置标题
ax.set_title('Gaussian noise with vertical colorbar\n')

# 添加colorbar
cbar = fig.colorbar(cax, ticks=[-1, 0, 1], 
                    orientation='vertical', 
                    label='Label',
                    fraction=0.01, # 设置colorbar相对大小
                    pad=0.04)
# 设置colorbar范围标签
cbar.ax.set_yticklabels(['<=-1', '0', '>=1']) 

plt.show()

一张漂亮的热图就绘制成功了,赶紧动手试试吧!

参考资料:

1.https://matplotlib.org/api/colorbar_api.html

2.https://matplotlib.org/gallery/ticks_and_spines/colorbar_tick_labelling_demo.html

The post python – 绘制热图、设置colorbar大小 first appeared on Omics - Hunter.

]]>
https://evvail.com/2021/01/18/2161.html/feed 0
python – 给图片添加水印 https://evvail.com/2021/01/17/2157.html https://evvail.com/2021/01/17/2157.html#respond Sun, 17 Jan 2021 15:05:04 +0000 https://evvail.com/?p=2157 在python里面给图片添加水印的方法有很多,诸如PIL、matp...

The post python – 给图片添加水印 first appeared on Omics - Hunter.

]]>
在python里面给图片添加水印的方法有很多,诸如PIL、matplotlib等包都可以快速给图片添加文字或者图片水印。本文主要介绍如何利用matplotlib给图片快速添加文字水印,例子如下:


# 加载必备包
import numpy as np
import matplotlib.pyplot as plt


np.random.seed(2021)
fig, ax = plt.subplots()

# 绘制点图
ax.plot(np.sin(10 * np.linspace(0, 1)), '-o', ms=20, alpha=0.7, mfc='orange')
# 添加网格
ax.grid()
# 添加文字水印,参考https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.text.html
fig.text(0.9, 0.1,               # 文字相对位置,(0,0)是左下角,而(1,1)是右上角
         'Watermark@copyright',  # 文字内容
         fontsize=30,            # 文字大小
         color='gray',           # 字体颜色
         ha='right', va='bottom',# 垂直、水平位置
         alpha=0.2,              # 水印透明度
         rotation=30             # 文字旋转角度
        )
# 绘图
plt.show()

也可以用fig.figimage添加图片水印,更多内容可以参考matplotlib官方文档。

参考资料:

1.https://matplotlib.org/gallery/images_contours_and_fields/watermark_image.html

2.https://matplotlib.org/gallery/text_labels_and_annotations/watermark_text.html

The post python – 给图片添加水印 first appeared on Omics - Hunter.

]]>
https://evvail.com/2021/01/17/2157.html/feed 0
python 用seaborn快速绘制散点图(二) https://evvail.com/2021/01/07/2138.html https://evvail.com/2021/01/07/2138.html#respond Thu, 07 Jan 2021 15:49:49 +0000 https://evvail.com/?p=2138 上一篇介绍了绘制不重叠散点图,本文主要介绍用seaborn绘制抖动...

The post python 用seaborn快速绘制散点图(二) first appeared on Omics - Hunter.

]]>
上一篇介绍了绘制不重叠散点图,本文主要介绍用seaborn绘制抖动图(有重叠),其绘制方法也非常简单。


# 利用iris数据集做演示
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 设置seaborn主题
sns.set(style="white", palette="muted", color_codes=True) 
iris = sns.load_dataset("iris")
# 原始矩阵
print("原始矩阵:")
print(iris.head())

# 长宽矩阵转换
iris = pd.melt(iris, "species", var_name="measurement")
print("转换后的矩阵:")
print(iris.head())

# 初始化图像
f, ax = plt.subplots()
# 边框设置
# sns.despine(bottom=True, left=True)

# 绘制散点图
sns.stripplot(x="value", y="measurement", hue="species",
              data=iris, dodge=True, alpha=.25, zorder=1)

# 添加均值点
sns.pointplot(x="value", y="measurement", hue="species",
              data=iris, dodge=.5, join=False, palette="dark",
              markers="d", scale=.7, ci=None)

# 图例设置、位置等调整
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[3:], labels[3:], title="species",
          handletextpad=0, columnspacing=0,
          loc="upper left", ncol=1, frameon=True)
plt.show()

如此,一张漂亮的散点图就绘制好了。

参考资料:

1.http://seaborn.pydata.org/examples/jitter_stripplot.html

The post python 用seaborn快速绘制散点图(二) first appeared on Omics - Hunter.

]]>
https://evvail.com/2021/01/07/2138.html/feed 0
Python 用matplotlib绘制小提琴图 https://evvail.com/2020/12/29/2115.html https://evvail.com/2020/12/29/2115.html#respond Tue, 29 Dec 2020 15:48:13 +0000 https://evvail.com/?p=2115 小提琴图是常用的数据数据可视化方式。用matplotlib绘制小提...

The post Python 用matplotlib绘制小提琴图 first appeared on Omics - Hunter.

]]>
小提琴图是常用的数据数据可视化方式。用matplotlib绘制小提琴图也是很便捷的,同时也可以添加完整的箱线图。(为什么写这一篇文章呢?有朋友说matplotlib绘制的小提琴不能添加完整的箱线图,虽然用seaborn也是一个比较好的选择,但是matplotlib作为基础包还是有必要深挖的。只要你想添加,matplotlib也是可以添加完整的箱线图)

下面借用官网示例给大家演示小提琴的绘制过程:


import matplotlib.pyplot as plt
import numpy as np

# 计算分位数
def adjacent_values(vals, q1, q3):
    upper_adjacent_value = q3 + (q3 - q1) * 1.5
    upper_adjacent_value = np.clip(upper_adjacent_value, q3, vals[-1])

    lower_adjacent_value = q1 - (q3 - q1) * 1.5
    lower_adjacent_value = np.clip(lower_adjacent_value, vals[0], q1)
    return lower_adjacent_value, upper_adjacent_value

# 坐标轴样式
def set_axis_style(ax, labels):
    ax.get_xaxis().set_tick_params(direction='out')
    ax.xaxis.set_ticks_position('bottom')
    ax.set_xticks(np.arange(1, len(labels) + 1))
    ax.set_xticklabels(labels)
    ax.set_xlim(0.25, len(labels) + 0.75)
    ax.set_xlabel('Sample name')
    
    
# 创建演示数据集
np.random.seed(2020)
data = [sorted(np.random.normal(0, std, 100)) for std in range(1, 5)]

# 定义画布
fig, ax = plt.subplots(nrows=1, ncols=1, figsize=(8, 4))

# 设置标题
ax.set_title('Customized violin plot')

# 绘制小提琴图
parts = ax.violinplot(
        data, showmeans=False, showmedians=False,
        showextrema=False)

# 设置填充颜色和边框颜色
for pc in parts['bodies']:
    pc.set_facecolor('#D43F3A')
    pc.set_edgecolor('black')
    pc.set_alpha(0.5)

# 计算中位数,上四分位和下四分位,绘制小提琴内部盒状图
quartile1, medians, quartile3 = np.percentile(data, [25, 50, 75], axis=1)
whiskers = np.array([
    adjacent_values(sorted_array, q1, q3)
    for sorted_array, q1, q3 in zip(data, quartile1, quartile3)])
whiskers_min, whiskers_max = whiskers[:, 0], whiskers[:, 1]

# 添加点和竖线
inds = np.arange(1, len(medians) + 1)
ax.scatter(inds, medians, marker='o', color='white', s=30, zorder=3)
ax.vlines(inds, quartile1, quartile3, color='k', linestyle='-', lw=5)
ax.vlines(inds, whiskers_min, whiskers_max, color='k', linestyle='-', lw=1)

# 设置坐标轴样式
labels = ['A', 'B', 'C', 'D']
set_axis_style(ax, labels)

plt.subplots_adjust(bottom=0.15, wspace=0.05)
plt.show()

如此一张完整的小提琴就绘制完成了。

参考资料:

1.https://matplotlib.org/gallery/statistics/customized_violin.html#sphx-glr-gallery-statistics-customized-violin-py

The post Python 用matplotlib绘制小提琴图 first appeared on Omics - Hunter.

]]>
https://evvail.com/2020/12/29/2115.html/feed 0
Python 绘制极坐标图 https://evvail.com/2020/12/15/2062.html https://evvail.com/2020/12/15/2062.html#respond Tue, 15 Dec 2020 15:37:56 +0000 https://evvail.com/?p=2062 用Python来绘制极坐标图也是非常简单的,之前文章有提到用《R ...

The post Python 绘制极坐标图 first appeared on Omics - Hunter.

]]>
用Python来绘制极坐标图也是非常简单的,之前文章有提到用《R 绘制极坐标堆积柱状图》,本文主要介绍如何用python可视化神器-matplotlib来绘制极坐标图。


# 加载包,numpy主要生成模拟数据;matplotlib用于绘图
import numpy as np
import matplotlib.pyplot as plt


# 设置随机数
np.random.seed(2020)

# 计算分块大小,数据
N = 20
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
radii = 10 * np.random.rand(N)
width = np.pi / 4 * np.random.rand(N)
colors = plt.cm.viridis(radii / 10.)

# 设置图片大小
plt.figure(figsize=(8, 8))
# 设置画布排列
ax = plt.subplot(111, projection='polar')
ax.bar(theta, radii, width=width, bottom=1.0, color=colors, alpha=0.5)

# 设置网格线样式
ax.grid(linestyle='-.', alpha=0.3)

# 隐藏网格线
# ax.grid(False)

# 隐藏坐标轴
# plt.axis('off')

plt.show()

如此,是不是也非常方便呢?另外感兴趣的小伙伴可以研究下matplotlib的logo的绘制:官方代码

参考资料:

1.https://matplotlib.org/3.1.1/gallery/pie_and_polar_charts/polar_bar.html#sphx-glr-gallery-pie-and-polar-charts-polar-bar-py

The post Python 绘制极坐标图 first appeared on Omics - Hunter.

]]>
https://evvail.com/2020/12/15/2062.html/feed 0
单细胞数据分析利器-scanpy https://evvail.com/2020/12/10/2022.html https://evvail.com/2020/12/10/2022.html#respond Thu, 10 Dec 2020 15:08:53 +0000 https://evvail.com/?p=2022 一般我们常用R中Seurat、scran、monocle等的R包来...

The post 单细胞数据分析利器-scanpy first appeared on Omics - Hunter.

]]>
一般我们常用R中Seurat、scran、monocle等的R包来处理单细胞数据,但是R在读取和处理数据的过程中会将所有的变量和占用都储存在RAM当中,在处理海量数据时经常会出现内存不足的情况。

scanpy是一个基于python的单细胞基因表达分析包,它包含了数据预处理、可视化、聚类、伪时间分析和轨迹推断、差异表达分析等数据分析手段等。

The Python-based implementation efficiently deals with datasets of more than one million cells.

https://scanpy.readthedocs.io/en/stable/index.html

安装scanpy:


# 建议用conda安装, 建议python版本大于3.6
# 安装依赖包
conda install seaborn scikit-learn statsmodels numba pytables
conda install -c conda-forge python-igraph leidenalg

# 安装scanpy,目前好像这个用conda还无法完成正确安装
pip install scanpy

Docker:docker pull fastgenomics/scanpy

教程:

1)聚类:https://scanpy-tutorials.readthedocs.io/en/latest/pbmc3k.html

2)可视化:https://scanpy-tutorials.readthedocs.io/en/latest/plotting/core.html

3)轨迹推断:https://scanpy-tutorials.readthedocs.io/en/latest/paga-paul15.html

4)数据整合分析(整合、降维、注释等):https://scanpy-tutorials.readthedocs.io/en/latest/integrating-data-using-ingest.html

5)空间分数分析:https://scanpy-tutorials.readthedocs.io/en/latest/spatial/basic-analysis.html

关于scanpy的介绍就到这里了,后面可以简单演示一下其分析流程和思路。

参考资料:

1.https://scanpy.readthedocs.io/en/stable/installation.html

The post 单细胞数据分析利器-scanpy first appeared on Omics - Hunter.

]]>
https://evvail.com/2020/12/10/2022.html/feed 0
Python 用matplotlib绘制双坐标图 https://evvail.com/2020/11/05/1820.html https://evvail.com/2020/11/05/1820.html#respond Thu, 05 Nov 2020 15:39:22 +0000 https://evvail.com/?p=1820 双坐标图一般用于我们展示多维数据,常见的方式是共享x轴,左右两边Y...

The post Python 用matplotlib绘制双坐标图 first appeared on Omics - Hunter.

]]>
双坐标图一般用于我们展示多维数据,常见的方式是共享x轴,左右两边Y轴刻度不一样或者按照比例缩放。matplotlib作为python绘图主要工具,绘制双坐标图也非常简单。

此处利用公开的数据集(美国economics数据集)做演示:


import pandas as pd
import matplotlib.pyplot as plt

# 导入数据
df = pd.read_csv("economics.csv")

x = df['date']
y1 = df['psavert']
y2 = df['unemploy']

# 绘制折线图(左Y轴)
fig, ax1 = plt.subplots(1,1,figsize=(16,9), dpi= 80)
ax1.plot(x, y1, color='tab:red')

# 绘制折线图(右Y轴)
ax2 = ax1.twinx()  # 共享X轴
ax2.plot(x, y2, color='tab:blue')

# 坐标轴样式
# 左Y轴
ax1.set_xlabel('Year', fontsize=20) # 设置x轴标签
ax1.tick_params(axis='x', rotation=0, labelsize=12) # 设置刻度
ax1.set_ylabel('Personal Savings Rate', color='tab:red', fontsize=20) # 设置y轴标签
ax1.tick_params(axis='y', rotation=0, labelcolor='tab:red' )
ax1.grid(alpha=.4) # 设置网格参数

# 右Y轴
ax2.set_ylabel("# Unemployed (1000's)", color='tab:blue', fontsize=20)
ax2.tick_params(axis='y', labelcolor='tab:blue')
ax2.set_xticks(np.arange(0, len(x), 60))
ax2.set_xticklabels(x[::60], rotation=90, fontdict={'fontsize':10})
ax2.set_title("Personal Savings Rate vs Unemployed: Plotting in Secondary Y Axis", fontsize=22)
fig.tight_layout()
plt.show()

更多的绘图方法下面参考资料给出了详尽的示例包括代码,建议学习。

参考资料:

1.https://www.machinelearningplus.com/plots/top-50-matplotlib-visualizations-the-master-plots-python

The post Python 用matplotlib绘制双坐标图 first appeared on Omics - Hunter.

]]>
https://evvail.com/2020/11/05/1820.html/feed 0
Pandas-强大的结构化数据分析工具集 https://evvail.com/2020/10/12/1685.html https://evvail.com/2020/10/12/1685.html#respond Mon, 12 Oct 2020 15:23:03 +0000 https://evvail.com/?p=1685 Pandas 是基于NumPy 的一个python扩展工具,该工具...

The post Pandas-强大的结构化数据分析工具集 first appeared on Omics - Hunter.

]]>
Pandas 是基于NumPy 的一个python扩展工具,该工具是为了高效的解决数据分析任务而创建提供了操作大型数据集所需的一些便捷方法,同时Pandas 也提供了一个常见的可视化方法(基于matplotlib包),本文主要向大家展示如何用Pandas可视化你的数据。


# 安装pandas
pip install pandas
# 用conda安装
conda install pandas

1)散点图


import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
# 散点图
df.plot.scatter(x='a', y='b', s=df['a'] * 200)

2)饼图


import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
# 饼图
df.plot.pie(subplots=True, figsize=(5, 5), autopct='%.2f')

3)面积图


import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area()

4)盒状图


import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box(sym='r+')

df.plot.box(vert=False, positions=[1, 4, 5, 6, 8])

5)柱状图


import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

6)堆积图


import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
# 堆积柱状图
df.plot.bar(stacked=True)
# 堆积条形图
df.plot.barh(stacked=True)

7)折线图


import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('1/1/2000',
   periods=10), columns=list('ABCD'))

df.plot()

总体来说,pandas自带的可视化函数基本满足大部分数据可视化要求。非常的简单实用。

参考资料:

1.https://pandas.pydata.org/

2.https://www.tutorialspoint.com/python_pandas/python_pandas_visualization.htm

The post Pandas-强大的结构化数据分析工具集 first appeared on Omics - Hunter.

]]>
https://evvail.com/2020/10/12/1685.html/feed 0