Skip to content

Instantly share code, notes, and snippets.

@nsapoval
Created August 14, 2022 19:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nsapoval/7b5246e3e710c233c04213600492d75f to your computer and use it in GitHub Desktop.
Save nsapoval/7b5246e3e710c233c04213600492d75f to your computer and use it in GitHub Desktop.
UPGMA with Scipy.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "UPGMA with Scipy.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyOV5pp3AI2caZeh+yswFAvp",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/nsapoval/7b5246e3e710c233c04213600492d75f/upgma-with-scipy.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"source": [
"import numpy as np\n",
"from scipy.cluster import hierarchy\n",
"import matplotlib.pyplot as plt"
],
"metadata": {
"id": "yiyCPGVk7ej5"
},
"execution_count": 1,
"outputs": []
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 486
},
"id": "Y6lvfuLe7dtE",
"outputId": "12b57444-d23a-4a01-81d6-c08f95af2a3c"
},
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 576x576 with 1 Axes>"
],
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAdAAAAHVCAYAAABBkKqzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAWe0lEQVR4nO3de7CkdX3n8c8XBxGViwoJF3EmkYiI4xpjou7ihtKksmoIZKNxNa6KiavZNWXidd24hqTUuKm40YrZaOWCgkEhlIqGNbrZiHc0UF5GRTe6iqiMggIzEuNtn/3j95yiGWeA+XLO6TPwelVR091PX35P99P9fi596JqmKQDA3tlv2QMAgH2RgAJAg4ACQIOAAkCDgAJAg4ACQMOmvbnyYYcdNm3ZsmWNhgIAG8sll1xy1TRNh+9u2l4FdMuWLbn44otXZ1QAsMFV1WV7mmYXLgA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADRsWvYA9uTsD30x53/0y8seBmvolPsfncc/6B7LHgZAy4bdAj3/o1/Op67YsexhsEY+dcUOK0jAPm3DboEmyX2OPDjnPO0hyx4Ga+Cxr/ngsocAcIts2C1QANjIBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGgQUABoEFAAaBBQAGjYtewC3SRefkWw7b9mjWK7tp4x/z3jxcsexTFsfnTzwtGWPAmgS0GXYdl6yfVtyxNZlj2RpzrnH+csewnJt3zb+FVDYZwnoshyxNTntgmWPgmU541HLHgFwCzkGCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0CCgANAgoADQIKAA0C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\n"
},
"metadata": {
"needs_background": "light"
}
}
],
"source": [
"D = np.asarray([[0, 32, 48, 51, 50, 48, 98, 148],\n",
" [32, 0, 26, 34, 29, 33, 84, 136],\n",
" [48, 26, 0, 42, 44, 44, 92, 152],\n",
" [51, 34, 42, 0, 44, 38, 86, 142],\n",
" [50, 29, 44, 44, 0, 24, 89, 142],\n",
" [48, 33, 44, 38, 24, 0, 90, 142],\n",
" [98, 84, 92, 86, 89, 90, 0, 148],\n",
" [148, 136, 152, 142, 142, 48, 98, 0],])\n",
"clusters = [\"Dog\", \"Bear\", \"Raccoon\", \"Weasel\", \"Seal\", \"Sea lion\", \"Cat\", \"Monkey\"]\n",
"\n",
"linkage = hierarchy.average(D)\n",
"fig, ax = plt.subplots(figsize=(8, 8))\n",
"hierarchy.dendrogram(linkage, labels=clusters, ax=ax)\n",
"ax.get_yaxis().set_visible(False)\n",
"plt.show()"
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment