基于Python的某小区停车数据分析

本文介绍了如何通过get_data.py和draw_bar.py脚本读取Excel数据,清理并分析不同时间段的车辆入库与离开情况,进而绘制柱状图展示9月的在库车数量变化。process.py文件则处理最大值与平均值,探讨了共享停车方案的改进。通过Gantt.py,提出自动确定共享停车时段的算法设想。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目 录
一. 问题描述 2
二. 详细内容及步骤 3

  1. 提取数据中有用的信息 get_data.py文件 3
    import pandas as pd 3
    1)自动读取excel表,存在一个dataframe中: 3
    2) 数据清理,调整 3
    3) 增加数据列 3
    4) 将处理一个文件扩展到处理多个文件 3
    5) 文件内部调用:df=get_data() 4
  2. 画九月每天的不同时间段在库车数量 柱状图 draw_bar.py文件 8
    1)切分时间 8
    2) 分组,分别统计组内个数 8
    3)由不同时段的停入车数量和离开车数量,计算不同时段的在库车数量 9
    4)由不同时段的在库车数量owner_sum和temp_sum画出柱状图 9
  3. 画9月在库车数量最大值与平均值 process.py文件 10
    import pandas as pd 10
  1. allbar函数 11
  1. 画甘特图 Gantt.py文件 12
    1) 查找想要的数据 12
    2) 排序 12
    3) 甘特图可理解为横向条形图 12
    三. 总结及展望 13
    数据内包含业主的车与临时车。临时车是点对点的共享平台的停车用户。点对点指业主写明可共享车位的时间段,临停用户可在平台上找到适合自己停车需求的车位定点停放。该共享方案的问题是业主参与度不高,白天仍有大量剩余车位,而白天小区周围有停车需求。
    现在希望建立一个新的共享停车的方案,不需要业主指明可共享的时间段。根据停车的历史数据进行分析,自动得出适合开放共享停车的时间段和共享的最大停车位数,保证业主有位置停。
    二.详细内容及步骤
    1.提取数据中有用的信息 get_data.py文件
    使用python 中的pandas库的dataframe类来存储数据。
    首先读取一个excel表中的数据,成功后再用类似的方法使用循环读取所有文件。
    一些关键步骤展示整行代码,其余仅写出函数名,略去参数
    import pandas as pd
    1)自动读取excel表,存在一个dataframe中:
    df=pd.read_excel(‘./data/’+fname,skiprows=3)#跳过前三行,从第四行开始读取 原本不知道有跳过行的功能,还使用了xlrd包先读取再存到dataframe中
    2)数据清理,调整
    清除列 df.drop(df.columns[delid], axis=1, inplace=True)
    清楚空值所在一整行df.dropna(inplace=True)
    重命名列名称 df.rename(columns={‘车牌号码’:‘num’,…},inplace=True)
    重命名一列中的值df[‘type’]=df[‘type’].replace([‘纯车牌月卡A’,‘临时车纯车牌识别(小车)’],[‘业主’,‘临时’])
    3)增加数据列
    字符串的时间类型转化为[0,24)连续的数,小时为单位df[‘intimedig’]=list(map(time2dig,df[‘intime’]))#数字化的连续时间float64类 time2dig为自编函数
    字符串的时间类型转化为datetime64类型,便于以后操作df[‘indatetime’]=pd.to_datetime(df[‘intime’])
    4)将处理一个文件扩展到处理多个文件
    import pandas as pd
    import os
    def get_data():
    fnames = os.listdir(‘./data/’)#./相对目录 返回data文件夹下所有文件名称
    dfall=pd.DataFrame()#创建一个空的dataframe
    for fname in fnames:
    df=pd.read_excel(‘./data/’+fname,skiprows=3)#跳过前三行
    #处理内容
    dfall=pd.concat([dfall,df],ignore_index=True)#竖向拼接 重新分配索引

    return dfall
    5)文件内部调用:df=get_data()
    运行文件后,总的数据df就存在了工作区中。本文转载自http://www.biyezuopin.vip/onews.asp?id=14768以后调用其他的函数文件处理数据,直接在命令行窗口将df作为输入参数,不需要重新生成。这样增加了计算效率(生成df需要几秒钟时间)。
def draw(df):
    import pandas as pd
    from matplotlib import pyplot as plt 
    import pylab as pyl #使matplotlib可显示中文
    pyl.mpl.rcParams['font.sans-serif'] = ['SimHei'] #使matplotlib可显示中文
    
    date=df.drop_duplicates('indate').loc[:,['indate','inweek']]#去重
    #类型dataframe 两列存不重复的日期和相应的星期
    date=date.sort_values('indate')#按日期排序
    
    for id in date.index: #画九月每天的不同车开始停车时刻与停车时长散点图
        d=date.loc[id,'indate']
        w=date.loc[id,'inweek']
        fig1=df.loc[(df['indate']==d)&(df['type']=='业主')\
                  &(df['length']<24),:]#忽略停车时长大于一天的
        fig2=df.loc[(df['indate']==d)&(df['type']=='临时')\
                  &(df['length']<24),:]
        title=str(d)[:11]+str(w) #日期星期几
        plt.title(title)
        plt.xlabel("开始停车时刻/点(h)") 
        plt.ylabel("停车时长/h") 
        plt.xticks(range(0,24))#横坐标 0:23 步长1
        plt.yticks(range(0,24))
        plt.grid()
        plt.plot(fig1['intimedig'],fig1['length'],'r.',markersize=3)
        plt.plot(fig2['intimedig'],fig2['length'],'b.',markersize=3)
        plt.savefig('./fig开始停车/'+title+'.jpg',dpi=100)#指定分辨率100
        plt.clf()#清空画布
        #plt.show()
    date=df.drop_duplicates('outdate').loc[:,['outdate','outweek']]#去重
    #因为excel表数据本身是根据离开时刻排的,不需要排序日期
    
    for id in date.index: #画九月每天的不同车离开时刻与停车时长散点图
        d=date.loc[id,'outdate']
        w=date.loc[id,'outweek']
        fig1=df.loc[(df['outdate']==d)&(df['type']=='业主')\
                  &(df['length']<24),:]
        fig2=df.loc[(df['outdate']==d)&(df['type']=='临时')\
                  &(df['length']<24),:]
        title=str(d)[:11]+str(w) #日期星期几
        plt.title(title)
        plt.xlabel("离开时刻/点(h)") 
        plt.ylabel("停车时长/h") 
        plt.xticks(range(0,24))
        plt.yticks(range(0,24))
        plt.grid()
        plt.plot(fig1['outtimedig'],fig1['length'],'r.',markersize=3)
        plt.plot(fig2['outtimedig'],fig2['length'],'b.',markersize=3)
        plt.savefig('./fig离开时刻/'+title+'.jpg',dpi=100)#指定分辨率100
        plt.clf()#清空画布

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shejizuopin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值