资讯专栏INFORMATION COLUMN

Python学习笔记:数据可视化(一)

Crazy_Coder / 2970人阅读

摘要:当数据发生变化时,这种演变过程随之发生。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。

python相关 基础概念

数据:离散的,客观事实的数字表示

信息:处理后的数据,为实际问题提供答案

  - 为数据提供一种关系或一个关联后,数据就成了信息,这种关联通过提供数据背景来完成

知识: 是数据、信息和通过经验获得的技能

  - 知识包括做出适当决策的能力执行时所需的技能

观点:

 - 如何获取观点: 基于已有数据信息得到最佳或现实的决策,我们可以通过数据分析

数据分析 依赖数学算法来确定产生观点的数据之间的关系

信息是可量化的、可测度的、有形式的,可被访问、生成、存储、分发、搜索、压缩和复制。
信息可以通过数量或信息量进行量化。,信息可转换为知识,知识要比信息更量化。在某些领域,知识持续经历一个不断发展周期。当数据发生变化时,这种演变过程随之发生。

通过离散算法

数据转换:数据被转换成信息,得到进一步处理,然后用来解决问题

 - 数据的种类不同,包括表现数据, 实验数据,基准数据

可视化的整个过程需要不用技能和专业领域的人。

数据工人努力收集数据并完成分析
数学家和统计学家理解可视化设计原则,并用这些原则完成数据交流
设计师和艺术家和开发者具备可视化转换的技能
业务分析员等找寻行为模式,离群点或突发趋势
整个过程额步骤是:

获取或收集数据:

解析和过滤数据:用编程方法进行解析、清洗和减少数据

分析提炼数据: 删除噪音和一些不必要维度,发展模式

呈现和交互 用更容易得到和理解的方式展示数据

数据预处理

数据清洗:用于数据的噪音清理和矛盾纠正

数据集成:将多个数据源的数据合并起来(仓库)

数据压缩:通过合并、聚集、消除冗余特征等方法减少数据量

数据转换:将数据缩放到一个较小的区间,从而提高处理和可视化的精确性和效率

提取数据 -> 删除不一致数据 ->重建缺失数据 ->数据标准化 -> 验证数据

-

数据处理 数据集资源 数据分析与可视化

这里我们会使用下面几种绘图工具

matplotlib: 是一个最基础的Python可视化库,作图风格接近MATLAB,所以称为matplotlib。一般都是从matplotlib上手Python数据可视化,然后开始做纵向与横向拓展

Seaborn:是一个基于matplotlib的高级可视化效果库,针对的点主要是数据挖掘和机器学习中的变量特征选取,seaborn可以用短小的代码去绘制描述更多维度数据的可视化效果图

Plotly: 绘图工具,是建立在一个开放源码库plotly.js上,由一家拥有多种产品和开源工具的

Pyecharts : 是基于百度echarts的一个开源项目,也是我目前接触到的最容易实现交互可视化的工具,相比bokeh和plotly,pyecharts的语法更简单,实现效果更佳出众(做过前端的对这个应该很了解)

Bokeh: 是一个用于做浏览器端交互可视化的库,实现分析师与数据的交互

pandas: 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。

Mapbox: 处理地理数据引擎更强的可视化工具库

geoplotlib

cufflinks: a library for easy interactive Pandas charting with Plotly

图形公司创造并提供免费使用,我们可以在离线模式下创建无限图表,在线模式下最多可以创建25个图表
当然,找更多工具戳这里

数据的可视化是表达信息的过程,在可视化化过程我们要思考:

要处理多少变量?我们试图画出怎样的图像?

x轴和y轴指代什么?(三维图中有z轴)

数据的大小是否被标准化?数据点的大小意味着什么?

我们的选色对吗?

对于时间序列数据,我们是否试图识别趋势或相关性

这里有个学生数据:http://www.knapdata.com/pytho...

# -*- coding:utf-8 -*-
# usr/bin/python 3.5+
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

