python数据分析之公交IC卡刷卡分析

作者:我叫你一声你敢答应吗? 时间:2022-02-10 02:23:56 

一、背景

交通大数据是由交通运行管理直接产生的数据(包括各类道路交通、公共交通、对外交通的刷卡、线圈、卡口、GPS、视频、图片等数据)、交通相关行业和领域导入的数据(气象、环境、人口、规划、移动通信手机信令等数据),以及来自公众互动提供的交通状况数据(通过微博、微信、论坛、广播电台等提供的文字、图片、音视频等数据)构成的。

现在给出了一个公交刷卡样例数据集,包含有交易类型、交易时间、交易卡号、刷卡类型、线路号、车辆编号、上车站点、下车站点、驾驶员编号、运营公司编号等。试导入该数据集并做分析。

二、任务要求

1.分别计算早上7点前和晚上10点之后的公共交通上车刷卡量;

2.绘制并输出当天各小时公交刷卡量变化的折线图;

3.构造一个乘客搭乘时间分析函数,计算各小时区间乘客的平均公交搭乘时间及其标准差;

4.绘制并输出不同类型的一卡通交易数量及其占比的饼图;

5.分别构造线路类、司机类和车辆类,将线路编号1101–1120的线路及其所对应的司机和车辆信息输出为20个txt文档,并保存到一个文件夹中;

6.分析搭载乘客情况,确定服务乘客人次最多的10个司机、10条线路和10台车辆。

三、使用步骤

1.引入库

代码如下:


from numpy import *
import pandas as pd
import matplotlib.pyplot as plt
from collections import Counter

2.导入数据

代码如下:


# 导入csv文件
ICdata = pd.read_csv('D:/人工智能编程语言/Python - 作业4/ICData.csv', sep=',', encoding='utf-8')

3.任务一

代码如下:


# 1.分别计算早上7点前和晚上10点之后的公共交通上车刷卡量;
ICdata['交易时间'] = pd.to_datetime(ICdata['交易时间'], format='%Y/%m/%d %H:%M:%S')  # 将字符串类型转换为datetime类型
paytime1 = ICdata[ICdata.交易时间 < '2018/4/1 07:00:00']
paytime2 = ICdata[ICdata.交易时间 > '2018/4/1 22:00:00']
print('早上七点前的刷卡量为:', paytime1.交易时间.count())  # 输出在早上七点前的刷卡量
print('晚上十点后的刷卡量为:', paytime2.交易时间.count())  # 输出在晚上十点后的刷卡量
print('\n')

输出:

python数据分析之公交IC卡刷卡分析

4.任务二

代码如下:


# 2.绘制并输出当天各小时公交刷卡量变化的折线图
timetable = []
ICdata['hour'] = ICdata['交易时间'].dt.hour  # 加多一列hour,并赋值为标准数据里的小时
time = ICdata.groupby(['hour']).count()  # 通过data.groupby(‘hour').count()按小时进行分组,并统计数目
timetable = time.iloc[:, 2]  # 取出一列数据
timetable.plot()  # 画出折线图
plt.rcParams['font.sans-serif'] = ['SimHei']  # 防止中文输出出现乱码
plt.title('当天内各小时刷卡量')  # 设置总标题
plt.xlabel('Hour')  # 设置x坐标标题
plt.ylabel('Amount')  # 设置y坐标标题
plt.show()  # 展示折线图
del ICdata['hour']  # 将hour列删除

输出:

python数据分析之公交IC卡刷卡分析

5.任务三

代码如下:


# 3.定义一个计算乘客搭乘时间平均数和标准差的函数
def fun_time(x):
   time_list = []
   ICdata['hour'] = ICdata['交易时间'].dt.hour  # 加多一列hour,并赋值为标准数据里的小时
   t = list(ICdata['hour'])  # 将hour列取出并转换为列表
   for i in range(200000):
       if t[i] == x:   # 记录该小时内乘客的搭乘时间
           time_list.append(abs(ICdata['上车站点'][i]-ICdata['下车站点'][i]))
   aver = mean(time_list)  # 计算平均数
   std_t = std(time_list)  # 计算标准差
   print(x, '时内乘客搭乘的平均时间为:%.3f站 ' % aver, '标准差为:%.3f站' % std_t)
   print('\n')

# 函数实现:
a = int(input("请输入一个整数代表该小时:"))
fun_time(a)  # 调用fun_time函数,传入参数a

输出:

python数据分析之公交IC卡刷卡分析

6.任务四

代码如下:


# 4.绘制并输出不同类型的一卡通交易数量及其占比的饼图
count = Counter(ICdata.iloc[:, 0])  # 统计各刷卡类型总数
list_key = []  # 创建列表存储刷卡类型
list_value = []  # 创建列表存储刷卡总数量
print('不同类型的一卡通交易数量:')
for key, value in count.items():  # 将counter类型元素分别提取到两个列表内
   list_key.append(key)
   list_value.append(value)
   print('%5d' % key, ':', value)  # 输出刷卡类型及对应数量
print('\n')
plt.figure(figsize=(6, 6), dpi=100)  # 创建画布
colors = ['b', 'r', 'g', 'y']  # 设置颜色
plt.pie(list_value, labels=list_key, autopct='%1.2f%%',
       colors=colors, shadow=True, startangle=150)
