Skip to content

Instantly share code, notes, and snippets.

@ericdill
Last active May 31, 2018 13:03
Show Gist options
  • Save ericdill/f08828aa15fd6f600996119002c05e3f to your computer and use it in GitHub Desktop.
Save ericdill/f08828aa15fd6f600996119002c05e3f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Computing the number of feedstocks per maintainer\n",
"\n",
"To use this notebook you need the following installed:\n",
"* pandas\n",
"* matplotlib\n",
"* pyyaml\n",
"\n",
"And you need to clone the feedstocks repo\n",
"\n",
"`git clone --recursive -j8 [email protected]:conda-forge/feedstocks.git`"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from collections import Counter\n",
"import matplotlib.pyplot as plt\n",
"import os\n",
"import yaml"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# open all meta.yaml's and get the \"feedstock maintainers\""
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def safe_load(path_to_meta_yaml):\n",
" with open(path_to_meta_yaml, 'r') as f:\n",
" lines = f.readlines()\n",
" safe_lines = []\n",
" for idx, line in enumerate(lines):\n",
" if line.startswith('extra'):\n",
" safe_lines = lines[idx:]\n",
" break\n",
" recipe_maintainers = yaml.load(''.join(safe_lines))['extra']['recipe-maintainers']\n",
" return recipe_maintainers\n",
"# c.update(recipe_maintainers)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 5.43 s, sys: 9.61 s, total: 15 s\n",
"Wall time: 20.9 s\n"
]
}
],
"source": [
"%%time\n",
"metas = []\n",
"for dirpath, dirnames, filenames in os.walk('./'):\n",
" if 'meta.yaml' in filenames:\n",
" path_to_meta = os.path.join(dirpath, 'meta.yaml')\n",
" metas.append(path_to_meta)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"c = Counter()\n",
"for meta in metas:\n",
" maintainers = safe_load(meta)\n",
" c.update(maintainers)\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"There are 1031 maintainers on conda-forge\n"
]
}
],
"source": [
"print(f\"There are {len(c)} maintainers on conda-forge\")"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df = pd.DataFrame(list(c.items()), columns=['maintainer', 'num_feedstocks'])\n",
"df.maintainer = df.maintainer.str.lower()\n",
"df = (df.groupby(by='maintainer')\n",
" .sum()\n",
" .sort_values(by='num_feedstocks', ascending=False)\n",
" .reset_index())"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>maintainer</th>\n",
" <th>num_feedstocks</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>johanneskoester</td>\n",
" <td>985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>bgruening</td>\n",
" <td>976</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>daler</td>\n",
" <td>699</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>jdblischak</td>\n",
" <td>620</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>ocefpaf</td>\n",
" <td>602</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>pmlandwehr</td>\n",
" <td>319</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>jakirkham</td>\n",
" <td>314</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>cbrueffer</td>\n",
" <td>273</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>sodre</td>\n",
" <td>149</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>arnekr</td>\n",
" <td>122</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>frodepedersen</td>\n",
" <td>121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>mathiashaudgaard</td>\n",
" <td>121</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>cshaley</td>\n",
" <td>111</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>pkgw</td>\n",
" <td>109</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>sannykr</td>\n",
" <td>108</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>scopatz</td>\n",
" <td>103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>pelson</td>\n",
" <td>101</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>isuruf</td>\n",
" <td>94</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>msarahan</td>\n",
" <td>91</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>mariusvniekerk</td>\n",
" <td>79</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>nicoddemus</td>\n",
" <td>78</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>kwilcox</td>\n",
" <td>77</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>nehaljwani</td>\n",
" <td>75</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>jschueller</td>\n",
" <td>67</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>ericdill</td>\n",
" <td>62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>mwcraig</td>\n",
" <td>62</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>minrk</td>\n",
" <td>60</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>cj-wright</td>\n",
" <td>58</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>tacaswell</td>\n",
" <td>46</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>synapticarbors</td>\n",
" <td>45</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>183amir</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>31</th>\n",
" <td>ccordoba12</td>\n",
" <td>42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>croth1</td>\n",
" <td>42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>33</th>\n",
" <td>sylvaincorlay</td>\n",
" <td>42</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>jjhelmus</td>\n",
" <td>41</td>\n",
" </tr>\n",
" <tr>\n",
" <th>35</th>\n",
" <td>bollwyvl</td>\n",
" <td>40</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>goanpeca</td>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>37</th>\n",
" <td>epruesse</td>\n",
" <td>39</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>dopplershift</td>\n",
" <td>35</td>\n",
" </tr>\n",
" <tr>\n",
" <th>39</th>\n",
" <td>licode</td>\n",
" <td>33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>korijn</td>\n",
" <td>32</td>\n",
" </tr>\n",
" <tr>\n",
" <th>41</th>\n",
" <td>takluyver</td>\n",
" <td>31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>bsipocz</td>\n",
" <td>31</td>\n",
" </tr>\n",
" <tr>\n",
" <th>43</th>\n",
" <td>stuertz</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>saraedum</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>45</th>\n",
" <td>rmax</td>\n",
" <td>30</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>dougalsutherland</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>47</th>\n",
" <td>astrofrog-conda-forge</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>48</th>\n",
" <td>gillins</td>\n",
" <td>28</td>\n",
" </tr>\n",
" <tr>\n",
" <th>49</th>\n",
" <td>anguslees</td>\n",
" <td>27</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" maintainer num_feedstocks\n",
"0 johanneskoester 985\n",
"1 bgruening 976\n",
"2 daler 699\n",
"3 jdblischak 620\n",
"4 ocefpaf 602\n",
"5 pmlandwehr 319\n",
"6 jakirkham 314\n",
"7 cbrueffer 273\n",
"8 sodre 149\n",
"9 arnekr 122\n",
"10 frodepedersen 121\n",
"11 mathiashaudgaard 121\n",
"12 cshaley 111\n",
"13 pkgw 109\n",
"14 sannykr 108\n",
"15 scopatz 103\n",
"16 pelson 101\n",
"17 isuruf 94\n",
"18 msarahan 91\n",
"19 mariusvniekerk 79\n",
"20 nicoddemus 78\n",
"21 kwilcox 77\n",
"22 nehaljwani 75\n",
"23 jschueller 67\n",
"24 ericdill 62\n",
"25 mwcraig 62\n",
"26 minrk 60\n",
"27 cj-wright 58\n",
"28 tacaswell 46\n",
"29 synapticarbors 45\n",
"30 183amir 44\n",
"31 ccordoba12 42\n",
"32 croth1 42\n",
"33 sylvaincorlay 42\n",
"34 jjhelmus 41\n",
"35 bollwyvl 40\n",
"36 goanpeca 39\n",
"37 epruesse 39\n",
"38 dopplershift 35\n",
"39 licode 33\n",
"40 korijn 32\n",
"41 takluyver 31\n",
"42 bsipocz 31\n",
"43 stuertz 30\n",
"44 saraedum 30\n",
"45 rmax 30\n",
"46 dougalsutherland 28\n",
"47 astrofrog-conda-forge 28\n",
"48 gillins 28\n",
"49 anguslees 27"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head(50)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 720x576 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"ax = df.plot(y='num_feedstocks', logy=True, figsize=(10,8))\n",
"ax.set_ylabel('number of feedstocks maintained')\n",
"ax.set_xlabel('arbitrary index of maintainers');"
]
}
],
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment