发博文
博文
置顶: (2012-01-29 09:41)


[注: 置顶宣言,阐明我对计算传播学的理解,并总括本博客的主要内容,将不断修改和更新]
引言:大道
    听李金铨(CC.Lee)老师讲治学,喟叹“大道不过三两句,说破能值几文钱?”这是一个开放性的问题,道出了社会科学家(social scientist)的无奈。诸多好玩的东西,归结到最后只有所为“理论”的贡献,而没有应用的价值。CC.Lee一语也是一种挑战:希望学术有助于现世之生活。
    但显然学术应辅助于生活,被认为是传播学创始人之一的卢因博士曾言:
    Many psychologists working today in an applied area are keenly aware of the need for close cooperation between theoretical and applied psychology. This can be accomplished in psychology, as it has been accomplished in physics, if the theorist does not look toward applied problems with highbrow aversion or with a fear of social problems, and if the applied psychologist realizes that there is nothing so practical as a good theory.
              ——Kurt Lewin (1943-44), “Problems of research in social psychology”
    实际上关注应用的理论研究才是真正的有价值的研究。然而学术研究如果止步于此,也多没有生命力,因为我们并没有探究真正的规律(the common pattern)。 一个人如果只是思考琐碎(trivial)的问题,自然不会有大的发现。拉普拉斯曾思考过太阳升起的概率,牛顿执着于重力,爱因斯坦对时间念念不放,这才可能做出真正的研究发现。然而显而易见的是一个可以稳定地(consistently)存在的一般规律(general law)不会是简单的定性描述可以刻画的。它们共享一个优秀品质,即可计算性(computational)。
    对于可计算性的追求在自然科学一直是主流。生物学也开始通过计算生物学的路径开始实现新的飞跃。试思考为什么经济学是自然科学中发展较好的?答案是货币。用货币度量经济行为使经济学具有了天然的可计算性;其次是心理学,不是量表,而是实验,使得心理学具有了“模糊的”比较能力(这种实验计算性的模糊性,局限了心理学的发展路径)。
    事实上,作为一个后起之声,计算社会科学(computational social science)已经在各个分支学科和新的交叉性学科中如火如荼!关于计算社会科学的介绍见Lazer, et al.2009年发表在《科学》杂志上的一文其中包括:计算语言学(computational linguistics)、计算社会学,计算心理学,计算传播学等。   
    也许看到这里,众多也许是全部社会科学家都会想到自然科学和社会科学的区别来。虽然牛顿(Issac Newton)Truth is ever to be found in simplicity, and not in the multiplicity and confusion of things 。但社会科学家却“深信”社会如此复杂,无法定量甚至实证研究。对此,证明其观点的荒谬远不如开始努力做些东西来得实在。毕竟,你不能因为做一个东西困难就放弃努力。