students = pd.read_csv("data/ucdavis.csv")

g = sns.FacetGrid(students, hue="gender", palette="Set1", size=6)
g.map(plt.scatter, "gpa", "computer", s=250, linewidth= 0.65, edgecolor="white")

g.add_legend()
plt.show()

seaborn: http://seaborn.pydata.org/api...

FacetGrid 类可以刻画三个维度: 行、列、色调

 - 用于对数据子集中的一个变量的分布或者多个变量关系进行可视化

barchart

matplotlib.pyplot.bar

import numpy as np
import matplotlib.pyplot as plt

N = 7
winnersplot = (142.6, 125.3, 62.0, 81.0, 145.6, 319.4, 178.1 )
ind = np.arange(N)
width = 0.35
fig, ax = plt.subplots()
winners = ax.bar(ind, winnersplot, width, color="#ffad00")
print(winners)

nomineesplot = (109.4, 94.8, 60.7, 44.6, 116.9,262.5,102.0)
nominees = ax.bar(ind + width, nomineesplot, width, color="#9b3c38")

# add some text for labels ,title and axes ticks

ax.set_xticks(ind+width)
ax.set_xticklabels(("小明", "小红", "小凡", "小钱", "小刘", "小赵", "小文"))
ax.legend((winners[0], nominees[0]),("奥斯卡金奖得住","奥斯卡得住提名"))

def autolabel(rects):
    # attach some text labels
   for rect in rects:
       height = rect.get_height()
       hcap = "$" + str(height) + "M"
       ax.text(rect.get_x() + rect.get_width()/2. ,height, hcap,ha = "center",va="bottom",rotation="horizontal")

autolabel(winners)
autolabel(nominees)

plt.show()

piechart

matplotlib.pyplot.pie

import matplotlib.pyplot as plt
labels = "Computer Science", "Foreign Languges","Analytical Chemistry", "Education", "Humanities", "Physics", "Biology", "Math and Statistics", "Engineering"
sizes = [21, 4, 7, 7, 8, 9, 10, 15, 19]
colors = ["yellowgreen", "gold", "lightskyblue", "lightcoral","red", "purple", "#f280de", "orange", "green"]
explode = (0,0,0,0,0,0,0,0,0.1)
plt.pie(sizes, explode=explode, labels=labels, autopct="%1.1f%%",colors=colors)
plt.axis("equal")
plt.show()
box chart scatter 散点图

散点图是同一组研究对象的两个变量间关系的可视化

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
students = pd.read_csv("data/ucdavis.csv")
g = sns.FacetGrid(students, palette="Set10",size=7)
g.map(plt.scatter, "momheight", "height",s=140, linewidth=.7,edgecolor = "#ffad40",color="#ff8000")
g.set_axis_labels("Mothers Heilsght", "Students Height")
plt.show()


散点图最适合研究不同变量之间的关系:

男性与女性人群中不同年龄阶段得皮肤病的可能性

IQ测试得分和GPA之间的相关性

另外我们还要考虑:

添加一条趋势线或最佳拟合线(如果关系是线性的):添加趋势线可以展示数据之间的关联性

使用信息标记类型:信息标记类型适用于通过形状和颜色提高视觉效果来解读数据的情况

气泡图

气泡图展示了数据的三个维度,每个数据点有三重维度(a, b , c), xy轴的坐标表示两个维度变量,气泡的大小表示第三个维度的定量测度结果

Histograms直方图

直方图(Histogram)又称质量分布图。是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。

import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt  #导入

import seaborn as sns
sns.set(color_codes=True)#导入seaborn包设定颜色

np.random.seed(sum(map(ord, "distributions")))
x = np.random.normal(size=100)
sns.distplot(x, kde=False, rug=True);#kde=False关闭核密度分布,rug表示在x轴上每个观测上生成的小细条(边际毛毯)
plt.show()


