/
api_template.clj
171 lines (146 loc) · 5.38 KB
/
api_template.clj
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
(ns tablecloth.api.api-template
(:refer-clojure :exclude [group-by drop concat rand-nth first last shuffle])
(:require [tech.v3.datatype.export-symbols :as exporter]))
(exporter/export-symbols tech.v3.datatype
clone)
(exporter/export-symbols tech.v3.dataset
column-count
row-count
set-dataset-name
dataset-name
column
has-column?
write!)
(def ^{:deprecated "Use `write!` instead."} write-csv! write!)
(exporter/export-symbols tech.v3.dataset.print
dataset->str)
(exporter/export-symbols tablecloth.api.utils
column-names
write-nippy!
read-nippy
grouped?
unmark-group
mark-as-group
as-regular-dataset
process-group-data)
(exporter/export-symbols tablecloth.api.dataset
dataset?
empty-ds?
dataset
shape
info
columns
rows
print-dataset
concat
concat-copying)
(exporter/export-symbols tablecloth.api.group-by
group-by
ungroup
groups->seq
groups->map)
(exporter/export-symbols tablecloth.api.columns
select-columns
drop-columns
rename-columns
add-column
add-columns
add-or-replace-column
add-or-replace-columns
map-columns
update-columns
reorder-columns
convert-types
->array)
(exporter/export-symbols tablecloth.api.rows
select-rows
drop-rows
head
tail
shuffle
random
rand-nth
first
last
by-rank)
(exporter/export-symbols tablecloth.api.aggregate
aggregate
aggregate-columns)
(exporter/export-symbols tablecloth.api.order-by
order-by)
(exporter/export-symbols tablecloth.api.unique-by
unique-by)
(exporter/export-symbols tablecloth.api.missing
select-missing
drop-missing
replace-missing
fill-range-replace)
(exporter/export-symbols tablecloth.api.join-separate
join-columns
separate-column)
(exporter/export-symbols tablecloth.api.fold-unroll
fold-by
unroll)
(exporter/export-symbols tablecloth.api.reshape
pivot->longer
pivot->wider)
(exporter/export-symbols tablecloth.api.join-concat-ds
left-join
right-join
inner-join
asof-join
full-join
semi-join
anti-join
cross-join
expand
complete
intersect
difference
union
bind
append)
(exporter/export-symbols tablecloth.api.split
split
split->seq)
;;
(defn- select-or-drop
"Select columns and rows"
[fc fs ds columns-selector rows-selector]
(let [ds (if (and columns-selector
(not= :all columns-selector))
(fc ds columns-selector)
ds)]
(if (and rows-selector
(not= :all rows-selector))
(fs ds rows-selector)
ds)))
(defn- select-or-drop-docstring
[op]
(str op " columns and rows."))
(def ^{:doc (select-or-drop-docstring "Select")
:arglists '([ds columns-selector rows-selector])}
select (partial select-or-drop select-columns select-rows))
(def ^{:doc (select-or-drop-docstring "Drop")
:arglists '([ds columns-selector rows-selector])}
drop (partial select-or-drop drop-columns drop-rows))
;; tibble macro
(defmacro let-dataset
([bindings] `(let-dataset ~bindings nil))
([bindings options]
(let [cols (take-nth 2 bindings)
col-defs (mapv vector (map keyword cols) cols)]
`(let [~@bindings]
(dataset ~col-defs ~options)))))
;; ungroup/group wrapper
(defmacro without-grouping->
[ds & r]
`(-> ~ds
(unmark-group)
~@r
(mark-as-group)))
(comment
(exporter/write-api! 'tablecloth.api.api-template
'tablecloth.api
"src/tablecloth/api.clj"
'[group-by drop concat rand-nth first last shuffle]))