数据清洗:

对占中新闻进行数据清洗



王成军

wangchengjun@nju.edu.cn

计算传播网 http://computational-communication.com


In [1]:
# 使用with open读取每一行数据
with open("../data/occupycentral/zz-hk-2014-10.rtf", encoding = 'gb18030') as f:
    news = f.readlines()

In [2]:
# 查看总共有多少行
len(news)


Out[2]:
16541

In [3]:
# 注意:标题和版面之间存在一个空行!所以title是block的第4个元素。
for i in range(1, 80):
    print(news[i])


~~~~~~~~~~~~~~~~~~~~~~~~~~  #1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

am730 | 2014-10-31 \par

A16| NEWS| C观点| By 施永青 \par 



法治有整合社会功能 \par

\par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par



















\par\par 前文已介绍过塔尔科特·帕森斯的AGIL理论中的Adaptation(适应)与Goal Attainment(达标)的社会功能,今天续谈Integration(整合)的功能。人类社会是一个复杂系统,大系统内还有很多次系统,这些系统既独立,又牵连;既矛盾,又互适;有时互相促进,有时互相制约。正如一个人,既是社会的成员,又是公司的雇员;既是别人的儿子,又是朋辈中的「大哥」;其言行会同时受所处的不同系统所影响。\par\par 这些错综复杂的系统之间不可能没有冲突,为了避免社会因纠纷得不到恰当的处理而分崩离析,社会必须发展出一套整合矛盾的方式,这就需要有司法制度。\par\par 按帕森斯的说法,法治的基础是先要界定产权。这样才能避免因争夺资源而产生无休止的冲突。再者,交易亦需要在产权获得界定后才能进行。有交易才有市场,才能透过市场机制进行公平竞争,推动经济发展。\par\par 另一方面,社会亦需要为人权下定义,这样,政府才能在有认受性的情况下组成,才能有效地去处理公众事务。此外,社会还需要有一套合乎公义的会议程序,以决定如何汇聚众人的意愿。\par\par 有了这些基础之后,社会就可以发展出一整套司法制度,让成员知所行止,令社会的矛盾不会恶化。\par\par 英国人为香港留下的,可不只是一套可以依据的律例,而是一整套法治的理念与司法程序。香港的回归能进行得相对平稳,与特区政府基本上原封不动地承继了原有的司法系统有莫大的关系。\par\par 回归后,虽有人危言耸听,说香港的法治已死,但世人仍公认香港的法治达国际一流水准,而港人亦可以如常在香港生活与做生意,不觉有失去法治的实质威胁。直到\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 运动的出现,香港人才真正感受到失去法治的害处。\par\par \loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 运动挑战的可不只是个别「恶法」,而是侵犯了整个法治的根基——产权、人权与政府的执法权。\par\par 占领区的物业,地契上列明有Right of way,但现在占领者却不容停车场的车辆出入。这分明损害了这些物业的产权。现在政府却无法加以维护;法庭出了禁制令,\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 者却一样藐视。这样发展下去,谁敢在香港置业?\par\par 其实,损害产权等同损害人权,因为人权的一项重要内容,就是个人的财产应获保障。此外,人人都应有追求幸福的权利,但现在占领区生意难做,怎会不妨碍别人追求幸福?\par\par \loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 者把自己的行为说成是公民抗命,但公民抗命只是个人行为在道德上的解释,用来拒绝遵守某些个人不认同的法令还讲得通,但绝不可以借此损害他人的产权与人权。\par\par 再者,\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 者现时在争取的是宪政改革,本应获社会上绝大多数人赞同才有条件实施,不宜用占领交通要津的方式去逼其他人就范。如果祭起公民抗命的旗帜就可以欲所欲为,只会天下大乱,令法治失去协调与整合作用。 \par

 \par



文章编号: 201410315301186 \par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

本内容之版权由相关传媒机构 / 版权持有人拥有。除非获得明确授权,否则严禁复制、改编、分发或发布本内容。版权持有人保留一切权利。 本内容经慧科的电子服务提供。

\page

~~~~~~~~~~~~~~~~~~~~~~~~~~  #2 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

大公报 | 2014-10-31 \par

A08| 要闻 \par 



扛工仔料加薪4.5% 建筑金融好景 \par

\par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par



















