Skip to content

Commit 4583749

Browse files
committed
First commit
0 parents  commit 4583749

5 files changed

+178
-0
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
data/*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"cells": [],
3+
"metadata": {},
4+
"nbformat": 4,
5+
"nbformat_minor": 2
6+
}

1. Classifying Partial Permits.ipynb

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {},
6+
"source": [
7+
"# Goal 1\n",
8+
"## Given a partial permit, can we predict what classification it belongs to?\n",
9+
"\n",
10+
"### Getting Started\n",
11+
"- Open up the CITES trade database at https://trade.cites.org/\n",
12+
"- Select a year range and click *Search*\n",
13+
"- Download a Comparative Tabulation report and place it in `data/`\n",
14+
"- Install requirements with `pip install -r requirements.txt`\n",
15+
"- Run this notebook"
16+
]
17+
},
18+
{
19+
"cell_type": "code",
20+
"execution_count": 3,
21+
"metadata": {},
22+
"outputs": [
23+
{
24+
"name": "stderr",
25+
"output_type": "stream",
26+
"text": [
27+
"Using TensorFlow backend.\n"
28+
]
29+
},
30+
{
31+
"ename": "ModuleNotFoundError",
32+
"evalue": "No module named 'tensorflow'",
33+
"output_type": "error",
34+
"traceback": [
35+
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
36+
"\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)",
37+
"\u001b[0;32m<ipython-input-3-5f38681609db>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmodels\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mSequential\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mDense\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mkeras\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrappers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscikit_learn\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mKerasClassifier\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
38+
"\u001b[0;32m/usr/local/lib/python3.6/site-packages/keras/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mabsolute_import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mutils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mactivations\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mapplications\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
39+
"\u001b[0;32m/usr/local/lib/python3.6/site-packages/keras/utils/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdata_utils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mio_utils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mconv_utils\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;31m# Globally-importable utils.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
40+
"\u001b[0;32m/usr/local/lib/python3.6/site-packages/keras/utils/conv_utils.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msix\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmoves\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0;34m.\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mbackend\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mK\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 10\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
41+
"\u001b[0;32m/usr/local/lib/python3.6/site-packages/keras/backend/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 82\u001b[0m \u001b[0;32melif\u001b[0m \u001b[0m_BACKEND\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'tensorflow'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 83\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstderr\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Using TensorFlow backend.\\n'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 84\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0;34m.\u001b[0m\u001b[0mtensorflow_backend\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 85\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 86\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Unknown backend: '\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mstr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_BACKEND\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
42+
"\u001b[0;32m/usr/local/lib/python3.6/site-packages/keras/backend/tensorflow_backend.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0m__future__\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mprint_function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mtensorflow\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 6\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtraining\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmoving_averages\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtensor_array_ops\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
43+
"\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'tensorflow'"
44+
]
45+
}
46+
],
47+
"source": [
48+
"import numpy as np\n",
49+
"import pandas as pd\n",
50+
"from keras.models import Sequential\n",
51+
"from keras.layers import Dense\n",
52+
"from keras.wrappers.scikit_learn import KerasClassifier\n",
53+
"from keras.utils import np_utils\n",
54+
"from sklearn.model_selection import cross_val_score\n",
55+
"from sklearn.model_selection import KFold\n",
56+
"from sklearn.preprocessing import LabelEncoder\n",
57+
"from sklearn.pipeline import Pipeline"
58+
]
59+
},
60+
{
61+
"cell_type": "code",
62+
"execution_count": null,
63+
"metadata": {},
64+
"outputs": [],
65+
"source": [
66+
"np.random.seed(1)"
67+
]
68+
}
69+
],
70+
"metadata": {
71+
"kernelspec": {
72+
"display_name": "Python 3",
73+
"language": "python",
74+
"name": "python3"
75+
},
76+
"language_info": {
77+
"codemirror_mode": {
78+
"name": "ipython",
79+
"version": 3
80+
},
81+
"file_extension": ".py",
82+
"mimetype": "text/x-python",
83+
"name": "python",
84+
"nbconvert_exporter": "python",
85+
"pygments_lexer": "ipython3",
86+
"version": "3.6.4"
87+
}
88+
},
89+
"nbformat": 4,
90+
"nbformat_minor": 2
91+
}

README.md

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
# CITES ML
2+
## Machine Learning with the CITES Trade Database
3+
4+
### Installation
5+
6+
Install Python 3.6, jupyter notebook, and run `pip install -r requirements.txt`
7+
8+
### Aims
9+
10+
This repo is an exploratory effort to see how Machine Learning can be applied to the CITES Trade Database, with three main objectives and experiments, each represented in a jupyter notebook:
11+
12+
1. Given a partial permit, can we figure out what category it belongs to?
13+
2. Given some trade data over time, can we predict future trade numbers, per country and per species?
14+
3. Given valid and invalid permits (raw data before validation steps), can we learn the sanity checks and validation processes to spot invalid permits automatically?

requirements.txt

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
absl-py==0.1.11
2+
appnope==0.1.0
3+
astor==0.6.2
4+
bleach==1.5.0
5+
certifi==2018.1.18
6+
chardet==3.0.4
7+
decorator==4.2.1
8+
docopt==0.6.2
9+
entrypoints==0.2.3
10+
gast==0.2.0
11+
grpcio==1.10.0
12+
html5lib==0.9999999
13+
idna==2.6
14+
ipykernel==4.8.2
15+
ipython==6.2.1
16+
ipython-genutils==0.2.0
17+
ipywidgets==7.1.2
18+
jedi==0.11.1
19+
Jinja2==2.10
20+
jsonschema==2.6.0
21+
jupyter==1.0.0
22+
jupyter-client==5.2.2
23+
jupyter-console==5.2.0
24+
jupyter-core==4.4.0
25+
Keras==2.1.5
26+
Markdown==2.6.11
27+
MarkupSafe==1.0
28+
mistune==0.8.3
29+
nbconvert==5.3.1
30+
nbformat==4.4.0
31+
notebook==5.4.0
32+
numpy==1.14.1
33+
pandas==0.22.0
34+
pandocfilters==1.4.2
35+
parso==0.1.1
36+
pexpect==4.4.0
37+
pickleshare==0.7.4
38+
prompt-toolkit==1.0.15
39+
protobuf==3.5.2
40+
ptyprocess==0.5.2
41+
Pygments==2.2.0
42+
python-dateutil==2.6.1
43+
pytz==2018.3
44+
PyYAML==3.12
45+
pyzmq==17.0.0
46+
qtconsole==4.3.1
47+
requests==2.18.4
48+
scikit-learn==0.19.1
49+
scipy==1.0.0
50+
Send2Trash==1.5.0
51+
simplegeneric==0.8.1
52+
six==1.11.0
53+
sklearn==0.0
54+
tensorboard==1.6.0
55+
tensorflow==1.6.0
56+
termcolor==1.1.0
57+
terminado==0.8.1
58+
testpath==0.3.1
59+
tornado==5.0
60+
traitlets==4.3.2
61+
urllib3==1.22
62+
wcwidth==0.1.7
63+
webencodings==0.5.1
64+
Werkzeug==0.14.1
65+
widgetsnbextension==3.1.4
66+
yarg==0.1.9

0 commit comments

Comments
 (0)