1.计算传播学
     我们一直在寻找可以支撑这个分支学科可以蓬勃发展的动力所在:

    “计算传播学的整体架构仍在酝酿当中。我觉得其精髓在于可计算性。如何才能具有可计算性?测量是第一步。货币使得经济学具有可计算性,实验使得心理学获得可计算性, byte使得计算机科学具有了可计算性,基因使得生物学具有可计算性。什么可以使得人类传播行为具有可计算性?寻找传播学的货币和基因是计算传播学的首要任务。按照我的个人理解,网络化的大规模数据的digital traces第一次使得传播行为获得了计算性。而document、collect、analyze、visualize这些传播行为就成为了计算传播学的主要工作。按照这个设想,传播学必须走出传统的研究套路,获得在网络上保存、抓取、分析、可视化大规模电子化数据的能力,也需要支持这些工作的工具。毫无疑问,传播学因此将和计算机科学开始交汇,至少需要程序员投入到这种大规模数据的挖掘工作中来。”(Chengjun Wang, 2012)

    本文的计算传播学不是虚拟之物,它有很多具体的分支。本文所主张的计算传播学是以网络科学为基础骨架,以计算新闻学为实践的知识框架。
  • 网络科学(network science)
    网络科学已经走出狭隘的传统的社会网研究(social network study)的藩篱,更主要是互联网浪潮的袭来(可参见吴军《浪潮之巅》一书),社会网络开始拥抱互联网网络科学(web science),一种以复杂网络(complex network)为代表的新型网络科学开始迅速成长(参见barabasi的《链接:网络新科学》一书)。
    听得春雷响,老树发新枝。各个分支的社会科学都开始出现网络社会学,网络传播学之类的新的研究版图。然而,此刻之网络科学却远远超越传统社会科学家(包括媒介研究者(media scholars))所理解的范畴。人类传播动态行为(human communication dynamics)开始成为人类动力学(human dynamics)关注的焦点。
    毫不夸张地说,人类的生活已经不可避免地大范围的网络化:网络购物,网络购票,网络交友,网络表达,网络新闻,网络游戏,网络电影,网络音乐,等,不一而足。其直接结果就是所谓的虚拟,变成了现实。其中包含了众多的传播学研究问题(其中之一就是我在关注的网络信息流动的问题)。
    传播网络分析在传播学并不是什么新鲜的事物(可参见Contractor的《传播网络理论》一书),但过去的传播网络分析主要局限于小数据,分析组织内和组织间的传播行为,其应用范围极为有限。亟需将其扩展为大规模人类传播行为的分析。
  • 数据新闻学(data journalism)
    数据新闻学或称数据驱动的新闻学(data driven journalism),被认为是计算传播学的一个具体应用。
    通过挖掘和展示数据背后的pattern,和丰富的、具有互动性的可视化,数据新闻学成为新闻学的新的疆域和应用范例。
   
    实际上,数据新闻学已经成为被实践检验后的浴火真金,例如stanfor大学关于data journalism的介绍:http://datajournalism.stanford.edu/
 2. 理论和方法的双重挑战
    任何新的科学研究的兴起,总是伴随着新的挑战。不仅包括理论的,还包括方法的。
  • 普世法则(general law)的欠缺
    需找普世法则仍是社会科学的主线。虽然在过去社会科学止步于统计分布,对于构成统计分布的东西置若罔闻。直到现在网络科学的研究,尤其是web science的研究导致幂律的重新被直视和面对,构成统计分布的机制方才再次成为研究的重点。
   传统的统计工具受制约于假设检验的基本逻辑,对于无作用的假设缺乏检验能力,容易导致只会发现显著的结果,而不显著的结果无法得到发表。
  • 海量数据(massive data)的逼迫
   传统的统计工具只能处理小数据,统计推断面对大数据的时候,同样失去效力。样本量的增大使得一切都是显著的。这种困境呼唤新的统计分支的诞生。统计物理或许可以成为一种未来的可能。
   Big data既是挑战,也是机遇,面对大数据,更加全全面彻底地了解人类传播行为开始成为可能。data scientist已经开始行动。例如:
  • 网络抽样
   网络抽样依然是一团混沌。随机抽样打散了网络结构,滚雪球则限于网络的一隅,难以论证其代表性。
  • 可视化
   数据量的增大给可视化带来严重挑战。如何使得规律凸显,噪音被覆盖?可曾记得facebook用来上市宣传的那张著名的可视化的图片?随着数据的越来越开放和膨胀,可视化的时代已经到来。