\par\par 【大公报讯】记者彩雯报道:上班族明年加薪预测调查结果陆续揭盅,香港人力资源管理学会昨日公布调查预计,明年平均加薪4.5%,高过今年的4.3%加幅,也高过雇主联会建议的4%平均加薪幅度,年尾花红金额平均相当于一至两个月薪金,预料建筑业及金融服务业雇员明年「最好景」,预测加薪幅度最高。不过, 「\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 」持续逾一个月以及沪港通押后的影响,尚未反映在今次调查结果,有待今年底的跟进调查才能确定。\par\par 人力资源管理学会向101间公司调查,涉及聘用雇员总数达13.7万人。当中84间公司于今年有整体加薪,两间冻薪,今年平均加薪4.3%。展望明年,80间公司打算明年一至四月将调整基本薪金,其中52间更已落实明年预算调整幅度,当中,50间公司预期会整体加薪,两间公司冻薪,没公司打算减薪,预计明年整体加薪4.5%。调整薪酬主要考虑公司业绩、个人工作表现及通胀等因素。\par\par 至于年底花红,设有固定花红制度的47间公司,近40%雇员符合发放固定花红的资格,平均金额为1.01个月基本薪金。设有非固定花红的71间公司中,68%雇员获发非固定花红,平均金额为1.62个月薪金,去年有超过70%雇员获发非固定花红,平均金额为1.58个月。\par\par 各行业当中,金融服务业雇员可望「最好景」,调查预测今年底的非固定花红金额相当于6.3个月薪金,明年可望加薪5.9%。建筑业雇员明年加薪也可望达5.9%,但预测今年底非固定花红金额只有大约1.4个月薪金。零售业今年底非固定花红金额可望达4.72个月薪金,但明年加薪幅度预测只有4.2%,低过整体4.5%的加幅。\par\par 学会:调查未计\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 \par\par 人力资源管理学会前任会长莫家麟表示,受访公司只计算今年一至九月份的薪金调整,当时未发生「\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 」行动, 「\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 」行动已踏入第二个月,影响情况陆续浮现,但未知行动何时结束,难以预计影响的深度,他亦不便揣测。他指,沪港通会对香港带来好处,但现时通车无期,可能会将好处延后,而香港未来亦受很多不明朗因素影响。\par\par 香港人才管理协会与浸会大学工商管理学院早前公布薪酬调查显示,过去一年香港地区的薪酬加幅为4.2%至4.5%,由于经济情况未明朗,明年加薪幅度或放缓为4%至4.5%。雇主联会近日向逾500家企业发出加薪指引,建议明年平均加薪4%,其中建筑、医疗保健行业加幅较高。 \par

 \par



文章编号: 201410315308873 \par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

本内容之版权由相关传媒机构 / 版权持有人拥有。除非获得明确授权,否则严禁复制、改编、分发或发布本内容。版权持有人保留一切权利。 本内容经慧科的电子服务提供。

\page

~~~~~~~~~~~~~~~~~~~~~~~~~~  #3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

头条日报 | 2014-10-31 \par

P60| 港闻| 「虎」学英语| By 汤锦标 \par 



「大嘴巴」英揆闯祸记 \par

\par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par



