当绘制直方图时,你最需要确定的参数是矩形条的数目以及如何放置它们。利用bins可以方便设置矩形条的数量。如下所示:

sns.distplot(x, bins=20, kde=False, rug=True);#设置了20个矩形条

核密度估计图

核密度估计(Kernel Density Estimation, KDE)是一种用来估计概率密度函数的非参数方法。可以通过观测到的数据点取平均实现平滑逼近。

核密度估计是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。.由于核密度估计方法不利用有关数据分布的先验知识,对数据分布不附加任何假定,是一种从数据样本本身出发研究数据分布特征的方法,因而,在统计学理论和应用领域均受到高度的重视。

核密度函数与直方图密切相关,但有时能够通过核概念用平滑性或连续性赋予实际含义。
概率密度函数(Probablity Density Function,PDF)的核是PDF的形式。这种形式不考虑非变量函数因素。

这里我们用一个鸢尾花数据集和seaborn包展示KDE图
使用seaborn 和matplotlib演示KDE图

seaborn.distplot

This function combines the matplotlib hist function (with automatic calculation of a good default bin size) with the seaborn kdeplot() and rugplot() functions. It can also fit scipy.stats distributions and plot the estimated PDF over the data.

seaborn的displot()集合了matplotlib的hist()与核函数估计kdeplot的功能,增加了rugplot分布观测条显示与利用scipy库fit拟合参数分布的新颖用途。具体用法如下:

seaborn入门(一):distplot与kdeplot
seaborn.kdeplot

distplot()

distplot 函数默认同时绘制直方图和KDE(核密度图)

from numpy.random import randn
import matplotlib as mpl
import seaborn as sns
import matplotlib.pyplot as plt

#引入鸢尾花数据集
df_iris = sns.load_dataset("iris")
fig, axes = plt.subplots(1,2)
# print(df_iris["petal_length"])
# print(axes[0])


# distplot 函数默认同时绘制直方图和KDE(核密度图),开启rug细条
sns.distplot(df_iris["petal_length"], ax= axes[0], rug = True)
# shade 阴影
sns.kdeplot(df_iris["petal_length"], ax = axes[1], shade = True)

plt.show()

如果不需要核密度图,可以将kde参数设置成False。

sns.distplot(df_iris["petal_length"], ax= axes[0], kde = False, rug = True)


如果不需要核密度图,可以将hist参数设置成False。

sns.distplot(df_iris["petal_length"], ax= axes[0], hist = False, rug = True)

# Fitting parametric distributions拟合参数分布

# 可以利用distplot() 把数据拟合成参数分布的图形并且观察它们之间的差距,再运用fit来进行参数控制。


import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

sns.set(style="white", palette="muted", color_codes=True)
rs = np.random.RandomState(10)

# Set up the matplotlib figure
f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)
sns.despine(left=True)

#引入鸢尾花数据集
df_iris = sns.load_dataset("iris")

# Plot a simple histogram with binsize determined automatically

sns.distplot(df_iris["petal_length"], ax= axes[0, 0], kde = False, color="b")

# Plot a kernel density estimate and rug plot

sns.distplot(df_iris["petal_length"], ax= axes[0, 1], kde = False, color="r", rug=True)

# Plot a filled kernel density estimate

sns.distplot(df_iris["petal_length"], ax= axes[1, 0], hist = False, color="g", kde_kws={"shade": True})

# Plot a historgram and kernel density estimate
sns.distplot(df_iris["petal_length"], color="m", ax=axes[1, 1])

plt.setp(axes, yticks=[])
plt.tight_layout()
plt.show()




Fitting parametric distributions拟合参数分布
使用Scipy和Numpy演示KDE图

我们用Scipy 和 Numpy表明概率密度函数

首先用Scipy中的norm()创建正态分布样本

然后用Numpy中的hstack()进行水平方向上的堆叠

再用Scipy中的gaussian_kde()

