知乎320万用户的个人信息分析与可视化

Part 1: 动机

作为一个知乎的重度用户,我深深的被知乎社区的高素质群体所吸引,这也是我在微信朋友圈、新浪微博、baidutieba等社区见不到的东西。那么为什么知乎这个社区的群体素质偏高呢,这些用户究竟都是干什么的,来自哪里,从事什么职业,爱好什么话题呢,有多少名校的学生?等等,这些有趣的问题都是我所关心的。

Part 2: 数据

我用scrapy爬取了知乎328w用户的基本信息。这些信息包括:

aggree_count: 得到的点赞数
answer_count: 得到的支持数
carrer : 职业
city :所在城市
company :所在公司
education :哪所大学毕业
most_good_topic :最擅长的话题
topic_list: 关注哪些话题
job :工作

这些信息被我放在了user1.json-user48.json这48个json文件中。共计差不多1.7G,如果想要数据的话,可以私信我,或者直接发邮件给我。邮箱和联系方式我都会在下面给出。

Part 3: 读取并清理数据

import os
import ujson as json  #使用ujson解析更快一些
import pandas as pd

data_list = []
base_dir = 'E:\研究生阶段课程作业\python\数据堂数据\data1\zhihu_bigdata'data_list = []

for i in range(1,49):
    file_name = 'user%d.json' %i
    df = json.load(open(os.path.join(base_dir,file_name)))
    data_list.extend(df)

df = pd.DataFrame(data_list)

上面的10多行代码的作用是:一次解析user1.json到user48.json文件,最后转化成pandas.Dataframe中。

df.info()    #总体了解一下信息
out: <class 'pandas.core.frame.DataFrame'>
Int64Index: 3288208 entries, 0 to 3288207
Data columns (total 15 columns):
aggree_count       object
answer_count       object
article_count      object
article_list       object
carrer             object
city               object
company            object
education          object
job                object
most_good_topic    object
name               object
question_count     object
thanks_count       object
topic_list         object
url                object
dtypes: object(15)
memory usage: 401.4+ MB

我们的df数据帧中包含了328w条数据,共计有15个字段,只有部分字段是我们感兴趣的,我们提取感兴趣的字段。并随机抽样1个用户查看结果:

df = df[["aggree_count","answer_count","carrer","company","job","education","city","most_good_topic","topic_list"]]   #选取我们感兴趣的话题
df.sample(1)  #抽样选取1个,查看情况

|aggree_count |answer_count |carrer |company |job |city |most_good_topic |topic_list |
| ------------- |:-------------:| -----:|
|[32] |[11] |[]|[]|[]|北京|[iOS] |[应用, 设计, RSS, iPhoto, iPhone 应用, 健康, Dribb...] |
从显示结果上来看,每个数据段的格式都是list,这些并不是我们想要的,对于有的数据段,我们需要的是int格式,有的数据段,我们需要的是字符串格式。

def list2str(obj):
    if (isinstance(obj,list)):
        return ''.join(obj)
    else:
        return obj
def list2int(obj):
    if(isinstance(obj,list)):
        if obj:
            return obj[0]
    else:
        return obj

上面两个函数分别把list转化成int和string

df.aggree_count  = df.aggree_count.map(list2int)
df.answer_count = df.answer_count.map(list2int)

df.carrer = df.carrer.map(list2str)
df.company = df.company.map(list2str)
df.job = df.job.map(list2str)
df.city = df.city.map(list2str)
df.education = df.education.map(list2str)
df.most_good_topic = df.most_good_topic.map(list2str)
df.sample(10)  #随机抽取10个样本查看
样本

我们蛋疼的发现,在carrer和job上,有的人只填了一个,或者两个都填了,或者两个都没填,为了了解知乎用户的具体职业,我们为数据框新添了一个字段:occupation

#我们再来了解一下,在知乎上活跃的人,都是做什么工作的:job和career
#因为有的用户,只有job信息,或者career信息,或者都有,或者都没有
#对于这两项信息全部没有的用户,我们直接忽略
#如果都有,那么我们选择career
#只有一个话,我们选择有的那一个
def job_career2occupation(obj):
    if obj['carrer'] and not obj['job']:
        return obj['carrer']
    elif (not obj['carrer'] and obj['job']):
        return obj['job']
    elif (not obj['carrer'] and not obj['job']):
        return ''
    else:
        return obj['carrer']
df['occupation'] = df.apply(job_career2occupation,axis=1) 
df.replace(to_replace = '',value = np.nan,inplace=True)  #对于数据段出现空的字符段,我们用np.nan来代替。

Part 4: 数据可视化

4.1:出获得点赞数最多的人,最擅长哪些领域

假如我们是一个知乎新用户,我们希望得到更多人的关注和认可,那么我们首先应该知道那些话题更容易得到别人点赞
我们尝试着找出获得点赞数最多的人,最擅长哪些领域

most_good_topic = df.sort(columns=['aggree_count','answer_count'],ascending = [False,False]).most_good_topic
most_good_topic.dropna(inplace=True)
most_good_topic.drop_duplicates(inplace = True)
most_good_topic.values[:20]
out: array(['人物 ', '德语 ', '心理学专业 ', '阅读 ', 'DotA ', '游戏 ', '社会现象 ', '健康 ',
       '汽车 ', '调查类问题 ', '纽约 ', '电子商务 ', '足球 ', '编程 ', '积累中 ', '工作体验 ',
       '摄影入门 ', '经济学 ', '飞机 ', '视频剪辑 '], dtype=object)