\par\par 本栏写过苏格兰公投,结果有惊无险,大英帝国完好无缺,英国首相卡梅伦肯定饮得杯落,原来连女皇殿下亦喜上眉梢,甚至喜极而泣。\par\par   苏公投独立失败,女皇喜极而泣,听落几夸张,我不是女皇肚里条虫,我讲你可以不信,但如泄密者是卡梅伦,情况自然不同。\par\par   话说「大嘴巴」卡梅伦在一次公众场合,同来访的前纽约市长彭博(Michael Bloomberg)咬耳仔,怎料搞出个大头佛,对话被麦克风收录,卡向彭披露女皇得悉公投结果后的一刻,直情开心到喊──Microphones picked up him saying that the Queen 'purred' a noise of contentment and had even wept for joy when Cameron called her with the news.\par\par   就这段公投小插曲,《英文虎报》写了一篇八卦新闻,题为 Cameron sorry for letting cat out of the bag,讲到卡梅伦「不小心」泄了女皇机密,公投一事,女皇人前扮中立,人后却喊住想保留威士忌国,卡因此要向女皇道歉──the revelation was a breach of protocol which saw a red-faced Cameron apologizing to the monarch for his big mouth.\par\par   To let the cat out of the bag (让猫走了出袋子) 是成语,不小心泄漏别人秘密的意思,一般指无恶意,属无心之失──the idiom means to reveal a secret, usually unwittingly, and suggests thoughtlessness rather than malice.\par\par   除卡梅伦失礼事件外,亦可举一例。有一大班人正准备为朋友举办惊喜派对(surprise party),当事人不知情正在回家途中,给巧遇的友人抛出一句──「我会准时到你的派对」──惊喜派对马上玩完。当英国工党人士知道卡犯错后,即作出批评──It's disrespectful to let the cat out of the bag. 这句话仍有多一层意思,就是指卡不应将一些内幕消息向外界披露,亦是对女皇的不尊重。\par\par   英语世界中,同猫咪相关的惯用语多如牛毛,简单如raining cats and dogs, fighting like cats and dogs, when the cat's away, the mice will play 等,或者复杂少少如 a catty remark (不饶人的骂人语,多指出自女人) 、put the cat among the pigeons (刻意做出事情引起骚动)、Has the cat got your tongue?(指被人追问时保持沉默)等。\par\par   另一英文流行语──open a can of worms,或比 let the cat out of the bag更加广泛使用。打开罐子发现满罐都是虫子,比喻做了某件事把问题更加复杂化,举一例子(\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 运动支持者可能不爱听)──当\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 三子宣布启动\loch\af0\hich\af0\dbch\f15 \b\cf6 占中\loch\af0\hich\af0\dbch\f15 \b0\cf0 行动那刻钟,a can of worms has been opened,并引致一个困难并且失控的局面。\par\par   欲回看《虎报》相关文章,请用以下连结。http︰//goo.gl/ul3OLJ\par\par 汤锦标\par\par 《英文虎报》The Standard总编辑逢周五见报 \par

 \par



文章编号: 201410315308918 \par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

本内容之版权由相关传媒机构 / 版权持有人拥有。除非获得明确授权,否则严禁复制、改编、分发或发布本内容。版权持有人保留一切权利。 本内容经慧科的电子服务提供。

\page

~~~~~~~~~~~~~~~~~~~~~~~~~~  #4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

都市日报 | 2014-10-31 \par

P50| 娱乐 \par 



《华尔街日报》指周润发击败成龙 \par

\par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par








In [5]:
# 需要对中文编码的对象使用中文的方式进行解码
print(news[17][:500])


\par\par 前文已介绍过塔尔科特·帕森斯的AGIL理论中的Adaptation(适应)与Goal Attainment(达标)的社会功能,今天续谈Integration(整合)的功能。人类社会是一个复杂系统,大系统内还有很多次系统,这些系统既独立,又牵连;既矛盾,又互适;有时互相促进,有时互相制约。正如一个人,既是社会的成员,又是公司的雇员;既是别人的儿子,又是朋辈中的「大哥」;其言行会同时受所处的不同系统所影响。\par\par 这些错综复杂的系统之间不可能没有冲突,为了避免社会因纠纷得不到恰当的处理而分崩离析,社会必须发展出一套整合矛盾的方式,这就需要有司法制度。\par\par 按帕森斯的说法,法治的基础是先要界定产权。这样才能避免因争夺资源而产生无休止的冲突。再者,交易亦需要在产权获得界定后才能进行。有交易才有市场,才能透过市场机制进行公平竞争,推动经济发展。\par\par 另一方面,社会亦需要为人权下定义,这样,政府才能在有认受性的情况下组成,才能有效地去处理公众事务。此外,社会还需要有一套合乎公义的会议程序,以决定如何汇聚众人的意愿。\par\par 有了这些基础之

In [4]:
# 定义一个函数:实现解码、编码、清洗效果
def stringclean(s):
    #s = s.decode('gb18030').encode('utf8')
    s = s.replace(r'\loch\af0\hich\af0\dbch\f15 \b\cf6 ', '')
    s = s.replace(r'\loch\af0\hich\af0\dbch\f15 \b0\cf0 ', '')
    s = s.replace('\par', '').replace('\n', '')
    return s

In [5]:
'aabbccaadd ee aa'.strip('a')


Out[5]:
'bbccaadd ee '

In [6]:
'aabbccdd ee'.strip('ab')


Out[6]:
'ccdd ee'

In [7]:
'aabbccdd ee'.replace('ab', '')


Out[7]:
'abccdd ee'

In [8]:
# 调用stringclean函数
stringclean(news[17])


