python之数据分析与展示(numpy、matplotlib、pandas)

     前提说明:在学习了一定的python基础后,方可继续学习这方面的内容。如果没有python基础语法的学习,可以浏览python基础语法笔记总结。这里主要是讲解numpy、matplotlib、pandas这些第三方库。对于数据处理和分析展示用这几个库函数会特别的便捷。


IPythond %魔术命令

常用命令说明
%magic显示所有魔术命令
%histIPython命令的输入历史
%pdb异常发生后自动进入调试器
%reset删除当前命名空间中的全部变量或名称
%who显示IPython当前命名空间中已经定义的变量
%time statement给出代码的执行时间,statement表示一段代码
%timeit statement多次执行代码,计算综合平均执行时间

一、数据分析及表示

1、NumPy入门

​ Numpy是Python科学计算的基础包。

提供的功能:

​ 快速高效的多维数组对象ndarray。

​ 用于数组执行元素级计算以及直接对数组执行数学运算的函数

​ 用于读写硬盘上基于数组的数据集的工具。

​ 线性代数运算、傅里叶变换,以及随机数生成。

​ 用于将C、C++、Fortran代码集成到Python的工具

1.1、数据的维度

维度:一组数据的表示形式

一维数据:由对等关系的有序或无需数据构成,采用线性方式组织。对应列表、集合等

二维数据:由多个一维数据构成,是一维数据的组合形式。表格是典型的二维数据

多维数据:由一维或二维数据在新维度上扩展形成

高维数据:利用最基本的二元关系展示数据间的复杂结构。利用字典类型或数据表示格式。

1.2、NumPy的数组对象:ndarray

NumPy是一个开源的Python科学计算基础库

​ 一个强大的N维数组对象:ndarray,广播功能函数,线性代数、傅里叶变换、随机数生成等功能。

​ NumPy是SciPy、Pandas等数据处理或科学计算库的基础。

​ N维数组对象:ndarray,由两部分构成:实际的数据,描述这些数据的元数据(数据维度、数据类型等)

​ ndarray数组一般要求所有元素类型相同,数组下标从0开始

#计算A²+B³,A和B均为一维数组
import numpy as np  #俗称np

def npSum():
    a = np.array([0,1,2,3,4])
    b = np.array([9,8,7,6,5])
    c = a**2 + b**3
	return c

print(npSum())

ndarray对象的属性:轴:保存数据的维度 秩:轴的数量

属性说明
.ndim秩,即轴的数量或维度的数量
.shapendarray对象的尺度,对于矩阵,n行m列
.sizendarray对象元素的个数,相当于.shape中n*m的值
.dtypendarray对象的元素类型
.itemsizendarray对象中每个元素的大小,以字节为单位

ndarray的元素类型:科学计算设计数据较多,对存储和性能都有较高要求。对元素类型精细定义,有助于NumPy合理使用存储空间并优化性能。对元素类型精细定义,有助于程序员对程序规模有合理评估。

ndarray的元素类型(一)

数据类型说明
bool布尔类型,True或False
intc与C语言中int类型一致,一般是int32或int64
intp用于索引的整数,与C语言中ssize_t一致,int32或int64
int8字节长度的整数,取值:[-128,127]
int1616位长度的整数,取值:[-32768,32767]
int3232位长度的整数,取值:[-231,231-1]
int6464位长度的整数,取值:[-263,263-1]

ndarray的元素类型(二)

数据类型说明
uint88位无符号整数,取值:[0,255]
uint1616位无符号整数,取值:[0,65535]
uint3232位无符号整数,取值:[0,2^32-1]
uint6464位无符号整数,取值:[0,2^64-1]
float1616位半精度浮点数:1位符号位,5位指数,10位尾数
float3232位半精度浮点数:1位符号位,8位指数,23位尾数
float6464位半精度浮点数:1位符号位,11位指数,52位尾数
complex64复数类型,实部和虚部都是32位浮点数
complex128复数类型,实部和虚部都是64位浮点数

1.3、NumPy数组的创建和变换

