Fork me on GitHub

图解Pandas一周年

《图解Pandas教程》:一周年啦

今天4-24是个特殊的日子:尤而小屋的《图解Pandas》系列一周年!

从爆炸函数开始

从2021-04-24的第一篇《一切从爆炸函数开始》,到最近的一篇《Pandas的10大索引+5大基操》,刚好历时了365天,让Pandas来见证吧:

两行代码就可以查看两个任意日期时间相隔的天数,这仅仅是Pandas众多功能的冰山一角👏

当时爆炸函数使用的一个案例:

为什么写《图解Pandas》

Pandas是一个Python的一个第三方数据处理和分析的库,当自己在学习Python数据分析、数据挖掘、机器学习的时候,绕不开Pandas的。

所以,从去年开始就一直坚持写这个系列,大部分的知识点以前都有接触过,但是没有系统地整理出来,一年写下来也算是温故而知新,同时自己也学习到了很多新的知识点。

文章中出现过的部分思维导图:

这一年写了什么?

第一部分:基础操作

  1. Pandas简介+Series、DataFrame的创建
  2. Pandas中五花八门的取数技巧(太多了)
  3. 基于Pandas的数据探索+数据类型转换
  4. Pandas的10大索引
  5. 多层索引的6种方法

第二部分:技巧部分

这个是重点部分,也是需要经常用到的功能部分:

  1. groupby机制
  2. 排名rank机制
  3. 排序sort_values机制
  4. 重复值+缺失值处理
  5. 数据合并
  6. 轴旋转
  7. 透视表生成
  8. 自定义排序功能

第三部分:实用函数

  1. map+apply+applymap
  2. 移位函数shift
  3. 派生函数assign
  4. 行列转换:melt、transpose、wide_to_long、explode
  5. transform
  6. 文本处理双雄:extract、extractall
  7. 20个统计函数

第四部分:配置+美化

  1. pandas内置绘图
  2. pandas表格美颜
  3. pandas的配置技巧

第五部分:对比SQL,学习Pandas

  1. 窗口函数功能实现
  2. groupby机制对比
  3. group_concat
  4. 数据合并与连接

文章爬虫

下面通过爬虫的方法从微信后台获取文章标题、发文时间等信息

找错了方向

一开始小编是准备直接从微信的后台获取到相关网页的源码,然后通过正则表达式从源码中解析出来:标题+时间

1、源码在这里

上面每一对<li>标签就包含一篇文章的基本信息,一开始很开心的!

2、以第一篇文章为例:标题和发文时间藏在这里

微信牛逼:本来小编是准备直接将这段前端的代码进行复制,然后拿去正则解析,居然不能copy!!!微信棒棒👍

于是小编又去网页那边折腾了:终于又找到了我们想要的信息。

而且,微信公众号的后台是发送的ajax请求,多滚动几次,所有的文章才全部显示出来(上面的左边)

找对了方向

我们发送请求来获取数据:成功get数据!

尝试解析一个URL下的信息:

  • 标题
  • 发文时间(时间戳,后续处理)
  • 是否付费
  • 是否可读

获取全部信息

1、构造整体URL

数据处理

1、索引重置

2、时间戳转化

转化成功:

3、时间排序

有几篇文章重复发过,我们来删除下

通过title字段来删除重复值:再进行统计的时候就没有重复值了

付费与否

统计了下,总共是53篇文章,有2篇是付费的,谢谢付费的粉丝~

发文规律

1
df["create_time"] = pd.to_datetime(df["create_time"])

新增加3个字段:

1
2
3
df["year"] = df["create_time"].dt.year  # 年份
df["month"] = df["create_time"].dt.month # 月份
df["hour"] = df["create_time"].dt.hour # 具体小时

年份对比

可以看到目前大部分还是2021年发的文章,不过相信今年会超过去年的~

1
2
3
4
5
6
7
8
9
10
import plotly_express as px

fig = px.pie(df1,names="year",values="number")

fig.update_traces(
textposition='inside',
textinfo='percent+label'
)

fig.show()

月份对比

1
2
3
4
5
6
7
8
9
10
fig = px.treemap(
df2, # 传入数据
path=[px.Constant("all"),"year","month"],
values="number" # 数值
)

fig.update_traces(root_color="lightskyblue")
fig.update_layout(margin=dict(t=30,l=20,r=25,b=30))

fig.show()

发文时间点

统计每个时间点的发文数量**:0点发文这么多**!!!!(一般文章都是定时发的)

可以得到两点主要的结果:

  1. 0点按时发文真的是习惯了
  2. 大部分文章都是晚上回来写好了再发的

年份+时间点

1
px.bar(df4,x="hour",y="number",barmode="group",color="year")

对比2022年和2021年的发文时间点:

1
2
3
4
5
6
7
fig = px.bar(df4,
x="hour",
y="number",
barmode="group",
color="year")

fig.show()

总结一点:少熬夜吧!!!

文章特色

自己在写作的过程中,参考了官网和很多资料,也有自己平时使用的一些心得,总结下几个特色:

  • 案例丰富:每篇文章都是通过案例的模拟来进行说明
  • 图文并茂:文章使用了大量的图形来解释函数的使用,更加直观,加深印象
  • 贴近业务:很多模拟数据和逻辑都是可以直接套用在真实的业务场景中
  • 源码实在:全部在jupyter notebook中,运行即可得到效果!

后续工作

目前写的内容真的仅仅是Pandas库的冰山一角,还有很多的内容没有展开。但是如果读者能够认真看完,并且自己实际去运行和理解代码,相信入门pandas必定是问(听)题(你)不(吹)大(牛)!

📢📢📢公告:《Pandas数据分析训练营-第一期》5月中旬即将开始,欢迎咨询小编!如果有问题,也可以一起交流~

本文标题:图解Pandas一周年

发布时间:2022年04月24日 - 09:04

原始链接:http://www.renpeter.cn/2022/04/24/%E5%9B%BE%E8%A7%A3Pandas%E4%B8%80%E5%91%A8%E5%B9%B4.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Coffee or Tea