数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

基于 Python 的顾客细分
在这篇文章中,我要谈的东西是相对简单,但却是对任何业务都很重要的: 客户细分 。客户细分的核心是能够识别不同类型的客户,然后知道如何找到更多这样的人,这样你就可以…你猜对了,获得更多的客户!在这篇文章中,我将详细介绍您如何可以使用K-均值聚类来完成一些客户细分方面的探索。
我们的数据
我们使用的数据来自 John Foreman 的《智能数据》。该数据集包含了营销快讯/电邮推广(电子邮件发送报价)和来自客户的交易层面数据(提供的数据来自客户期望和最终购买)这两个信息。
Python
import pandas as pd
df_offers = pd.read_excel(“./WineKMC.xlsx”, sheetname=0)
df_offers.columns = [“offer_id”, “campaign”, “varietal”, “min_qty”, “discount”, “origin”, “past_peak”]
df_offers.head()
交易层面的数据…
Python
df_transactions = pd.read_excel(“./WineKMC.xlsx”, sheetname=1)
df_transactions.columns = [“customer_name”, “offer_id”]
df_transactions[‘n’] = 1
df_transactions.head()
K-均值快速入门
为了细分客户,我们需要一种方法来对它们进行比较。要做到这一点,我们将使用K-均值聚类。K-均值是一种获取一个数据集,并从中发现具有类似性质点的组合(或簇)的方法。K-均值的工作原理是,最小化各个点与各簇中点之间的距离,并以此来进行分组。
想一个最简单的例子。如果我告诉你为下面这些点创建 3 个组,并在每个组的中间绘制一个星星,你会怎么做?
可能(或希望)是这样的…
在K-均值中,“ x ”的被称为“重心”,并指出(你猜对了),给定簇的中心。我不打算详细讲述K-均值实际上是怎什么样运作的,但希望这说明会给你一个不错的想法。
将客户分类
好吧,那么,如何我们的客户该怎么分类呢?因为我们试图更多地了解我们客户的行为,我们可以用他们的行为(根据他们是否在收到报价后进行了采购),以此将有类似想法的客户分类在一起。然后,我们可以研究这些群体,来寻找模式和趋势,来帮助我们制定未来的报价。
我们最需要的就是一种比较客户的方法。要做到这一点,我们要创建一个矩阵,包含每个客户和他们是否回应了报价的一个 0/1 指标。在 Python 中,这是很容易做到的:
Python
# join the offers and transactions table
df = pd.merge(df_offers, df_transactions)
# create a “pivot table” which will give us the number of times each customer responded to a given offer
matrix = df.pivot_table(index=[‘customer_name’], columns=[‘offer_id’], values=’n’)
# a little tidying up. fill NA values with 0 and make the index into a column
matrix = matrix.fillna(0).reset_index()
# save a list of the 0/1 columns. we’ll use these a bit later
x_cols = matrix.columns[1:]
现在创建簇,我们将使用 scikit-learn 库中 KMeans 的功能。我任意选择了 5 个簇。我一般的经验法则是,我进行分类的记录数至少是类别数的 7 倍。
Python
from sklearn.cluster import KMeans
cluster = KMeans(n_clusters=5)
# slice matrix so we only include the 0/1 indicator columns in the clustering
matrix[‘cluster’] = cluster.fit_predict(matrix[matrix.columns[2:]])
matrix.cluster.value_counts()
232
122
420
015
311
dtype: int64
簇可视化
一个很酷的技巧,这可能是学校没有教你的,主成分分析。它有很多用途,但今天我们将用它来将我们的多维数据集转化到一个二维数据集。 你问为什么要这样做?一旦它在二维中(或简单地说,它有 2 列),它就会变得更容易绘制!
再一次, scikit-learn 发挥作用了!
Python
from sklearn.decomposition import PCA
pca = PCA(n_components=2)
matrix[‘x’] = pca.fit_transform(matrix[x_cols])[:,0]
matrix[‘y’] = pca.fit_transform(matrix[x_cols])[:,1]
matrix = matrix.reset_index()
customer_clusters = matrix[[‘customer_name’, ‘cluster’, ‘x’, ‘y’]]
customer_clusters.head()
我们所做的就是我们把 x_cols 列设定为 0/1 指标变量,我们已经把他们变成了一个二维的数据集。我们任取一列,称之为 x,然后把其余剩下的叫 y。现在我们可以把每一个点都对应到一个散点图中。我们将基于它的簇编码每个点的颜色,可以让它们更清晰。
Python
df = pd.merge(df_transactions, customer_clusters)
df = pd.merge(df_offers, df)
from ggplot import *
ggplot(df, aes(x=’x’, y=’y’, color=’cluster’)) +
geom_point(size=75) +
ggtitle(“Customers Grouped by Cluster”)
如果你要搞点花样,你也可以画出各簇的中心。这些都存储在 KMeans 实例中的 cluster_centers_ 变量。确保你也可以将簇心转换为二维投影。
Python
cluster_centers = pca.transform(cluster.cluster_centers_)
cluster_centers = pd.DataFrame(cluster_centers, columns=[‘x’, ‘y’])
cluster_centers[‘cluster’] = range(0, len(cluster_centers))
ggplot(df, aes(x=’x’, y=’y’, color=’cluster’)) +
geom_point(size=75) +
geom_point(cluster_centers, size=500) +
ggtitle(“Customers Grouped by Cluster”)
对簇更深的挖掘
让我们在簇中更深入得挖掘吧。以第 4 簇为例。如果我们挑出簇4,并将其与余下的客户比较,我们就可以开始寻找可供我们利用的、有趣的方方面面。
作为一个基准,看看簇4与其它簇的葡萄品种对比。事实证明,几乎所有的Cabernet Sauvignon(赤霞珠)都是由簇4的成员购买的。另外,簇4中没有一个人买了Espumante(意大利苏打白葡萄酒)。
Python
df[‘is_4’] = df.cluster==4
df.groupby(“is_4”).varietal.value_counts()
你还可以细分出数值功能。例如,看看为何4号簇与其它簇在min_qty的平均值上表现迥异。似乎簇4的成员都喜欢大批量购买!
Python
df.groupby(“is_4”)[[‘min_qty’, ‘discount’]].mean()

结语
虽然它不会神奇地告诉你所有的答案,但分群是一个很好的探索性尝试,可以帮助你更多地了解你的客户。有关K-均值和客户细分的更多信息,请查看以下资源:
INSEAD Analytics Cluster Analysis and Segmentation Post
Customer Segmentation at Bain & Company
Customer Segmentation Wikipedia 本文由 伯乐在线 – 高冷的精神污染 翻译, toolate 校稿。
英文出处: Greg 。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-19 16:19:00
摘要:许多高级程序员瞧不上VBA。因为程序员是有鄙视链的:汇编 >C >C++ >Python >Java及C#及PHP(这三者相互撕) >VB >HTML。在这长长的鄙视链中,甚至都没有VBA的位置。
可是, Excel +VBA是图灵完备的(谢谢 @Octolet的精辟总结),所以被程序员用来耍酷的各类性感语言能实现的大部分功能,Excel+VBA都能实现,而且往往是以更高效更快捷的方式,在这里不谈效率和优雅。而且考虑到大部分普通群众是没有编程环境的(各种依赖各种包,各种OS各种编译环境,还有IDE),然而使用VBA,只需要打开装机自带的Office,然后按下Alt+F11就自动进入编程和执行环境;甚至可以更简单的通过录制宏来解决写程序的问题,只需要在简单的代码基础上修修补补就可以执行。再考虑到VBA和Office各软件的完美整合,所以在便捷性方面,VBA是无可比拟的。最后,Office+VBA的分享性和移植性很强,任何测试通过的程序放到别的机器上也可轻易执行;而其他程序,哪怕是一段最简单的“Hello World”,也不一定。因此本文讨论各种通过Excel+VBA能实现的各种炫酷功能(也会拓展到Office+VBA),主要是为Professional Service以及各行各业不写程序但是又严重依赖于Office的职场人士服务的。
曾经有一个朋友和我说,“Excel根本不需要编程,像我这样的Excel大牛靠函数和自定义函数能解决所有的问题。”对于这样的评论,我想起自己小学时的一段经历。因为不能理解虚数i(i^2 = -1)的价值,问我爸i有卵用我爸说,“等你长大了,遇到更多的问题,就知道i的价值。”
1、自动打印
刚进职场的新人,只要爸爸不是李刚,基本都做过影帝影后(影=印,各种复印打印的体力劳动)。特别是咨询投行服务行业,在某次给客户的大汇报或者大忽悠会议之前,花数小时或者整晚来打印数个文件,并不是天方夜谭。而且这件事情是对着同样一堆不断修改的文件,会经常不断重复发生。我加入BCG的第一个项目,就是帮助某大型企业从上到下设计KPI体系并实施。从上到下涉及到几十个部门,大概有100多张的KPI表格需要完成,这些KPI表格分布在各个Excel文件里。我们4个咨询顾问的任务:
设定好KPI的基本格式,然后每个顾问负责几个部门,在Excel里不断修改KPI表格,打印出来后去各个当事人及其领导那里讨论并修改
每周把所有的Excel文件中的KPI表格归集在一起,按顺序分部门打印出来,并需要多份,找负责该项目的HR头儿汇报进度和情况
这里面有个费时费力的环节,每周需要在多个Excel文件中找出目标Worksheet,然后选定合适的区域作为输出的表格,按照一定的格式和一定的顺序,打印出这100多张表格。之前我们全是凭借人力,每周由一个Analyst把所有最新的Excel文件收集在一起,然后挨个打开文件选中合适的Worksheet,选中区域设置好格式进行打印。每进行一次,几乎耗费一两个小时,还不能保证不出错。
于是写下了我的第一个VBA程序,而且基本上是宏录制之后来改的,没有使用参考书及搜索引擎,全靠F1和自动提示,所以贴出来特别纪念一下。实现的功能就是将上述的人肉实现的功能全部自动化。按下一个妞,就慢慢等着打印机按顺序出结果吧。
后来这个程序的升级版是:调度多台打印机,进一步提高效率,以及将打印机卡纸造成队列错误的概率降到极小的范围内。
2、制作图表及GIF动画
图表制作是每个Office一族的必备任务,制得一手好表格,绝对是升职加薪和偷懒放风的利器。在回答( 黄焖鸡米饭是怎么火起来的? – 何明科的回答 ),就利用Excel+VBA做出数张炫酷的信息地图,利用VBA为每个省的图形涂色。
(涂色部分来自于网上的一段程序,制作GIF动画的是自己完成的)
同时,为了进一步增强炫酷结果,还利用VBA将这些连续变化的图表做成了GIF动画,可惜知乎不支持GIF的显示。

3、制作复杂的分析图表
下图是研究各个车型之间的用户相互转换关系,因为要将一维的转化率向量,变成两维的矩阵,所以使用了如下的复杂公式。 =IF(ISERROR(OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),”-“,COLUMN(A4)),$D$3:$D$600,FALSE),0)/OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),”-“,ROW(A4)),$D$3:$D$600,FALSE),0)),””,OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),”-“,COLUMN(A4)),$D$3:$D$600,FALSE),0)/OFFSET($C$2,MATCH(CONCATENATE(ROW(A4),”-“,ROW(A4)),$D$3:$D$600,FALSE),0))
同时为了用颜色的深浅来表示转化率的大小关系而便于比较,使用了VBA对下面的矩阵进行着色。当然有人肯定会说可以使用条件化格式,但是使用VBA保持了最高灵活度和效率。

4、根据格式化信息,生成标准的word文件
这是帮朋友实现的一个项目,他们实验室是研究某类事故并对重大事故进行鉴定,最后发布word版的正式报告。之前的工作流程是在专业的软件中完成计算和仿真,最后按照正式报告八股文的行文,把各种关键信息填进去,最后写成word文件。写报告的过程枯燥而没有技术含量,但却要反复进行。通过下图的Word+VBA,完成主要的交互界面并连接计算软件。在通过简单的交互获取主要信息后,在后台完成计算并将主要信息填写入八股文的word模版,最终完成报告,同时将结构化的信息存入Access数据库。
希望有机会和 @Raymond Wang 和 @金有元 等大律师合作,将Termsheet的书写及Termsheet到SPA及M&A等的法律文件书写工作彻底自动化。
5、通过Excel管理分布的任务流,并将Excel表格输出到Powerpoint
这是协助某国际大型汽车制造厂完成新品牌及其新款车型上市,面临车型即将断档的窘境,该新车型的上市非常关键,不能错失时间节点。然而,新车型上市涉及到无数分支:制造、产品、市场、渠道、营销、公关、财务等等,同时还要协调欧洲的两个总部以及中国的两个分部。这次咨询的核心任务就是项目管理,总控整个大项目的进度,并每周向中国区的CEO汇报进度并发掘出易出现问题的关键节点以调配资源。我们4个咨询顾问分配下去各自负责几个部门或者项目分支,和团队一起规划流程、画甘特图、确认里程碑及时间点、安排负责人等等。当每天回到办公室大家将进度汇总在一起的时候发现了挑战及难点,每条任务线并不是独立发展的,而是各条任务线交织在一起并互相影响。
某些核心人员在多个任务线出现。比如:负责预算的财务人员,几乎要出现在各条线中负责相关预算的审批环节
某些任务线的里程碑是其他任务线里程碑的必要条件而相互关联。比如:新车的下线时间影响发布会的时间,相关法规测试的通过又影响车辆的下线时间等等
当任务线增多以及任务线之间的交叉越发频繁的时候,汇总的任务将会几何级数增加,这就是我们在项目过程中遇到的问题。于是我利用Excel+VBA完成了这个工作的自动化。主要实现的功能:
自动将4个顾问手中分散的Excel文件汇集在一起形成一个大的总表,如下图
各顾问手中的表格是按照部门维度来划分的,汇总后需要按照不同的维度来输出不同类型的表格,比如:按任务线输出表格、按责任人输出表格、所有延误任务的表格、所有需要资源重点投入任务的表格等等

在此基础之上,还要将上面提到的各种维度下的所有表格(大概有200多张),按要求格式粘贴到PPT中,每周提交给中国区的总部进行汇报和评估。密密麻麻的表格如下图。于是,我又写了一个程序将Excel中的表格输出到Powerpoint中,将一个秘书每次需要数小时才能完成的工作,简化成了一键发布,并可以在Excel中完成对PPT的更新。

这个项目的程序量不小,近似于写了一个迷你版的Microsoft Project来进行项目管理。

最后,下图中密密麻麻的PPT每周需要更新一次,每次都是快100张的工作量,然而基本上都是靠Excel来自动完成更新的。因为PPT的模版每次变化不大,我将这些模版记录下来,每周更新的时候只要根据Excel中最新的数据更改PPT中的数据即可。

6、根据结果倒推假设
一般的Financial Model都是根据重重假设计算最终结果。而在为某顶级手机品牌服务的过程中,我们却遭遇了逆向的尴尬。本来是根据地面销售人员的一定服务水平,计算所需要的销售人员数量;结果在项目过程中,总部已经确定好了销售人数的Head Count,转而要求我们根据HC确定服务水平。然而,服务水平不是一个单变量,是由零售店的覆盖率、销售拜访频率、拜访中的服务深度等多重因素来决定的,同时还可以根据一线至无线城市来变化。于是只好再次寄出Excel+VBA法宝。先根据常规思路建立好Financial Model,得出HC的初步结果。然后写VBA程序,根据不同的情景、不同的优先级以及不同的权重来调节零售店的覆盖率、销售拜访频率、拜访中的服务深度等多因素,同时设定这几大因素的可接受范围,逐步逼近HC的预设值。
如果没有程序,以前基本是靠人工手动调节来凑结果,而且因为各种情景的不同,还需要多次调节。而通过程序,基本是自动完成,还可智能得设置优先级及权重,无需人工参与。
7、海量下载Bloomberg数据并完成分析
通过Bloomberg的VBA API,海量下载数百只目标股票的tick data以及order book。

并根据实现构建好的数学模型,在后台完成计算,将上述的实时数据转化成每只股票实时的trading cost,实时展现在交易员最常用的Excel界面中,方便交易员评估当下的交易成本以便于优化交易策略。

8、结语
计算了一下,我在BCG做了三年咨询顾问,大概写了几万行VBA程序(都是自己手工输入的,没有复制拷贝和系统自动生成),每个项目一千至几千行程序不等。最后将Excel用成了中控界面,类似EMACS,在Excel可以随意操控全公司的打印机、Word、Powerpoint等等,自动完成各种任务以及数据更新和抓取。因为Excel的数据更结构化,所以将其作为中控平台,比Word和Powerpoint更有优势。
最后,这些程序中的一些公共模块,打包给了BCG Global IT,BCG给了我一个Sponsorship去Stanford GSB读书。程序的注释行里面有我几个好朋友、亲人及导师的名字,祝他们一生平安。
本文为专栏文章,来自:数据冰山,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/10455.html 。
数据分析
2016-03-18 23:09:00
2010年,美国各大媒体报道了这样一则新闻:
在南卡罗来纳州的多切斯特县,警察通过智能电表收集上来的各户用电情况分析,抓住了一个在家里种植大麻的人。
这件事引起了美国社会的广泛讨论: 大数据 能够如何帮助我们解决过去的难题,以及这项技术对未来社会会产生什么样的影响?


毒品问题是美国社会的一大毒瘤 到了 大数据 时代 私自种植毒品者的好日子就快到头了

问题描述:毒品问题一直是美国社会的一大毒瘤 过去美国政府一直把缉毒重点放在切断来自南美洲的毒品供应上,但仍然无法完全禁止毒品泛滥。

其中一个很重要的原因就是,提炼毒品所需要的大麻,种植起来非常容易,甚至可以自己在家种植。 美国马兰州巴尔第摩市当地的一些穷人把房屋的门窗钉死后,在里面偷偷用LED灯种植大麻,因偏僻荒弃,这里很快成了毒品种植者的天堂。
在环境优美,生活水准高的西雅图地区同样发生了这样的情况。
在西雅图把门窗钉起来种毒品自然是行不通的,但是毒品种植者也有办法。
有一家人花了50万美元,买下了一栋周围种满了玫瑰花的豪宅。这栋四卧两厅的大宅子其实没有人住,占据里面的是658株盆栽大麻。
房主每年卖大麻的收入,不仅足够付房子的分期付款和电费,而且还让他攒够了首付又买了一栋房子。
类似的情况在美国、加拿大均有发生。
据估计,仅加拿大的不列颠哥伦比亚省,每年这种盆栽大麻的收入就高达65亿美元,在当地是仅次于石油的第二大生意。

▼是否对这一类街区进行重点排查是否就能解决问题呢? 答案并不如我们想象的那么简单。
由于种植毒品的人分布的地域非常广,而且做事隐秘,定位这样种植毒品的房屋的成本非常高。
再加上美国宪法的第四修正案规定“人人具有保障人身、住所、文件及财物的安全,不受无理之搜查和扣押的权利”,警察在没有证据时不得随便进入这些房屋进行搜查。
因此,过去警察虽然知道一些嫌犯可能在种植毒品,也只能望洋兴叹,这使得美国的毒品屡禁不止。
但是到了大数据时代,私自种植毒品者的好日子就快到头了。
截至2011年,仅俄亥俄一个州,警察就用类似的方法抓到了60个这样的大麻种植犯罪嫌疑人。
▼大数据是如何帮助警察提高定位效率的呢?
过去,供电公司使用的是老式电表,只能记录每家每月的用电量。但是从十几年前开始,智能电表的普及,不仅能够记录用电量,还能够记录用电模式。
因LED灯需日夜开启,种植大麻的房子用电模式和一般居家是不同的,只要把每家每户的用电模式和一般居家用电模式进行对比,就能很容易地圈定出一些犯罪嫌疑人。
在这个美国警察查处毒品种植的案例,我们看到了大数据思维的三个亮点:
第一是,用统计规律和个案对比,做到精准定位。
第二是,社会其实已经默认了在取证时,利用相关性代替直接证据,即我们大数据思维所说的, 强相关性代替因果关系 。
第三是,由于采取了机器,执法的成本,或者更广泛地讲,运营的成本,在大数据时代会大幅下降。


美国一半小型企业(包括餐馆等)寿命不超过5年
大数据如何帮忙?
大数据在商业活动中从细节到整体,再从整体到细节双向的流动,使得我们不仅能够利用大数据对商业进行整体提升,更能够精确到每一个细节。
这在互联网公司已经不是什么稀奇事,不过即使在所谓的传统行业里,大数据也能帮助我们做到这一点。
我们不妨看看下面的例子。
戴维是硅谷地区一位创业者,他喜欢根据技术发展的大趋势寻找特定领域里的商机。

问题描述:美国一半小型企业(包括餐馆等)寿命不超过5年,酒吧也是如此。 戴维在一年里走访了美国100多家酒吧,发现它们之所以经营不下去,除了一般所说的经营不善,更重要的是大约23%的酒都被酒保们偷喝了。
▼那么酒保们是如何偷喝掉将近1/4 的酒的呢?
这其实很简单:
主要是酒保们趁老板不在的时候偷喝酒,或者给熟人朋友免费的和超量的酒饮。
比如小王是酒保,小李是他的朋友。
这天小李来到酒吧时,小王看老板不在,就给小李倒上一杯没有算钱。甚至即使老板在,小王本来该给小李倒4两酒,结果倒了6两。
由于每一次交易的损失都非常小,不易察觉,因此在过去酒吧的老板必须盯紧一些,如果有事离开一些,只好认倒霉。
开过小餐馆的人都会有这样的经验,自己是否在店里看着,对营业额的影响特別大,因此做这种餐饮买卖的人特别辛苦,稍微不注意就开始亏损。
▼针对酒吧老板的这些麻烦,戴维设计了一套解决方案。
改造酒吧的酒架,装上可以测置重置的传感器,以及无源的射频识别芯片(RFID) 的读写器,然后再在每个酒瓶上贴上一个RFID的芯片。
这样,哪一瓶酒在什么时候被动过,倾倒了多少酒都会被记录下来,并且和每一笔交易匹配上。
酒吧的老板即使出门办事,也可以了解酒吧经营的每一个细节。
当然,戴维提供的服务如果只是停留在这个层面,那么更像是一个“万物联网”(Internet of Things,简称 loT)的应用,与我们所说的大数据其实关系并不大。
▼戴维对酒吧的改造带来了一个额外的好处,就是积累了不同酒吧比较长时间的经营数据。
在这些数据的基础上,他为酒吧的主人提供了一些简单的 数据分析 。我把他提供的服务概括为以下三个方面:
首先,分析每一家酒吧过去经营情况的统计数据,有助于酒吧主人全面了解经营情况。
在过去,像酒吧这样传统的行业,业主除了知道每月收入多少钱,主要几项开销是多少,其实对经营是缺乏全面了解的。
至于哪种酒卖得好,哪种卖得不好,什么时候卖得好,全凭经验和自己是否上心,没有什么分析。
戴维提供的数据分析让这些酒吧老板首先对自己的酒吧有了准确的了解。
其次,为每一家酒吧的异常情况提供预警。
比如戴维可以提示酒吧老板某一天该酒吧的经营情况和平时相比很反常,这样就可以引起酒吧老板的注意,找到原因。
在过去,发生这种异常情况时老板很难注意到,比如某个周五晚上的收入比前后几个周五晚上少了20%,老板们一般会认为是正常浮动,也无法去一一检查库存是否和销售对得上。
有了戴维提供的数据服务,这些问题都能及时被发现。
最后,综合各家酒吧数据的收集和分析,戴维会为酒吧老板们提供这个行业宏观的数据作为参考。
比如从春天到夏天,旧金山市酒吧营业额整体在上升,如果某个特定酒吧的销售额没有增长,那么说明它可能有问题。
再比如,戴维还可以提供不同酒的销售变化趋势,比如从春天到夏天,啤酒的销置上升比葡萄酒快,而烈酒的销售平缓等。
这些都能够帮助酒吧老板们改善经営。
*本文根据吴军《智能时代第四章:大数据与商业》内容整理而成,有删节,该书由中信出版社出版。