# autopct='%1.2f%%' 保留2位小数
# shadow=True,startangle=150 设置阴影,角度为150度
plt.legend()  # 显示图例
plt.axis('equal')  # 为了让显示的饼图保持圆形,需要添加axis保证长宽一样
plt.title('不同类型的一卡通交易数占比的饼图')  # 添加标题
plt.show()

输出:

python数据分析之公交IC卡刷卡分析

7.任务五

代码如下:


# 5.分别构造线路类、司机类和车辆类,将线路编号1101–1120的线路及其所对应的司机和
#   车辆信息输出为20个txt文档,并保存到一个文件夹中;
list_line=[]
for i in range(1101,1121):  # 将20条线路的名称存进列表里
   list_line.append(i)
class Driver:      # 构造司机类
   def __init__(self,driver):
       self.driver = driver
class Bus:         # 构造公交类
   def __init__(self,bus):
       self.bus = bus
class Line:        # 构造线路类
   def __init__(self):  # 因为要根据线路得知司机和公交的信息,因此在线路类
       self.driver=[]   # 里添加两个列表分别存入司机和公交的信息
       self.bus=[]
   def add_driver(self,x):
       self.driver.append(x)
   def add_bus(self,y):
       self.bus.append(y)

line_class=[]  # 列表存20条线路对应的对象
for i in range(1101,1121):
   l=Line()  # 一条线路创建一个对象
   for j in range(200000):
       if ICdata['线路号'][j]==i:  # 将对应线路的司机和公交信息存入该线路对象内
           l.add_driver(ICdata['车辆编号'][j])
           l.add_bus(int(ICdata['驾驶员编号'][j]))
   line_class.append(l)
basepath='D:/人工智能编程语言/task4/road_line/Line'  # 确定txt文件存入的路径
for i in range(20):
   full_path=basepath+str(list_line[i])+'.txt'  # 加上文件名和后缀
   file=open(full_path,'w',encoding='UTF-8')  # 创建txt文件,只写
   file.write('车辆编号')
   file.write('  ')
   file.write('驾驶员编号\n')
   for j in range(len(line_class[i].driver)):  # 将对应线路的信息写入txt文件内
       file.write(str(line_class[i].driver[j]))
       file.write('     ')
       file.write(str(line_class[i].bus[j]))
       file.write('\n')
   file.close()

输出:

python数据分析之公交IC卡刷卡分析
python数据分析之公交IC卡刷卡分析

8.任务六

代码如下:


# 6.分析搭载乘客情况,确定服务乘客人次最多的10个司机、10条线路和10台车辆。
drivers = Counter(ICdata.iloc[:, 8])  # 取出对应列并统计每个元素出现的次数
a=(drivers.most_common(10))   # 将前十个元素及出现的次数存入列表a内
print('服务人次最多的前十名司机及服务人数:')
for i in range(10):
   print('%-8d'% int(a[i][0]),':','%-10d'% a[i][1])
lines = Counter(ICdata.iloc[:, 4])
b=(lines.most_common(10))
print('服务人次最多的前十条线路及服务人数:')
for i in range(10):
   print('%-8d'% int(b[i][0]),':','%-10d'% b[i][1])
buses = Counter(ICdata.iloc[:, 5])
c=(buses.most_common(10))
print('服务人次最多的前十辆公交及服务人数:')
for i in range(10):
   print('%-8d'% int(c[i][0]),':','%-10d'% c[i][1])

输出:

python数据分析之公交IC卡刷卡分析
python数据分析之公交IC卡刷卡分析

四、总结

加深了对numpy,pandas和matplotlib等第三方应用库的使用。

来源:https://blog.csdn.net/zy_sysu/article/details/115916351

标签:python,公交IC卡,数据分析
0
投稿

猜你喜欢

  • 类型转换的小乐趣

    2010-11-30 21:37:00
  • Jmail发信的实例,模块化随时调用

    2007-09-27 13:35:00
  • 利用Python自动监控网站并发送邮件告警的方法

    2023-12-30 03:39:41
  • 讲解Python的Scrapy爬虫框架使用代理进行采集的方法

    2022-07-28 01:34:49
  • python排序算法之希尔排序

    2023-03-03 13:50:48
  • MySQL触发器基本用法详解【创建、查看、删除等】

    2024-01-14 09:48:22
  • Python基于回溯法子集树模板解决全排列问题示例

    2023-12-18 21:25:04
  • 轻松实现TensorFlow微信跳一跳的AI

    2021-11-24 10:35:40
  • Python中的zip函数使用示例

    2021-05-15 01:10:53
  • JQuery 选项卡效果(JS与HTML的分离)

    2024-04-19 10:43:05
  • SpringBoot项目application.yml文件数据库配置密码加密的方法

    2024-01-18 02:12:40
  • python简单利用字典破解zip文件口令

    2023-06-27 05:36:31
  • 用 Python 写的文档批量翻译工具效果竟然超出想象

    2022-02-10 08:38:51
  • MySQL数据库学习之排序与单行处理函数详解

    2024-01-22 13:01:01
  • Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解

    2024-04-08 10:55:44
  • Finished with error:Navicat运行SQL文件报错的解决

    2024-01-28 01:40:03
  • Oracle以逗号分隔的字符串拆分为多行数据实例详解

    2024-01-13 16:32:46
  • NumPy-ndarray 的数据类型用法说明

    2023-07-09 22:01:40
  • 在MAC OS X上安装MYSQL

    2024-01-28 17:25:46
  • python threading模块的使用指南

    2023-08-10 07:51:59
  • asp之家 网络编程 m.aspxhome.com