Out[8]:
' 前文已介绍过塔尔科特·帕森斯的AGIL理论中的Adaptation(适应)与Goal Attainment(达标)的社会功能,今天续谈Integration(整合)的功能。人类社会是一个复杂系统,大系统内还有很多次系统,这些系统既独立,又牵连;既矛盾,又互适;有时互相促进,有时互相制约。正如一个人,既是社会的成员,又是公司的雇员;既是别人的儿子,又是朋辈中的「大哥」;其言行会同时受所处的不同系统所影响。 这些错综复杂的系统之间不可能没有冲突,为了避免社会因纠纷得不到恰当的处理而分崩离析,社会必须发展出一套整合矛盾的方式,这就需要有司法制度。 按帕森斯的说法,法治的基础是先要界定产权。这样才能避免因争夺资源而产生无休止的冲突。再者,交易亦需要在产权获得界定后才能进行。有交易才有市场,才能透过市场机制进行公平竞争,推动经济发展。 另一方面,社会亦需要为人权下定义,这样,政府才能在有认受性的情况下组成,才能有效地去处理公众事务。此外,社会还需要有一套合乎公义的会议程序,以决定如何汇聚众人的意愿。 有了这些基础之后,社会就可以发展出一整套司法制度,让成员知所行止,令社会的矛盾不会恶化。 英国人为香港留下的,可不只是一套可以依据的律例,而是一整套法治的理念与司法程序。香港的回归能进行得相对平稳,与特区政府基本上原封不动地承继了原有的司法系统有莫大的关系。 回归后,虽有人危言耸听,说香港的法治已死,但世人仍公认香港的法治达国际一流水准,而港人亦可以如常在香港生活与做生意,不觉有失去法治的实质威胁。直到占中运动的出现,香港人才真正感受到失去法治的害处。 占中运动挑战的可不只是个别「恶法」,而是侵犯了整个法治的根基——产权、人权与政府的执法权。 占领区的物业,地契上列明有Right of way,但现在占领者却不容停车场的车辆出入。这分明损害了这些物业的产权。现在政府却无法加以维护;法庭出了禁制令,占中者却一样藐视。这样发展下去,谁敢在香港置业? 其实,损害产权等同损害人权,因为人权的一项重要内容,就是个人的财产应获保障。此外,人人都应有追求幸福的权利,但现在占领区生意难做,怎会不妨碍别人追求幸福? 占中者把自己的行为说成是公民抗命,但公民抗命只是个人行为在道德上的解释,用来拒绝遵守某些个人不认同的法令还讲得通,但绝不可以借此损害他人的产权与人权。 再者,占中者现时在争取的是宪政改革,本应获社会上绝大多数人赞同才有条件实施,不宜用占领交通要津的方式去逼其他人就范。如果祭起公民抗命的旗帜就可以欲所欲为,只会天下大乱,令法治失去协调与整合作用。 '

In [9]:
# 列表内的for循环
news_clean = [stringclean(n) for n in news]
len(news_clean)


Out[9]:
16541

In [10]:
news_clean[17][:120]


Out[10]:
' 前文已介绍过塔尔科特·帕森斯的AGIL理论中的Adaptation(适应)与Goal Attainment(达标)的社会功能,今天续谈Integration(整合)的功能。人类社会是一个复杂系统,大系统内还有很多次系统,这些系统既独立,又'

In [11]:
# 定义两个函数
def deletetab(s):
    return s.replace('\t', '')

import sys
def flushPrint(s):
    sys.stdout.write('\r')
    sys.stdout.write('%s' % s)
    sys.stdout.flush() # 清洗掉

In [12]:
help(sys.stdout)


Help on OutStream in module ipykernel.iostream object:

