python - 时间序列

算例

统计911数据中,不同类型紧急情况的次数

步骤:

  1. 读取911数据
  2. 将911数据中心紧急情况类型列提取出来
  3. 设置一个零矩阵,行数为911数据的列,行数为紧集情况类型数量
  4. 当911数据中某行为某一种紧集情况,此时令零矩阵中该紧急情况列所在的行值设为1
  5. 遍历所有情况后的0矩阵变为包含元素1的矩阵,对该矩阵求列和

方法一

import pandas as pd
import numpy as np

df = pd.read_csv('./911.csv')

case_list = df['title'].str.split(': ').to_list()
case_set = list( set( i[0] for i in case_list))

df_zeros = pd.DataFrame(np.zeros((df.shape[0],len(case_set))),columns=case_set)

for case in case_set:
    df_zeros[case][df['title'].str.contains(case)]  = 1

df_sum = df_zeros.sum(axis=0)
print(df_sum)

方法二
步骤:

  1. 读取911数据
  2. 紧集情况类型设置成911数据中新的列向量
  3. groupby分类求和
import numpy as np
import pandas as pd

df = pd.read_csv('./911.csv')

temp_list = df['title'].str.split(':').tolist()
case_list = [case[0] for case in temp_list ]

df['case'] = pd.DataFrame(np.array(case_list).reshape((df.shape[0],1)))
print(df.groupby(by='case').count()['title'])

不同月份紧集情况变化

步骤:

  1. 读取911数据
  2. 将数据的时间格式化后,令为DataFrame的行索引
  3. 使用resample按月对紧集情况重采样求和
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

df = pd.read_csv('./911.csv')

df['timeStamp'] = pd.to_datetime(df['timeStamp'])
df.set_index(df['timeStamp'],inplace=True)

month_count = df.resample('M').count()['title']

_x = month_count.index
_y = month_count.values

_x = [i.strftime('%Y%M%d') for i in _x]

plt.figure( figsize=(20,8),dpi=80 )
plt.plot(range(len(_x)),_y)
plt.xticks(range(len(_x)),_x,rotation=45)
plt.show()

不同月份不同类型紧集情况变化情况

步骤:

  1. 读取911数据,将时间格式化
  2. 对911数据不同类型紧集情况进行分类,分类后成为‘case’列
  3. 格式化后的时间设置为911数据的行索引
  4. 利用groupby对‘case’列中紧急情况进行分类
  5. 对不同类型紧集情况使用resample函数按月重采样,
  6. 画图

需要注意的地方:
不能再设置‘case’列 reshape之前改变911数据的行索引

import pandas as pd
import  numpy as np
from matplotlib import pyplot as plt

df = pd.read_csv('./911.csv')
df['timeStamp'] = pd.to_datetime(df['timeStamp'])

temp_list = df['title'].str.split(':').tolist()
case_list = [case[0] for case in temp_list]
df['case'] = pd.DataFrame( np.array(case_list).reshape( (df.shape[0],1) ) )

df.set_index(df['timeStamp'],inplace=True)

plt.figure(figsize=(20,8),dpi=80)

for data_index, data_values in df.groupby(by='case'):
    count_by_month = data_values.resample('M').count()['title']
    _x = count_by_month.index
    _y = count_by_month.values
    _x = [i.strftime('%Y%m%d') for i in _x]

    plt.plot(range(len(_x)),_y,label=data_index)

plt.xticks(range(len(_x)),_x,rotation=45)
plt.legend(loc='best')
plt.show()

城市PM2.5随时间的变化

步骤:

  1. 读取数据
  2. 利用PeriodIndex将数据表中分散的时间格式化
  3. 格式化的时间设置为行索引
  4. 利用resample对数据重采样
  5. 取不同城市的PM值,画图
import  pandas as pd
import numpy as np
from matplotlib import pyplot as plt

df = pd.read_csv('./BeijingPM20100101_20151231.csv')

period = pd.PeriodIndex(year = df['year'],month = df['month'],day=df['day'],hour=df['hour'],freq='H')
df['time'] = period

df.set_index(df['time'],inplace=True)
df = df.resample('7D').mean()

data_US = df['PM_US Post']
data_CN = df['PM_Nongzhanguan']


_x1 = [i.strftime('%Y%m%d') for i in data_US.index]
_x2 = [i.strftime('%Y%m%d') for i in data_CN.index]

_y1 = data_US.values
_y2 = data_CN.values

plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x1)),_y1,label='US_POST')
plt.plot(range(len(_x2)),_y2,label='CN_Nnongzhanguan')

plt.xticks(range(0,len(_x1 ),10),list(_x1)[::10],rotation=45)
plt.legend(loc='best')
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值