本文是一篇基于 Python 的数据分析实践教程,数据来源于“Python之禅”公众号的历史文章,完整源代码和数据可以在公众号“Python之禅“回复「wxdata」获取

加载数据

开启 juypter notebook,创建新的 notebook,导入基础包(以下代码都是在 jupyter notebook 中完成)

# 加这行不需要再写plt.show(),就可以直接显示图像出来

%matplotlib inline

import matplotlib.pyplot as plt

import pandas as pd

import numpy as np

display_columns = ["title","read_num","like_num","comment_num","reward_num","p_date"]

从 CSV 文件中导入,这里的 post.csv 就是你要下载的数据

# 从csv文件中加载

df = pd.read_csv("post.csv")

# 重新设置列的顺序

df = df.reindex(columns=display_columns)

# 将p_date的数据类型从timestamp 转换成 datetime

df.p_date = pd.to_datetime(df['p_date'])

df.head()

前5条数据:

文章与阅读数

数据加载到 Pandas 之后,看下数据的总体概览情况

describe() 函数会返回整个数据集的概览,从上面看出公众号一共发了 203 篇文章(有些文章被我删除没统计到),目前位置文章平均阅读量是 2404,从最高阅读量 8628 到最低阅读量 124 可以说明为什么标准差那么大,因为公众号初期订阅读者少,阅读量也不高,但是随着你读者越来越多,阅读量也会越来越高。

截止2018年1月15日,文章总共被阅读 488153 次 ,如果把删除的文章也加进来就有将近50万阅读量

获取阅读量最高的10篇文章

# 根据阅读数排序,ascending 表示降序排列

top_read_num_10 = df.sort_values(by=['read_num'], ascending=False)[:10]

top_read_num_10 = top_read_num_10[display_columns]

# 重置行索引,drop 表示删除原来的行索引

top_read_num_10.reset_index(drop=True)

ax = top_read_num_10.plot(x='title', y='read_num', kind='barh', figsize=(9,6), fontsize=15)

ax.set_ylabel("") ax.set_xlabel("")

ax.legend().set_visible(False)

历史文章阅读量变化曲线

ax = df.plot(y='read_num', x='p_date', title="文章阅读量趋势",figsize=(9,6))

# 设置y轴标签

ax.set_ylabel("阅读量")

# 设置x轴标签

ax.set_xlabel("")

# 隐藏图例

ax.legend().set_visible(False)

一眼就看出来,阅读量都集中在 2017 这一年,那么前几年究竟发生什么了?是没写文章还是写了文章没人看?我们来统计一下这几年的文章数。

数据告诉我们,13年发了2篇文章(笑cry),而17年发了 149 篇文章(棒棒哒),平均每周大概有近 3 篇文章的更新频率,用柱状图展示就是这样:

ax = year_df.plot(x='p_date', y='total', kind='bar', figsize=(9,6), fontsize=15)

ax.set_ylabel("文章数")

ax.set_xlabel("")

ax.legend().set_visible(False)

# 柱状图上显示数字

for p in ax.patches:

ax.annotate(str(p.get_height()), xy=(p.get_x(), p.get_height()))

文章与赞赏

再来分析我们的文章赞赏情况

总共有101篇文章赞赏,平均两篇文章就有1次赞赏,读者一共贡献了 518 次赞赏,谢谢可爱的读者们支持(微笑)

用同样的方式可以得到文章赞赏数前10的数据:

top_reward_num = df.sort_values(by=['reward_num'], ascending=False)[:10]

top_reward_num = top_reward_num[display_columns]

top_reward_num

top_reward_num.reset_index(drop=True)

最高的一篇文章有83个打赏,这究竟是一篇什么文章,戳→自学Python编程怎么学才不那么孤独

ax = top_reward_num.plot(x='title',

y='reward_num',

kind='barh',

figsize=(9,6),

fontsize=14)

ax.set_ylabel("")

ax.set_xlabel("赞赏数")

ax.legend().set_visible(False)

这里的 kind 用 “barh” 表示横向的条形图

文章与点赞

说完赞赏的数据,再来看看点赞数有文章阅读数有什么关系,我们可以用散点图来表示二者之间关系,散点图用两组数据构成多个坐标点,表示因变量随自变量而变化的大致趋势。

# 散点图

ax = df.plot(kind="scatter", y='like_num', x='read_num',s=10, figsize=(9,6), fontsize=15)

ax.set_xlabel("阅读量")

ax.set_ylabel("点赞数")

z = np.polyfit(df.read_num, df.like_num, 1)

p = np.poly1d(z)

plt.plot(df.read_num,p(df.read_num),"r--")

可以看出文章点赞数大部分集中在10~50之间,而且存在某种线性正相关性,也就是说,文章阅读数越高,点赞数也就越高,如果某篇文章阅读量很高,但是点赞数却很低,这样的文章是标题党或者是资讯类的文章的可能性比较大。

标题关键字

最后,我想基于文章标题做一个词云效果展示,看看这些文章标题都用了哪些关键字。这里需要用到另个包,一个是结巴分词,另一个词云包

conda install jieba

conda install wordcloud

from wordcloud import WordCloud

import jieba

words = []

for i in df.title:

seg_list = jieba.cut(i, cut_all=False)

words.append(" ".join(seg_list))

wordcloud = WordCloud(font_path='/Library/Fonts/Songti.ttc',

background_color="white",

max_words=80,).generate(" ".join(words))

plt.figure(figsize=(9,6))

plt.imshow(wordcloud, interpolation="bilinear")

plt.axis("off")

plt.show()

