欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-03-07 16:54:39
...

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")
df=pd.read_csv(file_path)
pd.set_option('display.max_columns', 20)

# print(df.head(1))
# 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")
df=pd.read_csv(file_path)
pd.set_option('display.max_columns', 20)

# print(df.head(1))
# 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.head(5))
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)

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

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")
df=pd.read_csv(file_path)
pd.set_option('display.max_columns', 20)

df["timeStamp"]=pd.to_datetime(df["timeStamp"])
df.set_index("timeStamp",inplace=True)
#print(df.head(10))
count_by_month=df.resample("M").count()["title"]
#print(count_by_month.head(10))
_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()

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

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"


#吧时间字符串转换为时间类型设置为索引
df=pd.read_csv(file_path)
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"]
    # print(count_by_month.head(10))
    _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()

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

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

import pandas as pd
from matplotlib import pyplot as plt

file_path="./BeijingPM20100101_20151231.csv"

df=pd.read_csv(file_path)

print(df.head())
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
# print(df.head(10))


#把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()

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

上一篇: 计算机基础

下一篇: Top K问题