# 2020-11-23 数据科学库(6) pandas时间序列，911、pm2.5数据处理

1411-李同学

, , ,

## 1、对911统计的数据处理

### 1.1根据事故的不同类型分类统计

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./911.csv"
#myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
pd.set_option('display.max_columns', 20)

# print(df.info())

#获取分类情况
#print(df["title"].str.split(":"))
temp_list=df["title"].str.split(":").tolist()
cate_list=list(set([i[0]for i in temp_list]))
print(cate_list)

#构造0的数组
zero_df=pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)

#赋值:方法一遍历每个分类
for cate in cate_list:
zero_df[cate][df["title"].str.contains(cate)]=1
print(zero_df)

#方法二：遍历每一行
# for i in range(df.shape[0]):
#     zero_df.loc[i,temp_list[i][0]]=1

data1=zero_df.sum(axis=0)
print(data1)


### 1.2 第二种方法统计事故类型

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./911.csv"
#myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
pd.set_option('display.max_columns', 20)

# print(df.info())

#获取分类情况
#print(df["title"].str.split(":"))
temp_list=df["title"].str.split(":").tolist()
cate_list=[i[0]for i in temp_list]
print(cate_list)
#在df中添加一列
df["cate"]=pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1)))

print(df.groupby(by="cate").count()["title"])


## 2、pandas时间序列

pd.data_range(start=None,end=None,periods=None,freq="D"


### 2.1示例

import pandas as pd

df=pd.date_range(start="20171031",periods=10,freq="M")
print(df)


### 2.2 时间戳的转换– pandas重采样

df["timeStamp"]=pd.to_datetime(df["timeStamp"],format=)


911 不同月份不同次数

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./911.csv"
#myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
pd.set_option('display.max_columns', 20)

df["timeStamp"]=pd.to_datetime(df["timeStamp"])
df.set_index("timeStamp",inplace=True)
count_by_month=df.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.figure(figsize=(20,8),dpi=80)

plt.plot(range(len(_x)),_y)

plt.xticks(range(len(_x)),_x,rotation=45)

plt.show()


## 3、911：将不同月份不同类型的电话次数做折线图

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./911.csv"

#吧时间字符串转换为时间类型设置为索引
pd.set_option('display.max_columns', 20)
df["timeStamp"]=pd.to_datetime(df["timeStamp"])

#设置添加列，表示分类，
temp_list=df["title"].str.split(":").tolist()
cate_list=[i[0]for i in temp_list]
df["cate"]=pd.DataFrame(np.array(cate_list).reshape((df.shape[0],1)))

#将索引放到后面 很重要
df.set_index("timeStamp",inplace=True)

plt.figure(figsize=(20, 8), dpi=80)
#分组
#分组 group_name是对应的ems，traffic标签，groupdata是筛选出来的数据
#对groupdata进行时间重采样
for group_name, group_data in df.groupby(by="cate"):
#对不同的分类都进行绘图
count_by_month = group_data.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=group_name)

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


## 4、pm2.5案例：对比中美记录pm2.5随时间变化的折线图

import pandas as pd
from matplotlib import pyplot as plt

file_path="./BeijingPM20100101_20151231.csv"

print(df.info())

#periodindex 把分开的时间字符串通过periodIndex的方法转换为pandas的时间类型
period=pd.PeriodIndex(year=df["year"],month=df["month"],day=df["day"],hour=df["hour"],freq="H")
# print(period)
# print(type(period))
df["datetime"]=period

#把datetime设置为索引
df.set_index("datetime",inplace=True)

#对df进行降采样
df=df.resample("7D").mean()

#处理缺失数据,删除缺失数据
# print(df["PM_US Post"])
data=df["PM_US Post"]
data_china=df["PM_Dongsi"]

_x=data.index
_x=[i.strftime("%Y-%m-%d")for i in _x]
_x_china=[i.strftime("%Y-%m-%d")for i in data_china.index ]
_y_china=data_china.values
_y=data.values

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

plt.plot(range(len(_x)),_y,label="US_Post")
plt.plot(range(len(_x_china)),_y_china,label="CN_Post")
plt.xticks(range(0,len(_x_china),10),list(_x_china)[::10],rotation=45)
plt.legend(loc="best")
plt.show()


Vieu3.3主题

Q Q 登 录