→@TOC
应用
统计911报警电话原因的分类 第一种方式:构建全为0的Dataframe
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path = "./911.csv"
df = pd.read_csv(file_path)
temp_list = df["title"].str.split(":").tolist()
cate_list = list(set([i[0] for i in temp_list]))
print(cate_list)
zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(cate_list))),columns=cate_list)
for cate in cate_list:
zeros_df[cate][df["title"].str.contains(cate)] = 1
sum_res = zeros_df.sum(axis=0)
print(sum_res)
输出:
['Traffic', 'Fire', 'EMS']
Traffic 87465.0
Fire 37432.0
EMS 124844.0
dtype: float64
第二种方式:通过构建新的一列
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path = "./911.csv"
df = pd.read_csv(file_path)
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)))
print(df.groupby(by='cate').count()['title'])
输出:
cate
EMS 124840
Fire 37432
Traffic 87465
Name: title, dtype: int64
pandas 中的时间序列
设置时间序列: [时间点的设置] pd.data_range(start=None,end=None,periods=None,freq=‘D’) [时间段的设置]: PeriodIndex() :将分开的时间字符串通过此方法转化为pandas的时间类型
Parameters
----------
start : str or datetime-like, optional
Left bound for generating dates.
end : str or datetime-like, optional
Right bound for generating dates.
periods : int, optional
Number of periods to generate.
freq : str or DateOffset, default 'D'
Frequency strings can have multiples, e.g. '5H'. See
:ref:`here <timeseries.offset_aliases>` for a list of
frequency aliases.
关于freq的参数的更多表示方法: D→每日 B→每工作日 H→每小时 S→每秒 L/ms→每毫秒 U→每微秒 M→每月最后一个日历日 BM→每月最后一个工作日 MS→每月第一个日历日 BMS→每月第一个工作日
pandas重采样: 指的是将时间序列从一个频率转化为另一个频率进行处理的过程,将高频率数据转化为低频率数据为降采样,低频率转化为高频率为升采样,resample()
应用:911数据中不同月份不同类型的电话的次数的变化情况
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path = "./911.csv"
df = pd.read_csv(file_path)
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)
print(df.head(5))
plt.figure(figsize=(16, 9), dpi=144)
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()
|