3. 理论和方法的工具箱
   如何应对这种挑战?直面还是绕过,还是置之不理。
  • 取法于自然科学
    网络科学开启了一个崭新的研究纪元,而网络公开数据和开源(open source)的精神都深刻地变革着既有的研究传统。复杂网络作为一个研究领域和研究视角一开始就吸引了众多目光。人类动力学(Human dynamics)与之相对的是人类传播行为(human communication behavior)所对应的传播网络(communication network)。如何借助既有的自然科学理论和模型,尤其是复杂网络中发展出来的模型来研究人类传播行为, 成为现在所面临的主要问题。
    就网络模型而言,图论,网络形态(规则网络、随机网络、无标度网络)、网络增长,网络内部结构特征(rich club、assortativity,etc)等研究,深入的丰富了我们对于传播网络的认识。
    就其研究背后的方法论而言,主要存在四种方法,大致可以分为两类,一类是动力学方法,有平均场方法和率方程方法,物理学家常用;另一类方法是概率论方法,有主方程方法和马氏链方法,数学家较喜欢。
    其研究发现也从各个方面深入地变革着既有的社会网络分析,使之进一步科学化,完备化,成为一个真正的网络科学(network science)。
  • 取法于计算机科学
   深入变革网络科学的两大动力,除了物理学,主要是计算机科学。众多的计算机科学家,如Huberman,Lada Adamic,Jon Kleinberg, Hawoong Jeong, Jure Leskovec等人。
     计算机科学革新了文本挖掘的技术,topic modeling, 情感分析等开始被广泛地应用到媒介内容的研究中来。试看现在的计算机科学的top conference,如WWW、SIGKDD等会议都开始研究社会化媒体(social media)。
  • 取法于数学
   数学是变革网络科学的基础。看到这里,多少会有人开始畏惧。援引爱因斯坦的两句话共勉: 
     Before God we are all equally wise and equally foolish. Do not worry about your difficulties in Mathematics. I can assure you mine are still greater.——Albert Einstein 
  • 取法于软件工具
    我所常用的R命令: http://blog.sina.com.cn/s/blog_4a238ec2010108s1.html
    但需注意R依然只能对付中等规模的数据,真正的大数据,其解决的究极之道依然是基于分布式计算的数据库技术。通常我们不会面临真正的大数据,因而现在的研究,即使是最为紧密的,也依然可以使用小数据来说明问题。但随着研究的深入,直接面对大数据依然是不可避免的。

结语
   人类不应停止对永恒的普适法则的追寻,不仅在学术,而且在生活中,曾如康德所言:
   A person acts morally when he or she acts as if his or her conduct was establishing a universal law governing others in similar circumstances. 
      大道在前,直面应对!千里之行,始于足下。

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

python

sleep

time

杂谈

分类: Python



import time

while True:
    end_time = time.time() + 5  # every five secs stop once
    while time.time() < end_time: 
        print 'working' # her is your function
        time.sleep(5)   # ifelse, sleep
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

转载

分类: R

Googlefacebook如何应用R进行数据挖掘

R用户组织的主题为“R与预测分析科学”的panel会议上,有来自工业界的四位代表发表了讲话,介绍各自在工业界是如何应用R进行数据挖掘。他们分别是:

Bo Cowgill, Google

Itamar Rosenn, Facebook

David Smith, Revolution Computing

Jim Porzak, The Generations Network

他们分别介绍了在各个公司是如何使用R进行预测分析,R作为分析工具的优势和劣势,并且提供了学习案例,以下是对他们的介绍的相关总结。

Panel介绍

R作为一门编程语言在以下三个方面具有很强的优势:数据处理,统计和数据可视化。和其他数据分析工具不同的是,它是由统计学家开发的,它是免费的软件,并且可以通过用户开发的包进行扩展,目前大约有2000多个包在CRAN中。

很多包可以应用在预测分析中。Jim重点介绍了 Max Kuhn caret包,它提供了大量的分类和回归模型,包括神经网络和朴素贝叶斯模型。

Bo Cowgill, Google

根据Bo Cowgill 的介绍,Rgoogle最流行的统计分析包,事实上,google也是R基础的捐助者。他讲述道:R最好的事情是,它是统计学家发明的。它最糟糕的事情是,它是统计学家发明的。无论如何,他很乐观地看待R开发者社区的发展,R文档也逐步在改进,它的性能也在逐步提高。

Google主要使用R进行数据探索和构建模型原型,它并不是应用在生产系统,在Bo的团队中,R主要运行在桌面环境中。Bo主要根据以下的流程使用R:(1)使用其他的工具提取数据;(2)将数据加载到R中;(3)使用R建模分析;(4)在生产环境中使用c++或者python实现结果模型。

Itamar Rosenn, Facebook

Itamar介绍了facebook数据团队使用R的情况,他回答了新用户提数的两个问题:预测用户是否保持在某个数据点,如果他们停留,如何预测他们在三个月之后是否还会停留。