1.3.1、NumPy数组的创建

(1)从python中的列表、元组等类型创建ndarray数组

x = np.array(list/tuple)  #根据数据确定一个类型
x = np.array(list/tuple,dtype=np.float32) #指定元素的类型

(2)使用NumPy中函数创建ndarray数组,如:arange,ones,zeros等

函数说明
np.arange(n)类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape)根据shape生成一个全1数组,shape是元组类型
np.zeros(shape)根据shape生成一个全0数组,shape是元组类型
np.full(shape,val)根据shape生成一个数组,每个元素值都是val
np.eye(n)创建一个正方的n*n单位矩阵,对角线为1,其余为0
np.ones_like(a)根据数组a的形状生成一个全1数组
np.zeros_like(a)根据数组a的形状生成一个全0数组
np.full_like(a,val)根据数组a的形状生成一个数组,每个元素值都是val

(3)使用Numpy中其他函数创建ndarray数组

函数说明
np.linspace()根据起止数据等间距地填充数据,形成数组
np.concatenate()将两个或多个数组合并成一个新的数组
np.concatenate([a, b], axis=0)	#将数组a,和数组b垂直方向上叠加

np.concatenate([a, b], axis=1)	#将数组a,和数组b水平方向上叠加

​ np.vstack((a, b)) #使用numpy中vstack()方法,将数组a,和数组b垂直方向上叠加

​ np.hstack([a, b]) #使用numpy中hstack()方法,将数组a,和数组b水平方向上叠加

​ np.dstack() #沿第三个维度进行拼接

np.r_[a, b]	#将数组a,和数组b垂直方向上叠加
np.c_[a, b]	#将数组a,和数组b水平方向上叠加

1.3.2、NumPy数组的维度变换

方法说明
.reshape(shape)不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape)与.reshape()功能一致,但修改原数组,不返回
.swapaxes(ax1,ax2)将数组n个维度中两个维度进行调换
.flatten()对数组进行降维,返回折叠后的一维数组,原数组不变

​ astype()方法进行类型变换,会创建一个新的数组(原始数据的一个拷贝),即使两个类型一致。

​ tolist()方法向列表进行转换

​ a.T 转置操作

​ tanspose()函数,二维时不设置参数时,则为转置。高维时,传入一个轴,进行变换。需要借助图形去理解

1.4、ndarray数组的操作

​ 数组的索引和切片

索引:获取数组中特定位置元素的过程

切片:获取数组元组子集的过程

​ 一维数组的索引和切片:与python的列表类似

​ 多维数组的索引:a[1,2,3]分别代表维度,行数,列数

​ 多维数组的切片:a[::,::,::]冒号分别控制一个,每个维度与一维思维方式一样

​ split(),hsplit(),vsplit()切分函数

1.5、ndarray数组的运算

​ 数组与标量之间的运算作用于数组的每一个元素

NumPy一元函数:对ndarray中的数据执行元素级运算的函数。均生成新的元素,不改变原来的数组。

函数说明
np.abs(x) np.fabs(x)计算数组各元素的绝对值
np.sqrt(x)计算数组各元素的平方根
np.square(x)计算数组各元素的平方
np.log(x) np.log10(x) np.log(x)计算数据各元素的自然对数、10底对数和2底对数
np.ceil(x) np.floor(x)计算数组各元素的ceiling值或floor值
np.rint(x)计算数组各元素的四舍五入值
np.modf(x)将数组各元素的小数和整数部分以两个独立数组形式返回
np.cos(x) np.cosh(x) np.sin(x) np.sinh(x) np.tan(x) np.tanh(x)计算数组各元素的普通型和双曲型三角函数
np.exp(x)计算数组各元素的指数值
np.sign(x)计算数组各元素的符合值,1(+),0,-1(-)

NumPy二元函数

函数说明
+ - * / **两个数组各元素进行对应运算
np.maximum(x,y) np.fmax() np.minimum(x,y) np.fmin()元素级的最大值/最小值计算
np.mod(x,y)元素级的模运算
np.copysign(x,y)将数组y中各元素值的符合赋值给数组x对应元素
> < >= <= == !=算术比较,产生布尔型数组

