【Python有趣打卡】微博APP榜单爬虫,尽知天下事(二)
今天继续接上学习微博热榜爬虫!不过已经完成了爬虫工作,今天主要是学习对之前爬取下来的数据进行数据分析!原创:罗罗攀(公众号:luoluopan1)学习Python有趣|微博APP爬虫,尽知天下事。
打开之前爬取的csv文件~开心
结果都是乱码,破坏我学习的心情,不过没关系
CSV打开乱码解决办法
方法一:
新建一个excel文件~
就可以啦~~
方法一:
直接用notepad++打开csv,编码→转为utf-8,点击保存,贼方便!!!!!
读取文件##### 用户分析
1.用户频次分析
这里要用到 pyecharts
Echarts是百度公司出的,可以做炫酷的动态图,大神陈建东将echarts通过Python实现,设计了pyecharts库。
https://github.com/pyecharts/pyecharts
用到的方法是WordCloud.add() 方法签名
user = df['user'].value_counts()
from pyecharts import WordCloud
%matplotlib inline #魔法函数 一定要加上!
wc = WordCloud(width=800, height=620)
wc.add("f", list(user.index), list(user), word_size_range=[20, 80])
wc
又有问题了???抓狂,再去搜一下原因
解决办法:https://blog.csdn.net/zqs305082800/article/details/84581299
2.用户地理分布
df['province'] = df['location'].str.split(' ').str[0]
province = df['province'].value_counts()
from pyecharts import Bar
bar = Bar('地区分布情况')
bar.add("", list(province[:10].index), list(province[:10]),xaxis_interval=0,xaxis_rotate=20,xaxis_margin=8,is_label_show=True)
bar
3.用户性别分布
gender = df['gender'].value_counts()
from pyecharts import Pie
pie = Pie("性别分布")
pie.add("", ['男性','女性'], list(gender), is_label_show=True)
pie
4.粉丝数排名
data4 = df.drop_duplicates('user') #去除重复项
data4 = data4.sort_values(by='followers',ascending=False)[:10]
data4
from pyecharts import Bar
bar = Bar('粉丝前十')
bar.add("", list(data4['user']), list(data4['followers']),xaxis_interval=0,xaxis_rotate=20,xaxis_margin=8,is_label_show=True)
bar
5.发布时间分布
df['hour'] = df['created_time'].str.split(':').str[0].str.split(' ').str[-1]
hour = df['hour'].value_counts()
hour = hour.sort_index()
from pyecharts import Line
attr = list(hour.index)
v = list(hour)
line = Line("发布时间分布")
line.add("", attr, v)
line
5.榜单内容分词统计
str_data = ''
for i in range(df.shape[0]):
str_data = str_data + str(df.iloc[i,4])
str_data
import jieba.analyse
tags = jieba.analyse.extract_tags(str_data, topK=50, withWeight=True)
label = []
attr = []
for item in tags:
print(item[0]+'\t'+str(int(item[1]*1000)))
label.append(item[0])
attr.append(int(item[1]*1000))
from pyecharts import WordCloud
wordcloud = WordCloud(width=800, height=620)
wordcloud.add("", label[3:], attr[3:], word_size_range=[20, 100])
wordcloud