共享单车数据爬取_Matplotlib数据可视化-共享单车

一、提出问题

查看季节、时间段、节假日等与车辆租借数的关系如何。

数据来源:下载数据需要注册账户

https://www.kaggle.com/c/bike-sharing-demand/data?select=sampleSubmission.csv​www.kaggle.com

二、理解数据

先读取数据并理解各项字段含义。

#导入包
import pandas as pd

#读取datas文件夹下的共享单车数据
bikeData = pd.read_csv('datas/train_bike.csv')

#展示数据前5条
bikeData.head()

5e0aefc5dd7ab8c329252d5475ddd10d.png

fe883ff3b546f2653c09653cf0221d58.png

三、清洗数据

①查看数据完整度找出缺失值

#查看信息完整度
bikeData.info()

ec5d934baae97cddac716448d14d88f9.png

每列数据的总数都是10886条,表示该数据没有缺失值。

②提取特征

因为日期字段是字符串类型,为方便分析将其进行切分,分别生成年、月、日、时间字段。

#展示日期数据前5条
bikeData['datetime'].head()

4aafbff3334d0a148e68106bc3a5a99a.png
#创建一个拆分日期的函数changeDatatime
def changeDatatime(datetime):

    #存放年的列表
    year = []

    #存放月的列表
    month = []

    #存放日的列表
    day = []

    #存放时间的列表
    time = []

    #遍历带入的日期数据
    for i in datetime:

        #将日期拆分成:年月日 和 时分秒 两组
        splitDatetime = i.split(' ')

        #将年月日再拆分成:年、月、日
        data = splitDatetime[0].split('-')

        #添加年、月、日、时间至各自对应的列表中
        year.append(data[0])
        month.append(data[1])
        day.append(data[2])
        time.append(splitDatetime[1])
    
    #返回所有列表
    return year,month,day,time

#创建一个新的日期数据框
newDatetime = pd.DataFrame()

#通过函数生成年、月、日、时间列表
year,month,day,time = changeDatetime(bikeData['datetime'])

#将列表添加到新建的数据框中
newDatetime['year'] = year
newDatetime['month'] = month
newDatetime['day'] = day
newDatetime['time'] = time

#显示数据前5条
newDatetime.head()

6748c6400139a971c9f0b7990d8cf25a.png
#将新建日期数据合并到原来的数据中
bikeData = pd.concat([bikeData,newDatetime],axis = 1)

#删除原有的日期字段
bikeData.drop('datetime',axis = 1,inplace = True)

#显示数据前5条
bikeData.head()

43a2f546d2edb34491fe79208062ec94.png

四、数据可视化

①查看各季节的租借数量 - 柱状图

#导入绘图包
import matplotlib.pyplot as plt

#在jupyter下绘制图形时,导入包后加入下代码,可避免图形不显示的异常
%matplotlib inline

#按季节对数据进行分组
newSeries = bikeData.groupby('season')

#对每组数据里的“未注册用户租借数”和“已注册用户租借数”进行求和,并将其取出
casual = newSeries['casual'].sum()
registered = newSeries['registered'].sum()

#创建一个季节列表
season = ['春','夏','秋','冬']

#绘制堆叠柱状图
#1.创建画布并设置大小
fig = plt.figure(figsize = (6,6))

#2.设置柱状图统一的宽度
width = 0.35

#2.绘制底层柱状图:以季节为X轴,未注册用户数为Y轴
plt.bar(season,casual,width,label = '未注册',color = 'tomato')

#3.绘制堆叠柱状图:以季节为X轴,已注册用户数为Y轴,并通过bottom参数堆叠到底层柱状图
plt.bar(season,registered,width,label = '已注册',color = 'bisque',bottom = casual)

#4.显示label属性值
plt.legend()

#4.添加坐标文本、标题、网格线
plt.xlabel('季节')
plt.ylabel('租借数')
plt.title('各季节租借数')
plt.grid(True)

#5.显示图形
plt.show()

8e247a053aa6b3b31f3e20a565a22d18.png

②工作日和非工作日里,各时段的租借数量 - 折线图

#判断每一天是 工作日 还是 非工作日,返回一个Boolean列表
isWork = bikeData['workingday'] = 1
isHoli = bikeData['workingday'] = 0

#将 工作日 和 非工作日 里的数据按时间段进行分组
newSeries1 = bikeData[isWork].groupby('time')
newSeries0 = bikeData[isHoli].groupby('time')

#将各时间段的租借数量分别进行求和
work = newSeries1['count'].sum()
holi = newSeries0['count'].sum()

#用时间列生成一个set时间段列表,用作x轴
time = set(bikeData['time'])

#将set列表转化为list列表
time = list(time)

#对list列表进行升序排序
time.sort()

#创建画布并设置大小
fig = plt.figure(figsize=(20,6))

#绘制 工作日 和 非工作日 的折线图
plt.plot(time,work,label='工作日')
plt.plot(time,holi,label='非工作日')

#显示label属性值
plt.legend()

#添加坐标文本、标题、网格线
plt.xlabel('时间段')
plt.ylabel('租借数')
plt.title('各时间段租借数')
plt.grid(True)

#显示图形
plt.show()

41df6c32a8cbe54fdb57242366b563eb.png

③湿度、风速 与租借数的相关性 - 散点图

#创建画布并设置大小
fig = plt.figure(figsize=(14,6))

#创建画纸1,用来绘制 湿度与租借数 的散点图
ax1 = plt.subplot(1,2,1)
plt.scatter(bikeData['humidity'],bikeData['count'])
plt.xlabel('湿度')
plt.ylabel('租借数')
plt.title('湿度与租借数相关性')

#创建画纸2,用来绘制 风速与租借数 的散点图
ax2 = plt.subplot(1,2,2)
plt.scatter(bikeData['windspeed'],bikeData['count'])
plt.xlabel('风速')
plt.ylabel('租借数')
plt.title('风速与租借数相关性')

#显示图形
plt.show()

bc7ef82f61a009de40b17f7f16e8084f.png
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值