In [2]:
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from tornado import gen
from tornado.ioloop import IOLoop
from aimetrics import metrics
%matplotlib inline

In [3]:
data = {}
@gen.coroutine
def get_data():
    data['drones'] = yield metrics.fetch_data("http://localhost:3002/", "bst", "drone", auth_username="bst", auth_password="bst")
    return data

IOLoop.instance().add_callback(get_data)

In [5]:
data


Out[5]:
{'drones': {'X': array([[  3.26576770e+01,   8.09563000e-01,   4.60428480e+01,
            9.70800000e+02,   8.29890000e-02],
         [  4.09436680e+01,   7.91728000e-01,   1.02575842e+02,
            9.70800000e+02,   9.32500000e-02],
         [  4.81341180e+01,   1.86737400e+00,   2.33055019e+02,
            9.70800000e+02,   1.37724000e-01],
         ..., 
         [  5.00206640e+01,   2.55758000e+00,   1.94214740e+01,
            9.70800000e+02,   7.20720000e-02],
         [  5.05836110e+01,   1.03252600e+00,   1.41615804e+02,
            9.70800000e+02,   8.19790000e-02],
         [  4.81805500e+01,   1.97514800e+00,   1.82064707e+02,
            9.70800000e+02,   9.24340000e-02]]),
  'classes': dict_keys(['large drone', 'person', 'airplane', 'vehicle', 'medium drone', 'small drone', 'bird']),
  'features': dict_keys(['range', 'speed', 'heading', 'altitude', 'rcs']),
  'y': array([[0, 1, 0, ..., 0, 0, 0],
         [0, 1, 0, ..., 0, 0, 0],
         [0, 0, 0, ..., 0, 1, 0],
         ..., 
         [0, 1, 0, ..., 0, 0, 0],
         [0, 1, 0, ..., 0, 0, 0],
         [0, 0, 0, ..., 0, 1, 0]])}}

In [6]:
X = pd.DataFrame(data['drones']['X'], columns=data['drones']['features'])

In [14]:
from sklearn.preprocessing import normalize
X_norm = normalize(X)
X_norm.max(axis=0)


Out[14]:
array([  6.41139596e-02,   3.63866608e-03,   3.29462011e-01,
         9.99287767e-01,   1.70173731e-04])

In [8]:
from sklearn.decomposition import PCA
X_PCA = pd.DataFrame(PCA(2).fit_transform(X))
X_PCA.plot(kind='scatter', x=0, y=1)


Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f75cb83ae48>

In [9]:
from sklearn.decomposition import PCA
X_PCA_2 = pd.DataFrame(PCA(2).fit_transform(X[['rcs','speed', 'range']]))
X_PCA_2.plot(kind='scatter', x=0, y=1)


Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x7f75cb06ddd8>

In [17]:
y = pd.DataFrame(data['drones']['y'], columns=data['drones']['classes'])[['small drone', 'person']]

In [18]:
import seaborn as sns
Xy = X.copy()
Xy['small_drone'] = y['small drone']
Xy['person'] = y['person']
Xy['label'] = Xy['small_drone'].apply(lambda x: "small_drone" if x == 1 else "person")
del Xy['small_drone']
del Xy['person']
sns.pairplot(Xy, hue='label')


Out[18]:
<seaborn.axisgrid.PairGrid at 0x7fae5ccc01d0>

In [19]:
sns.pairplot(Xy[['speed', 'range', 'rcs', 'label']], hue='label', size=4)


Out[19]:
<seaborn.axisgrid.PairGrid at 0x7fae5cccc2e8>

In [20]:
Xy[['pca1', 'pca2']] = X_PCA_2
sns.pairplot(Xy[['pca1', 'pca2', 'label']], hue='label', size=6)


Out[20]:
<seaborn.axisgrid.PairGrid at 0x7fae59613ba8>

In [21]:
%matplotlib qt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
Xy_drones = Xy[Xy.label=="small_drone"]
xs = Xy_drones['rcs'].values
ys = Xy_drones['range'].values
zs = Xy_drones['speed'].values
ax.scatter(xs, ys, zs, c='r')
Xy_person = Xy[Xy.label=="person"]
xs = Xy_person['rcs'].values
ys = Xy_person['range'].values
zs = Xy_person['speed'].values
ax.scatter(xs, ys, zs, c='b')
ax.set_xlabel('RCS')
ax.set_ylabel('Range')
ax.set_zlabel('Speed')

