zoukankan      html  css  js  c++  java
  • MachineLearning入门-5(Python和Scipy简介)

    目标:

    • 熟悉Python基本语法
    • 熟悉Numpy、Matplotlib、Pandas,能够阅读和编写基于python的机器学习脚本
    • 为深入理解机器学习打下基础

    Python速成

    基本数据类型和赋值运算:字符串、数值、布尔类型、多变量赋值、空值。

    在Python中,空格是有意义的,用来区分代码块。

    每一种数据类型都是对象,空值是Python中的一个特殊值,用None表示,表示改值是一个空对象。可以将None赋值给任何对象,也可以将任何变量赋值给一个None值的对象。

    控制语句:条件控制、循环语句、条件循环。

    在Python中有三种数据类型非常有用,并且会被经常使用到。它们分别是元组、列表、字典。

    元组:是一个只读的集合类型,初始化后,元组的元素不能重新赋值。

    1 #元组
    2 a=(1,2,3,4)
    3 print(a)
    4 print(a[1])
    (1, 2, 3, 4)
    2
    列表:与元组类似,只是列表通过中括号定义,而且列表的元素可以重新赋值。对列表增加列表项使用列表的append()函数。、
     1 #列表
     2 a=[1,2,3]
     3 print(a)
     4 #增加列表项
     5 a.append(4)
     6 print(a)
     7 print(a[3])
     8 #更新列表项
     9 a[2]=5
    10 print(a)
    11 for i in a:
    12     print(i)
    [1, 2, 3]
    [1, 2, 3, 4]
    4
    [1, 2, 5, 4]
    1
    2
    5
    4
    字典:是另一种可变容器模型,且可以存储任意类型的对象。字典的每个键值对(key,value)用冒号(:)分隔。每个键值对之间用逗号(,)分隔,整个字典包括在花括号({})中。
     1 #字典
     2 mydict={'a':6.16,'b':'str','c':True}
     3 print('A vluae: %.2f' % mydict['a'])
     4 #增加字典元素
     5 mydict['a']=523
     6 print('A value: %d' % mydict['a'])
     7 print('keys: %s' % mydict.keys())
     8 print('values: %s' % mydict.values())
     9 for key in mydict:
    10     print(mydict[key])
    A vluae: 6.16
    A value: 523
    keys: dict_keys(['a', 'b', 'c'])
    values: dict_values([523, 'str', True])
    523
    str
    True
    此外,若删除字典中全部元素,使用字典自身的clear()方法;若删除字典特定key元素,用pop(key)方法。
    1 mydict={'a':6.18,'b':'str','c':True}
    2 #删除特定元素
    3 mydict.pop('a')
    4 print(mydict)
    5 #删除字典中全部元素
    6 mydict.clear()
    7 print(mydict)
    {'b': 'str', 'c': True}
    {}

    with语句

    下面是一组与上下文管理器和with语句有关的概念。
    上下文管理协议(Context Management Protocol):包含方法__enter__(),__exit__(),支持该协议的对象要实现这两个方法。
    上下文管理器(Context Manager):支持上下文管理协议的对象。定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。
    运行时上下文(Runtime Context):由上下文管理器创建,通过上下文管理器的__enter__(),__exit__()方法实现。__enter__()方法在语句体执行之前进入上下文,__exit__()方法在语句体执行完毕后从运行的上下文中退出。
    上下文表达式(Context Expression):with语句中跟在关键字with之后的表达式,该表达式要返回一个上下文管理器对象。
    语句体(with-body):with语句包裹起来的代码块,在执行语句体之前会调用上下文管理器__enter__()方法,执行完语句体之后会执行__exit__()方法。

    Python对一些内建的对象进行该进,加入了对上下文管理器的支持,可以用于with语句中,比如可以自动关闭文件、线程锁的自动获取、释放。假设要对一个文件进行操作,可以使用with语句,代码如下:
    1 with open('somefileName') as somefile:
    2     for line in somefile:
    3         print(line)
    4         #... more code

    这里使用了with语句,不管在处理文件过程中是否发生异常,都能保证with语句执行完毕后关闭了打开的文件句柄。如果使用传统的try/finally范式,则要使用如下代码:

    1 somefile=open('somefileName')
    2 try:
    3     for line in somefile:
    4         print(line)
    5         #...more code
    6 finally:
    7     somefile.close()

    使用with语句,简化了对异常的处理。因此,当需要对异常进行处理时,如果对象遵循了上下文管理协议,建议使用with语句来实现。

    Numpy速成

    Numpy为Scipy提供了基本的数据结构和运算,其中最主要的是ndarrays多维数组,它提高了高效的矢量运算功能。

    访问数据

    算数运算

    Matplotlib速成

    Matplotlib是Python中著名的2D绘图库,使用方法比较简单,按照下面的三步进行操作就能很简单的完成绘图。

    • 调用plot(),scatter()等方法,并为绘图填充数据。数据是Numpy的ndarray类型对象。
    • 设定数据标签,使用xlabel(),ylabel()方法
    • 展示绘图结果,使用show()方法

    绘制线条图

    下面是一个简单的绘制线条图的例子,代码如下:

     1 import matplotlib.pyplot as plt
     2 import numpy as np
     3 #定义绘图的数据
     4 myarray=np.array([[1,2,3],[2,3,4],[3,4,5]])
     5 #初始化绘图
     6 plt.plot(myarray)
     7 #设定x轴和y轴
     8 plt.xlabel('x axis')
     9 plt.ylabel('y axis')
    10 #绘图
    11 plt.show()

    下面是一个简单的绘制散点图的例子,代码如下:

     1 #定义绘图的数据
     2 myarray1=np.array([1,2,3])
     3 myarray2=np.array([11,21,31])
     4 #初始化绘图
     5 plt.scatter(myarray1,myarray2)
     6 #设定x轴和y轴
     7 plt.xlabel('x axis')
     8 plt.ylabel('y axis')
     9 #绘图
    10 plt.show()

    更多类型的图表绘制砬,请参考:http://matplotlib.org/gallery.html。

    Pandas速成

    Pandas提供了用于机器学习的复杂数据结构:矢量运算方法和数据分析方法。Pandas也提供了多种数据结构。

    • Series:以为数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别:list中的元素可以使不同的数据类型,而array和series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
    • Time-Series:以时间为索引的Series。
    • DataFrame:二维表格型数据结构。很多功能与R语言中的data.frame类似。可以将DataFrame理解为Series的容器。
    • Panel:三维数组,可以理解为DataFrame的容器。

     Series使用:

     1 import numpy as np
     2 import pandas as pd
     3 myarray=np.array([1,2,3])
     4 index=['a','b','c']
     5 myseries=pd.Series(myarray,index=index)
     6 print(myseries)
     7 print('first element : ')
     8 print(myseries[0])
     9 print('c index value: ')
    10 print(myseries['c'])
    a    1
    b    2
    c    3
    dtype: int64
    first element : 
    1
    c index value: 
    3
    DataFrame是一个可以指定行和列标签的二维数组。数据可以通过指定列名来访问特定的数据。
    1 myarray=np.array([[1,2,3],[2,3,4],[3,4,5]])
    2 rowindex=['row1','row2','row3']
    3 colname=['col1','col2','col3']
    4 mydataframe=pd.DataFrame(data=myarray,index=rowindex,columns=colname)
    5 print(mydataframe)
    6 print('get data of col3:')
    7 print(mydataframe['col3'])
          col1  col2  col3
    row1     1     2     3
    row2     2     3     4
    row3     3     4     5
    get data of col3:
    row1    3
    row2    4
    row3    5
    Name: col3, dtype: int64
    更多Pandas API函数请查阅:http://pandas.pydata.org/pandas-docs/stable。




  • 相关阅读:
    socket编程技巧(2)发送缓冲区和接收缓冲区的设置时机
    socket编程技巧(1)tcp接收接口(变长数据定长数据)的编写实例
    libnet介绍与分析
    TCP的6大标示符号
    数据帧中常见协议类型
    C语言中offsetof宏的应用
    ip欺骗(原始套接字系列九)
    ARP欺骗(原始套接字系列八)
    包分析(原始套接字七)
    了解Javascript中函数作为对象的魅力
  • 原文地址:https://www.cnblogs.com/yuzaihuan/p/12275937.html
Copyright © 2011-2022 走看看