-
Notifications
You must be signed in to change notification settings - Fork 11
/
pivottablejs.py
81 lines (72 loc) · 3.28 KB
/
pivottablejs.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# %install_ext http://nicolas.kruchten.com/pivottable/jupyter/pivottablejs.py
# %load_ext pivottablejs
# %pivottablejs data_frame
__version__ = '2.21.0'
template = """
<!DOCTYPE html>
<html>
<head>
<title>PivotTable.js</title>
<!-- external libs from cdnjs -->
<link rel="stylesheet" type="text/css" href="%(static)s/pivot-ajax/c3.min.css">
<script type="text/javascript" src="%(static)s/pivot-ajax/jquery.min.js"></script>
<script type="text/javascript" src="%(static)s/pivot-ajax/jquery-ui.min.js"></script>
<script type="text/javascript" src="%(static)s/pivot-ajax/d3.min.js"></script>
<script type="text/javascript" src="%(static)s/pivot-ajax/jquery.csv-0.71.min.js"></script>
<script type="text/javascript" src="%(static)s/pivot-ajax/c3.min.js"></script>
<link rel="stylesheet" type="text/css" href="%(static)s/pivottable/pivot.min.css">
<script type="text/javascript" src="%(static)s/pivottable/pivot.min.js"></script>
<script type="text/javascript" src="%(static)s/pivottable/d3_renderers.min.js"></script>
<script type="text/javascript" src="%(static)s/pivottable/c3_renderers.min.js"></script>
<script type="text/javascript" src="%(static)s/pivottable/export_renderers.min.js"></script>
<style>
body {font-family: Verdana;}
.node {
border: solid 1px white;
font: 10px sans-serif;
line-height: 12px;
overflow: hidden;
position: absolute;
text-indent: 2px;
}
.c3-line, .c3-focused {stroke-width: 3px !important;}
.c3-bar {stroke: white !important; stroke-width: 1;}
.c3 text { font-size: 12px; color: grey;}
.tick line {stroke: white;}
.c3-axis path {stroke: grey;}
.c3-circle { opacity: 1 !important; }
</style>
</head>
<body>
<script type="text/javascript">
$(function(){
if(window.location != window.parent.location)
$("<a>", {target:"_blank", href:""})
.text("[pop out]").prependTo($("body"));
$("#output").pivotUI(
$.csv.toArrays($("#output").text()),
{
renderers: $.extend(
$.pivotUtilities.renderers,
$.pivotUtilities.c3_renderers,
$.pivotUtilities.d3_renderers,
$.pivotUtilities.export_renderers
),
hiddenAttributes: [""]
}
).show();
});
</script>
<div id="output" style="display: none;">%(div)s</div>
</body>
</html>
"""
from IPython.display import IFrame
def pivot_ui(df, outfile_path = "pivottablejs.html", width="100%", height="500"):
# FIXME: we shouldn't hard-code the port here
port = 8888 # get_config().NotebookApp.port
static_path = 'http://localhost:%s' % port
with open(outfile_path, 'w') as outfile:
outfile.write(template % {'div': df.to_csv(),
'static': '%s/static' % static_path})
return IFrame(src=outfile_path, width=width, height=height)