Python数据可视化复习

一、 可视化概念
数据可视化,是关于数据视觉表现形式的科学技术研究,它为大数据分析提供了一种更加直观的挖掘、分析与展示的手段。数据可视化以数据挖掘、数据采集、数据分析为基础;此外,它还是一种新的表达数据的方式,是对现实世界的抽象表达。

二、 统计学概念

  1. 集中趋势的度量
    集中趋势的度量通常称为平均值,用于描述概率分布的中心值或典型值。
    平均值:将所有测量值相加,并除以观察值的数量所得到的算术平均值。
    中位数:表示有序数据集的中间值,如果包含偶数个观测值,中位数将是两个中间值的平均值。与平均值相比,中位数不太容易出现异常值。其中,异常值表示为数据中较为独特的值。
    模式(众数):模式被定义为最频繁的值,在多个值同样频繁的情况下,可能存在多个模式。
  2. 离散度的度量
    离散度也称作可变性,是指概率分布被拉伸或压缩的程度。
    方差:是指各个数据与其算术平均数的离差平方和的平均数,它描述了一组数字与其平均值间的距离。
    标准偏差:表示为方差的平方根。
    范围:表示为数据集中最大和最小值间的差。
    四分位范围:也称作中间离散或中间50%,表示第75和第25百分位之间的差,或上四分位数和下四分位数之间的差。
  3. 相关性
    相关性表示两个变量间的统计学关系。
    在正相关中,两个变量在同一方向上移动。
    在负相关中,两个变量以相反方向移动。
    在0相关中,变量间彼此不相关。
    注意:相关性并不意味着因果关系。相关性描述了两个变量间的关系,而因果关系则描述了一个事件如何被另一个事件所引发。
    两个变量的相关性可以使用协方差来衡量。

三、 numpy
4. 概念
核心对象ndarray
ndarray对象比较重要的属性:

属性 说明
ndarray.ndim 秩,即轴的数量或维度的数量
ndarray.shape 数组的维度,对于矩阵,n 行 m 列
ndarray.size 数组元素的总个数,相当于 .shape 中 n*m 的值
ndarray.dtype ndarray 对象的元素类型
ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位
ndarray.flags ndarray 对象的内存信息
ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性
  1. 索引和切片(自己练习)

ndarray对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作一样。

ndarray 数组可以基于 0 - n 的下标进行索引,切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

import numpy as np

a=np.arrange(10)
s=slice(2,7,2)   # 从索引 2 开始到索引 7 停止,间隔为2
print(a[s])

输出结果为:

[2  4  6]

以上实例中,我们首先通过 arange() 函数创建 ndarray 对象。 然后,分别设置起始,终止和步长的参数为 2,7 和 2。

我们也可以通过冒号分隔切片参数 start:stop:step 来进行切片操作:

import numpy as np

a=np.arrange(10)
b=a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)

输出结果为:

[2  4  6]

冒号:的解释:如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

import numpy as np

a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
b = a[5] 
print(b)

输出结果为:

5
import numpy as np
 
a = np.arange(10)
print(a[2:])

输出结果为:

[2  3  4  5  6  7  8  9]
import numpy as np
 
a = np.arange(10)  # [0 1 2 3 4 5 6 7 8 9]
print(a[2:5])

输出结果为:

[2  3  4]

多维数组同样适用上述索引提取方法:

import numpy as np
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])

输出结果为:

[[1 2 3]
 [3 4 5]
 [4 5 6]]
从数组索引 a[1:] 处开始切割
[[3 4 5]
 [4 5 6]]

切片还可以包括省略号,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

import numpy as np
 
a = np.array([[1,2,3],[3,4,5],[4,5,6]])  
print (a[...,1])   # 第2列元素
print (a[1,...])   # 第2行元素
print (a[...,1:])  # 第2列及剩下的所有元素

输出结果为:

[2 4 5]
[3 4 5]
[[2 3]
 [4 5]
 [5 6]]
  1. Numpy常用方法
方法 作用
Np.max numpy.amax() 用于计算数组中的元素沿指定轴的最大值。(amax和max一样)
Np.min numpy.amin() 用于计算数组中的元素沿指定轴的最小值。(amin和min一样)
Np.average numpy.average() 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。
Np.std numpy.std() 用于计算标准差。
Np.var numpy.var() 用于计算方差。
Np.random.normal numpy.random.normal是高斯分布的概率密度函数。
Np.random.uniform numpy.random.uniform(low,high,size)是从一个均匀分布[low,high)中随机采样,注意定义域是左闭右开,即包含low,不包含high。
Np.linspace numpy.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)产生从start到stop的等差数列,num为元素个数,默认50个。linspace()通过指定开始值、终值和元素个数创建表示等差数列的一维数组,可以通过endpoint参数指定是否包含终值,默认值为True,即包含终值。
Np.arange numpy.arange(start,stop, step,dtype = None ) 在给定间隔内返回均匀间隔的值。也就是说,np.arange()函数生成的是一个等差数列。arange()类似于内置函数range(),通过指定开始值、终值和步长创建表示等差数列的一维数组,注意得到的结果数组不包含终值。
Np.random.rand np.random.rand(d0,d1,d2……dn)通过本函数可以返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1),不包括1。
Np.random.randint numpy.random.randint(low, high=None, size=None, dtype=‘l’) 返回一个随机整型数,范围从低(包括)到高(不包括),即[low, high)。如果没有写参数high的值,则返回[0,low)的值。
Np.random.randn numpy.random.randn(d0,d1,…,dn)randn函数返回一个或一组样本,具有标准正态分布。

四、 pandas
8. 核心对象
Series和DataFrame

Series详解(引用自博主:yungeisme)
DataFrame详解(引用自博主:wei_lin)

  1. DataFrame对象的创建

增删改查详解(引用自博主:All_Will_Be_Fine噻)

  1. 遍历

五、 matplotlib

Python数据可视化复习_第1张图片

#导入库并创建坐标轴
import matplotlib.pyplot as plt
fig = plt.figure()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(xlim=[0.5, 4.5], ylim=[-2, 8], title='An Example Axes',
       ylabel='Y-Axis', xlabel='X-Axis')
plt.show()
  1. 比较图
    柱状图
np.random.seed(1)
x = np.arange(5)
y = np.random.randn(5)

fig, axes = plt.subplots(ncols=2, figsize=plt.figaspect(1./2))

vert_bars = axes[0].bar(x, y, color='lightblue', align='center')
horiz_bars = axes[1].barh(x, y, color='lightblue', align='center')
#在水平或者垂直方向上画线
axes[0].axhline(0, color='gray', linewidth=2)
axes[1].axvline(0, color='gray', linewidth=2)
plt.show()

线型图

x = np.linspace(0, np.pi)
y_sin = np.sin(x)
y_cos = np.cos(x)

ax1.plot(x, y_sin)
ax2.plot(x, y_sin, 'go--', linewidth=2, markersize=12)
ax3.plot(x, y_cos, color='red', marker='+', linestyle='dashed')
x = np.linspace(0, 10, 200)
data_obj = {'x': x,
            'y1': 2 * x + 1,
            'y2': 3 * x + 1.2,
            'mean': 0.5 * x * np.cos(2*x) + 2.5 * x + 1.1}

fig, ax = plt.subplots()

#填充两条线之间的颜色
ax.fill_between('x', 'y1', 'y2', color='yellow', data=data_obj)

# Plot the "centerline" with `plot`
ax.plot('x', 'mean', color='black', data=data_obj)

plt.show()

雷达图
17. 关系图
散点图

x = np.arange(10)
y = np.random.randn(10)
plt.scatter(x, y, color='red', marker='+')
plt.show()

气泡图

np.random.seed(19680801)


N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30 * np.random.rand(N))**2  # 0 to 15 point radii

plt.scatter(x, y, s=area, c=colors, alpha=0.5)
plt.show()

热图

def draw_heatmap(data,xlabels,ylabels):  
    #cmap=cm.Blues      
    cmap=cm.get_cmap('rainbow',1000)  
    figure=plt.figure(facecolor='w')  
    ax=figure.add_subplot(1,1,1,position=[0.1,0.15,0.8,0.8])  
    ax.set_yticks(range(len(ylabels)))  
    ax.set_yticklabels(ylabels)  
    ax.set_xticks(range(len(xlabels)))  
    ax.set_xticklabels(xlabels)  
    map=ax.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=a.min(),vmax=a.max())  
    cb=plt.colorbar(mappable=map,cax=None,ax=None,shrink=0.5)  
    plt.show()  
              