来源:混沌研习社文|吴军 (硅谷投资人、丰元资本创始合伙人、计算机科学家、《浪潮之巅》作者)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-02-17 10:10:00
摘要:本文来自创新工场创业公开课。用户增长始终是困扰 APP 开发者的一大难题,其中一个很重要的问题就是没有对你的应用进行分析。没有意识到为什么用户 留存率 偏低。从用户获取到收入这个步骤入手,对整个过程进行监控,用数据化的工具进行分析,是问题的良好解决途径之一。
诸葛 IO 创始人孔淼就会基于 AARRR 模型和一些具体案例,来为我们解析为什么要用数据去铺垫产品运营。
精细化的数据运营
第一个,为什么要用精细化运营数据这张图是年初的时候 TalkingData 的一个报告,大家可以看到,整个年龄分布从 90 后到 80 后到 70 后以下,其实整个分布已经越来越均匀了。大家想一下,差不多在 1999年 第一波互联网浪潮到 2004年web2.0 到 2009年 左右的移动互联网浪潮的时候,当时主要人群主要是 80 后,并没有现在分化得这么明显。
第二个人群城市差异化,大家可以看到一二三线城市的增长速度,意味着人群包括像城市整个沉降越来越快,如果有来自小城市的朋友都知道,现在回家看,大家使用智能设备已经越来越多了。大家再想一下,这三个浪潮的时候,最开始使用互联网的人主要是一二线城市的人,而现在这个图是一个金字塔,三四线人才是一个更有价值的部分。
第三个网络环境,从最开始,早期用塞班的人都知道,大家可能就用 opera 浏览器,用 S60 手机各种省流量,UC 浏览器讲究的是内容。大家看到随着网络环境的改善和优化整个体验变得很重要,用户交互体验变得很重要。
最后一个是根据每个人装的应用列表来看,北京打车偏多,上海理财,广州是游戏,深圳是视频。从表面上来看是几个类型的差异,背后刚好反映的是各个城市人群的生活节奏,包括个人作息时间,个人消费能力等等。这意味着什么呢,这意味着现在包括使用你的应用人群已经越来越差异化了。
举个简单的例子,即使你是做母婴类的,使用者是妈妈,一二线城市的妈妈和三四线城市的妈妈她们消费能力是有差异的,她们平时生活作息时间也是有差异的。意味着她们在使用你 APP 的时候,整个使用行为肯定是有差异的。
所以回到最开始讲到的三波浪潮时期,大部分公司只关注三件事,从 Traffic 到 users 到 revenue,从流量到用户到收入。大家想一下最开始互联网广告赚钱方式并没有现在垂直电商这么多的方式,最开始简单的就是投广告,广告带来流量。包括去 PC 上做 SU 优化,做很多事都是为了扩大人群,扩大流量,带来更多的用户,通过用户产生收入。这在用户群单一的且技术有限的情况下,是有用的。
但是现在很多 APP 的开发者会发现一个很头疼的问题,就是为什么我们的量增不上去,觉得自己做了很多努力还是没有太多的用户,这里面有一个很重要的问题,就是你没有分析你的应用,没有意识到为什么用户留存率偏低。包括现在很多产品会去换量,A 产品跟你换 5000 量,B 产品换到 3000 量,你简单认为 5000 大于 3000 对不对,有些公司稍微再精明一点会去看留存率,即使是留存,大家想一想,每个应用的核心事件不同,知乎就是看帖子,京东是是加入购物车,搜狐视频是看视频。
原来的留存是什么,是打开一个应用,但简单的打开一个应用也不能成为衡量你留存的一个标准。这个时候也就意味着衡量留存时要把用户区分价值来看,真正给你带来产生收入是互动比较强烈的用户,其实你最后衡量这个渠道带来的用户,5000 大于 3000 也许你衡量有哪些人看了视频,有哪些人做了核心事件比例有多少通过这个衡量也许是 3000 的比较大。换过来说,这时候是不是意味着 3000 就是好的,也不一定。最后产生收入要看 UP 值,也许是 5000 的价值比较高。这一件事到底有什么结论,要通过用户的行为往下深入细分,再得到结论。
流量时代何时走向终结
这个是前一段时间 36kr 的一篇文章《流量是在何时走向终结》,它的观点就是以前流量经济在于洗,我不停的去找,有当量的渠道去换流量,现在已经是讲究粉丝经济了,要养,要找到你的用户人群特点。
举个简单例子,跟一线竞争对手扛不赢的时候,你会发现的收入来源大多数来自于三四线小城市,这个时候你没有必要去刷网上的第一位,因为你的核心人群是你的三四线小城市,这个时候你的目标要定向为他们的活动区域比较大的地方就可以了。养粉丝这一块很典型的比如唯品会,唯品会最开始做得比较好的时候就是用二线的品牌去吸引了二三四线城市的人。
AARRR 模型
回到刚刚那个模型流量到用户到收入,我们应该关心的是流量来的是什么样的用户,流量怎么来的用户。用户到收入这个过程到底做了什么,用户是如何产生收入的。
这个时候我要讲到一个经济话语的基础,不得不提到的就是 AARRR 模型。第一个是 Acquisition,即用户的获取。Acquisition 是用户的激活,Retention 是大家很熟悉的,留存,留存的人 referral 会帮你制造传播,再下一步就是收入。
关于用户获取大家应该很熟悉。比如扫码关注,或者你去搜一个关键词,做一个 SEO 优化,或者你找别人换量,或者是别人在某科技博客上写一篇软文带来一些量。再就是社会化分享,通过分享把用户吸引过来,这些都是用户获取的过程。
用户激活,激活就是注册成为你的用户,有一些人到你这来了以后,核心是要他注册账号,如果没有账号体系,你可以认为他来到你的应用就跳过这一步了。像知乎,在首页有一个注册,读文章读到一半的时候也会弹出一个注册。
用户留存就很简单了,持续去使用你的应用。我们建议把这个留存再往下深入,你要把你的人群分层,比如你是一个电商应用,留存就要分四层来看。第一层是浏览商品的留存的人,第二是加入购物车的人,第三是是产生了订单的,第四是完成支付的。分不同层面的意义来讲留存,这就是细化留存。
Referral 就很熟了,用户觉得应用不错,愿意把它分享到社交网络,到社交网络以后带来更多的用户,这就是一个传播的过程,传统意义就是你的东西很有价值。比如卖一个很好的软件,你告诉他用的很不错,就是口碑营销,是最传统的传播方式。前不久我在微博上看到一个知乎的分享,这就是典型的传播方式。
最后就是收入了,大家看一下整个过程,这是我摘自于国外很有名的 PPT 的图,是一个典型的漏斗,用户获取来的人是最多的,用户激活是一部分,用户留存到用户传播最后到用户收入这是一个漏洞,在分析问题时候是要找到这个漏洞的瓶颈在哪儿。
当你发现产品有问题的时候,这个时候要做的一件事就是分析从用户获取到收入这个步骤中,到底哪一步是最大的问题。现在很多人有问题的时候会做很多操作,其实是不利的。因为这会同时改变很多因素,最好的方式是首先要监控起用户获取到收入的整个过程,用数据化的工具来监测这个过程。
先找到 OMTM,这个概念是来自于《精益 数据分析 》这本书,里面讲到一个很重要的分析方法论叫做 OMTM(one Metric That matters)。在找瓶颈的时候往往有一个非常重要的因素,只要解决了这个问题,就会带来快速的提高。本身你的产品在迭代,不可能一下子解决所有的问题,你做很多操作的时候,到底是哪个产生因素还是不知道,从分析上来讲是不合理的。
常用分析方法
有哪些常用的分析方法呢第一个,其实就是用户获取和用户激活。比如像知乎,知乎注册有多种方式,有一种是来自于你的首页注册,还有一种是你读到一半弹出一个注册框,这是多种注册方式。大家想一下,如果用现有的一些工具是做不到的,因为他最多是给你做渠道和版本上的区分,这时候你去衡量这一部分用户转化率和行为的时候,需要结合业务逻辑条件。比如注册来自读文章的页面或者是注册来自于首页,这些都是结合业务的商业条件,这是需要精益化的数据工具才可以做到的。
分析的过程就是一个典型的漏斗,第一步两个漏斗,第一个漏斗是从首页访问注册的人,第二个漏斗是看文章的,他读文章读到一半弹出一个注册窗口,第二步就是他去读文章,比较这个漏斗看哪一步更有价值,这就是典型的漏斗。漏斗就是很多过程,你要分析这个过程缺口在那里。
拆分用户使用应用这个过程的时候,用户不会完全按照你的逻辑来走,很多地方就会卡住了,跳出了,这个时候要找到这些点来优化它。有一句话大多数做产品的人是靠猜测和直觉,大家想一下自己的产品是不是靠产品经理拍脑袋决定的功能,有没有考虑这个功能的持续使用性。
第二个是更多的转化趋势。刚刚解释过了用户留存,留存不像以前了,第一天是新增用户,某一个条件背后来的用户,第二天第三天有没有持续用这个应用,变成了每一个应用都有你的核心价值体现。比如说你是一个游戏类的,那就是有没有玩游戏,如果你是一个像图片类的,就是有没有看图片,京东的有没有产生订单有没有支付成功,要把原来的应用再细化一下,这也是要结合你的业务,这也是精细化分析工具能做到的。
这就是自定义留存,下面通过例子来讲如何更深入的分析。在做产品分析的时候,并不是把多少数据库拿来,这样是盲目的。核心是要回到刚刚的逻辑,即从用户获取到用户收入,并可以细化拆分。比如分享的流程,微信某个行为的触发人群,你有一个细的目标去分析,这个时候的分析往往是有效的。
更深入地分析从何下手
使用工具的时候,不要盲目的为了布点而布点,加入太多的数据量,最后分析量太多是不行的。
比如某一个版本我要去布点的时候,就去跟踪几个关键的过程,步入这一步,我的用户获取很少,铺的流量有限,但是我这里面是有一些社交分享的功能,这个时候我应该想到怎么样提高社交分享率,才能够在 referral 有一个更多的用户获取。这个时候就分析为什么他不会分享。
之前有人讲了一个例子很有意思,他们当时发现最后点赞的人分享频率是最高的,后来提了一个方案,听说点赞和分享搭在一起更配,这也是一个漏斗这一步提高了,分享率就上去了。一些硅谷的典型例子,往往就是在小的过程去优化一点能带来一个大的效益改变。
更深的分析从何下手呢,这就是一个案例,这个案例应该会有很多产品中枪,为什么我拿这个案例,因为暴走漫画是我们一个很好的客户,当时我问他第一句是,你的分类排序是按照什么排的,他说数据库取出来的数据就是这样排的。大家可以看到,当你的功能模块,这样一些分类,从上往下排的时候,这个时候用户访问点击率从上到下不是对等的,点上面的肯定是高于点下面的人,因为这个是用数据支撑看到的问题。
这个时候大家想一下,大家可以看到上面有很多分类,每一个分类点进去以后这个用户有没有持续看这个分类里面的漫画,这个比例一定是不等于从上到下的数据,正常做优化的时候,你先要掌控。
因为 APP 展示页面有限,每一个关键部位都是有它的价值,这个时候要明确横向从上到下的点击比例。第二个,每一个点进去的用户有没有持续使用这个分类,在这个分类里面看这个分类的漫画,显然这个比例肯定是不一样的。这个时候下面有一些是高于上面的,持续用这个分类的比例是高于上面的,这个时候要根据数据把下面提多上面去。
举个简单例子,科幻根本没有人看,放在这么好的位置,我发现每次点进去都是新用户,老用户根本不点,下面有一个比如叫什么恐怖,访问率非常高,用户持续使用率非常高,这个时候应该提到用户在第一层找到的地方,把差的内容如果数据可以了再提上去,这就是典型的数据去运营产品的思路。
硅谷产品经典案例
最后讲一下硅谷产品的经典案例 Quora,Quora 是典型的从用户获取 AARRR 模型,Quora 和知乎的问题是一样的——分享的很多,注册的很少。用户激活的比例偏低,怎么办呢。这时候想到一个办法,他发现很多人读文章会读完的,大家做了一个措施,读文章一半的时候弹出一个窗口,也就是后来知乎的做法。
第二个推荐相关的文章和用户。这也是一样的,你发现留存率比较低的时候,用户在应用里互动比较少的时候,你应该想一些别的办法。Quora 就想到了,怎么增加用户的留存,用户读到这篇文章的时候我给他推荐一些相关的文章,很多人觉得这件事靠后,其实它能够提高一些转化率的,这个时候推荐相关文章比如说最近股市哪个股票好下面有一个相关的文章,点进去的人会很多。点进去的连续进去,就增加了下一步的可能,就越有可能成为你的新用户了。
LinkedIn 很有意思,LinkedIn 从 200 万到 2 亿的增长是非常快的,这源于 growth hacking 的策略。他当时发现很多人在搜索引擎里面搜自己的名字,搜不到结果,这个时候他想到一个办法,你在 LinkedIn 里面可以创建公开个人资料,这个个人资料可以被搜索引擎做 SU 优化被检索到,这个时候很多人会发现了这个功能,整个 LinkedIn 的用户增长就上去了,因为大家都想提高自己在搜索引擎的曝光,这个点被大家把握住了。他在研究整个用户获取到收入这个漏斗的时候,发现第一步是一个瓶颈,他源于这一步提高了第一步的留存。邀请联系人和动态通知,现在大家来看我也做了,我想问你做社交分享做这些事的人,你为什么这么做,你是抄别人的,第一个想到的这个人是分享过的。
我再讲一个非常差的案例,前不久我在脸谱网出来的一家公司帮他分析产品,他也是用别人的分享,他的产品送你 50 元红包,我说朋友圈看到你这个东西的时候,人家第一步对你的产品名字是有认知障碍的,不知道你是什么,送他红包的时候当然不会点了,点击率会偏低很多的,他是卖零食的。我告诉他,改成我送你 50 元可以免费买零食之类的,转化率是不是会上去。
Facebook 和推特这里面有两个概念,AHA 时刻,大家可以去 TD 上搜一个东西叫做 Facebook 的 growth 团队做的一个分享,AHA 时刻在国外叫 AHA moment,Facebook 和推特也遇到了这个问题,好多人注册了不留下来,其实就是用户获取到用户激活到用户留存这部分,后来经过数据分析发现当一个新用户十天能达到 7 个好友的时候,这个留存率是最高的,这一件事很多产品团队没有数据分析意识是不会想到的,这一件事其实是可以分析出来的,这些人的整个行为分布和使用是有规律在里面的。推特用户关注达到 30 个人,这也是符合逻辑的,刷的量太少了就不会有人使用了。
从用户获取到激活,刚刚 Quora 想的办法是增加了一些途径,推特的办法是优化了体验,优化了注册流程。
Dropbox,growth hacking 的发明者就是当时的 Dropbox,Dropbox 是我认为做 growth hacking 当中做得特别好的一家,大家看现在很多的网盘学它的邀请注册送空间。刚刚我提到了优化的一个方法是增加途径,或者优化体验,这一种就是属于诱导。给用户更多的诱导性去提高这一个转化率。
Dropbox 当时送 500 兆空间,后来国内网盘都请他来做。但是他这 500 兆空间也不是那么简单的,我看了 Dropbox 的一篇分析文章,因为 Dropbox 是有付费用户比的,他算过这个付费用户比,算出来一个新用户能带来多少回流比,算出来是 500 兆空间,从这个成本中能达到多少的营收。
第二点,Dropbox 很聪明的,也可以激发大家的一些想法。他当时发送邮件给注册没有下载客户端的人还是回到那个模型,他发现用户激活到用户留存比较低,这个时候怎么提高,他想了一下,他发现有一部分人激活以后准备下客户端没有下走了,大家想一下这是很正常的情况,有的人可能网络有问题,或者是有什么事,就把浏览器窗口关掉了,走了。
这个时候他发了一个文件,把那些注册了没有下载客户端的人,并不是 Dropbox 的客户,他就通过发送邮件去挽回,发现这个回流比还不错的,最后通过这样一个方式让这个比例提高了。有人会觉得可能提高的不多,但是大家想一下百分比乘以你的用户基数,任何一点点,因为每一个新用户还可能带来更多的用户,这些小的细节点将来都可能成为你产品改进的空间。
今天讲的这些就是分享一些关于,首先为什么做这一件事,其实也是从当初的流量到用户到收入的模型,不要再去想有没有办法,应该往下走,应该把步骤拆细,流量来了,是什么样的用户,用户做的什么事,哪些事需要往细了看,去分析这些事情,他做这些事的时候每一个核心步骤到底完成了没有,或者说根本就是你做的不好,这个东西是伪需求,这些全部要分析透彻了,这些都是可以用数据分析出来的。
最后去分析这些问题我不建议大家自己去构建团队,因为你要有 ETO 工程师,算法工程师,运维工程师,需要有服务端工程师,要有一堆成本,这个我建议大家用一些像 Mixpanel,恩特麦崔科斯(音译),这是国外的。国内的诸葛 IO 还是挺不错的,每一个产品都有使用的人群找出哪一个更合适你。 作者:创新工场
来源:36氪
原文链接:http://36kr.com/p/5038378.html
本文为专栏文章,来自:诸葛IO,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/3062.html 。
数据分析
2015-11-20 20:21:00
机器人 和 大数据 已经改革了电商行业,而下面这4个公司将在这场变革中起到重要作用,极大影响2018年的电商模式:
无人机投递: Flytrex
无人机配送方式已经出现,只是实行的地区有限。而无人机物流公司Flytrex,将逐步改变这一局面。
今年该公司在冰岛推出了全球首个全自动无人机投递系统,将AHA电商公司某些产品的平均投递时间缩短了75%以上,同时节省了60%的物流成本。
自主式无人机可以在密集的城市导航,配送成本每英里0.8美元,远远低于卡车运输。
这家总部位于特拉维夫(以色列港市)的公司正在努力向全球其他地区扩张。但是在美国市场短期内不会有太大进展,无人机在这里依然受到严格监管。
把娱乐变成一种购物体验: SPOTT
Spott的技术生成交互性内容,让用户能够搜索节目和电影中的场景,以准确找到使用的某个产品。从厨房炊具到精致套装,这家位于芝加哥的Spott 公司会跟用户分享产品的品牌和价格信息,方便人们快速购买。
这种影响不仅体现在电商方面,也给内容营销和娱乐方面带来巨大变化。
多亏了Spott,衣柜和道具部门即将成为好莱坞的主要收入来源,而娱乐和商业之间的界限将会越来越模糊。
将亚马逊物流机器人带给每一个电商企业:6 River Systems
位于马萨诸塞州沃尔瑟姆(Waltham)、由前Kiva公司高管创立的6 River Systems公司创造了一款先进仓库机器人Chuck。当电商公司在物流中心或仓库安装Chuck时,配送速度会比传统货车分拣快2-3倍,而成本却降低一半。
Chuck通过把仓管人员准确引导到所需产品位置,让物流人员能够非常迅速地分类和处理库存。
像许多机器人公司一样,Chuck也通过汇总数据,为企业带来价值,使仓库经理能够做出更明智的决策,加快分拣过程,这是物流行业的难题。
最后一公里配送:Common Sense Robotics
目前供应链依赖于规模经济。另一家以色列公司Common Sense Robotics(CSR)想要改变这一点。
CSR利用先进的AI和机器人技术,让零售商能够在临近最后一公里交付的战略位置储存和处理大部分库存。而不是像当前零售商,把库存储存在远离人群的郊区大型仓库中。
该公司希望其最后一公里物流中心成为渴望跟上亚马逊配送速度的零售商的首要选择。它能为卖家提供按需物流服务,同时大幅度降低配送成本。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-11-21 13:25:00
OFweek医疗科技网讯 11月14日上午,由OFweek中国高科技行业门户、高科会主办,OFweek医疗科技网承办的“OFweek 2017(第二届)中国医疗科技大会” 精准医疗 专场正式开幕。在11月13日上午的“OFweek2017中国高科技产业大会(CHIC2017)”中,德国汉堡大学教授、德国汉堡科学院院士张建伟与国际医学与生物工程院院士张元亭以 人工智能 话题为背景,详细的介绍了未来医疗科技在人工智能领域的发展方向。而在11月13日下午“OFweek 2017(第二届)中国医疗科技大会”的健康 医疗大数据 专场中,中国科学院大学教授吴健康、哈尔滨工业大学教授关毅、华为云生态解决方案部长蒋国文、视见医疗董事长陈浩、肽积木科技医疗事务官符妍以及金蝶医疗创新研究院院长易延华等六位专家为我们共同分享了健康医疗 大数据 领域的发展方向以及未来挑战。与此同时,11月14日会议现场气氛活跃更甚,数百名业内人士再次共聚一堂,与行业专家以及企业代表积极互动,共同探讨精准医疗领域的发展热点以及难点问题。
OFweek 2017(第二届)中国医疗科技大会会议现场
在精准医疗专场中,IEEE院士、香港城市大学教授孙东首先登台致辞,对于机器人在未来医疗领域的发展进行了简单的介绍。随后,孙东院士在“应用机器人技术实现精准细胞手术”专题演讲中,通过肿瘤发展过程引出了细胞机器人的概念,并提出了细胞机器人所面临的挑战。对于细胞机器人的发展以及现状,孙东院士表示:“细胞机器人已经经历了器官到细胞层面的重大改变,通过对单细胞进行修复整合,然后放大增值数百万两集,并通过细胞传输到指定的部位。”随后的演讲中,孙东院士表示,细胞机器人操作缺乏精度、效率较低以及成功率较低等也成为了目前亟待解决的问题。对于未来的操作器形式,孙东院士详细介绍道:“未来的操作器将为以下三种,其一,激光操作器,主要通过机器人控制光粒在体内追踪单细胞;其二,机械操作操作器,如探针操作,其对于精度要求很高,人工无法实现,只能依赖机器操作完成;其三,电磁操作器,主要通过电磁力控制机器人完成手术操作。”在演讲过程中,孙东院士通过肝癌治疗的研究的详细案例,提出了光镊操作系统以及精准量化机器人微注射系统等先进技术,并在最后总结道:“细胞手术机器人代表了医疗机器人的发展前沿,其未来应用将极大程度的促进精准医学与再生医学的发展。”
IEEE院士、香港城市大学教授孙东
上海大学快速制造工程中心主任、教授胡庆夕通过精准医疗概念生成的背景引出了“3D打印在生物精准医疗领域进展”的专题,并以3D打印技术在骨科领域的发展为例,详细的说明了3D打印在精准医疗领域的进展状况。从3D打印技术在医疗领域的市场发展状况来看,人体组织以及器官的市场供不应求之势成为其发展较快的主要因素。那么3D打印在精准医疗领域的目前研究状况如何呢?对此,胡庆夕教授介绍道:“3D打印制备生物支架是目前医疗领域应用较多的技术,它属于宏观技术。而电纺丝技术则属于微观技术,两者各有优缺,而如何更好的结合使用便是我们现在研究的课题。”最后,胡庆夕教授表示,3D打印技术未来将成为生物精准领域对于组织和器官修复最有效的手段,它也是生物精准领域未来的发展方向。
上海大学快速制造工程中心主任、教授胡庆夕
在“生物医学材料测试挑战”专题演讲中,Keysight纳米产品应用专家赵晶主要通过原子力显微镜、纳米压痕仪、纳米拉伸仪以及桌式场发射扫描电镜等设备产品详细的介绍了生物医学材料在精准医疗领域的测试应用。随后,赵晶专家以活体细胞影像图、牙齿纳米压痕测试、单丝纤维应力应变曲线以及细菌扫描电镜图像等为例精彩的分享了对应生物医学材料的应用过程。最后,赵晶专家总结道:“生物医学材料应用越来越广泛,未来我们将继续研发更多的产品以应对精准医疗领域的挑战。”
Keysight纳米产品应用专家赵晶
在“突破心血管疾病精准医疗的生物标志物研究和个性化用药指导”主题演讲中,南科大乐土精准医学研究院助理执行院长李光磊主要以心血管病为例,详细的分享了诱因、精准检测以及个性化用药指导等研究成果。对于心血管病治疗面临的挑战,李光磊院长表示,目前心血管病治疗主要面临两大挑战,其一,心血管病发病速度较快,治疗来不及;其二,心血管病人对于药物依赖性过高,影响生活质量。随后,李光磊院长对于心血管病的诱因也做了简单的总结,她表示:“心血管病发生的诱因分为外因和内因,外因主要由生活习惯、环境以及饮食等因素产生,内因则为遗传因素。最后,李光磊院长介绍了个性化用药指导的模式,她表示,由于每个人遗传与环境因素不同,他们对于药物的反应也是不同的,所以我们可以通过一个简单的评估测试,为你选择最适合你的药,这样才能最有效的解决自身的病症。”
南科大乐土精准医学研究院助理执行院长李光磊
最后,郑州大学第一附属医院主任、教授张毅以“精准肿瘤免疫治疗”为主题做了精彩的演讲。演讲之初,他对于PD1、CAR-T和TCR-T的临床进展进行了简单的介绍。张毅教授表示:“精准肿瘤免疫治疗是目前最火的领域之一,相比过去的靶向治疗,精准肿瘤免疫治疗直接针对免疫系统来攻击肿瘤,其方式更有效,结果更明显。”随后,通过一系列临床试验治疗过程,张毅教授再次为我们展现了精准肿瘤免疫治疗的“神奇”疗效。对于国内精准医疗的发展状况,张毅教授表示,国内拥有较为丰富的临床资源,但仍需要和更多行业内的企业相合作,以此共同促进国内在精准医疗领域的发展。
郑州大学第一附属医院主任、教授张毅
下午,在互联网医疗专场中,南京军区福州总医院主任陈金雄首先登台致开场词,并在“互联网医疗再思考”为题的演讲中,具体阐述了目前互联网医疗的发展趋势以及未来挑战。在演讲过程中,陈金雄教授以共享单车的发展为例,提出了需求、连接、信任、安全、管控手段以及随时随地等精准医疗未来发展流程。对于互联网医疗发展的挑战,陈金雄主任说道:“目前互联网医疗发展受到质疑的主要因素是数据不足,而未来诊断级智能可穿戴设备会是互联网健康医疗发展的一个爆发点。”随后,陈金雄主任表示,未来在国家医疗政策不断颁布下,随着医疗大数据和精准医疗的不断融合,将会对传统医疗模式进行颠覆,这为医疗行业打开了更具想象力的发展空间。
南京军区福州总医院主任陈金雄
“康复机器人将成为为新兴的康复治疗技术”。上海交通大学所长、教授曹其新在“基于云平台的下肢康复训练机器人系统”主题演讲中说道。对于下肢康复机器人研发与推进模式,曹其新总结以下九项技术,其一,治疗康复一体化技术;其二,物联网技术;其三,康复量化技术;其四,云+大数据+AI技术;其五,新概念技术;其六,智能感知技术;其七,人因工程技术;其八,智慧个性化服务技术;其九,康复效果专家评估技术。同时,曹其新教授表示,随着国内各项政策的不断推动,加之中国广阔市场的优势,中国的大量实验应用数据以及康复机器人专利申请数量正在不断增多,对于国内欧美垄断的康复机器人市场正在不断发起冲击,凭借技术上的不断突破,未来中国有望在康复机器人等市场实现弯道超车。
上海交通大学所长、教授曹其新
在“生理指标的智能监测”主题演讲中,中科院计算所主任、教授朱珍民首先对可穿戴设备现状进行了简单的说明,并将其进行了详细的归类。随后,朱珍民教授对12类可穿戴设备在医疗领域的应用进行了一系列介绍。演讲过程中,朱珍民教授推出了生命体征指标测量、血流指标测量以及血糖浓度测量等技术,他表示,这些技术可以很好的检测出身体健康指标。最后,朱珍明教授总结道:“未来我们将通过打造全国的健康数据中心和健康管理平台,获取个人健康长期队列数据,以此来监测人体的生理指标。”
中科院计算所主任、教授朱珍民
华大基因互联网中心副总经理官鑫在“基因+互联网,精准健康从我做起”主题演讲中,以基因四大组成部分类比扑克四色,更加生动的阐述了基因多样性的来源。而对于基因与环境的关系,官鑫表示,疾病的产生离不开基因与环境因素。在基因与互联网模式发展中,官鑫主张推广基因健康互联网平台,通过种种系统相互配合,共同促进基因与互联网的发展。以遗传基因为例,官鑫建议道:“希望每一对父母在怀孕前都能做孕前检测,通过基因检测可以对基因遗传的风险进行评估与分析,以此减少基因遗传病症的发生。”通过一系列临床实验结果表明,基因检测可以大幅度降低或者减少基因遗传病症发生的风险。
华大基因互联网中心副总经理官鑫
最后,神念科技香港GM兼全球技术VP Kelvin Soo以“生物传感器在医疗健康领域应用”为主题做出了精彩的演讲。Kelvin Soo表示,生物传感器可以通过检测脑电波和心电图的形式,将身体健康数据呈现出来。随后,Kelvin Soo以LifeBeat以及cardiostick产品为例,通过对产品采集的数据进行对比,详细的介绍了生物传感器在医疗领域的应用。
神念科技香港GM兼全球技术VPKelvin Soo
OFweek 2017(第二届)中国医疗科技大会精准医疗专场专家合照
随着各专家演讲结束,为期两天的“OFweek 2017(第二届)中国医疗科技大会”也圆满落幕!在会议结束后,现场观众仍旧意犹未尽,纷纷与演讲嘉宾面对面交流互动,探讨实际遇到的问题以及对行业的愿景。
本文由 OFweek 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/49048.html 。
数据分析
2017-11-16 06:06:00
BDP个人版是一款在线 数据可视化 分析神器,无需安装下载,具备无缝的数据对接、强大的数据处理、灵活易用的可视化分析、几十种酷炫图表、数据实时更新等优势,帮你搞定各种数据问题。数据实时更新,让你告别重复的分析工作,并用实时数据指导工作,不断提升业绩,实现数据驱动运营。
经过了长久的等待,大家期待的 “双十一&两周年”大狂欢 终于来了!
我们再次强调一下本次的三大 惊喜活动 !
一、1折白菜价,9.9元尽享VIP特权
9块9,一杯奶茶都买不到吧?
但在BDP你可以得到 本地同步神器
再也不用手动更新本地数据啦
还可以 接入微信公众平台
时刻掌握公众号运营情况哦
还能得到 地址转经纬度功能
帮你实现屌炸天的gis地图
……
9块9就能享尽众多会员特权,很值吧~
【活动规则】
未购买过会员的用户首购可享银钻(原价99元)1折价—9.9元,限购一个月,金钻不参与此活动。
二、金银钻年费半价,全年仅此一次
除了上述的1折竟然还有半价?
超大容量、同步客户端
直连数据库、支持超多第三方平台……
少抽几包烟,少去一次无聊的聚会
就可以获得极致的 数据分析 体验
为你升职加薪之路打下坚实的基础
花六个月的钱就享受全年VIP特权
一年仅此一次的机会还不抓住?
【活动规则】
所有用户均可参加金银钻年费半价活动,包括已参与1折购的用户。
注:活动一、二可同时享受
三、分享专属故事,好礼免费拿
只需一键分享就可轻松得到豪礼~
将故事分享给好友或朋友圈,系统根据好友点赞数形成排行榜并提供相应的奖励:

注:凡获奖者均可得到附有wuli大BOSS签名的获奖证书哟~
下面给大家一些本次活动的剁手攻略保证大家得到 最大优惠 !
剁手攻略
1、前两个活动都想要参加的小伙伴注意啦!只有先买“9.9元银钻”再买“年费半价”才可以哟~切记
2、活动期间可别花“冤枉”钱,因为自定义购买7-11个月会员,你会发现他们比“年费半价”更贵。总之,抢年费半价就对了,因为它性价比最高。
3、想要参加活动三的小伙伴们记得分享H5到朋友圈,召集更多小伙伴们为你加油点赞,会离豪礼更近一步哟~
活动时间:2017年11月8日00:00—11月14日21:59
另外,大家不要忘了 双十一当天 的 “ BDP首次线下分享会 ” ,数据大咖齐聚,为你解答数据分析问题,助力数据驱动!
看得出我们这次活动是下了多大血本么!
是的,老板说一定要献出我们最大的诚意~
保证活动真实有效,拒绝套路从BDP做起!
提高原价再打折的事我们绝对不做!
本文为专栏文章,来自:海致BDP,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/48822.html 。
数据分析
2017-11-08 22:38:00
11月2日消息,36氪获悉,汽车互联网服务平台汽车之家推出战略级产品——车智云。汽车之家表示,该产品系行业内第一款真正意义上为车企高管量身打造的智慧大 数据产品 ,“车智云” 涵盖“智策、智赢、智造”三大应用场景,可以提供包括“销量预测”、“竞争格局”、“营销漏斗”、“传播监测”、“线索分析”、“产品规划”、“配置策略”、“产品改款”在内的八大产品,覆盖企业发展全生命周期的数据服务。不仅能推动车企战略、营销、研发等全价值链的升级,还能帮助车企“以用户为中心”战略的全面落地。
在此之前,由于数据的匮乏和低效,车企不得不花费数月的时间,等待一份调查报告的出炉。然后再进行相应的细节决策。但现阶段用户汽车消费需求在发生快速变化,传统调研的方式往往跟不上需求变化的节奏,导致决策或由高层“拍脑袋”决定,或晚于需求变化速度,错过最佳机会。
汽车之家介绍,背靠汽车之家丰富精准的 大数据 平台,“车智云“的核心使命就是要帮助车企搭建起一个高效的“智慧决策”体系,利用 大数据 + 人工智能 的技术来帮助战略规划、产品研发和市场营销实现高效决策,确保企业的战略规划赶在市场变化之前,最终助力厂商缩短研发周期、实现高效营销。
量身打造的数据产品,帮助车企智慧决策
车企每年都要投入大量的经费用于研发,一款新车光研发费用就得十几亿,如想开发一个能覆盖主流市场的车型结构,研发费用肯定得过百亿。问题是投入巨资打造的车型,一旦没能抓住用户的需求痛点,那对企业绝对是致命的。汽车之家基于大量真实的用户口碑数据构建的“产品规划”数据产品,有助于车企快速准确的掌握用户痛点,研发出更符合用户需求的产品。
车企的采购、排产、铺货等都需要围绕销量预测展开,一旦预测太高或太低,都会给车企造成巨大损失。汽车之家基于海量用户购车前2到3个月在线上看车、选车、购车等行为数据,构建的“销量预测”产品可对市场的消费趋势、销量变化等进行更准确的判断,有利于车企优化营销策略、降低库存成本。
车企发布每款新车至少需要安排几千万元,甚至几个亿做营销,如果车企一年推四五款,少则两三个亿,多则二三十亿,但打水漂的新车营销案例在汽车行业屡见不鲜。汽车之家基于自身严谨的用户转化分析体系,提炼的“营销漏斗”产品不仅能助力车企更好评估自己的营销效果,还有助于车企更高效地找到自己的潜在用户,进行精准营销。
车企的核心诉求在卖车,车卖好卖差很大程度上取决于集客能力,其中至关重要的是销售线索。众所周知,汽车之家最核心的价值之一,就是能帮车企收集到大量真实的销售线索,并基于此提炼的“线索分析”产品助力车企全方位掌控销售状况,制定有针对性的市场策略。
精准大数据赋能汽车生态圈,打造完整产业闭环
未来,大数据和 AI 技术无论是在汽车、医疗、金融、教育还是其他领域,必将会爆发出巨大的社会效益。汽车产业作为潜力巨大的传统产业,所缺乏的也并非是生产能力,而是优质高效、能精准匹配消费者需求的服务能力。以往车企获取的调研数据往往是单次、局部、缺乏联系的,分析后常常会遇到两类尴尬:“重复已知结论”或“制造无用信息”。 大数据时代 ,数据集中到了大型的互联网平台,类似汽车之家这样十多年深耕汽车垂直行业的大平台,积累和提炼了海量的真实用户行为数据。由于其业务既覆盖了汽车消费者购前、购中、购后等各大重要环节,又与车企战略规划、产品研发、营销推广、销售和售后服务等全价值链高度结合,因此利用这些海量的、精准的用户行为数据,助力车企打造完整产业闭环,对于车企来说更是弥足珍贵。
业内分析人士指出,“车智云”的诞生,意味着一个新时代的开始,将加速车企调研、战略规划、市场营销和产品研发等由传统时代向智慧时代的转型升级,就像智能手机逐步替代非智能机,为车企等客户提供更全面、更精准、更高效的大数据服务。
本文由 汽车之家 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48776.html 。
数据分析
2017-11-06 08:30:00
近日消息,影视 大数据公司 “艾漫科技”刚刚完成了由Bilibili投资的B轮融资,融资金额为5000万元人民币。资料显示,“艾漫科技”成立于2010年,是一家大 数据挖掘 及整合营销服务商,其主要基于影视娱乐 大数据 ,并以联合运营的方式参与影视娱乐项目的投资立项、剧本策划、演员筛选等环节,以及为互联网用户提供娱乐社交平台服务。
关于艾漫科技
北京艾漫数据科技股份有限公司成立于2012年,核心团队既有来自清华、北大的技术基因,又有腾讯、AC尼尔森、光线等文化创意产业背景。公司基于影视娱乐大数据,与影视客户一起,以联合运营的方式参与影视娱乐项目的投资立项、剧本策划、演员筛选等环节,同时向互联网用户提供娱乐社交平台服务,是一家致力将高新技术与创意文化产业相结合,以科技引领娱乐的创新型互联网公司。
艾漫数据具有雄厚的技术实力,在自然语言处理、大 数据挖掘 等领域拥有多项自主知识产权和核心技术。
公司的战略是基于一个平台打造两条业务线 ,To B业务将获得的诸多影视娱乐数据信息,应用到To C产品中,提高用户粘性和提升用户量;To C产品的各种娱乐互动功能以及精准用户行为数据,为To B业务提供支撑,对提高影视作品的收视或票房起到促进作用,最终形成B2C2B闭环。
艾漫获得 CCTV、华谊、乐视、万达、慈文、中金源、东方卫视、北京卫视、腾讯等20余家合作伙伴的一致认可。
网址:http://www.iminer.com
本文由 艾漫 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48774.html 。
数据分析
2017-11-04 12:05:00
随着高速带宽、移动互联网的快速发展,以及各类智能终端的普及,海量的数据无时不刻不在被传输,作为海量数据的存储和交换中心, 数据中心 正在发挥着数据“核心枢纽”的作用。
海量数据的存储与传输,带动了各行业对于数据中心的需求,但同时也对数据中心提出了全新的挑战。在云计算、 大数据 和 人工智能 的时代,为了应对市场、技术和用户需求的发展,数据中心正在面临从政策、技术、产业链、服务应用等全方位的变革。
政策密集出台 引导行业有序发展
近几年,数据中心的增长潜力开始爆发,产业规模年增长率超过30%,数据中心建设呈现爆发性增长,由此带来的数据中心盲目建设、布局不合理,节能水平差等问题逐渐暴露,严重影响到了数据中心产业的可持续增长。
另一方面,随着数据中心市场的持续火热,一些寻求向高精尖领域转型或拓展自身业务体系的传统企业开始将目光转向数据中心领域,以江苏沙钢、广东榕泰、南兴装备、精功科技、宁波建工等为代表的传统企业巨头纷纷通过收购现有IDC服务商的方式进军数据中心市场。
随着市场经济的推动,以及用户需求的激增,数据中心市场呈现空前繁荣的同时也埋下了野蛮增长的隐患。为此,政府自2013年以来,从多方面出台政策,并对数据中心建设中暴露的问题和市场准入资质等进行调控和引导,极大地规范了我国数据中心的有序发展。
新兴产业,推动产业技术升级
当前,数据中心作为海量数据的存储和分发平台,其灵活性、可拓展性将变的尤为重要。但是在传统数据中心中,由于资源之间彼此独立且没有资源移动性的要求,所以在灵活的性、可拓展性等方面已经无法满足现有云服务用户的需求,因此,基于云服务的需求,传统数据中心正在快速向云数据中心转化。
除了云计算正在推动数据中心的转型与升级,随着大数据和人工智能逐渐进入应用阶段,其对数据中心的影响已经凸显。如何基于大 数据分析 数据中心能源的合理调配;如何利用人工智能技术实现数据中心的自动运维等问题逐渐成为数据中心运营和管理者所要思考的问题。
在当前这个快速发展和创新的时代,数据中心产业正处在变革的风口浪尖之上,如何把握新机遇、新挑战,实现产业全新升级的同时助力相关产业蓬勃发展。
2017年12月20-22日,由工业和信息化部通信发展司、中国信息通信研究院、云计算发展与政策论坛、数据中心联盟指导,中国 IDC 产业年度大典组委会主办,中国 IDC 圈、CloudBest承办的第十二届中国IDC产业年度大典(IDCC2017)将在国家会议中心举行。
届时,大会将围绕“从1到N”主题从数据中心技术创新、IDC及云计算国际合作,安全运维,云服务市场监管政策,数据中心云化,金融科技,金融数据中心等多方面去解读和探讨数据中心的发展之路。
IDCC2017大会官网:http://idcc.idcquan.com/
本文由 IDCC2017大会官网 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/49644.html 。
数据分析
2017-11-03 22:25:00
10月25日,由《数据猿》主办的“2017金融科技数据驱动金融商业裂变价值峰会”在北京悠唐皇冠假日酒店举行。本届峰会从 数据智能 的角度,聚焦 “数据如何驱动金融商业裂变”,从消费金融、供应链金融以及金融前沿科技三大角度深入探索数据智能为金融领域带来的变革。
「金猿奖」是由数据猿发起并创办,凭借 大数据 垂直行业媒体的独特视角和优势,针对大数据垂直行业的文章、案例、产品、人物等设置的奖项。峰会前期,数据猿邀请了 金融大数据 领域内优秀企业及领军人物、投资人、业界专家学者,共同以“大数据在金融领域的商业价值探索”为主题进行了约稿、案例、产品征集。
经过两个多月的时间,数据猿专栏收到了大量的案例,经过内部筛选选出了20个案例,再交由业内专家组成的评审团进行科学系统地评定,最终选出了10篇金融科技优秀案例。随着互联网技术工具的强劲发展,人们发现, 人工智能 、大数据和云计算作为一个整体,正在推动金融服务领域的颠覆式创新和重塑,没有什么形式比案例更能直观展示企业真实的贴身服务能力。
本文由 数据猿 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48683.html 。
数据分析
2017-10-27 04:16:00
10月25日,由《数据猿》主办的“2017金融科技数据驱动金融商业裂变价值峰会”在北京悠唐皇冠假日酒店举行。本届峰会从数据智能的角度,聚焦 “数据如何驱动金融商业裂变”,从消费金融、供应链金融以及金融前沿科技三大角度深入探索数据智能为金融领域带来的变革。
「金猿奖」是由数据猿发起并创办,凭借 大数据 垂直行业媒体的独特视角和优势,针对大数据垂直行业的文章、案例、产品、人物等设置的奖项。峰会前期,数据猿邀请了 金融大数据 领域内优秀企业及领军人物、投资人、业界专家学者,共同以“大数据在金融领域的商业价值探索”为主题进行了约稿、案例、产品征集。
经过两个多月的时间,数据猿共收到了百余家企业的产品投递,经过内部筛选选出了36个产品稿件,再交由业内专家组成的评审团进行科学系统地评定,最终选出了10个金融科技优秀产品。为了鼓励金融科技领域的各项创新,会上,“金猿奖 · 2017金融科技优秀产品奖”正式颁发(排名不分先后):
1、百融金服——百融信贷决策审批系统
百融信贷决策审批系统作为集成式、一站式的风控服务平台,基于百融金服的大数据和风控云等技术理念,结合机器学习和 人工智能 算法的新科学,从数据规则、审贷规则集、风控模型等不同层面帮助客户实现包括贷前审核、贷中监控和贷后管理的整个全生命周期的风险管控,降低风险运营成本,提高批贷资产的质量,为客户保驾护航。
2、金融魔方——金融魔方企业钱包
金融魔方企业钱包在金融牌照合规的基础上,链接银行、保险等金融机构核心业务系统,将合规的金融账户、金融产品、交易支付系统、风控、清结算系统等复杂功能集成为一套成熟、合规、可一键接入的金融SDK。企业通过调用SDK可快速构建集支付、清分账、余额充值、担保交易等于一体的钱包账户,定制理财、消费信贷、保险等金融产品。
3、恒丰银行——恒丰银行实时智能决策引擎
恒丰银行实时智能决策引擎是恒丰银行业务策略管理解决方案的核心产品,该产品让策略业务人员轻松高效地配置出风控、反欺诈、实时营销等场景下实时、准实时的决策模型/规则,实现在实时流数据的驱动下,基于海量数据进行成千上万个决策模型/规则的计算任务,满足高并发、低延迟的应用场景需求。
4、聚信立——蜜蜂和蜜罐报告
蜜蜂报告通过用户授权后,对借款人基本信息通过海量的数据交叉验证,对借款人进行身份核实、验真。通过借款人授权后的电商信息,整理和借款人消费有关的行为记录,判断借款人消费能力、资产状况、可能的收入及还款能力,从而判断借款人的信用风险;通过借款人授权后的运营商信息,获取借款人半年内的通话记录详单,判断借款人社交关系网络。
5、91征信——91征信
91征信专注解决多重负债问题,通过分布式数据库方式实现网络借贷数据共享,完整展现借款人负债详情。91征信采用了分布式数据库处理方式,在技术上讲,是向征信网络“区块链”化靠拢;从应用上讲,是通过实时精准数据产生倍增价值;每一位91征信联盟用户既是数据的使用者,也是数据的提供者,通过实现共享创造联盟生态链效应;91征信已覆盖近600家联盟机构,超过8000万借款人。
6、氪信——XBehavior 信贷风险评估产品
XBehavior是一套基于用户移动设备行为采集,使用高维的行为语言处理技术,最终为金融信贷场景提供实时的信贷风险评估的产品。氪信利用自身在风控行业的积累和领先的机器学习技术,帮助客户挖掘自有数据价值,构建零成本的风控能力,是适应于金融机构“互联网+”新业务模式下精准有效的风控解决方案。
7、神策数据——神策分析
神策分析(Sensors Analytics)是一个深度用户行为分析平台,支持私有化部署、基础数据采集与建模,并作为PaaS平台支持二次开发。此外,还提供大数据相关咨询和数据驱动完整解决方案。
8、天眼查——天眼查
天眼查是人人都能用的“商业调查工具”,核心功能为“查公司”、“查老板”、“查关系”。目前,天眼查收录了全国超1.2亿家市场主体信息,除了上市信息、企业背景、企业发展、司法风险、经营风险、经营状况、知识产权等64种数据维度信息展示外,天眼查独特的“关系梳理“能让用户直观地看清关联实体及其背后的商业关系。
9、网智天元——金鹏汽车金融大数据风控系统
金鹏汽车金融大数据风控系统一站式完成车贷审批流程。一套系统集多项功能,风险识别功能,给予权威精准的可视化风险预警信息提示。自动决策功能,有效针对新车贷款、二手车贷款业务,给予差异化定价提示。“金鹏”基于大数据科技、决策树规则引擎、深度学习等多项核心技术,有效针对新车贷款、二手车贷款等业务,提高风控效率。
10、众安科技——众安科技X-model反欺诈
众安科技智能数据产品基于海量数据源和资深实战经验,为客户提供精细化风险管理及定制化模型搭建服务。通过人工智能、云平台、大数据等技术和各类金融机构无缝对接,打造“金融+场景+技术”的跨界融合,提高金融机构的服务水平,降低运营风险,为各类金融机构赋能。智能数据产品根据企业对不同深度的技术支持需求,从数据接口调用,到深入的联合建模,覆盖了智能数据应用和交付的各种方式。
本文由 数据猿 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48680.html 。
数据分析
2017-10-27 04:12:00
图丨合影留念
10月25日,由《数据猿》主办的“2017金融科技数据驱动金融商业裂变价值峰会”在北京悠唐皇冠假日酒店举行。本届峰会从数据智能的角度,聚焦 “数据如何驱动金融商业裂变”,从消费金融、供应链金融以及金融前沿科技三大角度深入探索数据智能为金融领域带来的变革。
「金猿奖」是由数据猿发起并创办,凭借 大数据 垂直行业媒体的独特视角和优势,针对大数据垂直行业的文章、案例、产品、人物等设置的奖项。峰会前期,数据猿邀请了 金融大数据 领域内优秀企业及领军人物、投资人、业界专家学者,共同以“大数据在金融领域的商业价值探索”为主题进行了约稿、案例、产品征集。
经过2个月的时间,数据猿专栏收到了大量的企业高层文章,经过内部筛选选出了20篇稿件,再交由业内专家组成的评审团进行科学系统地评定,最终选出了10篇金融科技优秀文章。大佬们的真知灼见将为金融科技行业的健康、有序发展添砖加瓦。会上,“金猿奖2017金融科技优秀征文奖”获奖名单正式公布(排名不分先后):
天创信用CRO张宇《借鉴美国数据驱动理念,实现中国消费金融弯道超车》
在互联网信息发达的时代,智能手机的普及、大数据的产生与机器学习的应用,仅仅是提供了更多的数据渠道,加快了模型迭代的速度与产生多维的用户画像,但金融的本质即“不同主体之间通过价格发现来实现跨时空的价值交换”并没有改变。天创信用CRO张宇在文章中指出,要透过现象看本质,开展业务时秉承着消费金融每个环节的根本,从风险、成本、收益等基础角度去思考。切实体会到基于数据驱动的消费金融业务管理必须遵守以下“五大原则”:风险收益平衡原则、未雨绸缪的业务规划原则、通过概率进行管理原则、通过指标体系管理原则和权责清晰的风险管理原则。
百分点集团技术副总裁兼首席架构师刘译璟《未来银行,将会颠覆一切》
到了DT时代,整个思路在转变。金融行业从业者面对的不再是单一的业务,而是整个现实世界,如何来做?刘译璟说:“要通过一些数据化的手段把这些现实世界转换到数据世界里面去。这时候,需要建立现实世界的数学模型,在这个数学模型之上再去建立一个新的业务系统,这个业务系统透过数据世界就能了解现实的情况,从而自主地做出决策。”
聚信立数据科学家甘建铃《孙子兵法之庙算篇》
孙子兵法特别强调要“未战而庙算”,即在“未战”前举行会议,分析客观和主观的条件,制定计划;企业目标是否正确,是否符合市场和自身实际;对项目精打细算,选择有利的环境、适度的规模; 数据分析 相关人员是否专业,是否严谨,是否有足够的执行力;业务流程是否打通,各部门职责是否明确;管理者在调动资源上是否有足够的推动力;如果项目不顺利,是否有相应的应对策略或备用的方案……
甘建铃认为,凡此种种,是企业想要依靠数据分析来降低成本、提高效率、开发新产品、开拓新市场等等所不得不考虑的。“未战”而庙算胜,成功指日可待,“未战”而庙算不胜,失败则成定局。
诸葛io 产品vp 于晓松《「场景化」增长的践行者 ——探寻大数据时代的商业变革》
随着大数据技术和认识的不断发展,越来越多的人也开始意识到,数据作为一种生产资料,如果不积极探索它、利用它、分析它,那么数据就如同沉睡的“金矿”,真正的价值无法体现出来。在文章中,于晓松指出,对于一个企业来说,对内需要通过大数据优化企业信息化系统,优化成本结构;对外需要通过大数据减少客户流失,增加高价值客户。因此,以用户为中心,深挖行为数据、设定核心指标、梳理业务流程,最终用数据发现问题、驱动决策,这才是大数据应该产生的真正价值。
易日升总裁史建伟《大数据风控模型在消费金融场景下的六大应用》
对于大数据在贷后监控怎么去运用?史建伟认为重点是看几个方面,第一基于非标场景,实时跟进合作伙伴的经营状况是否会有异常波动。同时还要对个体进行跟踪,例如他原先的几个月可能有一个相对比较固定的行为,突然之间行为中断了一段时间,系统就会把它筛出来重点关注。
史建伟在文章中特别强调:“最后在整个催收环节,最坏的催收情况就是失联。所以大数据在催收这个领域的运用就是修复失联的状况。通过我们原先收集的众多的数据,通过我们在市场中能接触到的众多的数据,通过他周围的关系圈、社交圈,一步步修复失联对象的信息,最终找到他。”
达观数据创始人兼CEO陈运文《算法技术剖析海量数据,数据价值驱动企业收益》
金融行业是一个极其注重用户数据隐私的行业,用户数据的流失也意味这用户信任的流失,所以金融企业除却自我技术研发外,在选择利用第三方技术时,如何兼顾数据的可用性和私密性也是重中之重,所以选择技术优良且值得信任第三方这一事项不容忽视。
陈运文指出,在数据不断增加和算法技术日益优良的并行时代,借助技术去挖掘数据蕴藏的价值,利用数据蕴藏的价值去驱动企业的运营和发展,这是技术、数据、企业收益三者之间的良性循环,各个行业均如此,金融行业亦不能免俗。
东方金信CEO 王伟哲《金融大数据将推进全社会的诚信建设》
王伟哲认为,国内的金融行业、运营商行业,是较早使用大数据技术的行业。金融大数据的优势在于帮助客户降低运营成本,提升科学决策效率。一个金融大数据项目往往涉及的内容很多,包含平台产品、大数据技术、数据建模和业务理解等,功能全面、性能稳定,是金融大数据平台的基础性要求。
安华金和 CTO、技术副总裁杨海峰《金融行业数据实时共享场景下的动态脱敏技术》
目前,脱敏技术中的静态脱敏技术常见于银行等金融领域。静态脱敏技术的应用,其价值在于打造一份全新的、“高度仿真”的数据库,供非安全环境下使用。凭借着低门槛、易部署等特性,静态脱敏技术率先被用户所接受。杨海峰表示,在近两年,这种数据处理方式先后被银行、证券、保险、社保等行业所采纳,已经成为数据共享中的重要工具。
亚信数据CTO於今 &亚信数据硅谷 人工智能 研发中心主任常剑 《机器学习引领智慧金融,变革万亿规模实时支付风控模式》
於今 、常剑表示,实时金融欺诈检测系统主要提供了4个方面的能力:首先,引入数据驱动的风控模型,以机器学习为基础,科学设定反欺诈规则,实现从数据到业务语言以及机器代码的转化。其次,实现了包括电子、手机、网银等多渠道的全面数据接入,提供完善的欺诈案件记录和处置的功能,填补事中风险管控工作的空白。第三,系统提供了优化的交易风险处置,通过量化风险,触发不同级别的防控策略,优化系统效果和用户体验。最后,可以提供全面的报表和分析功能,实时监控全局的风险情况,以便掌握信息。
能金云总裁许瀚丹《能金云:利用大数据 构建金融风险防控体系》
文中,许瀚丹介绍到,能金云绿色资产风控平台的数据支持来自独立打造的DPEN数据平台,DPEN取自于Data Platform of Eco Network,是数据、信息和互联网三者的集合。DPEN具有强大数据处理能力,支持数千万个采集节点,源源不断的数据汇聚到DPEN后,被数据库接收,形成模型供后续比较研究。数据不仅反映机器的运行状况,也计算出机器运行的最优方案。正是基于Dpen的分析、预测、预防、校正能力,企业资产运营会更加智慧。DPEN的强大之处就在于它的可预防性,通过实时数据监控及时调整防患未然,这也是利用大数据力量防范金融风险价值所在、优势所在、智慧所在。
本文由 数据猿 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48677.html 。
数据分析
2017-10-27 04:05:00
工业大数据 应用平台“ 积梦智能 ”正式宣布完成2000万人民币天使轮融资,本轮融资由真格基金投资。
积梦智能创始人谢孟军表示,资金将主要用于团队建设、市场推广、技术交流、深度合作等方面。本轮融资对于积梦智能的发展意义重大——这意味着积梦智能得到了资本市场的认可,在获得了这笔数额巨大的天使轮融资后,积梦智能的未来有着无限可能。同时,通过融资,积梦智能可以扩大研发团队和市场团队的规模,让产品快速迭代和推广,在市场中占据有利地位。
“积梦智能”创始人谢孟军
真格基金董事总经理兼华东区负责人顾旻曼表示:“我觉得积梦做的方向正是智能制造这个大方向里的核心环节,如何使用先进的软硬件和流程管理,帮助企业更好的提高制造水平,从而能够达标承接更多高精尖的订单,同时实现更好的成本控制。”
“积梦智能”是一家工业智能科技公司,致力于生产过程中的 大数据管理 和应用。通过监控制造生产中的设备状态、环境因素、人员情况、产品质量、工艺过程等,深度挖掘和系统分析这些数据,从而优化作业流程、提高设备能效、增加人均产能、提升产品质量。
其核心业务是 大数据 应用平台,通过集合工业互联网、云计算、大数据在生产制造全流程的应用,实现制造过程中的数字化控制、状态信息实时监测和自适应控制。
积梦智能自主研发的软硬件系统能够监测出人、设备、物料和产品间的最佳配比,通过数字工厂、大数据模型来展示,让管理者进行方向决策,让技术人员解决生产问题,让作业人员提升工作效率。
积梦智能的目标客户是整个制造业,现有客群包括汽车行业、电子元件、机械加工及标准件行业等,目前已成功应用于多家龙头企业。
例如某知名汽车企业,积梦智能平台已经应用于各个部门。积梦智能帮助该企业在其研发中心和各制造工厂中建立了包含激光测量、三坐标测量、白光测量和各类量检具等设备在内的完整质量监控和分析体系。
谢孟军指出:“目前工业大数据应用才刚起步,国内工厂的信息化工作存在缺陷,数据利用率很低,对于大数据的应用程度参差不齐。许多企业都停留在数据采集和管理阶段,而最关键的分析挖掘和展现方面却鲜有人涉足。积梦智能以“质量”为突破口,利用创始团队丰富的数字工厂模型积累,将非结构化的东西结构化,以此服务客户。”
积梦智能的团队也是阵容强大,8位核心成员均来自知名互联网企业和工业制造企业,如苹果、盛大、上汽、饿了么、七牛等,拥有非常丰富的智能生产线建设经验以及工业大 数据分析 经验。
谢孟军希望与团队一起将积梦智能打造为业内的领军者,以数据驱动生产。在未来几年内,积梦智能计划将主要龙头企业的制造数据全面接入工业大数据分析平台,并以该平台为基础,开发各种工业应用,实现数据驱动的生产模式,为企业提供数据和应用托管业务。