​ np.dot(arr.T,arr) #矩阵内积计算。矩阵乘法的函数

​ np.intersect1d() #求两个数组的交集

​ np.setdiff1d(a,b) #求两个数组的差集,在a中不在b中,一维数组

​ np.where() #用法一:类似于三元表达式,用法二:返回符合条件的下标

2、NumPy数据存储与函数

2.1、一维、二维数组的存取

​ CSV文件:是一种存储一维、二维的标准存储文件格式

np.savetxt(frame,array,fmt='%.18e',delimiter=None)   #写入文件

frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件

array:存入文件的数组。

fmt:写入文件的格式,例如:%d %.2f %.18e

delimiter:分隔字符串,默认是任何空格

import numpy as np
a = np.arange(100).reshape((5,20))
np.savetxt('a.csv',a,fmt='%d',delimiter=',')
np.loadtxt(frame,dtype='np.float',delimiter=None,unpack=False)	#读出文件

dtype:数据类型,可选

unpack:如果True,读入属性将分别写入不同变量

2.2、多维数据的存取

a.tofile(frame,sep=',',formate='%s') 	#逐一写入文件,不区分维度

frame:文件、字符串。

sep:数据分隔字符串,如果是空串,写入文件为二进制

format:写入数据的格式。

a.fromfile(frame,dtype=float,count=-1,sep=',')	#从文件读出

count:选择读出的个数

NumPy的便捷文件存取

​ np.save(fname,array) 或 np.svaez(fname,array)

frame:文件名,以.npy为扩展名,压缩扩展名为.npz

array:数组变量

​ np.load(fname)

2.3、Numpy的随机数函数子库

np.random的随机数函数

函数说明
rand(d0,d1,…,dn)根据d0-dn创建随机数数组,浮点数,[0,1),均匀分布
randn(d0,d1,…,dn)根据d0-dn创建随机数数组,标准正态分布
randint(low[,high,shape])根据shape创建随机整数或整数数组,范围是[low,high)
seed(s)随机数种子,s是给定的种子值
shuffle(a)根据数组a的第1轴进行随排列,改变数组x
permutation(a)根据数组a的第1轴产生一个新的乱序数组,不改变数组x
choice(a[,size,replace,p])从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可以重用元素,默认为False
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状
normal(loc,scale,size)产生具有整体分布的数组,loc均值,scale标准差,size形状
poisson(lam,size)产生具有泊松分布的数组,lam随机事件发生率,size形状

2.4、Numpy的统计函数

函数说明
sum(a,axis=None)根据给定轴axis计算数组a相关元素之和,axis整数或元组
mean(a,axis=None)根据给定轴axis计算数组a相关元素的期望,axis整数或元组
average(a,axis=None,weights=None)根据给定轴axis计算数组a相关元素的加权平均值
std(a,axis=None)根据给定轴axis计算数组a相关元素的标准差
var(a,axis=None)根据给定轴axis计算数组a相关元素的方差
min(a) max(a)计算数组a中元素的最小值、最大值
argmin(a) argmax(a)计算数组a中元素最小值、最大值的降一维后下标
unravel_index(index,shape)根据shape将一维下标index转换成多维下标
ptp(a)计算数组a中元素最大值与最小值的差
median(a)计算数组a中元素的中位数(中值)

1、统计记录的个数:np.count_nonzero()

# 统计小于6的个数:
x = np.array([1,2,3,4,5,6,7,8,9])
np.count_nonzero(x<6)	#方法一
np.sum(x<6)		#方法二	下面这些方法都可以使用:axis属性
np.any(x<6)		#是否存在小于6的数
np.all(x<6)		#是否所有都小于6

2、布尔运算符: & | ^ ~ and or

and 和 or 判断整个对象是真或假,而 & 和 | 是指每个对象中的比特位

 np.sum((inches > 0.5) & (inches < 1)) 

3、掩码操作

x[x<6]

