pandas实战(911紧急电话)

目的:
  1. 统计数据中不同类型的紧急情况的次数
  2. 统计911数据中不同月份电话次数的变化情况
  3. 统计911数据中不同月份不同类型的电话次数的变化情况

数据来源:911电话数据

一、统计数据中不同类型的紧急情况的次数
	file_path = "./911.csv"
    df = pd.read_csv(file_path)  # 行表示电影,列表示电影属性
    print(df.head())
    print(df.info())

首先打印前5行数据和数据的相关信息
在这里插入图片描述
在这里插入图片描述
可以看到,只有zip和twp有缺失,别的都没有缺失
打印一下第一条数据

print(df.iloc[0])

在这里插入图片描述
通过分析,我们知道分类情况存在于title中,那我们将title一列的值按照 切分
,将切分后的title一列转换成列表,遍历列表中每个列表的0号元素就可以取到911电话的类别

temp_list = df["title"].str.split(":").tolist()

在这里插入图片描述
获取所有的类别:

cate_list = list(set(i[0] for i in temp_list))

在这里插入图片描述
接下来我们构造一个423909*3的全零DataFrame,然后按照类别对相应数据赋值成1,并求和就得到了每个类别的电话数量

	# 构造全0数组
    zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(cate_list))), columns=cate_list)
    # 赋值
    for cate in cate_list:
        # df["title"].str.contains(cate)返回全是布尔值的Series
        # 根据布尔索引对相应的数据赋值
        zeros_df[cate][df["title"].str.contains(cate)] = 1 
    sum_res = zeros_df.sum(axis=0)
    print(sum_res)

在这里插入图片描述

方法二

在原始的DataFrame添加种类一列,先获取每个电话的种类放在列表中,根据列表构造DataFrame并添加到原始的DataFrame中,按照列别分组,然后求和

	file_path = "./911.csv"
    df = pd.read_csv(file_path)
    temp_list = df["title"].str.split(":").tolist()
    cate_list = 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"])

在这里插入图片描述

二、 统计911数据中不同月份电话次数的变化情况

有关时间的要求,我们打印一下数据中的时间戳信息

	file_path = "./911.csv"
    df = pd.read_csv(file_path)
    for i in range(10):
        print(df.iloc[i]["timeStamp"])

在这里插入图片描述
分析题目要求后,我们将原始数据中的时间转换成pandas内部的时间类型,然后将此列设置成索引,以方便我们进行每月采样,采样后就可以得到每月电话的次数

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

按每月进行重采样,并统计每月样本的数量(即每月的电话次数)

count_by_month = df.resample("M")["title"].count()
print(count_by_month)

在这里插入图片描述
画图

	x = [i.strftime("%Y-%m-%d") for i in count_by_month.index]
    y = count_by_month.values
    plt.figure(figsize=(20, 12))
    plt.xticks(range(len(x)), x, rotation=45)
    plt.plot(range(len(x)), y)
    plt.show()

在这里插入图片描述
由于两侧统计数据不全,所以采样得到的数据较小

三、 统计911数据中不同月份不同类型的电话次数的变化情况

这个要求和上面的要求差不多,就是把数据按照类别分组后重采样得到数据,然后分别画出3组数据的图即可
1、添加一列,表示类别

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

2、将时间转换为pandas内置时间类型,设置成索引,方便采样

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

3、按照类别分组

grouped = df.groupby(by="cate")

4、对每组数据重采样,并画图

plt.figure(figsize=(20, 8))
    for name, data in grouped:
        count_by_month = data.resample("M").count()["title"]
        # 重新设置时间格式,显示时美观
        x = [i.strftime("%Y-%m-%d") for i in count_by_month.index]
        y = count_by_month.values
        plt.plot(range(len(x)), y, label=name)
        plt.xticks(range(len(x)), x, rotation=45)
    plt.legend(loc="best")
    plt.show()

画图结果:
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bugcoder-9905

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值