您的位置:首页 > 编程语言 > Python开发

【利用Python进行数据分析——经验篇2】计算微博转发/评论/点赞h指数的Python代码

2017-06-28 20:05 846 查看
本文中记录了如何得出h指数的计算值
微博转发/评论/点赞h指数:(定义),某博主如果他/她发表的N篇博文中有h篇每篇至少被h次转发/评论/点赞,而剩下的(N-h)篇博文中每篇被转发/评论/点赞次数均少于h次,则数值h则表示的是这个微博的转发/评论/点赞h指数。
备注:本文中使用的是ipython交互式编辑器
本文中案例以【利用python进行数据分析——基础篇】利用Python处理和分析Excel表中数据实战的实战数据为例

#根据h指数的定义,分别计算转发/评论/点赞h指数
# 再记录下每个“用户名的最大互动度max(转发+评论+点赞)”
#根据h指数的定义,分别计算转发/评论/点赞h指数
# 再记录下每个“用户名的最大互动度max(转发+评论+点赞)”

# 将All表分组,获取表格的index值
gb = All.groupby(u'用户名')
gb1 = gb.size()
gbindex = gb1.index
sortAllf = All.sort_values(by=[u'用户名',u'转发数'],ascending=[True,False])
sortAllc = All.sort_values(by=[u'用户名',u'评论数'],ascending=[True,False])
sortAlll = All.sort_values(by=[u'用户名',u'点赞数'],ascending=[True,False])
mm = (sortAllf,sortAllc,sortAlll)

# 将计算得到的结果重新存储到一个新的DataFrame中
All_h = pd.DataFrame(np.arange(136).reshape(34,4),columns=['fh','ch','lh','max_hdd'],index=gbindex)
fh=[]
ch=[]
lh=[]
max_hdd = []
for j in range(len(mm)):
for i in gbindex:
tempdf = mm[j][mm[j][u'用户名']==i]
tempdf['hdd'] = tempdf[u'转发数']+tempdf[u'评论数']+tempdf[u'点赞数']
max_hdd.append(tempdf['hdd'].max())
tempdf['numf'] = range(len(tempdf))
if j==0:
a = len(tempdf[tempdf[u'转发数']>=tempdf['numf']+1])
fh.append(a)
elif j==1:
b = len(tempdf[tempdf[u'评论数']>=tempdf['numf']+1])
ch.append(b)
else:
c = len(tempdf[tempdf[u'点赞数']>=tempdf['numf']+1])
lh.append(c)

All_h['fh']=fh
All_h['ch']=ch
All_h['lh']=lh

# 因为,前面的循环一共循环了三遍,使得All_h重复了3遍,因此只要获取前34位即可
All_h['max_hdd']=max_hdd[:34]

# 插入一个综合h指数,该指数是转发/评论/点赞h指数三个的均值
All_h.insert(3,'HS',All_h.iloc[:,:3].mean(1))
#更改列名称
All_h.rename(columns={'fh':u'转发h指数','ch':u'评论h指数',\
'lh':u'点赞h指数','HS':u'综合h指数','max_hdd':u'单篇最大互动度'},inplace=True)

#输出该表格的前5行
All_h.head()




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 经验 数据分析
相关文章推荐