2.5、Numpy的梯度函数

np.gradient(f)	#计算数组f中元素的梯度,当f为多维时,返回每个维度梯度

梯度:连续值之间的变化率,即斜率。

​ XY坐标轴连续三个X坐标对应的Y轴值:a,b,c,其中,b的梯度是:(c-a)/2

3、实例:图像手绘

​ PIL库:强大图像处理能力

from PIL import Image	#Image是PIL库中代表一个图像的类(对象)
from PIL import Image
import numpy as np
im = np.array(Image.open("C:\\Users\\珂爸爸\\Pictures\\Camera Roll\\珂.jpg"))
print(im.shape,im.dtype)	#(3417, 2441, 3) uint8

​ 读入图像后,获得像素RGB值,修改后保存为新的文件

a = [255,255,255] - im
mi = Image.fromarray(a.astype('uint8'))
mi = mi.save("C:\\Users\\珂爸爸\\Pictures\\Camera Roll\\珂1.jpg")

4、补充知识

​ 1、np.set_printoptions()用于控制Python中小数的显示精度

np.set_printoptions(precision=None, threshold=None,  linewidth=None, suppress=None, formatter=None)

precision:控制输出结果的精度(即小数点后的位数),默认值为8
threshold:当数组元素总数过大时,设置显示的数字位数,其余用省略号代替(当数组元素总数大于设置值,控制输出值得个数为6个,当数组元素小于或者等于设置值得时候,全部显示),当设置值为sys.maxsize(需要导入sys库),则会输出所有元素
linewidth:每行字符的数目,其余的数值会换到下一行
suppress:小数是否需要以科学计数法的形式输出
formatter:自定义输出规则

2、np.nonzero()

​ 找出非0元素的位置索引:np.nonzero([1, 2, 0, 0, 4, 0])

3、np.pad()

​ 返回填充后的数组:pad(array, pad_width, mode, **kwargs)

二、数据分析及展示

1、Matplotlib库入门

​ matplotlib用于绘制数据图表的python库

1.1、介绍

​ 由各种可视化类构成,内部结构复杂,受matlab启发。

​ matplotlib.pyplot是绘制各类可视化图形的命令子库。

import matplotlib.pyplot as plt
plt.plot([1,1,4,5,2])
plt.ylabel('greade')
plt.savefig('test',dpi=600) #默认png文件,输出图形存储文件
plt.show()

​ pyplot的绘图区域

plt.subplot(nrows,ncols,plot_number)  
plt.subplot(3,2,4)  #划分为三行二列,在第四位置进行绘制图形。

1.2、plot()函数

plt.plot(x,y,format_string,**kwargs)

x:x轴数据,列表或数组,可选。

y:y轴数据,列表或数组。

format_string:控制曲线的格式字符串,可选。由颜色字符、风格字符和标记字符组成

​ **kwargs:第二组或更多(x,y,format_string)。

颜色字符说明颜色字符说明
‘b’蓝色‘m’洋红色
‘g’绿色‘y’黄色
‘r’红色‘k’黑色
‘c’青绿色‘w’白色
‘#008000’rgb某颜色‘0.8’灰度值字符串
风格字符说明
‘-’实线
‘–’破折线
‘-.’点划线
‘:’虚线
‘’‘’无线条
标记符号说明标记符号说明
‘.’点标记‘1’下花三角标记
‘,’像素标记‘2’上花三角标记
‘o’实心圈标记‘3’左花三角标记
‘v’倒三角标记‘4’右花三角标记
‘^’上三角标记‘s’实心方形标记
‘>’右三角标记‘p’实心五角标记
‘<’左三角标记‘*’星形标记

1.3、pyplot中文显示方法

方法一:需要rcParams修改字体实现。

rcParams的属性

属性说明
‘font.family’用于显示字体的名字
‘font.style’字体风格,正常’normat’或斜体’italic’
‘font.size’字体大小,整数字号或者’large’、‘x-small’

rcParams[‘font.family’]

