数据分析实战-15 一次学会python数据可视化的10种技能

6 篇文章 0 订阅
1 篇文章 0 订阅

底部附有图表的实现代码

可视化视图有哪些?

按照数据之间的关系,可以把可视化视图划分为4类:分别是比较,联系,构成和分布,具有以下特点:

  1. 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图
  2. 联系:查看两个或者两个以上变量之间的关系,比如散点图
  3. 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图
  4. 分布:关注单个变量,或者多个变量的分布情况,比如直方图
散点图

散点图的英⽂叫做 scatter plot,它将两个变量的值显示在⼆维坐标中,
⾮常适合展示两个变量之间的关系。

import matplotlib.pyplot as plt

scatter box

折线图

折线图可以⽤来表示数据随着时间变化的趋势。

seaborn linechart

直方图

直⽅图是⽐较常⻅的视图,它是把横坐标等分成了⼀定数量的⼩区间,这个⼩区间也叫“箱⼦”,然后在每个“箱⼦”内⽤矩形条(bars)展示该箱⼦的箱⼦数(也就是y值),这样就完成了对数据集的直⽅图分布的可视化。

matplotlib-histogram

在这里插入图片描述

条形图

如果说通过直⽅图可以看到变量的数值分布,那么条形图可以帮我们查看类别的特征。在条形图中,⻓条形的⻓度表示类别的频数,宽度表示类别。

箱线图

箱线图,⼜称盒式图,它是在1977年提出的,由五个数值点组成:最⼤值(max)、最⼩值(min)、中位数(median)和上下四分位数(Q3,Q1)。它可以帮我们分析出数据的差异性、离散程度和异常值等。
matplotlib-boxchart
matplot-boxchart

饼图

饼图是常⽤的统计学模块,可以显示每个部分⼤⼩与总和之间的⽐例。
piechart

热力图

热⼒图,英⽂叫heat map,是⼀种矩阵表示⽅法,其中矩阵中的元素值⽤颜⾊来代表,不同的颜⾊代表不同⼤⼩的值。通过颜⾊就能直观地知道某个位置上数值的⼤⼩。另外你也可以将这个位置上的颜⾊,与数据集中的其他位置颜⾊进⾏⽐较。

蜘蛛图

蜘蛛图是⼀种显示⼀对多关系的⽅法。在蜘蛛图中,⼀个变量相对于另⼀个变量的显著性是清晰可⻅的。
在这里插入图片描述

二元变量分布

在Seaborn⾥,使⽤⼆元变量分布是⾮常⽅便的,直接使⽤sns.jointplot(x,y,data=None,kind)函数即可。其中⽤kind表示不同的视图类型:“kind=‘scatter’”代表散点图,“kind=‘kde’”代表核密度图,“kind=‘hex’”代表Hexbin图,它代表的是直⽅图的⼆维模拟
joint-plot-scatter
joint-plot-kde
joint-plot-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个变量两两之间的关系。⽐如矩阵中的第⼀张图代表的就是花萼⻓度⾃身的分布图,它右侧的这张图代表的是花萼⻓度与花萼宽度这两个变量之间的关系。

pairplot relation

总结

Seaborn是基于Matplotlib更加⾼级的可视化库。

通过对数据之间的比较,联系,构成和分布,能够分析出数据之间的一些基本联系

car_crash
scatter kde hex chart

代码链接
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()
参考链接

1.数据分析实战45讲
2.你从《数据分析实战45讲》学到了什么,可以分享一下你学习数据分析的心得或者学习资料?

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值