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])
0    2
1    1
2    6
3    3
dtype: int64

注:
上面没有指定索引,所以默认索引就为从0开始的数字,也可以自己指定索引,举例:

>>> pandas.Series([2,1,6,3], index=['a','b','c','d'])
a    2
b    1
c    6
d    3
dtype: int64

(2)DataFrame():数据框(行列都有的数据),举例:

>>> a = pandas.DataFrame([[1,2,5,3],[3,6],[3,5,1,2,6]]) #里面不一定得数字
>>> a
   0  1    2    3    4
0  1  2  5.0  3.0  NaN
1  3  6  NaN  NaN  NaN
2  3  5  1.0  2.0  6.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
   one  two three  four  five
0    1    2     5   3.0   NaN
1    3    6     s   NaN   NaN
2    3    5     1   2.0   6.0
>>> b['one'][2]
3

数据框的定义也可以是字典形式,举例:

>>> pandas.DataFrame({"a":1,"b":[2,3],"c":'321'})
   a  b    c
0  1  2  321
1  1  3  321

可以看出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()
            one       two      four  five
count  3.000000  3.000000  2.000000   1.0  #count说明这一列有几个元素
mean   2.333333  4.333333  2.500000   6.0  #这一列的平均数
std    1.154701  2.081666  0.707107   NaN  #标准差
min    1.000000  2.000000  2.000000   6.0  #最小值
25%    2.000000  3.500000  2.250000   6.0  #前%25分位数,和下面两行都是分位数
50%    3.000000  5.000000  2.500000   6.0
75%    3.000000  5.500000  2.750000   6.0
max    3.000000  6.000000  3.000000   6.0  #最大值

可以看出因为three那列有非数字内容存在,所以不会被统计

(5)T:转置,就是行和列对调,举例:

>>> c = pandas.DataFrame({"a":1,"b":[2,3],"c":'321'})
>>> c
   a  b    c
0  1  2  321
1  1  3  321
>>> c.T
     0    1
a    1    1
b    2    3
c  321  321

(6)导入文件:

csv          read_csv()
excel        read_excel()
html         read_html()
txt          read_table()

例如:data = pandas.read_csv("a.csv"),像excel文件如果不想要表头(第一行)可以设置属性header=None,举例:

data = 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
0    a        v        c
1  aaa      111   dawson
2  abc      aaa      abc
3  asd      sfa      fas
4   ch       ch       ch

注:
对于(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
   one  two three  four  five
0    1    2     5   3.0   NaN
1    3    6     s   NaN   NaN
2    3    5     1   2.0   6.0
>>> c['one']
0    1
1    3
2    3
>>> 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这一列的信息:

0       a
1     aaa
2     abc
3     asd
4      ch
Name: name, dtype: object

然后输入:

k['name'][k['name']=='asd']='ccc'
#将name这一列中值为asd的改为ccc,这里用k['name'][3]效果也一样
结果为:
0       a
1     aaa
2     abc
3     ccc
4      ch
Name: name, dtype: object

(8)sort_values(by=哪一列):根据某一列的值来排序,举例:

>>> c = pandas.DataFrame([[2,1,4,3],[1,4,6,2]])
>>> c
   0  1  2  3
0  2  1  4  3
1  1  4  6  2
>>> c.sort_values(by=0)
   0  1  2  3
1  1  4  6  2
0  2  1  4  3

(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()
            counts   freqs
categories                
(0, 10]          4  0.2500
(10, 50]         6  0.3750
(50, 100]        5  0.3125
NaN              1  0.0625
示例:计算CSV文件各水果销量

里面有2列是水果名字和水果购买量(每一行是一个单号),计算每个水果的销量,并以字典形式返回

import pandas
from matplotlib import pylab
import numpy
data = 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      六角形
*      星形
+      加号
x      x形
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 = 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 数据分析)