把所有文章的标题用结巴库分词处理加入到 words 列表中,传递给 WordCloud 组件,另外还需要指定一个中文字体,因为 wordcloud 默认无法处理中文。max_words 用于指定最多显示多少词语

小结

到这里,我们就完成了一个公众号基本分析工作,得到了一些结论,比如阅读量高不是干货内容,而是一些更通俗的文章,而赞赏文章基本集中在带有福利的文章里面(干货内容也得不到什么赞赏,?)

从文章标题看得出这个公众号都是围绕 Python 的文章,关注 Python之禅,教你地道的Python技术

推荐阅读:

python简答题及答案查询公众号和软件_用Python分析了微信公众号相关推荐

  1. python简答题及答案查询公众号和软件_Python 抓取微信公众号账号信息的方法

    搜狗微信搜索提供两种类型的关键词搜索,一种是搜索公众号文章内容,另一种是直接搜索微信公众号.通过微信公众号搜索可以获取公众号的基本信息及最近发布的10条文章,今天来抓取一下微信公众号的账号信息 爬虫 ...

  2. python简答题及答案查询公众号和软件_大学慕课答案免费查询公众号

    [单选] 再障患者口腔护理主要目的(). [问答题,简答题] 初步设计阶段应标识哪些内容? [判断题] 爆炸上限和爆炸下限的差值大于或者等于20%的介质称为易爆介质. [单选] 重度中暑患者浸浴的冷水 ...

  3. 婚姻家庭法简答题及答案

    婚姻家庭法简答题及答案 1.简述亲权的法律特征. 答:亲权是基于父母子女之间的身份权而产生的父母对未成年子女的权利和义务的统一.它具有以下法律特征: (1)亲权是基本的身份权.亲权是父母基于其身份而发 ...

  4. 查询python答案的app_2020知到APP大数据分析的python基础最新免费答案查询

    2020知到APP大数据分析的python基础最新免费答案查询 更多相关问题 [单选] 有关颅内压增高平片表现的描述,错误是() [单选] 当疑有脑转移瘤时,优先的影像检查方法是() [单选] 头颅C ...

  5. 计算机基础应用在线免费答题,计算机应用基础简答题附答案.doc

    计算机应用基础简答题附答案.doc 计算机应用基础简答题1.什么是操作系统操作系统的作用是什么答操作系统在计算机结构中处于硬件裸机与软件系统之间的层次上,它不仅管理位于内层的硬件资源,而且管理和协调外 ...

  6. 基于python的公众号课堂教学_基于Python的微信公众号数据挖掘分析

    基于Python的微信公众号数据挖掘分析 华南农业大学电子工程学院 王 建 黄宁香 [期刊名称]电子世界 [年(卷),期]2019(000)011 [总页数]3 运用Python网络爬虫技术对某时事类 ...

  7. python高级语言应用结课报告_校本课程开发章节测试参考答案,高级语言程序设计Python章节测试参考答案查询...

    校本课程开发章节测试参考答案 从人的一天来说,长时间的一直学习不一定是好事.所以一天到晚都在看书的人,并不一定是学习很好的人,而大多数的学霸肯定不会一天到晚的看书.研究表明,长时间学习不仅不会提升学习 ...

  8. 第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单

    我们来了解一下 自定义菜单创建接口: http请求方式:POST(请使用https协议) https://api.weixin.qq.com/cgi-bin/menu/create?access_to ...

  9. ➢ 微信公众号运营教程(一)申请一个微信公众号

    ➢ 微信公众号运营教程(一)申请一个微信公众号 我们要创建一个个人公众号,首先需要申请一个公众号. 下面详细说说申请过程. 注册地址:https://mp.weixin.qq.com/ 或者直接搜索: ...

最新文章

  1. SQLite与pandas
  2. 神级开源框架发布!Github排名前三,连Spring Cloud 都被干掉了!
  3. Antenna Placement--POJ 3020
  4. hdu6376 度度熊剪纸条 思维
  5. Java里的容器 Collection 简介
  6. 【实验】如何实现远程同一网段互通?
  7. MapReduce实现Apriori算法
  8. 基于 HTML5 Canvas 绘制的电信网络拓扑图
  9. Hystrix 简介和使用
  10. In aggregated query without GROUP BY, expression #2 of SELECT list contains nonaggregated column...
  11. Tomcat VirtualWebappLoader 配置
  12. C++11之 Move semantics(移动语义)(转)
  13. ArcGIS 安装出现Mircrosoft .NET Framework 3.5 sp1问题的解决方案
  14. python画函数图像 保留_如何使用python的matplotlib画反正切函数图像
  15. 创新工场和海豚浏览器宣讲会启示
  16. 计算机的用户账户,计算机用户名是什么意思(如何修改和设置用户名)
  17. IBM新型Tivoli产品搭建绿色销售渠道
  18. PyTorch grad 与 Optimizer(params) 区别
  19. <转>svn提示出错异常为remains in conflict
  20. SpringBoot+Es7.6.1+Jsoup+Vue+Docker打造古诗词实时搜索功能

热门文章

  1. openGL之API学习(二零三)GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T
  2. python adb 自动化测试--20200114档
  3. Spring源码——XmlBeanFactory流程
  4. 键盘win键和alt键功能互换解决办法(亲测实用)
  5. hbuilder前端需要的插件_初学Web前端会用到开发工具(附官网下载地址)
  6. 直播源代码,循环显示、隐藏QQ或微信
  7. RGB,CMYK,HSB各种颜色表示的转换
  8. 昨天晚上看到的几个简短小笑话:)
  9. java基于springboot+vue的宠物用品销售商城 nodejs 前后端分离
  10. [BZOJ4827][Hnoi2017]礼物(FFT)