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],那么就只有一行了、分片操作
  • 改:直接改
  • 查:直接查
(2)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自带的randomrange虽然和这些几乎一样,但有个区别就是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()来展示,里面前两个参数代表xy坐标(注意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()

注:
labelssizescolorsexplode的长度都要一样
4.scipy 用于数值计算、包括矩阵、各种积分、数学公式等
5.statsmodels 用于统计分析
6.Gensim 用于文本挖掘
7.sklearn 机器学习(pip install sklearn)
from sklearn import svm

8.keras 【Python|Python 数据分析】深度学习

    推荐阅读