项目:积梦智能
公司:上海积梦智能科技有限公司
网址:jimeng.io
本文由 积梦智能 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48539.html 。
数据分析
2017-10-23 10:05:00
作者:刘燕
2014 年 11 月份,当警官 Lee DeBrabander 在长滩( Long Beach)缉毒队的 数据分析系统 Palantir 上标记一件机密案件时,他以为关键细节会被隐藏,并对未授权用户不可见。保密性是警察工作的重中之重——甚至事关生死。它通常涉及对证人、卧底警察的保护以及对下一步行动的保密。但不久之后,一位反团伙犯罪部门的警员,在调用与该案件相关的汽车牌照时,却同样能够读取所有与此相关的文件。
「你可以看下这个吗?」DeBrabander 在发给 Palantir 工程师的邮件中这样写道, 后来为了回应要求公开公众记录的要求,这封邮件由 Backchannel 媒体获得。 Palantir 是由支付服务 PayPal 联合创始人、技术投资人和川普支持者彼得·泰尔( Peter Thiel )投资。
Palantir 得以向全国的警察部门出售数据存储、分析和协作软件,是建立在其坚实的安全性之上。其官网显示,「 Palantir 的执法业务提供了强大的内置隐私保护和民权保护措施,包括细粒度的访问控制与先进的数据保留能力。」
然而, DeBrabander 的申诉过程并不容易。两周后,该敏感案件仍然可以被长滩警察局的其他侦探公开阅览。「我去了趟反团伙犯罪部门,并让他们再调用一次那个牌照,因为这些文件并没有被列入我们的保密组中,果然,那个牌照出现在了我们想要严密控制的那份报告里面,」他在一封给 Palantir 的电子邮件中抱怨道。四个月后,他的案件依旧对其他警员可见,而他还在给 Palantir 发送邮件寻求对方解决。
执法业务只是 Palantir 的一小部分业务, 它的主要客户包括军方客户、CIA 等情报机构、国土安全局和大型金融机构。在警察部门,Palantir 的工具现在被用来标记交通违规、假释违规及其它日常违规行为。但警察部门一些最敏感的工作也依赖于 Palantir 的保护。Palantir 的软件能够摄取和筛选横跨多个司法管辖区的百万条数字记录,识别链接和共享数据,以此来创建或侦破案件。
Palantir 所处理的数据的利用范围、类型、数量、留存度,以及前所未有的用户访问量,都引起了人们对隐私、公平、种族正义和公民权利的深切关注。但是直到现在,我们还不太清楚该系统是如何工作的、使用者是谁以及他们的问题是什么。并且, Palantir 自己以及它的许多警察部门客户也都不愿意谈论这些问题。
迄今为止最大的 Palantir 系统调查报告之一显示,Backchannel 公开了几十份来自美国各地警署的公开记录请求。当该公司开始向执法部门销售自己的产品时,就已经留下了文本痕迹。美国 50 个州都有公共记录法,允许公民访问地方和政府机构的合同、文件和电子邮件。通过这种方式就可以明白该公司在警察相关业务中的运作,但涉及国家安全的业务却无法知晓。
显而易见的是,利用 Palantir 的执法机构遇到了一系列问题,数据的暴露只是一个开始。在那些请求文件中,警察部门还指责 Palantir 公司抬高价格、软件难用、服务条款不透明以及「未完成产品交付」(那位长滩警官的电邮原话)。Palantir 可能会精简一些刑事调查的流程,但也可能会导致较高的成本,从而被转嫁到警察部队自身以及他们所服务的机构身上。
这些文件显示了 Palantir 如何将硅谷模式应用于国内执法领域:以硬件折扣和联邦补贴来吸引新客户,并让他们分享数据从而获得其他用户的数据访问权限。当有足够多的司法管辖区客户都加入到由警察部门、政府机构和数据库所组成的 Palantir 互联网络中时,最终形成的数据宝库就类似于一张付费访问社交网络——一个犯罪网络版的 Facebook,然后在公民几乎毫无知情的情况下,追踪公民的个人信息。
这就是 Palantir 暗中吞噬市场的来龙去脉,尽管 Backchannel 的调查报告揭露出很多问题,但它成功拿下了美国人口最多的州,接管了该州执法情报机构的订单,并将这一模式复制到其它州以及世界各地。
除了 Palantir 的内部人员,没有人确切知道美国有多少警察部门在使用它们的软件。纽约警方肯定是其客户,其它还有芝加哥库克县治安官员、弗吉尼亚州警察、在华盛顿特区大都会警局,以及犹他州的十几个执法机构。尽管外界请求很多,但 Palantir 拒绝任何内部人员接受采访,或对 Backchannel 的发现发表评论。
我们在长达数月的调查中获得了大量的公共合同和数据,可以描绘出一幅大致的公司发展图景。然而这些资料表明,仅加州就占据了大多数的部署业务——可能接近于目前 Palantir 的国内执法系统销售收入的 90%。
Palantir 的软件已经部署在洛杉矶警局(LAPD)、长滩警局(LBPD)以及加州伯班克县警局;萨克拉门托治安部、文图拉治安部和洛杉矶县治安部(LASD);国家公路巡逻队;由橙县、三藩市、硅谷、圣地亚哥和洛杉矶当地部门所运行的国土安全「融合中心(fusion centers)」。采购订单和发票信息显示,这些机构自 2009 年以来已经向 Palantir 支付了超过 5000 万美元。
洛杉矶是加州第一个部署 Palantir 的城市。2009 年,时任洛杉矶警局局长的 Bill Bratton 想要测试实时分析和 数据可视化 。「我们正在寻找一款工具来更好地实现警局即将推出的无线电通话系统的可视化,」时任队长现任洛杉矶警局局长的 Sean Malinowski 回忆道,「 Palantir 与我们合作完成一个实验,创建出了一款态势感知工具。」
该测试很快发展成一个调查分析平台,可以访问犯罪报告和车牌信息数据库。Bratton 甚至认为,Palantir 可能只是其很有发展前景的预测警务( predictive policing,即认为历史数据可以提供线索预测未来犯罪的可能发生地 )计划的一个工具。他让 Craig Uchida 拟定了一个计划,后者是数据驱动治安领域的一名顾问兼研究员。
「在洛杉矶,我们开始思考数据在暴力犯罪领域的用途,分析一下犯罪的发生地点以及原因,」Uchida 说,「 2009 年,洛杉矶警局没有真正关注于使用数据来达到那些目的。他们有大量的数据,像所有其他的警察部门一样,但是他们并没有关注于如何使用它以及使用它来做什么。」
Uchida 热衷于热点警务( hotspot policing ):部署警员骑自行车或步行到动乱地区,以缓解紧张局势并将潜在犯罪扼杀于萌芽状态。他提出了一个名为「激光(Laser)」的计划,该计划将处理六年以来的犯罪数据,从而确定该城市的枪支犯罪高发区域。那些被编号为「激光区(Laser Zones)」的地带和社区,将进行定期、公开的巡视。
最终被圈定的是牛顿区:洛杉矶南部九平方英里的土地,是 40 多个帮派的聚集地。牛顿区的枪支犯罪恶名昭著,被人们戏称为「枪击牛顿」,还成了 Jake Gyllenhaal 导演的警察电影《End of Watch》的故事发生地。2011 年,就在「激光计划」开始前,牛顿区的枪支暴力程度在洛杉矶 21 个区中排名第 3。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-10-22 11:06:00
10月18日报道,Google大脑项目联合创始人、前 百度 首席科学家 吴恩达 将出任 Woebot 公司新任董事长,该公司拥有一款同名聊天机器人。这款机器人旨在利用源于认知行为疗法的技术,帮助人们解决他们的心理健康问题。该疗法通过制定个性化的应对策略,帮助患有抑郁症和焦虑等精神疾病的用户管理自己的情绪。
据斯坦福大学的研究显示,在使用Woebot聊天机器人两周后,用户的抑郁和焦虑症状有所减轻。吴恩达认为, 机器学习 技术能够为精神健康领域带来极大的福祉,因此他才决定与Woebot合作。据吴恩达在接受采访时称,在出任Woebot董事长后,他仍将从事其他项目。他将仅参与董事会工作,并为Woebot提供支持,而非在该公司担任全职工作。例如,他将继续在自己联合创立的在线学习网站Coursera教授深度学习系列课程。
在辞去百度机器学习项目主管的职位后,医疗保健成为了吴恩达目前工作的重点。今年早些时候,与他合作的一个斯坦福大学研团队发布报告称,他们已经训练出一个机器学习系统,能够比心脏病专家更精确地解读心电图。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-10-20 09:38:00
由武汉大学新闻与传播学院、武汉大学媒体发展研究中心、财新网和中美教育基金联合主办、镝次元 数据新闻 研究中心协办的 第三届数据新闻比赛 获奖名单及前20、50入围名单出炉。快来看看花落谁家?
比赛于2017年8月15日截止报名,报名期间共收到272个团队的1067人参赛申请。最终,提交的参赛作品有119件,经评委会认定有效作品102件。最终有7件作品获得本次比赛的奖项,前50名作品榜上有名!
获奖名单如下:
特等奖
184号 《两万条数据给你最准确的北京租房素描》
武汉大学:靳海莲、杜俊成、史晨瑾
一等奖
10号《雾霾十三年》
中国人民大学:陈庭玉、徐也晴、管彤;
指导教师:方洁
二等奖
115号《高等教育资源这块“蛋糕”该怎么分?》
浙江大学:徐婷、吴春霆、
浙江大学CAD&CG实验室:张玮、马昱欣
187号《十字路口的钢铁行业》
宗涵、李斐,中冶赛迪工程技术股份有限公司;
周宇杰,成都雨珂医疗科技有限责任公司;汪磊,西南交通大学
三等奖
265号《美国人眼中的中国文化符号》
赵鹿鸣,华东师范大学;徐安可,中国地质大学;张仁尧,上海师范大学
指导教师:申琦(华东师范大学);叶韦明(北京大学深圳研究生院)
254号《暗流:恐怖网络的诞生》
刘智,台湾交通大学管理科学系硕士班
138号《现阶段“移动NICU”需求缺口分析——以广东省为例》
中山大学:曾乐、邱一耕、杨妍琦、许悦瑾
前20、50入围名单见文末链接
注:由于没有符合评选标准的研究报告,故此类奖项空缺。
奖项详情请参见官网:http://file.caixin.com/datanews_mobile/competition2017/
获奖作品将于接下来的一周展出,敬请期待!

主办方
协办方
战略支持伙伴

