Python|Python 数据分析
建议安装顺序:numpy(pip)
+mkl(download)
->pandas(pip)
->matplotlib(pip)
->scipy(download)
->statsmodels(pip)
->Gensim(pip)
常用模块
1.numpy
是其他数据分析模块的基础
(1)array()
:创建数组,举例:
创建一维数组:numpy.array([x,y,...])
二维数组:numpy.array([[x,y...],[x,y...],[x,y...])
注:
创建的数组如果想看格式(几行几列),就通过array.shape
来看就行了
注2:
数组创建后大小就固定了,所以如果想要进行增删改查则可以参考如下方法:
- 增:使用
tile()
扩展、vstack()
合并、转成列表操作再转回来(参考后面) - 删:可以直接像
a=a[0]
,那么就只有一行了、分片操作 - 改:直接改
- 查:直接查
sort()
:排序,正常排,遇到无法排序的放最后,举例:>>> x = numpy.array([1,3,2,'a',5])
>>> x
array(['1', '3', '2', 'a', '5'], dtype='>> x.sort()
>>> x
array(['1', '2', '3', '5', 'a'], dtype='
注:
二维数组排序只排每一行里面的,其他行之间互不干扰
(3)
max()
:求最大值,如果在二维数组中,每行的列数相等,那么最大值就是所有元素里最大的,举例:>>> x = numpy.array([[1,2,3,5],[1,2,0,0],[5,8,23,1]])
>>> x.max()
23
但如果每行列数不同,返回的就是数开头最大的那一行(假如第一个一样,再比第二个...),举例:
>>> x = numpy.array([[3,2,1,4,10],[1,2,0,0],[3,6,9,1]])
>>> x.max()
[3, 6, 9, 1]
注:
最小值
min()
,平均值是mean()
,加权平均值是average()
,标准差是std()
(4)
[:]
:数组切片,参考列表,举例:>>> b = numpy.array([1,2,3,4,5])
>>> b[1:3]
array([2, 3])
>>> a = numpy.array(([1,2,3,4],[5,6,7,8],[9,10,11,12]))
>>> a[1:]
array([[ 5,6,7,8],
[ 9, 10, 11, 12]])
>>> a[:][1]#切出所有行,取第2个
array([5, 6, 7, 8])
>>> a[:][1:]#切出所有行,取第二个2到最后一个
array([[ 5,6,7,8],
[ 9, 10, 11, 12]])
可以看出上面只能切出行而不能切分列(其将行看作整体来切分),所以推荐使用下面的针对数组特殊的切片方法来切分行列,格式:
[:,:]
,在一个括号里写分片,逗号分隔行列,举例:>>> a = numpy.array(([1,2,3,4],[5,6,7,8],[9,10,11,12]))
>>> a[1:, 1]#取第二、三行的第二列数据
array([ 6, 10])
>>> a[:, 0:3]#取所有行的第一列到第三列数据
array([[ 1,2,3],
[ 5,6,7],
[ 9, 10, 11]])
(5)
random.random_integers(x,y,n)
:随机数生成,前两个参数代表范围,第三个为可选,表示生成数量,比如:>>> numpy.random.random_integers(1,10,10) #随机生成10个1到10的随机数
array([ 6,5,7,6,5,4,9,9, 10,5])
上面那个是生成整数的随机数,还有
rand()
用来生成0到1之间的随机数,中间可以加参数代表生成几个,举例:>>> numpy.random.rand(10)#生成10个0-1的随机数
array([0.42462596, 0.0985224 , 0.22108224, 0.46230285, 0.40928969,
0.54201574, 0.88982411, 0.8450716 , 0.21384846, 0.38896833])
(6)
random.random.normal(μ,σ,n)
:生成一堆符合正态分布的数,第一个参数是均值,第二个参数是标准差,第三个参数是生成数,举例:>>> a = numpy.random.normal(0,1,10)
>>> a
array([-0.55491277, -1.1161704 ,0.97514814,1.99653332, -0.08500584,
0.64075696,1.96409159, -0.11636198,0.52605946,0.90563603])
>>> a.mean()
0.513577451404013
>>> a.std()
0.9612030098851562
#当生成的数多了,精度自然也会提高
更多
numpy.random
参考:http://www.mamicode.com/info-detail-507676.html
(7)
arange()
:类似range
,前两个参数代表范围,第三个代表阶值类似range,举例:>>> numpy.arange(10)
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> numpy.arange(1,10,2)
array([1, 3, 5, 7, 9])
注:
发现了吗,像python自带的
random
、range
虽然和这些几乎一样,但有个区别就是numpy下的这几个方法生成的都是array
类型的,原来那些都是list
类型(8)
concatenate()
:将数组整合在一起,数组不像列表那样可以直接加着整合,比如列表里:>>> a = [1,2,3]
>>> b = [4,5,6]
>>> a+b
[1, 2, 3, 4, 5, 6]
>>> a*2
[1, 2, 3, 1, 2, 3]
从上面可以看出对列表进行运算都是把列表当成整体来运算,而对于数组里:
>>> a = numpy.array([1,2,3])
>>> b = numpy.array([4,5,6])
>>> a + b
array([5, 7, 9])
>>> a * 2
array([2, 4, 6])
可以看出对数组的运算是对他里面的值进行运算,因此要对数组进行列表那样的操作,就需要用上面那个方法,对上面的a、b举例:
>>> numpy.concatenate((a, b))#以元组形式传入
array([1, 2, 3, 4, 5, 6])
(9)
sum()
:计算总和,举例:>>> numpy.sum([1,2,3])
6
上面的是对行内相加,如果是多行数据,并且希望是各行的对应数据之间相加,可以设置参数:
axis=0
(默认为1,即行内相加),举例:>>> a = numpy.array([[1,2,3,4], [5,6,7,8], [1, 2, 3, 4]])
>>> a.sum()#全部数据之和
46
>>> a.sum(axis=0)#各行对应数据之和
array([ 7, 10, 13, 16])
注:
其他计算操作如:求对数用
numpy.log()
,向上取整用numpy.ceil()
,比如3.1就变成4(10)
unique()
:去重,举例:>>> numpy.unique([1,2,3,1,2,3,5,6,4])
array([1, 2, 3, 4, 5, 6])
>>> numpy.unique(numpy.array([1,2,3,1,2,3,5,6,4]))#对数组、列表都可以,但最终都是变成数组
array([1, 2, 3, 4, 5, 6])
(11)
drop()
:丢弃(12)
fillna()
:对丢失值的填充(13)
tile()
:复制扩展数组,有两个参数,第一个是要复制扩展的数组,第二个参数是个元组,意思是变成几行几列,举例:>>> a = numpy.array([1,2,3,4])
>>> numpy.tile(a, 2)#此时第二个参数相当于(1,2),即扩展成1行2列(x轴变成原来2倍)
array([1, 2, 3, 4, 1, 2, 3, 4])
第二个参数的元组有几位,就代表几维,一般都是用二维,即两个值,代表几行几列,在列上扩展举例1:
>>> numpy.tile(a, (2, 1))#扩展成2行1列
array([[1, 2, 3, 4],
[1, 2, 3, 4]])
其还能扩展到更多维,如三维举例:
>>> numpy.tile(a, (3, 2, 1))#在三维下,分3组,每组2行1列
array([[[1, 2, 3, 4],
[1, 2, 3, 4]],[[1, 2, 3, 4],
[1, 2, 3, 4]],[[1, 2, 3, 4],
[1, 2, 3, 4]]])
四维举例:
>>> numpy.tile(a, (2, 3, 3, 2)) #在4维下,分2组,每组3个,每个3行2列
array([[[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]],[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]],[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]]],[[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]],[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]],[[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4],
[1, 2, 3, 4, 1, 2, 3, 4]]]])
发现了吗,可以这样理解第二个参数,那就是元组的最后两个数代表变成原来的几行几列,前面的数都是分多少组多少个,比如三维的3个数分别代表:几组几行几列;四维分别代表:几组几个几行几列;五维:几组几个几块几行几列;六…(单位是瞎编的,但是意思没错)
(15)
zero()
:生成一个自定义大小值全为0的数组,传入参数是一个列表或元组,代表几行几列,举例:>>> numpy.zeros([2,5])
array([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
其传入的列表也可以是多维的,比如:
>>> numpy.zeros([2,2,5])#2组,每组2行5列
array([[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]],[[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]]])
多维的用法和
tile()
函数的基本一样,参考上面即可注:
numpy里还有生成一个自定义大小值全为
1
的数组放方法:ones()
,还有值都为空的数组:empty()
(16)
vstack()
:将两个数组合并,举例:>>> c = numpy.array(([1,2],[3,4]))
>>> d = numpy.array(([5,6],[7,8]))
>>> numpy.vstack((c,d))
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
2.pandas 用于数据探索和分析,需要先安装
numpy
模块(1)
Series()
:序列(可以理解为一列数据),举例:>>> a = pandas.Series([2,1,6,3])
>>> pandas.Series([2,1,6,3])
02
11
26
33
dtype: int64
注:
上面没有指定索引,所以默认索引就为从0开始的数字,也可以自己指定索引,举例:
>>> pandas.Series([2,1,6,3], index=['a','b','c','d'])
a2
b1
c6
d3
dtype: int64
(2)
DataFrame()
:数据框(行列都有的数据),举例:>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]]) #里面不一定得数字
>>> a
01234
0125.03.0NaN
136NaNNaNNaN
2351.02.06.0
#最上面一行代表每一列序号,最左边一列代表每一行序号
其中数据框的值都是先列后行,而且空的地方虽然为NaN,但是NaN之间是不等的,对上面的a举例:
>>> a[2][1]#这里不是[1][2],是先列后行
nan
>>> a[3][1]
nan
>>> a[3][1] == a[3][1]
False#可以看出两个NaN不等
数据框的列名也可以自定义,举例:
>>> b = pandas.DataFrame([[1,2,5,3],[3,6,'s'],[3,5,1,2,6]], columns=['one','two','three','four','five'])
>>> b
onetwo threefourfive
01253.0NaN
136sNaNNaN
23512.06.0
>>> b['one'][2]
3
数据框的定义也可以是字典形式,举例:
>>> pandas.DataFrame({"a":1,"b":[2,3],"c":'321'})
abc
012321
113321
可以看出a、c列里面因为只有一个元素,所以他们会自动重复复制补全。如果想要把某一列转成列表形式,可以用
tolist()
,举例:>>> c = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]]) #里面不一定得数字
>>> c[0].tolist()
[1, 3, 3]
>>> type(c[0].tolist())
注:
DataFrame数据可以直接输出成字典、CSV、excel等格式,举例:
c.to_dict()#转成字典
c.to_csv("E:/a.csv")#输出csv文件
c.to_excel("E:/abc.xlsx")#输出excel文件
c.to_html("E:/abc.html")#输出html文件
c.to_json("E:/abc.json")#输出json
…
(3)
head()
:头部数据,也就是前几行的,括号里写行数,不写默认显示前5行,如果要取后几行就用tail()
(4)
describe()
:按列统计情况,举例:>>> c = pandas.DataFrame([[1,2,5,3],[3,6,'s'],[3,5,1,2,6]], columns=['one','two','three','four','five'])
>>> c.describe()
onetwofourfive
count3.0000003.0000002.0000001.0#count说明这一列有几个元素
mean2.3333334.3333332.5000006.0#这一列的平均数
std1.1547012.0816660.707107NaN#标准差
min1.0000002.0000002.0000006.0#最小值
25%2.0000003.5000002.2500006.0#前%25分位数,和下面两行都是分位数
50%3.0000005.0000002.5000006.0
75%3.0000005.5000002.7500006.0
max3.0000006.0000003.0000006.0#最大值
可以看出因为
three
那列有非数字内容存在,所以不会被统计(5)
T
:转置,就是行和列对调,举例:>>> c = pandas.DataFrame({"a":1,"b":[2,3],"c":'321'})
>>> c
abc
012321
113321
>>> c.T
01
a11
b23
c321321
(6)导入文件:
csvread_csv()
excelread_excel()
htmlread_html()
txtread_table()
例如:
data = https://www.it610.com/article/pandas.read_csv("a.csv")
,像excel
文件如果不想要表头(第一行)可以设置属性header=None
,举例:data = https://www.it610.com/article/pandas.read_excel("a.xls", header=None)
其中,html的特别厉害,他可以自动帮你获取一个网页里
table
标签的所有信息然后格式化打印出来,举例:res = requests.get('https://wenku.baidu.com/list/202')#这网页有嵌在表格里的内容
content = res.content.decode('gb2312')#因为直接输出乱码,先转字节流再解码
c = pandas.read_html(content)
print(c)#你会惊叹,虽然本质其实就是自动定位table标签的内容
注:
要使用
read_excel()
方法还需要:pip install xlrd
(7)导入
mysql
数据:这块特殊讲,使用的是pymysql
模块,可以参照前面,使用举例:conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123456", db="test")
cursor = conn.cursor()
sql = "select * from user"
k = pandas.read_sql(sql, conn)#第一个参数查询语句、第二个是游标
print(k)
结果为:
name password nickname
0avc
1aaa111dawson
2abcaaaabc
3asdsfafas
4chchch
注:
对于(6)、(7)导入的数据,返回的类型是
DataFrame
,所以我们可以通过.shape
来看有几行几列,通过.values
来看其第几行第几列的对应信息,比如看第一行的就.value[0]
,第二行第一列就.value[1][0]
,还可以通过columns
看有那些列,举例:>>> c = pandas.DataFrame([[1,2,5,3],[3,6,'s'],[3,5,1,2,6]], columns=['one','two','three','four','five'])
>>> c
onetwo threefourfive
01253.0NaN
136sNaNNaN
23512.06.0
>>> c['one']
01
13
23
>>> c['one'][1]#因为数据框必须先选列然后选行,所以不能只取某一行的数据
3
>>> c.values
array([[1, 2, 5, 3.0, nan],
[3, 6, 's', nan, nan],
[3, 5, 1, 2.0, 6.0]], dtype=object)
>>> c.values[0]#values是先选行在选列,所以可以只取一行
array([1, 2, 5, 3.0, nan], dtype=object)
>>> c.values[0][3]#values选列时是按0,1,2那样定位,不是按列名定位
3.0
>>> c.columns
Index(['one', 'two', 'three', 'four', 'five'], dtype='object')
甚至可以看、改变哪一列的哪个值的信息,比如对于上面数据库导入的信息:
k['name']
获得的就是name这一列的信息:
0a
1aaa
2abc
3asd
4ch
Name: name, dtype: object
然后输入:
k['name'][k['name']=='asd']='ccc'
#将name这一列中值为asd的改为ccc,这里用k['name'][3]效果也一样
结果为:
0a
1aaa
2abc
3ccc
4ch
Name: name, dtype: object
(8)
sort_values(by=哪一列)
:根据某一列的值来排序,举例:>>> c = pandas.DataFrame([[2,1,4,3],[1,4,6,2]])
>>> c
0123
02143
11462
>>> c.sort_values(by=0)
0123
11462
02143
(9)
data['列名'].unique()
:计算某一列有多少种不同的元素,对上面的数据库数据举例:>>> k['name'].unique()
array(['a', 'aaa', 'abc', 'ccc', 'ch'], dtype=object)
(10)
cut(数据, 份数[, labels=[每列名称]])
:可以将数据分成好几份,会自动计算判断这块数据该处于哪份当中,举例:>>> a = [0,2,3,93,4,5,70,16,48,76,25,30,31,50,51,100]
>>> c = pandas.cut(a, 4, labels=['低', '中', '高', '特高'])#分成4份
>>> c
[低, 低, 低, 特高, 低, ..., 中, 中, 中, 高, 特高]
Length: 16
Categories (4, object): [低 < 中 < 高 < 特高]
>>> for each in c:
print(each,end='\t')低低低特高低低高低中特高低中中中高特高
上面的如果没有第三个参数,其就会按数值区间来区分,可以发现其是根据最大值和最小值来进行等宽处理,从而分块:
>>> pandas.cut(a, 4)
[(-0.1, 25.0], (-0.1, 25.0], (-0.1, 25.0], (75.0, 100.0], (-0.1, 25.0], ..., (25.0, 50.0], (25.0, 50.0], (25.0, 50.0], (50.0, 75.0], (75.0, 100.0]]
Length: 16
Categories (4, interval[float64]): [(-0.1, 25.0] < (25.0, 50.0] < (50.0, 75.0] < (75.0, 100.0]]
#能看出极差是100,所以每25分一块
如果不想按均分的范围来分块,我们可以自定义,此时只要第二个参数改成列表形式就行了,举例:
>>> pandas.cut(a, [0, 10, 50, 100]) #自定义分了3个区间
[NaN, (0, 10], (0, 10], (50, 100], (0, 10], ..., (10, 50], (10, 50], (10, 50], (50, 100], (50, 100]]
Length: 16
Categories (3, interval[int64]): [(0, 10] < (10, 50] < (50, 100]]
#因为0不在范围内,所以是NaN
此时如果想看分块情况可以用
describe()
,举例:>>> b = pandas.cut(a, [0, 10, 50, 100]) #自定义分了3个区间
>>> b.describe()
countsfreqs
categories
(0, 10]40.2500
(10, 50]60.3750
(50, 100]50.3125
NaN10.0625
示例:计算CSV文件各水果销量 里面有2列是水果名字和水果购买量(每一行是一个单号),计算每个水果的销量,并以字典形式返回
import pandas
from matplotlib import pylab
import numpy
data = https://www.it610.com/article/pandas.read_csv("C:/Users/Dawsonenjoy/Desktop/12.csv")
goods_name = list(data['goodsname'].unique())
goods = list(data['goodsname'])
purchase = list(data['purchaseqty'])
all = list(zip(goods, purchase))
total = {}
for i in range(65535):
if all[i][0] not in total:
total[all[i][0]] = all[i][1]
else:
total[all[i][0]] += all[i][1]
total_food = list(total.keys())
total_num = list(total.values())
print("--------------------------------------------------------------------------------------------------------------------------\n十二月统计汇总:\n")
print(total)
print("--------------------------------------------------------------------------------------------------------------------------\n名字:\n")
print(total_food)
print("--------------------------------------------------------------------------------------------------------------------------\n数量:\n")
print(total_num)
部分结果如下:
{'小鲜橙': 472, '芦柑(酸)': 40, '黄柠檬': 292, '国产香蕉(特价)': 294, '泡面拍档': 14, '蜜柚': 32, '金牌萨琪玛(2个)': 5, '凉拌黄瓜': 5, '瑕疵南果梨': 18,...}
3.matplotlib 主要用于作图、可视化问题
from matplotlib import pylab
也有很多是导入模块
pyplot
而不是pylab
,可以参考下面链接观察两者区别:https://www.cnblogs.com/Shoesy/p/6673947.html
(说白了就是pylay=pyplot+numpy)
图片中文乱码问题 输入这三行解决
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
折线/散点图 主要使用
plot()
来展示,里面前两个参数代表x
,y
坐标(注意x,y数量要一样),第三个参数可以用来设置散点图('o'
)或者颜色、线条形式等各种样式,并且第三个参数可以同时传入多个,比如要红色的散点图就:'0r'
(1)颜色样式:
青c(cyan)
红r
品红m(magente)
绿g
蓝b
黄y
黑k
白w
(2)线条样式:
-直线
--虚线
-.就是这个样
:细小虚线(就是`...`)
(3)点的样式:
s方形
h六角形(比大写的细一点)
H六角形
*星形
+加号
xx形
d菱形
D菱形(和上面的些微不一样)
p五边形
(4)坐标区间:
plt.axis([-10, 10, 0, 2])
#x轴从-10到10,y轴0到2
或者分别设置x、y的区间:
plt.xlim(-10,10)
#设置x范围在-10到10
plt.ylim(0,2)
#设置y范围在0到2
注:
设置点的样式时默认就是散点图,以及同类样式只能设置一个(比如不能设置两种颜色),并且还可以把多个图集合在一起展示,那就多
plot
几个,plot就相当于一个画布,每plot一个就相当于在上面画一张图,再弄就继续在上面画实际举例
x = [1,3,5,2,4]
y = [2,4,5,1,3]
pylab.plot(x, y)#将x,y轴坐标数据传入,第三个参数是展现形式,默认是折线图
pylab.plot(x, y, 'ok')#黑色散点图
pylab.xlim(0,10)#设置x范围在0到10
pylab.ylim(0,10)#设置y范围在0到10
pylab.title("show") #设置标题名,在中上方
pylab.xlabel("num") #设置x轴名称,在中下方
pylab.ylabel("age") #设置y轴名称,在中左方
pylab.show()#可视化显示数据,注意show了之后画布就被清空了,前面的内容下次就show不出来了
直方图 主要用
hist()
来显示,实现方式很简单,把一组数据放入括号里就行了,例如随机生成一堆正态分布的数,然后直方图显示:data = https://www.it610.com/article/numpy.random.normal(0, 1, 10000000)#随机生成这么多个符合正态分布的数
style = numpy.arange(-3, 3, 0.01)
#从-3到3按0.01为间隔的格式,如果不设格式,弄出来一点都不像
pylab.hist(data, style)
pylab.show()
其中如果要设置直方图格式(宽度、上下限、是否要轮廓)可以这样:
x = numpy.random.random_integers(0, 100, 100)#随机生成100个上下限为0到100的数
style = numpy.arange(1, 100, 2)#在1到100内,阶值为2
pylab.hist(x, style, histtype='stepfilled')
#生成相应样式直方图,前面的样式可以看作范围是1到100里
#直方图的每条柱子宽度为2的意思
#第三个参数是不要轮廓的意思,默认是有
pylab.show()
#实际上你会发现只有1到99的数据,因为99+2>100,而100要和101的数据在一起才能显示
#所以除非有101,才能显示100-101的数据
子图 使用
subplot(row, col, area)
:三个参数分别是行数、列数和区域,比如要将原图分成2行2列(切成4份),然后要左下角那个图就:pylab.subplot(2, 2, 3)
pylab.show()
如果想4个图都显示就4个
subplot
,分别1、2、3、4就行了,然后在各图的subplot之后写的都是每个图的内容,现在我们试试弄一个2行,第一行两列的图片(想象下鼠标的样子),而且分别是不同的内容:pylab.subplot(2,2,1)#第一个图,内容为1到100递增为5的直方图
x = numpy.arange(1,100,5)
pylab.hist(x)
pylab.subplot(2,2,2)#第二个图,内容为100个符合正态分布数的直方图
y = numpy.random.normal(0,1,100)
pylab.hist(y)
pylab.subplot(2,1,2)#第三个图,内容为一个折线图
z = [[1,2,3,4,5],[1,5,3,2,4]]
pylab.plot(z[0],z[1],'k')
pylab.show()#展示这三个图
饼状图 示例
from matplotlib import pyplot as plt
#调节图形大小,宽,高
plt.figure(figsize=(6,9))
#定义饼状图的标签,标签是列表
labels = [u'第一部分',u'第二部分',u'第三部分']
#每个标签占多大,会自动去算百分比
sizes = [60,30,10]
colors = ['red','yellowgreen','lightskyblue']
#将某部分出来,使用括号,将第一块分割出来,数值的大小是分割出来的与其他两块的间隙
explode = (0.05,0,0)patches,l_text,p_text = plt.pie(sizes,explode=explode,labels=labels,colors=colors, \
labeldistance = 1.1,autopct = '%3.1f%%',shadow = False, startangle = 90,pctdistance = 0.6)
#labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置
#autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数
#shadow,饼是否有阴影
#startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看
#pctdistance,百分比的text离圆心的距离
#patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本
#改变文本的大小
#方法是把每一个text遍历。调用set_size方法设置它的属性
for t in l_text:
t.set_size=(30)
for t in p_text:
t.set_size=(20)
# 设置x,y轴刻度一致,这样饼图才能是圆的
plt.axis('equal')
plt.legend()
plt.show()
注:
labels
、sizes
、colors
和explode
的长度都要一样4.scipy 用于数值计算、包括矩阵、各种积分、数学公式等
5.statsmodels 用于统计分析
6.Gensim 用于文本挖掘
7.sklearn 机器学习(
pip install sklearn
)from sklearn import svm
8.keras 【Python|Python 数据分析】深度学习
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)