前两天接着作业的兴致写了一篇pandas数据分析的文章,简要介绍了一下groupby这个函数的妙用,没想到居然能被推荐,还是有点小激动的。估计掘金的大家更喜欢技术性强一些的文章而非操作细节多的文章吧?今天我们再次暂停一期小白的实战专题,来看看pandas的时间数据如何处理。当然,如标题所述,我们会来一些作图操作来增加文章的趣味性——
以及你们的学习的成就感\( ̄︶ ̄\),毕竟可见的进步才是最吸引人的嘛~
一、时间数据类型
对于这种数据类型,教科书般的官方解释是时间序列是指在一定时间内按时间顺序测量的某个变量的取值序列。
理解起来并不困难,你可以想象一下一个人一天的体温变化、一个交易日中股市某指数的变化等。
在pandas中,最常见的数据类型是datetime
以及timedelta
。
二、datetime
顾名思义,datetime分为date和time两部分。
如2022-10-07 22:33:00就是一个datetime,表示的是一个具体的时间戳。
下面我们来定义一个时间戳:
如上图。pandas自带的to_datetime
函数可以将一个字符串转化成时间戳类型且这个功能比我们想象中强大,它可以转化各种格式的文本时间戳
这里就是python这门语言的魅力了。作为一门高级语言,它虽然没有C语言的效率和速度,但是它有很大的包容性,你的一切可能的操作都被函数设计者考虑过一次了。说实在的,当今计算机硬件水平加持下,对于大多数的工作,低级语言的速度优势其实并不明显
to_datetime支持转化时间序列,以列表形式传入即可。
三、定义时间戳序列与周期的定义
这个很简单,你只要记住一一对应关系就行了:
m是月,d是天,w是星期,y是年 复制代码
好吧,其实不用记,这些就是英文首字母而已。
接下来我们就可以仿照range函数的模式来定义一串以一定周期为间隔的时间数据了:
r = pd.date_range('1/10/2011', periods=10, freq='5y')#用这个月最后一天代表这个月
在实际的使用中,时间戳往往作为索引存在,比如下面我们创建一个以时间戳为键的数据框:
rng = pd.date_range('2019-01-01', periods=16, freq='D') f1=pd.DataFrame({"a":np.random.randint(0,10,size=(len(rng))),"b":np.random.randint(0,10,size=(len(rng)))}, index=rng)
是不是看上去和谐许多了?
我们只需要进行loc定位就可以提取到一天的数据了。非常方便
四、简易作图
我只能说,有这“简易”二字
那岂不是一句plot走天下?
series.plot(kind="bar") 复制代码
你就可以得到series的条形图了。
通过设定kind里的参数,你可以作出你想要的图表
这里采自官方文档,罗列一个kind表:
‘line’ : line plot (default)#折线图
‘bar’ : vertical bar plot#条形图
‘barh’ : horizontal bar plot#横向条形图
‘hist’ : histogram#柱状图
‘box’ : boxplot#箱线图
‘kde’ : Kernel Density Estimation plot#Kernel 的密度估计图,主要对柱状图添加Kernel 概率密度线
‘density’ : same as ‘kde’ ‘area’ : area plot
‘pie’ : pie plot#饼图
‘scatter’ : scatter plot#散点图 需要传入columns方向的索引
来看看效果吧~
期待你们做的更好看的图表。