首页 > 代码库 > Clojure数据分析秘笈 笔记
Clojure数据分析秘笈 笔记
Clojure数据分析秘笈
目录
- 1导入分析数据
- 2清洗和校验数据
- 3使用并发编程管理复杂度
- 4使用并行编程提高性能
- 5Cascalog
- 6使用Incanter数据集
- 7使用Incanter准备并执行数据分析
- 8使用Mathematica和R
- 9聚类、分类和使用Weka
- 10使用Incanter绘图
- 11创建网页图表
导入分析数据
- $ lein new getting-data
- 从CSV
- 从JSON
- 使用Incanter
- 从JDBC
- 从XML
- 利用zipper浏览XML结构?
- ->> 流水线处理
- 从网页
- 项目依赖:project.clj
- :dependencies [[org.clojure/clojure "1.4.0"] [incanter/incanter-core "1.4.1"] [enlive "1.0.1"]]
- (require ...)
- (use ‘incanter.core)
- (import [java.net URL]) #?这里的require、use、import 3条指令有什么区别?
- (let [html ... table (html/select html [:table#data]) headers (->> ...) rows (->> ...) (dataset headers rows)))
- 这里的主要html处理工作都在html/select调用上
- 项目依赖:project.clj
- 读取RDF
- 使用SPARQL*
清洗和校验数据
- 正则表达式
- (def regex1 #"(?x) (\d{3}) ... ")
- if-let?
- 同义词
- 去重 (defn fuzzy= ...
- <= 这个指令是干嘛用的?忘了
- 标准化数字格式
- 调整词频
- 标准化日期和时间
- clj-time库?(对Joda的封装)
- (defprotocol ToFormatter (->formatter [fmt]))
- (extend-protocol ToFormatter ...)
- 大数据集的延迟处理
- lazy ...
- 抽样
- (defn range-from [x] (partial + x) (range)))
- 修正拼写错误
- 训练?编辑距离=1 or 2
- correct选出频率最高的
- 解析自定义格式
- (defn nl [] (chr-in #{\newline \return}))
- <|函数?
- Valip校验(DSL?)
使用并发编程管理复杂度
- STM
- (def total-hu (ref 0)) ;deref或@
- (dosync ...
- (doall (->> (lazy-read-csv data-file) with-header ... (float (/ @total-hu ...
- agent
- (def sums (agent 0)) --> (send sums + 4) --> @sums => 4
- (defn force-val [a] (await a) @a)
- commute
- 将更新操作加入队列,待引用未被占用时再执行:(dosync (commute total-hu #(+ sum-hu %)) ...
- 将agent和STM结合*
- (defn get-thunk [data-ref] (dosync (when-let [[s & ss] (seq @data-ref)] (ref-set data-ref ss) s)))
- ensure*
- 将安全的副作用引入STM*
- (defn debug! [msg] (io! (print (str msg \newline)) (.flush *out*)))
- validator:(set-validator! a v)
- watcher:(add-watch a :counter w)
- 从agent中错误恢复:
- set-error-mode! :fail/:continue
- set-error-handler!
- sized queue
- (take 20 (seque 5 (range Integer/MAX_VALUE)))
使用并行编程提高性能
- pmap
- Incanter
- 使用蒙特卡罗模拟划分使得pmap性能提升
- 使用模拟退火最优化分块大小
- reducers
- 如果是Java1.6需要ForkJoin库:[org.codehaus.jsr166-mirror/jsr166y "1.7.0"]
- (defn count-in-circle-r [n] (->>
- (repeatedly n rand-input)
- vec (r/map center-dist) (r/filter #(<= % 1.0)) (r/fold + count-items)))
- OpenCL和Calx
- 编译C代码???
- (defn -main [] ... (with-cl (with-program ... (let [out-seq (vec @(enqueue-read out))] ...
- 类型提示
- (defn mc-pi-hint (^double [n] ...
- Criterium基准
- (use ‘criterium.core) --> time / bench
Cascalog
- (?<- (stdout) (?name) (full-name _ ?name)) 基于实例的查询?IBQ
- 定义新操作符:defmapop defmapcatop deffilterop defbufferop defaggregateop ...
- 使用Pallet在EC2上执行查询*
使用Incanter数据集
- $选择列/行 ?
- $where
- $group-by
- $join
使用Incanter准备并执行数据分析
- $rollup
- 使用Zoo处理时间序列
- bootstrapping
使用Mathematica和R
- Clojuratica?怎么连接的(哦,Mathematica提供了Java接口!)
- FindRoot[{Exp[x-2] == y, y^2==x}, {{x,1}, {y,1}}]
- => (math (FindRoot [(==(Exp (- x 2)) y) (== (Power y 2) x)] [[x 1] [y 1]]))
- REngine/Rserve
聚类、分类和使用Weka
- ARFF格式数据?
- 层次聚类
- SOM聚类
- 决策树分类:(defanalysis j48 J48 buildClassifier [... options ...])
- 朴素贝叶斯
- SVM
- Apriori查找关联
使用Incanter绘图
创建网页图表
- Ring和Compojure
- Hiccup
- ClojureScript
- NVD3
- 力向布局(?)
- D3
Clojure数据分析秘笈 笔记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。