点击阅读原文,一睹本届比赛获奖及入围作品的风采吧!
http://www.dydata.io/article/p/918459174501949440
本文由 dydata 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/48478.html 。
数据分析
2017-10-17 06:30:00
摘要:本讲座选自清华语音语言实验室副主任王东于2016年1月19日在RONGv2.0系列——”语言语音语义与 大数据 技术”专场上所做的题为《语音识别中的 大数据 与小数据学习》的演讲。
谢谢大家。刚才刘老师已经把很多的东西说得很清楚了,我觉得我已经可以走了J。但是既然来了,还是应该给大家说一说。刘老师在一个比较宏观的场景下给大家介绍了整体的技术发展现状,我稍微聚焦在一个特别小的地方,给大家一个参考。
我今天给大家报告的题目是语音识别中的大数据与小数据的学习。什么意思呢?我们都需要大数据,今天的会也是个大数据的会。问题是很多时候我没有那么多大数据,怎么办?我们希望有一种办法,在没有很多的数据的时候,用小数据实现大数据的能力。
语音识别大家都知道很火爆,很多商业公司推出了语音识别服务。总体说来,语音识别其实是 人工智能 的一个分支,我们希望跟机器交互的时候能够实现比较自然的交流,而不是通过文本打字,这在未来是一个必不可少的智能交互手段。
这是大约直到5年前还统治世界的这么一个语音识别技术框架,叫HMM-GMM模型。最早是由IBM的Fred Jelinek和CMU的Jim Baker 这两位提出来的。在这之前,语音识别一直是拿两段声音互相匹配,即动态时间弯折,DTW。但这种模板匹配方法很难处理语音中的不确定性问题,所以人们开始思考用统计模型对语音建模。你不是有很多不确定性吗?那我们就用统计方法来描述这种不确定性,把不确定性放在模型里面。这即HMM-GMM方法,从80年代一直到2010年左右的语音识别系统框架。该框架主要分三个组成部分。最底层是特征提取。我想去识别你的语音,首先我得把最显著的特征提取出来,一般用的特征叫MFCC的特征。第二个部分是描述发音不确定性的静态概率模型,即GMM模型。第三个部分是描述发音时序特性的动态概率模型,即HMM模型。这三个部分组成HMM-GMM系统框架,在很多领域都可应用,特别是对语音识别尤其有效,因为语音信号具有很强的动态性,适合用该模型描述。
有了这个框架之后,Fred和Jim两位先驱就提出这么一个到现在还在用的公式,即后验概率最大化识别准则。从80年代起直到大约在5年前,我们一直都是这么做语音识别的。一个重要的问题是,有了统计模型还不够,需要用数据来对模型进行训练,或者说,使模型能适应某一任务的数据。当时就提出这么一个说法,叫“No data like more data”,意思是说只有有了Data这个模型才有意义,Data越多越大,模型效果越好。
2010年的时候世界发生了很大的变化。第一件事情特征提取过程的简化。传统的特征提取方法,如MFCC,要用很多步骤来提取出特征。现在我不需要你人为地设计出这么多复杂的步骤,我直接给你一个语音信号的原始信号,或者简单的原始谱,你把语音特征提取过程用深度神经网络学习出来。这意味着人们不再需要去费劲设计各种特征提取方法和步骤,人的压力就减轻了,而且因为学习得到的特征提取方法和任务目标更匹配。另一件事情是传统GMM模型被深度神经网络模型取代。传统GMM模型通过混合若干简单高斯模型来生成较复杂的概率分布模型,可以描述语音信号的静态分布特性,但对不同发音的区分性不够。用深度神经网络取代GMM,可以直接描述后验概率,增加发音区分性。第三件事情是传统的HMM模型被递归神经网络取代。RNN模型是比HMM更强的描述动态特性的工具,将HMM中的离散状态描述变成连续状态描述。所以,基本上 深度学习 是把原来的模型和方法全部推翻了,用神经模型代替了概率图模型,将原来人工方式做的事情变成了一种学习的方式。这是一种非常翻天覆地的变化。
现在的语音识别基本是这个样子的,整个一套系统不再有那么多复杂的模块,基本是由神经网络将从语音信号到说话内容端到端的学习出来。这幅画刘老师也提到过,由于深度学习的引入,语音识别系统的性能大幅提高。
今天是大数据的讲堂,我们看语音识别和数据有什么关系呢?在我看来,从我学习语音识别开始,我们就知道data是非常重要的东西,基本上做语音识别一大部分工作是在做data。这幅图告诉我们什么事呢?告诉我们两件事,首先数据很重要,数据越多,性能越好。还有一个事,基于DNN的系统在数据增大时的效果提升更明显。这意味数据重要,模型更加重要,只有数据和模型匹配的时候才能学到更多的东西,只有这两个加在一起的时候才能实现“大数据”。感觉现在似乎是说我们还需要data,但并不像以前那么迫切。因为神经网络的灵活性,数据少我们可以干小事,数据大我们可以干大事,而不是像以前一样必须有大量数据,小数据我们一样会干的不错。换句话说,是我们现在对data的依赖有所下降,我们还是很希望数据,但并不饥渴。We are datahungry,but not starving。
事实上作为语音研究者,在大数据火爆之前我们一直不觉得自己是做大数据的,即使现在我们也不觉得自己是做大数据的。为什么呢,因为我们觉得手头的数据并没有那么大。
具体来说,(1) 原始数据很大,标准数据很少;(2)低质量的数据很大,可用的数据其实并不多;(3)中英文数据很大,很多主流语言有很多数据可以得到,但是一些少数民族语言、小语种很难得到数据;(3)收费数据很大,免费数据很少,很多数据是有,都在公司里,都要你钱的,其实没有多少数据供研究者免费使用;(4)信息含量很大,可用信息很少。我现在说话,大家能听到我的声音,其中包括各种信息,包括说的什么话、什么口音、什么性别等。这里边信息量很大,但是我们能用的东西确实非常非常少;(5)积累速度很快,一天积累无数的数据,但是能处理的很少,计算机的计算量是有限的。刚才刘老师说的四个V(Volume、Velocity、Variety、Value),似乎好像看起来对语音数据来说,Volume是适合的,其他几个都不是特别好。这意味着其实我们只是看着像大数据,其实并非如此。另一方面,因为语音信号里边确实有很多信息,所以我们来认为我们潜力很大,我们的数据里面可以挖到很多东西,但是到当前能够利用的,或者已经利用的东西还是非常非常少。一方面我们的技术可能没达到那种程度,第二说明我们还有潜力,未来我们可能真的可以称为大数据研究。
我们希望干什么事呢?比如现在如果数据量很大,好几十台、上百台CPU同时训练,那当然是最好的。但这毕竟并不容易,除了Google、百度有那种能力之外,我们大多数研究机构还是没有这种能力。退而求其次,我们希望用小数据做大数据的事情。我们数据有限,但是我们还是希望能够得到一些大数据能得到的好处。
可能的方案有哪些呢?比较著名的可能是非监督学习。比如图上这个机器人看了很多书,这是监督学习;但是有的时候没有这些书,它就满世界转悠,看到一些东西记下来,用这些来丰富自己的知识,这是非监督学习。半监督学习的意思是,可能我学了一点东西,但是没有太多的东西可学,因此可以利用学到的一点知识,为其它没有标注的数据进行标注,以扩大学习样本。弱监督学习,比如说没有那么多标好的语音,但是网上有很多有声小说,如《盗墓笔记》等,这些小说有人帮你读出来了,因此可以利用里边的数据进行弱监督学习。另外一些方法包括数据合成和转移学习,这是我想给大家分享的重点。
首先是数据合成。我们有一些数据,但数据总量有限。我可以用这些种子数据造出一些数据来。比如我现在需要噪声数据,把种子数据里加一些噪音,这些噪音可以是各种各样的,可以是机场的噪音,也可以是白噪声,也可以是咖啡馆的声音。虽然我们没有这些噪音为背景的语音,但是通过人工加入这些噪音,在训练的时候这些噪音信息还是加进去了。通过训练,那些不容易被噪音破坏掉的语音成分被突出出来,增强识别效果。左边这幅图是加噪训练的一个例子。我们往原始的DNN模型的输入端加入噪音,通过学习,可以看到在噪声环境下的识别性能显著提高,对纯净语音性能几乎没有影响。
加噪编码器,或者DAE。这一模型在很90年代就提出来。现在研究者倾向认为,通过噪音训练的编码器等价于学习一个低维的子空间,这些低维子空间对噪音不敏感。这一理论最初是基于白噪声,后来大家又做了扩展,加入其他噪音发现结果也不错。比如说可以加一些敲门声,DAE就可以把敲门声滤掉,把跟敲门声无关的信息学出来。同样的方法还可以学习和滤除回音。
我们用这一方法可以去掉声音中的音乐。音乐很规则,很有规律性,利用这点,我们可以用DAE学习音乐的特性。这是原始的语音,加入一些Piano,或加入Rap音乐。我们可以看到,加上这些噪音以后识别效果就变得非常差。这说明音乐对语音识别影响很大,越是跟人声越近的音乐影响越大。
我们试图用DAE学习音乐特性。左图为一个DAE,输入的语音信号里面加入一些音乐噪音后生成的Fbank特征。输出是原始纯净声音的Fbank。通过学习,可以有效滤除这些加入的音乐。特别有意思的是,这里面加入Piano进行训练后,得到的模型对其它音乐学习也有好处。这证明音乐是具有共性的,学习一种音乐对其它音乐噪音也是有好处的。
另一种方法是转移学习。这里有两个机器人,这个机器人先知先觉,学了很多东西,这个机器人将这个知识传到了另外一个机器人那里,第二个机器人在没有数据的条件下也学得了很多知识,这一方法叫做转移学习。
基于深度学习的转移学习方法早在2009年就已经提出来,近年来得到广泛应用。如图所示,我把各种各样可能的数据或特征都给它扔进神经网络,网络的中间层用来表征由各种不同的知识得到的共享的、共用的特征。例如,输入既可以是中文,也可以是英文,可以是机场环境,也可以是办公室环境,但是不管什么输入,都共享中间层,这样各种数据资源之间可以共享信息。用了这样一个共享信息的网络,网络基本架构已经成型,实际应用的时候只要一些简单的数据进行自适应就可以得到很好的结果。
具体到语音识别里面,我们做了哪些事呢?有很多很多种方法,我们觉得有些比较有价值的可能是,第一个是跨语言转移学习,第二个是跨模型的转移学习,
为什么要考虑跨语言呢?因为不同语言的数据分布是非常不均匀的,某些语言数据量非常大,某些语言数据很小。人类语言总共有五千多种,其中389种语言覆盖了94%的人群,剩下的那么多的语言其实很少有人说。所以从这个角度来说,其实绝大部分的语言都是闲置的,和大数据不沾边。同时,语言现象是随时变化的,今天说一件事,明天可能说另一件事,差别很大,所以要想一个模型一劳永逸很难。
转移学习是解决上述问题的有效方法,基本思路是利用语言之间的相似性。我们想利用语言之间的相似性来共享资源。原始的共享方法是用一套通用的发音系统来标注各种语言发音,这样不同语言的相似发音就得到了共享。
基于深度学习的语言共享是当前比较有效的方法。如图所示,输入层可以输入各种语言,这些语言共享DNN的中间层,分类层用来在不同语言内部不同发音间进行区分。这是在2012年、2013年做的事情,现在基本上已经成为一个标准框架。
还有一种方法是跨模型转移学习,什么意思呢?现在学了一个模型,这个模型可以作为一个知识源,或者是作为一个老师,这个老师想办法去教一个学生,把知识传递给学生。有很多种方法实现这种转移学习。一种方法是相当于老师教学生一样,我告诉你这个题的答案是什么,然后你照着我的答案去写过程。还有可能是从中间层给出指导,还没出答案,我只告诉你中间的解题过程,你把解题过程告诉这个学生,这个学生也可以学到知识。
2014年、2015年发生很多事情,比如说2014年的时候可以用比较复杂的DNN来学习比较简单的DNN。后来可以用比较复杂的RNN来指导一个比较简单的DNN,这样使得NDD达到近似于RNN的效果。这时的研究思路是尽量保证老师把知识尽可能教给学生。
现在有一个问题,当前的方法都是用强的老师来教一个弱的学生。问题是,如果这个老师很笨怎么办?大家当老师都有这个经验,很多时候老师不如学生,有的学生比老师还聪明,那老师还能教得了吗?比如这幅图里,左边有一个比较浅的网络,右边有比较深的网络,我可以用浅的网络来指导深的网络学习吗?
非常幸运的是,我们的实验发现,即使比较笨的老师还是可以教出比较聪明的学生。通过什么方式呢?一种方式就是我可以告诉这个学生,虽然我知道得不是很清楚,但是最开始我肯定比你知道得多,你也许后来可以发展得很好,但是开始至少你还是比我差一点点,所以我就把那一点点东西传给你,将来怎么发展,师傅领进门,修行在个人。虽然我的这个知识不是特别好,但是我可以让你先有一个锻炼,锻炼的方式可以教给你,然后你自己去学。事实证明,这种方法确实有好处。比如说我们用一个比较弱的DNN,即是比较糟糕的老师去教一个比较强的学生,一个RNN模型。最初的时候,这个DNN老师的错误率是11.40。如果聪明的学生从开始自学,相当于把一个特别好的学生扔到一堆书里,自己去看,结果是12.34,这个结果不如一个弱的老师。当这个DNN老师把这个知识传给学生,聪明的学生拿到老师的知识以后,自己发挥、升华,最后就超过老师了,错误率下降到10.10%。这意味着什么呢?意味着老师弱的时候也无所谓,可以教比较聪明的学生。
总结。我们觉得语言和语音的问题很大程度上是一种大数据背景下的小数据问题,因为我没那么多数据,所以我们不得不用有限的数据做更多的事情。基本的思路就是共享。共享在语音识别里面有很长的历史了,比如基于决策树的上下文相关建模。未来我们可能需要将语音的、文本的各种信息集成在一起进行更有效的共享学习。另一方面,非监督学习有可能是间接利用语音大数据的有效工具。特别有意思的是深度学习使得小数据到大数据的学习成为可能,没有这个工具其实我们很难用小数据做什么事。谢谢各位。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-27 00:35:00
摘要:「数据会说谎」的真实例子有哪些?
一个热门问题下面,昨天看到了一个答案: 「数据会说谎」的真实例子有哪些? – 鱼非鱼的回答 。作者用误导性的言论、数据,在数据的选择和分析,以及结论的得出上面撒谎了。我昨天睡前写了一个答案 「数据会说谎」的真实例子有哪些? – 许行的回答 来质疑他的文章,今天起床以后发现他文章的问题更多。首先我们来看他的答案开头, “很多人觉得飞机更安全(飞机是最安全的交通工具吗? – 飞机),都是看了维基百科上这个国际数据(我也曾是其中一员)”
一开头一举就奠定了本文的基调:你们包括我都被骗了, 国际数据是骗人的,我们要来针对国情进行分析。然后引用了数据并且列出数据来源。似乎好专业呀,又有Wikipedia、网站和期刊。 然而,他完全就是在胡说八道。第一,这个表格中的数据,是来源于Modern Railways(一本大众期刊)第623期上面根据英国环境、运输和区域管理部的数据,范围是 英国本土的各种交通方式(所以表格里面数据显示,大巴多安全呐)。而他所列举的第二个数据来源论文的摘要写道: The authors used traffic exposure data to calculate exposure-based fatal and nonfatal traffic injury rates in the United States. ……Nonfatal injury rates were highest for motorcyclists and bicyclists. Exposure-based traffic injury rates varied by mode of travel, sex, and age group. Motorcyclists, pedestrians, and bicyclists faced increased injury risks. Males, adolescents, and the elderly were also at increased risk. Effective interventions are available and should be implemented to protect these vulnerable road users.
这篇论文是用年龄段、交通方式、性别进行分组研究的,而且,最主要研究的是开车、摩托、自行车这些个人出现的方式!不知道@鱼非鱼同学是不是从自己平时的论文资料库里面随便引用了一篇呢?
所以他的 数据分析 展开就很荒之大谬了,以上都是发达国家的数据,他却说这些不合适:
好了,按照他的操纵思路,读者就会说,嗯,国情不同,具体情况具体分析嘛。然后我们来看关于中国的民航和铁路安全情况。他选择的是2001-2014之间的数据,数据就不贴了,他的结论是:
直接用不太有说服力的统计数据,在加黑的文字里面,直接告诉观众:“在中国,民航的每人公里的死亡率大概是铁路的5.7倍”。长篇大论,数据“详实”,观众就此被说服,这个答案上千赞都没有问题。
但是呢,昨天我写了答案对他的文章进行质疑了 「数据会说谎」的真实例子有哪些? – 许行的回答 ,我的答案提到:
(他的)这个时间点选择上很巧妙。避开了上世纪末一些扎堆的铁路运输事故,但是集中了影响我国21世纪航空运输格局的几次空难,而且数据似乎有问题,比如某次空难的死亡人数是128人而不是155人,引用了Wikipedia的来源却自行修改数据,“引用”是用来装x的么?反正,如果我们选择最近十年2005年-2014年的数据来看的话,结果如下:
是不是数据就反转了?我选择最近十年,也就是2005-2014年的数据是有原因的,大家都知道,科技上有个名词叫做 代差,有时候新的一代就是能吊打老的一代。对于中国民航来说,21世纪的第一个十年是很关键的十年,就本文所论及的飞行安全来说,代差来自于三个方面,而且正是2002-2005年之间的几次重大空难推动的:
a、安全规范的更新,严格而全面的飞行要求开始实行。
b、新的机型比如777-300ER、747-8、787、737NG、380、350等的引入,淘汰老的310、MD82等机型,使得我国的飞机平均机龄达到一个很低的水准。
c、航空企业重组,六大航空合并成为现在的三大航,使得航空公司实力更强,管理开始现代化改革。
在2005年之后,中国民航运输保持了两个长达五年的飞行安全记录,2005之前么,700天就发文章昭告天下了。
铁路运输上面应该也有代差,我不太了解,就不发表言论了。反正,既然我们比较安全性,而且要得出对现实具有指导性结论的话,就不要跨越代差。而且,本来空难、铁路事故的发生概率就不大,并且两个又都是重型运输系统,我想,除了在知乎上面耍耍嘴炮之外,应该没有什么实质性的参考价值吧。毕竟对于中国的民航和客运铁路来说,事故旅客每公里致死的几率没有数量级上面的差异。倒是统计分析哪种飞机机型、哪个航空公司、哪个国家的近十年飞行安全记录,避开比较差的,这样才是我们需要了解的信息。 来源:知乎 作者:许行
原文链接:http://zhuanlan.zhihu.com/flyer/20170910
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-12-20 19:28:00
为此我从投资人的视角,给大家总结了 人工智能 创业的6大核心问题。
第一个问题:互联网 vs 人工智能 首先如果今天大家选择创业,我建议更应该关注人工智能,而非互联网。为什么这么讲?
1. 互联网的流量红利已经消失;
以PC来说,全球PC出货量连续5年下滑。大家知道国内最后出现的一个PC互联网独角兽是谁吗?是知乎,大概是2011年初推出,这么多年过去,再也没有PC互联网的独角兽出现。做个类比,我们知道2015年移动互联网的渗透率和竞争程度和2011年的PC互联网类似,以此类推,2015年以后再做移动APP,也很难出独角兽了。
毕竟中国连续两年手机出货量都在5亿多台,增长放缓,代表无线流量基本已走平,你多卖一台,我就少卖一台,是存量竞争。今天创业者再做一个纯互联网的APP,投资人问的第一个问题就是你怎么获客。因为现阶段流量格局已定,首屏就那几个APP。
2. 互联网+的机会同样有限;
主要在于互联网最大的价值,是解决信息不对称和连接。所以对于电商特别有价值。淘宝用皇冠、钻石等信用体系解决了信息不对称,同时又把全国有这么多买家和卖家连接在一起。这个是互联网的价值。
但很多行业信息和连接并不是痛点。 拿医疗举例,中国三甲医院的大夫就那么多,你把全国13亿人民都和这些大夫连接上了也没用,因为一个医生一天还是只能看那么多病人。互联网并没有提高医生看诊的效率。在诸如餐饮、医疗这些传统领域,互联网的帮助是很有限的。
也包括滴滴打车,互联网解决了打车难的问题,但是没解决打车价格的问题。事实上,补贴去掉之后,大家都发现了滴滴一点都不便宜,道理很简单——不管是专车还是出租车,还是需要由人来开,人工成本降不下来,就不可能便宜。
3. 真正能够提高社会生产力,解决供需关系不平衡的就是人工智能;
人工智能将给社会生产力带来的提高,以及对人类带来的影响将远远超过互联网。
还是拿医疗来说,很多基层医院水平不高,那未来完全可以通过人工智能来辅助医生读CT、X光等医疗影像。像今年,IBMWatson对皮肤黑色素瘤的诊断,准确率已提高至97%,远远超过了人类专家75%-84%的平均水平。
未来,人工智能无论是在无人车、机器人、医疗、金融、教育还是其他领域,都将爆发巨大的社会效益,这点毋庸置疑。 我认为下一波大趋势和大的红利不是互联网+,而是人工智能+。 我建议现在的创业者更应该关注人工智能领域的创业机会。
第二个问题:人工智能 vs 人工智能+ 人工智能主要分三层。最底层是基础架构(Infrastructure),包括 云计算 、芯片以及TensorFlow这样的框架。在基础层之上是中间层,叫通用技术(EnablingTechnology),例如图像识别、语音识别、语义理解、机器翻译这些。
基础层和中间层,是互联网巨头的必争之地。比如芯片领域,Intel、英伟达、高通都投入巨资,竞争极其激烈。同样云计算、框架也是一样,都不是小公司能够涉足的领地。
现在对于中间层的通用技术,BAT也极其重视。因为大家都相信人工智能是下一波工业革命浪潮。 对腾讯、阿里、百度这些巨头来讲,要想在大浪中屹立不倒,必须要构建出人工智能的生态系统(Ecosystem)。 而核心就是要依靠这些Enabling Technology技术。
相比创业公司,BAT的最大优势是什么呢?第一,不缺数据;第二,为了构建自己的生态系统,未来通用技术一定全部是免费的;第三,虽然通用技术免费,但BAT有羊毛出在身上的猪机会。这是典型的互联网打法。
这里的猪是什么?猪就是云计算。例如百度的ABC策略,分别代表人工智能( AI )、 大数据 (Big Data)和云计算(Cloud Computing)。AI我可以不赚钱,开放给大家,那么大家想享受我的服务,就来买我的云吧。
而对于创业企业来说,只做图像识别、语音识别、语义理解、机器翻译这些通用技术,指望通过SDK卖钱,未来路会越来越窄,特别是BAT都免费的压力下。
所以从这个角度讲,创业公司做下面两层风险比较大。 我认为创业公司的机会在最上层,就是拿着下两层的成果去服务垂直行业,也就是我们所谓的人工智能+。
第三个问题:人工智能+ vs +人工智能 深入垂直行业的人工智能+,又可细分为两类情况:即“人工智能+行业”和“行业+人工智能”,他们间有明显的区别。
“AI+行业” 简单讲就是在AI技术成熟之前,这个行业、产品从未存在过。比如自动驾驶,亚马逊的Echo智能音箱、苹果的Siri语音助手。在人工智能技术未突破前,不存在这样的产品。因为AI,创造出了一条全新的产业链。
“行业+AI” 就是行业本身一直存在,产业链条成熟,只是以前完全靠人工,效率比较低,现在加入AI元素后,使得行业效率有了明显提高。比如安防、医疗等领域。
客观讲,这两个类别都有创业机会。但“AI+行业”,因为是一条新的产业链,创业公司与互联网巨头实际是处在同一起跑线上。巨头们坐拥数据优势。所以从这个角度,“行业+AI”相对对创业公司更为友好,也更容易构建出壁垒。
我认为, 未来行业壁垒才是人工智能创业最大的护城河。 因为每个行业都有垂直纵深, 尽管BAT技术好一点、并不关键。拿医疗+AI举例,什么最重要?大量准确的被医生标注过的数据最重要。没有数据,再天才的科学家也无用武之地。
但在国内,这个医疗数据拿出来非常困难。所以BAT做医疗一点优势都没有,因为他们要把这些数据,从各医院、各科室搞出来也很累。相反,如果一个创业者在医疗行业耕耘很多年,也许拿起数据来比大公司更容易。
这要求创始团队的合伙人中,必须有懂行业、有行业资源的人才。这与互联网+一样,一旦细分到具体行业,并不是说你百度、腾讯有资金、有流量,投入人才就什么都能做,比拼的还有行业资源和人脉。
之所以跟大家聊这个话题,是因为前一段去百度大学跟大家交流,他们提到百度人工智能在无人车和DuerOS的应用。同时又问我,人脸识别在国内安防领域的应用价值非常大。像海康威视有近3000亿人民币的市值,每年光净利润就有近百亿。百度在AI方面是不是该考虑进军这个领域。 我回答说千万别,因为安防是典型的、有巨大壁垒的“行业+AI”领域。
即使百度技术好,在人脸识别率方面比海康威视高一个百分点(实际不一定,海康背后有几百人的AI研发团队)。但这并不代表百度就能替代海康。因为安防是“非关键性应用”(non-mission-critical),100个犯人我识别了95个,你比我多识别了一个做到了96个,其实没那么重要。
而反过来,海康对比百度有什么优势?首先海康是做摄像头的,用自己的硬件跑自己的算法,是很自然的事儿。就像苹果手机,软硬一体体验更好。其次,海康做了这么多年的安防,积累了非常多的数据,人脸的数据、环境的数据……在安防领域有数据优势。最后,海康给公安系统做了很多类似警务通、基站信息采集、视图档案管理等SaaS平台的东西,以及警用云系统。我们可以认为公安系统的IT化,其中有一部分就是海康威视参与的。
这些东西可能不赚钱,但却为海康构建了壁垒。因为底层的基础设施都是我建的,那前端的东西就只能用我的(我可以有100个理由,说竞品与我不兼容)。而且海康做了这么长时间,积累了大量的客户资源,特别是政府公安局的资源,开拓这些资源非常需要时间。
这些就是所谓的行业纵深。所以即使对BAT而言,想进入“行业+AI”领域,选择垂直赛道时,同样要非常谨慎。 在巨大的行业壁垒面前,真不是说我的算法比你好一些,市场就是我的,只有技术优势仍然差的很远。
回归 “AI+行业”和“行业+AI”,通常来讲前者的行业纵深会比较浅,而后者则有巨大的行业壁垒。而行业壁垒,则是创业公司最大的护城河,也是抵挡BAT的关键。
第四个问题:关键性应用 vs 非关键性应用 谈到人工智能领域的创业,很多人都会有个误解,就是如果我团队没有个大牛的科学家,比如斯坦福、MIT的博士坐镇,我都不好意思讲在人工智能方面创业。其实这个认知是完全错的。因为在人工智能领域,算法到底有多重要,完全取决于你要准备进入哪个行业。
根据行业和应用场景不同,我认人工智能的创业本质上有mission-critical和non-mission-critical之分。为了方便大家理解,我们简称为“关键性应用”和“非关键性应用”。
“关键性应用”要追求99.9……%后的多个9,做不到就没法商业化。比如大家认为,99%可靠度的自动驾驶能上路吗?肯定不能,意味着100次就出1次事故。99.9%也不行,1000次出一次事故。
千万记住,99%和99.9%的可靠度差距并不是0.9%,而是要反过来算,差距是10倍。 也包括手术机器人,听起来99.9%可靠度已经很高了,但意味着1000次出一次医疗事故,放在美国,医院还不得被巨额索赔搞得破产。
所以“关键性应用”领域,就是一丁点儿错都不能犯的人工智能领域,必须要有技术大牛、科学家或算法专家坐镇。同时,这类项目研发周期都很长。
正如以色列做ADAS (高级驾驶辅助系统)解决方案的Mobileye公司,今年3月被Intel以153亿美金收购。大家知道这家公司研发周期有多长吗?Mobileye成立于1999年,到他们推出首款产品、挣到第一桶金已是2007年。长达8年的研发周期。这在互联网创业里不可想象。包括谷歌无人车从2009年开始研发,到现在一直没有商业化;达芬奇手术机器人从启动研发到2000年拿到美国食品药品管理局(FDA)的认证,花了十年时间。
“关键性应用”的普遍特点就是这样,项目通常很贵,研发周期巨长,离钱非常远,需要持续的融资能力,团队怎样才有持续融资?起码要有非常好的简历和非常好的背景。这个是能够持续融资的必要前提。所以大家可以看到,今天做无人驾驶的创业团队都是高富帅。因为不是高富帅,你都熬不到产品真正商业化应用那天。
当然,如果在人工智能领域都是“关键性应用”,那就没大多数创业者什么事了。实际上,人工智能领域的创业,95%都是“非关键性应用(none-mission-critical)”。简单讲对这些领域,AI的可靠度只要过了基础线,高一点低一点区别不大。
最简单的例子,现在很多公司的门禁开始用人脸识别。你今天带个帽子,明天戴个墨镜或口罩,识别率没法做到99%。可即使没识别出来也没问题。因为所有带人脸识别的门禁都有地方让你按指纹。即使指纹也刷不进去,问题也不大,公司不还有前台吗。
这就是“非关键性应用“。这类项目不追求99%后面的很多个9。 实际上,国内人工智能和机器人方向的创业,大部分领域都是“非关键性应用”。 当然并不是说,在这个领域算法不重要,你天天认不出来也不行,所以一定要过了基础的可用性门槛,偶尔出现问题可以容忍。“关键性应用”则不能容忍。
“非关键性应用“不追求高大上,简单、实用、性价比高更重要,这样的项目通常比拼综合实力。包括: 对行业的洞察理解。要熟知行业痛点; 产品和工程化能力。光在实验室里搞没意义; 成本控制。不光能做出来的产品,还得便宜的做出来; 供应链能力。不光能出货,还要能批量生产; 营销能力。产品出来了,你得把东西卖出去。团队里有没有营销高手,能不能搞定最好的渠道是关键。
所以大家在创业组团队时,一定要想好你选择的赛道处于哪个领域,不同的赛道对于团队的要求是不一样。“关键性应用”必须有技术大牛坐镇,“非关键性应用”则要求团队更加综合和全面。
第五个问题:技术提供商 vs 全栈服务商 现在很多人工智能创业者都是技术背景出身,创业的第一个想法通常是做技术提供商。技术提供商作为创业的敲门砖可以。但如果只定位做技术提供商,未来路会非常窄。为什么说未来只做技术提供商价值会越来越小?原因有几点:
1. 首先通用技术一定是大公司的赛道,BAT未来一定会开放免费。
人家大公司会免费提供人脸识别、语音识别、语义理解、机器翻译这类EnablingTechnology,你还打算怎么靠API调用赚钱呢?也许现在还可赚点小钱,但很难成为一个长久的生意。
2. 依托于算法的技术壁垒会越来越低。
未来随着基础计算平台和开源平台的丰富成熟,技术方面的壁垒会越来越不明显,整个人工智能的技术准入门槛会越降越低。就像2008年你想找个IOS开发者,很难,现在却很容易一样,所有技术的演进都遵循这一规律。特别随着今天各大学的计算机专业,都纷纷开设机器学习课程,未来人才不缺,这会拉低整个行业的进入门槛。
同时随着谷歌TensorFlow等生态系统的成熟,很多领域都会有训练好的模型可以用来参考(出Demo会更快),创业者只要有足够的数据来训练参数就好了。所以未来算法的壁垒会越来越低,如果这个公司的核心竞争力只是算法,那将非常危险。
3.技术提供商如果不直接面向用户/客户提供整体解决方案,则非常容易被上下游碾压:
对于技术提供商和算法类公司,如果你的技术壁垒不够高,上游很可能直接把你的事做了。这样的例子比比皆是,比如给海康威视提供人脸识别算法的公司。问题就在于,海康在用你算法的时候,人家也有庞大的研发团队在研究自己的算法。现在用你是人家还没准备好,一旦准备好立刻会把你替换掉。
即使在有一定技术门槛的行业,技术提供商的日子同样并不好过。比如专注嵌入式的视觉处理芯片的Movidius,大疆无人机一直在用他们的芯片。但自从大疆统治了消费级无人机市场后,大疆现在也很自然地开始研发自己的芯片。
按说芯片的技术壁垒并不低,但只要行业集中度高,赢家就会选择通吃。比如做手机的厂商,出货量到了一个阀值,都有动力自己做芯片。像苹果、三星、华为还有现在的小米,都选择了自己做手机CPU。所以联发科、高通这些技术提供商,其实是挺痛苦的。
这其实是一个产业链通用规律:产业链上的垄断者会吃掉所有利润,而且他们非常有动力往上游或下游扩展。拿PC产业链举例,内存、硬盘、整机、显示器……都不赚钱。钱被谁赚走了?Windows和Intel却赚走了绝大部分利润。
既然做纯技术提供商没有出路,那怎么办?浩哥提出“一横一纵”理论。前期做技术服务可以,但是不能一辈子做技术服务。
“一横”就是指你提供的技术服务。通常“一横”能服务很多行业,一定要找到1、2个,你认为最有市场机会,最适合你的垂直领域,深扎进去做“全栈”:把技术转化为产品,然后搞定用户卖出去,实现商业变现,再通过商业反馈更多的数据,更加夯实自己的技术。 一句话讲,要做技术、产品、商业和数据四位一体的“全栈”,这就是“一纵”。 这才是健康的商业模式。
在垂直外的行业,因为没有利益冲突,你仍可老老实实的做技术服务。这样的话,商业上你能吃透一个垂直行业,技术上你还能通过横向合作,形成更多的数据回路,从而夯实你的技术。这个就是“一横一纵”理论。
那么对于技术创业公司,从“一横”走到“一纵”,要选哪个垂直领域,取决5个关键因素: 市场空间够不够大?
做垂直领域的全栈,还是做横向的技术提供商?取决市场空间哪个更大。找对垂直领域,即使只占一点点市场份额,也可能比做“一横”全归你的收益大。拿美图公司举例,他们有美图秀秀、美拍、美颜相机等APP,同时还会跟很多手机厂商合作,提供相机拍摄的美颜效果,你可以理解这就是技术服务。
但研究2016财报后,大家知道美图秀秀选的“一纵”是什么吗?就是美图手机。以上提到的技术服务都远没有垂直做美图手机赚钱。美图手机占了公司全部营收的93%。虽然美图手机去年的销量大约在74.8万台,仅仅只占国内手机市场全年销量5亿多台的不足0.15%。 行业集中度如何?
做“一横”技术提供商时,最担心的是你的上游或下游过于集中,或者说头部效应越明显,对技术提供商就越不利。举个简单的例子,IDC时代,HP、DELL等厂商卖服务器,都是直接卖给各IT公司,大家日子过的都很滋润。但2010年之后就很难做了,因为云计算出现了。
提供云计算的厂商就那几个,两只手就能数出来。而且头部效应极其明显,仅阿里云一家占了50%以上份额。如果你是一个技术提供商,在跟这么垄断的行业去谈判,你会发现没有任何筹码。所以现在就很悲催,假设我是阿里云,会让你列出BOM成本,我就给你5%或10%的利润,这个生意就很难做了。
在这种情况下,你当然有意愿也往上游走。但带来的问题是什么?如果上游集中度高,说明这事的壁垒很高,你作为技术提供商想往上走,同样很困难;如果这个上游集中度低或客户很零散,对你是件好事。但是你也没有太大动力往上游走,因为这个市场本来就很零散,你即使杀进去,可能只有1%的市场份额,而且使得99%的人都变成你的竞争对手了。这是个悖论。 技术是改良还是革命?
如果你的技术创新对这个垂直领域是革命性的,就越有机会走到上游。如果只是改良性的,你就老老实实在下游赚个辛苦钱算了。 越是颠覆性的东西,越有机会往上游走。因为上游越离不开你,意味着你有机会做他的事。
打个异想天开的比方,如果你能提供一个“待机一礼拜”的电池,那你就可以考虑自己做手机,你的手机只打一点:一星期不用充电,而且是全球唯一!就这一点可能就够了,因为这个技术是革命性的。相反,如果是改良性的技术,例如你的电池待机只是比以前多了10~20%,那你还是老老实实卖电池吧。 双方壁垒谁更高?
技术提供商的壁垒和上游客户的壁垒哪个更高,也决定做“一纵”的成败。拿比较火的直播平台而言,现在都有美颜功能,例如给女孩长出个耳朵那种,这个通常都是第三方提供的技术。技术本身的壁垒并不高,很多公司都能提供,虽然效果有一些小的差异,但你没有明显优势。
可是直播的壁垒相当高,这事有网络效应,用户越多会吸引更多的美女主播,因为能赚到更多钱,美女主播越多,也会带来更多的用户。同时你舍得花钱,需要很多资金来买流量以及签约很NB的主播。所以这个事壁垒很高。你做技术提供商壁垒不高。这种情况下,虽然技术提供商只能赚个辛苦钱,但是仍然完全没有机会往上游走。 到底跟团队基因相符不相符?
能做得了技术服务,不代表能做垂直解决方案,做全栈,因为团队不一定有行业经验,这是很大的问题。亚马逊的无人便利店Amazon Go出来之后,国内不少技术团队也想提供类似的技术,甚至想做2C的便利店。
与他们聊完后,我都会劝他们再考虑一下,你的技术再好,对于用户而言,他买东西的时候,会看这个便利店有人还是无人的吗?不会,这不是优先选项。他首要考虑的还是——哪个便利店离我更近,以及我想买的东西这个便利店有没有。
从这个意义讲,这又回到了零售的本质。所以如果团队没有零售的基因,没有懂零售的人,就别考虑自己开便利店的事。这时候,很多人可能会问“那我找个懂行业的高管不就行了么?”这事没那么简单,如果CEO不了解行业本质,其实是很难靠一个高管去弥补的。
我特别相信基因决定论,如果任何一个新的商业,BAT找个懂行业的高管就能搞定了,那中国互联网的生意就全是BAT的了,就没创业公司什么事了。BAT,一个做搜索,一个做电商,一个做社交。其实他们3个都把对方的事情已尝试了一遍,最后都不成功。所以大家能做什么,不能做什么,跟这个公司的基因是高度相关的。
第六个问题:2C vs 2B 最后一个问题,简单说一下,科技成熟都需要一定的时间。因为从任何技术普及演进的角度,几乎都延续了先是从军工(航天)、到政府、到企业、到B2B2C、再到2C这个规律。人工智能也一样,目前人工智能在2C市场还不是很成熟。
简单说机器人,在个人消费者市场,出货量大的机器人只有4类产品:扫地机器人、无人机、STEAM教育类机器人和亚马逊ECHO为代表的智能音箱。为什么2C市场早期的普及有一定的困难,简单讲几个原因:
1. 产业链不成熟
我做一个创新的东西,成品有10个部件。每一个部件都得自己做,而且因为出货量不大,每个部件都没有规模效应,这就导致每个部件都很贵,那你最后做出成品一定很贵。这是非常大的问题。
2. 2C是额外花钱
这也是很重要的一个问题,2C端的用户因为自掏腰包、额外花钱,所以对价格通常比较敏感,产品很贵就是一个很大的门槛。
3. 2C产品的用户期待度高
用户买了这么贵的东西,自然对产品的期待度会更高很多。大家觉得我买一个机器人回来,恨不得什么都能干:又能唱歌、又能跳舞、又能聊天、又能清洁、又能讲英语。但这是不现实的,现在的技术成熟度离此还有些远。
相对于2C端,这些问题在2B端却不是问题。
1. 2B端对价格承受能力更高
首先,企业对价格的承受能力显然比2C强很多。你说一个机器人2万,2C消费者不可能买,但企业问题不大,企业对成本承受能力高。
2. 2B的核心目的是降成本
举例工业机器人,10万块钱一个,听起来很贵。但一个工业机器人替代你2个岗位。这2个岗位一年也得10万块钱,还不算四险一金。然后这机器人能工作4年,这一下成本只有你原来的25%,甚至不到。那么企业一算账,觉得还是很便宜。
3. 2B可以采取人机混合模式
还有2B端的机器人应用更简单一些。一方面大多是单任务,机器人只要做好一件事就行了,实现起来简单。另外,很多都是以”人机混合”模式在作业。也就是以前需要10个人干活,现在我用机器人替代一半人。简单重复的工作用机器人替代,复杂的用剩下的5个人,这就是”人机混合”模式。
举个例子,现在国内外已有很多安保机器人,按固定路线去巡逻。你可以理解为移动的摄像头,当然算法上肯定加入了一些识别的东西。固定绕路线巡逻,这个完全可以交给机器人来做。难的是,在巡逻的过程中,如果发现有老太太摔倒了,让机器人扶起来,这个目前还做不到。
但这不重要,你们后台不还有5个人么,让他们过来就好了。所以人机混合是2B比较主流的模式,这个大幅降低了机器人普及的难度。
最后再说一点,目前大多数AI创业公司都是技术专家主导,这很容易理解,因为现在技术还有壁垒,技术专家主导起码保证产品能做出来。 不过未来随着技术门槛的降低,特别在“非关键应用”领域里,团队的核心主导,会慢慢过渡到产品经理和行业专家为主,因为他们离用户需求最近。“ 非关键应用 ” 领域,懂需求比技术实现更重要。长期来看,人工智能创业和任何其他领域的创业一样,一定是综合实力的比拼!
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-10-17 00:24:00
在实际的工作中, 数据科学家 们不仅要学会如何实用工具,还要懂得如何与同事合作。The Yhat Blog这篇文章探讨了在实际的数据建模和数据处理的过程中数据科学家和 数据工程师 应该如何处理好关系顺利地完成项目的问题。它引用“摩西十诫”的典故,提出了给数据处理者的五个“诫律”。我们一起来参考一下!
数据科学家和工程师的“五诫”
1.了解你的数据
好的模型依赖于好的数据。要建立真正具有生产力的模型,数据科学家需要知道他们基于创造和存储产品的数据库是否可靠,以及数据库更新的频率。这些信息在项目开始之前就应该被收集并且分享给工程团队,以避免项目进程之中可能产生的阻碍。
在一个理想的世界里,科学家和工程师都应该提前做好应对即将发生的变化的准备(例如,多种变量类型之间的变化),使他们能够据此共同创建,测试和部署相应的新版本。即使不能够保证避免每一个程序中的事故,共享资源和尽早发现缺陷也可以使工程师们降低风险和预见解决可能出现问题的部分。
2.熟悉合作伙伴使用的工具
数据科学家运用的主要编程语言是R或Python,这种语言便于数据的清洁,探索和建模。而工程师,却需要使用多种不同的工具集来构建可扩展的网络和移动应用程序(例如,NET、Ruby on Rails、Node.js 或 JVM)。虽然期望一个人完全懂得使用这两套工具是不切合实际的,但是跨过技术“藩篱”的限制对对方使用的语言和流程有一个基本的了解将大大有助于合作的开展。
将统计代码手动重新编写为另一种语言是一项费时费力又极其容易犯错的工程,所以当出现问题的担忧增加的时候,建立良好的沟通机制(面对面和网络数字化的)绝对是至关重要的。
3.了解技术的局限
当数据科学家和工程师运用不同的工具包工作的时候必然会遇到技术的限制。这常常使他们发狂,因为没有人喜欢被要求返工,或者看着自己辛勤劳作创造出来的产品不理想,甚至更糟糕,看到自己的辛勤劳动付诸东流。
一旦你清楚了模型开发和部署所需要使用的语言(见诫条2),就应该花时间研究一下使用这种语言做什么是可能的,什么是完全不能够实现的。然后就应该设定定期的跨职能讨论会的时间表,科学家和工程师双方要经常沟通例如:你考虑在哪些方面做一些突破双方在哪些地方可以做出让步哪些又是技术完全实现不了的有没有其他选择要实施需要付出多少努力这些努力符合商业价值的考量吗
在实际工作中,假设你是一个数据科学家正在为一个Ruby编写的APP编写一段使用R语言的反欺诈算法,那么你应该知道的是R的GLM功能(用于构建广义线性模型的函数),在Ruby(或Java,对这个问题来说)中并没有相对应的本地功能。这时候就需要大家一起来一场头脑风暴来找寻出路啦。
4.互相尊重
在任何时候,一个数据科学家的工作总是需要大家共同的努力才能够完成,在这个过程中充满了产生误解的可能。那我们的建议是什么呢就是像老话讲的,己所不欲,勿施于人。
对于数据科学家来说,你要做的就是写出便于维护和使用的高质量的代码,积极听取工程师关于重构模型和采取更好替代方法的建议,询问他们怎样才是一个现实的可实行的时间表,你还能提供哪些帮助等。
对于工程师来说,与数据科学家合作,需要明确必须的职责,并且共同商讨达成一份书面的处理问题的优先次序文件,遵循一个不断更新的和现实的路线图,并根据项目的进程不断检验、细化和落实科学的数据模型。
5.履行你的责任和义务
有人认为一个模型一旦创造出来,并且投入了实际的商业运用,无论是创造它的数据科学团队,还是实现了它的工程师们就可以自由地着手下一个大项目,不需要再管理这个项目了。这种想法是非常危险的。事实上,这只是分析的生命周期的另一阶段的开始。
因为,数据科学家和工程师建立生产过程中的监控和管理模型的计划是非常重要的。谁将会监督模型和服务器的稳定性如何将输入和输出数据存储和共享升级版本,再培训和重新测试的路线图是什么还要为解决可能出现的问题制作一个行动计划。如果模型吞吐量增加怎么办扩展需要花费多少时间和金钱由此确定共同承认的公平的前期职责划分,相应地分配团队成员的工作时间。
总结
数据科学家和数据工程师都在朝着同一个目标努力:运用代码建造程序来解决实际的商业问题。不幸的是,误解和技术效率低下常常导致人们忽略了这一目标。当我们在工作中处理和他人的关系的时候,虽然没有万能的神奇公式,但是这五个诫律应该可以在消除数据工程师和数据科学家之间的鸿沟上产生深远的影响。 本文翻译编辑者是沈浩老师门下硕士研究生赵晨
来自微信号:沈浩老师(artofdata)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-08-17 13:48:00
摘要:在微博上收藏了一个技术贴,作者是 Savvs Tjortjoglou(Twitter:@savvas_tj)。他之前的一篇NBA投篮绘图在内地网络上挺火的,几个微信公号都有推,今天看的这一个帖子原题是:How to Track NBA Player Movements in Python ,我尝试着模拟了一遍,加了一点自己的元素,感觉非常不错!
首先,可以进入NBA官网的stats看看,非常详细的统计,主菜单栏里Stats中有一个SportVU Player Tracking,当然还有Team Tracking。里面的可视化呈现相当美观。Intro里写到:Player Tracking is the latest example of how technology and statistics are changing the way we understand the game of basketball. 大数据 的力量的确给传统运动带来了革兴,SportVU是一个软件,它依靠NBA赛场过道(catwalks)上安装的6台摄像机,追踪赛场上每个运动员和篮球本身的移动轨迹,追踪速度是25次/s,通过处理,摄像机收集到的数据为运动速度、运动距离、球员间距、控球等要素的分析提供了极为丰富的统计数据库。
对于美国的运动数据统计能力感到惊讶!但强大的Python当然可以在自我理解下处理这些丰富的数据。
Part 1.引入模块
导入的模块大多数是比较常用的。其中的seaborn是一个统计 数据可视化 模块,画出的图形很美观,实际上在后面的操作中几乎没有用seaborn画图,还是依靠pandas、matplotlib组合。 import seaborn as sns, numpy as np, requests, pandas as pd
%matplotlib inline
import matplotlib.pyplot as plt
from IPython.display import IFrame
因为是可视化,接下来设计画布风格和颜色,直接参考seaborn文档,五种风格分别是:darkgrid,whitegrid,dark,white,ticks。写以下两行代码: sns.set_color_codes()
sns.set_style(‘white’)
接着,用IFrame导入一个网站上的既有Demo。 IFrame(“ http://stats.nba.com/movement/#!/GameID=0041400235&GameEventID=308 “, width = 700, height = 400)
IFrame可以将任何网页导入到IPython Notebook,其他的IDE应该也有类似的嵌入工具。
是个动态小视频,发现IFrame这么好玩,我接下来导入一个自己原来的Tableau作品,效果也是同样好。 IFrame(“ https://public.tableau.com/profile/luochen#!/vizhome/_2861/BibleCrossReference “, width = 800, height = 1000)
Part 2.获取数据
NBA官网数据库有API,两个参数:evenid,gameid。后者是这个playoff game的id。用Requests来解析网页而不是用urllib2,我感觉比较奇怪,但是之前也有用过Requests,发现它的slogan是HTTP for Humans,好大的口气!但是操作,尤其是对API的操作较urllib2简化了很多。 url =” http://stats.nba.com/stats/locations_getmoments/eventid=308&gameid=0041400235 ”
r = requests.get(url)
r.json().keys()
轻松把源网页转成json格式,并读取所有键,共5个: [u’moments’, u’visitor’, u’gamedate’, u’gameid’, u’home’]
我们需要的数据主要是:
home:主场队员的数据
visitor:客场队员的数据
moments:用来绘制运动轨迹的数据
所以接下来就明晰了: home = r.json()[‘home’]
visitor = r.json()[‘visitor’]
moments = r.json()[‘moments’]
前面两个都print一下,结构都很明确直观。
moments是结构最为浩大的数据,毕竟是摄像机每秒25次得到的,先看看它的长度,是700,所以撷一叶而知秋。
moments[0]
结构是这样的,说明就添在后面了:
[3,#赛季,period or quarter
1431486313010L,#时间戳unix-time in mills,转为可读时间大概是:05/13/2015 3:05am UTC
715.32,#距离比赛结束的时间,game clock
19.0,#距离投球结束的时间,shot clock
None,#不懂,反正是空值就不必要care
[[-1,-1, 43.51745, 10.76997, 1.11823],#关于球的信息,前两个数是比赛双方的teamid和playerid;中间两个数是球在球场上的坐标,最后一个数是球的半径,球越高半径越大。
[1610612745, 1891, 43.21625, 12.9461, 0.0],#后10个列表是关于球场上10个队员的信息。意义和第一个关于球的信息列表一致。
[1610612745, 2772, 90.84496, 7.79534, 0.0],
[1610612745, 2730, 77.19964, 34.36718, 0.0],
[1610612745, 2746, 46.24382, 21.14748, 0.0],
[1610612745, 201935, 81.0992, 48.10742, 0.0],
[1610612746, 2440, 88.12605, 11.23036, 0.0],
[1610612746, 200755, 84.41011, 43.47075, 0.0],
[1610612746, 101108, 46.18569, 16.49072, 0.0],
[1610612746, 201599, 78.64683, 31.87798, 0.0],
[1610612746, 201933, 65.89714, 25.57281, 0.0]]]
最理想的 数据分析 模型是pandas的数据框,所以为数据框的建立做准备,接下来的一个代码段就是Python基础。 headers =[‘team_id’,’player_id’,’x_loc’,’y_loc’,’radius’,’moment’,’game_clock’,’shot_clock’]
player_moments=[]
for moment in moments:
for player in moment[5]:
player.extend((moments.index(moment)#索引值, moment[2]#game clock, moment[3]#shot clock))#扩展列表
player_moments.append(player)#扩展空列表
player_moments[0: 11]
非常规整的列表,列表中的每个构成元素也是列表,和上面的样式基本保持一致。接下来构建DataFrame。 df = pd.DataFrame(player_moments, columns = headers)
df.head(11)
最好加上运动员名字,会方便后续分析。 players = home[‘players’]
players.extend(visitor[‘players’])#所有运动员的名字
id_dict ={}
for player in players:
id_dict[player[‘playerid’]]=[player[‘firstname’]+””+ player[‘lastname’], player[‘jersey’]]
id_dict
是一个规整的字典,内部的值是列表。
用map方法来在原来的df中添加一列play_name列和player_jersey列,根据player_id来把name和jersey对应在正确的位置。写完这一段代码后, 我觉得这里的map方法和Excel中的VLOOKUP十分相似,可见数据分析的内核是相通的 。 df[‘player_name’]= df.player_id.map(lambda x: id_dict[x][0])
df[‘player_jersey’]= df.player_id.map(lambda x: id_dict[x][1])
df.head(11)
Part 3.绘制
可以选择任何一位运动员来绘制他的对应轨迹,这里选择James Harden,虽然我完全不看球赛,也不知道他是谁,我是根据原案例选的。对于背景图,可以自己用matplotlib绘制,一笔一笔的,非常困难。所以我们用一张上面Demo的底图,转化为PNG格式就行。这一工作主要是考察matplotlib.pyplot的操作能力。 harden = df[df[‘player_name’]==’James Harden’]#选择James Harden这一行的数据
court = plt.imread(“图像地址”)
plt.figure(figsize =(15, 11.5))
plt.scatter(harden.x_loc, harden.y_loc, c = harden.game_clock, cmap = plt.cm.Blues, s = 1000, zorder = 1)
#用散点图绘制轨迹;cmap = plt.cm.Blues,用colormap来设置随着game_clock变动而发生的轨迹颜色变化,越接近结束时间颜色越淡。
#zorder = 0 设定Harden运动轨迹下的赛场线
cbar= plt.colorbar(orientation =’horizontal’)#图例横向摆放
cbar.ax.invert_xaxis()
plt.imshow(court, zorder = 0, extent =[0, 94, 50, 0])
#原图中的原点(0, 0)在左上角,所以我在本图中继续按照这个标准设置原点,(0, 94)为x轴的范围,(50, 0)为y轴的范围。
在第一部分Demo的演示中,13号Harden一度出界,所以需要扩展x轴的范围。
plt.xlim(0, 101)
plt.show()
Part 4.欧几里得距离计算并绘图
根据连续点的坐标来计算Euclidean距离。
scipy.spatial.distance中可以直接计算欧氏距离,但是这里用numpy模块可以写出计算过程。 def travel_dist(player_loc):
diff = np.diff(player_loc, axis = 0)
dist = np.sqrt((diff ** 2).sum(axis = 1))
return dist.sum()
dist = travel_dist(harden[[‘x_loc’,’y_loc’]])
#显然连续点需要传递坐标点的x,y值,而diff正是计算了前后两个点之间的距离。
可以用pandas中的groupby与apply来计算每一个运动员的移动距离。 player_travel_dist = df.groupby(‘player_name’)[[‘x_loc’,’y_loc’]].apply(travel_dist)
player_travel_dist
转化为数据框,并直接用pandas内置方法画图,由于距离可能会比较长,选择条形图应该比选择柱形图更适合展现。 df2 = pd.DataFrame(player_travel_dist)
df2.plot(kind =’barh’, style =’g’)
最后可以看出,除了篮球本身的移动距离外,James Harden的移动距离最长。
写到这里,还有很多可以继续深入分析的内容。 作者: Lyndon
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-17 23:08:00
摘要:Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 vinta 发起和维护。内容包括:Web框架、网络爬虫、网络内容提取、模板引擎、数据库、 数据可视化 、图片处理、文本处理、 自然语言处理 、 机器学习 、日志、代码分析等。
代码下载地址: https://github.com/vinta/awesome-python
受 awesome-php 的启发,整理了 Python 框架、类库和工具列表。
环境管理
管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具。 pyenv – 简单的 Python 版本管理工具。 Vex – 可以在虚拟环境中执行命令。 virtualenv – 创建独立 Python 环境的工具。 virtualenvwrapper – virtualenv 的一组扩展。
包管理
管理包和依赖的工具。 pip – Python 包和依赖关系管理工具。 pip-tools – 保证 Python 包依赖关系更新的一组工具。 conda – 跨平台,Python 二进制包管理工具。 Curdling – 管理 Python 包的命令行工具。 wheel – Python 分发的新标准,意在取代 eggs。
包仓库
本地 PyPI 仓库服务和代理。 warehouse – 下一代 PyPI。 Warehouse bandersnatch – PyPA 提供的 PyPI 镜像工具。 devpi – PyPI 服务和打包/测试/分发工具。 localshop – 本地 PyPI 服务(自定义包并且自动对 PyPI 镜像)。
分发
打包为可执行文件以便分发。 PyInstaller – 将 Python 程序转换成独立的执行文件(跨平台)。 dh-virtualenv – 构建并将 virtualenv 虚拟环境作为一个 Debian 包来发布。 Nuitka – 将脚本、模块、包编译成可执行文件或扩展模块。 py2app – 将 Python 脚本变为独立软件包(Mac OS X)。 py2exe – 将 Python 脚本变为独立软件包(Windows)。 pynsist – 一个用来创建 Windows 安装程序的工具,可以在安装程序中打包 Python本身。
构建工具
将源码编译成软件。 buildout – 一个构建系统,从多个组件来创建,组装和部署应用。 BitBake – 针对嵌入式 Linux 的类似 make 的构建工具。 fabricate – 对任何语言自动找到依赖关系的构建工具。 PlatformIO – 多平台命令行构建工具。 PyBuilder – 纯 Python 实现的持续化构建工具。 SCons – 软件构建工具。
交互式解析器
交互式 Python 解析器。 IPython – 功能丰富的工具,非常有效的使用交互式 Python。 bpython – 界面丰富的 Python 解析器。 ptpython – 高级交互式Python解析器, 构建于 python-prompt-toolkit 之上。
文件
文件管理和 MIME(多用途的网际邮件扩充协议)类型检测。 imghdr – (Python 标准库)检测图片类型。 mimetypes – (Python 标准库)将文件名映射为 MIME 类型。 path.py – 对 os.path 进行封装的模块。 pathlib – (Python3.4+ 标准库)跨平台的、面向对象的路径操作库。 python-magic – 文件类型检测的第三方库 libmagic 的 Python 接口。 Unipath – 用面向对象的方式操作文件和目录 watchdog – 管理文件系统事件的 API 和 shell 工具
日期和时间
操作日期和时间的类库。 arrow – 更好的 Python 日期时间操作类库。 Chronyk – Python 3 的类库,用于解析手写格式的时间和日期。 dateutil – Python datetime 模块的扩展。 delorean – 解决 Python 中有关日期处理的棘手问题的库。 moment – 一个用来处理时间和日期的Python库。灵感来自于Moment.js。 PyTime – 一个简单易用的Python模块,用于通过字符串来操作日期/时间。 pytz – 现代以及历史版本的世界时区定义。将时区数据库引入Python。 when.py – 提供用户友好的函数来帮助用户进行常用的日期和时间操作。
文本处理
用于解析和操作文本的库。 通用 chardet – 字符编码检测器,兼容 Python2 和 Python3。 difflib – (Python 标准库)帮助我们进行差异化比较。 ftfy – 让Unicode文本更完整更连贯。 fuzzywuzzy – 模糊字符串匹配。 Levenshtein – 快速计算编辑距离以及字符串的相似度。 pangu.py – 在中日韩语字符和数字字母之间添加空格。 pyfiglet -figlet 的 Python实现。 shortuuid – 一个生成器库,用以生成简洁的,明白的,URL 安全的 UUID。 unidecode – Unicode 文本的 ASCII 转换形式 。 uniout – 打印可读的字符,而不是转义的字符串。 xpinyin – 一个用于把汉字转换为拼音的库。 Slug化 awesome-slugify – 一个 Python slug 化库,可以保持 Unicode。 python-slugify – Python slug 化库,可以把 unicode 转化为 ASCII。 unicode-slugify – 一个 slug 工具,可以生成 unicode slugs ,需要依赖 Django 。 解析器 phonenumbers – 解析,格式化,储存,验证电话号码。 PLY – lex 和 yacc 解析工具的 Python 实现。 Pygments – 通用语法高亮工具。 pyparsing – 生成通用解析器的框架。 python-nameparser – 把一个人名分解为几个独立的部分。 python-user-agents – 浏览器 user agent 解析器。 sqlparse – 一个无验证的 SQL 解析器。
特殊文本格式处理
一些用来解析和操作特殊文本格式的库。 通用 tablib – 一个用来处理中表格数据的模块。 Office Marmir – 把输入的Python 数据结构转换为电子表单。 openpyxl – 一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库。 python-docx – 读取,查询以及修改 Microsoft Word 2007/2008 docx 文件。 unoconv – 在 LibreOffice/OpenOffice 支持的任意文件格式之间进行转换。 XlsxWriter – 一个用于创建 Excel .xlsx 文件的 Python 模块。 xlwings – 一个使得在 Excel 中方便调用 Python 的库(反之亦然),基于 BSD 协议。 xlwt / xlrd – 读写 Excel 文件的数据和格式信息。 relatorio – 模板化OpenDocument 文件。 PDF PDFMiner – 一个用于从PDF文档中抽取信息的工具。 PyPDF2 – 一个可以分割,合并和转换 PDF 页面的库。 ReportLab – 快速创建富文本 PDF 文档。 Markdown Mistune – 快速并且功能齐全的纯 Python 实现的 Markdown 解析器。 Python-Markdown – John Gruber’s Markdown 的 Python 版实现。 YAML PyYAML – Python 版本的 YAML 解析器。 CSV csvkit – 用于转换和操作 CSV 的工具。 Archive unp – 一个用来方便解包归档文件的命令行工具。
自然语言处理
用来处理人类语言的库。 NLTK – 一个先进的平台,用以构建处理人类语言数据的 Python 程序。 jieba – 中文分词工具。 langid.py – 独立的语言识别系统。 Pattern – Python 网络信息挖掘模块。 SnowNLP – 一个用来处理中文文本的库。 TextBlob – 为进行普通自然语言处理任务提供一致的 API。 TextGrocery – 一简单高效的短文本分类工具,基于 LibLinear 和 Jieba。
文档
用以生成项目文档的库。 Sphinx – Python 文档生成器。 awesome-sphinxdoc MkDocs – 对 Markdown 友好的文档生成器。 pdoc – 一个可以替换Epydoc 的库,可以自动生成 Python 库的 API 文档。 Pycco – 文学编程(literate-programming)风格的文档生成器。
配置
用来保存和解析配置的库。 config – logging 模块作者写的分级配置模块。 ConfigObj – INI 文件解析器,带验证功能。 ConfigParser – (Python 标准库) INI 文件解析器。 profig – 通过多种格式进行配置,具有数值转换功能。 python-decouple – 将设置和代码完全隔离。
命令行工具
用于创建命令行程序的库。 命令行程序开发 cement – Python 的命令行程序框架。 click – 一个通过组合的方式来创建精美命令行界面的包。 cliff – 一个用于创建命令行程序的框架,可以创建具有多层命令的命令行程序。 clint – Python 命令行程序工具。 colorama – 跨平台彩色终端文本。 docopt – Python 风格的命令行参数解析器。 Gooey – 一条命令,将命令行程序变成一个 GUI 程序。 python-prompt-toolkit – 一个用于构建强大的交互式命令行程序的库。 生产力工具 aws-cli – Amazon Web Services 的通用命令行界面。 bashplotlib – 在终端中进行基本绘图。 caniusepython3 – 判断是哪个项目妨碍你你移植到 Python 3。 cookiecutter – 从 cookiecutters(项目模板)创建项目的一个命令行工具。 doitlive – 一个用来在终端中进行现场演示的工具。 howdoi – 通过命令行获取即时的编程问题解答。 httpie – 一个命令行HTTP 客户端,cURL 的替代品,易用性更好。 PathPicker – 从bash输出中选出文件。 percol – 向UNIX shell 传统管道概念中加入交互式选择功能。 SAWS – 一个加强版的 AWS 命令行。 thefuck – 修正你之前的命令行指令。 mycli – 一个 MySQL 命令行客户端,具有自动补全和语法高亮功能。 pgcli – Postgres 命令行工具,具有自动补全和语法高亮功能。
下载器
用来进行下载的库. s3cmd – 一个用来管理Amazon S3 和 CloudFront 的命令行工具。 s4cmd – 超级 S3 命令行工具,性能更加强劲。 you-get – 一个 YouTube/Youku/Niconico 视频下载器,使用 Python3 编写。 youtube-dl – 一个小巧的命令行程序,用来下载 YouTube 视频。
图像处理
用来操作图像的库. pillow – Pillow 是一个更加易用版的 PIL 。 hmap – 图像直方图映射。 imgSeek – 一个使用视觉相似性搜索一组图片集合的项目。 nude.py – 裸体检测。 pyBarcode – 不借助 PIL 库在 Python 程序中生成条形码。 pygram – 类似 Instagram 的图像滤镜。 python-qrcode – 一个纯 Python 实现的二维码生成器。 Quads – 基于四叉树的计算机艺术。 scikit-image – 一个用于(科学)图像处理的 Python 库。 thumbor – 一个小型图像服务,具有剪裁,尺寸重设和翻转功能。 wand – MagickWand 的Python 绑定。MagickWand 是 ImageMagick的 C API 。
OCR
光学字符识别库。 pyocr – Tesseract 和 Cuneiform 的一个封装(wrapper)。 pytesseract – Google Tesseract OCR 的另一个封装(wrapper)。 python-tesseract – Google Tesseract OCR 的一个包装类。
音频
用来操作音频的库 audiolazy -Python 的数字信号处理包。 audioread – 交叉库 (GStreamer + Core Audio + MAD + FFmpeg) 音频解码。 beets – 一个音乐库管理工具及 MusicBrainz 标签添加工具 dejavu – 音频指纹提取和识别 django-elastic-transcoder – Django + Amazon Elastic Transcoder 。 eyeD3 – 一个用来操作音频文件的工具,具体来讲就是包含 ID3 元信息的 MP3 文件。 id3reader – 一个用来读取 MP3 元数据的 Python 模块。 m3u8 – 一个用来解析 m3u8 文件的模块。 mutagen – 一个用来处理音频元数据的 Python 模块。 pydub – 通过简单、简洁的高层接口来操作音频文件。 pyechonest – Echo Nest API 的 Python 客户端 talkbox – 一个用来处理演讲/信号的 Python 库 TimeSide – 开源 web 音频处理框架。 tinytag – 一个用来读取MP3, OGG, FLAC 以及 Wave 文件音乐元数据的库。 mingus – 一个高级音乐理论和曲谱包,支持 MIDI 文件和回放功能。
Video
用来操作视频和GIF的库。 moviepy – 一个用来进行基于脚本的视频编辑模块,适用于多种格式,包括动图 GIFs。 scikit-video – SciPy 视频处理常用程序。
地理位置
地理编码地址以及用来处理经纬度的库。 GeoDjango – 世界级地理图形 web 框架。 GeoIP – MaxMind GeoIP Legacy 数据库的 Python API。 geojson – GeoJSON 的 Python 绑定及工具。 geopy – Python 地址编码工具箱。 pygeoip – 纯 Python GeoIP API。 django-countries – 一个 Django 应用程序,提供用于表格的国家选择功能,国旗图标静态文件以及模型中的国家字段。
HTTP
使用HTTP的库。 requests – 人性化的HTTP请求库。 grequests – requests 库 + gevent ,用于异步 HTTP 请求. httplib2 – 全面的 HTTP 客户端库。 treq – 类似 requests 的Python API 构建于 Twisted HTTP 客户端之上。 urllib3 – 一个具有线程安全连接池,支持文件 post,清晰友好的 HTTP 库。
数据库
Python实现的数据库。 pickleDB – 一个简单,轻量级键值储存数据库。 PipelineDB – 流式 SQL 数据库。 TinyDB – 一个微型的,面向文档型数据库。 ZODB – 一个 Python 原生对象数据库。一个键值和对象图数据库。
数据库驱动
用来连接和操作数据库的库。 MySQL – awesome-mysql 系列 mysql-python – Python 的 MySQL 数据库连接器。 mysqlclient – mysql-python 分支,支持 Python 3。 oursql – 一个更好的 MySQL 连接器,支持原生预编译指令和 BLOBs. PyMySQL – 纯 Python MySQL 驱动,兼容 mysql-python。 PostgreSQL psycopg2 – Python 中最流行的 PostgreSQL 适配器。 queries – psycopg2 库的封装,用来和 PostgreSQL 进行交互。 txpostgres – 基于 Twisted 的异步 PostgreSQL 驱动。 其他关系型数据库 apsw – 另一个 Python SQLite封装。 dataset – 在数据库中存储Python字典 – 可以协同SQLite,MySQL,和 PostgreSQL工作。 pymssql – 一个简单的Microsoft SQL Server数据库接口。 NoSQL 数据库 cassandra-python-driver – Cassandra 的 Python 驱动。 HappyBase – 一个为 Apache HBase 设计的,对开发者友好的库。 Plyvel – 一个快速且功能丰富的 LevelDB 的 Python 接口。 py2neo – Neo4j restful 接口的Python 封装客户端。 pycassa – Cassandra 的 Python Thrift 驱动。 PyMongo – MongoDB 的官方 Python 客户端。 redis-py – Redis 的 Python 客户端。 telephus – 基于 Twisted 的 Cassandra 客户端。 txRedis – 基于 Twisted 的 Redis 客户端。
ORM
实现对象关系映射或数据映射技术的库。 关系型数据库 Django Models – Django 的一部分。 SQLAlchemy – Python SQL 工具以及对象关系映射工具。 awesome-sqlalchemy 系列 Peewee – 一个小巧,富有表达力的 ORM。 PonyORM – 提供面向生成器的 SQL 接口的 ORM。 python-sql – 编写 Python 风格的 SQL 查询。 NoSQL 数据库 django-mongodb-engine – Django MongoDB 后端。 PynamoDB – Amazon DynamoDB 的一个 Python 风格接口。 flywheel – Amazon DynamoDB 的对象映射工具。 MongoEngine – 一个Python 对象文档映射工具,用于 MongoDB。 hot-redis – 为 Redis 提供 Python 丰富的数据类型。 redisco – 一个 Python 库,提供可以持续存在在 Redis 中的简单模型和容器。 其他 butterdb – Google Drive 电子表格的 Python ORM。
Web 框架
全栈 web 框架。 Django – Python 界最流行的 web 框架。 awesome-django 系列 Flask – 一个 Python 微型框架。 awesome-flask 系列 Pyramid – 一个小巧,快速,接地气的开源Python web 框架。 awesome-pyramid 系列 Bottle – 一个快速小巧,轻量级的 WSGI 微型 web 框架。 CherryPy – 一个极简的 Python web 框架,服从 HTTP/1.1 协议且具有WSGI 线程池。 TurboGears – 一个可以扩展为全栈解决方案的微型框架。 web.py – 一个 Python 的 web 框架,既简单,又强大。 web2py – 一个全栈 web 框架和平台,专注于简单易用。 Tornado – 一个web 框架和异步网络库。
权限
允许或拒绝用户访问数据或功能的库。 Carteblanche – Module to align code with thoughts of users and designers. Also magically handles navigation and permissions. django-guardian – Django 1.2+ 实现了单个对象权限。 django-rules – 一个小巧但是强大的应用,提供对象级别的权限管理,且不需要使用数据库。
CMS
内容管理系统 django-cms – 一个开源的,企业级 CMS,基于 Django。 djedi-cms – 一个轻量级但却非常强大的 Django CMS ,考虑到了插件,内联编辑以及性能。 FeinCMS – 基于 Django 构建的最先进的内容管理系统之一。 Kotti – 一个高级的,Python 范的 web 应用框架,基于 Pyramid 构建。 Mezzanine – 一个强大的,持续的,灵活的内容管理平台。 Opps – 一个为杂志,报纸网站以及大流量门户网站设计的 CMS 平台,基于 Django。 Plone – 一个构建于开源应用服务器 Zope 之上的 CMS。 Quokka – 灵活,可扩展的小型 CMS,基于 Flask 和 MongoDB。 Wagtail – 一个 Django 内容管理系统。 Widgy – 最新的 CMS 框架,基于 Django。
电子商务
用于电子商务以及支付的框架和库。 django-oscar – 一个用于 Django 的开源的电子商务框架。 django-shop – 一个基于 Django 的店铺系统。 Cartridge – 一个基于 Mezzanine 构建的购物车应用。 shoop – 一个基于 Django 的开源电子商务平台。 alipay – 非官方的 Python 支付宝 API。 merchant – 一个可以接收来自多种支付平台支付的 Django 应用。 money – 货币类库with optional CLDR-backed locale-aware formatting and an extensible currency exchange solution. python-currencies – 显示货币格式以及它的数值。
RESTful API
用来开发RESTful APIs的库 Django django-rest-framework – 一个强大灵活的工具,用来构建 web API。 django-tastypie – 为Django 应用开发API。 django-formapi – 为 Django 的表单验证,创建 JSON APIs 。 Flask flask-api – 为 flask 开发的,可浏览 Web APIs 。 flask-restful – 为 flask 快速创建REST APIs 。 flask-restless – 为 SQLAlchemy 定义的数据库模型创建 RESTful APIs 。 flask-api-utils – 为 Flask 处理 API 表示和验证。 eve – REST API 框架,由 Flask, MongoDB 等驱动。 Pyramid cornice – 一个Pyramid 的 REST 框架 。 与框架无关的 falcon – 一个用来建立云 API 和 web app 后端的噶性能框架。 sandman – 为现存的数据库驱动系统自动创建 REST APIs 。 restless – 框架无关的 REST 框架 ,基于从 Tastypie 学到的知识。 ripozo – 快速创建 REST/HATEOAS/Hypermedia APIs。
验证
实现验证方案的库。 OAuth Authomatic – 简单但是强大的框架,身份验证/授权客户端。 django-allauth – Django 的验证应用。 django-oauth-toolkit – 为 Django 用户准备的 OAuth2。 django-oauth2-provider – 为 Django 应用提供 OAuth2 接入。 Flask-OAuthlib – OAuth 1.0/a, 2.0 客户端实现,供 Flask 使用。 OAuthLib – 一个 OAuth 请求-签名逻辑通用、 完整的实现。 python-oauth2 – 一个完全测试的抽象接口。用来创建 OAuth 客户端和服务端。 python-social-auth – 一个设置简单的社会化验证方式。 rauth – OAuth 1.0/a, 2.0, 和 Ofly 的 Python 库。 sanction – 一个超级简单的OAuth2 客户端实现。 其他 jose – JavaScript 对象签名和加密草案的实现。 PyJWT – JSON Web 令牌草案 01。 python-jws – JSON Web 签名草案 02 的实现。 python-jwt – 一个用来生成和验证 JSON Web 令牌的模块。
模板引擎
模板生成和词法解析的库和工具。 Jinja2 – 一个现代的,对设计师友好的模板引擎。 Chameleon – 一个 HTML/XML 模板引擎。 模仿了 ZPT(Zope Page Templates), 进行了速度上的优化。 Genshi – Python 模板工具,用以生成 web 感知的结果。 Mako – Python 平台的超高速轻量级模板。
Queue
处理事件以及任务队列的库。 celery – 一个异步任务队列/作业队列,基于分布式消息传递。 huey – 小型多线程任务队列。 mrq – Mr. Queue -一个 Python 的分布式 worker 任务队列, 使用 Redis 和 gevent。 rq – 简单的 Python 作业队列。 simpleq – 一个简单的,可无限扩张的,基于亚马逊 SQS 的队列。
搜索
对数据进行索引和执行搜索查询的库和软件。 django-haystack – Django 模块化搜索。 elasticsearch-py – Elasticsearch 的官方底层 Python 客户端。 elasticsearch-dsl-py -Elasticsearch 的官方高级 Python 客户端。 solrpy – solr 的 Python 客户端。 Whoosh – 一个快速的纯 Python 搜索引擎库。
动态消息
用来创建用户活动的库。 django-activity-stream – 从你的站点行为中生成通用活动信息流。 Stream-Framework – 使用 Cassandra 和 Redis 创建动态消息和通知系统。
资源管理
管理、压缩、缩小网站资源的工具。 django-compressor – 将链接和内联的 JavaScript 或 CSS 压缩到一个单独的缓存文件中。 django-storages – 一个针对 Django 的自定义存储后端的工具集合。 fanstatic – 打包、优化,并且把静态文件依赖作为 Python 的包来提供。 File Conveyor – 一个后台驻留的程序,用来发现和同步文件到 CDNs, S3 和 FTP。 Flask-Assets – 帮你将 web 资源整合到你的 Flask app 中。 jinja-assets-compressor – 一个 Jinja 扩展,用来编译和压缩你的资源。 webassets – 为你的静态资源打包、优化和管理生成独一无二的缓存 URL。
缓存
缓存数据的库。 Beaker – 一个缓存和会话库,可以用在 web 应用和独立 Python脚本和应用上。 django-cache-machine – Django 模型的自动缓存和失效。 django-cacheops – 具有自动颗粒化事件驱动失效功能的 ORM。 django-viewlet – 渲染模板,同时具有额外的缓存控制功能。 dogpile.cache – dogpile.cache 是 Beaker 的下一代替代品,由同一作者开发。 HermesCache – Python 缓存库,具有基于标签的失效和 dogpile effect 保护功能。 johnny-cache – django应用缓存框架。 pylibmc – libmemcached 接口的 Python 封装。
电子邮件
用来发送和解析电子邮件的库。 django-celery-ses – 带有 AWS SES 和 Celery 的 Django email 后端。 envelopes – 供人类使用的电子邮件库。 flanker – 一个 email 地址和 Mime 解析库。 imbox – Python IMAP 库 inbox.py – Python SMTP 服务器。 inbox – 一个开源电子邮件工具箱。 lamson – Python 风格的 SMTP 应用服务器。 mailjet – Mailjet API 实现,用来提供批量发送邮件,统计等功能。 marrow.mailer – 高性能可扩展邮件分发框架。 modoboa – 一个邮件托管和管理平台,具有现代的、简约的 Web UI。 pyzmail – 创建,发送和解析电子邮件。 Talon – Mailgun 库,用来抽取信息和签名。
国际化
用来进行国际化的库。 Babel – 一个Python 的国际化库。 Korean – 一个韩语词态库。
URL处理
解析URLs的库 furl – 一个让处理 URL 更简单小型 Python 库。 purl – 一个简单的,不可变的URL类,具有简洁的 API 来进行询问和处理。 pyshorteners – 一个纯 Python URL 缩短库。 short_url – 生成短小 URL 和类似 bit.ly 短链的Python 实现。 webargs – 一个解析 HTTP 请求参数的库,内置对流行 web 框架的支持,包括 Flask, Django, Bottle, Tornado和 Pyramid。
HTML处理
处理 HTML和XML的库。 BeautifulSoup – 以 Python 风格的方式来对 HTML 或 XML 进行迭代,搜索和修改。 bleach – 一个基于白名单的 HTML 清理和文本链接库。 cssutils – 一个 Python 的 CSS 库。 html5lib – 一个兼容标准的 HTML 文档和片段解析及序列化库。 lxml – 一个非常快速,简单易用,功能齐全的库,用来处理 HTML 和 XML。 MarkupSafe – 为Python 实现 XML/HTML/XHTML 标记安全字符串。 pyquery – 一个解析 HTML 的库,类似 jQuery。 untangle – 将XML文档转换为Python对象,使其可以方便的访问。 xhtml2pdf – HTML/CSS 转 PDF 工具。 xmltodict – 像处理 JSON 一样处理 XML。
爬取网络站点的库 Scrapy – 一个快速高级的屏幕爬取及网页采集框架。 cola – 一个分布式爬虫框架。 Demiurge – 基于PyQuery 的爬虫微型框架。 feedparser – 通用 feed 解析器。 Grab – 站点爬取框架。 MechanicalSoup – 用于自动和网络站点交互的 Python 库。 portia – Scrapy 可视化爬取。 pyspider – 一个强大的爬虫系统。 RoboBrowser – 一个简单的,Python 风格的库,用来浏览网站,而不需要一个独立安装的浏览器。
网页内容提取
用于进行网页内容提取的库。 Haul – 一个可以扩展的图像爬取工具。 html2text – 将 HTML 转换为 Markdown 格式文本 lassie – 人性化的网页内容检索库。 micawber -一个小型网页内容提取库,用来从 URLs 提取富内容。 newspaper – 使用 Python 进行新闻提取,文章提取以及内容策展。 opengraph – 一个用来解析开放内容协议(Open Graph Protocol)的 Python模块。 python-goose – HTML内容/文章提取器。 python-readability – arc90 公司 readability 工具的 Python 高速端口 sanitize – 为杂乱的数据世界带来调理性。 sumy – 一个为文本文件和 HTML 页面进行自动摘要的模块。 textract – 从任何格式的文档中提取文本,Word,PowerPoint,PDFs 等等。
表单
进行表单操作的库。 Deform – Python HTML 表单生成库,受到了 formish 表单生成库的启发。 django-bootstrap3 – 集成了 Bootstrap 3 的 Django。 django-crispy-forms – 一个 Django 应用,他可以让你以一种非常优雅且 DRY(Don’t repeat yourself) 的方式来创建美观的表单。 django-remote-forms – 一个平台独立的 Django 表单序列化工具。 WTForms – 一个灵活的表单验证和呈现库。 WTForms-JSON – 一个 WTForms 扩展,用来处理 JSON 数据。
数据验证
数据验证库。多用于表单验证。 Cerberus – A mappings-validator with a variety of rules, normalization-features and simple customization that uses a pythonic schema-definition. colander – 一个用于对从 XML, JSON,HTML 表单获取的数据或其他同样简单的序列化数据进行验证和反序列化的系统。 kmatch – 一种用于匹配/验证/筛选 Python 字典的语言。 schema -一个用于对 Python 数据结构进行验证的库。 Schematics – 数据结构验证。 valideer – 轻量级可扩展的数据验证和适配库。 voluptuous – 一个 Python 数据验证库。主要是为了验证传入 Python的 JSON,YAML 等数据。
反垃圾技术
帮助你和电子垃圾进行战斗的库。 django-simple-captcha – 一个简单、高度可定制的Django 应用,可以为任何Django表单添加验证码。 django-simple-spam-blocker – 一个用于Django的简单的电子垃圾屏蔽工具。
标记
用来进行标记的库。 django-taggit – 简单的 Django 标记工具。
管理面板
管理界面库。 Ajenti – 一个你的服务器值得拥有的管理面板。 django-suit – Django 管理界面的一个替代品 (仅对于非商业用途是免费的)。 django-xadmin – Django admin 的一个替代品,具有很多不错的功能。 flask-admin – 一个用于 Flask 的简单可扩展的管理界面框架。 flower – 一个对 Celery 集群进行实时监控和提供 web 管理界面的工具。 Grappelli – Django 管理界面的一个漂亮的皮肤。 Wooey – 一个 Django 应用,可以为 Python 脚本创建 web 用户界面。
静态站点生成器
静态站点生成器是一个软件,它把文本和模板作为输入,然后输出HTML文件。 Pelican – 使用 Markdown 或 ReST 来处理内容, Jinja 2 来制作主题。支持 DVCS, Disqus.。AGPL 许可。 Cactus – 为设计师设计的静态站点生成器。 Hyde – 基于 Jinja2 的静态站点生成器。 Nikola – 一个静态网站和博客生成器。 Tinkerer – Tinkerer 是一个博客引擎/静态站点生成器,由Sphinx驱动。 Lektor – 一个简单易用的静态 CMS 和博客引擎。
进程
操作系统进程启动及通信库。 envoy – 比 Python subprocess 模块更人性化。 sarge – 另一 种 subprocess 模块的封装。 sh – 一个完备的 subprocess 替代库。
并发和并行
用以进行并发和并行操作的库。 multiprocessing – (Python 标准库) 基于进程的“线程”接口。 threading – (Python 标准库)更高层的线程接口。 eventlet – 支持 WSGI 的异步框架。 gevent – 一个基于协程的 Python 网络库,使用 greenlet 。 Tomorrow -用于产生异步代码的神奇的装饰器语法实现。
网络
用于网络编程的库。 asyncio – (Python 标准库) 异步 I/O, 事件循环, 协程以及任务。 Twisted – 一个事件驱动的网络引擎。 pulsar – 事件驱动的并发框架。 diesel – 基于Greenlet 的事件 I/O 框架。 pyzmq – 一个 ZeroMQ 消息库的 Python 封装。 txZMQ – 基于 Twisted 的 ZeroMQ 消息库的 Python 封装。
WebSocket
帮助使用WebSocket的库。 AutobahnPython – 给 Python 、使用的 WebSocket & WAMP 基于 Twisted 和 asyncio 。 Crossbar – 开源统一应用路由(Websocket & WAMP for Python on Autobahn). django-socketio – 给 Django 用的 WebSockets。 WebSocket-for-Python – 为Python2/3 以及 PyPy 编写的 WebSocket 客户端和服务器库。
WSGI 服务器
兼容 WSGI 的 web 服务器 gunicorn – Pre-forked, 部分是由 C 语言编写的。 uwsgi – uwsgi 项目的目的是开发一组全栈工具,用来建立托管服务, 由 C 语言编写。 bjoern – 异步,非常快速,由 C 语言编写。 fapws3 – 异步 (仅对于网络端),由 C 语言编写。 meinheld – 异步,部分是由 C 语言编写的。 netius – 异步,非常快速。 paste – 多线程,稳定,久经考验。 rocket – 多线程。 waitress – 多线程, 是它驱动着 Pyramid 框架。 Werkzeug – 一个 WSGI 工具库,驱动着 Flask ,而且可以很方便大嵌入到你的项目中去。
RPC 服务器
兼容 RPC 的服务器。 SimpleJSONRPCServer – 这个库是 JSON-RPC 规范的一个实现。 SimpleXMLRPCServer – (Python 标准库) 简单的 XML-RPC 服务器实现,单线程。 zeroRPC – zerorpc 是一个灵活的 RPC 实现,基于 ZeroMQ 和 MessagePack。
密码学 cryptography – 这个软件包意在提供密码学基本内容和方法提供给 Python 开发者。 hashids – 在 Python 中实现 hashids 。 Paramiko – SSHv2 协议的 Python (2.6+, 3.3+) ,提供客户端和服务端的功能。 Passlib – 安全密码存储/哈希库, PyCrypto – Python 密码学工具箱。 PyNacl – 网络和密码学(NaCl) 库的 Python 绑定。
图形用户界面
用来创建图形用户界面程序的库。 curses – 内建的 ncurses 封装,用来创建终端图形用户界面。 enaml – 使用类似 QML 的Declaratic语法来创建美观的用户界面。 kivy – 一个用来创建自然用户交互(NUI)应用程序的库,可以运行在 Windows, Linux, Mac OS X, Android 以及 iOS平台上。 pyglet – 一个Python 的跨平台窗口及多媒体库。 PyQt – 跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4 和 Qt v5。 PySide – P跨平台用户界面框架 Qt 的 Python 绑定 ,支持Qt v4。 Tkinter – Tkinter 是 Python GUI 的一个事实标准库。 Toga – 一个 Python 原生的, 操作系统原生的 GUI 工具包。 urwid – 一个用来创建终端 GUI 应用的库,支持组件,事件和丰富的色彩等。 wxPython – wxPython 是 wxWidgets C++ 类库和 Python 语言混合的产物。 PyGObject – GLib/GObject/GIO/GTK+ (GTK+3) 的 Python 绑定 Flexx – Flexx 是一个纯 Python 语言编写的用来创建 GUI 程序的工具集,它使用 web 技术进行界面的展示。
游戏开发
超赞的游戏开发库。 Cocos2d – cocos2d 是一个用来开发 2D 游戏, 示例和其他图形/交互应用的框架。基于 pyglet。 Panda3D – 由迪士尼开发的 3D 游戏引擎,并由卡内基梅陇娱乐技术中心负责维护。使用C++编写, 针对 Python 进行了完全的封装。 Pygame – Pygame 是一组 Python 模块,用来编写游戏。 PyOgre – Ogre 3D 渲染引擎的 Python 绑定,可以用来开发游戏和仿真程序等任何 3D 应用。 PyOpenGL – OpenGL 的 Python 绑定及其相关 APIs。 PySDL2 – SDL2 库的封装,基于 ctypes。 RenPy – 一个视觉小说(visual novel)引擎。
日志
用来生成和操作日志的库。 logging – (Python 标准库) 为 Python 提供日志功能。 logbook – Logging 库的替代品。 Eliot – 为复杂的和分布式系统创建日志。 Raven – Sentry的 Python 客户端。 Sentry – 实时记录和收集日志的服务器。
Testing
进行代码库测试和生成测试数据的库。 测试框架 unittest – (Python 标准库) 单元测试框架。 nose – nose 扩展了 unittest 的功能。 contexts – 一个 Python 3.3+ 的 BDD 框架。受到C# – Machine.Specifications 的启发。 hypothesis – Hypothesis 是一个基于先进的 Quickcheck 风格特性的测试库。 mamba – Python 的终极测试工具, 拥护BDD。 PyAutoGUI – PyAutoGUI 是一个人性化的跨平台 GUI 自动测试模块。 pyshould – Should 风格的断言,基于 PyHamcrest 。 pytest – 一个成熟的全功能 Python 测试工具。 green – 干净,多彩的测试工具。 pyvows – BDD 风格的测试工具,受Vows.js的启发。 Robot Framework – 一个通用的自动化测试框架。 Web 测试 Selenium – Selenium WebDriver 的 Python 绑定。 locust – 使用 Python 编写的,可扩展的用户加载测试工具。 sixpack – 一个和语言无关的 A/B 测试框架。 splinter – 开源的 web 应用测试工具。 Mock测试 mock – (Python 标准库) 一个用于伪造测试的库。 doublex – Python 的一个功能强大的 doubles 测试框架。 freezegun – 通过伪造日期模块来生成不同的时间。 httmock – 针对 Python 2.6+ 和 3.2+ 生成 伪造请求的库。 httpretty – Python 的 HTTP 请求 mock 工具。 responses – 伪造 Python 中的 requests 库的一个通用库。 VCR.py – 在你的测试中记录和重放 HTTP 交互。 对象工厂 factory_boy – 一个 Python 用的测试固件 (test fixtures) 替代库。 mixer – 另外一个测试固件 (test fixtures) 替代库,支持 Django, Flask, SQLAlchemy, Peewee 等。 model_mommy – 为 Django 测试创建随机固件 代码覆盖率 coverage – 代码覆盖率测量。 伪数据 faker – 一个 Python 库,用来生成伪数据。 fake2db – 伪数据库生成器。 radar – 生成随机的日期/时间。 错误处理 [FuckIt.py](https://github.com/ajalt/fuckitpy) – FuckIt.py 使用最先进的技术来保证你的 Python 代码无论对错都能继续运行。
代码分析和Lint工具
进行代码分析,解析和操作代码库的库和工具。 代码分析 code2flow – 把你的 Python 和 JavaScript 代码转换为流程图。 pycallgraph -这个库可以把你的Python 应用的流程(调用图)进行可视化。 pysonar2 – Python 类型推断和检索工具。 Lint工具 Flake8 – 模块化源码检查工具: pep8, pyflakes 以及 co。 Pylint – 一个完全可定制的源码分析器。 pylama – Python 和 JavaScript 的代码审查工具。
Debugging Tools
用来进行代码调试的库。 调试器 ipdb – IPython 启用的 pdb 。 pudb – 全屏,基于控制台的 Python 调试器。 pyringe – 可以在 Python 进程中附加和注入代码的调试器。 wdb – 一个奇异的 web 调试器,通过 WebSockets 工作。 winpdb – 一个具有图形用户界面的 Python 调试器,可以进行远程调试,基于 rpdb2。 django-debug-toolbar – 为 Django 显示各种调试信息。 django-devserver – 一个 Django 运行服务器的替代品。 flask-debugtoolbar – django-debug-toolbar 的 flask 版。 性能分析器 line_profiler – 逐行性能分析。 memory_profiler – 监控 Python 代码的内存使用。 profiling – 一个交互式 Python 性能分析工具。 其他 pyelftools – 解析和分析 ELF 文件以及 DWARF 调试信息。 python-statsd – statsd 服务器的 Python 客户端。
Science and Data Analysis
用来进行科学计算和 数据分析 的库。 astropy – 一个天文学 Python 库。 bcbio-nextgen – 这个工具箱为全自动高通量测序分析提供符合最佳实践的处理流程。 bccb – 生物分析相关代码集合 Biopython – Biopython 是一组可以免费使用的用来进行生物计算的工具。 blaze – NumPy 和 Pandas 的 大数据 接口。 cclib – 一个用来解析和解释计算化学软件包输出结果的库。 NetworkX – 一个为复杂网络设计的高性能软件。 Neupy – 执行和测试各种不同的人工神经网络算法。 Numba – Python JIT (just in time) 编译器,针对科学用的 Python ,由Cython 和 NumPy 的开发者开发。 NumPy – 使用 Python 进行科学计算的基础包。 Open Babel – 一个化学工具箱,用来描述多种化学数据。 Open Mining – 使用 Python 挖掘商业情报 (BI) (Pandas web 接口)。 orange – 通过可视化编程或 Python 脚本进行 数据挖掘 , 数据可视化 ,分析和机器学习。 Pandas – 提供高性能,易用的数据结构和数据分析工具。 PyDy – PyDy 是 Python Dynamics 的缩写,用来为动力学运动建模工作流程提供帮助, 基于 NumPy, SciPy, IPython 和 matplotlib。 PyMC – 马尔科夫链蒙特卡洛采样工具。 RDKit – 化学信息学和机器学习软件。 SciPy – 由一些基于 Python ,用于数学,科学和工程的开源软件构成的生态系统。 statsmodels – 统计建模和计量经济学。 SymPy – 一个用于符号数学的 Python 库。 zipline – 一个 Python 算法交易库。
数据可视化
进行数据可视化的库。 参见: awesome-javascript 。 matplotlib – 一个 Python 2D 绘图库。 bokeh – 用 Python 进行交互式 web 绘图。 ggplot – ggplot2 给 R 提供的 API 的 Python 版本。 plotly – 协同 Python 和 matplotlib 工作的 web 绘图库。 pygal – 一个 Python SVG 图表创建工具。 pygraphviz – Graphviz 的 Python 接口。 PyQtGraph – 交互式实时2D/3D/图像绘制及科学/工程学组件。 SnakeViz – 一个基于浏览器的 Python’s cProfile 模块输出结果查看工具。 vincent – 把 Python 转换为 Vega 语法的转换工具。 VisPy – 基于 OpenGL 的高性能科学可视化工具。
计算机视觉
计算机视觉库。 OpenCV – 开源计算机视觉库。 SimpleCV – 一个用来创建计算机视觉应用的开源框架。
机器学习
机器学习库。 参见: awesome-machine-learning . Crab – 灵活、快速的推荐引擎。 gensim – 人性化的话题建模库。 hebel – GPU 加速的深度学习库。 NuPIC – 智能计算 Numenta 平台。 pattern – Python 网络挖掘模块。 PyBrain – 另一个 Python 机器学习库。 Pylearn2 – 一个基于 Theano 的机器学习库。 python-recsys – 一个用来实现推荐系统的 Python 库。 scikit-learn – 基于 SciPy 构建的机器学习 Python 模块。 pydeep – Python 深度学习库。 vowpal_porpoise – 轻量级 Vowpal Wabbit 的 Python 封装。 skflow – 一个 TensorFlow 的简化接口(模仿 scikit-learn)。
MapReduce
MapReduce 框架和库。 dpark – Spark 的 Python 克隆版,一个类似 MapReduce 的框架。 dumbo – 这个 Python 模块可以让人轻松的编写和运行 Hadoop 程序。 luigi – 这个模块帮你构建批处理作业的复杂流水线。 mrjob – 在 Hadoop 或 Amazon Web Services 上运行 MapReduce 任务。 PySpark – Spark 的 Python API 。 streamparse – 运行针对事实数据流的 Python 代码。集成了 Apache Storm 。
函数式编程
使用 Python 进行函数式编程。 CyToolz – Toolz 的 Cython 实现 : 高性能函数式工具。 fn.py – 在 Python 中进行函数式编程 : 实现了一些享受函数式编程缺失的功能。 funcy – 炫酷又实用的函数式工具。 Toolz – 一组用于迭代器,函数和字典的函数式编程工具。
第三方 API
用来访问第三方 API的库。 参见: List of Python API Wrappers and Libraries 。 apache-libcloud – 一个为各种云设计的 Python 库。 boto – Amazon Web Services 的 Python 接口。 django-wordpress – WordPress models and views for Django. facebook-sdk – Facebook 平台的 Python SDK. facepy – Facepy 让和 Facebook’s Graph API 的交互变得更容易。 gmail – Gmail 的 Python 接口。 google-api-python-client – Python 用的 Google APIs 客户端库。 gspread – Google 电子表格的 Python API. twython – Twitter API 的封装。
DevOps 工具
用于 DevOps 的软件和库。 Ansible – 一个非常简单的 IT 自动化平台。 SaltStack – 基础设施自动化和管理系统。 OpenStack – 用于构建私有和公有云的开源软件。 Docker Compose – 快速,分离的开发环境,使用 Docker。 Fabric – 一个简单的,Python 风格的工具,用来进行远程执行和部署。 cuisine – 为 Fabric 提供一系列高级函数。 Fabtools – 一个用来编写超赞的 Fabric 文件的工具。 gitapi – Git 的纯 Python API。 hgapi – Mercurial 的纯 Python API。 honcho – Foreman 的 Python 克隆版,用来管理基于 Procfile 的应用。 pexpect – Controlling interactive programs in a pseudo-terminal like 在一个伪终端中控制交互程序,就像 GNU expect 一样。 psutil – 一个跨平台进程和系统工具模块。 supervisor – UNIX 的进程控制系统。
任务调度
任务调度库。 APScheduler – 轻巧但强大的进程内任务调度,使你可以调度函数。 django-schedule – 一个 Django 排程应用。 doit – 一个任务执行和构建工具。 gunnery – 分布式系统使用的多用途任务执行工具 ,具有 web 交互界面。 Joblib – 一组为 Python 提供轻量级作业流水线的工具。 Plan – 如有神助地编写 crontab 文件。 schedule – 人性化的 Python 任务调度库。 Spiff – 使用纯 Python 实现的强大的工作流引擎。 TaskFlow – 一个可以让你方便执行任务的 Python 库,一致并且可靠。
外来函数接口
使用外来函数接口的库。 cffi – 用来调用 C 代码的外来函数接口。 ctypes – (Python 标准库) 用来调用 C 代码的外来函数接口。 PyCUDA – Nvidia CUDA API 的封装。 SWIG – 简化的封装和接口生成器。
高性能
让 Python 更快的库。 Cython – 优化的 Python 静态编译器。使用类型混合使 Python 编译成 C 或 C++ 模块来获得性能的极大提升。 PeachPy – 嵌入 Python 的 x86-64 汇编器。可以被用作 Python 内联的汇编器或者是独立的汇编器,用于 Windows, Linux, OS X, Native Client 或者 Go 。 PyPy – 使用 Python 实现的 Python。解释器使用黑魔法加快 Python 运行速度且不需要加入额外的类型信息。 Pyston – 使用 LLVM 和现代 JIT 技术构建的 Python 实现,目标是为了获得很好的性能。 Stackless Python – 一个强化版的 Python。
微软的 Windows平台
在 Windows 平台上进行 Python 编程。 Python(x,y) – 面向科学应用的 Python 发行版,基于 Qt 和 Spyder。 pythonlibs – 非官方的 Windows 平台 Python 扩展二进制包。 PythonNet – Python 与 .NET 公共语言运行库 (CLR)的集成。 PyWin32 – 针对 Windows 的Python 扩展。 WinPython – Windows 7/8 系统下便携式开发环境。
网络可视化和SDN
用来进行网络可视化和SDN(软件定义网络)的工具和库。 Mininet – 一款流行的网络模拟器以及用 Python 编写的 API。 POX – 一个针对基于 Python 的软件定义网络应用(例如 OpenFlow SDN 控制器)的开源开发平台。 Pyretic – 火热的 SDN 编程语言中的一员,为网络交换机和模拟器提供强大的抽象能力。 SDX Platform – 基于 SDN 的 IXP 实现,影响了 Mininet, POX 和 Pyretic。
硬件
用来对硬件进行编程的库。 ino -操作 Arduino 的命令行工具。 Pyro – Python 机器人编程库。 PyUserInput – 跨平台的,控制鼠标和键盘的模块。 scapy – 一个非常棒的操作数据包的库。 wifi – 一个 Python 库和命令行工具用来在 Linux 平台上操作WiFi。 Pingo – Pingo 为类似Raspberry Pi,pcDuino, Intel Galileo等设备提供统一的API用以编程。
兼容性
帮助从 Python 2 向 Python 3迁移的库。 Python-Future – 这就是 Python 2 和 Python 3 之间丢失的那个兼容性层。 Python-Modernize – 使 Python 代码更加现代化以便最终迁移到 Python 3。 Six – Python 2 和 3 的兼容性工具。
杂项
不属于上面任何一个类别,但是非常有用的库。 blinker – 一个快速的 Python 进程内信号/事件分发系统。 itsdangerous – 一系列辅助工具用来将可信的数据传入不可信的环境。 pluginbase – 一个简单但是非常灵活的 Python 插件系统。 Pychievements – 一个用来创建和追踪成就的 Python 框架。 Tryton – 一个通用商务框架。
算法和设计模式
Python 实现的算法和设计模式。 algorithms -一个 Python 算法模块 python-patterns – Python 设计模式的集合。 sortedcontainers – 快速,纯 Python 实现的SortedList,SortedDict 和 SortedSet 类型。
编辑器插件
编辑器和 IDE 的插件 Emacs Elpy – Emacs Python 开发环境。 Sublime Text SublimeJEDI – 一个 Sublime Text 插件,用来使用超赞的自动补全库 Jedi。 Anaconda – Anaconda 把你的 Sublime Text 3 变成一个功能齐全的 Python IDE。 Vim YouCompleteMe – 引入基于 Jedi 的 Python 自动补全引擎。 Jedi-vim – 绑定 Vim 和 Jedi 自动补全库对 Python 进行自动补全。 Python-mode – 将 Vim 变成 Python IDE 的一款多合一插件。 Visual Studio PTVS – Visual Studio 的 Python 工具
集成开发环境
流行的 Python 集成开发环境。 PyCharm – 商业化的 Python IDE ,由 JetBrains 开发。也有免费的社区版提供。 LiClipse – 基于 Eclipse 的免费多语言 IDE 。使用 PyDev 来支持 Python 。 Spyder – 开源 Python IDE。
服务
在线工具和简化开发的 API 。
持续集成
参见: awesome-CIandCD . Travis CI – 一个流行的工具,为你的开源和 私人 项目提供持续集成服务。(仅支持 GitHub) CircleCI – 一个持续集成工具,可以非常快速的进行并行测试。 (仅支持 GitHub) Vexor CI – 一个为私人 app 提供持续集成的工具,支持按分钟付费。 Wercker – 基于 Docker 平台,用来构建和部署微服务。
代码质量 Codacy – 自动化代码审查,更加快速的发布高质量代码。对于开源项目是免费的。 QuantifiedCode – 一个数据驱动、自动、持续的代码审查工具。
Resources
在这里可以找到新的 Python 库。
网站 r/Python CoolGithubProjects Django Packages Full Stack Python Python 3 Wall of Superpowers Python Hackers Python ZEEF Trending Python repositories on GitHub today PyPI Ranking
周刊 Import Python Newsletter Pycoder’s Weekly Python Weekly
Twitter @codetengu @getpy @planetpython @pycoders @pypi @pythontrending @PythonWeekly
Other Awesome Lists
List of lists. Python pycrumbs python-github-projects python_reference pythonidae Monty awesome lists
其他榜单
关于列表的列表。 Python pycrumbs python-github-projects python_reference pythonidae Monty awesome lists
参与贡献
我们始终欢迎您参与这个项目!请先看一下 参与指导说明 。
如果我不确定某个库是不是很赞的话,我就会保持pull request的开放,你可以通过留言(带有+1字样) 给它们投票 。 本文由 伯乐在线 – 艾凌风 翻译, Namco 校稿。
英文出处: github.com 。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-15 19:21:00
PHP是目前最流行、最易学最强大的计算机语言之一( 学习培训Python的几大理由 ),无论你是新手还是老鸟,无论是用于深度学习还是web开发设计(Pinterest就是案例), Python 都是一件利器。此外,Python不但人气日益高涨,而且Python程序流程猿的薪资市场行情也是水涨船高,北美Python程序员的平均薪资高达hg12万美金。
对于有志学习Python的开发者而言,Python吸引人的地方不仅是有个优秀的 社区 ,而且还有大量的精品免費资源可用。连环创业家,Code(Love)创办人Paul Huang近日分享了11个优秀的Python学习资源,IT主管网编译如下:
一、Python优秀书藉
《Learn Python the Hard Way》的作者将书中的內容制做成 网络教程 免费提供,包括很多值得花時间完成的习题,只有多敲代码,你能够从菜鸟变成老虎。
二、Python视频教学
如果你习惯学习视频,那么能够考虑到选择 Udacity 的Python for the web 网上课程内容 ,通过学习该课程,你将对web统计数据的流转有着更深入的认识。
三、Github上的Python资源库
Github上带大量优质的Python资源库,例如 这个 。
四、Anaconda与iPython Notebook
Anaconda和iPython Notebook 可以看作是Python的“电子表格”。通常Python的代码没办法通过html语言等web文件格式分享,尤其是展示涉及到不一样脚本制作中的数据图做成的结构化flow。Anaconda和iPython Notebook可以直观 数据可视化 的方式组织关联不同Python手机软件模块,在 nbviewer 中轻松展示结果,并且还能转化成HTML版本号的Notebook文件便于在Github上分享。
五、用Pandas解决互联网 大数据
Pandas 的开发基于前面提到的iPython Notebook,Python只能帮你处理载入到运行内存中的数据,Pandas可以让你高效载入更大规模数据,例如海量的CSV文件,进行数据预处理并用于透视表或者可视化。
六、用Flask开发小型程序
Flask是一个微框架,你能用它来开发一些小型web新项目,Flask包含了互动网址项目常用的一些可复用的数据通信模块,只必须一行代码,我也能生成一个互动功能。
七、用Django开发大型项目
如果你要开发一个完整的web框架,那么就试试 Django 吧,很多Pinterests和Instagram那样的超大规模网站都是用Django开发的。
八、用Python玩转API
API是web经济发展的支柱之一,这儿详细介绍一个 Python 第三方API精华列表 ,你可以用Python调用那些很酷的数据,让你的应用与众不同。
九、 Python的机器学习资源库
这个Github上的Python 机器学习 库提供大量优秀资源,让你快速新手入门。
十、Plotly帮你用数据讲童话故事
柴静的雾霾天气演讲为什么火?因为她用数据讲故事呗。只需几行代码,你就能用 Plot.ly 生成各种常见数据图表。
十一、检测你的Python段位
当你自以为学得类似了,开始澎涨的时候,就可以考虑去 HackerRank 测试一下下你的“段位”,高段位的还有可能值得获得工作机会哟。 来源:IT经理网
连接:http://www.ctocio.com/ccnews/19793.html
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-14 14:35:00
摘要:本文介绍7款 Python 数据图表工具的比较
Python 的 科学栈 相当成熟,各种应用场景都有相关的模块,包括 机器学习 和 数据分析 。 数据可视化 是发现数据和展示结果的重要一环,只不过过去以来,相对于 R 这样的工具,发展还是落后一些。
幸运的是,过去几年出现了很多新的Python数据可视化库,弥补了一些这方面的差距。 matplotlib 已经成为事实上的数据可视化方面最主要的库,此外还有很多其他库,例如 vispy, bokeh , seaborn , pyga, folium 和 networkx ,这些库有些是构建在 matplotlib 之上,还有些有其他一些功能。
本文会基于一份真实的数据,使用这些库来对数据进行可视化。通过这些对比,我们期望了解每个库所适用的范围,以及如何更好的利用整个 Python 的数据可视化的生态系统。
我们在 Dataquest 建了一个交互课程,教你如何使用 Python 的数据可视化工具。如果你打算深入学习,可以点 这里 。
探索数据集
在我们探讨数据的可视化之前,让我们先来快速的浏览一下我们将要处理的数据集。我们将要使用的数据来自 openflights 。我们将要使用 航线数据集 、 机场数据集 、 航空公司数据集 。其中,路径数据的每一行对应的是两个机场之间的飞行路径;机场数据的每一行对应的是世界上的某一个机场,并且给出了相关信息;航空公司的数据的每一行给出的是每一个航空公司。
首先我们先读取数据:
#Importthepandaslibrary.
import pandas
#Readintheairportsdata.
airports = pandas . read_csv ( “airports.csv” , header = None , dtype = str )
airports . columns = [ “id” , “name” , “city” , “country” , “code” , “icao” , “latitude” , “longitude” , “altitude” , “offset” , “dst” , “timezone” ]
#Readintheairlinesdata.
airlines = pandas . read_csv ( “airlines.csv” , header = None , dtype = str )
airlines . columns = [ “id” , “name” , “alias” , “iata” , “icao” , “callsign” , “country” , “active” ]
#Readintheroutesdata.
routes = pandas . read_csv ( “routes.csv” , header = None , dtype = str )
routes . columns = [ “airline” , “airline_id” , “source” , “source_id” , “dest” , “dest_id” , “codeshare” , “stops” , “equipment” ]
这些数据没有列的首选项,因此我们通过赋值 column 属性来添加列的首选项。我们想要将每一列作为字符串进行读取,因为这样做可以简化后续以行 id 为匹配,对不同的数据框架进行比较的步骤。我们在读取数据时设置了 dtype 属性值达到这一目的。
我们可以快速浏览一下每一个数据集的数据框架。 airports . head ( )

Python airlines.head()


Python routes.head()
我们可以分别对每一个单独的数据集做许多不同有趣的探索,但是只要将它们结合起来分析才能取得最大的收获。Pandas 将会帮助我们分析数据,因为它能够有效的过滤权值或者通过它来应用一些函数。我们将会深入几个有趣的权值因子,比如分析航空公司和航线。
那么在此之前我们需要做一些数据清洗的工作。
routes=routes[routes[“airline_id”]!=”N”]
这一行命令就确保了我们在 airline_id 这一列只含有数值型数据。
制作柱状图
现在我们理解了数据的结构,我们可以进一步地开始描点来继续探索这个问题。首先,我们将要使用 matplotlib 这个工具,matplotlib 是一个相对底层的 Python 栈中的描点库,所以它比其他的工具库要多敲一些命令来做出一个好看的曲线。另外一方面,你可以使用 matplotlib 几乎做出任何的曲线,这是因为它十分的灵活,而灵活的代价就是非常难于使用。
我们首先通过做出一个柱状图来显示不同的航空公司的航线长度分布。一个柱状图将所有的航线的长度分割到不同的值域,然后对落入到不同的值域范围内的航线进行计数。从中我们可以知道哪些航空公司的航线长,哪些航空公司的航线短。
为了达到这一点,我们需要首先计算一下航线的长度,第一步就要使用距离公式,我们将会使用余弦半正矢距离公式来计算经纬度刻画的两个点之间的距离。 importmath
defhaversine(lon1,lat1,lon2,lat2):
#Convertcoordinatestofloats.
lon1,lat1,lon2,lat2=[float(lon1),float(lat1),float(lon2),float(lat2)]
#Converttoradiansfromdegrees.
lon1,lat1,lon2,lat2=map(math.radians,[lon1,lat1,lon2,lat2])
#Computedistance.
dlon=lon2-lon1
dlat=lat2-lat1
a=math.sin(dlat/2)**2+math.cos(lat1)*math.cos(lat2)*math.sin(dlon/2)**2
c=2*math.asin(math.sqrt(a))
km=6367*c
returnkm
然后我们就可以使用一个函数来计算起点机场和终点机场之间的单程距离。我们需要从路线数据框架得到机场数据框架所对应的 source_id 和 dest_id,然后与机场的数据集的 id 列相匹配,然后就只要计算就行了,这个函数是这样的: defcalc_dist(row):
dist=0
try:
#Matchsourceanddestinationtogetcoordinates.
source=airports[airports[“id”]==row[“source_id”]].iloc[0]
dest=airports[airports[“id”]==row[“dest_id”]].iloc[0]
#Usecoordinatestocomputedistance.
dist=haversine(dest[“longitude”],dest[“latitude”],source[“longitude”],source[“latitude”])
except(ValueError,IndexError):
pass
returndist
如果 source_id 和 dest_id 列没有有效值的话,那么这个函数会报错。因此我们需要增加 try/catch 模块对这种无效的情况进行捕捉。
最后,我们将要使用 pandas 来将距离计算的函数运用到 routes 数据框架。这将会使我们得到包含所有的航线线长度的 pandas 序列,其中航线线的长度都是以公里做单位。
route_lengths=routes.apply(calc_dist,axis=1)
现在我们就有了航线距离的序列了,我们将会创建一个柱状图,它将会将数据归类到对应的范围之内,然后计数分别有多少的航线落入到不同的每个范围: importmatplotlib.pyplotasplt
%matplotlibinline
plt.hist(route_lengths,bins=20)
我们用 import matplotlib.pyplot as plt 导入 matplotlib 描点函数。然后我们就使用 %matplotlib inline 来设置 matplotlib 在 ipython 的 notebook 中描点,最终我们就利用 plt.hist(route_lengths, bins=20) 得到了一个柱状图。正如我们看到的,航空公司倾向于运行近距离的短程航线,而不是远距离的远程航线。
使用 seaborn
我们可以利用 seaborn 来做类似的描点,seaborn 是一个 Python 的高级库。Seaborn 建立在 matplotlib 的基础之上,做一些类型的描点,这些工作常常与简单的统计工作有关。我们可以基于一个核心的概率密度的期望,使用 distplot 函数来描绘一个柱状图。一个核心的密度期望是一个曲线 —— 本质上是一个比柱状图平滑一点的,更容易看出其中的规律的曲线。 importseaborn
seaborn.distplot(route_lengths,bins=20)
正如你所看到的那样,seaborn 同时有着更加好看的默认风格。seaborn 不含有与每个 matplotlib 的版本相对应的版本,但是它的确是一个很好的快速描点工具,而且相比于 matplotlib 的默认图表可以更好的帮助我们理解数据背后的含义。如果你想更深入的做一些统计方面的工作的话,seaborn 也不失为一个很好的库。
条形图
柱状图也虽然很好,但是有时候我们会需要航空公司的平均路线长度。这时候我们可以使用条形图--每条航线都会有一个单独的状态条,显示航空公司航线的平均长度。从中我们可以看出哪家是国内航空公司哪家是国际航空公司。我们可以使用pandas,一个python的 数据分析 库,来酸楚每个航空公司的平均航线长度。 importnumpy
#Putrelevantcolumnsintoadataframe.
route_length_df=pandas.DataFrame({“length”:route_lengths,”id”:routes[“airline_id”]})
#Computethemeanroutelengthperairline.
airline_route_lengths=route_length_df.groupby(“id”).aggregate(numpy.mean)
#Sortbylengthsowecanmakeabetterchart.
airline_route_lengths=airline_route_lengths.sort(“length”,ascending=False)
我们首先用航线长度和航空公司的id来搭建一个新的数据框架。我们基于airline_id把route_length_df拆分成组,为每个航空公司建立一个大体的数据框架。然后我们调用pandas的aggregate函数来获取航空公司数据框架中长度列的均值,然后把每个获取到的值重组到一个新的数据模型里。之后把数据模型进行排序,这样就使得拥有最多航线的航空公司拍到了前面。
这样就可以使用matplotlib把结果画出来。 plt.bar(range(airline_route_lengths.shape[0]),airline_route_lengths[“length”])
Matplotlib的plt.bar方法根据每个数据模型的航空公司平均航线长度(airline_route_lengths[“length”])来做图。
问题是我们想看出哪家航空公司拥有的航线长度是什么并不容易。为了解决这个问题,我们需要能够看到坐标轴标签。这有点难,毕竟有这么多的航空公司。一个能使问题变得简单的方法是使图表具有交互性,这样能实现放大跟缩小来查看轴标签。我们可以使用bokeh库来实现这个--它能便捷的实现交互性,作出可缩放的图表。
要使用booked,我们需要先对数据进行预处理: deflookup_name(row):
try:
#Matchtherowidtotheidintheairlinesdataframesowecangetthename.
name=airlines[“name”][airlines[“id”]==row[“id”]].iloc[0]
except(ValueError,IndexError):
name=””
returnname
#Addtheindex(theairlineids)asacolumn.
airline_route_lengths[“id”]=airline_route_lengths.index.copy()
#Findalltheairlinenames.
airline_route_lengths[“name”]=airline_route_lengths.apply(lookup_name,axis=1)
#Removeduplicatevaluesintheindex.
airline_route_lengths.index=range(airline_route_lengths.shape[0])
上面的代码会获取airline_route_lengths中每列的名字,然后添加到name列上,这里存贮着每个航空公司的名字。我们也添加到id列上以实现查找(apply函数不传index)。
最后,我们重置索引序列以得到所有的特殊值。没有这一步,Bokeh 无法正常运行。
现在,我们可以继续说图表问题: importnumpyasnp
frombokeh.ioimportoutput_notebook
frombokeh.chartsimportBar,show
output_notebook()
p=Bar(airline_route_lengths,’name’,values=’length’,title=”Averageairlineroutelengths”)
show(p)
用 output_notebook 创建背景虚化,在 iPython 的 notebook 里画出图。然后,使用数据帧和特定序列制作条形图。最后,显示功能会显示出该图。
这个图实际上不是一个图像--它是一个 JavaScript 插件。因此,我们在下面展示的是一幅屏幕截图,而不是真实的表格。
有了它,我们可以放大,看哪一趟航班的飞行路线最长。上面的图像让这些表格看起来挤在了一起,但放大以后,看起来就方便多了。
水平条形图
Pygal 是一个能快速制作出有吸引力表格的 数据分析 库。我们可以用它来按长度分解路由。首先把我们的路由分成短、中、长三个距离,并在 route_lengths 里计算出它们各占的百分比。
Python long_routes = len([k for k in route_lengths if k > 10000]) / len(route_lengths)
medium_routes = len([k for k in route_lengths if k < 10000 and k > 2000]) / len(route_lengths)
short_routes = len([k for k in route_lengths if k < 2000]) / len(route_lengths)
然后我们可以在 Pygal 的水平条形图里把每一个都绘成条形图:
首先,我们创建一个空图。然后,我们添加元素,包括标题和条形图。每个条形图通过百分比值(最大值是100)显示出该类路由的使用频率。
最后,我们把图表渲染成文件,用 IPython 的 SVG 功能载入并展示文件。这个图看上去比默认的 matplotlib 图好多了。但是为了制作出这个图,我们要写的代码也多很多。因此,Pygal 可能比较适用于制作小型的展示用图表。
散点图
在散点图里,我们能够纵向比较数据。我们可以做一个简单的散点图来比较航空公司的 id 号和航空公司名称的长度:
Python name_lengths = airlines[“name”].apply(lambda x: len(str(x)))
plt.scatter(airlines[“id”].astype(int), name_lengths)
首先,我们使用 pandasapplymethod 计算每个名称的长度。它将找到每个航空公司的名字字符的数量。然后,我们使用 matplotlib 做一个散点图来比较航空 id 的长度。当我们绘制时,我们把 theidcolumn of airlines 转换为整数类型。如果我们不这样做是行不通的,因为它需要在 x 轴上的数值。我们可以看到不少的长名字都出现在早先的 id 中。这可能意味着航空公司在成立前往往有较长的名字。
我们可以使用 seaborn 验证这个直觉。Seaborn 增强版的散点图,一个联合的点,它显示了两个变量是相关的,并有着类似地分布。
Python data = pandas.DataFrame({“lengths”: name_lengths, “ids”: airlines[“id”].astype(int)})
seaborn.jointplot(x=”ids”, y=”lengths”, data=data)
上面的图表明,两个变量之间的相关性是不明确的——r 的平方值是低的。
静态 maps
我们的数据天然的适合绘图-机场有经度和纬度对,对于出发和目的机场来说也是。
第一张图做的是显示全世界的所有机场。可以用扩展于 matplotlib 的 basemap 来做这个。这允许画世界地图和添加点,而且很容易定制。
Python # Import the basemap package
from mpl_toolkits.basemap import Basemap
# Create a map on which to draw.We’re using a mercator projection, and showing the whole world.
m = Basemap(projection=’merc’,llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution=’c’)
# Draw coastlines, and the edges of the map.
m.drawcoastlines()
m.drawmapboundary()
# Convert latitude and longitude to x and y coordinates
x, y = m(list(airports[“longitude”].astype(float)), list(airports[“latitude”].astype(float)))
# Use matplotlib to draw the points onto the map.
m.scatter(x,y,1,marker=’o’,color=’red’)
# Show the plot.
plt.show()
在上面的代码中,首先用 mercator projection 画一个世界地图。墨卡托投影是将整个世界的绘图投射到二位曲面。然后,在地图上用红点点画机场。
上面地图的问题是找到每个机场在哪是困难的-他们就是在机场密度高的区域合并城一团红色斑点。
就像聚焦不清楚,有个交互制图的库,folium,可以进行放大地图来帮助我们找到个别的机场。
Python import folium
# Get a basic world map.
airports_map = folium.Map(location=[30, 0], zoom_start=2)
# Draw markers on the map.
for name, row in airports.iterrows():
# For some reason, this one airport causes issues with the map.
if row[“name”] != “South Pole Station”:
airports_map.circle_marker(location=[row[“latitude”], row[“longitude”]], popup=row[“name”])
# Create and show the map.
airports_map.create_map(‘airports.html’)
airports_map
Folium 使用 leaflet.js 来制作全交互式地图。你可以点击每一个机场在弹出框中看名字。在上边显示一个截屏,但是实际的地图更令人印象深刻。Folium 也允许非常广阔的修改选项来做更好的标注,或者添加更多的东西到地图上。
画弧线
在地图上看到所有的航空路线是很酷的,幸运的是,我们可以使用 basemap 来做这件事。我们将画 弧线 连接所有的机场出发地和目的地。每个弧线想展示一个段都航线的路径。不幸的是,展示所有的线路又有太多的路由,这将会是一团糟。替代,我们只现实前 3000 个路由。
Python # Make a base map with a mercator projection.Draw the coastlines.
m = Basemap(projection=’merc’,llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution=’c’)
m.drawcoastlines()
# Iterate through the first 3000 rows.
for name, row in routes[:3000].iterrows():
try:
# Get the source and dest airports.
source = airports[airports[“id”] == row[“source_id”]].iloc[0]
dest = airports[airports[“id”] == row[“dest_id”]].iloc[0]
# Don’t draw overly long routes.
if abs(float(source[“longitude”]) – float(dest[“longitude”])) < 90:
# Draw a great circle between source and dest airports.
m.drawgreatcircle(float(source[“longitude”]), float(source[“latitude”]), float(dest[“longitude”]), float(dest[“latitude”]),linewidth=1,color=’b’)
except (ValueError, IndexError):
pass
# Show the map.
plt.show()
上面的代码将会画一个地图,然后再在地图上画线路。我们添加一了写过滤器来阻止过长的干扰其他路由的长路由。
画网络图
我们将做的最终的探索是画一个机场网络图。每个机场将会是网络中的一个节点,并且如果两点之间有路由将划出节点之间的连线。如果有多重路由,将添加线的权重,以显示机场连接的更多。将使用 networkx 库来做这个功能。
首先,计算机场之间连线的权重。
Python # Initialize the weights dictionary.
weights = {}
# Keep track of keys that have been added once — we only want edges with a weight of more than 1 to keep our network size manageable.
added_keys = []
# Iterate through each route.
for name, row in routes.iterrows():
# Extract the source and dest airport ids.
source = row[“source_id”]
dest = row[“dest_id”]
# Create a key for the weights dictionary.
# This corresponds to one edge, and has the start and end of the route.
key = “{0}_{1}”.format(source, dest)
# If the key is already in weights, increment the weight.
if key in weights:
weights[key] += 1
# If the key is in added keys, initialize the key in the weights dictionary, with a weight of 2.
elif key in added_keys:
weights[key] = 2
# If the key isn’t in added_keys yet, append it.
# This ensures that we aren’t adding edges with a weight of 1.
else:
added_keys.append(key)
一旦上面的代码运行,这个权重字典就包含了每两个机场之间权重大于或等于 2 的连线。所以任何机场有两个或者更多连接的路由将会显示出来。
Python # Import networkx and initialize the graph.
import networkx as nx
graph = nx.Graph()
# Keep track of added nodes in this set so we don’t add twice.
nodes = set()
# Iterate through each edge.
for k, weight in weights.items():
try:
# Split the source and dest ids and convert to integers.
source, dest = k.split(“_”)
source, dest = [int(source), int(dest)]
# Add the source if it isn’t in the nodes.
if source not in nodes:
graph.add_node(source)
# Add the dest if it isn’t in the nodes.
if dest not in nodes:
graph.add_node(dest)
# Add both source and dest to the nodes set.
# Sets don’t allow duplicates.
nodes.add(source)
nodes.add(dest)
# Add the edge to the graph.
graph.add_edge(source, dest, weight=weight)
except (ValueError, IndexError):
pass
pos=nx.spring_layout(graph)
# Draw the nodes and edges.
nx.draw_networkx_nodes(graph,pos, node_color=’red’, node_size=10, alpha=0.8)
nx.draw_networkx_edges(graph,pos,width=1.0,alpha=1)
# Show the plot.
plt.show()
总结
有一个成长的数据可视化的 Python 库,它可能会制作任意一种可视化。大多数库基于 matplotlib 构建的并且确保一些用例更简单。如果你想更深入的学习怎样使用 matplotlib,seaborn 和其他工具来可视化数据,在 这儿 检出其他课程。 原文出处: Vik Paruchuri 译文出处: 开源中国
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-13 01:21:00
昨天(3月9日)下午,经过三个多小时的较量,韩国棋手李世石宣布向谷歌 人工智能 AplphaGo认输,意味着 人工智能 获得了这场人机世纪之战的第一场胜利。而此前AlphaGo已经以平等条件击败了欧洲围棋冠军樊麾。
有专家在赛后评论说,AlphaGo的胜利只能算是算法的胜利,因为人工智能目前只是一种算法程序,没有道德,也没有情感,更谈不上情感。
小编其实认为这并没有错,而且就算李世石最后输给了AlphaGo,这样不代表人类输给了机器人。因为这台打败了人类最高智能代表的机器,是由人类一手精心打造的,其内部的算法也是众多科学家一步一步改进得来的。
本文的主题,就是AlphaGo能够成功击败专业棋手的功臣之一:蒙特卡罗树搜索(Monte Carlo Tree Search)。
蒙特卡罗搜索树的贡献,从谷歌AlphaGo的官方网站上就可见一斑。
完美信息博弈
我们知道,围棋有着明确的游戏规则,其中不存在随机或运气成分(如掷骰子或洗牌)。这类游戏都可以归类为所谓的完美信息博弈(perfect information games)。在完美信息博弈中,每时点参与人采取一个行动,每个参与人在其决策的同时知道以前所有的行动。
因此,理论上我们是可以构建一个包含了所有可能结果的树,因为游戏中所有的一切都是有规则可循的(fully determined)。几乎所有的弈棋程序,都是依靠其强大、精确的计算能力,来预测好的下法。
为什么之前的弈棋程序没有征服围棋?
AlphaGo并不是第一个智能弈棋程序。1997年时,已有超级电脑深蓝战胜国际象棋棋王卡斯帕罗夫的先例。那么为什么深蓝没有乘胜追击,挑战围棋呢?这是因为IBM在比赛结束后就让深蓝退役了。O(∩_∩)O~
说正经的,这很大程度上与围棋的极大可能性和此前弈棋程序的算法限制有关。
我们知道,围棋棋盘横竖各有19条线,共有361个落子点,双方交替落子,这意味着围棋总共可能有10^171(1后面有171个零)种可能性。这超过了宇宙中的原子总数是10^80(1后面80个零)!
而传统AI一般采用的是暴力搜索方法(深蓝就是这样干的),就所有可能存在的下法构建一个树。这样自然根本无法应对围棋游戏啦。
什么是蒙特卡罗树搜索?
“蒙特卡洛树搜索”是一种启发式的搜索策略,能够基于对搜索空间的随机抽样来扩大搜索树,从而分析围棋这类游戏中每一步棋应该怎么走才能够创造最好机会。
一位名叫苏椰的知乎用户举了这样一个例子,以通俗的语言进行了解释:假如筐里有100个苹果,让我每次闭眼拿1个,挑出最大的。于是我随机拿1个,再随机拿1个跟它比,留下大的,再随机拿1个……我每拿一次,留下的苹果都至少不比上次的小。拿的次数越多,挑出的苹果就越大,但我除非拿100次,否则无法肯定挑出了最大的。这个挑苹果的算法,就属于蒙特卡罗算法:尽量找好的,但不保证是最好的。
需要说明的是,蒙特卡罗树搜索并不是只有一种算法,而是一类算法。其中最流行的算法之一就是UCT(upper confidence bounds applied to trees)。
AlphaGo是第一个使用该算法的弈棋程序吗?
AlphaGo不是第一个使用蒙特卡罗树搜索的弈棋程序。
据senseis.xmp.net网站介绍,第一个使用UCT算法的围棋程序是MoGo。而且,MoGo在2008年的美国围棋公开赛上,第一次在19×19的全尺寸棋盘上击败了职业选手(当然与AlphaGo不同,这位职业选手让了9个子)。
AlphaGo是如何使用蒙特卡罗树搜索的?
虽然“蒙特卡洛树搜索”在此前一些弈棋程序中也有采用,在相对较小的棋盘中能够很好地发挥作用,但在正规的全尺寸棋盘上,这种方法的缺陷也体现出来了,因为涉及的搜索树实在太大了。
但AlphaGo采用了很聪明的策略,利用深度学习的方法降低搜索树的复杂性。因此“深度学习”和“蒙特卡洛树搜索”就成为它的两个关键因素。在每个模拟游戏中,AlphaGo都有两个大脑指引它进行搜索:价值网络(value network)和政策网络(policy network)。“政策网络”观察棋盘布局企图找到较好的下法,“价值网络”则预测这样下的话对方棋手赢棋的可能。结合这两个建议,AlphaGo最终决定怎样落子才是胜算最大的。
能用 Python 实现这种树搜索法吗?
当然可以,而且一个使用UCT算法实现的Python弈棋程序只有400行代码左右哦!想要下载试玩的话,就看本期另外一篇推送吧。
参考资料:
https://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/
http://senseis.xmp.net/MonteCarlo
http://senseis.xmp.net/UCT
http://tech.huanqiu.com/news/2016-03/8668752.html
https://www.zhihu.com/question/20254139
http://googleresearch.blogspot.com/2016/01/alphago-mastering-ancient-game-of-go.html How AlphaGo Works
本文为专栏文章,来自:编程派,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/9800.html 。
数据分析
2016-03-11 01:33:00
当我们进行网页爬虫时,我们会利用一定的规则从返回的 HTML 数据中提取出有效的信息。但是如果网页中含有 JavaScript 代码,我们必须经过渲染处理才能获得原始数据。此时,如果我们仍采用常规方法从中抓取数据,那么我们将一无所获。浏览器知道如何处理这些代码并将其展现出来,但是我们的程序该如何处理这些代码呢?接下来,我将介绍一个简单粗暴的方法来抓取含有 JavaScript 代码的网页信息。
大多数人利用 lxml 和 BeautifulSoup 这两个包来提取数据。本文中我将不会介绍任何爬虫框架的内容,因为我只利用最基础的 lxml 包来处理数据。也许你们会好奇为啥我更喜欢 lxml 。那是因为 lxml 利用元素遍历法来处理数据而不是像 BeautifulSoup 一样利用正则表达式来提取数据。本文中我将介绍一个非常有趣的案例——之前我突然发现我的文章出现在最近的 Pycoders weekly issue 147中,因此我想爬取 Pycoders weekly 中所有档案的链接。
很明显,这是一个含有 JavaScript 渲染的网页。我想要抓取网页中所有的档案信息和相应的链接信息。那么我该怎么处理呢?首先,我们利用 HTTP 方法无法获得任何信息。 import requests from lxml import html # storing response response = requests.get('http://pycoders.com/archive') # creating lxml tree from response body tree = html.fromstring(response.text) # Finding all anchor tags in response print tree.xpath('//div[@class="campaign"]/a/@href')
当我们运行上述代码时,我们无法获得任何信息。这怎么可能呢?网页中明明显示那么多档案的信息。接下来我们需要考虑如何解决这个问题?
如何获取内容信息?
接下来我将介绍如何利用 Web kit 从 JS 渲染网页中获取数据。什么是 Web kit呢?Web kit 可以实现浏览器所能处理的任何事情。对于某些浏览器来说,Web kit就是其底层的网页渲染工具。Web kit 是 QT 库的一部分,因此如果你已经安装 QT 和 PyQT4 库,那么你可以直接运行之。
你可以利用命令行来安装该软件库: sudo apt-get install python-qt4
现在所有的准备工作已经完成,接下来我们将使用一个全新的方法来提取信息。
解决方案
我们首先通过 Web kit 发送请求信息,然后等待网页被完全加载后将其赋值到某个变量中。接下来我们利用 lxml 从 HTML 数据中提取出有效的信息。这个过程需要一点时间,不过你会惊奇地发现整个网页被完整地加载下来了。 import sys from PyQt4.QtGui import * from PyQt4.Qtcore import * from PyQt4.QtWebKit import * class Render (QWebPage): def __init__ (self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(QUrl(url)) self.app.exec_() def _loadFinished (self, result): self.frame = self.mainFrame() self.app.quit()
类 Render 可以用来渲染网页,当我们新建一个 Render 类时,它可以将 url 中的所有信息加载下来并存到一个新的框架中。 url = 'http://pycoders.com/archive/' # This does the magic.Loads everything r = Render(url) # Result is a QString. result = r.frame.toHtml()
利用以上的代码我们将 HTML 结果储存到变量 result 中,由于 lxml 无法直接处理该特殊的字符串数据,因此我们需要转换数据格式。 # QString should be converted to string before processed by lxml formatted_result = str(result.toAscii()) # Next build lxml tree from formatted_result tree = html.fromstring(formatted_result) # Now using correct Xpath we are fetching URL of archives archive_links = tree.xpath('//div[@class="campaign"]/a/@href') print archive_links
利用上述代码我们可以获得所有的档案链接信息,接下来我们可以利用这些 Render 和这些URL链接来提取文本内容信息。Web kit 提供了一个强大的网页渲染工具,我们可以利用这个工具从 JS 渲染的网页中抓取出有效的信息。
本文中我介绍了一个如何从 JS 渲染的网页中抓取信息的有效方法,这个工具虽然速度比较慢,但是却非常简单粗暴。我希望你会喜欢这篇文章。现在你可以将该方法运用到任何你觉得难以处理的网页中。
祝一切顺利。 原文链接: https://impythonist.wordpress.com/2015/01/06/ultimate-guide-for-scraping-javascript-rendered-web-pages/
原文作者:Naren Aryan  译者:fibears
本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/9788.html 。
数据分析
2016-03-10 18:00:00
最近有一些文章提出与年龄相关的问题:“ 崭露头角的年轻数据科学家们是学习R语言还是Python更好 “
答案似乎都是“视情况而定”,在现实中没有必要在R和 Python 中做出选择,因为你两个都用得到。
它被称为RPy2: http://rpy.sourceforge.net/rpy2/doc-2.1/html/introduction.html
什么是”数据科学”
在谈论RPy2之前,先来说一下“数据科学”,我要说的是“数据科学”是一个奇怪的词。因为几乎所有的科学都是“数据科学”。“无数据科学”则是完全不同的领域:哲学。“数据科学”是一门通过系统观察,对照实验,贝叶斯推理的开放试验理念的科学学科。
“数据科学”的目标是从数据中得出有效的统计推论。标签“数据”是指数据用于做什么并不重要,但这是错误的:它是难以且不可能做到科学的在没有得到数据的详细信息,得去了解系统的弱点并生产出来,智能、灵敏的应对非理想好数据。
任何有趣的数据集至少有以下一些特性:缺失值,异常值和噪声。缺失值:顾名思义就是缺失的值。异常值:离群怪异的事件,由于某种原因或其他的事件其值远远的超出合理界限。噪声的是,从所测量的值的随机(或非随机的)影响的着结果的分布。 一个良好的测量分布, 异常值和噪声在噪声不同下一般有较容易理解的因素,而异常值通常是很少发生的,我们不能通过分布很好的理解。
对于处理这类事情R,Python和RPY的都是有用的工具。
为什么R非常适合数据科学
R语言 对有经验的统计分析师来说是非常轻量级. 它由科学家创造,对绝大多数的数据管理任务来说都非常轻松。特别适合以下几种数据管理任务: 标记数据 填充遗漏值(译者注:比如10行数据每行固定9列,但是第三行却只有5列数据,可以通过R的函数自动补全另外的5列值) 过滤
R语言对标记数据的支持非常友好. R语言的“data frame”概念,使得通过对数据列和数据行头来分割组合数据、标记数据,然后以纯数值的矩阵数据交给算法处理. 而传统的数据科学开发语言,如Python对数据的处理都需要开发者自己完成,需要消耗开发者 大量时间且容易出错.
处理或丢弃遗漏值、离群值(译者注:极值,如最大值、最小值)在数据中是非常基本但重要的任务. 某些情况下,本来是有利的数据,却因为测量误差等原因变成了不利、反对的数据。(译者注:比如越趋近于1才表示越可能是.)你如何处理这些事情可以对你的分析结果产生很大的影响。
R语言提供了丰富的算法来处理长期以来科学实践中出现的各种数据有关问题,虽然这些算法仍然需要自己去尝试和判断选择,以选择最恰当的数据处理算法.
RPy2: 架起R语言与Python之间的桥梁
Pandas,Python的 数据分析 库,目前它已经有很多相同功能,但是RPy2创造了一条很好的从R语言到Python的迁移路线,它让你在学习Python的时候,把R语言作为一个附属部分来学习,对于很多有丰富实验开发经验的分析师会使用R语言,当他们想把算法融入一个Python应用程序,并分发给用户时,他们也可以使用RPy2。
执行这种迁移的能力,而不离开R语言的概念模型是很有价值的,但从另一个角度来说,这也是一个限制,能够使用一个真正的通用编程语言,如:Python,来包装概念模型,并使得这个用户友好的应用程序有多种复杂的附加功能(打印,网络,USB支持,等等)是至关重要的。
举例来说,我已经使用了这种方法来创建读取传感器数据的Python应用,通过RPy2处理,以各种方式显示给客户,我不知道怎么用R语言读取传感器数据,应该是有某种方法的。而Python已经做好了我需要的模块,即使没有也非常容易扩展。
如果你还不知道R语言,我推荐你学习Python并且使用RPy2来访问R语言的函数。你学习一种语言获得了两种能力。一旦你学习过RPy,再转到纯R语言也不是什么大问题,但是,你想要反过来就没那么容易了。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-09 23:25:00
摘要:上周六,总理在大会堂作政府工作报告,全球媒体瞩目。每年都会有媒体对报告中的高频词汇进行梳理,我们也可以尝试利用 Python 和分词jieba来自己分析一下。
我们首先来看国内部分媒体的梳理结果。据小编简单了解,已知对工作报告高频词汇进行梳理的媒体包括法制日报和新华网。
国内媒体梳理的高频词
下面是 法制日报公布的十大高频词 。
高频词 词频 1978年以来政府工作报告中的提及总数 发展 151 4828
经济 90 4449
改革 74 2758
建设 71 3274
社会 66 3402
推进 61 1096
创新 61 414
政策 52 1231
企业
加强
48
41
2304
2238
下面是 新华网数据新闻部统计的高频词汇 。
新华网的信息图其实有些含糊不清,有些词频不知道到底是2016年还是2015年的,但这里并不是我们关注的重点。
另外,新华网和法制日报得出的数据似乎有些出入,虽然并不大。那么,到底那家的数据是准确的呢?
接下来,我们就自己来计算一下报告中的高频词汇吧。
准备工作
我们需要从网上爬取政府报告的全文,这里小编选择 中国政府网发布的报告页面 。为此,我们需要安装requests和BeautifulSoup4这两个常用第三方库。 pip requests beautifulsoup
获取了报告文本之后,接下来需要对文本进行分词。我们选择号称“做最好的中文分词组件”的 jieba中文分词库 。 pip install jieba
这里提示一下,这三个库都支持Python 2和Python 3。但是在Python 2下,很容易就碰到编码问题,最后打印出的中文无法正常显示。因此,建议使用Python 3执行该脚本。
安装好依赖包之后,我们在脚本 analyze_report.py 的顶部导入它们。 import jieba import requests from bs4 import BeautifulSoup
文本提取
首先,我们从网上抓取政府工作报告的全文。我将这个步骤封装在一个名叫 extract_text 的简单函数中,接受url作为参数。因为目标页面中报告的文本在所有的p元素中,所以我们只需要通过BeautifulSoup选中全部的p元素即可,最后返回一个包含了报告正文的字符串,简单粗暴! def extract_text (url) : """Extract html content.""" page_source = requests.get(url).content bs_source = BeautifulSoup(page_source) report_text = bs_source.find_all( 'p' ) text = '' for p in report_text: text += p.get_text() text += '\n' return text
利用jieba分词,并计算词频
然后,我们就可以利用jieba进行分词了。这里,我们要选择全模式分词。jieba的全模式分词,即把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义。之所以这么做,是因为默认的精确模式下,返回的词频数据不准确。
分词时,还要注意去除标点符号,由于标点符号的长度都是1,所以我们添加一个len(word) >= 2的条件即可。
最后,我们就可以利用Counter类,将分词后的列表快速地转化为字典,其中的键值就是键的出现次数,也就是这个词在全文中出现的次数啦。 def word_frequency (text) : from collections import Counter words = [word for word in jieba.cut(text, cut_all= True ) if len(word) >= 2 ] c = Counter(words) for word_freq in c.most_common( 10 ): word, freq = word_freq print(word, freq)
执行脚本
两个函数都写好之后,我们就可以愉快地执行啦。 url_2016 = 'http://www.gov.cn/guowuyuan/2016-03/05/content_5049372.htm' text_2016 = extract_text(url_2016) word_frequency(text_2016)
最后的结果如下:
高频词 次数 发展 152
经济 90
改革 76
建设 71
社会 67
推进 62
创新 61
政策 54
企业
服务
48
44
## 小结
从上面的结果可以看出,新华网发布的高频词统计数据与我们自己的分析最为接近。当然,新华网的里面少了一个高频词:推进。
如果有朋友想要验证结果的话,可以自己把报告全文复制到word里,然后查询下相关的高频词即可,比如下面这样:
本文为专栏文章,来自:编程派,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/9684.html 。
数据分析
2016-03-07 22:47:00
摘要:用 Python 做 文本挖掘 的流程 收集数据 数据集 。如果是已经被人做成数据集了,这就省去了很多麻烦事 抓取。这个是 Python 做得最好的事情,优秀的包有很多,比如 scrapy , beautifulsoup 等等。 预处理(对 这里 的高质量讨论结果的修改,下面的顺序仅限 英文) 去掉抓来的数据中不需要的部分,比如 HTML TAG,只保留文本。结合 beautifulsoup 和正则表达式就可以了。 pattern.web 也有相关功能。 处理编码问题。没错,即使是英文也需要处理编码问题!由于 Python2 的历史原因,不得不在编程的时候自己处理。英文也存在 unicode 和 utf-8 转换的问题,中文以及其他语言就更不用提了。 这里 有一个讨论,可以参考,当然网上也有很多方案,找到一个适用于自己的最好。 将文档分割成句子。 将句子分割成词。专业的叫法是 tokenize。 拼写错误纠正。 pyenchant 可以帮你!(中文就没有这么些破事!) POS Tagging。nltk 是不二选择,还可以使用 pattern 。 去掉标点符号。使用正则表达式就可以。 去掉长度过小的单词。len<3 的是通常选择。 去掉 non-alpha 词。同样,可以用正则表达式完成 W 就可以。 转换成小写。 去掉停用词。Matthew L. Jockers 提供了一份比机器学习和自然语言处理中常用的停词表 更长的停词表 。 中文的停词表 可以参考这个。 lemmatization/stemming。nltk 里面提供了好多种方式,推荐用 wordnet 的方式,这样不会出现把词过分精简,导致词丢掉原型的结果,如果实在不行,也用 snowball 吧,别用 porter,porter 的结果我个人太难接受了,弄出结果之后都根本不知道是啥词了。 MBSP 也有相关功能。 重新去掉长度过小的词。是的,再来一遍。 重新去停词。上面这两部完全是为了更干净。 到这里拿到的基本上是非常干净的文本了。如果还有进一步需求,还可以根据 POS 的结果继续选择某一种或者几种词性的词。 Bag-of-Words ! nltk 和 scikit.learn 里面都有很完整的方案,自己选择合适的就好。这里 如果不喜欢没有次序的 unigram 模型 ,可以自行选择 bi-gram 和 tri-gram 以及更高的 n-gram 模型。nltk 和 sklearn里面都有相关的处理方法。 更高级的特征。 TF-IDF。这个 nltk 和 sklearn 里面也都有。 Hashing ! 训练模型 到这里,就根据自己的应用选择合适的学习器就好了。 分类,情感分析等。 sklearn 里面很多方法,pattern 里有 情感分析的模块 ,nltk 中也有一些分类器。 主题发现 NMF (Online) Latent Dirichlet Allocation word2vec 自动文摘。这个自己写吧,没发现什么成型的工具。 Draw results Matplotlib Tag cloud Graph
说明:在预处理部分仅仅针对英文的情况,由于中英文在分词上是不同的机制,所以在处理中文的时候需要根据情况进行,个人经验是在去停词之前分词。这部分有待完善。 中文分词。 jieba 或者 Stanford (Chinese) Word Segmenter 。jieba 是纯 Python 写的,Stanford 的可以通过 nltk 调用, 复旦 NLP 也可以用 Python 调用。 来源:知乎 作者:肖智博
链接:http://zhuanlan.zhihu.com/textmining-experience/19630762
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-06 20:30:00
摘要:当你在一个城市,穿越大街小巷,跑步跑了几千公里之后,一个显而易见的想法是,如果能把在这个城市的所有路线全部画出来,会是怎样的景象呢?
文章代码比较多,为了不吊人胃口,先看看最终效果,上到北七家,下到南三环,西到大望路,东到首都机场。二环32公里,三环50公里,这是极限,四环先暂时不考虑了。。。。
1.数据来源:益动GPS
首先需要原始位置信息,手机上有众多跑步软件,但它们共同的问题是不允许自由导入导出(可能是为了防止用户脱离吧)。因此有一块智能运动手表应该是不二之选。我的是Garmin Fenix3,推荐一下:
与此同时,益动GPS算是业界良心了,能够同步咕咚,Garmin手表,悦跑圈的数据,因此我将其作为一个入口,抓取所有的GPS数据。
至于如何同步,可参考网站上的相关介绍,下面是我登录该网站后的截图:
http://edooon.com/user/5699607196/record/15414378
随便点进去以后,就可以看到导出路线的按钮:
无比坑爹的是,它不提供批量导出的按钮,几百条记录,依次导出都累死了。于是考虑用代码来自动化吧。
2. 获取益动网站上的数据
登录之后,可以看出它是动态加载,当滚轮滚到最下时,自动加载后面的内容。本来是应该嗅探和分析http请求的。后来我懒惰了,采取折中方案,拖到底,全部加载完毕后,保存了当前的html文件。
接下来就是解析这个Html,基本上是通过XPath的来做的。有经验的同学看了下图就都明白了:
图中高亮的部分,就是要下载gpx文件的实际地址。我们将其保存在urllist中。同时,元数据被保存在json文件里。
folder = u'D:/buptzym的同步盘/百度云/我的文档/数据分析/datasets/rungps/';cookie='JSESSIONID=69DF607B71B1F14AFEC090F520B14B55; logincookie=5699607196$6098898D08E533587E82B33DD9D02196; persistent_cookie=5699607196$42C885AD38F59DCA407E09C95BE1A60B; uname_forloginform="buptzym@qq.com"; __utma=54733311.82935663.1447906150.1447937410.1456907433.7; __utmb=54733311.5.10.1456907433; __utmc=54733311; __utmz=54733311.1456907433.7.3.utmcsr=baidu|utmccn=(organic)|utmcmd=organic; cookie_site=auto'userid='5699607196';f = codecs.open(folder + 'desert.htm', 'r', 'utf-8');html = f.read();f.close();root = etree.HTML(html)tree = etree.ElementTree(root);listnode=tree.xpath('//*[@id="feedList"]');numre=re.compile(u'骑行|跑步|公里|,|耗时|消耗|大卡');urllists=[]records=[];for child in listnode[0].iterchildren(): record={}; temp=child.xpath('div[2]/div[1]/a[2]') if len(temp)==0: continue; source= temp[0].attrib['href']; record['id']=source.split('/')[-1]; info=temp[0].text; numinfo= numre.split(info); if len(numinfo)<6: continue; record['type']= info[0:2]; record['distance']= numinfo[1]; record['hot']=numinfo[6]; urllists.append('http://edooon.com/user/%s/record/exporttype=gpx&id=%s' % (userid, record['id']));
值得注意的是,因为下载时需要cookie,因此读者需要将自己在益动GPS的userid和登录的cookie都替换掉(这种网站不值得为它开发自动登录)。
接下来就是下载的过程,获取导出数据按钮的URL的XPath,构造一个带cookie的请求,然后保存文件即可,非常容易。
opener = urllib.request.build_opener()opener.addheaders.append(('Cookie', cookie));path='//*[@id="exportList"]/li[1]/a';for everyURL in urllists: id = everyURL.split('=')[-1]; print(id); url='http://edooon.com/user/%s/record/%s' % (userid, id); f = opener.open(url); html = f.read(); f.close(); root = etree.HTML(html) tree = etree.ElementTree(root); fs = str(tree.xpath(path)[0]); if fs is None: continue; furl = 'http://edooon.com/user/%s/record/%s' % (userid, fs); f = opener.open(furl); html = f.read(); f.close(); filename=folder+'id'+'.gpx'; xmlfile = codecs.open(filename, 'wb'); xmlfile.write(html); xmlfile.close();
之后,我们便保存了大约300多个gpx文件。
3. 解析gpx数据
所谓gpx数据,是一种通用规范的GPS数据格式,详细的资料可自行搜索。
我们需要使用python的gpx解析器, gpxpy是个好选择,使用
pip3 install gpxpy 即可安装。
gpxpy提供了丰富的接口,当然为了统计,我们只需要提取一部分数据:
def readgpx(x): file= open(dir+x+'.gpx','r') txt=file.read() gpx=gpxpy.parse(txt) mv=gpx.get_moving_data() dat= {'移动时间':mv.moving_time,'静止时间':mv.stopped_time,'移动距离':mv.moving_distance,'暂停距离':mv.stopped_distance,'最大速度':mv.max_speed}; dat['总时间']=(gpx.get_duration()) dat['id']=str(x) updown=gpx.get_uphill_downhill() dat['上山']=(updown.uphill); dat['下山']=(updown.downhill) timebound=gpx.get_time_bounds(); dat['开始时间']=(timebound.start_time) dat['结束时间']=(timebound.end_time) p=gpx.get_points_data()[0] dat['lat']=p.point.latitude dat['lng']=p.point.longitude file.close() return dat
readgpx函数会读取文件名x,并将一个字典返回。并得到类似下面的一张表:
因为我们只需要绘制北京的区域,因此需要一个坐标表达式筛掉北京之外的地区。筛选代码使用了pandas,在附件里有更详细的代码。
exceptids=详细[(详细.lng<116.1)|(详细.lng>116.7)|(详细.lat<39.9)|(详细.lat>40.1)].id
def filtercity(r): sp=r.split('/')[-1].split('.') if sp[1]!='gpx': return False; if sp[0] in exceptids.values: return False; return True;
bjids= [r for r in gpxs if filtercity(r)]
这样,我们就将所有在北京完成的运动数据筛选了出来。
4.绘制GPS数据
反复造轮子是不好玩的,绘制gpx已经有比较强大的库,地址在 http://avtanski.net/projects/gps/
很不幸,这个库使用Perl作为开发语言,并使用了GD作为视觉渲染库。我花费了大量的时间,在安装GD上面。
Ubuntu默认安装Perl, GD是需要libgd的,libgd却在官网上极难下载,下载后却又发现版本不对,这让我在国外互联网上遨游了好几个小时,都要死掉了。。。到最后,我才发现,安装libgd库只要下面这一步就可以了:
apt-get install libgd-gd2-perl
我觉得这就是apt-get方式坑爹的地方,apt get gd 或者libgd根本找不到,如果不去查,谁知道这么写啊! 至于Perl的CPan管理工具,哎,不说了都是泪。
接下来下载gd 2.56,解压之后,
perl ./Makefile.PL
make
make install
即可
这份gpx绘制库是这么介绍自己的:
This folder contains several Perl scripts for processing and plottin GPS track data in .GPX format.
当然我们不废话,把所有的gpx数据拷贝到sample_gpx文件夹下,然后华丽丽的运行
./runme.sh
如果没有问题的话,应该是下面这样:
我假设各位读者对bash都已经很熟悉了,更多的需求可以查看runme.sh。
最后得到的结果如下图:
当时看到这个结果,我都惊呆了!这是自己跑了2000公里左右的结果,北京三环内(主要集中在长安街以北)主要的道路都跑遍了,朝阳公园,天坛公园,尤其北三环和北土城路(10号线北段)被我各种虐。每一段白线都是一段故事,每一个点都是我的一个脚印啊!
5.总结
这文章写得显然不够详细,远远没有hand by hand。而且并没有提供更多的 数据分析 (显然这些工作我都做了)不过相信跑步的程序员一定都很厉害,我这就权作抛砖引玉了。
其实完全可以做成一个web服务,跑友们上传自己的跑步软件的id,就可以自动渲染出各种漂亮的跑步路径和分析图,应该会很有意义吧!
这件事情花费了我七八个小时,简直吐血,大量的时间用在了如何安装GD上,而不是下载数据上。教训告诉我,一定要读安装包里自带的说明文档,因为库和库之间的版本不同,因此可能造成版本地狱,到时候新版本卸载不了,老版本没法用的时候可别说我没提醒啊!
值得一提的是,益动gps下载的gpx文件不带换行符,这导致gpx_disualization库无法解析它(这货正则表达式写错了),我懒得再去动perl正则,于是通过替换增加了换行符。
GD还需要libpng等一众perl库,在附件里都有提供下载。
附件 是GD库和爬取所有gpx数据的python3代码。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-06 19:30:00
我是个微博重度用户,工作学习之余喜欢刷刷timeline看看有什么新鲜事发生,也因此认识了不少高质量的原创大V,有分享技术资料的,比如好东西传送门;有时不时给你一点人生经验的,比如石康;有高产的段子手,比如银教授;有黄图黄段子小能手,比如阿良哥哥 木木萝希木 初犬饼…
好吧,我承认,爬黄图黄段子才是我的真实目的,前三个是掩人耳目的…(捂脸,跑开)
另外说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下:
user_timeline API document
只能获取当前授权的用户(就是自己),而且只能返回最新的5条,WTF!
所以果断放弃掉这条路,改为『生爬』,因为PC端的微博是Ajax的动态加载,爬取起来有些困难,我果断知难而退,改为对 移动端 的微博进行爬取,因为移动端的微博可以通过分页爬取的方式来一次性爬取所有微博内容,这样工作就简化了不少。
最后实现的功能: 输入要爬取的微博用户的user_id,获得该用户的所有微博 文字内容保存到以%user_id命名文本文件中,所有高清原图保存在weibo_image文件夹中
具体操作:
首先我们要获得自己的cookie,这里只说chrome的获取方法。 用chrome打开 新浪微博移动端 option+command+i调出开发者工具 点开Network,将Preserve log选项选中 输入账号密码,登录新浪微博
找到m.weibo.cn->Headers->Cookie,把cookie复制到代码中的#your cookie处
cookie
然后再获取你想爬取的用户的user_id,这个我不用多说啥了吧,点开用户主页,地址栏里面那个号码就是user_id
将python代码保存到weibo_spider.py文件中
定位到当前目录下后,命令行执行python weibo_spider.py user_id
当然如果你忘记在后面加user_id,执行的时候命令行也会提示你输入
最后执行结束
iTerm
文字内容
图片内容
小问题:在我的测试中,有的时候会出现图片下载失败的问题,具体原因还不是很清楚,可能是网速问题,因为我宿舍的网速实在太不稳定了,当然也有可能是别的问题,所以在程序根目录下面,我还生成了一个userid_imageurls的文本文件,里面存储了爬取的所有图片的下载链接,如果出现大片的图片下载失败,可以将该链接群一股脑导进迅雷等下载工具进行下载。
另外,我的系统是OSX EI Capitan10.11.2, Python 的版本是2.7,依赖库用sudo pip install XXXX就可以安装,具体配置问题可以自行stackoverflow,这里就不展开讲了。
下面我就给出实现代码(严肃脸) #-*-coding:utf8-*- import re import string import sys import os import urllib import urllib2 from bs4 import BeautifulSoup import requests from lxml import etree reload(sys) sys.setdefaultencoding('utf-8') if(len(sys.argv)>=2): user_id = (int)(sys.argv[1]) else: user_id = (int)(raw_input(u"请输入user_id: ")) cookie = {"Cookie": "#your cookie"} url = 'http://weibo.cn/u/%dfilter=1&page=1'%user_id html = requests.get(url, cookies = cookie).content selector = etree.HTML(html) pageNum = (int)(selector.xpath('//input[@name="mp"]')[0].attrib['value']) result = "" urllist_set = set() word_count = 1 image_count = 1 print u'爬虫准备就绪...' for page in range(1,pageNum+1): #获取lxml页面 url = 'http://weibo.cn/u/%dfilter=1&page=%d'%(user_id,page) lxml = requests.get(url, cookies = cookie).content #文字爬取 selector = etree.HTML(lxml) content = selector.xpath('//span[@class="ctt"]') for each in content: text = each.xpath('string(.)') if word_count>=4: text = "%d :"%(word_count-3) +text+"nn" else : text = text+"nn" result = result + text word_count += 1 #图片爬取 soup = BeautifulSoup(lxml, "lxml") urllist = soup.find_all('a',href=re.compile(r'^http://weibo.cn/mblog/oripic',re.I)) first = 0 for imgurl in urllist: urllist_set.add(requests.get(imgurl['href'], cookies = cookie).url) image_count +=1 fo = open("/Users/Personals/%s"%user_id, "wb") fo.write(result) word_path=os.getcwd()+'/%d'%user_id print u'文字微博爬取完毕' link = "" fo2 = open("/Users/Personals/%s_imageurls"%user_id, "wb") for eachlink in urllist_set: link = link + eachlink +"n" fo2.write(link) print u'图片链接爬取完毕' if not urllist_set: print u'该页面中不存在图片' else: #下载图片,保存在当前目录的pythonimg文件夹下 image_path=os.getcwd()+'/weibo_image' if os.path.exists(image_path) is False: os.mkdir(image_path) x=1 for imgurl in urllist_set: temp= image_path + '/%s.jpg' % x print u'正在下载第%s张图片' % x try: urllib.urlretrieve(urllib2.urlopen(imgurl).geturl(),temp) except: print u"该图片下载失败:%s"%imgurl x+=1 print u'原创微博爬取完毕,共%d条,保存路径%s'%(word_count-4,word_path) print u'微博图片爬取完毕,共%d张,保存路径%s'%(image_count-1,image_path)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-06 18:35:00
Python 是一种面向对象、直译式计算机程序设计语言,由Guido van Rossum于1989年底发明。由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。
由于Python拥有非常丰富的库,使其在 数据分析 领域也有广泛的应用。由于Python本身有十分广泛的应用,本期 Python数据分析 路线图主要从数据分析从业人员的角度讲述Python数据分析路线图。整个路线图计划分成16周,120天左右。主要学习内容包括四大部分:
1)Python工作环境及基础语法知识了解(包括正则表达式相关知识学习);
2)数据采集相关知识(python爬虫相关知识);
3)数据分析学习;
4) 数据可视化 学习。
Python工作环境及基础语法知识了解
对于Python基础语法学习部分,学习周期大概为4周,需要的相关资源在网络上都能找到免费的资源,而且质量都不错。相关中文资源如下:
1.python工作集成环境包
Python(x,y):下载地址:http://python-xy.github.io/downloads.html
Pycharm:下载地址:http://www.jetbrains.com/pycharm/download/#div=windows
2.python数据分析相关库(Pandas/Numpy/Scipy/Matplotlib)
如果安装了上面集成工作包,则下面的包不需要重新安装了。关于包的安装方法在学习资源图书中都有介绍,通常安装库采用pip方法,也可以用pip list查询系统安装了哪些库。
3.学习资源
图书:
1)Python基础教程(第2版)[电子版图书自行百度]
2)深入浅出Head First python(中文版)[电子版图书自行百度]
在线教程:
1)廖雪峰的python教程:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
2)正则式学习:http://wiki.jikexueyuan.com/project/python-crawler-guide/regular-expressions.html#7907ec6cc04be6c7f8cf8ac272215946
视频教程:
1)慕课网python入门:http://www.imooc.com/learn/177
2)慕课网python进阶:http://www.imooc.com/learn/317
3)正则式学习视频:http://www.imooc.com/learn/550
数据采集学习
对于数据采集部分的学习主要是通过python爬虫的学习了解基本的外部数据采集情况,当然也可以借助别人写好的规则库直接完成某些数据的采集。这部分内容的学习周期大概也为四周,需要的相关资源在网络上都能找到免费的资源,而且质量都不错。相关中文资源如下:
爬虫学习在线教程:
1.Python爬虫入门一之综述:http://cuiqingcai.com/927.html
2.Python爬虫入门二之爬虫基础了解:http://cuiqingcai.com/942.html
3.Python爬虫入门三之Urllib库的基本使用:http://cuiqingcai.com/947.html
4.Python爬虫入门四之Urllib库的高级用法:http://cuiqingcai.com/954.html
5.Python爬虫入门五之URLError异常处理:http://cuiqingcai.com/961.html
6.Python爬虫入门六之Cookie的使用:http://cuiqingcai.com/968.html
7.Python爬虫入门七之正则表达式:http://cuiqingcai.com/977.html
8.Python爬虫实战一之爬取糗事百科段子:http://cuiqingcai.com/990.html
9.Python爬虫实战二之爬取百度贴吧帖子:http://cuiqingcai.com/993.html
10.Python爬虫实战三之计算大学本学期绩点:http://cuiqingcai.com/997.html
11.Python爬虫实战四之抓取淘宝MM照片::http://cuiqingcai.com/1001.html
12.Python爬虫进阶一之爬虫框架Scrapy安装配置:http://cuiqingcai.com/912.html
视频教程:
Python简单爬虫开发:http://www.imooc.com/learn/563
数据分析
Python数据分析的学习主要是对相关库的使用,比如数据整理需要用到numpy和pandas库,数据描述与分析分析则主要用到pandas库,从某种程度上讲,利用python进行数据分析的学习过程就是对库的学习过程。由于有了前面2部分内容的学习基础,本部分内容的建议学习练习时间也为4周,相关免费学习资源如下:
图书:
利用python进行数据分析:http://item.jd.com/11352441.html[电子版图书自行百度]
视频:
用python玩转数据:https://www.coursera.org/learn/hipython[视频为cousera认证课程,全程中文]
数据可视化
Python数据可视化学习的过程就是学习matplotlib库的过程,matplotlib库包含有丰富的数据可视化资源,地图、3D等等都有涉及,如果有前面3部分的学习经验的话,这部分内容在4周内也能解决。相关中文学习资源如下:
图书:
Python数据可视化编程实战[电子版图书自行百度]:http://item.jd.com/11676691.html
在线教程:
1.利用Python绘图和可视化(1):http://www.lovedata.cn/ec/Python/2016/0118/7732.html
2.利用Python绘图和可视化(2):http://www.lovedata.cn/ec/Python/2016/0118/7733.html
至此,Python数据分析相关学习内容介绍完了,上面介绍的多种资源,每个阶段只需选择其中的一种进行深入即可,更多更深的内容则需要自己去实践摸索。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-05 22:57:00
摘要:每部电影都有自己的海报,即便是在如今这互联网时代,电影海报仍是一个强大的广告形式。每部电影都会根据自身的主题风格设计海报,精致的电影海报可以吸引人们的注意力。那么问题来了,不同风格的电影海报对颜色有什么样的偏好呢?
利用 Python 爬取海报数据
为了回答这个问题,我们需要分析不同风格电影的海报情况。首先,我们需要构建一个电影海报数据的数据集,因此我利用 Bing 图像搜索引擎来获取海报数据。
接下来我利用 Python 从网页中抓取电影海报数据并将其储存到本地电脑中,最终我得到四种电影类型(惊悚片、喜剧、动画片和动作片)的112张海报数据。 from bs4 import BeautifulSoup import requests import re import urllib2 import os import numpy as np def get_soup (url): return BeautifulSoup(requests.get(url).text) image_type = "action movies" query = "movie 2014 action movies poster" url = "http://global.bing.com/images/searchq=" + query + "&qft=+filterui:imagesize-large&FORM=R5IR5" soup = get_soup(url) images = [a['src'] for a in soup.find_all("img", {"src": re.compile("mm.bing.net")})] for img in images: raw_img = urllib2.urlopen(img).read() cntr = len([i for i in os.listdir("images") if image_type in i]) + 1 f = open("images/" + image_type + "_" + str(cntr), "wb") f.write(raw_img) f.close()
其中部分海报数据如下图所示:
图像格式转换
为了提取海报的颜色信息,我们需要将图像转换为 RGB 像素矩阵。比如,对于 200*200 像素的图片,我们需要将其转换成含有 40000 个像素信息的对象。同时为了保持数据集的大小,我将图像的大小统一设定为 200*200。 def get_points (img): points = [] w, h = img.size for count, color in img.getcolors(w * h): points.append(Point(color, 3, count)) return points rtoh = lambda rgb: '#%s' % ''.join(('%02x' % p for p in rgb))
提取颜色信息
接下来我利用 K 均值算法和颜色信息将海报分成许多不同的类别。我尝试了 k=3 , k=5 和 k=10 三种模型,但由于大多数海报通常都具有黑色的字体和边框,所以前两种模型无法获取海报中的主要颜色信息。最终我选择 k=10 的模型,并利用该算法处理 112 张海报,得到了 1120 种颜色信息。
部分结果如下图所示:
从下图中我们可以看出,K 均值算法存在一些不足之处:该算法对初始值非常敏感,这会产生一些不想要的结果。在这张海报中,该算法无法获取金色或橘黄色的信息。
3D 散点图
对每一类型的电影,我根据海报的 RGB 数据绘制三维散点图,其中每个点代表海报的一个颜色。通过比较四张散点图我们可以发现大多数惊悚片的海报中都有暗黑色和红色,而喜剧和动画片则会根据不同的电影主题选择不同的配色。
喜剧 VS. 动画片
动作片 VS. 惊悚片
转换颜色信息
由于我们很难从 1120 种颜色中提取一些特定的模式,因此我们需要降低颜色的维度。我们可以将颜色信息转换到 Lab 色彩空间中,然后利用 Python 中的 Delta E equations 和 colormath 包来计算海报中的颜色和基础颜色之间的视觉差异程度。
我通过最小距离法将这些颜色分成 17 类。下表是喜剧电影海报数据的部分数据:
电影类型对比
转换数据后,我计算出每个电影类型中所包含的基本色数量。
从上图中我们可以发现黑色、灰色和白色是电影海报中最常见的三种颜色。这是因为基本色的数量太少了,而大多数电影海报都有黑色的标题和边框。 原文链接: http://blog.nycdatascience.com/students-work/using-python-and-k-means-to-find-the-colors-in-movie-posters/
原文作者:Amy
译者:Fibears
本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/9214.html 。
数据分析
2016-03-02 02:06:00
摘要:这篇文章旨在更客观地看待这两门语言。我们会平行使用 Python 和R分析一个 数据集 ,展示两种语言在实现相同结果时需要使用什么样的代码。这让我们了解每种语言的优缺点,而不是猜想。在Dataquest,我们教授两种语言,并认为两者在数据科学工具箱中都占据各自的地位。
我们将会分析一个NBA数据集,包含运动员和他们在2013-2014赛季的表现,可以在 这里 下载这个数据集。我们展示Python和R的代码,同时做出一些解释和讨论。事不宜迟,现在就开始这场硬碰硬的对决吧!
读取CSV文件
R nba <- read.csv( "nba_2013.csv" )
Python import pandas nba = pandas.read_csv( "nba_2013.csv" )
上面的代码分别在两种语言中将包含2013-2014赛季NBA球员的数据的 nba_2013.csv 文件加载为变量 nba 。Python中实际的唯一不同是需要加载pandas库以使用Dataframe。Dataframe在R和Python中都可用,它是一个二维数组(矩阵),其中每列都可以是不同的数据类型。在完成这一步后,csv文件在两种语言中都加载为dataframe。
统计球员数量
R print(dim(nba)) [1] 481 31
Python print(nba.shape) (481, 31)
两者分别输出球员数量和数据列数量。我们有481行,或者说球员,和31列关于球员的数据。
查看数据的第一行
R print(head(nba, 1 )) player pos age bref_team_id 1 Quincy Acy SF 23 TOT [output truncated]
Python print(nba.head( 1 )) player pos age bref_team_id 0 Quincy Acy SF 23 TOT [output truncated]
它们几乎完全相同。两种语言都打印出数据的第一行,语法也非常类似。Python在这里更面向对象一些, head 是dataframe对象的一个方法,而R具有一个单独的 head 函数。当开始使用这些语言做分析时,这是一个共同的主题,可以看到Python更加面向对象而R更函数化。
计算每个指标的均值
让我们为每个指标计算均值。如你所见,数据列以类似 fg (field goals made)和 ast (assists)的名称命名。它们都是球员的赛季统计指标。如果想得到指标的完整说明,参阅 这里 。
R meanNoNA <- function (values){ mean(values, na.rm= TRUE ) } sapply(nba, meanNoNA) player NA pos NA age 26.5093555093555 bref_team_id NA [output truncated]
Python import numpy nba_numeric = nba._get_numeric_data() nba_numeric.apply(numpy,.mean, axis= 0 ) age 26.509356 g 53.253638 gs 25.571726 [output truncated]
这里有一些明显的分歧。在两种方法中,我们均在dataframe的列上应用了一个函数。在python中,如果我们在非数值列(例如球员姓名)上应用函数,会返回一个错误。要避免这种情况,我们只有在取平均值之前选择数值列。
在R中,对字符串列求均值会得到 NA ——not available(不可用)。然而,我们在取均值时需要确实忽略 NA (因此需要构建我们自己的函数)。否则类似 x3p. 这样的一些列的均值将会为 NA ,这一列代表三分球的比例。有些球员没有投出三分球,他们的百分比就是缺失的。如果我们直接使用R中的 mean 函数,就会得到 NA ,除非我们指定 na.rm=TRUE ,在计算均值时忽略缺失值。
绘制成对散点图
一个探索数据的常用方法是查看列与列之间有多相关。我们将会比较 ast , fg 和 trb 。
R library (GGally) ggpairs(nba[, c( "ast" , "fg" , "trb" )])
import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(nba[[ "ast" , "fg" , "trb" ]]) plt.show()
我们会得到非常相似的两张图,但是可以看到R的数据科学生态中有许多较小的软件包( GGally 是最常用的R绘图包 ggplot2 的辅助包)和更多的通用可视化软件包。在Python中, matplotlib 是主要的绘图包, seaborn 是一个广泛用于matplotlib上的图层。Python中的可视化通常只有一种蛀牙哦的方法完成某件事,而R中可能有许多包支持不同的方法(例如,至少有半打绘制成对散点图的包)。
对球员聚类
另一个很好探索数据的方式是生成类别图。这将会显示哪些球员更相似。
R library (cluster) set.seed( 1 ) isGoodCol <- function (col){ sum(is.na(col)) == 0 && is.numeric(col) } goodCols <- sapply(nba, isGoodCol) clusters <- kmeans(nba[,goodCols], centers= 5 ) labels <- clusters$cluster
Python from sklearn.cluster import KMeans kmeans_model = KMeans(n_clusters= 5 , random_state= 1 ) good_columns = nba._get_numeric_data().dropna(axis= 1 ) kmeans_model.fit(good_columns) labels = kmeans_model.labels_
为了正确的聚类,我们移除了所有非数值列,以及包含缺失值的列。在R中,我们在每一列上应用一个函数,如果该列包含任何缺失值或不是数值,则删除它。接下来我们使用 cluster 包实施 k-means 聚类,在数据中发现5个簇。通过 set.seed 设置随机种子以使结果可复现。
在Python中,我们使用了主要的Python机器学习包 scikit-learn 拟合k-means模型并得到类别标签。数据准备的过程和R非常类似,但是用到了 get_numeric_data 和 dropna 方法。
绘制类别图
我们现在可以按类别绘制球员分布图以发现模式。首先使用 PCA 将数据降至2维,然后画图,用不同标记或深浅的点标志类别。 nba2d <- prcomp(nba[,goodCols], center= TRUE ) twoColumns <- nba2d$x[, 1 : 2 ] clusplot(twoColumns, labels)
Python from sklearn.decomposition import PCA pca_2 = PCA( 2 ) plot_columns = pca_2.fit_transform(good_columns) plt.scatter(x=plot_columns[:, 0 ], y=plot_columns[:, 1 ], c=labels) plt.show()
在R中,我们通过聚类库中的函数 clusplot 函数绘图,使用内建函数 pccomp 实行PCA。
在Python中,我们使用scikit-learn库中的PCA类,使用matplotlib创建图形。
划分训练集和测试集
如果我们希望进行监督性机器学习,将数据划分为训练集和测试集是一个避免 过拟合 的好办法。
R trainRowCount <- floor( 0.8 * nrow(nba)) set.seed( 1 ) trainIndex <- sample( 1 :nrow(nba), trainRowCount) train <- nba[trainIndex,] test <- nba[-trainIndex,]
Python train = nba.sample(frac= 0.8 , random_state= 1 ) test = nba.loc[~nba.index.isin(train.index)]
你能注意到R有更多的 数据分析 内建函数,例如 floor , sample 和 set.seed ,这些函数在Python中通过第三方库被调用( math.floor , random.sample , random.seed )。在Python中,最新版本的pandas包含一个 sample 方法,返回对原始dataframe确定比例的随机抽样,这使得代码更加简洁。在R中,有很多包可以使抽样更容易,但是没有一个比使用内置 sample 函数更简洁。在两个例子中,我们都设置了随机种子以保证结果的可重复性。
一元线性回归
假设我们希望通过球员的得分预测其助攻次数。
R fit <- lm(ast ~ fg, data=train) predictions <- predict(fit, test)
Python from sklearn.linear_model import LinearRegression lr = LinearRegression() lr.fit(train[[ "fg" ]], train[ "ast" ]) predictions = lr.predict(test[[ "fg" ]])
Scikit-learn包含一个线性回归模型,我们可以通过它拟合并生成预测。R依赖于内建函数 lm 和 predict 。 predict 根据传递给它拟合模型的不同会表现出不同的行为,它可以被用于各种各样的模型。
计算模型统计量
R summary(fit) Call: lm(formula = ast ~ fg, data = train) Residuals: Min 1Q Median 3Q Max -228.26 -35.38 -11.45 11.99 559.61 [output truncated]
Python import statsmodels.formula.api as sm model = sm.ols(formula= 'ast ~ fga' , data=train) fitted = model.fit() print(fitted.summary()) OLS Regression Results ============================ Dep. Variable: ast R-squared: 0.568 Model: OLS Adj. R-squared: 0.567 [output truncated]
如果希望得到类似 R平方值 这样的模型统计量,在Python中需要比R多做一点。在R中,我们可以使用内建 summary 函数得到模型信息。在Python中,我们需要使用 statsmodels 包,这个包包含许多统计模型的Python实现。我们得到类似的结果,总体来说在Python中进行统计分析稍有点困难,一些R中存在的统计方法也没有存在于Python。
拟合一个随机森林模型
一元线性回归表现的不错,但是我们怀疑数据中可能存在 非线性 。因此,我们想要拟合一个 随机森林 模型。
R library (randomForest) predictorColumns <- c( "age" , "mp" , "fg" , "trb" , "stl" , "blk" ) rf <- randomForest(train[predictorColumns], train$ast, ntree= 100 ) predictions <- predict(rf, test[predictorColumns])
Python from sklearn.ensemble import RandomForestRegressor predictor_columns = [ "age" , "mp" , "fg" , "trb" , "stl" , "blk" ] rf = RandomForestRegressor(n_estimators= 100 , min_samples_leaf= 3 ) rf.fit(train[predictor_columns], train[ "ast" ]) predictions = rf.predict(test[predictor_columns])
这里主要的区别是R需要使用randomForest库实现算法,而Python中的scikit-learn直接内建其中。scikit-learn为许多不同的机器学习算法提供了统一的交互接口,在Python中每种算法通常只有一个主要的实现。而R中有许多包含单个算法较小的包,一般访问的方法并不一致。这导致算法更加的多样化(很多算法有多个实现,还有那些新问世的算法),但是只有一小部分是可用的。
计算误差
现在已经拟合了两个模型,下面让我们计算误差,使用 MSE
R mean((test[ "ast" ] - predictions)^ 2 ) 4573.86778567462
Python from sklearn.metrics import mean_squared_error mean_squared_error(test[ "ast" ], predictions) 4166.9202475632374
Python中的scikit-learn库包含我们可以使用的各种误差量度。在R中,可能有一些小的第三方库计算MSE,但是两种语言中手动计算它都很容易。误差的细微差异几乎可以肯定是由于参数调整造成的,并没什么关系。
下载一个网页
现在已经有了2013-2014赛季的NBA球员数据,让我们抓取一些额外数据补充它。为了节省时间,在 这里 看一场NBA总决赛的比分。
R library (RCurl) url <- "http://www.basketball-reference.com/boxscores/201506140GSW.html" page <- getURL(url) tc <- textConnection(page) data <- readLines(tc) close(tc)
Python import requests url = "http://www.basketball-reference.com/boxscores/201506140GSW.html" data = requests.get(url).content
Python中的 requests 包为所有的请求类型使用统一的API接口,下载网页非常容易。在R中, RCurl 提供稍微复杂方法发起请求。两者都把网页下载为字符串类型的数据。注:这在R中的下一步并不是必须,只是为了比较的原因。
抽取球员比分
现在我们已经下载了网页,需要处理它以抽取球员比分。
R library (rvest) page <- read_html(url) table <- html_nodes(page, ".stats_table" )[ 3 ] rows <- html_nodes(table, "tr" ) cells <- html_nodes(rows, "td a" ) teams <- html_text(cells) extractRow <- function (rows, i){ if (i == 1 ){ return } row <- rows[i] tag <- "td" if (i == 2 ){ tag <- "th" } items <- html_nodes(row, tag) html_text(items) } scrapeData <- function (team){ teamData <- html_nodes(page, paste( "#" ,team, "_basic" , sep= "" )) rows <- html_nodes(teamData, "tr" ) lapply(seq_along(rows), extractRow, rows=rows) } data <- lapply(teams, scrapeData)
Python from bs4 import BeautifulSoup import re soup = BeautifulSoup(data, 'html.parser' ) box_scores = [] for tag in soup.find_all(id=re.compile( "[A-Z]{3,}_basic" )): rows = [] for i, row in enumerate(tag.find_all( "tr" )): if i == 0 : continue elif i == 1 : tag = "th" else : tag = "td" row_data = [item.get_text() for item in row.find_all(tag)] rows.append(row_data) box_scores.append(rows)
这将创建一个包含两个列表的列表,第一个是 CLE 的比分,第二个是 GSW 的比分。两个都有标题,以及每个球员和他们的比赛统计。我们现在不会将其转换为更多的训练数据,但是如果需要把它们加入 nba dataframe,转换可以很容易地完成。
R代码比Python更复杂,因为它没有一个方便的方式使用正则表达式选择内容,因此我们不得不做额外的处理以从HTML中得到队伍名称。R也不鼓励使用 for 循环,支持沿向量应用函数。我们使用 lapply 做到这一点,但由于需要处理的每一行都因是否是标题而异,需要传递保留项的索引和整个 rows 列表给函数。
我们使用 rvest ,一个广泛使用的新R网络抓取包实现抽取数据,注意这里可以直接传递url给rvest,因此上一步在R中并不是必须的。
在Python中,我们使用了 BeautifulSoup ,一个最常用的web抓取包。它让我们可以在标签间循环,并以一种直接的方式构建列表的列表。
结论
我们已经看到了如何使用R和Python分析一个数据集。还有很多任务没有深入,例如保存和分享分析结果,测试,确保生产就绪,以及构建更多的可视化。我们会在近期继续探讨这些,从而得到更明确的结论。现在,下面是一些能够得到的:
R更加函数化,Python更面向对象
就像我们在 lm , predict 和其他函数中看到的那样,R用函数完成大部分工作。对比Python中的`LinearRegression类,还有dataframe的sample方法。
R包含更多的数据分析内建功能,Python依赖于第三方软件包。
当我们查看汇总统计量时,在R中可以直接使用 summary 内建函数,但是Python中必须依靠statsmodels包。dataframe是R内置的结构,而在Python中由 pandas 包引入。
Python拥有“主要的”数据分析包,R拥有由较小的包组成的更大的生态系统
在Python中,我们可以使用scikit-learn完成线性回归,随机森林和许多其他任务。它提供了一致的API,并很好的维护。在R中,我们有多种多样的包,但是也更加碎片化和不一致(线性回归是内置的 lm , randomForest 是单独的包,等等)。
总体上R有更多的统计支持
R是作为统计语言被构建的,它也显示了这一点。Python中的 statsmodels 和其他软件包提供了统计方法的大部分实现,但是R的生态系统要大的多。
Python中完成非统计任务通常更加直接
有了类似BeautifulSoup和request这样良好维护的软件包,Python中的网页抓取远易于R。这种说法也适于我们还未关注的其他任务,例如保存数据库,部署web服务器或运行复杂的工作流。
数据分析工作流在两者之间有许多相似之处
R和Python之间有一些互相启发的地方(pandas的Dataframe受到R中dataframe的影响,rvest包来自BeautifulSoup的启发),两者的生态系统都在不断发展壮大,对两种语言中许多共同的任务来说,语法和实现都是非常相似的。
总结
在 Dataquest ,我们首先教授Python,但是最近也加入了R的课程。我们看到这两种语言是互补的,虽然Python在更多领域更强大,但R是一种高效的语言。它可以作为Python在数据探索和统计等领域的补充,或者你惟一的数据分析工具。正如本篇文章中所显示的,两种语言有许多相似的语法和实现方法,你不能在一个或另一个,或者两者中出错。 Vik Paruchuri 原文链接
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-02-28 11:37:00
最近写了不少 PPT ,有点感触,回想自己工作以来,从做取数,做建模,做分析,搞系统,做项目,做管理,PPT写得也很多了。
网上有个词,叫作PPT文化,说写PPT并不好,浪费时间,做了多少无用功,很多人对此深恶痛绝。
团队里新人已经不少了,每每要出日报,周报,甚至要汇报一下,希望其能把问题和事情描述清楚,但总觉得缺点什么。
实际上,PPT对于数据从业者,是有特殊意义的,在大多数企业,数据从业者都需要通过PPT的形式表达自己的 数据分析 成果,或者表达对于某个问题或方案的看法和认识,有些岗位,甚至天生就是以PPT为生的。
今天,就来谈谈关于写PPT的看法,当下PPT高手是如此之多,本人水平有限,算是班门弄斧了。
PPT反映了换位思考的能力。
PPT是一种思想的媒介,它的目的是沟通,因此,落下的每一个文字和图片,首先要让受众看得懂,这是基本原则。同样一件事,写给不同的对象看,千差万别。
很多人,拿着给专业人员的PPT方案稍微改改,就去给领导汇报决策了,这是错位问题,大多时候领导并不关注技术细节,可能只会问你,建议选择哪个方案,好处坏处,要多少钱。
PPT的表达要遵循“对人说人话 对鬼说鬼话”,分清楚对象和场合,采用不同的表达方式,始终要明白,你与其他的人背景不同,认知不同,高度不同,因此,不要想到什么就表达什么,这类PPT往往变成是给你自己看的,而不是给他人看得。
一个PPT,让受众看不懂,是写PPT的人最大的罪过,是对看PPT人的最大不尊重。很多时候,PPT也是对于情商的挑战,一个公司写PPT最牛逼的,可能是秘书或综合办的人吧,这是有道理的。
很多技术公司的售前或售后都擅长PPT,显然是岗位的刚性需求,很多企业,首先最需要的是能跟客户沟通的人。
换位思考无关专业水平,技术能力再差,能力再有限,如果是个有心人,照样能写出令人看得懂的东西,这要好过曲高和寡。
因为PPT首先比拼的是沟通能力,专业能力则是第二层次要解决的问题。
专业知识是PPT的血肉。
任何一个专业领域,你的专业水平,决定了PPT能写出的最高水平,不要相信空手套白狼的事,只有最懂这个领域的人,才能写出这个领域最牛皮的PPT。
因此,掌握专业技能,不断提升自己的专业视野,始终是每个数据从业者的最大追求。
可以看到咨询公司人员的工作方式,总是千方百计的跟客户沟通,拿到尽量多的资料来理解你的行业知识,因为大家都知道,再多的PPT技巧,再好的方法论,没有专业知识,也是巧妇难为无米之炊。
也可以看到,很多咨询公司的工作是失败的,是无法落地的,并不是他们不努力,而是专业要求有时太高了,项目化的工作方式,使得他们只能用方法论的优势来弥补专业知识的缺乏,最终,PPT仍然是非常苍白的。
笔者接触过大量合作伙伴的数据领域的售前,售后亦或专业技术人员,很多时候,他们给出的PPT方案是差强人意的,不能说不努力,实在是技术或业务视野上有差距。
务实的人,到头来,只会关注专业内容。
深度思考是PPT进步的阶梯。
做技术或业务,特别是做数据的,很多时候,需要通过PPT表达你对于未来的看法,指出前进的方向。
有很多的专家,虽然技术能力很强,工程实践强,经验也丰富,但其也不一定能写出牛皮的PPT,因为虽然其“术”的练习很多,但“道”太少了,一定程度讲,是深度思考少了。
会有很多的场景,比如你问某专家,这个东西能否来龙去脉的讲清楚,可能专家真得解释不了,但他就是能解决很多实际的问题,这类专家更多是工匠型,对于每个企业很重要,但也许只能算是个将才。
讲不出来,有时反映的是,知识并没有融会贯通,或者视野太小了,没有打造出属于自己的知识体系,更多的在COPY。
深度思考的本质,在于通过COPY及日常的实践,通过连续的思考,总结出属于自己的一套独有方法论,构筑出自己的知识体系,形成对于这个世界自己的看法,而不是人云亦云,只有这样,才能做出更多的创新和突破。
牛逼的PPT与普通PPT的差距,往往就在于思想认识上的差距,好的PPT不仅是描述事实,而且应该能够给予人启示的,赋予听者新的知识。
这个 大数据 时代,这个不确定的时代,更需要深度思考大师。
PPT的表达讲究结构化。
再回到沟通的技巧,领导讲话,经常这样表述,我给三个建议,第一是,第二是,第三是…,这是种结构化思维方式,它不仅让讲话者逻辑清楚,也让听者能抓住重点。
人类所以比较容易理解这种表达方式,是有深层次原因的,大家注意这个原则就是了,比如你要面试,有时会很紧张,记住1,2,3…就行了。
PPT也一样,任何时候,都记得结构化的去表达事情,始终坚持这么练习,会让你表达更加严谨。
写PPT多了,很多时候甚至会有强迫症,比如不仅希望逻辑表达是结构化的,而且结构化的语言描述都要对仗,比如标题都是4个字,就好比古时候的对联一样。不要取笑它,这是结构化思维的体现。
我给2张PPT,一张 数据分析 的图,一张大数据思路的图,这种表达方式,脉络清晰,起承转合会很容易,PPT变得有骨架。

虽然八股,但值得拥有,任何人起步的时候,首先要学会这个套路,PPT的放浪形骸,那是大师做的事情。
PPT的表述依赖训练。
每个企业情况不同,专业也不同,听者的习惯也不同,因此,写PPT没有统一的表述方式,但有一点是肯定的,每页都要突出重点,就是要有文眼。每页努力只表达一个观点,所有的内容都是为了证明这个观点。
一种学习方法是拿到自己组织里的最有代表性的PPT去学习如何表达,比如如果你是写分析报告的,那就去拿到企业的市场经营报告,这代表了经营分析的最高水平,又比如你要写技术方案,可以从以前大的项目的汇报PPT中获取灵感。
这是个分享的时代,要善于站在巨人的肩膀上去学习,企业也应尽量透明化,老大的报告多发发,对于每个员工,都是锻炼学习的机会。
当然,除了突出重点,不同类型的PPT,论证的方式肯定是有区别的,经营分析报告显然要数据说话,技术方案则要讲清楚架构、设计和流程等等。
但无论是结构化的思维表达方式,或是内容组织方式,都可以通过大量训练学习获得,有心人,没有理由做不好。
语文不好是借口,又不是写散文。
PPT有一定审美要求。
PPT长得是否好看,跟你的审美有关系,大多的人,不需要特意去学习,COPY别人的吧,存储一堆模板,买也能买到,写写练练就有感觉了。
特别是如果你学会了换位思考,自然会让PPT的形式尽量让人看起来舒服,这是相辅相成的。
以下是我2005年写的一个封面,斗转星移,现在估计是不能容忍了,但如果没有多年的训练,也许,只能停留在这个层次了。
但始终记得,换位思考、专业知识、思想训练,重点表达,远比漂亮重要的多。
为他人写的PPT。
如果是给领导写PPT,面对面的沟通就更重要了, PPT往往能反映领导的最深层次思考,他的学识和视野,是一般的人无法达到的,应以谦卑的心态去充分理解领导的意图,有机会就去多骚扰下吧,你能争取多少领导的时间,决定了能降低自己多少无谓的消耗。
当然,如果你能给出一些建议,那就再好不过了,自己伺机而动吧。
PPT的演讲技巧。
对于PPT的内容理解的多少,决定了可能演讲的深度,但要演讲的精彩,一定程度是有赖于你的口才的,很多评奖评比啥的,或者如产品发布会,都是宣传目的,夸大也正常,记得会讲故事就行了。
大多数工作岗位,大多数时候,我们需要务实的通过PPT这种沟通手段来表达问题及解决问题,没必要追求成为一个演讲大师,平铺直叙就够了。
最糟的情况。
其实很多时候,我们恨PPT,是因为习惯做事务性工作,平时缺乏思考的沉淀,一旦要开个会,总结一下,就感觉很没底,要熬夜写东西,有时熬夜也不可得,罪过倒真不在PPT,而在于自己了。
当然,突发性的事情也不少,有时的确很被动,有时需要到处沟通协调,有时甚至要东拼西凑,压力很大,但职场毕竟也是个江湖,身不由己啊。
但是,好的PPT能量是巨大的,的确没有比这种更好的上下沟通的形式了,就跟高考一样,既然很多听者乐意接受这种形式,就努力适应它吧。
本文为专栏文章,来自:傅一平,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/39889.html 。
数据分析
2016-12-26 13:29:00
昨天上午,在世界互联网大会“互联网创新与可持续发展”论坛上, 百度 公司创始人、董事长兼CEO李彦宏发表主旨演讲,分享了他对 大数据 、 人工智能 等前沿技术话题的洞察。
尝试证实或证伪中医理论
在演讲中,李彦宏谈到了 大数据 给医疗带来的机会,他提出,其实可以用大数据的方法进行证实或者证伪中医相关理论。李彦宏谈到,由于过去十几年的积累,人们已经可以看到在大数据、人工智能方面有很多新的机会出现。这些机会有些可能在一般人的心目当中和互联网没有太大的关系,但是在他看来,诸如大数据和医疗健康就有很多方面可以结合。
在李彦宏看来,中医理论其实是在讲养生的方法,比如著名的《黄帝内经》,但《黄帝内经》已有两千多年历史,其中哪些理论是对的,哪些是错的,都可以通过技术手段来证实或证伪。在演讲中,李彦宏提到,安徽有一位老人每日在家按摩两小时进行养生保健,颇为长寿。他认为,类似这种零星的个体经验并不能够认定为规律,但如果在全国找到几千个、几万个同样的案例,用大数据的方式进行归类分析,就能够判断个体的经验是否构成规律。
关注癌症治疗及基因测序
对于互联网与医疗的结合,李彦宏也提到了除中医外的其他机会,比如基因测序。“大多数的疾病都是因为基因和后天环境导致的,那么什么样的基因导致什么样的疾病?大数据也可以帮忙。”李彦宏在演讲中指出。
今年以来,李彦宏已经不止一次在公开场合表达自己对于生命科学、癌症治疗以及基因测序的高度关注,并多次表达互联网+以及人工智能和大数据等技术对于“治未病”、证实证伪医学理论的畅想。在今年与复旦大学师生的对话中,李彦宏说:“绝大多数病跟遗传有关系,但我们不知道是什么基因导致了这个病,可能是很多基因的一个Combination,导致了这个病。26000个基因、各种各样的组合就需要我们的大数据,需要我们的人工智能来计算。”
呼吁企业家思考自己使命
据悉,李彦宏前不久还个人捐资3000万元,支持中国的食管癌研究。他说,长期以来,中国食管癌发病率高居世界首位,而且中国的食管癌都是所谓的食管鳞癌,与美国的食管腺癌不同,没法借鉴其他国家的研究成果,李彦宏认为,“这是我们中国人的职责”。食管癌研究项目利用大数据和人工智能技术相结合,对大量食管鳞癌患者的信息加以分析进行基因测定,更有针对性地进行药物研究,推进癌症预防与治疗的进一步发展。
“这不是公司的业务,是中国人的职责。”李彦宏说,“这个项目短期内不会有任何商业回报,所以需要用企业家个人的资金去进行研究、进行突破、进行创新。”为此,他还呼吁企业家们能够利用自己积累的资金去做一些有意思的、创新的事情,“期望我们每一个企业家都能站在时代的路口上,认真思考自己所肩负的使命,为自己的企业也为自己的人生做出更精彩的业绩”。
人工智能将深刻改变人类
而就在大会开幕当天,李彦宏还向国家领导人现场讲解了百度无人驾驶车的技术储备、路测实况、行业突破等内容。昨天的主旨演讲,李彦宏也以无人车为例,阐述了人工智能技术改变人们生活的巨大空间,他说,随着计算机计算能力、成本的下降,人工智能迎来了新机遇。李彦宏认为,
人工智能有很多创新空间,不仅是无人驾驶汽车,人工智能未来对整个社会各方面都影响深远。“如果说过去的几百年工业化改变了人类,那么它主要的改变是代替了绝大多数的体力劳动;未来人工智能将会更加深刻地改变人类,它会代替绝大多数的简单、重复性的脑力劳动。”
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-12-18 03:38:00
摘要:今天,我们将介绍一些非常狂拽酷炫叼炸天的在线资源和工具,教你如何实现 数据可视化 。你可以看到各种题材,像人口、世界状况,甚至人类的情感,都可以将进行可视化,虽然一些可视化可能是实验性的,但他们的共同之处就是:帮助你更好地理解数据,而这正是可视化的要义。
Better World Flux
http://www.betterworldflux.com/
这是一款漂亮的可视化工具!Better World Flux 是一个可以互动信息、图形的网站。选择一个国家,根据指示操作,比如可以选择预期寿命或饮水作为指标。有一个小的视频演示如何操作,你可以在YouTube上观看( http://www.youtube.com/watchv=xck1Alcyh2A )。
现有数据量其实非常原始,但你仍然可以很容易地跟踪过去50年中全球的社会化改善。虽然我承认,数据图原本是很难理解的,但在这里,一切清晰可见。
Visual.ly
http://visual.ly/
这也许是我最喜欢的在线工具之一。 Visual.ly 用社交网络功能来连接在世界各地的所有成员。设计师们通过提交自己的项目进入他们的网站画廊,从而能够对数据实现可视化。
它理想的目标是提供一个接口,用于直接在浏览器中创建动态的信息图表。该工具目前未发布,虽然我听说过一些私人beta测试。你可以注册您的电子邮件地址以接收更新消息,并可能邀请测试。
至于他们的网络功能,Visual.ly 提供了极少数的合作伙伴页面。这些类似于个人资料页面,您可以查看评论,喜欢,意见和信息图表意见,但这些都是有针对性的对大品牌 – 国家地理、易趣、Skype、CNN 等。
We Feel Fine
http://www.wefeelfine.org/
We Feel Fine 标榜为人类情感而探索,这是我见过最独特的可视化引擎之一。开始前要点击其主页上的大按钮,该应用程序将据此加载操作系统。
沿上面一行,你会发现飞出选项对数据进行排序。其标准包括年龄,性别,气候位置,甚至日期。该项目提供了整个世界的喜怒哀乐情绪,在任何给定的点,数据超级详细!这是对人类来说,真正令人震惊的实验。
当你点击画布的任何地方,飞球会分散。如果您将鼠标放在他们中的一个,它会提供更多的细节,点击打开,顶部有一个全新的选项。许多结果都来自Twitter。情绪和情感的数据数量级是令人难以置信。
Rss Voyage
http://rssvoyage.com/
另一个我个人最喜欢,且确实有助于形象化各地数据的网络数据的网站。如果您登录到Rss Voyage,你可以导入自定义RSS供稿到您的帐户一整个数据图。在他们的网页,你可以点击“开始”与默认提供的应用程序。在这种情况下Rss Voyage将拉动几个流行的博客,如纽约时报,瘾科技,卫报,等等。
如果您通过移动图形,点击一个特定的文章的观点时,他将固定在屏幕上。这包括标题,简短描述,元数据连同它的URL出版日期。如果在任何时候你想开始创建自己的RSS可视化,所有你需要做的就是创建一个帐户!
注册是完全免费的,你可以在页面的底部创建通过注册表格您的帐户。作为另一奖励功能
Rss Voyage可以让你轻松设置全屏模式浏览风格的RSS源。
Revisit
http://moritz.stefaner.eu/projects/revisit/
客观来讲,Revisit是一种重新定义我们如何看待微博的工具。有了这个工具,你可以与一个或多个关键字的数据创建连接。您可以将额外的标题添加到您的图形和分享的链接(甚至到微博) 。
点击一个单独的分离线,关闭图形将显示更多细节。通常包括元数据,如时间发布和相关的关键字。搜索条件仅限于标准的Twitter符号,使用逗号分隔的关键字列表。
如果有兴趣,我建议查看位于同一网站的创作 数据可视化 等项目。 http://moritz.stefaner.eu/projects/
Tag Galaxy
http://www.taggalaxy.de/
Tag Galaxy是一个非常独特的可视化工具。他们的主页干净且易于理解,因为标签Flickr上有单独的一个搜索表单。此外左下角设有为新用户一些流行的建议。只需输入一个词,然后按Enter,通过Flickr的照片就可在Tag Galaxy查询。
他们的渲染引擎复制我们的太阳系的中心,太阳代表主要搜索项的外观,外部行星的轨道代表类似的标签。这是我见过的最酷的可视化演示渲染和Flash之一。
注意,当您在每个星球上悬停它会为你提供一个小的预览数。这是发现在Flickr的该标签的询问的照片总数。点击太阳将打开相关照片缩略图的球体,而旋转的行星会增加他们的搜索字词的查询。当然,你可以找到更多有关照片通过点击弹出完整视图。
Google Fusion Tables
http://www.google.com/fusiontables/
我们都知道的龙头企业是谷歌。他们的实验室的后面几年已经运行了一些很有趣的实验,Google Fusion Tables就是其中之一。你需要的是一个谷歌账户。此工具可以公开在网上共享数据,并建立自定义的可视化图形。
这些可以从csv或Excel电子表格导入。尽管目前并不支持。登录后,会发现公共数据列表的表格与演示。这些都在不断更新,新的用户提交 ,打开文档后,顶部的工具栏会有其他菜单可视化链接,自定义图形。
Dipity
http://www.dipity.com/
没有什么比我们在地球上的历史更有趣。已经有很多的事件在过去10年到20年,更不用说十年到百年! Dipity 是一个奇妙的工具,他用来创建和嵌入自定义的互动时间表。用户可以在重要日期进行标记,包括照片,链接,音频,视频和其他形式的媒体。
该服务需要您在创建时间表前注册一个帐号。选择一个免费的计划,在日后他们提供升级到保费计划 http://www.dipity.com/premium/plans 。幸运的是,该网站会提供公共的最流行的时间表成员,所以你可以很容易地通过排序动态时间表去发现一个令人兴奋的细目清单。我个人最喜欢的是史蒂夫工作的生活和事业照片甚至直到2011完全格式化。 http://www.dipity.com/StevePro/Steve-Jobs-Life-and-Career/
WIkiMindMap
http://www.wikimindmap.org/
说到独特的展示台,维基百科也是一个网络,虽然你没有看到尽可能多的开发商,但是Wiki包含一个大的离谱的数据量! WikiMindMap可以让你选择一个区域,然后输入网址的页面。
如果您的关键字不完全匹配了一个页面,应用程序将提供给您最亲近的建议。圆圈内产生的链接将引出到主Wiki页面,而刷新链接打开的选项的树。这些都是相关的链接拉断主维基页面协调您的关键字。它也很容易通过点击链接刷新图标切换到一个新的根节点。
Axiis- Browser Market Share
http://www.axiis.org/examples/BrowserMarketShare.html
Axiis 是用于数据可视化软件的最流行的网站之一。在他们的网页,你可以把酷炫的程序下载到您的PC或Mac电脑上运行。
W3Schools已经记录用户和跟踪浏览器几年了。 Axiis编制从2002到2009与最流行的Web浏览器形成一个美丽的可视化图形。和众多上市的包括Safari浏览器,网景,IE浏览器和谷歌Chrome浏览器合作。名单尚未更新为2010/2011 ,但我们可能会看到公布在未来数月更新的信息图表。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-03-21 21:54:00
摘要:芮勇认为实现真正的 人工智能 大约要500年,“你要让我在后面再加个0我也不反对”。
微软亚洲研究院常务副院长芮勇认为外界对 人工智能 的看待并不理性,甚至被夸大地解读成“战胜人类”,在他看来,缺乏常识、没有概念这些都是人工智能的硬伤,或许在计算、记忆领域,人工智能将超过人类的表现,但是在人类擅长的想象力、创造力领域,人工智能还没有找到打开大门的钥匙。
人工智能也分强人工智能和弱人工智能。从弱人工智能到强人工智能还有很长的距离。今天所有的人工智能几乎都是来自于人类过去的 大数据 ,没有任何一个领域的能力源自自我意识,不管是象棋还是围棋,计算机都是从人类过去的棋谱中学习。其他领域也是类似,计算机在做图像识别的时候,也是从人类已有的 大数据 中学习了大量的图片。
在面对人类从来没有教过的问题时,计算机就会一窍不通。假如让 AlphaGo 去下跳棋,它就会完全傻掉。甚至说把围棋的棋盘稍作修改,从19×19的格子变成21×21的格子,AlphaGo都招架不住,但是人类就没有问题。
我们今天看到的绝大多数的人工智能是弱人工智能,这是说它只能做一件事情,做到比较好。会下围棋的只会下围棋,不会下跳棋,这是很单一的弱人工智能,强人工智能则会全面达到人类的水平。AlphaGo可以打败三十多岁的李世石,但它的学习能力不及一个5岁的小孩,这二者是有很大区别的,也是弱人工智能和强人工智能的区别。
人类的学习不完全是通过样本获取的。比如说目前计算机在人脸识别领域做得还不错,可以达到90%以上的准确率,但它是通过看上百万幅图片做到的,人类不是这样,小孩生下来以后一段时间就能认识妈妈。
我更想表述的观点是,人类和人工智能是各有所长的。人类的大脑分左脑和右脑,左脑控制语言、逻辑思维和理性,右脑则掌管着创造性和直觉。
其实今天的人工智能,它很强的一点是记忆能力和计算能力太强大了。它不如人类的是创造力、想象力。把计算机放在苹果树下,一个苹果砸到上面,它不会联想到这个跟万有引力有什么关系,它没有这种概念。但是牛顿被苹果砸了之后,就会思考和想象,这是今天计算机和人工智能远远做不到的。
所以关于人类和人工智能的关系并不是去PK,而是说人类加上人工智能,或者加上计算机,使得人类更强大,增强智能。
具体来说人工智能的缺陷会有哪些体现呢?比如说语音识别领域,在很安静的环境下,人工智能几乎跟人类的语音识别水平差不多,但很多情况下环境不一定是安静的,如果在一个嘈杂的环境下,几个人同时说话,人是有能力选择性听某一个人的声音,但是人工智能做不到。
即便是这个问题解决了,可以在能力上突破这个难关,人工智能还是无法像人类一样,这是因为人工智能缺乏常识,今天的机器是没有常识的。
没有常识的机器没有办法像人类一样,小学生都做过一个题目叫鸡兔同笼,一共有多少个头、多少只脚,算一下有多少只鸡和多少只兔。这个题目的前提是小学生是知道鸡有一个头两只脚,兔子有一个头四只脚,但计算机是不知道的,这个题目就会把它难住。
但告诉计算机这个前提之后,把题目换成鸭狗同笼,计算机还是不会做,因为新的常识它也没有。所以在没有常识之前,计算机没办法达到人类的各种智能,并且这是一个必要不充分条件,即使有一天它知道了所有的常识,计算机也缺乏形象思维和创造能力。人类很多问题都不知道大脑为什么会那样想,计算机的逻辑是一步一步,“突发奇想”这种事情只存在人类中,而不可能发生在现阶段的人工智能领域。
在上世纪60年代,一位人工智能的科学家曾经说要实现真正的人工智能可能需要5到500年的时间,我是完全站在500年那边的,你要让我在后面再加个0我也不反对。
总结来看,基本上是在任何有规则的,并且规则非常明确的情况下,不管是下围棋、跳棋、象棋、五子棋,只要是有规则的,计算机未来都会超越人类,不超越人类是不对的。
除了有明确规则之外的领域,计算机和人工智能还有很长的路要走,因为人类强的地方,就是在很多信息不全的情况下,人类可以自动补全。人类其实是可以在这种情况下做出判断,在这种情况下,人类的力量远远大于机器的力量。
目前来看,关于人工智能的研究,除了计算机科学这个学派以外,仿生学也是重要的学派,仿生学就要研究人类机体的结构、功能和工作原理,寄希望通过模拟的方式运用到人工智能领域,换句话说,就是研究人类大脑是怎么思索这件事情。
在弱人工智能上,计算机科学这一派还是挺成功的,但是强人工智能有可能需要结合仿生学这一派,因为强人工智能是远远超越了有规则的东西,但这些没有规则的领域如何突破,可能需要对自身有更多的了解,如果能把计算机科学和仿生学相结合的话,人工智能的突破或许能更快。
人工智能这个行业还需要理性的看待,这半年人工智能很热,好处是全社会、全民包括政府都在关注,对产业和学术界的发展有好处,但这个泡沫千万不要吹大,吹大了以后大家会失望的,一旦失望对这个产业的打击是巨大的。
现在包括微软在内的很多公司和科学家都在解决人工智能缺乏常识这个难题,它有几个途径,第一个是纯人工做,向计算机普及人类所有的常识,但是这个工作量是巨大的,不可能完成的。
第二个途径是全自动,从一些结构化的数据库里抓取。比如美国有50个州,每一个州的名字是什么?首府在哪里?人口有多少?用机器学习的方法把它抓取出来,放在计算机的知识图谱里。
第三种途径是一个半自动的方法,可能对于大量的常识不会有非常标准的数据表,它是以非结构化文字的形式呈现,计算机要做的是能够从里面以“统计滚雪球的方法Statistical snow ball”抓取出知识。
事实上,强人工智能500年之后能不能做到我都不能确定,但没有关系,人类的伟大之处正在于此,不是说因为这件事情很难就不做了,正是因为它很难,所以才需要一步一步扎实地往前走。我希望各界同仁们不要把人工智能捧成夏天,然后再跌入冬天,而是要理性看待。 作者:李亚婷 liyating@iceo.com.cn
来源:微信公众号【中国企业家杂志】
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-06-14 00:28:00
概述
在真实的数据科学世界里,我们会有两个极端,一个是业务,一个是工程。偏向业务的数据科学被称为 数据分析 (Data Analysis),也就是A型数据科学。偏向工程的数据科学被称为数据构建(Data Building),也就是B型数据科学。
从工具上来看,按由业务到工程的顺序,这个两条是:EXCEL >> R >> Python >> Scala
在实际工作中,对于小数据集的简单分析来说,使用EXCEL绝对是最佳选择。当我们需要更多复杂的统计分析和数据处理时,我们就需要转移到 Python 和 R 上。在确定工程实施和 大数据 集操作时,我们就需要依赖 Scala 的静态类型等工程方法构建完整的数据分析系统。
Scala 和 Excel 是两个极端,对于大多数创业公司而言,我们没有足够多的人手来实现专业化的分工,更多情况下,我们会在 Python 和 R 上花费更多的时间同时完成数据分析(A型)和数据构建(B型)的工作。而许多人也对 Python 和 R 的交叉使用存在疑惑,所以本文将从实践角度对 Python 和 R 中做了一个详细的比较。
应用场景对比
应用Python的场景 网络爬虫/抓取:尽管 rvest 已经让 R 的网络爬虫/抓取变得容易,但 Python 的 beautifulsoup 和 Scrapy 更加成熟、功能更强大,结合django-scrapy我们可以很快的构建一个定制化的爬虫管理系统。 连接数据库: R 提供了许多连接数据库的选择,但 Python 只用 sqlachemy 通过ORM的方式,一个包就解决了多种数据库连接的问题,且在生产环境中广泛使用。Python由于支持占位符操作,在拼接SQL语句时也更加方便。 内容管理系统:基于Django,Python可以快速通过ORM建立数据库、后台管理系统,而R中的 Shiny 的鉴权功能暂时还需要付费使用。 API构建:通过Tornado这个标准的网络处理库,Python也可以快速实现轻量级的API,而R则较为复杂。
应用R的场景 统计分析: 尽管 Python 里 Scipy、Pandas、statsmodels 提供了一系列统计工具 ,R 本身是专门为统计分析应用建立的,所以拥有更多此类工具。 互动式图表/面板: 近来 bokeh、plotly、 intuitics 将 Python 的图形功能扩展到了网页浏览器,甚至我们可以用tornado+d3来进一步定制可视化页面,但 R 的 shiny 和 shiny dashboard 速度更快,所需代码更少。
此外,当今数据分析团队拥有许多技能,选择哪种语言实际上基于背景知识和经验。对于一些应用,尤其是原型设计和开发类,工作人员使用已经熟悉的工具会比较快速。
数据流编程对比
接着,我们将通过下面几个方面,对Python 和 R 的数据流编程做出一个详细的对比。 参数传递 数据读取 基本数据结构对照 矩阵转化 矩阵计算 数据操作
参数传递
Python/R 都可以通过命令行的方式和其他语言做交互,通过命令行而不是直接调用某个类或方法可以更好地降低耦合性,在提高团队协作的效率。
参数传递 Python R
命令行输入 脚本识别
Python path/to/myscript.py arg1 arg2 arg3 import sys my_args = sys.argv
Rscript path/to/myscript.R arg1 arg2 arg3 myArgs <- commandArgs(trailingOnly = TRUE)
数据传输与解析
对于数据传输与解析,我们首推的格式是csv,因为一方面,csv格式的读写解析都可以通过 Python 和 R 的原生函数完成,不需要再安装其他包。另一方面,csv格式可以很快的转化为 data frame 格式,而data frame 格式是数据流分析的核心。
不过,实际情况中,我们需要传输一些非结构化的数据,这时候就必须用到 JSNO 或者 YAML。
数据传输与解析 Python R CSV(原生) csv read.csv
CSV(优化) pandas.read_csv(“nba_2013.csv”) data.table::fread(“nba_2013.csv”)
JSON
YAML
json(原生)
PyYAML
jsonlite
yaml
基本数据结构
由于是从科学计算的角度出发,R 中的数据结构非常的简单,主要包括 向量(一维)、多维数组(二维时为矩阵)、列表(非结构化数据)、数据框(结构化数据)。而 Python 则包含更丰富的数据结构来实现数据更精准的访问和内存控制,多维数组(可读写、有序)、元组(只读、有序)、集合(唯一、无序)、字典(Key-Value)等等。
基本数据结构 Python R 数组 list:[1,’a’] :array:array(c(1,”a”),2)
Key-Value(非结构化数据) 数据框(结构化数据)
字典:[“a”:1] dataframe
lists data.frame
矩阵操作
实际上,Python(numpy) 和 R中的矩阵都是通过一个多维数组(ndarray)实现的。
矩阵转化 Pyhton R 维度 data.shape dim(data)
转为向量 data.flatten(1) as.vector(data)
转为矩阵 np.array([[1,2,3],[3,2,1]]) matrix(c(1,2,3,3,2,1),nrow=2,byrow=T)
转置 data.T t(data)
矩阵变形 data.reshape(1,np.prod(data.shape)) matrix(data,ncol=nrow(data)*ncol(data))
矩阵按行拼接
矩阵按列拼接
np.r_[A,B]
np.c_[A,B]
rbind(A,B)
cbind(A,B)
矩阵计算 Pyhton R 矩阵乘法 np.dot(A,B) A %*% B
矩阵幂指 np.power(A,3) A^3
全零矩阵 np.zeros((3,3)) matrix(0,nrow=3,ncol=3)
矩阵求逆 np.linalg.inv(A) solve(A)
协方差 np.cov(A,B) cov(A,B)
特征值
特征向量
np.linalg.eig(A)[0]
np.linalg.eig(A)[1]
eigen(A)$values
eigen(A)$vectors
数据框操作
参考 R 中的 data frame 结构,Python 的 Pandas包也实现了类似的 data frame 数据结构。现在,为了加强数据框的操作,R 中更是演进出了 data table 格式(简称dt),这种格式以 dt[where,select,group by] 的形式支持类似SQL的语法。
数据框操作 Python R 按Factor的Select操作 df[[‘a’, ‘c’]] dt[,.(a,c),]
按Index的Select操作 df.iloc[:,1:2] dt[,1:2,with=FALSE]
按Index的Filter操作 df[1:2] dt[1:2]
groupby分组操作 df.groupby([‘a’,’b’])[[‘c’,’d’]].mean() aggregate(x=dt[, c(“v1”, “v2”)], by=list(mydt2$by1, mydt2$by2), FUN = mean)
%in% 匹配操作 返回T/F pd.Series(np.arange(5),dtype=np.float32).isin([2, 4]) 0:4 %in% c(2,4)
match 匹配操作 返回Index pd.Series(pd.match(pd.Series(np.arange(5),dtype=np.float32),[2,4],np.nan)) match(0:4, c(2,4))
tapply df.pivot_table(values=’a’, columns=’c’, aggfunc=np.max) tapply(dt$a,dt$c,max)#其中dt$a是numeric,dt$c是nominal
查询操作 df[df.a <= df.b] dt[ a<=b ]
with操作 pd.DataFrame({‘a’: np.random.randn(10), ‘b’: np.random.randn(10)}).eval(‘a + b’) with(dt,a + b)
plyr操作 df.groupby([‘month’,’week’]).agg([np.mean, np.std]) ddply(dt, .(month, week), summarize,mean = round(mean(x), 2),sd = round(sd(x), 2))
多维数组融合 pd.DataFrame([tuple(list(x)+[val]) for x, val in np.ndenumerate(np.array(list(range(1,24))+[np.NAN]).reshape(2,3,4))]) data.frame(melt(array(c(1:23, NA), c(2,3,4))))
多维列表融合 pd.DataFrame(list(enumerate(list(range(1,5))+[np.NAN]))) data.frame(melt(as.list(c(1:4, NA))))
数据框融合 pd.melt(pd.DataFrame({‘first’ : [‘John’, ‘Mary’],’last’ : [‘Doe’, ‘Bo’],’height’ : [5.5, 6.0],’weight’ : [130, 150]}), id_vars=[‘first’, ‘last’]) melt(data.frame(first = c(‘John’, ‘Mary’),last = c(‘Doe’, ‘Bo’),height = c(5.5, 6.0),weight = c(130, 150), id=c(“first”, “last”))
数据透视表 pivot table pd.pivot_table(pd.melt(pd.DataFrame({ ‘x’: np.random.uniform(1., 168., 12), ‘y’: np.random.uniform(7., 334., 12), ‘z’: np.random.uniform(1.7, 20.7, 12), ‘month’: [5,6,7] 4, ‘week’: [1,2] 6}), id_vars=[‘month’, ‘week’]), values=’value’, index=[‘variable’,’week’],columns=[‘month’], aggfunc=np.mean) acast(melt(data.frame(x = runif(12, 1, 168),y = runif(12, 7, 334),z = runif(12, 1.7, 20.7),month = rep(c(5,6,7),4),week = rep(c(1,2), 6)), id=c(“month”, “week”)), week ~ month ~ variable, mean)
连续型数值因子分类
名义型因子分类
pd.cut(pd.Series([1,2,3,4,5,6]), 3)
pd.Series([1,2,3,2,2,3]).astype(“category”)
cut(c(1,2,3,4,5,6), 3)
factor(c(1,2,3,2,2,3))
数据流编程对比的示例
Python 的 Pandas 中的管道操作 (df .groupby(['a', 'b', 'c'], as_index=False) .agg({'d': sum, 'e': mean, 'f', np.std}) .assign(g=lambda x: x.a / x.c) .query("g > 0.05") .merge(df2, on='a'))
R 的 dplyr 中的管道操作 flights %>% group_by(year, month, day) %>% select(arr_delay, dep_delay) summarise( arr = mean(arr_delay, na.rm = TRUE), dep = mean(dep_delay, na.rm = TRUE)) %>% filter(arr > 30 | dep > 30)
数据可视化 对比
绘制相关性散点图
对比数据相关性是数据探索常用的一种方法,下面是Python和R的对比。
Python import seaborn as sns import matplotlib.pyplot as plt sns.pairplot(nba[["ast", "fg", "trb"]]) plt.show()
R library(GGally) ggpairs(nba[,c("ast", "fg", "trb")])
虽然我们最终得到了类似的图形,这里R中GGally是依赖于ggplot2,而Python则是在matplotlib的基础上结合Seaborn,除了GGally在R中我们还有很多其他的类似方法来实现对比制图,显然R中的绘图有更完善的生态系统。
绘制聚类效果图
这里以K-means为例,为了方便聚类,我们将非数值型或者有确实数据的列排除在外。
Python from sklearn.cluster import KMeans kmeans_model = KMeans(n_clusters=5, random_state=1) good_columns = nba._get_numeric_data().dropna(axis=1) kmeans_model.fit(good_columns) labels = kmeans_model.labels_ from sklearn.decomposition import PCA pca_2 = PCA(2) plot_columns = pca_2.fit_transform(good_columns) plt.scatter(x=plot_columns[:,0], y=plot_columns[:,1], c=labels) plt.show()
R library(cluster) set.seed(1) isGoodCol <- function(col){ sum(is.na(col)) == 0 && is.numeric(col) } goodCols <- sapply(nba, isGoodCol) clusters <- kmeans(nba[,goodCols], centers=5) labels <- clusters$cluster nba2d <- prcomp(nba[,goodCols], center=TRUE) twoColumns <- nba2d$x[,1:2] clusplot(twoColumns, labels)
速度对比
Python import numpy as np xx = np.zeros(100000000) %timeit xx[:] = 1 The slowest run took 9.29 times longer than the fastest. This could mean that an intermediate result is being cached 1 loops, best of 3: 111 ms per loop
R xx <- rep(0, 100000000) system.time(xx[] <- 1) user system elapsed 1.326 0.103 1.433
显然这里 R 1.326的成绩 比 Python 的 Numpy 3:111 的速度快了不少。
事实上,现在 R 和 Python 的数据操作的速度已经被优化得旗鼓相当了。下面是R中的 data.table、dplyr 与 Python 中的 pandas 的数据操作性能对比:
结论
Python 的 pandas 从 R 中偷师 dataframes,R 中的 rvest 则借鉴了 Python 的 BeautifulSoup,我们可以看出两种语言在一定程度上存在的互补性,通常,我们认为 Python 比 R 在泛型编程上更有优势,而 R 在数据探索、统计分析是一种更高效的独立 数据分析工具 。所以说,同时学会Python和R这两把刷子才是数据科学的王道。
参考资料 pandas doucumentation: Comparison with R / R libraries Comparison – R vs. Python: head to head data analysis Hacker News: Comparison – R vs. Python Quora: How does R compare with pandas yhat: R and pandas and what I’ve learned about each Why are pandas merges in python faster than data.table merges in R Python和R科学计算操作速查表 知乎:R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好? Choosing R or Python for data analysis An infographic 作为分享主义者(sharism),本人所有互联网发布的图文均遵从CC版权,转载请保留作者信息并注明作者 Harry Zhu 的 FinanceR专栏: https://segmentfault.com/blog/harryprinc ,如果涉及源代码请注明GitHub地址: https://github.com/harryprince 。微信号: harryzhustudio
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-10 15:40:00