明确三个步骤:

确定问题,选择图形

转换数据,应用函数

参数设置,一目了然

下面,我们通过案例来进行演示:

%matplotlib inline

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt #导入plt

import seaborn as sns

import warnings

warnings.filterwarnings('ignore')#忽略警告

加载数据

数据采用kaggle中的共享单车项目,比赛提供了跨越两年的每小时共享单车租赁数据,包含天气信息和日期信息。

字段说明

datetime(日期) - hourly date + timestamp

season(季节) - 1 = spring, 2 = summer, 3 = fall, 4 = winter

holiday(是否假日) - whether the day is considered a holiday

workingday(是否工作日) - whether the day is neither a weekend nor holiday

weather(天气等级)

Clear, Few clouds, Partly cloudy 清澈,少云,多云。

Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist 雾+阴天,雾+碎云、雾+少云、雾

Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds 小雪、小雨+雷暴+多云,小雨+云

Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog 暴雨+冰雹+雷暴+雾,雪+雾

temp(温度) - temperature in Celsius

atemp(体感温度) - "feels like" temperature in Celsius

humidity(相对湿度) - relative humidity

windspeed(风速) - wind speed

casual(临时租赁数量) - number of non-registered user rentals initiated

registered(会员租赁数量) - number of registered user rentals initiated

count(总租赁数量) - number of total rentals

date(日期) - 由datetime拆分得到

hour(小时)-由datetime拆分得到

year(年份)-由datetime拆分得到

month(月份)-由datetime拆分得到

weeekday(周几)-由datetime拆分得到

windspeed_rfr(经过随机森林树填充0值得到的风速)

#读取数据

#Bikedata = pd.read_csv('./Bike.csv')

Bikedata.head()

#查看描述统计

Bikedata.describe()

#接下来,我们通过相关系数的大小来依次对特征进行可视化分析

#首先,列出相关系数矩阵:df.corr()

corrdf = Bikedata.corr()

corrdf

大致可以看出:会员在工作日出行较多,节假日次数减少,而临时用户相反,第一季度出行人数总体偏低,出行人数受天气影响较大,会员在每天早晚有两个高峰期,对应上下班时间;非会员在下午出行较密集 风速对出行人数有较大的影响 相对湿度,温度和体感温度对非会员出行影响较大,对会员出行影响较小。

#接下来,我们通过相关系数的大小来依次对特征进行可视化分析

#首先,列出相关系数矩阵:df.corr()

corrdf = Bikedata.corr()

corrdf

#各特征按照与租赁总量count的相关系数大小进行排序

corrdf['count'].sort_values(ascending=False)

count 1.000000

registered 0.966209

casual 0.704764

hour 0.405437

temp 0.385954

atemp 0.381967

year 0.234959

month 0.164673

season 0.159801

windspeed_rfr 0.111783

windspeed 0.106074

weekday 0.022602

holiday 0.002978

workingday -0.020764

weather -0.127519

humidity -0.317028

Name: count, dtype: float64

可见,特征对租赁总量的影响力为:

时段>温度>湿度>年份>月份>季节>天气>风速>工作日>节假日

对特征逐项分析

首先对时段进行分析

第一步

提出问题:租赁总量对应湿度的变化趋势

适合图形:因为湿度属于连续性数值变量,我们可以选择折线图反应变化趋势

第二步

转换数据:我们需要一个二维数据框,按照温度变化排序,取对应的三个租赁数的平均值

应用函数:直接应用plt的plot函数即可完成折线图

figure,axes = plt.subplots(1,2,sharey=True)#设置一个1*2的画布,且共享y轴

workingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the working day',ax=axes[0])

nworkingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the nworking day',ax=axes[1])

第三步:设置参数

figure,axes = plt.subplots(1,2,sharey=True)#设置一个1*2的画布,且共享y轴

workingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the working day',ax=axes[0])

nworkingday_df.plot(figsize=(15,5),title='The average number of rentals initiated per hour in the nworking day',ax=axes[1])

可以看出:

在工作日,会员出行对应两个很明显的早晚高峰期,并且在中午会有一个小的高峰,可能对应中午外出就餐需求;

工作日非会员用户出行高峰大概在下午三点;

工作日会员出行次数远多于非会员用户;

在周末,总体出行趋势一致,大部分用车发生在11-5点这段时间,早上五点为用车之最。

对温度进行分析

第一步

提出问题:租赁总量对应湿度的变化趋势

适合图形:因为湿度属于连续性数值变量,我们可以选择折线图反应变化趋势

第二步

