数据集介绍
数据为某停车场信息表,具体字段信息如下表:
字段 |
含义 |
字段 |
含义 |
cn |
车牌号 |
price |
停车所交费用 |
timein |
车辆进场时间 |
state |
是否已经离场 |
timeout |
车辆出场时间 |
当前空余车位数量 |
部分数据展示
数据分析
首先,导入本次项目用到的第三方包以及数据
import pandas as pd import matplotlib.pylab as plt import numpy as np from pyecharts.charts import Pie from pyecharts import options as opts from pyecharts.globals import ThemeType import warnings warnings.filterwarnings('ignore') plt.rcParams['font.sans-serif'] = ['SimHei'] #解决中文显示 plt.rcParams['axes.unicode_minus'] = False #解决符号无法显示 data = pd.read_excel('停车场信息表.xlsx') data.head()
1.停车时间数据分布图,统计停车时间为1小时,2小时,3~5小时,6~10小时,11~12小时以及停车12小时以上的停车数量,绘制饼图。
这里我们需要得到每一条车辆出和入时间的差值并且结果要转化为小时数,然后根据小时数进行分类标签 (这里如果要求的是天数,只需要把h改为D即可)
data['timein'] = data['timein'].apply(pd.Timestamp) data['timeout'] = data['timeout'].apply(pd.Timestamp) data['hour'] = (data['timeout'] - data['timein']).values/np.timedelta64(1,'h') def parse_time(x): if x < 1: return '1小时以内' elif 1 <= x <= 2: return '1~2小时' elif 2 < x <3: return '2~3小时' elif 3 <= x <6: return '3~5小时' elif 6 <= x <11: return '6~10小时' elif 11 <= x <12: return '11~12小时' else: return '12小时以上' data['hour_grade'] = data['hour'].agg(parse_time) data['hour_grade'].value_counts().plot(kind='pie',figsize=(10,8),title='各小时段的数量占比',autopct='%.2f')
2.停车高峰时间所占比例:把一天按小时划分为8个区间,绘制饼图。
这里我们需要根据车辆入的时间提取出小时数并做统计
data['timein'] = data['timein'].astype(str) data['hour_time'] = data['timein'].apply(lambda x:int(x.split(' ')[1].split(':')[0])) df1 = pd.qcut(data['hour_time'],q=8) df1.value_counts().plot(kind='pie',figsize=(10,8),title='各小时段的数量占比',autopct='%.2f')
3.每周繁忙统计:按星期一~星期日统计停车数量,绘制纳丁格尔玫瑰图。
这里我们需要用到日期类型的内置函数weekday得到星期数(1-6,代表星期一~六,0代表星期日) ,最后将数字转化为特定的字符串
# 星期一~星期日停车数量比例 data['timein'] = data['timein'].apply(pd.Timestamp) data['week'] = data['timein'].apply(lambda x:x.weekday()) data.week.replace(to_replace={1:'星期一',2:'星期二',3:'星期三',4:'星期四',5:'星期五',6:'星期六',0:'星期日'},inplace=True) df2 = data['week'].value_counts() result_list = [(i,j) for i,j in zip(df2.index.to_list(),df2.values.tolist())] a = Pie(init_opts=opts.InitOpts(theme = ThemeType.DARK)) a.add(series_name='星期', data_pair=result_list, rosetype='radius', radius='70%', ) a.set_global_opts(title_opts=opts.TitleOpts(title="星期一~星期日停车数量比例", pos_top=50)) a.set_series_opts(tooltip_opts=opts.TooltipOpts(trigger='item',formatter='{a} <br/>{b}:{c} ({d}%)')) a.render_notebook()
4.月收入分析:统计每月收入情况,绘制条形图。
这里我们需要根据车辆入的时间提取出月份数值,最后分组聚合即可
data['timein'] = data['timein'].astype(str) data['month'] = data['timein'].apply(lambda x:int(x.split(' ')[0].split('-')[1])) data.groupby('month').sum()['price'].plot(kind='barh',figsize=(10,8),title='每月收入条形图',fontsize=14)
5.每日接待车辆统计:统计每天停车数量绘制折线图。
这里我们需要根据车辆入的时间提取出day值,最后分组统计即可
data['day'] = data['timein'].apply(lambda x:int(x.split(' ')[0].split('-')[2])) data['day'].value_counts().sort_index().plot(figsize=(10,8),title='每天停车数量折线图',fontsize=14)
6.车位使用率的统计:统计每天的车位平均使用率,绘制折线图。
data.groupby('day').mean()['rps'].plot(figsize=(10,8),title='每天车位平均使用率折线图',fontsize=14)
以上就是本次停车场数据案例分析的全部,希望对学习数据分析的你有所帮助