数据分析-10-扒一扒蔡徐坤微博100万+转发量的真假流量粉(包含数据和代码)

0. 获取数据集

关注公众号:『AI学习星球
回复:扒一扒蔡徐坤 即可获取数据下载。
论文辅导算法学习可以通过公众号滴滴我

在这里插入图片描述

1. 项目背景与任务

项目主要随机抓取蔡徐坤100万+转发的微博《再见,“任性的”千千…》的10万条转发数据,并且分析蔡徐坤真假转发流量的比例以及真假粉丝的用户画像。根据数据分析出真假流量所占比例各有多少,假流量粉丝是如何生产出来的。

2. 数据读取

导入模块

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from pymongo import MongoClient
from pandas.io.json import json_normalize

plt.style.use('ggplot')
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['PingFang']  #解决seaborn中文字体显示问题
plt.rc('figure', figsize=(10, 10))  #把plt默认的图片size调大一点
plt.rcParams["figure.dpi"] =mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
%matplotlib inline
data = pd.read_csv('caixukun.csv') 
data.to_csv('caixukun.csv', index=False)
data.info()

在这里插入图片描述

2.1 问题

  1. 蔡徐坤的微博转发是否存在假流量?
  2. 真假流量所占的比例各有多少?
  3. 假流量粉丝是如何生产出来的?
  4. 真流量粉的粉丝画像
2.1.1 蔡徐坤的微博转发是否存在假流量?
# 先来看看蔡徐坤的粉丝性别比例
fans_num = data['user.gender'].value_counts()
fans_num

在这里插入图片描述

from pyecharts import Bar

bar = Bar("蔡徐坤粉丝性别比例初探", width = 600,height=500)
bar.add("(总数据102313条)", ['男', '女'], fans_num.values, is_stack=True, 
       xaxis_label_textsize=20, yaxis_label_textsize=14, is_label_show=True)
bar

在这里插入图片描述

np.round(fans_num/fans_num.sum()*100, 2)

在这里插入图片描述

data[data['user.gender']=='m'].sample(5)

在这里插入图片描述

2.1.2 真假流量所占的比例各有多少
data=data.fillna({'user.description':'wu'})
data_fake = data[((data['user.follow_count']<=5)|(data['user.followers_count']<=5))&
                 (data['user.description']=='wu')&
                 (data['comments_count']==0)&
                (data['attitudes_count']==0)&
                (data['reposts_count']==0)&
                (data['user.mbrank']==0)]
data_fake.sample(5)

在这里插入图片描述

data_fake.shape

在这里插入图片描述

# 昵称里包含“用户”的,基本上可以断定是假粉丝
data_fake2_index = data[(data['user.follow_count']>5)&
                        (data['user.followers_count']>5)&
                        (data['user.screen_name'].str.contains('用户'))].index
# 把假的流量粉丝转发组合起来
data_fake = pd.concat([data_fake, data.iloc[data_fake2_index]])
data_fake.shape

在这里插入图片描述

# 取出真粉的转发# 取出真粉的转发
data_true = data.drop(data_fake.index)
data_true.shape

在这里插入图片描述

print('真粉丝转发数占总转发数的{}%'.format(np.round(data_true.shape[0]/data.shape[0]*100, 2)))
print('假粉丝转发数占总转发数的{}%'.format(np.round(data_fake.shape[0]/data.shape[0]*100, 2)))

在这里插入图片描述

bar = Bar("蔡徐坤真假流量的转发量", width = 600,height=500)
bar.add("(总数据102313条)", ['总转发量', '假粉丝转发量', '真粉丝转发量'], 
        [data.shape[0], data_fake.shape[0], data_true.shape[0]], is_stack=True, 
       xaxis_label_textsize=20, yaxis_label_textsize=14, is_label_show=True)
bar

在这里插入图片描述

real_fans_num = data_true.drop_duplicates(subset='user.id').shape[0]
bar = Bar("蔡徐坤真假流量的转发量与真实转发粉丝量(总数据102313条)", width = 600,height=500)
bar.add('', ['总转发量', '假粉丝转发量', '真粉丝转发量', '真实转发粉丝量'], 
        [data.shape[0], data_fake.shape[0], data_true.shape[0], real_fans_num], is_stack=True, 
       xaxis_label_textsize=20, yaxis_label_textsize=14, is_label_show=True, xaxis_rotate=20)
bar

在这里插入图片描述

