Source code for tethne.model.managers
"""
This module provides manager classes for generating, visualizing, and
analyzing :mod:`.model`\s.
The following managers are presently available:
.. autosummary::
:nosignatures:
dtm.DTMModelManager
mallet.MALLETModelManager
tap.TAPModelManager
More managers will be added regularly.
"""
import os
import re
import shutil
import tempfile
import subprocess
import numpy as np
from networkx import Graph
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel('ERROR')
from ...classes import GraphCollection
from ..social import TAPModel
[docs]class ModelManager(object):
"""
Base class for Model Managers.
"""
def __init__(self, outpath=None, temppath=None, **kwargs):
"""
Initialize the ModelManager.
Parameters
----------
outpath : str
Path to output directory.
"""
if temppath is None:
self.temp = tempfile.mkdtemp() # Temp directory for stuff.
else:
self.temp = temppath
self.outpath = outpath
self.prepped = False
self.ll = []
self.ll_iters = []
self.num_iters = 0
# def __del__(self):
# """
# Delete temporary directory and all files contained therein.
# """
#
# shutil.rmtree(self.temp)
[docs] def plot_ll(self):
"""
Plots LL/topic over iterations.
"""
import matplotlib.pyplot as plt
plt.plot(self.ll_iters, self.ll)
plt.xlabel('Iteration')
plt.ylabel('LL/Topic')
plt.savefig('{0}/ll.png'.format(self.outpath))
[docs] def prep(self, meta=['date', 'atitle', 'jtitle']):
"""
Generates a corpus that can be used as input for modeling.
Parameters
----------
meta : list
A list of keys onto :class:`.Paper` to include in the exported
metadata file. Default: ['date', 'jtitle']
"""
self._generate_corpus(meta)
self.prepped = True
[docs] def build(self, Z=20, max_iter=1000, prep=False, **kwargs):
"""
Start the modeling build procedure.
Parameters
----------
Z : int
Number of topics.
max_iter : int
Maximum number of modeling iterations.
prep : bool
(default: False) Perform :func:`.prep` before modeling.
"""
if not self.prepped:
if prep:
self.prep()
else:
raise RuntimeError('Not so fast! Call prep() or set prep=True.')
self.Z = Z
self._run_model(max_iter=max_iter, **kwargs) # The action happens here.
self.plot_ll()
self._load_model()
return self.model
[docs]class SocialModelManager(object):
"""
Base class for social model managers.
"""
def __init__(self, **kwargs):
pass
[docs] def build(self, max_iter=1000, **kwargs):
self._run_model(max_iter, **kwargs)
self._load_model()
from mallet import *
from dtm import *
from tap import *