虽然是周六,但是手头的活没干完,不敢休息
今天上午学院安排了IBM公司的讲座,关于Watson Analytics的。下午与晚上是自由时间,宅寝室里敲代码。
先来说说上午的 WA 讲座吧,我个人觉得是非常好用的东西。
Standard process for data mining
跨行业数据的标准挖掘过程
商业理解:商业角度
数据理解:数据收集描绘
数据准备:为了建模准备
建模分析:多种建模方法
模型评估:选择最佳模型
模型部署:展现结果
然后是WA,WA是继IBM公司的SPSS和Modeler后的又一款重量级产品:
1. 一款云上数据分析解决方案。WA可以使用自动视图引导数据发现和预测分析,并生成半自动的报表。
2. WA实现了基于自然语言的认知服务,可以为商务人士即时提供预测和可视化分析工具,WA推出基于云服务的免费增值应用版本,可在电脑及移动设备上使用。
3. WA可提供自助式分析功能,包括数据访问、数据清洗、数据仓库、帮助企业用户获取和准备数据,并基于此进行分析、实现结果可视化、为使用者采取有效行动和开展进一步交互提供基础和便利。
然后IBM公司的leader给我们演示了关于2007-2011好莱坞电影信息的数据挖掘~
总的来说,WA的理念是:汇总你的数据,运行各种可能的方法,为你提供结果,实现基本的可视化、特定领域的可视化。
可以说是半自动化生成报表的利器,而且挺精美的。
普及的关键,还是价格问题。
免费版0刀,只能处理列很窄的数据集。个人版要30刀每月,专业版则是80刀。
等我有钱了我再考虑专业版吧!
----------------------------------下面是今天完成的任务------------------------------------
很遗憾!今天依然没有完成全部工作,目前进行到 07的尾巴出了点Bug,还剩下08,09,10,11。我争取周日早点起床干活!
什么是plist?
plist是 property list,是XML文件格式,存储了结构化数据。
它是IOS中非常常见的,适合存储多种类型的数据,而且非常方便!非常方便!!
What’s not to like!
06 部分,我们需要保持 CL 的item,因此需要使用 NSCoder 系统。它可以让对象存储数据为结构化形式的文件。
这里又有一个 encoding 和 decoding 的概念区分!converting obj to files and back again!
简单来说就是:
第一阶段:iPhone 存储 中的 obj 保存到 iPhone 的 flash drive 中,以plist文件的形式。
第二阶段:App is terminated (终结得) ,啥也不干。
第三阶段:App is launched,plist 文件中的数据加载回obj。
保存的方法:(注意encode)
// 保存item 得到items array的内容,分两步骤转换为二进制数据块,写入文件
func saveChecklistItems() {
let data = NSMutableData()
let archiver = NSKeyedArchiver(forWritingWith: data)
archiver.encode(items, forKey: "ChecklistItems")
archiver.finishEncoding()
data.write(to: dataFilePath(), atomically: true)
}
加载的方法:(注意decode)
// 加载 items
func loadChecklistItems() {
//1. get datafilepath
let path = dataFilePath()
//2 load the contents of Checklists.plist into a new Data obj
if let data = try? Data(contentsOf: path) {
//3 find plist, load the entire array and its contents from the file
let unarchiver = NSKeyedUnarchiver(forReadingWith: data)
items = unarchiver.decodeObject(forKey: "ChecklistItems") as! [ChecklistItem]
unarchiver.finishDecoding()
}
}
06部分还是很简单的,最后如作者所言:
Awesome! You've written an app that not only lets you add and edit data, but that also persists the data between sessions.
Don't rush through these tutorials - there are no prizes for finishing first.
Rather than going fast, take your time to truly understand what you've been doing!
这一刻我感到书的作者简直是哲学家,治愈了我们这群慢工出细活的拖延症。
07部分需要创建多重Checklists了。
毕竟用户可能有多个表要打卡/记录嘛。比如亲友的生日,比如普通日程,比如最近好看的电影。。。需要分类记录。
required init?(coder aDecoder: NSCoder) {
//1
lists = [Checklist]()
//2
super.init(coder: aDecoder)
//3
var list = Checklist(name: "Birthdays")
lists.append(list)
//4
list = Checklist(name: "Groceries")
lists.append(list)
list = Checklist(name: "Cool Apps")
lists.append(list)
list = Checklist(name: "To Do")
lists.append(list)
}
存在 4种 创建 table view cells 的方法:
1. Using prototype cells.
2. Using static cells.
3. Using a nib file.
4. Using dequeueReusableCell
注意:总是询问 table view 是否存在cell可以被循环利用,而不要频繁去创建新的Cell ( 以免内存溢出 )
对象创建远远比对象复用慢得多!!
为了更好的性能,请复用Cell !
考虑一下,我创建多个Checklists,和创建多个ChecklistItem,类本质是否相同呢?几乎是相同的!
我需要做的额外工作只是,
让第一个导航条指向拥有众多Checklists的根表视图,
然后再点击其中单个Checklist进入对应的表视图,
然后再操作单个Item。
而且我需要对根表视图拥有与单个表视图同样的操作:编辑、增加、删除Checklist(Item)
(:此处我很想插一个图,但是CSDN插图实在太麻烦了!解释又很费劲!)
很明显这里又要用到delegate代理了。
还是来看看需要实现的协议吧:
protocol ListDetailViewControllerDelegate: class {
func listDetailViewControllerDidCancel(_ controller: ListDetailViewController)
func listDetailViewController(_ controller: ListDetailViewController,
didFinishAdding checklist: Checklist)
func listDetailViewController(_ controller: ListDetailViewController,
didFinishEditing checklist: Checklist)
}
今天遗留的问题是:
我在根表视图Checklists点击 + 号, 可以进入Add页面,但是点击Done不起作用。点击Cancel也是如此。
明早起来好好想想。。。。