前言
看到题目的小伙伴是不是内心有一万个?是不是想问那个Ancol PCA是什么鬼。不知道正常,因为这词是我造的233333 为什么叫这个名字:众所周知血统的英文是Ancestry,位置的英文是location,这俩单词取前三个字母,loc再倒过来去掉c,组合在一起不就是Ancol吗~PCA就是主成分分析的意思不变哦~
下面教程正式开始:
编程语言:python3.8 模块:pandas numpy sklearn matplotlib geopy 整体思路:先将计算器的多维数据降为二维数据并使其作为x,y轴,再将位置数据转化为一维数据并使其作为z轴,最后组合为三维数据并可视化
代码:
from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent = 'google_map')
location = geolocator.geocode('location')
(location.latitude, location.longitude)
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import pandas as pd
import numpy as np
df = pd.read_csv('new_pca.csv', index_col = 0, header = 0)
label = df.index
data = df.loc[:, '非洲':'美洲']
df = df.loc[:, '纬度':'经度']
pca = PCA(n_components = 1)
z = pca.fit_transform(np.deg2rad(df))
pca = PCA(n_components = 2)
data_2 = pca.fit_transform(data)
data = np.concatenate((data_2, z), axis = 1)
fig = plt.figure()
ax = Axes3D(fig)
for i in range(len(label)):
x, y, z = data[i][0], data[i][1], data[i][-1]
if label[i] == '韩国':
ax.scatter(x, y, z, color = 'blue')
elif label[i] == '吉林省':
ax.scatter(x, y, z, color = 'red')
plt.show()
结果展示:
(此示例是利用了韩国人和吉林省朝鲜族的e11数据以及位置信息做出来的Ancol PCA图)
此方法的优势:
可以将计算器结果极为相似的两个或多个族群在散点图上分散开,并且实现了将基因水平与个体水平较为科学的相结合分析
此方法的劣势:
点与点的的欧式距离不能准确的反映族群间的遗传距离,此外,对于晕3D的人来说数据的读取也较为难受。
此方法的意义:
以前大家看祖源的分析方法就只是直接看计算器结果再问问哪里人什么族,推断。最多也就再结合着传统的PCA看看。但利用此方法可以将位置信息数字化,更加科学的进行溯源。
下面是实现Ancol PCA的流程图:
以及绘制流程图用的代码:
from graphviz import Digraph
dot = Digraph(comment = 'The Round Table')
dot.node('#', '读取数据')
dot.node('a', '计算器数据')
dot.node('b', '计算器二维数据')
dot.node('c', '数据所在地')
dot.node('d', '经纬度')
dot.node('e', '弧度制位置信息')
dot.node('f', '一维位置')
dot.node('+', '组成新数组')
dot.node('g', '三维图可视化')
dot.edge('#', 'a', 'pandas')
dot.edge('a', 'b', 'sklearn(PCA)')
dot.edge('b', '+', 'numpy(concatenate)')
dot.edge('#', 'c', 'pandas')
dot.edge('c', 'd', 'geopy')
dot.edge('d', 'e', 'numpy(deg2rad)')
dot.edge('e', 'f', 'sklearn(PCA)')
dot.edge('f', '+', 'numpy(concatenate)')
dot.edge('+', 'g', 'matplotlib')
dot.render('ancol_pca.pdf')
感谢:
数据提供:母系-mtDNA祖源群 QQ:923891525 提供编程语言:Python 官网:https://www.python.org 提供模块: pandas 官网:https://pandas.pydata.org numpy 官网:https://www.numpy.org/ matplotlib 官网:https://matplotlib.org sklearn 官网:https://scikit-learn.org/stable/ geopy 项目网站:https://github.com/geopy/geopy graphviz 官网:http://www.graphviz.org
??杨昊霖 转载时请注明出处
|