class OutStream(io.TextIOBase)
 |  A file like object that publishes the stream to a 0MQ PUB socket.
 |  
 |  Output is handed off to an IO Thread
 |  
 |  Method resolution order:
 |      OutStream
 |      io.TextIOBase
 |      _io._TextIOBase
 |      io.IOBase
 |      _io._IOBase
 |      builtins.object
 |  
 |  Methods defined here:
 |  
 |  __init__(self, session, pub_thread, name, pipe=None)
 |      Initialize self.  See help(type(self)) for accurate signature.
 |  
 |  close(self)
 |      Flush and close the IO object.
 |      
 |      This method has no effect if the file is already closed.
 |  
 |  flush(self)
 |      trigger actual zmq send
 |      
 |      send will happen in the background thread
 |  
 |  set_parent(self, parent)
 |  
 |  write(self, string)
 |      Write string to stream.
 |      Returns the number of characters written (which is always equal to
 |      the length of the string).
 |  
 |  writelines(self, sequence)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  closed
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  __abstractmethods__ = frozenset()
 |  
 |  encoding = 'UTF-8'
 |  
 |  flush_interval = 0.2
 |  
 |  flush_timeout = 10
 |  
 |  topic = None
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from _io._TextIOBase:
 |  
 |  detach(...)
 |      Separate the underlying buffer from the TextIOBase and return it.
 |      
 |      After the underlying buffer has been detached, the TextIO is in an
 |      unusable state.
 |  
 |  read(...)
 |      Read at most n characters from stream.
 |      
 |      Read from underlying buffer until we have n characters or we hit EOF.
 |      If n is negative or omitted, read until EOF.
 |  
 |  readline(...)
 |      Read until newline or EOF.
 |      
 |      Returns an empty string if EOF is hit immediately.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from _io._TextIOBase:
 |  
 |  errors
 |      The error setting of the decoder or encoder.
 |      
 |      Subclasses should override.
 |  
 |  newlines
 |      Line endings translated so far.
 |      
 |      Only line endings translated during reading are considered.
 |      
 |      Subclasses should override.
 |  
 |  ----------------------------------------------------------------------
 |  Methods inherited from _io._IOBase:
 |  
 |  __del__(...)
 |  
 |  __enter__(...)
 |  
 |  __exit__(...)
 |  
 |  __iter__(self, /)
 |      Implement iter(self).
 |  
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.
 |  
 |  __next__(self, /)
 |      Implement next(self).
 |  
 |  fileno(self, /)
 |      Returns underlying file descriptor if one exists.
 |      
 |      OSError is raised if the IO object does not use a file descriptor.
 |  
 |  isatty(self, /)
 |      Return whether this is an 'interactive' stream.
 |      
 |      Return False if it can't be determined.
 |  
 |  readable(self, /)
 |      Return whether object was opened for reading.
 |      
 |      If False, read() will raise OSError.
 |  
 |  readlines(self, hint=-1, /)
 |      Return a list of lines from the stream.
 |      
 |      hint can be specified to control the number of lines read: no more
 |      lines will be read if the total size (in bytes/characters) of all
 |      lines so far exceeds hint.
 |  
 |  seek(...)
 |      Change stream position.
 |      
 |      Change the stream position to the given byte offset. The offset is
 |      interpreted relative to the position indicated by whence.  Values
 |      for whence are:
 |      
 |      * 0 -- start of stream (the default); offset should be zero or positive
 |      * 1 -- current stream position; offset may be negative
 |      * 2 -- end of stream; offset is usually negative
 |      
 |      Return the new absolute position.
 |  
 |  seekable(self, /)
 |      Return whether object supports random access.
 |      
 |      If False, seek(), tell() and truncate() will raise OSError.
 |      This method may need to do a test seek().
 |  
 |  tell(self, /)
 |      Return current stream position.
 |  
 |  truncate(...)
 |      Truncate file to size bytes.
 |      
 |      File pointer is left unchanged.  Size defaults to the current IO
 |      position as reported by tell().  Returns the new size.
 |  
 |  writable(self, /)
 |      Return whether object was opened for writing.
 |      
 |      If False, write() will raise OSError.
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from _io._IOBase:
 |  
 |  __dict__


In [13]:
# 调用deletetab
deletetab('\ta')


Out[13]:
'a'

In [14]:
# 演示:flushPrint
import time, random
for i in range(10):
    time.sleep(random.random())
    flushPrint(i)


9

In [12]:
from collections import defaultdict

def readblocks(data):
    copy = False
    n = 0
    block = []
    chunk = defaultdict(lambda:[])
    for i in data:
        try:
            if "~~~~~~~~~~~~~~~~~~~~~~~~~~  #" in i:
                copy = True
            elif "文章编号:" in i:
                ids = i.replace('文章编号: ', '')
                source = block[0].split('|')[0]
                info = block[1]
                title = deletetab(block[3]) # 
                body = [j for j in block[6:] if j != '\n']
                body = ' '.join(body)
                body = deletetab(body)
                body = '"' + body  + '"'
                line = '\t'.join([ids, source, info, title, body])
                chunk[ids] = line
                block = []
                n += 1
                if n%10 == 0:
                    flushPrint(n)
                copy = False
            # copy must be here.
            elif copy:
                block.append(i)
        except Exception as e:
            print(i, e)
            pass
    return chunk