我们对在知乎上特别活跃的用户进行了统计,发现获得点赞数比较多的人,擅长哪些问题。

我们还想知道,知乎上的这些超级活跃的用户,都是干什么工作的

most_occupation = df.sort(columns=['aggree_count','answer_count'],ascending = [False,False]).occupation
most_occupation.dropna(inplace=True)
most_occupation.drop_duplicates(inplace = True)
most_occupation.dropna(inplace=True)
out: array(['信息传媒', '教育', '民用航空业', '高等教育', '地产建筑', '计算机硬件', '首席点赞师', '汽车',
       '计算机软件', '法律', '电子商务', '建筑设备', '互联网', '金融', '飞行员', '政府', '创意艺术',
       '高新科技', '广播电视', '进出口贸易'], dtype=object)

从上面的结果上,可以看出,知乎上用户高素质也是有原因的,活跃的用户大多数从事信息,互联网,高等教育等前沿职业。

我们想知道知乎上的用户,在哪里工作。
换句话说,我们想知道那些地区的知乎用户比较集中
我们提取用户拥有量前20位的才城市

import matplotlib.pyplot as plt
import seaborn as sns
top_20city = df.city.value_counts()[:20]
sns.set_style("darkgrid")
bar_plot = sns.barplot(x=top_20city.index,y=top_20city.values,
palette="muted",
x_order=top_20city.index.tolist())
for label in bar_plot.get_xticklabels():
     label.set_fontproperties(font)
plt.xticks(rotation=90)
plt.show()
用户拥有量前20个城市

从结果上看,北上深广占据前四名,同时也说明了这四个大城市对人才的吸引力,另外杭州表现的也很突出,我觉得可能的原因是杭州也非常好的创业文化和基因,难道是阿里带动的,这个需要进一步去发现。

我们想知道哪些高校的学生用知乎,换句话说,
我们希望找出拥有用户数量最多的二十个高校。

import matplotlib.pyplot as plt
import seaborn as sns
top_20education = df.education.value_counts()[:20]
sns.set_style("darkgrid")
bar_plot = sns.barplot(x=top_20education.index,y=top_20education.values,
palette="muted",
x_order=top_20education.index.tolist())
for label in bar_plot.get_xticklabels():
     label.set_fontproperties(font)
plt.xticks(rotation=90)
plt.show()

高校拥有用户数量排行版

非常出乎我的意料,竟然浙江大学的知乎用户最多,难道浙江大学招生已经那么多啦,还是我的样本数太少了(328w不算少啦),但是令我欣慰的是大武大排名第二,华中柯基大学竟然也排名第四,呵呵。

我们想知道各个地区的用户的就业情况,准确来说,我们想知道各个城市的高素质人群最喜欢从事什么职业,这在城市之间有差别吗,我们取每个城市,用户从业最多的五个职业

上面的表述转化成程序语言就是:对数据框按城市分组,再找出每个城市的人从业最多的五个职业,为了简单,我们只选择那二十个大城市
df_big_city = df[df.city.isin(top_20city.index)] #我们的研究对象只是知乎用户数量的前二十名城市
df_big_city_with_occupation = df_big_city[df_big_city.occupation.notnull()] #过滤掉职业为空的用户
def get_top5_city_occupation(grouped):
        grouped = grouped.occupation.value_counts()[:5]
        return grouped
group = df_big_city_with_occupation.groupby('city')
group.apply(get_top5)
out: 
city       
上海    互联网      28149
      计算机软件     8749
      金融        4343
      高新科技      3947
      电子商务      3045
北京    互联网      80233
      计算机软件    11418
      高新科技      6138
      金融        5250
      电子商务      4802
南京    互联网       4579
      计算机软件     2805
      高等教育      1021
      高新科技       949
      通信         720
厦门    互联网       2638
      计算机软件      692
      电子商务       489
      电子游戏       375
      高新科技       368
大连    计算机软件      869
      互联网        653
      高等教育       225
      金融         195
      高新科技       189
天津    互联网       1442
      计算机软件      687
      高等教育       542
      金融         340
      地产建筑       325
               ...  

由于篇幅有限,我没有列出所有的城市,我们可以看到在前二十个城市中,排名前五的职业,都有互联网和计算机软件,另外科研这个职业在所有的城市中,只出现一次,还是在美国,我们可以大致猜测一下,去美国工作的人应该有相当一部分拥有博士背景甚至更高的学历,看来真的是美国的科研环境好一些,中国都是忙着赚钱呢。


排名前二十城市的职业情况

Part 5 总结

其实我还远远没有挖掘掉这320w用户的信息,我们还可以得到更多的信息,数据是会说话的,如果我的工作对你有一点启发或者帮助的话,那么我将很高兴,如果你想与我讨论的话,或者需要源代码甚至所有的数据的话,请联系我。我也可能会放在我的github上。
QQ :1527927373
EMAIL :QQ邮箱

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,373评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,732评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,163评论 0 238
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,700评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,036评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,425评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,737评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,421评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,141评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,398评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,908评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,276评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,907评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,018评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,772评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,448评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,325评论 2 261

推荐阅读更多精彩内容