NumPy库
-
用于高性能科学计算和数据分析,是常用的高级数据分析库的基础包
Mac安装numpy库:直接在终端通过命令安装 pip3 install numpy
window10安装numpy库:通过cmd安装 pip3 install numpy 或者 pip install numpy
-
NumPy的数组与数据类型
import numpy as np # 使用np.array()方法来操作数组要比python原生的数组效率高 arr1 = np.array([2,3,4]) print(arr1) #输出arr1的类型 print(arr1.dtype) arr2 = np.array([2.5,1.8,3.4]) print(arr2) #输出arr2的类型 print(arr2.dtype) # numpy的类型有int8 int16 int32 int64 float 等很多类型 print(arr1 + arr2)
-
NumPy数组和标量的计算
arr3 = np.array([2.5,1.8,3.4]) print(arr3 * 10) data = [[1,4,7],[2,5,8]] # numpy将data转化为二维数组 arr4 = np.array(data) print(arr4) print(arr4.dtype) # 定义值全部为0的长度为10的一维数组 print(np.zeros(10)) # 定义值全部为0的三行五列的矩阵 print(np.zeros((3,5))) # 定义值全部为1的四行六列的矩阵 print(np.ones((4,6))) # 定义值全部为空的三维矩阵,但是打印结果并不为空,因为如果矩阵的值全部设置为空,程序运算是不安全的,所以会填充随机的值 print(np.empty((2,3,2)))
-
NumPy数组的索引和切片
# 通过arange()产生0-9的数组 arr5 = np.arange(10) print(arr5) print(arr5[5]) # 对切片5-8的位置进行赋值,原数组的值发生了改变 arr5[5:8] = 10 print(arr5) # 为了保证原数组的值不改变,使用copy()来对切片进行复制,然后对复制后的数据进行操作 arr_slice = arr5[5:8].copy() # []里的:表示对arr_slice的从第一个到最后一个元素都赋值 arr_slice[:] = 15 print(arr_slice) print(arr5)
Pandas库
-
使用来进行预处理和数据清洗的重要库,pandas对numpy进行了封装,会对数据进行自动或者按照自定义的方式来进行显示,避免没有对齐而处理数据的时候出现失误。使用pandas可以灵活地处理缺失的数据,还可以像数据库的sql语句一样进行连接操作。
安装pandas库 : 在终端中命令输入 pip3 install pandas 或者pip install pandas
代码中import导入pandas失败的话可能是pandas库没安装成功,可用如下方法检查:
- 进入命令行,输入python3进入到交互模式,然后使用import pandas 命令来确认是否安装成功,如果安装不成功,重新使用pip安装即可,由于网络超时经常有安装包失败的情况出现
- 如果安装成功,可以打开pycharm,Mac用户在菜单栏pycharm -preferences-project interpreter选项右侧查看是否有pandas库,Windows用户在菜单栏File - Other Settings - Settings for New Projects - project interpreter选项右侧查看是否有pandas库。如果有那么需要等待pycharm为项目更新缓存,如果没有点击下方+号,使用pycharm为项目安装一个pandas包
-
Series的基本操作
from pandas import Series,DataFrame import pandas as pd # Series对数组增加了索引,而且它的索引是可以重复的 obj = Series([2,5,7,-3]) print(obj) # 通过index可以得到Series的索引 print(obj.index) # 通过values可以得到Series的所有值 print(obj.values) # 指定Series的索引 obj2 = Series([2,5,7,-3],index=['a','b','c','d']) print(obj2) # 修改Series的值 obj2['b'] = 10 print(obj2) # 可以把Series当作字典来用,判断key是否在Series中 print('d' in obj2) print('m' in obj2) # 将字典转化为Series city = {'beijing':10000,'shanghai':25000,'guangzhou':8000,'shenzhen':15000} obj3 = Series(city) print(obj3) # 修改Series的index obj3.index = ['bj','sh','gz','sz'] print(obj3)
-
DataFrame的基本操作
from pandas import Series,DataFrame data = {'city': ['shanghai', 'shanghai', 'shanghai', 'beijing', 'beijing'], 'year': [2016, 2017, 2018, 2017, 2018], 'pop': [1.5, 1.7, 3.6, 2.4, 2.9]} # 将字典通过DataFrame()得到一个DataFrame的表格 frame = DataFrame(data) print(frame) # DataFrame支持像表格一样按顺序展示,将DataFrame按照columns=['year','pop','city']的顺序排列 frame2 = DataFrame(data,columns=['year','pop','city']) print(frame2) # 提取DataFrame中的一维数据,可以像字典一样按照data[key]的方式,也可以通过data.key的方式获得 print(frame2['city']) print(frame2.year) # 对DataFrame增加新的一列'new',该列所有的值都是10 frame2['new'] = 10 print(frame2) # 对DataFrame增加新的一列'cap',该列的值通过判断city的值是否是'beijing'来得到True或False frame2['cap'] = frame2['city'] == 'beijing' print(frame2) pop = {'beijing': {2008: 1.5, 2009: 2.0}, 'shanghai': {2008: 2.0, 2009: 3.6} } frame3 = DataFrame(pop) print(frame3) # 对DataFrame的行列进行互换,叫做行列式的转式 print(frame3.T) print('-----------------------------------------------') obj4 = Series([4.5, 7.2, -5.3, 3.6], index=['b', 'd', 'c', 'a']) # 通过reindex对Series进行重新索引,在原来索引['b', 'd', 'c', 'a']的基础上加入了一个新的索引'e',则它的值是NAN obj5 = obj4.reindex(['a','b','c','d','e']) print(obj5) # 如果是空值可以会影响数据清洗,所以需要对空值进行统一的数据填充,在reindex()中通过fill_value来填充空值 obj6 = obj4.reindex(['a','b','c','d','e'],fill_value=0) print(obj6) obj7 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 4]) # reindex(range(7))重新索引之后,1,3,5位置处的值为NAN print(obj7.reindex(range(7))) # reindex()通过method='ffill'可以指定缺失值NAN为与它相邻的上面的值,method='bfill'指定缺失值NAN为与它相邻的下面的值 print(obj7.reindex(range(7),method='ffill')) print(obj7.reindex(range(7),method='bfill')) print('-----------------------------------------------') from numpy import nan as NA data2 = Series([1,NA,2]) print(data2) # 使用dropna()删除data2中的缺失值 print(data2.dropna()) frame3 = DataFrame([[1., 6.5, 3], [1., NA, NA], [NA, NA, NA]]) # dropna()方法会删除DataFrame中所有带有NA空值的行 print(frame3.dropna()) # dropna()方法通过how='all'只会删除DataFrame中一行中所有值都是NA空值的行 print(frame3.dropna(how='all')) # 将data2的第四列的值都赋值为NA frame3[4] = NA print(frame3) # 通过dropna()的axis=1, how='all'可以只删除某一列所有值都是空值的列 print(frame3.dropna(axis=1, how='all')) print('****************************************') frame4 = DataFrame([[1., 6.5, 3], [1., NA, NA], [NA, NA, NA]]) # 通过fillna(0)将DataFrame中的所有空值替换为0,fillna()方法修改的是frame4的副本,所以修改后frame4的值还是原来的值 print(frame4.fillna(0)) print(frame4) # 想要直接在frame4上进行修改,需要在fillna()方法中增加一个参数inplace = True,使用fillna(0, inplace=True)来替换 frame4.fillna(0, inplace=True) print(frame4) print('****************************************') import numpy as np # 定义一个包含两层索引的Series,这样我们可以根据索引的层次来提取数据 data3 = Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'], [1, 2, 3, 1, 2, 3, 1, 2, 2, 3]]) print(data3) # 提取索引为'b'的所有数据 print(data3['b']) # 提取索引为'a'到'c'的所有数据,也就是索引'a','b','c'的数据都提取出来 print(data3['a':'c']) # 通过unstack()方法将Series类型的data3转换为DataFrame的二维数据,再通过stack()又可以转换为一维数据 print(data3.unstack()) print(data3.unstack().stack())
Matplotlib库
-
用来进行绘图的
安装pandas库 : 在终端中命令输入 pip3 install matplotlib 或者 pip install pandas
-
Matplotlib库绘制折线、曲线、直方图、散点图
import matplotlib.pyplot as plot # 绘制简单的折线,[1,3,5],[4,8,10]分别是横坐标以及对应的纵坐标 plot.plot([1,3,5],[4,8,10]) # 通过show()方法来将绘制的图显示出来 plot.show() import numpy as np # 使用matplotlib也可以绘制numpy和pandas的数据 # linspace()方法产生一条从-π到π的直线 x = np.linspace(-np.pi,np.pi,100) # x轴的定义域为 -3.14~3.14,中间间隔100个元素 plot.plot(x,np.sin(x)) plot.show() x = np.linspace(-np.pi * 2, np.pi * 2, 100) # 定义域为: -2pi 到 2pi plot.figure(1, dpi=50) # 创建图表1,dpi代表图片精细度,dpi越大文件体积越大,杂志要300以上 for i in range(1,5): # 通过四次绘制来画出四条曲线 plot.plot(x,np.sin(x/i)) plot.show() plot.figure(2, dpi=50) # 创建图表2 data = [1, 1, 1, 2, 2, 2, 3, 3, 4, 5, 5, 6, 4] # 通过hist() 方法绘制直方图,只要传入数据,直方图就会统计数据出现的次数 plot.hist(data) plot.show() x = np.arange(1,10) y = x # 通过scatter() 方法绘制散点图,c = 'r'表示散点的颜色为红色,marker 表示指定散点的形状为圆形 plot.scatter(x,y,c = 'r',marker='o') plot.show()
-
Matplotlib库结合导入的seaborn库绘制彩色散点图
import matplotlib.pyplot as plt import numpy as np import pandas as pd import seaborn as sns import warnings # 'iris_training.csv'中是要绘制的点的坐标数据 iris = pd.read_csv('iris_training.csv') # head()方法获取前五条数据 print(iris.head()) # 绘制散点图 iris.plot(kind = 'scatter',x = '120',y = '4') plot.show() # 导入warmings是为了解决运行时报的warming warnings.filterwarnings('ignore') # 导入seaborn可以设置样式,让散点图更美观 iris2 = pd.read_csv('iris_training.csv') # 设置样式 sns.set(style='white',color_codes=True) # 设置绘制格式为散点图 sns.jointplot(x = '120',y = '4',data = iris2,size=5) # distplot绘制曲线 sns.distplot(iris2['120']) plot.show() # FacetGrid 一般绘图函数 # hue 彩色显示分类0/1/2,通过设置hue可以绘制散点的颜色为彩色,iris数据中的virginica列的值0、1、2分别表示三种颜色 # plt.scatter 绘制散点图 # add_legend() 显示分类的描述信息 # 通过map()来设置绘制哪些列的散点,如下:map(plt.scatter, "120", "4")表示绘制'120'和'4'这两列,map(plot.scatter,'setosa','versicolor')表示绘制'setosa'和'versicolor'这两列 # sns.FacetGrid(iris, hue="virginica", size=5).map(plt.scatter, "120", "4").add_legend() # 绘制三种颜色的散点图,颜色值由 hue='virginica'决定 sns.FacetGrid(iris2,hue='virginica',size=5).map(plot.scatter,'setosa','versicolor').add_legend() plt.show()
绘图展示如下 :
彩色散点图.png
TensorFlow库
-
用来进行机器学习的库
安装TensorFlow库 : 在终端中命令输入 pip3 install tensorflow或者pip install tensorflow
tensorflow还不支持3.7版本的python,需要安装3.6版本,而且是64bit的版本,32位版本无法下载。通过python -v命令来查看自己安装的python版本以及是否是64位
-
去github上下载官方提供的models,地址如下:https://github.com/tensorflow/models](https://github.com/tensorflow/models)
如果电脑上安装了git,可以通过 git clone https://github.com/tensorflow/models 命令来下载,或者在地址页点击clone or download进行下载
-
根据特征值分类的模型和代码
在我们下载的models代码的samples/core/get_started目录下面,我们可以看到通过TensorFlow根据特征值分类的模型,还可以在如下地址进一步学习:https://tensorflow.google.cn/tutorials