zoukankan      html  css  js  c++  java
  • Python数据分析揭秘知乎大V的小秘密

    前言

    文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

    作者: 清风小筑

    PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

    http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef

    知乎,可以说是国内目前最大的问答类社区。与微博、贴吧等产品不同,知乎上面的内容更多是用户针对特定的问题分享知识、经验和见解。

    大V的关联

    首先给大家看的是知乎上粉丝数前50用户的关系图:

    在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

    图中的线是用户之间的相互关注的关系。这三张图的差别只在圆圈的大小上,依次分别代表:粉丝数、连入度(被图中其他人关注的数量)、连出度(关注图中其他人的数量)

    比较明显的是,像知乎日报、刘看山、丁香医生这类普通用户关注较多的“机构号”,在大V中的受关注度并不高。

    这张图是通过一个叫做 Gephi 的软件,基于 Python 采集下来的数据做出来的。其中圈的颜色是 Gephi 根据关联关系自动聚合的结果。

    谁是大V

    知乎的四大指标:关注、赞同、感谢、收藏。我们分别看下以不同指标排行的“头部用户”:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

     

    其中,张佳玮可以说是非常突出了。(这个名字好熟悉……还记得之前的虎扑分析吗?)

     

    在这里插入图片描述

    在这里插入图片描述

     

    官方收录回答数,张佳玮还是遥遥领先,收录文章数也榜上有名。

     

    如果不论质量,仅看数量的话:

    在这里插入图片描述

    在这里插入图片描述

    把这几组数据合成了两张三维散点图:

    在这里插入图片描述

    在这里插入图片描述

    图中选取的数据为关注数大于1万的用户。在项目里有可以交互的网页版本,可以更直观的查看这个分布图。

    在这里插入图片描述

    大V的热情在消退?

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

     

    上面几张图是对目前关注数超10万的用户的历史发布数据进行的统计。从图上来看,2015年大V们更热衷于回答,后来则大都改去写专栏文章了。从趋势来看,似乎大V们发文的频率已不再增长。不过这并不能直接推断知乎的整体热度,也可能内容的产出更分散于不同用户了呢?这就只有知乎官方才有权威数据了。

    用户爱看什么?

     

    在这里插入图片描述

    在这里插入图片描述

     

    这些关注度最高专栏和收藏夹,里面有你关注的吗?

    最后,这是一个以关注数超1万的用户的个人简介做出来的词云:

     

    在这里插入图片描述

    代码

     1 # coding:utf8
     2 # 抓取粉丝数过 1w 用户
     3 import requests
     4 import pymongo
     5 import time
     6 import pickle
     7  8 def get_ready(ch='user_pd',dbname='test'):
     9     '''数据库调用'''
    10     global mycol, myclient,myhp
    11     myclient = pymongo.MongoClient("mongodb://localhost:27017/")
    12     mydb = myclient[dbname]
    13     mycol = mydb[ch]
    14 get_ready()
    15 ss = mycol.find({})
    16 17 se = {1,} # 去重集合
    18 se2 = ['GOUKI9999','zhang-jia-wei'] # 爬取的列表
    19 # with open(r'C:UsersycDesktopused.txt', 'rb') as f: # 读取
    20 #     used = pickle.load(f)
    21 used={1,}
    22 sed = {}
    23 for s in ss:
    24     if s['follower_count']>=10000: # 粉丝数大于10000 
    25         sed[s['user_id']] = sed.get(s['user_id'],0) + 1
    26         if sed[s['user_id']] == 1:
    27             se.add(s['user_id'])
    28             se2.append(s['user_id'])
    29 leng = len(se2)
    30 print(leng)
    31 proxies = {
    32     "http": "http://spiderbeg:pythonbe@106.52.85.210:8000",
    33     "https": "http://spiderbeg:pythonbe@106.52.85.210:8000",
    34 }
    35 headers = {
    36     'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36',
    37     'cookie':'your_cookie(用户主页面)'
    38     }
    39 for i,url_id in enumerate(se2): # 爬取
    40     if i>=0:
    41         print(i,' ', end='') # url个数
    42     if url_id not in used: # 是否使用过
    43         used.add(url_id)
    44         nums = 500
    45         off = 0
    46         
    47         while True:
    48             url2 = 'https://www.zhihu.com/api/v4/members/' + url_id + '/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=' + str(off) + '&limit=' + str(nums)
    49             r2 = requests.get(url2, headers=headers,proxies=proxies)
    50             time.sleep(0.5)
    51             c = 0
    52             if 'error' in r2.json():
    53                 if r2.json()['error']['code'] in {310000, 310001}:
    54                     break
    55                 else:
    56                     raise NameError('页面错误')
    57             used.add(url_id) # 判断是否使用
    58             for d in r2.json()['data']:
    59                 z = {}
    60                 c+=1
    61                 z['user_id'] = d['url_token']
    62                 z['name'] = d['name']
    63                 z['headline'] = d['headline']
    64                 z['follower_count'] = d['follower_count']
    65                 z['answer_count'] = d['answer_count']
    66                 z['articles_count'] = d['articles_count'] # if d['articles_count'] else 0 
    67                 z['from'] = url_id # 谁的关注列表
    68                 if d['follower_count']>=10000 and d['url_token'] not in se and d['url_token'] not in used: # 粉丝大于 1w,则爬取
    69                     se.add(d['url_token'])
    70                     se2.append(d['url_token'])
    71                     mycol.insert_one(z) # 插入数据
    72             if r2.json()["paging"]['is_end'] == False:
    73                 nums+=500
    74                 off+=500
    75             elif r2.json()["paging"]['is_end'] == True:
    76                 break
    77             else:
    78                 print(r2.json)
    79                 break
  • 相关阅读:
    yolo_to_onnx ValueError: need more tan 1 value to unpack
    yolo_to_onnx killed
    C++ 实现二维矩阵的加减乘等运算
    Leetcode 1013. Partition Array Into Three Parts With Equal Sum
    Leetcode 1014. Best Sightseeing Pair
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 219. Contains Duplicate II
    Leetcode 890. Find and Replace Pattern
    Leetcode 965. Univalued Binary Tree
    Leetcode 700. Search in a Binary Search Tree
  • 原文地址:https://www.cnblogs.com/Qqun821460695/p/11935282.html
Copyright © 2011-2022 走看看