Commit 15a855db by Edoardo Sarti

modif Edo

parent 6e455873
{
"cells": [
{
"cell_type": "code",
"execution_count": 115,
"metadata": {},
"outputs": [],
"source": [
"from ete3 import Tree\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[41, 62, 121, 82, 65, 174, 57, 60], [21, 20, 13, 49, 47, 74, 47, 35, 32, 33, 55, 119, 1, 56, 15, 45], [8, 13, 4, 16, 7, 6, 12, 37, 27, 20, 26, 48, 19, 28, 8, 27, 4, 28, 4, 29, 19, 36, 5, 114, 0, 0, 17, 39, 9, 6, 8, 37]]\n"
]
}
],
"source": [
"def genererhisto(input_file,v):\n",
" t = Tree(input_file) # ouverture du fichier\n",
" l=[]\n",
" for n in t.get_descendants():\n",
" if t.get_distance(n,topology_only=True)==v:# test sur la distance\n",
" l.append(n)\n",
" histof=[]\n",
"\n",
" for x in range(len(l)):# pour toute les occurences dans l\n",
" histo=[]\n",
" for leaf in l[x]: # pour toute les feuilles dans L \n",
" histo.append(leaf)\n",
" histof.append(len(histo))# on recupere le nombre de feuille de chaque sous arbre\n",
" return histof\n",
"\n",
"def genererhistos(input_file,vi,v):\n",
" t = Tree(input_file) # ouverture du fichier\n",
" #print(t)\n",
" zeroshere = []\n",
" histos = []\n",
" for iv in range(v+1):\n",
" l = []\n",
" zerosinnext = []\n",
" count = 0\n",
" for n in t.get_descendants():\n",
" if t.get_distance(n,topology_only=True)==iv:# test sur la distance\n",
" while count in zeroshere:\n",
" l.append(0)\n",
" zerosinnext += [(len(l)-1)*2, (len(l)-1)*2+1]\n",
" count += 1\n",
" l.append(len(n.get_leaves()))\n",
" if n.is_leaf():\n",
" zerosinnext += [(len(l)-1)*2, (len(l)-1)*2+1]\n",
" count += 1\n",
" zeroshere = zerosinnext\n",
" if vi <= iv <= v:\n",
" histos.append(l)\n",
" return histos\n",
" \n",
" \n",
"histos=genererhistos(\"results_djeser/CrFBA3_PV00274_0.8_k20.nhx\",2,4)\n",
"print(histos)\n"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[5, 6, 7, 8, 1, 2, 3, 4]\n",
"[1, 2, 3, 4, 5, 6, 7, 8]\n",
"[2, 3, 1, 8, 5, 6, 4, 7]\n",
"[8, 7, 6, 5, 4, 3, 2, 1]\n",
"[8, 7, 6, 5, 4, 3, 2, 1]\n",
"[6, 5, 7, 4, 8, 1, 3, 2]\n",
"[10, 9, 8, 7, 12, 10, 7, 5]\n",
"[13, 10, 7, 5, 10, 9, 8, 7]\n"
]
}
],
"source": [
"def organisehisto(histo):\n",
" for i in range(len(histo)):\n",
" if (i+1)%2==0:# si le terme de gauche superieur à celui de droite\n",
" if histo[i]<histo[i-1]:\n",
" transition=histo[i]\n",
" histo[i]=histo[i-1]\n",
" histo[i-1]=transition\n",
" if (i+1)%4==0:# si le sous arbre de gauche superieur à celui de droite\n",
" if (histo[i-2]+histo[i-3])>(histo[i-1]+histo[i]):\n",
" transition1=histo[i-2]\n",
" transition2=histo[i-3]\n",
" histo[i-2]=histo[i]\n",
" histo[i-3]=histo[i-1]\n",
" histo[i-1]=transition2\n",
" histo[i]=transition1\n",
" \n",
"def organisehisto2(histo):\n",
" lh = len(histo)\n",
" \n",
" # Check: if histo length is not a power of two, exit\n",
" if not ((lh & (lh-1) == 0) and lh != 0): # Powers of two only have the first bit == 1...\n",
" print(f\"Error: histogram length == {lh}\")\n",
" exit(1)\n",
" \n",
" levelhisto = histo\n",
" llh = len(levelhisto)\n",
" powcount = 0\n",
" levmod = 2**powcount\n",
" while llh > 1:\n",
" nextlevelhisto = []\n",
" for i in range(0,llh,2):\n",
" j = i*levmod\n",
" if levelhisto[i] < levelhisto[i+1]:\n",
" #print(\"WAS\", histo)\n",
" #print(\"OPERATION\", list(range(j, j+levmod)), \"<->\", list(range(j+levmod, j+levmod*2)))\n",
" histo[j:j+levmod], histo[j+levmod:j+levmod*2] = histo[j+levmod:j+levmod*2], histo[j:j+levmod]\n",
" #print(\"BECOMES\", histo)\n",
" nextlevelhisto.append(levelhisto[i] + levelhisto[i+1])\n",
" levelhisto = nextlevelhisto\n",
" llh = len(levelhisto)\n",
" powcount += 1\n",
" levmod = 2**powcount\n",
" #print(\"levelhisto\", levelhisto)\n",
"\n",
"# TESTS\n",
"h = [8, 7, 6, 5, 4, 3, 2, 1]\n",
"organisehisto(h)\n",
"print(h)\n",
"h = [1, 2, 3, 4, 5, 6, 7, 8]\n",
"organisehisto(h)\n",
"print(h)\n",
"h = [1, 8, 2, 3, 6, 5, 7, 4]\n",
"organisehisto(h)\n",
"print(h)\n",
"\n",
"h = [8, 7, 6, 5, 4, 3, 2, 1]\n",
"organisehisto2(h)\n",
"print(h)\n",
"h = [1, 2, 3, 4, 5, 6, 7, 8]\n",
"organisehisto2(h)\n",
"print(h)\n",
"h = [1, 8, 2, 3, 6, 5, 7, 4]\n",
"organisehisto2(h)\n",
"print(h)\n",
"\n",
"# ATTENTION!!\n",
"h1 = [10,9,8,7,12,10,7,5]\n",
"organisehisto2(h1)\n",
"print(h1)\n",
"h2 = [10,9,8,7,13,10,7,5]\n",
"organisehisto2(h2)\n",
"print(h2)"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [],
"source": [
"def genererhisto2(input_file,v):\n",
" t = Tree(input_file)\n",
" l=[]\n",
" i=0\n",
" for n in t.get_descendants():\n",
" if t.get_distance(n,topology_only=True)==v:\n",
" i+=1\n",
" if i==17:# j'ai remarque que c'est au niveua du sous arbres 17 \n",
" l.append(n)\n",
" l.append(n)# j'etait oblige de mettre une feuille existente pour la boucle n \n",
" l.append(n)\n",
" histof=[]\n",
" for x in range(len(l)):\n",
" histo=[]\n",
" for leaf in l[x]:\n",
" histo.append(leaf)\n",
" histof.append(len(histo))\n",
" histof[17]=0# changement des deux valeurs ajoute plus haut\n",
" histof[18]=0\n",
" return histof"
]
},
{
"cell_type": "code",
"execution_count": 139,
"metadata": {},
"outputs": [],
"source": [
"def normalise(histo):# normalise les histogramme\n",
" return [x/sum(histo) for x in histo]"
]
},
{
"cell_type": "code",
"execution_count": 176,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"-0.09275795723482448\n",
"110\n",
"110 [10, 9, 8, 7, 12, 10, 7, 5] 0.9938352560874051\n"
]
}
],
"source": [
"import math\n",
"def divergence(histo1,histo2):# calcul la divergence\n",
" v=0.0\n",
" for i in range(len(histo1)):\n",
" if histo1[i]!=0 and histo2[i]!=0:\n",
" v+=histo1[i]*np.log(histo1[i]/histo2[i])\n",
" return v\n",
"\n",
"def pears(histo1, histo2):\n",
" n = len(histo1)\n",
" s1, s2, s11, s22, s12 = 0, 0, 0, 0, 0\n",
" for i in range(n):\n",
" s1 += histo1[i]\n",
" s2 += histo2[i]\n",
" s12 += histo1[i]*histo2[i]\n",
" s11 += histo1[i]**2\n",
" s22 += histo2[i]**2\n",
" return (n*s12 - s1*s2)/((((n*s11)-s1**2)**0.5)*(((n*s22)-s2**2)**0.5))\n",
"\n",
"def permutations(h,d=1):\n",
" \"\"\"Lists all binary permutations of histogram h (must have a length of a power of 2)\"\"\"\n",
" hlen = len(h)\n",
" if hlen == d:\n",
" return [h]\n",
" if hlen > 16:\n",
" return None\n",
" \n",
" iblist = []\n",
" for i in range(2**d):\n",
" ib = [int(x) for x in ('{:b}'.format(i)).zfill(d)]\n",
" iblist.append(ib)\n",
" res = []\n",
" binlength = int(hlen/d)\n",
" sme = []\n",
" for i in range(0,hlen,binlength):\n",
" sme.append((i,i+int(binlength/2),i+binlength))\n",
" #print(iblist, sme)\n",
" hlist = []\n",
" for ib in iblist:\n",
" hnew = h[:]\n",
" for i, tripl in enumerate(sme):\n",
" if ib[i]:\n",
" s, m, e = tripl\n",
" hnew = hnew[:s] + hnew[m:e] + hnew[s:m] + hnew[e:]\n",
" hlist.append(hnew)\n",
" newlist = []\n",
" for hh in hlist:\n",
" newlist += permutations(hh,d*2)\n",
" return newlist\n",
"\n",
"def maxpears(h1, h2):\n",
" ps = permutations(h1)\n",
" am = np.argmax([pears(h,h2) for h in ps])\n",
" return am, ps[am], pears(ps[am],h2)\n",
"\n",
"\n",
"import numpy as np\n",
"import random\n",
"# ATTENTION!!\n",
"h1 = [10,9,8,7,12,10,7,5]\n",
"h1copy = h1[:]\n",
"h1 = [10,12,7,5,7,8,9,10]\n",
"h2 = [10,9,8,7,13,10,7,5]\n",
"print(pears(h1,h2))\n",
"#organisehisto2(h1)\n",
"#organisehisto2(h2)\n",
"ps = permutations(h1)\n",
"print(ps.index(h1copy))\n",
"am = np.argmax([pears(h,h2) for h in ps])\n",
"print(am, ps[am], pears(ps[am],h2))\n"
]
},
{
"cell_type": "code",
"execution_count": 198,
"metadata": {},
"outputs": [],
"source": [
"histo70=genererhisto(\"results_djeser/CrFBA3_PV00274_0.7_k20.nhx\",2)\n",
"histo80=genererhisto(\"results_djeser/CrFBA3_PV00274_0.8_k20.nhx\",2)\n",
"histo90=genererhisto(\"results_djeser/CrFBA3_PV00274_0.9_k20.nhx\",2)"
]
},
{
"cell_type": "code",
"execution_count": 199,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<BarContainer object of 8 artists>"
]
},
"execution_count": 199,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from matplotlib import pyplot as plt\n",
"X = np.arange(len(histo70))\n",
"plt.bar(X + 0.00, histo70, color = 'b', width = 0.25)\n",
"plt.bar(X + 0.25, histo80, color = 'r', width = 0.25)\n",
"plt.bar(X + 0.50, histo90, color = 'g', width = 0.25)\n",
"#print(histo70)\n",
"#print(histo80)\n",
"#print(histo90)"
]
},
{
"cell_type": "code",
"execution_count": 200,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[37, 18, 37, 95, 53, 145, 42, 132]\n",
"[41, 62, 121, 82, 65, 174, 57, 60]\n",
"[70, 110, 68, 94, 74, 191, 65, 66]\n",
"(12, [18, 37, 95, 37, 53, 145, 42, 132], 0.7003169917083315)\n",
"(36, [37, 95, 18, 37, 53, 145, 42, 132], 0.6412731587069886)\n",
"(40, [82, 121, 41, 62, 65, 174, 57, 60], 0.9332447731538477)\n",
"0.5213979823684013\n",
"-62.17478453854025\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fa9023f8760>"
]
},
"execution_count": 200,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print(histo70)\n",
"print(histo80)\n",
"print(histo90)\n",
"print(maxpears(histo70, histo80))\n",
"print(maxpears(histo70, histo90))\n",
"print(maxpears(histo80, histo90))\n",
"print(pears(histo70, histo90))\n",
"print(divergence(histo70, histo90))\n",
"plt.scatter(maxpears(histo70, histo90)[1], histo90)"
]
},
{
"cell_type": "code",
"execution_count": 207,
"metadata": {},
"outputs": [],
"source": [
"histo80=genererhisto(\"results_djeser/CrFBA3_PV00274_0.8_k3.nhx\",2)\n",
"histo90=genererhisto(\"results_djeser/CrFBA3_PV00274_0.9_k3.nhx\",2)\n",
"histo100=genererhisto(\"results_djeser/CrFBA3_PV00274_1.0_k3.nhx\",2)"
]
},
{
"cell_type": "code",
"execution_count": 208,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<BarContainer object of 8 artists>"
]
},
"execution_count": 208,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"X = np.arange(len(histo90))\n",
"plt.bar(X + 0.00, histo80, color = 'b', width = 0.25)\n",
"plt.bar(X + 0.25, histo90, color = 'r', width = 0.25)\n",
"plt.bar(X + 0.50, histo100, color = 'g', width = 0.25)"
]
},
{
"cell_type": "code",
"execution_count": 214,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1.0\n",
"-0.26855775573365004\n",
"-0.26855775573365004\n",
"(62, [34, 82, 140, 41, 109, 74, 120, 293], 0.8183076771228812)\n"
]
},
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7fa8b2fe8ac0>"
]
},
"execution_count": 214,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"print(pears(histo80, histo90))\n",
"print(pears(histo80, histo100))\n",
"print(pears(histo90, histo100))\n",
"print(maxpears(histo90, histo100))\n",
"plt.scatter(maxpears(histo90, histo100)[1], histo100)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.8"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment