• numpy, matplotlib, pandas, collections,


    numpy模块

    简介

    #numpy模块:用来做数据分析,对numpy数组(既有行又有列)---矩阵进行科学运算
    #TensorFlow/pytorch(数学专业/计科专业/物理专业/硕士及以上):用来做数据分析,对TensorFlow数组(既有行又有列还有层,三维以上)---张量进行科学运算
    # gpu---图形显卡
    
    lt1 = [1,2,3]
    lt2 = [4,5,6]
    lt = []
    for i in range(len(lt1)):
        lt.append(lt1[i]*lt2[i])
    print(lt)
    

    numpy中的一维和三维数组

    import numpy as np  #约定俗成的潮流
    # #一维numpy数组---不考虑,可直接使用列表
    # arr = np.array([1,2,3])
    # print(type(arr),arr)
    #三维numpy数组---不考虑,一般TensorFlow做三维数据处理
    

    二维numpy数组的属性

    import numpy as np
    #创建二维numpy数组
    arr = np.array([[1,2,3],[4,5,6]])
    # print(arr)
    
    #二维numpy数组的常用属性
        #1. T---数组的转置(行列互换)
    print(arr.T)
    
        #2. dtype---数组元素的数据类型, numpy数组数据类型是属于python解释器的, 数组元素数据类型int32是属于numpy数组的
    print(arr.dtype)
    
        #3. size---数组元素的个数
    print(arr.size)
    
        #4. ndim---数组的维数
    print(arr.ndim)
    
        #5. shape---数组的维度大小,输出结果为元组,几行几列
    print(arr.shape)
    print(arr.shape[0]) #行数
    print(arr.shape[1]) #列数
    
        #6. astype---类型转换---numpy数组是可变数据类型
    arr = arr.astype(np.float64)
    print(arr)
    

    二维numpy数组取值/修改值

    import numpy as np
    arr = np.array([[1,2,3],
                    [4,5,6]])
    #numpy数组单个取值
    print(arr[0,0])
    
    #numpy数组切片
    print(arr[0:2,-2:]) # 行,列---骨头不顾尾
    
    #逻辑取值
    print(arr[arr>2])   #输出结果为一维数组
    
    #赋值
        #1.单个元素赋值
    arr[0,0] = 0
    print(arr)
    
        #2.整行赋值
    arr[0:1,:] = 0
    print(arr)
    
        #3.整个二维数组赋值
    arr[:,:] = 0
    print(arr)
    

    numpy数组的合并

    import numpy as np
    #数组的合并
    arr1 = np.array([[1,2,3],
                    [4,5,6]])
    arr2 = np.array([[55,66,77],
                     [11,22,33]])
    print(np.hstack((arr1,arr2)))   #水平合并,只能放元组
    print(np.vstack((arr1,arr2)))   #垂直平合并
    
    print(np.concatenate((arr1,arr2),axis=1))  #合并数组,0表示行,1表示列,默认为0以行合并
    

    通过函数创建numpy数组

    import numpy as np
    #通过函数创建numpy数组
    print(np.ones((2,3)))
    print(np.zeros((2,3)))
    print(np.eye(3,3))  #创建3*3单位矩阵
    print(np.linspace(0, 20, 5))    #构造一个等差数列,取头也取尾
    print(np.arange(2,10)) #一维
    
    #reshape
    arr = np.zeros((1,12))
    print(arr.reshape(4,3)) #重构数组行列数
    

    numpy数组的运算

    import numpy as np
    #数组运算
    print(np.ones((3,4))*4)
    print(np.sin(arr1))
    
    #点乘
    arr1 = np.ones((6,5))*3
    arr2 = np.ones((5,6))*4
    print(np.dot(arr1,arr2))
    
    #求逆
    print(np.linalg.inv([[1,2,3],
                         [4,5,6],
                         [9,8,9]]))
    

    numpy数组数学和统计方法

    import numpy as np
    #numpy数组数学和统计方法
    arr1 = np.ones((6,5))*3
    print(np.sum(arr1))
    print(np.sum(arr1[0:1,:]))
    

    numpy.random生成随机数

    #numpy.random生成随机数---非常重要
    
    print(np.random.rand(3,4))  #产生(0,1)之间均匀分布的维度大小为 "3*4" 的二维数组
    print(np.random.randn(3,4))  #产生(0,1)之间标准正态分布的维度大小为 "3*4" 的二维数组
    
    # np.random.seed(1)   #随机数种子控制是否随机
    print(np.random.random((3,4)))
    
    s = np.random.RandomState(1)    #等同于随机数种子
    print(s.random((3,4)))
    
    arr2 = np.array([[55,66,77],
                     [11,22,33]])
    np.random.shuffle(arr2) #对数组随机洗牌
    print(arr2)
    
    print(np.random.choice([1,2,3,4,5],2))  #针对一维数组,随机选择
    
    #针对某一范围随机指定维度大小的整数数组
    print(np.random.randint(1,100,(4,5)))
    

    matplotlib模块

    画条形图

    #matplotlib模块:画各种数据统计图
    from matplotlib import pyplot as plt    #约定俗成的潮流
    from matplotlib.font_manager import FontProperties  #导入修改字体模块
    
    #一.条形图
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    # 修改背景为条纹
    plt.style.use('ggplot')
    classes = ['3班','4班','5班','6班']
    students = [50,55,45,60]
    classes_index = range(len(classes))
    plt.bar(classes_index,students,color='green')
    plt.xticks(classes_index,classes,FontProperties=font)
    plt.xlabel('班级',FontProperties=font)
    plt.ylabel('学生人数',FontProperties=font)
    plt.title('班级-学生人数条形图',FontProperties=font)
    plt.show()
    

    画直方图

    #二.直方图
    import numpy as np
    from matplotlib import pyplot as plt    #约定俗成的潮流
    from matplotlib.font_manager import FontProperties  #导入修改字体模块
    plt.style.use('ggplot')
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    x1 = np.random.randn(10000)
    x2 = np.random.randn(10000)
    fig = plt.figure()  #生成一张画布
    ax1 = fig.add_subplot(1,2,1) #1行两列去第一个
    ax2 = fig.add_subplot(1,2,2) #1行两列去第二个
    ax1.hist(x1,bins=50,color='purple')
    ax2.hist(x2,bins=50,color='orange')
    ax1.set_title('x1的正态分布',FontProperties=font)    #加子标题
    ax2.set_title('x2的正态分布',FontProperties=font)    #加子标题
    fig.suptitle('两个正态分布',FontProperties=font)  #加总标题
    plt.show()
    

    画折线图

    #三.折线图
    import numpy as np
    
    #叠加
    arr = np.array([[1,2,3]])
    print(arr.cumsum()) #每个数是前面所有数的叠加和
    
    from matplotlib import pyplot as plt    #约定俗成的潮流
    from matplotlib.font_manager import FontProperties  #导入修改字体模块
    plt.style.use('ggplot')
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    np.random.seed(1)   #固定随机数种子使画出来的四条折线图不会每次运行都变化
    x1 = np.random.randn(40).cumsum()
    x2 = np.random.randn(40).cumsum()
    x3 = np.random.randn(40).cumsum()
    x4 = np.random.randn(40).cumsum()
    plt.plot(x1,color='blue',linestyle='-',marker='o',label='蓝圆线') # "linestyle" 控制线条类型
    plt.plot(x2,color='pink',linestyle='--',marker='x',label='粉虚线') # "marker" 控制主机形状,默认间隔为1
    plt.plot(x3,color='green',linestyle='-.',marker='*',label='绿方线')
    plt.plot(x4,color='purple',linestyle=':',marker='s',label='紫方线')
    plt.legend(loc='best',prop=font)
    plt.show()
    
    

    画散点图+折线图

    #四.散点图+折线图
    import numpy as np
    from matplotlib import pyplot as plt    #约定俗成的潮流
    from matplotlib.font_manager import FontProperties  #导入修改字体模块
    plt.style.use('ggplot')
    font = FontProperties(fname='C:WindowsFontssimsun.ttc')
    fig = plt.figure()
    ax1 = fig.add_subplot(1,2,1)
    ax2 = fig.add_subplot(1,2,2)
    x = np.arange(20)
    y1 = x*2
    y2 = x**2
    ax1.scatter(x,y1,c='b',label='蓝散点')
    ax1.plot(x,y2,c='r',label='红折线')
    ax2.plot(x,y1,c='black',label='黑折线')
    ax2.scatter(x,y2,c='green',label='绿散点')
    ax1.legend(prop=font)
    ax2.legend(prop=font)
    ax1.set_title('散点折线图1',FontProperties=font)
    ax2.set_title('散点折线图2',FontProperties=font)
    fig.suptitle('两幅图',FontProperties=font)
    plt.show()
    

    pandas模块---重要

    pandas模块的数据类型

    #pandas模块:更多的是对excel/csv(类似于txt文件,占用空间小但是具有表格特征)文件处理,对numpy+xlrd模块作了一层封装
    
    import pandas as pd #约定俗成的潮流
    import numpy as np
    
    #pandas的数据类型
        #Series(现在一般不使用(一维))
    df = pd.Series(np.array([1,2,3,4]))
    print(df)
    
        #DataFrame(多维)
            #创建DataFrame数据结构
    dates = pd.date_range('20190101',periods=6,freq='M')
    print(dates)
    np.random.seed(1)
    values = np.random.rand(6,4)*10
    print(values)
    columns = ['c1','c2','c3','c4']
    df = pd.DataFrame(values,index=dates,columns=columns)
    print(df)
    

    DataFrame数据结构的属性

    import pandas as pd #约定俗成的潮流
    import numpy as np
    
    #创建DataFrame数据结构
    dates = pd.date_range('20190101',periods=6,freq='M')
    print(dates)
    np.random.seed(1)
    values = np.random.rand(6,4)*10
    print(values)
    columns = ['c1','c2','c3','c4']
    df = pd.DataFrame(values,index=dates,columns=columns)
    print(df)
    
    #DataFrame数据结构的属性
    print(df.dtypes)    #获取数据类型---对象类型
    print(df.index) #获取行标签
    print(df.columns)   #获取列标签
    print(df.describe())    #查看数据每一列的极值,均值等
    print(df.T) #转置
    print(df.sort_values('c2')) #按照c2的值从小到大排序
    print(df.sort_index(ascending=False))   #按行标签排序
    

    DataFrame数据结构的取值/修改值

    import pandas as pd #约定俗成的潮流
    import numpy as np
    
    #创建DataFrame数据结构
    dates = pd.date_range('20190101',periods=6,freq='M')
    print(dates)
    np.random.seed(1)
    values = np.random.rand(6,4)*10
    print(values)
    columns = ['c1','c2','c3','c4']
    df = pd.DataFrame(values,index=dates,columns=columns)
    print(df)
    
    #DataFrame数据结构取值
    print(df[['c1','c2']])  #按列标签取值
    print(df.loc['2019-03-31':'2019-05-31'])   #通过自定义标签取值
    print(df[1:4])  #通过行标签取值
    print(df.values[0,0])   #通过行列取出单个值
    
    print(df.iloc[0,0])
    print(df.iloc[:,0]) #通过切片取值,必须加 ".iloc"
    
    print(df['c1']>4)
    print(df[df['c1']>4])   #逻辑取值
    
    df.iloc[0,0] = 1    #修改某个数值
    print(df)
    

    pandas操作表格

    #pandas操作表格
    
    test_data = '''
    5.1,,1.4,0.2
    4.9,3.0,1.4,0.2
    4.7,3.2,,0.2
    7.0,3.2,4.7,1.4
    6.4,3.2,4.5,1.5
    6.9,3.1,4.9,
    '''
    
    from io import StringIO
    print(test_data)
    test_data = StringIO(test_data) #把test_data读入内存,相当于变成文件
    print(test_data)
    df = pd.read_csv(test_data,header=None)
    print(df)
    
    #缺失值处理
    print(df.dropna(axis=1))  #获取删除含有缺失值的列之后的结果
    print(df.dropna(axis=0))  #获取删除含有缺失值的行之后的结果
    print(df.dropna(thresh=4))  #获取删除行值个数小于4个的行之后的结果
    
    #合并数据处理
    df2 = pd.DataFrame(np.zeros((2,3)))
    df3 = pd.DataFrame(np.ones((2,3)))
    print(df2)
    print(df3)
    print(pd.concat((df2,df3))) #默认按行合并
    print(pd.concat((df2,df3),axis=1)) #调整为按列合并
    print(df2.append(df3,ignore_index=True))  #只能按行追加
    
    #导入导出数据
    df.index = ['nick','json','tank','egon','alex','蔡启龙']
    df.to_csv('test18.csv')
    

    pandas读取json文件

    #pandas读取json文件
    json_txt = '[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529","code2":null,"time":1013395466000},
    {"ttery":"min","issue":"20130801-3390","code":"7,8,2,1,2","code1":"298058212","code2":null,"time":1013395406000},
    {"ttery":"min","issue":"20130801-3389","code":"5,9,1,2,9","code1":"298329129","code2":null,"time":1013395346000},
    {"ttery":"min","issue":"20130801-3388","code":"3,8,7,3,3","code1":"298588733","code2":null,"time":1013395286000},
    {"ttery":"min","issue":"20130801-3387","code":"0,8,5,2,7","code1":"298818527","code2":null,"time":1013395226000}]'
    print(pd.read_json(json_txt,orient='records'))  #读取json文件,orient控制json文件需满足的格式
    

    collections模块

    有名元组

    # collections模块: 提供更加复杂的数据类型
    
    # 有名元组
    from collections import namedtuple
    point = namedtuple('point',['x','y'])
    p = point(1,2)
    print(p.x)	#通过属性引用
    print(p.y)
    

    默认字典

    #普通字典,取值时key不存在会报错
    # dic = {'a':1}
    # print(dic['b'])
    
    # 默认字典
    from collections import defaultdict
    dic = defaultdict(lambda :'nan')  # dic = {}  # 如果找不到赋了一个默认值
    dic['a'] = 1
    print(dic['a'])
    print(dic['c'])	#取值时key不存在不报错,返回设定的默认值
    

    双端队列

    #普通列表,append只能末尾追加值,pop只能删除末尾值
    # lis = [1,2,3]  # 线性表
    # lis.append(4)
    # print(lis)
    
    # 双端队列
    from collections import deque  # 链表
    de = deque([1,2,3])
    de.append(4)
    print(de)
    de.appendleft(0)	#在最左端加值
    print(de)
    de.popleft()
    de.popleft()	#删除最左端的值
    print(de)
    

    计数器

    s= 'programming'
    
    #正常使用多行代码统计字符串s中每个字符出现次数
    # dic = {}
    # for i in s:
    #     if i in dic:
    #         dic[i]+=1
    #     else:
    #         dic[i] =1
    # print(dic)
    
    # 计数器
    from collections import Counter
    c = Counter()  # 字典
    for i in s:
        c[i] +=1
    print(c)
    
  • 相关阅读:
    js模版引擎handlebars.js实用教程——由于if功力不足引出的Helper
    js模版引擎handlebars.js实用教程——if-判断的基本用法
    js模版引擎handlebars.js实用教程——with-终极this应用
    js模版引擎handlebars.js实用教程——with-进入到某个属性(进入到某个上下文环境)
    js模版引擎handlebars.js实用教程——each-循环中使用this
    mysql 索引及查询优化总结
    面试篇——mysql
    设计模式六大原则(5):迪米特法则
    BigInteger与BigDecimal
    Java基本类型占用字节数(或 bit数)
  • 原文地址:https://www.cnblogs.com/-406454833/p/11627650.html
Copyright © 2020-2023  润新知