python常用机器学习库
Numpy数据分析模块
一、Ndarray对象:NumPy的底层是一个Ndarray结构,该结构可以生成N维数组对象。(存放同类型元素的多维数组)
- 轴axex 秩rank
# 1.创建Ndarray .array()
import numpy as np
arr = np.array([0,1,2,],[3,4,5])
print(arr)
# 显示不同轴的统计结构
print(arr.sum(axis=0))
print(arr.sum(axis=1))
# 2.调整数组大小 .reshape/.shape
reArr = arr.reshape(3,2)
reArr
#其效果与shape(3,2)相同
>array([[0,1],
[2,3],
[4,5]])
# shape属性返回(3,2) ndim属性返回秩,此处=2
- 创建特殊的数组
(1) numpy.empty:创建一个指定形状(shape)、数据类型dtype且未初始化的数组。参数 描述 shape 数组形状 dtype 数组类型,可选 order 有C、F两个选项,分别代表:行优先和列优先,表示再计算机内存储元素顺序 (2) numpy.zeros:创建指定大小的数组,以0填充 (3) numpy.ones:创建指定形状的数组,以1填充
(4) 能创建序列的函数# 3.创建全0数组 y = np.zeros((5,),dtype = np.int) y >array([0,0,0,0,0])
arrange函数、linspace函数以及python的range函数# 4.numpy创建序列 import numpy as np arr = np.arange(1,5,0.2) arr >array([1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4, 2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2, 4.4, 4.6, 4.8]) # compare with ↓ arr = np.linspace(1,5,10) arr >array([1. , 1.44444444, 1.88888889, 2.33333333, 2.77777778, 3.22222222, 3.66666667, 4.11111111, 4.55555556, 5. ])
二、数组的切片、迭代和索引
- ndarray一维数组可以直接索引、切片和迭代,和其他Python序列同样。
- 二维数组:
- 切片操作
切片操作同一维数组类似,由于多了一个轴,所以[]内有两个值。比如:A[0:2,0:2] - 迭代操作
可以使用for循环嵌套,但它通常按照第一条轴对二维数组进行扫描,可以使用apply_along_axix(func,axis,arr)函数设定对每一列或行进行处理。!!!此为Numpy中包含一个迭代器对象numpy.nditer,可以很方便地对数组进行迭代。
# 5.ndarray数组的切片 print(len(arr)) >10 arr = arr.reshape(5,2) arr >array([[1. , 1.44444444], [1.88888889, 2.33333333], [2.77777778, 3.22222222], [3.66666667, 4.11111111], [4.55555556, 5. ]]) arr[1:4, 0:1] >array([[1.88888889], [2.77777778], [3.66666667]])
# 6.迭代:两种方式 import numpy as np arr = np.arange(0,60,5) # (60-0)/5个数 arr = arr.reshape(3,4) print(arr) # 第一种 按行 for item in arr: print(item) # 第二种 单个元素 for item in np.nditer(arr): print("%.3f" %item, end=' ')
- 切片操作
Pandas数据分析模块
一、Pandas是python的一个数据分析包,基于Numpy的一种工具,Pandas的三种基础数据结构:
- Series:一维数组,与Numpy中的一维array类似。与Python的数据机构List相似,可以保存不同数据类型
- DataFrame:二维数据结构。可以将其理解为Series的容器。
- Panel:三维的数组,可以理解为是DataFrame的容器。
# 1.Series一维数组的操作
import Pandas as pd
s = pd.Series([1,3,5,6])
print(s)
>0 1
1 3
2 5
3 6
dtype: int64
s[1] = 80 # 将1号索引修改未80
s2=pd.Series({'color':1,'size':2,'weight':3})
s2['weight']=200
s2
>color 1
size 2
weight 200
dtype: int64
# 2.二维DataFrame数组操作
dict1 = {'col1':[1,2,5,7],'col2':['a','b','c','d']}
df = pd.DataFrame(dict1)
df
>一个4行3列的表格
col1 col2
0 1 a
1 2 b
2 5 c
3 7 d
# 从数据文件中读取,生成DataFrame
data = pd.read_csv('dataH.txx',sep=' ')#指明分隔符
print(data)
# 切片
data[:2] # 输出前两行数据
# 简单过滤
data[data['Wt'] < 60] # 输出Wt列数据<60的行
- !!!标准差求法以及结果的不同。
- numpy中标准偏差类型ddof默认为0,计算的是总体标准偏差,numpy.std(ndarray)
- pandas中标准偏差类类型ddof默认为1,计算的是样本标准偏差,DataFrame.std()
- DataFrame.add(Df, fill_value=0 )
- DF.dropna() :其中 axis=0/1,表示按行/列删除
#填充缺失值 dt1=pd.DataFrame(np.arange(16).reshape(4,4), index=['BJ','SH','GZ','SZ'], columns=['q','r','s','t']) dt2=pd.DataFrame(np.arange(8).reshape(4,2), index=['BJ','SH','GZ','SZ'], columns=['r','t']) print(dt1) print(dt2) dt3=dt1.add(dt2) # dt3=dt1.add(dt2,fill_value=0) #再试试这句 dt3
Matplotlib绘图库
一、Matplotlib
- Figure & Subplot
matplotlib的图像都位于Figure对象中,可以用plt.figure创建一个新的Figure(空Figure不能绘图),添加plot用add_subplot# 1.绘制简单图表 import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(2,2,1) ax2 = fig.add_subplot(2,2,2) #位置 2*2的第2个位置 的等效于add_subplot(222) fig,axes=plt.subplots(2,3) #直接生成2*3个子图 axes
- plot绘图
plot(x,y,format_string,**kwargs)
参数:
x:x轴数据,列表或数组
y:y轴数据
format_string:控制曲线的格式字符串,可选
**kwargs:第二组或更多(x,y,format_string)
注:当绘制多条曲线时,各条曲线的x不能省略# 2.绘制正弦曲线图形 # 制sin(x)函数图形 import numpy as np import matplotlib.pyplot as plt x = np.linspace(-10,10,100) #-10~10的一百个数据点 y = np.sin(x) plt.plot(x,y,marker="" #平滑曲线)
# 3.绘制简单直线,设置标题、坐标轴、图例 import matplotlib.pyplot as plt import numpy as np a = np.arange(10) plt.xlabel('x') plt.ylabel('y') plt.plot(a,a*1.5,a,a*2.5,a,a*3.5,a,a*4.5) plt.legend(['1.5x','2.5x','3.5x','4.5x']) plt.title('simple lines') plt.show()
# 练习:在多个plot上绘图 import numpy as np improt matplotlib.pyplot as plt fig,axes = plt.subplots(2,1) plt.subplot(2,1,1) x = np.linspace(-10,10,100) y = np.sin(x) plt.plot(x,y,marker="o") plt.title('sinx') plt.subplot(2,1,2) arr = np.arange(10) plt.plot(arr,arr*1.5,arr.arr*2.5,arr,arr*3.5) plt.legend(['1.5x','2.5x','3.5x']) plt.title('lines')
- pandas中内嵌了基于matplotlib的绘图函数,Series和DataFrame都包含生成图表的plot方法,默认情况为线型图
import pandas as pd data = pd.read_csv('iris.txt',',',header=None) df = pd.DataFrame(data) ax = df.plot(title='iris') ax.set_xlabel('PL') ax.set_ylable('SL')
OpenCV模块
# 读写图像文件
import cv2
img = cv2.imread('img.jpg',0) #转变为灰度图,默认为IMREAD_COLOR
cv2.imshow('image',img) # 打开img,title为image
k = cv2.waitKey(0)
if k == 27: #按Esc键直接退出
cv2.destroyAllWindows()
elif k == ord('s'): # 按's'键先保存灰度图,再退出
cv2.imwrite('result.png',img)
cv2.destroyAllWindows()
- cap.read() 读取视频的帧,ret是布尔值,frame是一帧图像 三维数组
#打开摄像头捕获图像
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow(u"Capture", frame)
key = cv2.waitKey(1)
if key & 0xff == ord('q') or key == 27:
print(frame.shape,ret)
break
cap.release()
cv2.destroyAllWindows()
exit() #在摄像头关闭异常时强制退出
# 读取视频
import cv2
import numpy as np
#获取视频中每一帧图像
rec = cv2.VideoCapture(r'redplane.mp4')
while(True):
rt, frame = rec.read()
cv2.imshow('frame',frame)
key = cv2.waitKey()
if key== ord('q') or key == 27: #按q或ESC退出
break
rec.release()
cv2.destroyAllWindows()
WordCloud制作词云
突出展示高频高质的数据信息,凸显出数据中所包含的文本的主旨。可以用于快速显示数据中的文本频率。
# 1.使用词云展示高频词汇
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取一个txt文件
f = open(r'texten.txt','r').read()
# 生成词云
wordcloud=WordCloud(backbround_color="white",width=1000,height=860,margin=2).generate(f)
#显示词云图片
plt.imshow(wordcloud)
plt.axis("off") #关闭坐标轴
plt.show()
#保存图片
wordcloud.to_file('test.png')
HOMEWORK:
- 编写程序、实现如下功能:
1)从中日7~18岁男生平均身高“avgHgt.csv”中读取身高数据
2)把数据绘制成曲线图
3)写入avgHgt.txt中 - 选择网络上一篇名人的英文演讲稿,制作词云。