a=np.random.rand(10,10)  
print(a)
xlabels=['A','B','C','D','E','F','G','H','I','J']  
ylabels=['a','b','c','d','e','f','g','h','i','j']  
draw_heatmap(a,xlabels,ylabels)

相关图
18. 合成图
饼图

labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)  # only "explode" the 2nd slice (i.e. 'Hogs')

fig1, (ax1, ax2) = plt.subplots(2)
ax1.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True)
ax1.axis('equal')
ax2.pie(sizes, autopct='%1.2f%%', shadow=True, startangle=90, explode=explode,
    pctdistance=1.12)
ax2.axis('equal')
ax2.legend(labels=labels, loc='upper right')

plt.show()

堆叠柱状图

plt.title('Scores by group and gender')

N = 13
ind = np.arange(N)  #[ 0  1  2  3  4  5  6  7  8  9 10 11 12]
plt.xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5', 'G6', 'G7', 'G8', 'G9', 'G10', 'G11', 'G12', 'G13'))

plt.ylabel('Scores')
plt.yticks(np.arange(0, 81, 20))

Bottom = (52, 49, 48, 47, 44, 43, 41, 41, 40, 38, 36, 31, 29)
Center = (38, 40, 45, 42, 48, 51, 53, 54, 57, 59, 57, 64, 62)
Top = (10, 11, 7, 11, 8, 6, 6, 5, 3, 3, 7, 5, 9)

d = []
for i in range(0, len(Bottom)):
    sum = Bottom[i] + Center[i]
    d.append(sum)

width = 0.35  # 设置条形图一个长条的宽度
p1 = plt.bar(ind, Bottom, width, color='blue') 
p2 = plt.bar(ind, Center, width, bottom=Bottom,color='green')  
p3 = plt.bar(ind, Top, width, bottom=d,color='red')

plt.legend((p1[0], p2[0], p3[0]), ('Bottom', 'Center', 'Top'),loc = 3)

plt.show()

韦恩图
19. 分布图
直方图

np.random.seed(19680801)

n_bins = 10
x = np.random.randn(1000, 3)

fig, axes = plt.subplots(nrows=2, ncols=2)
ax0, ax1, ax2, ax3 = axes.flatten()

colors = ['red', 'tan', 'lime']
ax0.hist(x, n_bins, density=True, histtype='bar', color=colors, label=colors)
ax0.legend(prop={'size': 10})
ax0.set_title('bars with legend')

ax1.hist(x, n_bins, density=True, histtype='barstacked')
ax1.set_title('stacked bar')

ax2.hist(x,  histtype='barstacked', rwidth=0.9)

ax3.hist(x[:, 0], rwidth=0.9)
ax3.set_title('different sample sizes')

fig.tight_layout()
plt.show()

箱型图

fig, (ax1, ax2) = plt.subplots(2)
ax1.boxplot(data)
ax2.boxplot(data2, vert=False) #控制方向

小提琴图

fig,axes = plt.subplots(nrows=1,ncols=2,figsize=(12,5))
tang_data = [np.random.normal(0,std,100) for std in range(6,10)]
axes[0].violinplot(tang_data,showmeans=False,showmedians=True)
axes[0].set_title('violin plot')
 
axes[1].boxplot(tang_data)
axes[1].set_title('box plot')
 
#设置格子
for ax in axes:
    ax.yaxis.grid(True)
    ax.set_xticks([y+1 for y in range(len(tang_data))])
plt.setp(axes,xticks=[y+1 for y in range(len(tang_data))],xticklabels=['x1','x2','x3','x4'])

以上加粗内容要求能够编写代码实现
Matplotlib常用方法:
绘图方法,如:plot、hist、bar、pie等
Subplot
Title
Xlabel
Ylabel
Legend
Xticks
Yticks
Xlim
Ylim

六、 Seaborn
Set_style及五种风格
调色板的使用

你可能感兴趣的:(操作指南,python,人工智能,可视化,大数据)