中文字体说明
‘SimHei’中文黑体
‘Kaiti’中文楷体
‘LiSu’中文隶书
‘FangSong’中文仿宋
‘YouYuan’中文幼圆
‘STSong’华文宋体
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

matplotlib.rcParams['font.family'] = 'STSong'
matplotlib.rcParams['font.size']=20

a = np.arange(0.0,5.0,0.02)
plt.xlabel('横轴:时间')
plt.ylabel('纵轴:振幅')
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

方法二:在有中文输出的地方,增加一个属性:fontproperties

import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0,5.0,0.02)
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=20)
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=20)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.show()

1.4、pyplot文本显示

pyplot的文本显示函数

函数说明
plt.xlabel()对x轴增加文本标签
plt.ylabel()对y轴增加文本标签
plt.title()对图形整体增加文本标签
plt.text()在任意位置增加文本
plt.annotate()在图形中增加带箭头的注解
import numpy as np
import matplotlib.pyplot as plt

a = np.arange(0.0,5.0,0.02)
plt.plot(a,np.cos(2*np.pi*a),'r--')
plt.xlabel('横轴:时间',fontproperties='SimHei',fontsize=15,color='green')
plt.ylabel('纵轴:振幅',fontproperties='SimHei',fontsize=15)
plt.title(r'正弦波实例 $y=cos(2\pi x)$',fontsize=15)
plt.text(2,1,r'$\mu=100',fontsize=15)

plt.axis([-1,6,-2,2])   #修改坐标取值范围
plt.grid(True)  #设置为网格状
plt.show()

1.5、子绘图区域

plt.subplot2grid()

​ plt.subplot2grid(GridSpec,CurSpec,colspan=1,rowspan=1)

​ 理念:设定网格,选中网格,确定选中行列区域数量,编号从0开始

GridSpec类

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

gs = gridspec.GridSpec(3,3) #将图形划分为三行三列

ax1 = plt.subplot(gs[0,:])
ax2 = plt.subplot(gs[1,0:2])
ax3 = plt.subplot(gs[1:,2])
ax4 = plt.subplot(gs[2,0])
ax5 = plt.subplot(gs[2,1])

2、Matplotlib基础绘图函数示例

2.1、基本图表函数

函数说明
plt.plot(x,y,fmt,…)绘制一个坐标图
plt.boxplot(data,notch,position)绘制一个箱形图
plt.bar(left,height,width,bottom)绘制一个条形图
plt.barch(width,bottom,left,height)绘制一个横向条形图
plt.polar(theta,r)绘制极坐标图
plt.pie(data,explode)绘制饼图
plt.psd(x,NFFT=256,pad_to,Fs)绘制功率谱密度图
plt.specgram(x,NFFT=256,pad_to,F)绘制谱图
plt.cohere(x,y,NFFT=256,Fs)绘制X-Y的相关性函数
plt.scatter(x,y)绘制散点图,其中,x和y长度相同
plt.step(x,y,where)绘制布阶图
plt.hist(x,bins,normed)绘制直方图
plt.contour(X,Y,Z,N)绘制等值图
plt.vlines()绘制垂直图
plt.stem(x,y,linefmt,markerfmt)绘制柴火图
plt.plot_date()绘制数据日期

2.2、饼图的绘制

import matplotlib.pyplot as plt

labels = 'Frogs','Hogs','Dogs','Logs'
sizes = [15,30,45,10]
explode = (0,0.1,0,0)

plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=90)
plt.show()

2.3、绘制散点图

import matplotlib.pyplot as plt
import numpy as np

fig,ax = plt.subplots()
ax.plot(10*np.random.randn(100),10*np.random.randn(100),'o')
ax.set_title('Simple Scatter')

plt.show()

三、数据分析及概要

1、Pandas库入门

​ pandas提供了使我们能够快速便捷地处理结构化数据的大量数据结构和函数。pandas兼具NumPy高性能的数组计算功能以及电子表格和关系型数据库(如SQL)灵活的数据处理功能。提供了复杂精细的索引功能,以便更为便捷地完成重塑、切片和切块、聚合以及选取数据子集等操作。

