底部附有图表的实现代码
可视化视图有哪些?
按照数据之间的关系,可以把可视化视图划分为4类:分别是比较,联系,构成和分布,具有以下特点:
- 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图
- 联系:查看两个或者两个以上变量之间的关系,比如散点图
- 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图
- 分布:关注单个变量,或者多个变量的分布情况,比如直方图
散点图
散点图的英⽂叫做 scatter plot,它将两个变量的值显示在⼆维坐标中,
⾮常适合展示两个变量之间的关系。
import matplotlib.pyplot as plt
折线图
折线图可以⽤来表示数据随着时间变化的趋势。
直方图
直⽅图是⽐较常⻅的视图,它是把横坐标等分成了⼀定数量的⼩区间,这个⼩区间也叫“箱⼦”,然后在每个“箱⼦”内⽤矩形条(bars)展示该箱⼦的箱⼦数(也就是y值),这样就完成了对数据集的直⽅图分布的可视化。
条形图
如果说通过直⽅图可以看到变量的数值分布,那么条形图可以帮我们查看类别的特征。在条形图中,⻓条形的⻓度表示类别的频数,宽度表示类别。
箱线图
箱线图,⼜称盒式图,它是在1977年提出的,由五个数值点组成:最⼤值(max)、最⼩值(min)、中位数(median)和上下四分位数(Q3,Q1)。它可以帮我们分析出数据的差异性、离散程度和异常值等。
饼图
饼图是常⽤的统计学模块,可以显示每个部分⼤⼩与总和之间的⽐例。
热力图
热⼒图,英⽂叫heat map,是⼀种矩阵表示⽅法,其中矩阵中的元素值⽤颜⾊来代表,不同的颜⾊代表不同⼤⼩的值。通过颜⾊就能直观地知道某个位置上数值的⼤⼩。另外你也可以将这个位置上的颜⾊,与数据集中的其他位置颜⾊进⾏⽐较。
蜘蛛图
蜘蛛图是⼀种显示⼀对多关系的⽅法。在蜘蛛图中,⼀个变量相对于另⼀个变量的显著性是清晰可⻅的。
二元变量分布
在Seaborn⾥,使⽤⼆元变量分布是⾮常⽅便的,直接使⽤sns.jointplot(x,y,data=None,kind)函数即可。其中⽤kind表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’”代表Hexbin图,它代表的是直⽅图的⼆维模拟
成对关系
如果想要探索数据集中的多个成对双变量的分布,可以直接采⽤sns.pairplot()函数。它会同时展示出DataFrame中每对变量的关系,另外在对⻆线上,你能看到每个变量⾃身作为单变量的分布情况。它可以说是探索性分析中的常⽤函数,可以很快帮我们理解变量对之间的关系。
pairplot函数的使⽤,就像在DataFrame中使⽤describe()函数⼀样⽅便,是数据探索中的常⽤函数。
使⽤Seaborn中⾃带的iris数据集,这个数据集也叫鸢尾花数据集。鸢尾花可以分成Setosa、Versicolour和Virginica三个品种,在这个数据集中,针对每⼀个品种,都有50个数据,每个数据中包括了4个属性,分别是花萼⻓度、花萼宽度、花瓣⻓度和花瓣宽度。通过这些数据,需要你来预测鸢尾花卉属于三个品种中的哪⼀种。
⽤Seaborn中的pairplot函数来对数据集中的多个双变量的关系进⾏探索,如下图所示。从图上你能看出,⼀共有sepal_length、sepal_width、petal_length和petal_width4个变量,它们分别是花萼⻓度、花萼宽度、花瓣⻓度和花瓣宽度。
下⾯这张图相当于这4个变量两两之间的关系。⽐如矩阵中的第⼀张图代表的就是花萼⻓度⾃身的分布图,它右侧的这张图代表的是花萼⻓度与花萼宽度这两个变量之间的关系。
总结
Seaborn是基于Matplotlib更加⾼级的可视化库。
通过对数据之间的比较,联系,构成和分布,能够分析出数据之间的一些基本联系
代码链接
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import pandas as pd
def use_plt_scatter():
s = np.random.random(size=(2, 100))
plt.scatter(s[0], s[1], marker="o") # 画散点图
plt.show()
def use_seaborn_scatter():
data = np.random.random(size=(2, 1000))
dataframe = pd.DataFrame({'x': data[0], 'y': data[1]})
sns.jointplot(x='x', y='y', data=dataframe, kind='scatter') # 画散点图
plt.show()
def use_plt_zhexian():
x = np.arange(2000, 2020, step=1, dtype=np.int32)
y = np.random.randint(20, 100, size=(20,))
plt.plot(x, y) # 画折线图
plt.show()
print(len(y))
def zhexian_use_seaborn():
x = np.arange(2000, 2020, step=1, dtype=np.int32)
y = np.random.randint(20, 100, size=(20,))
dataframe = pd.DataFrame({"x": x, "y": y})
sns.lineplot(x="x", y="y", data=dataframe)
plt.show()
def boxchart_use_matplot():
# 生成0-1之间的20*4维度数据
data = np.random.normal(size=(20,4))
labels = ['A','B','C','D']
# 用Matplotlib画箱线图
plt.boxplot(data,labels=labels)
plt.show()
def boxchart_use_seaborn():
# 生成0-1之间的20*4维度数据
data = np.random.normal(size=(20,4))
labels = ['A','B','C','D']
# 用seaborn画箱线图
df = pd.DataFrame(data,columns=labels)
sns.boxplot(data=df)
plt.show()
def histogram_chart():
# 初始化数据
data = np.random.randn(100)
series = pd.Series(data)
# matplotlib 绘制
plt.hist(series)
plt.show()
# seaborn plt
sns.displot(series,kde=False)
plt.show()
sns.displot(series,kde=True)
plt.show()
def barchart_draw():
# prepare data
x = ['cat1','cat2','cat3','cat4','cat5']
y = [10,6,7,3,12]
# use matplotlib draw bar chart
plt.bar(x,y)
plt.show()
# use seaborn
sns.barplot(x,y)
plt.show()
def piechart_draw():
# prepare data
nums = [34,12,45,53,12]
labels = ['A',"B",'C','D','E']
# plot with matplotlib
plt.pie(x=nums,labels=labels)
plt.show()
def heatmap_draw():
# prepare data
flights = sns.load_dataset("flights")
data = flights.pivot('year','month','passenger')
# draw with seaborn
sns.heatmap(data)
plt.show()
def radar_chart_draw():
# prepare data
labels = np.array([u'推进','kda',u'生存',u'团战',u'发育',u'输出'])
stats = [90,85,82,78,88,93]
# angle state data
angles = np.linspace(0,2*np.pi,len(labels),endpoint=False)
stats = np.concatenate((stats,[stats[0]]))
angles = np.concatenate((angles,[angles[0]]))
# draw radar chart with matplotlib
figure = plt.figure()
ax = figure.add_subplot(111,polar=True)
ax.plot(angles,stats,'o-',linewidth=2)
ax.fill(angles,stats,alpha=0.25)
# configure Chinese font
# font = FontProperties()
plt.show()
def joint_plot_draw():
# prepare data
sns.set()
tips = sns.load_dataset("tips")
print(tips.head(10))
# seaborn draw jointplot(scatter ,kde ,hexbin)
sns.jointplot(x='total_bill',y='tip',data=tips,kind='scatter')
sns.jointplot(x='total_bill',y='tip',data=tips,kind='kde')
sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
plt.show()
def pairplot_draw():
# load data
iris = sns.load_dataset('iris')
# draw picture with seaborn
sns.pairplot(iris)
plt.show()
def car_crash_chart():
data = sns.load_dataset('car_crashes')
print(data.head(10))
# draw pair chart
sns.pairplot(data)
# draw scatter chart
sns.jointplot(x='total',y='speeding',data=data,kind='scatter')
# draw seaborn ked
sns.jointplot(x='total',y='speeding',data=data,kind='kde')
# draw seaborn hexbin chart
sns.jointplot(x='total',y='speeding',data=data,kind='hex')
plt.show()
if __name__ == '__main__':
# use_plt_scatter()
# use_seaborn_scatter()
# use_plt_zhexian()
# zhexian_use_seaborn()
# boxchart_use_matplot()
# boxchart_use_seaborn()
# histogram_chart()
# barchart_draw()
# piechart_draw()
# heatmap_draw()
# radar_chart_draw()
# joint_plot_draw()
# pairplot_draw()
car_crash_chart()