Python机器学习库

NumPy库
  • 用于高性能科学计算和数据分析,是常用的高级数据分析库的基础包

    ​Mac安装numpy库:直接在终端通过命令安装 pip3 install numpy

    ​window10安装numpy库:通过cmd安装 pip3 install numpy 或者 pip install numpy

  • NumPy的数组与数据类型

    import numpy as np
    
    # 使用np.array()方法来操作数组要比python原生的数组效率高
    arr1 = np.array([2,3,4])
    print(arr1)
    #输出arr1的类型
    print(arr1.dtype)
    
    arr2 = np.array([2.5,1.8,3.4])
    print(arr2)
    #输出arr2的类型
    print(arr2.dtype)
    
    # numpy的类型有int8  int16  int32  int64  float 等很多类型
    
    print(arr1 + arr2)
    
  • NumPy数组和标量的计算

    arr3 = np.array([2.5,1.8,3.4])
    print(arr3 * 10)
    
    data = [[1,4,7],[2,5,8]]
    # numpy将data转化为二维数组
    arr4 = np.array(data)
    print(arr4)
    print(arr4.dtype)
    
    # 定义值全部为0的长度为10的一维数组
    print(np.zeros(10))
    # 定义值全部为0的三行五列的矩阵
    print(np.zeros((3,5)))
    # 定义值全部为1的四行六列的矩阵
    print(np.ones((4,6)))
    # 定义值全部为空的三维矩阵,但是打印结果并不为空,因为如果矩阵的值全部设置为空,程序运算是不安全的,所以会填充随机的值
    print(np.empty((2,3,2)))
    
  • NumPy数组的索引和切片

    # 通过arange()产生0-9的数组
    arr5 = np.arange(10)
    print(arr5)
    print(arr5[5])
    
    # 对切片5-8的位置进行赋值,原数组的值发生了改变
    arr5[5:8] = 10
    print(arr5)
    
    # 为了保证原数组的值不改变,使用copy()来对切片进行复制,然后对复制后的数据进行操作
    arr_slice = arr5[5:8].copy()
    # []里的:表示对arr_slice的从第一个到最后一个元素都赋值
    arr_slice[:] = 15
    print(arr_slice)
    print(arr5)
    
Pandas库
  • 使用来进行预处理和数据清洗的重要库,pandas对numpy进行了封装,会对数据进行自动或者按照自定义的方式来进行显示,避免没有对齐而处理数据的时候出现失误。使用pandas可以灵活地处理缺失的数据,还可以像数据库的sql语句一样进行连接操作。

    安装pandas库 : 在终端中命令输入 pip3 install pandas 或者pip install pandas

    代码中import导入pandas失败的话可能是pandas库没安装成功,可用如下方法检查:

    • 进入命令行,输入python3进入到交互模式,然后使用import pandas 命令来确认是否安装成功,如果安装不成功,重新使用pip安装即可,由于网络超时经常有安装包失败的情况出现
    • 如果安装成功,可以打开pycharm,Mac用户在菜单栏pycharm -preferences-project interpreter选项右侧查看是否有pandas库,Windows用户在菜单栏File - Other Settings - Settings for New Projects - project interpreter选项右侧查看是否有pandas库。如果有那么需要等待pycharm为项目更新缓存,如果没有点击下方+号,使用pycharm为项目安装一个pandas包
  • Series的基本操作

    from pandas import Series,DataFrame
    import pandas as pd
    
    # Series对数组增加了索引,而且它的索引是可以重复的
    obj = Series([2,5,7,-3])
    print(obj)
    # 通过index可以得到Series的索引
    print(obj.index)
    # 通过values可以得到Series的所有值
    print(obj.values)
    
    # 指定Series的索引
    obj2 = Series([2,5,7,-3],index=['a','b','c','d'])
    print(obj2)
    # 修改Series的值
    obj2['b'] = 10
    print(obj2)
    # 可以把Series当作字典来用,判断key是否在Series中
    print('d' in obj2)
    print('m' in obj2)
    
    # 将字典转化为Series
    city = {'beijing':10000,'shanghai':25000,'guangzhou':8000,'shenzhen':15000}
    obj3 = Series(city)
    print(obj3)
    # 修改Series的index
    obj3.index = ['bj','sh','gz','sz']
    print(obj3)
    
  • DataFrame的基本操作

    from pandas import Series,DataFrame
    data = {'city': ['shanghai', 'shanghai', 'shanghai', 'beijing', 'beijing'],
            'year': [2016, 2017, 2018, 2017, 2018],
            'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
    # 将字典通过DataFrame()得到一个DataFrame的表格
    frame = DataFrame(data)
    print(frame)
    # DataFrame支持像表格一样按顺序展示,将DataFrame按照columns=['year','pop','city']的顺序排列
    frame2 = DataFrame(data,columns=['year','pop','city'])
    print(frame2)
    # 提取DataFrame中的一维数据,可以像字典一样按照data[key]的方式,也可以通过data.key的方式获得
    print(frame2['city'])
    print(frame2.year)
    # 对DataFrame增加新的一列'new',该列所有的值都是10
    frame2['new'] = 10
    print(frame2)
    # 对DataFrame增加新的一列'cap',该列的值通过判断city的值是否是'beijing'来得到True或False
    frame2['cap'] = frame2['city'] == 'beijing'
    print(frame2)
    
    pop = {'beijing': {2008: 1.5, 2009: 2.0},
           'shanghai': {2008: 2.0, 2009: 3.6}
           }
    frame3 = DataFrame(pop)
    print(frame3)
    # 对DataFrame的行列进行互换,叫做行列式的转式
    print(frame3.T)
    print('-----------------------------------------------')
    
    obj4 = Series([4.5, 7.2, -5.3, 3.6], index=['b', 'd', 'c', 'a'])
    # 通过reindex对Series进行重新索引,在原来索引['b', 'd', 'c', 'a']的基础上加入了一个新的索引'e',则它的值是NAN
    obj5 = obj4.reindex(['a','b','c','d','e'])
    print(obj5)
    
    # 如果是空值可以会影响数据清洗,所以需要对空值进行统一的数据填充,在reindex()中通过fill_value来填充空值
    obj6 = obj4.reindex(['a','b','c','d','e'],fill_value=0)
    print(obj6)
    obj7 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
    # reindex(range(7))重新索引之后,1,3,5位置处的值为NAN
    print(obj7.reindex(range(7)))
    # reindex()通过method='ffill'可以指定缺失值NAN为与它相邻的上面的值,method='bfill'指定缺失值NAN为与它相邻的下面的值
    print(obj7.reindex(range(7),method='ffill'))
    print(obj7.reindex(range(7),method='bfill'))
    print('-----------------------------------------------')
    
    from numpy import nan as NA
    data2 = Series([1,NA,2])
    print(data2)
    # 使用dropna()删除data2中的缺失值
    print(data2.dropna())
    
    frame3 = DataFrame([[1., 6.5, 3], [1., NA, NA], [NA, NA, NA]])
    # dropna()方法会删除DataFrame中所有带有NA空值的行
    print(frame3.dropna())
    # dropna()方法通过how='all'只会删除DataFrame中一行中所有值都是NA空值的行
    print(frame3.dropna(how='all'))
    # 将data2的第四列的值都赋值为NA
    frame3[4] = NA
    print(frame3)
    # 通过dropna()的axis=1, how='all'可以只删除某一列所有值都是空值的列
    print(frame3.dropna(axis=1, how='all'))
    print('****************************************')
    frame4 = DataFrame([[1., 6.5, 3], [1., NA, NA], [NA, NA, NA]])
    # 通过fillna(0)将DataFrame中的所有空值替换为0,fillna()方法修改的是frame4的副本,所以修改后frame4的值还是原来的值
    print(frame4.fillna(0))
    print(frame4)
    # 想要直接在frame4上进行修改,需要在fillna()方法中增加一个参数inplace = True,使用fillna(0, inplace=True)来替换
    frame4.fillna(0, inplace=True)
    print(frame4)
    print('****************************************')
    
    import numpy as np
    # 定义一个包含两层索引的Series,这样我们可以根据索引的层次来提取数据
    data3 = Series(np.random.randn(10),
                   index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
                          [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
    print(data3)
    # 提取索引为'b'的所有数据
    print(data3['b'])
    # 提取索引为'a'到'c'的所有数据,也就是索引'a','b','c'的数据都提取出来
    print(data3['a':'c'])
    
    # 通过unstack()方法将Series类型的data3转换为DataFrame的二维数据,再通过stack()又可以转换为一维数据
    print(data3.unstack())
    print(data3.unstack().stack())
    
Matplotlib库
  • 用来进行绘图的

    安装pandas库 : 在终端中命令输入 pip3 install matplotlib 或者 pip install pandas

  • Matplotlib库绘制折线、曲线、直方图、散点图

    import matplotlib.pyplot as plot
    
    # 绘制简单的折线,[1,3,5],[4,8,10]分别是横坐标以及对应的纵坐标
    plot.plot([1,3,5],[4,8,10])
    # 通过show()方法来将绘制的图显示出来
    plot.show()
    
    import numpy as np
    # 使用matplotlib也可以绘制numpy和pandas的数据
    # linspace()方法产生一条从-π到π的直线
    x = np.linspace(-np.pi,np.pi,100)   # x轴的定义域为 -3.14~3.14,中间间隔100个元素
    plot.plot(x,np.sin(x))
    plot.show()
    
    x = np.linspace(-np.pi * 2, np.pi * 2, 100)  # 定义域为: -2pi 到 2pi
    plot.figure(1, dpi=50)  # 创建图表1,dpi代表图片精细度,dpi越大文件体积越大,杂志要300以上
    for i in range(1,5):
        # 通过四次绘制来画出四条曲线
        plot.plot(x,np.sin(x/i))
    plot.show()
    
    plot.figure(2, dpi=50)   # 创建图表2
    data = [1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 4]
    # 通过hist() 方法绘制直方图,只要传入数据,直方图就会统计数据出现的次数
    plot.hist(data)
    plot.show()
    
    x = np.arange(1,10)
    y = x
    # 通过scatter() 方法绘制散点图,c = 'r'表示散点的颜色为红色,marker 表示指定散点的形状为圆形
    plot.scatter(x,y,c = 'r',marker='o')
    plot.show()
    
  • Matplotlib库结合导入的seaborn库绘制彩色散点图

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import seaborn as sns
    import warnings
    
    # 'iris_training.csv'中是要绘制的点的坐标数据
    iris = pd.read_csv('iris_training.csv')
    # head()方法获取前五条数据
    print(iris.head())
    # 绘制散点图
    iris.plot(kind = 'scatter',x = '120',y = '4')
    plot.show()
    
    # 导入warmings是为了解决运行时报的warming
    warnings.filterwarnings('ignore')
    # 导入seaborn可以设置样式,让散点图更美观
    iris2 = pd.read_csv('iris_training.csv')
    # 设置样式
    sns.set(style='white',color_codes=True)
    # 设置绘制格式为散点图
    sns.jointplot(x = '120',y = '4',data = iris2,size=5)
    # distplot绘制曲线
    sns.distplot(iris2['120'])
    plot.show()
    
    
    # FacetGrid 一般绘图函数
    # hue 彩色显示分类0/1/2,通过设置hue可以绘制散点的颜色为彩色,iris数据中的virginica列的值0、1、2分别表示三种颜色
    # plt.scatter 绘制散点图
    # add_legend() 显示分类的描述信息
    # 通过map()来设置绘制哪些列的散点,如下:map(plt.scatter, "120", "4")表示绘制'120'和'4'这两列,map(plot.scatter,'setosa','versicolor')表示绘制'setosa'和'versicolor'这两列
    # sns.FacetGrid(iris, hue="virginica", size=5).map(plt.scatter, "120", "4").add_legend()
    
    # 绘制三种颜色的散点图,颜色值由 hue='virginica'决定
    sns.FacetGrid(iris2,hue='virginica',size=5).map(plot.scatter,'setosa','versicolor').add_legend()
    plt.show()
    

    绘图展示如下 :


    彩色散点图.png
曲线.png
直方图.png

TensorFlow库
  • 用来进行机器学习的库

    安装TensorFlow库 : 在终端中命令输入 pip3 install tensorflow或者pip install tensorflow

    tensorflow还不支持3.7版本的python,需要安装3.6版本,而且是64bit的版本,32位版本无法下载。通过python -v命令来查看自己安装的python版本以及是否是64位

  • 去github上下载官方提供的models,地址如下:https://github.com/tensorflow/models](https://github.com/tensorflow/models)

    如果电脑上安装了git,可以通过 git clone https://github.com/tensorflow/models 命令来下载,或者在地址页点击clone or download进行下载

  • 根据特征值分类的模型和代码

    在我们下载的models代码的samples/core/get_started目录下面,我们可以看到通过TensorFlow根据特征值分类的模型,还可以在如下地址进一步学习:https://tensorflow.google.cn/tutorials

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,064评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,606评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,011评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,550评论 1 269
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,465评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,919评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,428评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,075评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,208评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,185评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,191评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,914评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,482评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,585评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,825评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,194评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,703评论 2 339

推荐阅读更多精彩内容