Python手记

字符串的拼接
1.“+”,如果是字符和数字相连,要使用str()函数对于数字进行字符转化;
2.join()
3.",",链接的两个字符串之间用空格做关联
4.占位符
tmp +=1
#print 'r'%tmp
print("row num is: %s"%(tmp))
print('value is: %s; RowNum is: %s'%(cellValue,rowNo)) #多个占位
 
python的全局变量
第一种是def consts()中进行定义(函数名自定义),在使用时记得首先要consts()一下。
def consts():
global rowNum
consts()
print(str(rowNum))
 
乱码问题
在windows下面,Python输出到控制台,打出来的汉字是乱码解决方案:
1. 直接汉字处理,直接在前面添加“u"即可:
print (u'哈哈你好')
2. 如果汉字付给了变量:
string='哈哈你好'  
print string.decode('UTF-8') 
 
def test():
global rowNum
rowNum=rowNum+1
print(rowNum)
这里注意在常量函数中声明全局变量的时候,要使用global,如果在另外一个函数里面要使用,而且需要修改,也要声明global,告知编译器我修改的是全局变量,否则会报错;但是在主函数中使用则不需要。
第二种是定义一个外部文件,再import 进来

python异常处理

import traceback
try:
....
except Exception, e:
print 'traceback.print_exc():'; traceback.print_exc()
Python文件处理
file = open(“D:\Workspace\Operation_Five\sourceCode\src\test\data\StatsGroupInfo\subscriber”)
python的文件的读入报错:
IOError: [Errno 22] invalid mode ('r') or filename: 'F:\\Dropbox\\python\test.txt'
是因为这里有\t这样的转义字符;所以需要进行处理,在前面添加r,并使用单引号:
file = open(r'D:\Workspace\Operation_Five\sourceCode\src\test\data\StatsGroupInfo\subscriber')
 
关于“//”
实操机器学习的时候,发现了下面的写法:
train_data["AgeBucket"] = train_data["Age"] // 15 * 15
train_data[["AgeBucket", "Survived"]].groupby(['AgeBucket']).mean()
默然一看// 15*15还以为是注解;其实不然,是python里面特有的写法,代表除以15之后,向下取整,这种算法也称之为地板除。
 

zip
a = np.array(['a', 'b', 'c', 'd'])
b = np.array([2,4,6,8,10])
for i1, i2 in zip(a, b):
print("{}, {}".format(i1, i2))

zip用于将数组对象打包,可以用于遍历等操作。

numpy库中的random

首先要明白randomd对象生成的数据永远都是小于的,如果想要大于1自己处理去。比如astype(np.int32),将小数进行四舍五入取整数;比如可以*10,放大十倍等
一般的玩法是:
1 import numpy.random as rnd
2 rnd.rand(row_num, col_num) #随机生成row_now行,col_num列的二维数组(矩阵)
3 rnd.random(num) #随机生成num个数(小于1的)
4 rnd.randn(row_num, col_num) #数据满足正态分布,随机生成row_now行,col_num列的二维数组(矩阵)

 python参数中的*和**

def method(* args, ** kwargs)
args的格式是元组:method("first parameter", "second parameter"...)
kwargs的格式是字典的:method(firstParam="first parametger", secondParameter="second paramerter“ ...)

 数据转化为float

从文件中获取数据,如果转成numpy的array默认是String类型,如果转化为float?

1 datas=array(line.split())
2 datas=datas.astype(np.float)

 

注意这里astype并不会改变当前数组,而是改变返回值的数据类型;所以需要有一个接收值。

nonzero

在python的numpy里面这个函数的意义是返回参数数组中不为0的元素的索引(indics)。
from numpy import array
1 from numpy import nonzero 
2 x=array([[1,0,0], [0,2,0], [1,1,0]]) 
3 print(x) 
4 nonzero(x)

 output:

[[1 0 0] [0 2 0] [1 1 0]] (array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))
这个是要把两行捏在一起来看:
[0,1,2,2]
[0,1,0,1]
代表作为二维数组[0,0],[1,1],[2,0],[2,1]四个位置的元素不为0,也就说返回的一个数组是行信息,第二个数组对应的列信息,组合在一起就是一个(x,y)坐标。
 argsort
numpy里面的函数,用于对于数据进行排序。argsort里面有一个参数axis,axis=0代表沿着纵轴进行排序,axis=1代表沿着横轴进行排序。
1 ar = array([[1,2],[4,3],[2,3],[0,1]])
2 br = ar.argsort(0)
3 br

输出的为:

 
array([[3, 3],
       [0, 0],
       [2, 1],
       [1, 2]], dtype=int64)

 这里大家注意了,ar的形式如下:

0)  1  2

1)  4  3

2)  2  3

3)  0  1

axis=0就是代表沿着纵向进行排序(从小到大),3)排名第一,0)排名第二,2)排名第三...,所以我们看到返回值,第一列是3,0,2,1;第二个维度(特征)继续排序,但是第二个维度排序,第二个维度值是2,3,3,1,下面对于这四个数进行排序,最小的索引是3),第二个小的索引0)一次类推;分别对于两个维度的特征进行了排序。所以可以理解axis=0就是基于特征的排序。

那么axis=1呢?那就是横向排序,即按照行进行排序:

1 ar = array([[1,2],[4,3],[2,3],[0,1]])
2 br = ar.argsort(1)
3 br

返回值:

array([[0, 1],
[1, 0],
[0, 1],
[0, 1]], dtype=int64)

按照行来进行排序,或者说只是行内进行排序,上面的argsort(0)则是列内进行排序,可以这么理解,argsort(1)是样本内部各个特征值的排序,argsort(0)则是样本间的特定特征值的排序。

 

 python plot中的数组

如果是plot直接扔进去一个数组将会发生什么?
import numpy 
arr = numpy.array([[1,2,3],[7,8,9]]) 
print(arr) 
from matplotlib import pyplot as plt 
plt.figure(figsize=(12, 4)) 
plt.plot(arr) 
plt plt.show()

 输出如下:

[[1 2 3]
[7 8 9]]
此时走的plot函数就是如下红框范围的api
如果plot直接收了一个数组(正常情况应该是上图1的api参数),那么plot函数会认为传入的是y值的数据,x值将会被处理为样本的索引;那么代码中数据中第一个数据点[1,2,3]将会被处理为:[0,1],[0,2],[0,3],第二个数据将会被处理为[1,7],[1,8,],[1,0],然后纵向进行点组合[0,1]和[1,7]做线性组合,[0,2]和[1,8]做线性组合,以此类推。

 

posted on 2017-08-19 22:03  张叫兽的技术研究院  阅读(315)  评论(0编辑  收藏  举报

导航