from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
from numpy import linspace, hstack
import matplotlib.pyplot as plt
from matplotlib.pylab import plot,show, hist

sample1 = norm.rvs(loc=-0.1,scale=1,size=320)
sample2 = norm.rvs(loc=2.0,scale=0.6,size=130)
sample = hstack([sample1,sample2])
probDensityFun = gaussian_kde(sample)
plt.title("KDE Demonstration using Scipy and Numpy",fontsize=20)
x = linspace(-5,5,200)
plot(x,probDensityFun(x),"r")
hist(sample,normed=1,alpha=0.45,color="purple")
show()

利用kdeplot探索某大学学生消费习惯与助学金获得关系
数据集如下所示:
表面三维图 常见案例 Ebola案例 体育案例 美国死亡率 金融与统计模型 统计与机器学习 生物信息学、遗传学与网络模型 高级可视化

更多内容可好看白鲸鱼的另一个学习记录:
可视化技术栈及学习计划

参考

数据可视化
Python数据可视化-seaborn
matplotlib 绘图可视化知识点整理
10分钟python图表绘制 | seaborn入门(一):distplot与kdeplot
Python mpl_toolkits画3D图
matplotlib basemap toolkit
matplotlib教程: http://nbviewer.jupyter.org/g...
python学习教程notes-python: http://nbviewer.jupyter.org/g...
9102年,该放弃matplotlib画图了
Pycon 2017: Python可视化库大全
Python中除了matplotlib外还有哪些数据可视化的库?

10 Useful Python Data Visualization Libraries for Any Discipline
Python Data Visualization: Comparing 7 tools
Dashboard API in Python
Bokeh Applications
pyecharts + notebook,真的不需要PPT了耶
三个步骤学习python可视化
一张图看懂如何选择正确的图表类型

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44703.html

相关文章

  • ApacheCN 人工智能知识树 v1.0

    摘要:贡献者飞龙版本最近总是有人问我,把这些资料看完一遍要用多长时间,如果你一本书一本书看的话,的确要用很长时间。为了方便大家,我就把每本书的章节拆开,再按照知识点合并,手动整理了这个知识树。 Special Sponsors showImg(https://segmentfault.com/img/remote/1460000018907426?w=1760&h=200); 贡献者:飞龙版...

    刘厚水 评论0 收藏0
  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 重磅 | 完备的 AI 学习路线,最详细的资源整理!

    摘要:是你学习从入门到专家必备的学习路线和优质学习资源。的数学基础最主要是高等数学线性代数概率论与数理统计三门课程,这三门课程是本科必修的。其作为机器学习的入门和进阶资料非常适合。书籍介绍深度学习通常又被称为花书,深度学习领域最经典的畅销书。 showImg(https://segmentfault.com/img/remote/1460000019011569); 【导读】本文由知名开源平...

    荆兆峰 评论0 收藏0
  • python学习笔记 序列

    内置序列 容器序列 list, tuple, collections.deque等这些序列能存放不同类型的数据 扁平序列 str, byte, bytearray, memoryview, array.array, 这些序列只能容纳一种类型数据 以上,容器序列存放的是他们所含任意类型对象的引用,而扁平序列存放的是值而不是引用 列表(list)是最基础也是最重要的序列类型 列表推导 >>> symb...

    godiscoder 评论0 收藏0
  • 分享AI有道干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)

    摘要:值得一提的是每篇文章都是我用心整理的,编者一贯坚持使用通俗形象的语言给我的读者朋友们讲解机器学习深度学习的各个知识点。今天,红色石头特此将以前所有的原创文章整理出来,组成一个比较合理完整的机器学习深度学习的学习路线图,希望能够帮助到大家。 一年多来,公众号【AI有道】已经发布了 140+ 的原创文章了。内容涉及林轩田机器学习课程笔记、吴恩达 deeplearning.ai 课程笔记、机...

    jimhs 评论0 收藏0

发表评论

0条评论

Crazy_Coder

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<