对于第一个问题,Itamar的团队使用递归划分推断出仅仅两个数据点被预测出来用户是否保留在facebook:(1)新用户拥有多个会话;(2)输入用户基本信息时。

对于第二个问题,他们使用最小角度回归方法建立逻辑回归模型(lars包),根据三个类别的行为发现用户三个月的活动:(1)用户被其他用户访问的频率;(2)第三方应用程序使用的频率;(3)即将访问该站点的用户。

David Smith, Revolution Computing

David的公司,R改革计算,不仅仅使用R,而且R是他们的核心业务。David描述道:他们对R的贡献类似于redhatlinux 的贡献。他的公司处理使用R遇到的一些问题,例如,(1)支持老版本软件,即向下兼容;(2)通过他们的ParallelR套件可以支持并行计算。

David展示了他们的生命科学客户是如何使用R通过randomForest包对基因组数据集进行分类处理,以及如何使用他们的foreach包对分类树分析进行并行处理。

他还提到他们和其他公司合作将R应用在生产环境中,将特定的脚本放在服务器上,用户通过客户端调用该脚本进行数据处理。

Jim Porzak, The Generations Network

Jim简单介绍了如何使用R进行市场分析。尤其是,Jim还使用flexclustsun公司的客户数据进行聚类分析,并且应用该结果数据识别高价值销售的主导业务。

 

Q&A环节,还有很多提问,并且进行了回答。

1在使用R的过程中,如何解决内存限制问题?

R工作区是在RAM上,因此他的大小是受到限制的。

办法:

(1)     使用R的数据库连接功能(例如RMySQL),对数据进行切片处理

(2)     抽样处理

(3)     在独立的服务器或者在amazon的云计算环境中运行脚本

2R如何与其他工具和语言进行交互?

CRAN里面有一些包提供了和matlabsplusSASexcel的交互接口,另外,还提供了与pythonjava的接口包(RpyRJava)。

阅读  ┆ 评论  ┆ 转载原文 ┆ 收藏 
标签:

转载

分类: R
big data
原文地址:RHive:集成R和Hive作者:bicloud

https://github.com/nexr/RHive/wiki/UserGuides

RHive是一个R包,在R环境中集成hive。通过使用RHive可以在R环境中写HQL(HiveQL),将R的对象传入hive中,在hive中进行计算。在rHive中

小数据集在R中执行,大数据集在hive中运行。

越来越多的企业收集了海量细节数据,需要TB或者PB级的数据存储以及从海量数据中发现知识。目前,人们主要关注R统计分析程序,并且越来越熟悉R开发。但是,R对于海量数据处理存在一些弊端。一些人,通过抽样技术来处理海量数据,这样很有可能导致丢失数据信息。Hadoop可以处理这样的海量数据,而数据分析师缺少使用hadoop开发能力。然而,数据分析师一般都很熟悉SQL,进行数据处理。正是基于此种情况,Rhive作为大数据的一种解决方案,应运而生,在R和Hive之间建立桥梁。

RHive架构

image

 

API

Rhive API for R

rhive.connect : connect to hive 连接hive
rhive.query : execute hive query in R 在R中执行hive查询
rhive.export : export only R function to cluster Rserve
rhive.exportAll : export all R functions and R objects to cluster Rserve
rhive.close : close hive connection
rhive.list.table : get hive table list
rhive.desc.table : get Hive table information
rhive.load.table : retrieve table data from hive to R

RHive UDF、UDAF for hive

通过R函数处理hdfs

R : R is UDF. For every record, this function from Hive calls an exported R function.
RA : RA is UDAF. This function uses exported R and hive query to aggregate data.
unfold : unfold is UDTF. This function takes return data of R and unfolds them into several columns.
expand : expand is UDTF.

实例

rhive.connect(hive-hostip)
rhive.query("select * from emp")
coefficient <- 1.1
scoring <- function(sal) {
coefficient * sal
}
rhive.export('scoring')
rhive.query("select R('scoring',col_sal,0.0) from emp")

