【Python数据分析】根据桩号,分路段统计分析高速公路交通事故数

本文介绍了如何使用Python库xlrd和xlwt读取Excel数据,对敏感信息进行处理后,按2公里路段划分,统计事故数量、伤亡和路产损失。代码展示了数据排序、添加头尾桩号以及结果的导出过程。
摘要由CSDN通过智能技术生成

数据准备

为保护数据隐私,去除一些敏感信息,如下图所示:
在这里插入图片描述
这里为了后续代码方便分析,(1)按照桩号将数据升序排序;(2)在桩号数据的头尾两端添加任意桩号(如表中行1于行13)。

代码

这里以2公里为一个路段进行统计,统计路段的事故数、伤亡人数和路产损失等数据,并将结果输出到新表格,代码如下:

import xlrd
import xlwt

# 读取Excel文件
path = "C:/Users/.............xls"
workbook = xlrd.open_workbook(path)

Section_len = 2  # 以2km为一个路段,可以改成其他长度
road_start = 1762  # 起始桩号

# 选择sheet
sheet_input = workbook.sheet_by_name("sheet1")

# 获取行数和列数
num_rows = sheet_input.nrows
num_cols = sheet_input.ncols
print("Number of rows:", num_rows)
print("Number of columns:", num_cols)

# 获取列(按列索引获取)
Stake_mark = sheet_input.col_values(4)
Injured = sheet_input.col_values(9)
Serious_wound = sheet_input.col_values(10)
Death = sheet_input.col_values(11)
Road_loss = sheet_input.col_values(12)

# 定义统计量
Section_count = 0  # 路段事故数统计
Injured_and_Death = 0  # 路段伤亡统计
Road_loss_count = 0  # 路段路产损失统计
num_Injured_and_Death = 0  # 有伤亡的事故数
num_Road_loss_count = 0  # 有路产损失的事故数

# 创建excel表格类型文件,保存导出的数据
book_output = xlwt.Workbook(encoding='utf-8', style_compression=0)
# 在excel表格类型文件中建立一张sheet表单
sheet_output = book_output.add_sheet('sheet1', cell_overwrite_ok=True)
# 自定义列名
col = ['路段编号', '事故数', '伤亡人数', '路产损失', '伤亡事故数', '路产损失事故数']
for c in range(len(col)):
    sheet_output.write(0, c, col[c])  # 在第0行写入列名

# 遍历每一行,获取数据
for row in range(1, num_rows):
    NO_i_p = int((int(Stake_mark[row - 1][0:4]) - road_start) / Section_len)  # 上一行的路段编号
    NO_i = int((int(Stake_mark[row][0:4]) - road_start) / Section_len)  # 该桩号属于第i路段

    if row != 1 and NO_i != NO_i_p:  # 如果当前桩号与上一行的路段不同,就进行数据写入
        # 依次写入数据
        sheet_output.write(NO_i-1, 0, "K" + str(road_start + (NO_i-1) * Section_len) + "-K" + str(road_start + NO_i * Section_len - 1))
        sheet_output.write(NO_i-1, 1, Section_count)
        sheet_output.write(NO_i-1, 2, Injured_and_Death)
        sheet_output.write(NO_i-1, 3, Road_loss_count)
        sheet_output.write(NO_i-1, 4, num_Injured_and_Death)
        sheet_output.write(NO_i-1, 5, num_Road_loss_count)
        # 重置局部变量
        Section_count = 0
        Injured_and_Death = 0
        Road_loss_count = 0
        num_Injured_and_Death = 0
        num_Road_loss_count = 0

    Section_count += 1
    Injured_and_Death = Injured_and_Death + Injured[row] + Serious_wound[row] + Death[row]
    Road_loss_count += Road_loss[row]
    if Injured[row] != 0 or Serious_wound[row] != 0 or Death[row] != 0:
        num_Injured_and_Death += 1
    if Road_loss[row] != 0:
        num_Road_loss_count += 1
 
# 保存文件
save_path = 'C:/Users/..............output.xls'
book_output.save(save_path)

输出结果

输出的统计分析结果如下图所示:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值