#coding:utf-8 import scrapy,math,string import lxml,scipy import re,json import pandas as pd import numpy as np # class Test(object): # def start(self,num): # print(num) # numbers = np.array(num) # target = input('请输入以上数组任意两个元素的和') # for i in range(0,len(num)): # for j in range(i+1,len(num)): # if int(num[i])+int(num[j])==int(target): # print('(index1=%s,index2=%s)'%(i+1,j+1)) # test=Test() # n=0 # a=[] # while(n!='#'): # n=input('输入#结束:') # # if n.isdigit(): # a.append(n) # print(a) # else: # print('请重新输入:') # test.start(a) # python 数据分析 -----1 # Numpy---提供常用的数值数组、矩阵等函数 # 优点:是基于向量化的运算进行数值运算时Numpy数组比list效率高 # 基本功能: # 快速高效的多维数组对象ndarray # 用于对数组执行元素级计算以及直接对数组执行数学运算的函数 # 用于读写硬盘上基于数组的数据集的工具 # 用于将c\c++\Fortran代码集成到python的工具 # 除了为python提供快速的数组处理能力,Numpy在数据分析方面还有另外一个主要作用,即作为在算法之间传递数据的容器 # 效率对比 # 三种数据结构:list/array/numpy.array # 三种方法求和:for/sum/numpy.sum list=[1,2,3,4,5] a=np.array(list) #print(type(a)) #若使用列表求其平方,则需要for循环 #不需要编写循环即可对数据执行批量运算 # 大小相等的数组之间的任何算术运算都会将运算应用到元素级 # 数组与标量的算术运算也会将那个标量值传播到各个元素 # print(1/a) #a2=a**2 #print(a2) #Numpy的ndarray基本的索引和切片 #切片 arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) print(type(arr[0]))#一维数组 print(arr[1,0])#相当于取下标元素 print(arr[:2,:2])#取前两行前两列元素 arr1 = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]) print (arr1[0]) # 结果是个2维数组 print(arr1[1,0,1]) old_values=arr1[0].copy() print(old_values) #布尔型索引 name_arr=np.array(['A','B','C','D','E']) rand_arr=np.random.randn(5,4)#生成一个7*4的随机数组 print(rand_arr) print(name_arr=='B') print(rand_arr[name_arr=='B'])#利用布尔数组选择行(索引 2 为True,故打印第二行) print(rand_arr[name_arr=='B',:2])#增加限制打印列的范围 print(rand_arr[(name_arr=='B')|(name_arr=='E')])#逻辑运算混合结果 rand_arr[name_arr=='A']=5 print(rand_arr) #花式索引(Fancy indexing)是一个Numpy术语,它指的是利用整数数组进行索引 narr=np.empty((8,4,2)) for i in range(8): narr[i]=i print(narr) index=[[0,-3,4],[1,2,3],[1,1,0]] print(narr[index]) num=np.arange(32).reshape((8,4))#将0-31的整数变形为8x4数组 print(num) print(num[[1,5,7,6]][:,[0,3,1,2]])#与下行等价 print(num[np.ix_([1,5,7,6],[0,3,1,2])])#第1,5,7,6行的第0312列 #Numpy的ndarray数组转置和轴对换 # redot=np.dot(num.T,num)矩阵点积 tri=np.arange(32).reshape((4,2,4)) print(tri) tran=tri.transpose((1,0,2)) print(tran) # tran=num.transpose((1,0)) # print(tran) # swap=num.swapaxes(0,1)#直接交换第1和第2个坐标 # print(swap) # 详细解释: # arr数组的内容为 # - a[0][0] = [0, 1, 2, 3] # - a[0][1] = [4, 5, 6, 7] # - a[1][0] = [8, 9, 10, 11] # - a[1][1] = [12, 13, 14, 15] # transpose的参数为坐标,正常顺序为(0, 1, 2, ... , n - 1), # 现在传入的为(1, 0, 2)代表a[x][y][z] = a[y][x][z],第0个和第1个坐标互换。 # - a'[0][0] = a[0][0] = [0, 1, 2, 3] # - a'[0][1] = a[1][0] = [8, 9, 10, 11] # - a'[1][0] = a[0][1] = [4, 5, 6, 7] # - a'[1][1] = a[1][1] = [12, 13, 14, 15] #Numpy的ndarray快速的元素级数组函数 ''' rint 将各元素值四舍五入到最接近的整数,保留dtype modf 将数组的小数部分与整数部分以两个独立数组的形式返还 isnan 返回一个表示“哪些值是NaN(这不是一个数字)”的布尔类型数组 isfinite,isinf分别返回一个表示“哪些元素是有限的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组 cos,cosh,sin,sinh,tan,tanh普通型或双曲线型三角函数 logical_not 计算各元素not x的真值,相当于-arr【数组取反】 ''' ''' #Scipy 是一种使用Numpy来做高等数学、信号处理、优化、统计的扩展包http://docs.scipy.org/doc/【具体使用可查看官方文档】 # Linear Algebra(scipy.linalg) # Statistics(scipy.stats) # spatial data structure and algorithms(scipy.spatial) from scipy import linalg A=np.array([[1,2],[3,4]]) print(A) #求行列式的值 result=linalg.det(A) print(result) ''' ''' #Pandas 是一种构建于Numpy的高级数据结构和精巧工具,快速简单的处理数据 # 支持自动或明确的数据对齐的带有标签轴的数据结构。 # 整合的时间序列功能 # 以相同的数据结构来处理时间序列和非时间序列 # 支持传递元数据(坐标轴标签)的算数运算和缩减。 # 灵活处理丢失数据 # 在常用的基于数据的数据库(例如SQL)中的合并和其他关系操作 # 数据结构:Series和DataFrame s=pd.Series([1,3,5,np.nan,8]) #np.nan 生成一个空的字符 #print(s) dates=pd.date_range('2018.7.20',periods=8) #print(dates) #DataFrame(data,index,columns)生成一个类似于数据库表的数据结构(矩阵) df=pd.DataFrame(np.random.randn(8,5),index=dates,columns=list) print(df) #df.head(n)选取前n行 print(df.head(1)) # df.tail(n)选取后n行 print(df.tail(1)) # df.describe()查看概述 count,mean,std,min,25%,50%,75%,max(计数,均值,标准差,五数概括) print(df.describe()) # df.sort_values(by=1)排序 print(df.sort_values(by=1)) # df.T转置 print(df.T) ''' #matplotlib Python绘图库 #nltk自然语言处理工具包(Natural Language Toolkit) # 安装:pip install -U nltk # 引入:import nltk # 下载预料库:nltk.download() 大概占用存储空间2G # 应用:文本提取、词汇切分、词频分析、词袋模型、情感分析 #igraph 图计算和社交网络分析http://igraph.org/python/ # 安装:pip insatll -U python-igraph # conda install -c marufr python-igraph=<特定版本> # from igraph import * #Scikit-learn 是建立在Scipy之上的一个用于机器学习的Python模块(分类,聚类,回归,降维等算法) #安装:pip install -U scikit-learn # conda install scikit-learn