hsum <- function(prev,sal) {
c(prev[1] + sal[1])
}
hsum.partial <- function(agg_sal) {
agg_sal
}
hsum.merge <- function(prev, agg_sal) {
c(prev[1] + agg_sal[1])
}
hsum.terminate <- function(agg_sal) {
agg_sal
}
rhive.exportAll('hsum',rserve-list)
rhive.query(”select RA('hsum',col_sal) from emp group by empno")
emp <- rhive.desc.table(emp)
colnames(emp)

阅读  ┆ 评论  ┆ 转载原文 ┆ 收藏 
标签:

杂谈

分类: R

Any simple way to subset a vector of strings that do contain a particular substring ?






# 我觉得这个工作像做一个小的搜索引擎。有点神奇。




regexpr("ba", strings) 

 On Thu, Jun 19, 2008 at 1:18 AM, Daren Tan <daren76 at hotmail.com> wrote:
 >
>
> For example, 
>
> strings <- c("aaaa", "bbbb","ccba")
>
> How to get "aaaa", "bbbb" that do not contain "ba" ? 
Here are three ways: 
 > strings[regexpr("ba", strings) < 0] 
[1] "aaaa" "bbbb" 
 > setdiff(strings, grep("ba", strings, value = TRUE)) 
[1] "aaaa" "bbbb" 
 > strings[-grep("ba", c(strings, "ba"))] 
[1] "aaaa" "bbbb" 
Note that in the last case we had to ensure that there is at least
one "ba" string by appending one since it would otherwise fail
in the case that there were no "ba" strings.
# 尝试插入一首我喜欢的歌《beautiful girls》



阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
(2012-04-14 16:21)
标签:

杂谈

分类: R
http://cran.r-project.org/doc/manuals/R-lang.html#if




> t <- if (test==NA) test1 else test


Error in if (test == NA) test1 else test : 
  missing value where TRUE/FALSE needed
In addition: Warning message:
In if (test == NA) test1 else test :
  the condition has length > 1 and only the first element will be used

if takes a single value (not a vector).

You might want to look at the 'ifelse' function to work with vectors. 
You would do something like: 

mod <- ifelse(x < 0, x * (-1), x) 

> ?ifelse
> x <- c(6:-4)
> x
 [1]  6  5  4  3  2  1  0 -1 -2 -3 -4
> ifelse(x>0, x, NA)
 [1]  6  5  4  3  2  1 NA NA NA NA NA
> y=ifelse(x>0, x, NA)
> y
 [1]  6  5  4  3  2  1 NA NA NA NA NA
> ifelse(y==NA, 0, y)
 [1] NA NA NA NA NA NA NA NA NA NA NA
> ifelse(is.na(y)==TRUE, 0, y)
 [1] 6 5 4 3 2 1 0 0 0 0 0
所以我应该写成:
t <- ifelse (is.na(test)==TRUE, test1, test)

阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
标签:

杂谈

分类: Python


# select the weibo of 30+ events using python script
# chengjun wang @ Canberra 20120413


data = open('E:/WISE2012/linwu/sortedweibo.txt', 'r')
output = open('E:/WISE2012/linwu/seedweibo.txt', 'w')

for line in data:
    if line.find("$")!= -1:
output.write(line)
 
# line="I am good , how are you?"
# line.find("$")
阅读  ┆ 评论  ┆ 转载 ┆ 收藏 
个人资料
黠之大者
黠之大者
  • 博客等级:
  • 博客积分:779
  • 博客访问:21,284
  • 关注人气:40
个人简介
“黠之大者,为国为民;简易变易,其义不易。” 易黠,善国人,传播学PHD student,Male,浸染儒墨,爱好complexity science,以SFI&NKS为旨归。生是图灵机,万物皆计算。计算传播即computational communication。
新浪微博
公告
这里记录的是The things I tend to forget, rather than the things Icreate or prefer.

Learn more about me, click here.

 


                                




新浪时光机
好友
加载中…
搜博主文章
访客
加载中…
图片播放器
音乐播放器
评论
加载中…
  

新浪BLOG意见反馈留言板 不良信息反馈 电话:4006900000 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有