In [13]:
# 注意:标题和版面之间存在一个空行!所以title是block的第4个元素。
for i in range(1, 8):
    print(news[i][:500])


~~~~~~~~~~~~~~~~~~~~~~~~~~  #1 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par

am730 | 2014-10-31 \par

A16| NEWS| C观点| By 施永青 \par 



法治有整合社会功能 \par

\par

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \par


In [14]:
# 按block清洗新闻报道
news_result = readblocks(news_clean)


710

In [15]:
# 新闻的数量
len(news_result)


Out[15]:
719

In [16]:
# 查看字典的keys
list(news_result.keys())[:5]


Out[16]:
['201410115306047 ',
 '201410090050254 ',
 '201410310050132 ',
 '201410160290135 ',
 '201410170040096 ']

In [21]:
# 查看字典的values
list(news_result.values())[90]


Out[21]:
'201410290050192 \t文汇报 \tB01| 财经新闻| 财经头条  \t好友大挟仓 港股重夺三关 内地好消息提振 恒指劲弹377点 \t"          香港文汇报讯(记者 周绍基、裘毅)「沪港通」延迟对港股的影响只有一天,市场焦点已转至今日起的美联储局议息会议及内地的自贸区及国企改革,好友趁机挟淡仓,令昨日大市快速反弹,高开46点后升幅扩大,一举升穿10天线(23,192点)、20天线(23,198点)及250天牛熊线(23,176点),恒指全日收报23,520点,大涨377点或1.63%,盘中最多更曾升逾400点,成功收复周一的失地,成交也增至683亿元,出现「价量齐升」的好状况。分析师指出,A股爆升逾2%,是带动恒指大反弹的主因。    憧憬内地大力发展自由贸易区,加上对国企改革的期待,沪深两市昨日强劲反弹,股指涨幅均超2%。上证综指收报2,338点,涨幅2.07%,成交1,581亿元人民币,深成指收报7,988点,涨幅2.03%,成交1,752亿元人民币,创业板指报1,522点,涨幅2.01%。    国企改革料将展开 国指跑赢    四中全会闭幕,市场认为国企改革即将展开,其中中资金融股表现抢眼,令国指大幅跑赢大市,全日升2.3%至10,548点。本周四结算的期指表现活跃,即月期指升361点至23,579点,高水59点,成交合约达18.3万张,国指期货成交更达26.7万张。    耀才证券研究部经理植耀辉表示,港股大升主要受A股带动,但后市能否更进一步,他则认为上升的动力并不足够,相信只为好友挟高期指杀淡仓,当周四期指完成结算后,大市将会回复上落市格局。    美议息前夕 偷步炒延迟加息    他又指,昨日港股虽升近400点,但仍未突破横行区间,要港股再有突破,需要更多的利好消息,例如联储局议息会议提及延迟加息、「占中」行动有缓和迹象,或者沪港通有好消息等。    美国时间周二起联储局将一连两日议息,有市场分析认为,美国经济复苏步伐未稳,面对环球经济增长放缓甚至衰退,预料美联储会释出延迟加息的讯息,更有意见认为当局不排除会表达再启买债的考虑。有关对储局延迟加息的憧憬,为昨日大市提供炒作动力。(见另稿)    在大市上升下,昨日有26只熊证被杀,当中24只为恒指熊证,杀淡友一个措手不及。另一个令淡友跌眼镜的还包括港交所(0388),该股回升1.8%至169.2元,美银美林亦发报告唱好,指沪港通虽未有确实开通日期,美林相信,有关措施的延后只是暂时性,对年内开通沪港通仍充满信心。故此,港交所股价虽短期内受压,但长远仍给予港交所「买入」评级,目标价维持195元。    券商股也见反弹,第一上海(0227)及申银万国(0218)升5%,华富(0952)及新华汇富(0188)亦升逾4%,中州(1375)升3.8%。    蓝筹股方面,中移动(0941)升2.8%、腾讯(0700)涨1.7%带动大市。表现最突出的为百丽(1880),该股公布派中期息加特别息共派40分人民币,在高息下全日急升一成至9.32元。    四中全会甫闭幕,国企新一轮改革即展开,南车(1766)和北车(6199)宣布合并,两股昨日停牌,消息指本周六将有重大消息发布。市场人士料,该股复牌后,将掀起相关股份的炒作。    传人行放水 中资金融股受捧    近日盛传人行向股份制银行投放的千亿元人民币资金,料借此推动贷款回升,并对三农和小微贷款有所倾斜。中资金融股表现抢眼,工行(1398)、交行(3328)、建行(0939)、中行(3988)都升逾2%。平保(2318)、国寿(2628)亦分别升3.2%及2.5%、太保(2601)更弹升4%。        "'

