python微博_「Python」 - 微博数据分析

按照现在流行的话来说,加了个学习社群,会有人抛出各式各样的问题,可以用shell解决,也可以用python。

一、微博数据分析

某社交网络数据,完成以下任务:

下载微博1天数据,地址:http://101.236.63.184:12345/weibo/

* weibo.top10wan,测试文件,包含10万条数据记录

* weibo.all,生产文件,千万量级数据记录

* 实验代码在测试文件上跑,最终在生产文件上跑出结果

任务一:算出微博1天数据总量;微博发文user_id总量(uniq的user_id的数量);微博文章总量(uniq的weibo_id的总量)

* 思路:读取文件,遍历每一行,统计行数;

* 获取user_id和weibo_id作为key存入dict,遇到相同key,value++

任务二:计算发微博(weibo_id)最多的Top 100用户

* 将user_id按照dict的value排序,输出dict即可

根据获得到的文件,稍微观察下格式,weibo数据字段和含义,在文件中字段依次排列,用\t隔开。

| 字段 | 列说明 | data |

|:------------------|:--------------------------------|:------|

|id |自增字段,全局唯一 |19341526007

|crawler_time |抓取时间 |2018-05-17 00:00:00

|crawler_time_stamp |抓取时间戳 |1526486400000

|is_retweet |是否转发:1表示是转发、0表示原创 |1

|user_id |本条微博的发文ID |1874517592

|nick_name |本条微博的发文用户屏幕名 |Wuli小婷婷儿

|tou_xiang |本条微博的发文用户的头像URL |https://tvax1.sinaimg.cn/crop.0.0.996.996.50/6fbade58ly8fn4pgftkr8j20ro0rp0uw.jpg

|user_type |本条微博的发文用户的类型:黄V、蓝V、会员用户、达人、普通用户|普通用户

|weibo_id |本条微博的ID |4240286638900436

|weibo_content |本条微博的内容 |转发微博

|zhuan |本条微博的转发数 |0

|ping |本条微博的评论数 |0

|zhan |本条微博的被赞数 |0

|url |本条微博的URL |GgU2rBlpq

|device |本条微博的发文设备 |够快才畅快vivo X6

|locate |本条微博的签到地点 |

|time |本条微博的发文时间 |2018-05-16 12:56:18

|time_stamp |本条微博的发文时间戳 |1526446578

|r_user_id |被转发用户ID |1742566624

|r_nick_name |被转发用户屏幕名 |思想聚焦

|r_user_type |被转发用户类型:黄V、蓝V、会员用户、达人、普通用户|金V

|r_weibo_id |被转发微博ID |4240212839930967

|r_weibo_content |被转发微博内容 |暖心漫画:我欣赏女人这样活着。[心]

|r_zhuan |被转发微博转发数 |2737

|r_ping |被转发微博评论数 |451

|r_zhan |被转发点赞数 |6992

|r_url |被转发微博URL |GgS7pFFuT

|r_device |被转发微博的设备 |微博 weibo.com

|r_location |被转发微博的签到 |

|r_time |被转发微博的日期 |2018-05-16 08:03:03

|r_time_stamp |被转发微博的时间戳 |1526428983

|pic_content |微博配图,如果是转发型微博,则pic_content是原微博的配图|

二、Python代码实现

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

weibo_file = open('weibo.top10wan')

line_count = 0

user_dict = dict()

weibo_dict = dict()

for line in weibo_file:

line_count += 1

# 对于后面部分存在切分错误

weibo_item_list = line.split()

user_id = weibo_item_list[5]

weibo_id = weibo_item_list[9]

if user_dict.get(user_id) is None:

user_dict.setdefault(user_id, 1)

else:

user_dict[user_id] = int(user_dict[user_id]) + 1

if weibo_dict.get(weibo_id) is None:

weibo_dict.setdefault(weibo_id, 1)

else:

weibo_dict[weibo_id] = int(weibo_dict[weibo_id]) + 1

sort_user_list = sorted(user_dict.items(), key=lambda s: s[1], reverse = True)

print("文件总行数:%s" % (line_count))

print("微博发文用户总量:%s" % (len(user_dict)))

print("微博文章总量:%s" % (len(weibo_dict)))

print("发微博最多的Top-10用户")

for k,v in sort_user_list[:10]:

print("user_id:%scount:%s" % (k, v))

结果显示。

文件总行数:100000

微博发文用户总量:47661

微博文章总量:96688

发微博最多的Top-10用户

user_id:1036713140 count:42

user_id:5206650942 count:40

user_id:1750349294 count:38

user_id:6529707947 count:38

user_id:2112339023 count:36

user_id:1986954045 count:26

user_id:1668926483 count:25

user_id:1664176597 count:24

user_id:1267454277 count:23

user_id:5044511176 count:23

三、shell方式解决

# 微博数据总量

cat weibo.top10wan | wc -l

wc -l weibo.top10wan

# 微博发文user_id总量

cat weibo.top10wan | awk -F"\t" '{ print $5 }' | sort | uniq | wc -l

# 微博文章总量

cat weibo.top10wan | awk -F"\t" '{ print $9 }' | sort | uniq | wc -l

四、待解决问题

千万级别场景。

你可能感兴趣的:(python微博)