print('真实转发粉丝量占总转发数的{}%'.format(np.round(real_fans_num/data.shape[0]*100, 2)))

真实转发粉丝量占总转发数的3.84%

data.sample(5)

在这里插入图片描述

2.1.3 假流量粉丝是如何生产出来的?
data_fake_gender = data_fake.drop_duplicates(subset='user.id')['user.gender'].value_counts()
data_fake_gender

在这里插入图片描述

data_fake[data_fake['user.gender']=='f'].sample(5)

在这里插入图片描述

bar = Bar("蔡徐坤假粉丝性别比例", width = 600,height=500)
bar.add("(假粉丝总数为40838)", ['男', '女'], data_fake_gender.values, is_stack=True, 
       xaxis_label_textsize=20, yaxis_label_textsize=14, is_label_show=True)
bar

在这里插入图片描述

38969/40838

0.954233801851217

data_fake['raw_text'].value_counts()

在这里插入图片描述

fake_source = data_fake['source'].value_counts()[:10]
bar = Bar("蔡徐坤假粉丝Top10转发设备", width = 600,height=600)
bar.add("", fake_source.index, fake_source.values, is_stack=True, 
       xaxis_label_textsize=11, yaxis_label_textsize=14, is_label_show=True, xaxis_rotate=30)
bar

在这里插入图片描述

data_fake['user.follow_count'].mean()

3.4412612555950397

data_fake['user.followers_count'].mean()

1.04576663836389

data_fake_sample = data_fake.sample(5)
data_fake_sample['user.screen_name']

在这里插入图片描述

data_fake_sample['user.profile_image_url'].values

在这里插入图片描述

data_fake.sample(5)['user.screen_name']

在这里插入图片描述

data_fake['user.screen_name'].str.contains('蔡|坤|葵|kun').sum()

41766

data_fake.shape[0]

95397

data_fake['user.statuses_count'].mean()

72.4942503433022

2.1.4 真流量粉的粉丝画像
data_true.sample(5)

在这里插入图片描述

data_true_gender = data_true.drop_duplicates(subset='user.id')['user.gender'].value_counts()
data_true_gender

在这里插入图片描述

bar = Bar("蔡徐坤真粉丝性别比例", width = 600,height=500)
bar.add("(真粉丝总数为3926)", ['女', '男'], data_true_gender.values, is_stack=True, 
       xaxis_label_textsize=20, yaxis_label_textsize=14, is_label_show=True)
bar

在这里插入图片描述

data_true['raw_text'].value_counts()

在这里插入图片描述

true_source = data_true['source'].value_counts()[:10]
bar = Bar("蔡徐坤真粉丝Top10转发设备", width = 600,height=600)
bar.add("", true_source.index, true_source.values, is_stack=True, 
       xaxis_label_textsize=11, yaxis_label_textsize=14, is_label_show=True, xaxis_rotate=30)
bar

在这里插入图片描述

data_true['user.follow_count'].mean()

222.0597165991903

data_true['user.followers_count'].mean()

178.9480913823019

data_true.sample(5)['user.screen_name']

在这里插入图片描述

data_true['user.screen_name'].str.contains('蔡|坤|葵|kun').sum()

3153

data_true.shape[0]

6916

# 绘制蔡徐坤真粉丝的简介词云图
import jieba
from collections import Counter
from pyecharts import WordCloud

jieba.add_word('蔡徐坤')

swords = [x.strip() for x in open ('stopwords.txt')]
def plot_word_cloud(data, swords, columns):
    text = ''.join(data[columns])
    words = list(jieba.cut(text))
    ex_sw_words = []
    for word in words:
        if len(word)>1 and (word not in swords):
            ex_sw_words.append(word)
    c = Counter()
    c = Counter(ex_sw_words)
    wc_data = pd.DataFrame({'word':list(c.keys()), 'counts':list(c.values())}).sort_values(by='counts', ascending=False).head(100)
    wordcloud = WordCloud(width=1300, height=620)
    wordcloud.add("", wc_data['word'], wc_data['counts'], word_size_range=[20, 100])
    return wordcloud
plot_word_cloud(data=data_true, swords=swords, columns='user.description')

在这里插入图片描述

plot_word_cloud(data=data_true, swords=swords, columns='raw_text')

在这里插入图片描述
关注公众号:『AI学习星球
回复:扒一扒蔡徐坤 即可获取数据下载。
论文辅导算法学习可以通过公众号滴滴我
在这里插入图片描述

  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值