In [22]:
import pandas as pd
news_list = [i.split('\t') for i in news_result.values()]
df_news = pd.DataFrame(news_list,
                       columns= ['ids', 'source',\
                                 'info', 'title', 'body'])
df_news.head(3)


Out[22]:
ids source info title body
0 201410115306047 置业家居 020| 置业家居| 焦点热话| By 李伟航梁思恒 淘大花园及德福花园 各录3宗交投 "   至于九龙区,过往成交量较多的区域,如荔枝角、长沙湾及深水埗区沿线,...
1 201410090050254 文汇报 A26| 人民政协专刊| 热心公益 连任「潮企」掌门人 谂计升协会声望 " 郑敬凯热心社会活动,身兼香港及内地多项公职,包括四川省海外联谊会常务理...
2 201410310050132 文汇报 A15| 社团新闻 中成药商会会董就职 黄楚恒膺会长 " 香港文汇报讯(记者 解玲)中成药商会12周年会庆暨第七届会董会就职典礼...

In [24]:
# 保存数据:将数据写入硬盘
with open('../data/zz-hk-2014-9-clean.txt','a') as p:
     for record in news_result.values():
            p.write(record+"\n")

In [25]:
# 使用pandas读取数据,并查看。
import pandas as pd
df = pd.read_csv( '../data/zz-hk-2014-9-clean.txt', 
                 sep = "\t", names=['ids', 'source','info', 'title', 'body'])
df[:3]


Out[25]:
ids source info title body
0 201409015325665 南华早报 EDT13| EDT Pain of stasis 没有文字档。
1 201409055305251 大公报 A20| 专版 坚决支持和拥护 全国人大常委会对香港政改的决定 一、本会坚决支持全国人大常委会关于香港特别行政区行政长官普选问题和201...
2 201409165304250 大公报 B02| 经济.航运 粤投1.8亿入股中超 【大公报记者毛丽娟深圳十五日电】中国水业(01129)与粤海投资(002...

In [23]:
# 使用os改变默认的工作路径
#import os
#os.chdir('../data/occupycentral/')

# 使用glob读取某一类文件的所有名称
import glob
filenames = glob.glob('../data/occupycentral/*.rtf')
filenames


Out[23]:
['../data/occupycentral/zz-hk-2014-10.rtf',
 '../data/occupycentral/zz-hk-2014-9.rtf']

In [28]:
for i in filenames:
    print(i)
    with open(i, encoding = 'gb18030', errors = 'ignore') as f:  # for windows users: errors = 'ignore'
        news = f.readlines()
        news = [stringclean(n) for n in news]
        news_result = readblocks(news)
        with open('../data/zz-hk-all-clean2018.txt','a') as p:
            for record in news_result.values():
                p.write(record+"\n")


../data/occupycentral/zz-hk-2014-10.rtf
710../data/occupycentral/zz-hk-2014-9.rtf
410

字节(Byte /bait/)

计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于有八位, [1] 也表示一些计算机编程语言中的数据类型和语言字符。

  • 1B(byte,字节)= 8 bit(见下文);
  • 1KB=1000B;1MB=1000KB=1000×1000B。其中1000=10^3。
  • 1KB(kilobyte,千字节)=1000B= 10^3 B;
  • 1MB(Megabyte,兆字节,百万字节,简称“兆”)=1000KB= 10^6 B;
  • 1GB(Gigabyte,吉字节,十亿字节,又称“千兆”)=1000MB= 10^9 B;


自学Pandas使用

《Python Data Science Handbook》第三章 by Jake VanderPlas



https://github.com/computational-class/datascience/blob/gh-pages/4.datasci/notebooks/03.00-Introduction-to-Pandas.ipynb

This is the End.

Thank you for your attention.