import pandas as pd
d = pd.Series([9,8,7,6],index=['a','b','c','d'])

​ 两个数据类型:Series,DataFrame

​ 基于上述数据类型的各类操作:基本操作、运算操作、特征类操作、关联类操作

1.1、Series类型

​ 由一组数据及与之相关的数据索引组成。

标量值创建

d = pd.Series(25,index=['a','b','c','d'])

字典类型创建

d = pd.Series({'a':1,'b':2,'c':3})

ndarray类型创建

d = pd.Series(np.arange(5))

1.2、DataFrame类型

​ 一个表格型的数据类型,每列值类型不同,既有行索引、也有列索引。

二维ndarray对象创建

d = pd.DataFrame(np.arange(10).reshape(2,5))

1.3、数据类型操作

重新索引

​ .reindex()能够改变或重排Series和DataFrame索引

参数说明
index,columns新的行列自定义索引
fill_value重新索引中,用于填充缺失位置的值
method填充方法,ffill当前值向前填充,bfill向后填充
limit最大填充量
copy默认True,生成新的对象,False时,新旧相等不复制

索引类型

方法说明
.append(idx)连接另一个index对象,产生新的index对象
.diff(idx)计算差集,产生新的index对象
.intersection(idx)计算交集
.union(idx)计算并集
.delete(loc)删除loc位置处的元素
.insert(loc,e)在loc位置增加一个元素e

1.4、数据类型运算

算术运算法则

​ 算术运算根据行列索引,补齐后运算,运算默认产生浮点数。

​ 补齐时缺项填充NaN(空值)

​ 二维和一维、一维和零维间为广播运算。

​ 采用+ - * / 符合进行的二元运算产生新的对象

方法说明
.add(d,**argws)类型间加法运算,可选参数
.sub(d,**argws)类型间减法运算,可选参数
.mul(d,**argws)类型间乘法运算,可选参数
.div(d,**argws)类详间除法运算,可选参数

比较运算法则

​ 比较运算只能比较相同索引的元素,不进行补齐。

​ 二维和一维、一维和零维间为广播运算。

​ 采用> < >= <= == != 等符号进行的二元运算产生布尔对象。

2、Pandas数据特征分析

2.1、数据的排序

.sort_index()方法在指定轴上根据索引进行排序,默认升序

arr.sort_index(axis=0,ascending=True)

.sort_values()方法在指定轴上根据数值进行排序,默认升序

Series.sort_valued(axis=0,ascending=True)
DataFrame.sort_values(by,axis=0,ascending=True) #by是axis轴上某个索引,某个索引列表

​ NaN统一放在末尾

2.2、数据的基本统计分析

​ 适用于Series和DataFrame类型

方法说明
.sum()计算数据的总和,按0轴计算,下同
.count()非NaN值的数量
.mean() .median()计算数据的算术平均值、算术中位数
.var() .std()计算数据的方差、标准差
.min() .max()计算数据的最小值、最大值
.describe()针对0轴(各列)的统计汇总

​ 适用于Series类型

方法说明
.argmin() .argmax()计算数据最大值、最小值所在位置的索引位置(自动索引)
.idxmin() .idxmax()计算数据最大值、最小值所在位置的索引(自定义索引)

2.3、数据的累计统计分析

方法说明
.cumsum()依次给出前1、2、…、n个数的和
.cumprod()依次给出前1、2、…、n个数的积
.cummax()依次给出前1、2、…、n个数的最大值
.cummin()依次给出前1、2、…、n个数的最小值
.rolling(w).sum()依次计算相邻w个元素的和
.rolling(w).mean()依次计算相邻w个元素的算术平均值
.rolling(w).var()依次计算相邻w个元素的方差
.rolling(w).std()依次计算相邻w个元素的标准差
.rolling(w).min() .max()依次计算相邻w个元素的最小值和最大值

2.4、相关分析函数

方法说明
.cov()计算协方差矩阵
.corr()计算相关系数矩阵,Person、Spearman、Kendall等系数
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小王不叫小王叭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值