Python 学习笔记 一、 主要基本内容 1.1 主要python库 (1) Numpy库:主要进行数据处理,对于数组进行元素级运算;线性代数运算,傅立叶变换,随机数的生产; (2) Pandas库:便捷处理结构化数据的大量数据结构和函数; (3) Matplotlib库:绘制数据图表; 1.2 主要工作 (1) 与外界交互:读写各种各样的格式和数据库; (2) 准备:对数据进行清理、修整、整和、规范化、重塑、切片切块、变形等处理; (3) 转换:对数据集做一些数学和统计运算以产生新的数据集; (4) 建模和计算:将数据和统计模型、机器学习算法或其他计算工具联系起来; (5) 展示:创建交互式的或静态的图片或文字摘要; 1.3 python import与from…import….(python模块)区别 在python用import或者from…import来导入相应的模块。模块其实就一些函数和类的集合文件,它能实现一些相应的功能,当我们需要使用这些功能的时候,直接把相应的模块导入到我们的程序中,我们就可以使用了。 ① import numpy as np;导入numpy模块,并使用np表示 Import numpy ;导入numpy模块 From numpy import ;从模块numpy中导入,并使用其中的命名 ② 我们可以通过import来导入多个模块,用“,”(逗号)分隔。 1.3 Python主要数据结构 (1) 列表(list):a=[1,2,’asd’,4];列表中的值可以修改 (2) 元组(Tuple):a=(1,3,‘asd’,4);元组中的值不可以修改 (3) 字典(Dictionary):a={‘today‘:20,’tomorrow‘:30};today是键(key),20是key的值 B=a不是复制而是引用;b=a(:)才是复制b=a.copy()也是复制 二、 Numpy库 2.1 数组ndarray: (1) 将一个元组、字典、列表转化为数组:data=np.array(data1); (2) 主要函数: (m,n)=array.shape;m表示行,n表示列的维数 array.ndim:数组行的维数 array.dtype:数组的数据类型 np.zeros(),np.ones():分别创建指定长度或形状的全0或全1的数组 np.arrange(15):产生0-14的数组 np.reshape((2,3)) :表示设置数组形状 (3) 数组的运算 AA:两个数组对应元素相乘 1/A,A**0.5 A-A:对应元素相减 (4) 索引和切片 元素索引: A[5:8]:表示数组A的第6到第8个元素 A[:]:表示A中所有元素 A[1,2]与A[1][2]等价 A[2,3,4]:表示2个3行4列的数组 切片索引: A[1:6]:表示前面第2个元素到第6个元素 A[:2,1:]:表示前2行,第2列到最后(第一行到第三行,第2列到最后一列) 布尔型索引: 花式索引: (5) 数组的转置和轴对换 Array.T 表示数组的转置 np.dot(x,y) 表示XY的内积 (6) 通用函数 abs、fabs:计算绝对值 sqart:计算平方根 square:计算平方 exp:计算指数 add:将数组中元素对于相加 multiply:数组对于元素相乘 maximum:元素级最大值计算 minimum:元素级最小值计算 mod 求模 np.meshgrid(x,y)表示产生二维矩阵 numpy.where(x,y,z)表示if x 则y,否则z (7) 数学和统计方法: Sum 表示全部或某轴向求和 Mean 算术平均值 Std、var 标准差和方差 Min和max 最小值和最大值 Argmin、argmin 最小元素和最大元素索引 Cumsum 所有元素累计求和 Cumprod 所有元素累计求积 排序:array.sort() 唯一化和其他的集合逻辑 (8) 数组文件的输入输出 将数组以二进制文件保存到磁盘:np.save(‘array’,array);文件保存为.npy,可通过np.load导入; 读取文本:arr=np.loadtxt(‘array.txt’,delimiter=’,’) (9) 线性代数 X.dot(y)相当于np.dot(x,y) 矩阵的逆:inv(A) Trace: 计算对角线元素的和 det:计算矩阵的行列式 eig:计算矩阵的本征值和本征向量 solve: 求解线性方程组Ax=b lstsq: 求解Ax=B的最小二乘解 (10) 随机数生成 np.random.normal(size=(4,4)) 标准正态分布 rand 均匀分布样本值 randint 给定上下限随机选取整数 binomial 产生二项分布的样本值 三、 Pandas库 (1) 数据结构介绍: Series:由数组对象和数据标签组成。Obj=series(array);obj.values为数据值,obj.index为数据标签,标签可以是数字,也可是字母。读取时obj[‘a’]; DataFrame:表格型数据结构,含有一组有序的列,每列可以是不同的值类型(数字,字符串,布尔型),既有行索引也有列索引。 Array为字典,frame=DataFrame(Array) Frame=DataFrame(Array,colums=[],index=[]) colums表示行索引,index表示列索引 (2) 索引对象 Index对象是不可修改的 reindex 重新索引obj.reindex(range(6),method=’ffill’) ffill或pad前向填充,bfill或backfill后向填充 obj.drop([‘index’]) 删除指定索引的值 obj[‘a’:’c’] a行到c行 data[data[‘three’]>5] (3) 算术运算和数据对齐 S1+S2 都是series类型,索引值相同,值相加,不同,nan填充 (4) 函数应用和映射 Def f(x) frame.apply(f) (5) 排序和排名 根据行和列索引进行排序obj.sort_index() obj.sort_index(by=’b’) 按某一列进行排序 带有重复值的索引: (6)汇总和计算描述统计: Sum、mean、 相关系数和协方差:import pandas.io.data as web Cov 为协方差 (7) 唯一值、值计算、成员资格 Obj.unique() 唯一值数组 Obj.value_counts() 各值出现频率 Obj.isin()判断矢量化集合的成员资格 (8) 处理缺失数据 Data.isnumll()判断是否为空 Data.dropna()滤掉缺失数据 Data.fillna(0) 常数填充 (9) 层次化索引 (10) 重排分级顺序 (11) 根据级别汇总顺序 (12) 使用DataFrame的列 四、Matplotlib库:import matplotlib.pyplot as plt 4.1 Matplotlib中API (1) figure和subplot fig=plt.figure() ax1=fig.add_subplot(2,2,1) (2) 颜色、标记和线型 ax.plot(x,y,linestyle=’—‘,color=’g’,marker=’o’,label=’Default’) (3)刻度标签和图例 Xlim、xticks、xticklabels分别控制图表的范围、刻度位置、刻度标签 修改x轴的刻度:set_xticks和set_xticklabels Ax.legend(loc=’best’)添加图例 (4) 注解 (5) 保存:plt.savefig(‘figpath.svg’) 4.2 pandas中的绘图函数 (1) 线性图:S.plot() (2) 柱状图:data.plot(kind=’bar’,ax=axes[0],color=’k’,alpha=0.7) (3) 直方图和密度图: tips[‘tip_pct’]=tips[‘tip’]/tips[‘total_bill’] tips[‘tip_pct’].hist(bins=50) (4) 散布图: plt.scatter() 五、数据规整化:清理、转换、合并与重塑 5.1 (1) 数据库风格的DataFrame合并 Pd.merge(x,y)将xy(交集)合并;pd.merge(x,y,how=’outer’)并集pd.merge(x,y,on=’key’)指定连接键 (2) 索引上的合并 pd.merge(left1,right1,left_on=’key’,right_index=True)索引作为连接键 (3) 轴向连接 np.concatenate([arr,arr],axis=1) 列加 np.concat([s1,s2,s3])默认按行加axis=0行axis=1列 (4)合并重叠数据 np.where(x,y,z) series.combine_first() (5)重塑和轴向旋转 Data.stack()将列旋转为行 Data.unstack()将行旋转为列 (6)将长格式转化为宽格式 Pivote=data.pivot(‘data’,’item’,’value’) pivoted.head() 5.2 数据转换 (1)移除重复数据 Data.duplicated()返回布尔型series,表示各行是否重复 Data.drop_duplicates()移除重复行的dataframe (2)利用函数或映射进行数据转换 (3)替换值:传入参数可以是字典 Data.replace(-999,np.nan) (4)重命名索引 (5)离散化和面元划分 Cat=pd.cut(ages,bins) (6) 检测和过滤异常值 data[(np.abs(data)>3).any(1)]=np.sign(data)*3 (7) 排列和随机采样 (8) 计算指标/哑变量 5.3 字符串操作 (1) 对象方法 Val.split(‘,’)拆分数段;pices=[x.strip() for x in val.split(‘,’) Strip ,rstrip,lstrip 去除空白符 (2)正则表达式 import re