共享单车骑行数据分析数据来源

背景介绍

  • 随着我国的经济迅速发展,城市人口急剧增加,随之带来的是一系列的问题,交通拥堵,环境受到破坏,发展公共交通可以完美的解决现在我们面临的这些问题,自行车具有机动灵活、低碳环保的优点,如果自行车可以取代现在的机动车,那么道路就不会那么拥挤,人们的出行效率就会大大提升,汽车废气的排放量也将大大的减少,环境的质量也会提升。同时,为了完美的解决从地铁站到公司、从公交站到家的“最后一公里”路程,共享单车应运而生. 共享单车有效的解决了“走路累,公交挤,开车堵,打车贵”的苦恼。一夜之间,北上广深、甚至部分二线城市,共享单车大街小巷随处可见。继2016年9月26日ofo单车宣布获得滴滴快车数千万美元的战略投资,双方将在共享单车领域展开深度合作之后,摩拜单车也于2017年1月完成D轮2.15亿美元(约合人民币15亿元)的融资,国内共享单车更加火爆,最近一张手机截屏蹿红网络。在这张截图上,24个共享单车应用的图标霸满了整个手机屏幕,真的是“一图说明共享单车的激烈竞争”。而在街头,仿佛一夜之间,共享单车已经到了“泛滥”的地步,各大城市路边排满各种颜色的共享单车。共享经济的不断发展逐渐的改变着人们的日常生活,共享精神也逐渐深入人心。

数据来源

数据链接: [ https://pan.baidu.com/s/11Gpq2-0z_E0ilNTm7Wt7vw

](https://pan.baidu.com/s/11Gpq2-0z_E0ilNTm7Wt7vw)
提取码:1whs
复制这段内容后打开百度网盘手机App,操作更方便哦

    import pandas as pd
    import calendar
    from datetime import datetime
    import matplotlib.pyplot as plt
    import seaborn as sn
    import numpy as np
    from pylab import mpl
    
    mpl.rcParams['font.sans-serif'] = ['Simhei']
    
    
    def collect_and_process_data():
        bikedata = pd.read_csv("train.csv")
        # 数据提取
        # 提取年月日
        bikedata['date'] = bikedata.datetime.apply(lambda x: x.split()[0])
        # 提取小时
    
        bikedata['hour'] = bikedata.datetime.apply(lambda x: x.split()[1].split(":")[0])
    
        # 在年月日的基础上提取星期数(需要格式化日期)day_name 转化为英文名称
        bikedata['weekday'] = bikedata.date.apply(
            lambda dateString: calendar.day_name[datetime.strptime(dateString, '%Y/%m/%d').weekday()])
        # print(bikedata)
        # 在年月日的基础上提取月份  month_name 转化为英文名称
        bikedata["month"] = bikedata.date.apply(
            lambda dateString: calendar.month_name[datetime.strptime(dateString, '%Y/%m/%d').month])
    
        # 数据转化
        # 将season数字转化为英文季节值
        bikedata["season"] = bikedata.season.map({1: "Spring", 2: "Summer", 3: "Fall", 4: "Winter"})
        # print(bikedata)
        # 将以下变量转化为分类变量
        varlist = ['hour', 'weekday', 'month', 'season', 'holiday', 'workingday']
        for x in varlist:
            bikedata[x] = bikedata[x].astype('category')
        # print(bikedata.dtypes)
    
        # 删除无意义的变量
        bikedata.drop('datetime', axis=1, inplace=True)
        # print(bikedata)
    
        # 数据清洗
        # 查看是否缺失数据
        #print(bikedata.describe())
    
        # 查看是否有异常值
        fig, axes = plt.subplots(nrows=2, ncols=2)
        fig.set_size_inches(12,12)
        sn.boxplot(data=bikedata, y='count', orient='v', ax=axes[0][0])
        sn.boxplot(data=bikedata, y='count', x='season', orient='v', ax=axes[0][1])
        sn.boxplot(data=bikedata, y='count', x='hour', orient='v', ax=axes[1][0])
        sn.boxplot(data=bikedata, y='count', x='workingday', orient='v', ax=axes[1][1])
        #     # plt.show()
    
        axes[0][0].set(ylabel='骑行人数', title='骑行人数')
        axes[0][1].set(xlabel='季节', ylabel='骑行人数', title='不同季节的骑行人数')
        axes[1][0].set(xlabel='时间', ylabel='骑行人数', title='一天内不同时间骑行人数')
        axes[1][1].set(xlabel='工作日', ylabel='骑行人数', title='工作日骑行人数')
        plt.savefig('Abnormal_value_analysis.png')
        # plt.show()
    
        # 剔除数据
        bikedata1 = bikedata[np.abs(bikedata["count"] - bikedata["count"].mean()) <= (3 * bikedata["count"].std())]
        # print("剔除前数据记录:", bikedata.shape, "\n剔除前数据记录:", bikedata1.shape)
        bikedata1.to_csv('processed_data.csv')
        return bikedata1
    
    
    def Data_Analysis_and_Visualization_month(bikedata):
        # 判断每个月份有几条记录,并按由大到小顺序排序
        monthAggregated = pd.bikedata(bikedata.groupby("month")["count"].mean()).reset_index()
        # print(monthAggregated)
        monthSorted = monthAggregated.sort_values(by="count", ascending=False)
        # print(monthSorted)
    
    
        fig, axes = plt.subplots()
        fig.set_size_inches(12, 20)
        sortOrder = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October",
                     "November", "December"]
        sn.barplot(data=monthSorted, x="month", y="count", order=sortOrder)
        axes.set(xlabel="月份", ylabel="平均骑行人数", title="不同月份的骑行人数")
        plt.savefig('result1.png')
        plt.show()
    
    
    def Data_Analysis_and_Visualization_hour(bikedata):
        # 一周内不同时间的骑行人数
        hourAggregated = pd.DataFrame(bikedata.groupby(["hour", "weekday"])["count"].mean()).reset_index()
        print(hourAggregated)
    
    
        fig1, ax1 = plt.subplots()
        fig1.set_size_inches(12, 20)
        hueOrder = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
        sn.pointplot(x=hourAggregated["hour"], y=hourAggregated["count"], hue=hourAggregated["weekday"], hue_order=hueOrder,
                     data=hourAggregated)
        ax1.set(xlabel="时间", ylabel="骑行人数", title="一周内不同时间的骑行人数")
    
        plt.savefig("result2.png")
        plt.show()
    
    
    # 主函数
    def main():
        # 数据采集\查看和处理
        bikedata1 = collect_and_process_data()
        # 数据分析与可视化1
        Data_Analysis_and_Visualization_month(bikedata1)
        # 数据分析与可视化2
        Data_Analysis_and_Visualization_hour(bikedata1)
    
    
    if __name__ == '__main__':
        main()

可视化结果:

![在这里插入图片描述](https://img-blog.csdnimg.cn/20190629200048593.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lhbldlbkNoZW5nXw,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190629200134822.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lhbldlbkNoZW5nXw
,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190629200217540.png?x-oss-
process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1lhbldlbkNoZW5nXw==,size_16,color_FFFFFF,t_70)
源码链接: [ https://pan.baidu.com/s/1du9KnHUTn6Z3N9-Jx-BelA

](https://pan.baidu.com/s/1du9KnHUTn6Z3N9-Jx-BelA)
提取码:okek
复制这段内容后打开百度网盘手机App,操作更方便哦

在这里插入图片描述

posted @ 2021-07-07 14:56  老酱  阅读(747)  评论(2)    收藏  举报