##
数据可视化
数据可视化(Data Visualization)是聚焦数据表现形式的领域,如何将信息进行抽象、对比和展示的方法。数据可视化在不断发展,可供使用的工具和展示形式在不断演变。与数据科学的其他方向相比(机器学习和数据挖掘),可视化涵盖的技术方法更多,形式更加多样。
下图,未来美国的人口统计数据(不同年龄阶段)
下图,电影对白(按性别划分)
数据可视化根据用途可以划分为:
数据统计展示;
数据分布展示;
数据对比展示;
数据可视化在机器学习&深度学习中应用广泛,如特征相关性热力图、特征分布趋势图、梯度可视化图和特征重要性直方图。
在交通领域,数据可视化同样用途广泛:
通过可视化可以找到热门的区域,定位到拥堵区域;
通过可视化可以找到热门的线路,定位拥堵线路;
通过可视化可以找到交通的流量;
无一例外,现有地图大数据报告都使用可视化的方式进行呈现:
百度交通大数据报告:
https://jiaotong.baidu.com/reports/
滴滴交通大数据报告:
https://sts.didiglobal.com/
高德交通大数据报告:
https://report.amap.com/diagnosis/index.do
腾讯地图大数据:
https://heat.qq.com/
###
常规可视化
可视化是每一位同学必备的技能,同时也是需要反复练习的技能,是必备的技能。学习可视化,可以通过如下的流程完成:
学习可视化的组成元素;
学习可视化的常见图像案例;
学习可视化库的使用;
如上图在绘制一张图的过程中,有较多的细节需要注意,上图来源为
matplotlib
。一张图包含的具体的组成元素如下:
坐标轴、坐标轴标题;
图表标题、数据标签;
误差线、网格线;
上述的每个元素搭配起来就是整张图,看起来是不是非常简单?所以可视化并不是一件很难的事情,只需要注意到细节就肯定可以绘制得到美观的图。但可视化的内容实在是太多了,我们推荐的学习路线如下:
步骤1:学习有哪些可视化方法;
步骤2:选择一个库进行具体可视化;
###
可视化图表类型
饼图(Pie Chart)或称饼状图,是一个划分为几个扇形的圆形统计图表。在饼图中,每个扇形的弧长(以及圆心角和面积)大小,表示该种类占总体的比例,且这些扇形合在一起刚好是一个完全的圆形。
散点图(Scatter Plot)是在笛卡尔座标上放置一系列的数据点,用来显示两个变量的数值(每个轴上显示一个变量),并检测两个变量之间的关系或相关性是否存在。
条形图(Bar Chart)采用水平或垂直条形(柱形图)来比较不同类别的离散数值。图表其中一条轴代表要比较的具体类别,另一条则用作离散数值的标尺。
数据可视化图表类型,实在是太太太多了(至少几十种),而且每种图的元素、特点和计算逻辑都不太一样,由于篇幅原因我们就不展开讲。当然不是要求大家对每一种图都熟悉,是希望大家知道有这些图的存在,如果之后画图可以找一种更加有效的图进行展示。非常推荐大家阅读下面的两个可视化介绍网站:
https://datavizcatalogue.com/ZH/index.html
http://tuzhidian.com/
箱形图(又称为「盒须图」或「箱线图」)能方便显示数字数据组的四分位数。
可以从箱形图得出的观察结果:
关键数值,例如平均值、中位数和上下四分位数等
任何异常值(以及它们的数值)
数据分布是否对称
数据分组有多紧密
数据分布是否出现偏斜(如果是,往什么方向偏斜)
###
地图可视化
地图可视化方法如下:
点示地图 (Dot Map) 在地理区域上放置相等大小的圆点,旨在检测该地域上的空间布局或数据分布。
气泡地图指定地理区域上方会显示圆形图案,圆形面积与其在数据集中的数值会成正比。
连接地图 (Connection Map) 即是用直线或曲线连接地图上不同地点的一种图表。
流向地图 (Flow Map) 在地图上显示信息或物体从一个位置到另一个位置的移动及其数量,通常用来显示人物、动物和产品的迁移数据。
地区分布图通常用来显示不同地理分区或区域(不同颜色或图案)与数据变量之间的关系,并把所显示位置的数值变化或模式进行可视化处理。
##
赛题可视化
基于上面的可视化方法,我们可以使用可视化方法完成基础的数据可视化,下面代码以将以巡游车GPS
taxiGps20190531.csv
为案例进行数据统计。
24小时巡游车统计数量;
taxigps2019.groupby(['GPS_TIME_hour'])['CARNO'].nunique().plot()
plt.ylabel('Car Count')
24小时巡游车平均GPS速度;
taxigps2019['GPS_SPEED'] = np.clip(0, 150, taxigps2019['GPS_SPEED'])
taxigps2019.groupby(['GPS_TIME_hour'])['GPS_SPEED'].mean().plot()
taxigps2019[taxigps2019['GPS_SPEED'] != 0].groupby(['GPS_TIME_hour'])['GPS_SPEED'].mean().plot()
plt.legend(['Mean GPS Speed, contain 0', 'Mean GPS Speed, not contain 0'])
24小时巡游车平均运营车辆;
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
df = taxigps2019[taxigps2019['OPERATING_STATUS'] == 1]
df.groupby(['GPS_TIME_hour'])['CARNO'].nunique().plot()
df = taxigps2019[taxigps2019['OPERATING_STATUS'] == 8]
df.groupby(['GPS_TIME_hour'])['CARNO'].nunique().plot()
plt.legend(['STATUS 1', 'STATUS 8'])
某个时间巡游车位置分布;
from folium import plugins
from folium.plugins import HeatMap
map_hooray = folium.Map(location=[24.482426, 118.157606], zoom_start=14)
HeatMap(taxigps2019[['LATITUDE', 'LONGITUDE']].iloc[:1000].values).add_to(map_hooray)
map_hooray
某个巡游车具体的路线;
import folium
# Create the map and add the line
m = folium.Map(location=[24.482426, 118.157606], zoom_start=12)
my_PolyLine=folium.PolyLine(locations=taxigps2019[taxigps2019['CARNO'] == '0006d282be70d06881a7513b69fcaa60'][['LATITUDE', 'LONGITUDE']].iloc[:50].values,weight=5)
m.add_children(my_PolyLine)
## 学习资源
Matplotlib官网案例
https://python-visualization.github.io/folium/quickstart.html
## 课堂任务
如何统计得到所有巡游车中运营时间最长的车?
如何根据巡游车路线得到具体的运营规律?
## 打卡任务
可视化巡游车20190531
- 20190609
期间早上9点的平均速度变化;
可视化统计巡游车20190531
- 20190609
期间平均每辆巡游车运营时间(一天之内活跃的分钟个数)变化;