本文目录一览:
- 1、Python中数据可视化经典库有哪些?
- 2、Python数据可视化 箱线图
- 3、Python 数据可视化:分类特征统计图
- 4、求助编程大神,Python数据可视化,参考图一部分代码做出图二的效果。
Python中数据可视化经典库有哪些?
Python有很多经典的数据可视化库,比较经典的数据可视化库有下面几个。
matplotlib
是Python编程语言及其数值数学扩展包 NumPy 的可视化操作界面。它利用通用的图形用户界面工具包,如 Tkinter, wxPython, Qt 或 GTK+,向应用程序嵌入式绘图提供了应用程序接口。
pyplot 是 matplotlib 的一个模块,它提供了一个类似 MATLAB 的接口。 matplotlib 被设计得用起来像 MATLAB,具有使用 Python 的能力。
优点:绘图质量高,可绘制出版物质量级别的图形。代码够简单,易于理解和扩展,使绘图变得轻松,通过Matplotlib可以很轻松地画一些或简单或复杂的图形,几行代码即可生成直方图、条形图、散点图、密度图等等,最重要的是免费和开源。
pandas
Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。需要说明的是它不是“熊猫”,名字衍生自术语 "panel data"(面板数据)和 "Python data analysis"(Python 数据分析)。
优点:是Python的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观的处理关系型、标记型数据。对于数据分析专业人士,它是数据分析及可视化的利器。
seaborn
Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。
它是基于matplotlib更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,应该把Seaborn视为matplotlib的补充,而不是替代物,它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。
优点:matplotlib高度封装,代码量少,图表漂亮。比起matplotlib具有更美观、更现代的调色板设计等优点。scikit-plot
这是一个跟机器学习有效结合的绘图库。想要深入学习的小伙伴参见其github仓库,这里不再赘述了。
优点:Scikit-Plot是由ReiichiroNakano创建的用在机器学习的可视化工具,能最快速简洁的画出用Matplotlib要写很多行语句才能画出的图。关键是对于机器学习相关可视化处理,该库有较好的支持。
Networkx
networkx是Python的一个包,用于构建和操作复杂的图结构,提供分析图的算法。图是由顶点、边和可选的属性构成的数据结构,顶点表示数据,边是由两个顶点唯一确定的,表示两个顶点之间的关系。顶点和边也可以拥有更多的属性,以存储更多的信息。
优点:用于创建、操纵和研究复杂网络的结构、以及学习复杂网络的结构、功能及其动力学。
上面是我的回答,希望对您有所帮助!
Python数据可视化 箱线图
Python数据可视化:箱线图
一、箱线图概念
箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。
计算过程:
(1)计算上四分位数(Q3),中位数,下四分位数(Q1)
(2)计算上四分位数和下四分位数之间的差值,即四分位数差(IQR,interquartile range)Q3-Q1
(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线。
(4)大于上四分位数1.5倍四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值(outliers)。
(5)异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须。
(6)极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍-3倍四分位数差之间的异常值,用空心点表示。
(7)为箱线图添加名称,数轴等
二、四分位数的计算
分位数根据其将数列等分的形式不同可以分为中位数,四分位数,十分位数、百分位数等等。四分位数作为分位数的一种形式,在统计中有着十分重要的意义和作用,而大多数的统计学原理教材只介绍其基本含义,对其具体计算,尤其是由组距数列计算都不作介绍,成为统计学原理教材中的空白。那么,如何根据数列计算四分位数呢?一般来讲,视资料是否分组而定。
1、根据未分组的资料计算四分位数
第一步:确定四分位数的位置
四分位数是将数列等分成四个部分的数,一个数列有三个四分位数,设下分位数、中分位数和上分位式中n表示资料的项数
第二步:根据第一步所确定的四分位数的位置,确定其相应的四分位数。
例1:某车间某月份的工人生产某产品的数量分别为13、13.5、13.8、13.9、14、14.6、14.8、15、15.2、15.4、15.7公斤,则三个四分位数的位置分别为:
即变量数列中的第三个、第六个、第九个工人的某种产品产量分别为下四分位数、中位 数和上四分位数。即:
Q1 =13.8公斤、Q2=14.6公斤、Q3=15.2公斤
上例中(n+1)恰好为4的倍数,所以确定四分数较简单,如果(n+1)不为4的整数倍数,按上述分式计算出来的四分位数位置就带有小数,这时,有关的四分位数就应该是与该小数相邻的两个整数位置上的标志值的平均数,权数的大小取决于两个整数位置距离的远近,距离越近,权数越大,距离越远,权数越小,权数之和等于1。
例2:某车间某月份的工人生产某产品的数量分别为13、13.5、13.8、13.9、14、14.6、14.8、15、15.2、15.4公斤,则三个四分位数的位置分别为:
即变量数列中的第2.75项、第5.5项、第8.25项工人的某种产品产量分别为下四分位 数、中位数和上四分位数。即:
在实际资料中,由于标志值序列中的相邻标志值往往是相同的,因而不一定要通过计算才能得到有关的四分位数。
2、由组距式数列确定四分位数
第一步,向上或向下累计次数.
第二步,根据累计次数确定四分位数的位置.
(1)、当采用向上累计次数的资料确定四分位数时,四分位数位置的公式是:
(2)、当采用向下累计次数的资料确定四分位数时,四分位数位置的公式是:
第三步,根据四分位数的位置算出各四分位数.
(1)、当累计次数是向上累计时,按下限公式计算各四分位数.
(2)、当累计次数是向下累计时,按上限公式计算各四分位数.
例3:某企业职工按月工资的分组资料如下:
根据上述资料确定某企业职工的月工资的三个四分位数如下:
(1)、采用向上累计职工人数的资料得月工资四分位数的位置为:
(2)、采用向下累计职工人数的资料得月工资四分位数的位置为:
3、异常值
异常值:限制线以外的数据全部为异常值
三、画图
# Python
import plotly.plotly
import plotly.graph_objs as go
data = [
go.Box(
y=[0, 1, 1, 2, 3, 5, 8, 13, 21] # 9个数据
)
]
plotly.offline.plot(data) # 离线绘图
Python 数据可视化:分类特征统计图
上一课已经体验到了 Seaborn 相对 Matplotlib 的优势,本课将要介绍的是 Seaborn 对分类数据的统计,也是它的长项。
针对分类数据的统计图,可以使用 sns.catplot 绘制,其完整参数如下:
本课使用演绎的方式来学习,首先理解这个函数的基本使用方法,重点是常用参数的含义。
其他的参数,根据名称也能基本理解。
下面就依据 kind 参数的不同取值,分门别类地介绍各种不同类型的分类统计图。
读入数据集:
然后用这个数据集制图,看看效果:
输出结果:
毫无疑问,这里绘制的是散点图。但是,该散点图的横坐标是分类特征 time 中的三个值,并且用 hue='kind' 又将分类特征插入到图像中,即用不同颜色的的点代表又一个分类特征 kind 的值,最终得到这些类别组合下每个记录中的 pulse 特征值,并以上述图示表示出来。也可以理解为,x='time', hue='kind' 引入了图中的两个特征维度。
语句 ① 中,就没有特别声明参数 kind 的值,此时是使用默认值 'strip'。
与 ① 等效的还有另外一个对应函数 sns.stripplot。
输出结果:
② 与 ① 的效果一样。
不过,在 sns.catplot 中的两个参数 row、col,在类似 sns.stripplot 这样的专有函数中是没有的。因此,下面的图,只有用 sns.catplot 才能简洁直观。
输出结果:
不过,如果换一个叫角度来说,类似 sns.stripplot 这样的专有函数,表达简单,参数与 sns.catplot 相比,有所精简,使用起来更方便。
仔细比较,sns.catplot 和 sns.stripplot 两者还是稍有区别的,虽然在一般情况下两者是通用的。
因此,不要追求某一个是万能的,各有各的用途,存在即合理。
不过,下面的声明请注意: 如果没有非常的必要,比如绘制分区图,在本课中后续都演示如何使用专有名称的函数。
前面已经初步解释了这个函数,为了格式完整,这里再重复一下,即 sns.catplot 中参数 kind='strip'。
如果非要将此函数翻译为汉语,可以称之为“条状散点图”。以分类特征为一坐标轴,在另外一个坐标轴上,根据分类特征,将该分类特征数据所在记录中的连续值沿坐标轴描点。
从语句 ② 的结果图中可以看到,这些点虽然纵轴的数值有相同的,但是没有将它们重叠。因此,我们看到的好像是“一束”散点,实际上,所有点的横坐标都应该是相应特征分类数据,也不要把分类特征的值理解为一个范围,分散开仅仅是为了图示的视觉需要。
输出结果:
④ 相对 ② 的图示,在于此时同一纵轴值的都重合了——本来它们的横轴值都是一样的。实现此效果的参数是 jitter=0,它可以表示点的“振动”,如果默认或者 jitter=True,意味着允许描点在某个范围振动——语句 ② 的效果;还可设置为某个 0 到 1 的浮点,表示许可振动的幅度。请对比下面的操作。
输出结果:
语句 ② 中使用 hue='kind' 参数向图中提供了另外一个分类特征,但是,如果感觉图有点乱,还可以这样做:
输出结果:
dodge=True 的作用就在于将 hue='kind' 所引入的特征数据分开,相对 ② 的效果有很大差异。
并且,在 ⑤ 中还使用了 paletter='Set2' 设置了色彩方案。
sns.stripplot 函数中的其他有关参数,请读者使用帮助文档了解。
此函数即 sns.catplot 的参数 kind='swarm'。
输出结果:
再绘制一张简单的图,一遍研究这种图示的本质。
输出结果:
此图只使用了一个特征的数据,简化表象,才能探究 sns.swarmplot 的本质。它同样是将该特征中的数据,依据其他特征的连续值在图中描点,并且所有点在默认情况下不彼此重叠——这方面与 sns.stripplot 一样。但是,与之不同的是,这些点不是随机分布的,它们经过调整之后,均匀对称分布在分类特征数值所在直线的两侧,这样能很好地表示数据的分布特点。但是,这种方式不适合“大数据”。
sns.swarmplot 的参数似乎也没有什么太特殊的。下面使用几个,熟悉一番基本操作。
在分类维度上还可以再引入一个维度,用不同颜色的点表示另外一种类别,即使用 hue 参数来实现。
输出结果:
这里用 hue = 'smoker' 参数又引入了一个分类特征,在图中用不同颜色来区分。
如果觉得会 smoker 特征的值都混在一起有点乱,还可以使用下面方式把他们分开——老调重弹。
输出结果:
生成此效果的参数就是 dodge=True,它的作用就是当 hue 参数设置了特征之后,将 hue 的特征数据进行分类。
sns.catplot 函数的参数 kind 可以有三个值,都是用于绘制分类的分布图:
下面依次对这三个专有函数进行阐述。
求助编程大神,Python数据可视化,参考图一部分代码做出图二的效果。
给你个例子
import numpy as np
import matplotlib.pyplot as plt
def bar2():
plt.rcParams['font.sans-serif'] = ['SimHei']
name = ["吕布","赵云","典韦","关羽","马超","张飞","夏侯惇","太史慈"]
x_index = np.arange(len(name))
width=0.35
OP=[99,96,96,93,93,92,90,89]
HP=[70,95,70,83,88,70,75,78]
plt.bar(x_index,OP,width=width,label="攻击力")
plt.bar(x_index + width, HP, width=width, label="体力")
plt.xlabel("武将")
plt.ylabel("能力值")
plt.title("三国志武将分析")
plt.legend()
plt.xticks(ticks=x_index,labels=name)
plt.show()
bar2()