转换数据:我们需要一个二维数据框,按照温度变化排序,取对应的三个租赁数的平均值

应用函数:直接应用plt的plot函数即可完成折线图

第三步

参数设置:只需要设置折线图的标题,其他参数默认

temp_df = Bikedata.groupby(['temp'],as_index='True').agg({'count':'mean','registered':'mean','casual':'mean'})

temp_df.plot(title = 'The average number of rentals initiated per hour changes with the temperature')

随着温度的升高,租赁数量呈上升趋势;

在温度达到35度时,因天气炎热,总体数量开始下降;

在温度在4度时,租赁数达到最低点;

湿度对租赁数量的影响

第一步

提出问题:租赁总量对应湿度的变化趋势

适合图形:因为湿度属于连续性数值变量,我们可以选择折线图反应变化趋势

第二步

转换数据:我们需要一个二维数据框,按照温度变化排序,取对应的三个租赁数的平均值

应用函数:直接应用plt的plot函数即可完成折线图

第三步

参数设置:只需要设置折线图的标题,其他参数默认

humidity_df = Bikedata.groupby(['humidity'],as_index=True).agg({'count':'mean','registered':'mean','casual':'mean'})

humidity_df.plot(title='Average number of rentals initiated per hour in different humidity')

可以观察到在湿度20左右租赁数量迅速达到高峰值,此后缓慢递减。

年份,月份和季节作图方法类似,都采用折线图绘制,这里省略。

查看不同天气对出行情况的影响

第一步

提出问题:租赁总量对应湿度的变化趋势

适合图形:因为天气情况属于数值型分类变量,我们可以选择柱形图观察数量分布

第二步

转换数据:我们需要一个二维数据框,按照天气情况对租赁数量取平均值

应用函数:应用plt的plot.bar函数绘制组合柱形图

第三步

参数设置:只需要设置折线图的标题,其他参数默认

weather_df = Bikedata.groupby(['weather'],as_index=True).agg({'registered':'mean','casual':'mean'})

weather_df.plot.bar(stacked=True,title='Average number of rentals initiated per hour in different weather')

观察到天气等级为4时,平均出行人数比天气等级为2时还要高,这不符合常理

我们查看一下天气等级为4的详细情况

count_weather = Bikedata.groupby('weather')

count_weather[['casual','registered','count']].count()

天气状况为4级的只有一天,我们把数据打印出来查看一下

Bikedata[Bikedata['weather']==4]

时间为工作日的下午六点钟,属于晚高峰异常数据,不具有代表性。

会员用户和临时用户在整体用户中占比

第一步

提出问题:查看会员用户和临时用户在整体用户中的比例

适合图形:查看占比,适合用饼图pie

第二步

转换数据:需要一个二维数据框,按天数取两种用户的平均值

应用函数:应用plt的plot.pie函数绘制饼图

第三步

参数设置:这是数据标签和类别标签

#考虑到相同日期是否工作日,星期几,以及所属年份等信息是一样的,把租赁数据按天求和,其它日期类数据取平均值

day_df = Bikedata.groupby(['date'], as_index=False).agg({'casual':'sum','registered':'sum','count':'sum', 'workingday':'mean','weekday':'mean','holiday':'mean','year':'mean'})

day_df.head()

#按天取两种类型用户平均值

number_pei=day_df[['casual','registered']].mean()

number_pei

casual 517.411765

registered 2171.067031

dtype: float64

#绘制饼图

plt.axes(aspect='equal')

plt.pie(number_pei, labels=['casual','registered'], autopct='%1.1f%%', pctdistance=0.6 , labeldistance=1.05 , radius=1 )

plt.title('Casual or registered in the total lease')

Text(0.5,1,'Casual or registered in the total lease')

总结

要清楚自己想表达什么,有了明确的问题,选择合适的图形,然后按照需求从整体数据中选择自己需要的数据,查阅资料了解函数的参数设置,最后完成图形的绘制

matplotlib是python绘图的基础,也是其他拓展包的基础,认真学习matplotlib的常用图形和参数是很有必要的

python数据可视化源码_Python数据分析:数据可视化实战教程相关推荐

  1. python数据可视化源码_Python数据分析:基于Plotly的动态可视化绘图 随书源码[101MB]...

    随着信息技术的发展和硬件设备成本的降低,当今的互联网存在海量的数据,要想快速从这些数据中获取更多有效的信息,数据可视化是重要的一环.对于Python语言来说,比较传统的数据可视化模块是Matplotl ...

  2. python信用卡违约预测分析_Python数据分析及可视化实例之银行信用卡违约预测(24)...

    1.项目背景: 银行体系对于信用可违约进行预测,原始数据集如下: 2.分析步骤: (1)数据清洗(Data Cleaning) (2) 探索性可视化(Exploratory Visualization ...

  3. python量化策略源码_Python量化交易进阶讲堂-创建自定义量化回测框架

    欢迎大家订阅<Python实战-构建基于股票的量化交易系统>小册子,小册子会陆续推出与小册内容相关的专栏文章,对涉及到的知识点进行更全面的扩展介绍,并且会有选择地收录至小册中,更便于广大读 ...

  4. python爬虫框架源码_python爬虫的基本框架

    1.爬虫的基本流程: 通过requests库的get方法获得网站的url 浏览器打开网页源码分析元素节点 通过BeautifulSoup或者正则表达式提取想要的数据 储存数据到本地磁盘或者数据库 2. ...

  5. python算法实现源码_python 实现A_算法的示例代码

    python 实现A_算法的示例代码 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python 实现A_算法的示例代码.txt ] (友情提示:右键点上行txt ...

  6. python人脸识别源码_Python 抖音机器人,让你找到漂亮小姐姐

    本项目作者沉迷于抖音无法自拔,常常花好几个小时在抖音漂亮小姐姐身上. 本着高效.直接地找到漂亮小姐姐的核心思想,我用 Python + ADB 做了一个 Python 抖音机器人 Douyin-Bot ...

  7. python贪吃蛇源码_Python:游戏:贪吃蛇(附源码)

    Python:游戏:贪吃蛇(附源码) 发布时间:2018-09-05 09:59, 浏览次数:1295 , 标签: Python 贪吃蛇是个非常简单的游戏,适合练手. 首先分析一下这个游戏 1.蛇怎么 ...

  8. python字符串替换源码_Python实现字符串中某个字母的替代功能

    Python实现字符串中某个字母的替代功能 今晚想实现这样一个功能:将输入字符串中的字母 "i" 变成字母 "p".当时想的很简单,直接用for循环遍历,然后替 ...

  9. python关键字提取源码_python实现按关键字筛选日志文件

    最近忙成了狗,五六个项目堆在一起,头疼的是测试还失惊无神的给我丢来一个几十甚至上百M的日志文件,动不动就几十上百万行,就算是搜索也看得头昏眼花的,因此自己花了点时间写了一段小脚本去过滤日志,当然这样的 ...

最新文章

  1. java sunjce,无法初始化类javax.crypto.SunJCE_b
  2. VMware运行Ubuntu 三种网络连接方式:bridge、NAT、Host-Only的区别
  3. JZOJ 3425. 能量获取
  4. 遇到的一个很有趣的陷阱
  5. Vue三大核心概念之一(属性)
  6. Java SE 9:使用Eclipse和IntelliJ IDEA IDE开发和测试HelloWorld模块(第4部分)
  7. Android中UI线程与后台线程交互设计的5种方法
  8. js php c语言for循环,JS for循环语句
  9. GBase数据库操作语句类型(DQL、DML、DDL、DCL)
  10. 谷歌ai人工智能叫什么_为Google产品提供动力的人工智能
  11. 华为HCIE云计算培训笔记第5天
  12. C4D插件X-Particles粒子特效(一)
  13. kali-扫描主机-Nmap
  14. python自动排版公众号_GitHub - qfwc258/maxpress: MaxPress:MarkDown+Python实现微信公众号一键排版...
  15. excel常用函数汇总 Excel公式大全 excel函数应用500例
  16. 这次要是讲不明白Spring Cloud核心组件,那就白写了!
  17. html5新增哪些属性,html5中新增哪些form属性
  18. SQL 编写能力提升-01 基础强化(Mysql)
  19. 这就是神经网络 11:深度学习-语义分割-DFN、BiSeNet、ExFuse
  20. 获取计算机管理权限,Win7如何获得管理员权限

热门文章

  1. Spring Boot学习总结(19)——使用Redisson实现分布式锁
  2. Git学习总结(1)——Git使用详细教程
  3. php 查询 判断 语句,关于php的判断语句
  4. infacmd 把工作流添加到应用程序_【案例】Animate 发布Win应用程序
  5. 一张图明白jenkins和docker作用
  6. 【邀请函】第十届中国电子政务高峰论坛即将开幕
  7. mysql having的用法
  8. 360好搜鬼畜视频一下两下成洗脑热词
  9. python 数据结构 1
  10. Linux命令之查看文件内容