plt.show()


---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-21-45ffa3e7bbb7> in <module>()
----> 1 get_ipython().magic('matplotlib qt')
      2 from mpl_toolkits.mplot3d import Axes3D
      3 fig = plt.figure()
      4 ax = fig.add_subplot(111, projection='3d')
      5 Xy_drones = Xy[Xy.label=="small_drone"]

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/interactiveshell.py in magic(self, arg_s)
   2305         magic_name, _, magic_arg_s = arg_s.partition(' ')
   2306         magic_name = magic_name.lstrip(prefilter.ESC_MAGIC)
-> 2307         return self.run_line_magic(magic_name, magic_arg_s)
   2308 
   2309     #-------------------------------------------------------------------------

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line)
   2226                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
   2227             with self.builtin_trap:
-> 2228                 result = fn(*args,**kwargs)
   2229             return result
   2230 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/magics/pylab.py in matplotlib(self, line)

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/magic.py in <lambda>(f, *a, **k)
    191     # but it's overkill for just that one bit of state.
    192     def magic_deco(arg):
--> 193         call = lambda f, *a, **k: f(*a, **k)
    194 
    195         if callable(arg):

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/magics/pylab.py in matplotlib(self, line)
     86         """
     87         args = magic_arguments.parse_argstring(self.matplotlib, line)
---> 88         gui, backend = self.shell.enable_matplotlib(args.gui)
     89         self._show_matplotlib_backend(args.gui, backend)
     90 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/interactiveshell.py in enable_matplotlib(self, gui)
   3099                 gui, backend = pt.find_gui_and_backend(self.pylab_gui_select)
   3100 
-> 3101         pt.activate_matplotlib(backend)
   3102         pt.configure_inline_support(self, backend)
   3103 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/IPython/core/pylabtools.py in activate_matplotlib(backend)
    273 
    274     import matplotlib.pyplot
--> 275     matplotlib.pyplot.switch_backend(backend)
    276 
    277     # This must be imported last in the matplotlib series, after

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/pyplot.py in switch_backend(newbackend)
    133     matplotlib.use(newbackend, warn=False, force=True)
    134     from matplotlib.backends import pylab_setup
--> 135     _backend_mod, new_figure_manager, draw_if_interactive, _show = pylab_setup()
    136 
    137 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/backends/__init__.py in pylab_setup()
     30     # imports. 0 means only perform absolute imports.
     31     backend_mod = __import__(backend_name,
---> 32                              globals(),locals(),[backend_name],0)
     33 
     34     # Things we pull in from all backends

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/backends/backend_qt4agg.py in <module>()
     15 from matplotlib.figure import Figure
     16 
---> 17 from .backend_qt5agg import NavigationToolbar2QTAgg
     18 from .backend_qt5agg import FigureCanvasQTAggBase
     19 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/backends/backend_qt5agg.py in <module>()
     16 
     17 from .backend_agg import FigureCanvasAgg
---> 18 from .backend_qt5 import QtCore
     19 from .backend_qt5 import QtGui
     20 from .backend_qt5 import FigureManagerQT

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/backends/backend_qt5.py in <module>()
     29     figureoptions = None
     30 
---> 31 from .qt_compat import QtCore, QtGui, QtWidgets, _getSaveFileName, __version__
     32 from matplotlib.backends.qt_editor.formsubplottool import UiSubplotTool
     33 

/home/axelmagn/Workspace/blacksage/reporting/ai-metrics/venv/lib/python3.4/site-packages/matplotlib/backends/qt_compat.py in <module>()
    124 
    125 else:  # try importing pyside
--> 126     from PySide import QtCore, QtGui, __version__, __version_info__
    127     if __version_info__ < (1, 0, 3):
    128         raise ImportError(

ImportError: libpyside.cpython-34m.so.1.2: cannot open shared object file: No such file or directory

In [ ]: