上课代码总过程
#在终端输入
pip install jupyter #下载jupyter
jupyter notebook #进入
pandas的应用
upload:上传
import pandas as pd #导入数据包
df=pd.read_excel('大数据3班成绩.xlsx',sheet_name='成绩',skiprows=1) #读取数据。skip rows:从上往下跳过一位
df
df.head(2)#读取前两项
df['姓名']#df[列名队列]
df[0:2]#读取0,1列,左闭右开
df.loc[0:1,['姓名','性别']] #df。loc[行索引,列索引]。都可以取.行索引:名字-0,1、列索引:姓名,性别
df.iloc[0:2,]#df。iloc[行w位置,列位置] 默认全取
df.iloc[0:2,0:2]#df。iloc[行w位置,列位置]
df[['姓名','性别']]#注意加[]
df.shape[1] #df.shape :查看数据框的行数与列数 shape是该对象的一个属性值,不是函数
#shape[0] :读取行数
#shape[1]:读取列数
df.info()# 查看数据框 (DataFrame) 的索引、数据类型及内存信息
df.isnull().any()
#any() 只要存在空值就显示True、all()全部都是空值才显示Ture
# 检查数据中空值出现的情况,并返回一个由布尔值(True,Fale)组成的列
df.isnull().all()
df.fillna({'分数':60},inplace=True)
df
#将数据框 DataFrame 中的所有空值替换为 x
#将“分数”中空值变成“60”
#inplace:保存显示
df['姓名'].fillna(method='ffill',axis=0,inplace=True) #ffill:front fill, bfill :back fill:用后面的值填写--一列列填写
df.fillna(method='ffill',axis=0,inplace=True)#全部填写
df
#ffill:填的是前面的值、axis:具体是前面的那个值、inplace:保存显示
df7=df[df['学科']=='应用']#取出学科中的应用
df7
#取出方法一
df8=df.where(df['学科']=='语文').dropna()
df8
# df.dropna()移除数据框 DataFrame 中包含空值的行
#where:从主体df出发
#取出方法二
df9=df.query('学科=="数学"')
df9
#数据查询query函数
#取出方法三
df7.to_excel('test111.xlsx',sheet_name='应用')
df8.to_excel('test111.xlsx',sheet_name='语文')
df9.to_excel('test111.xlsx',sheet_name='数学')
#df.to_excel(filename) 将数据框 (DataFrame)中的数据导入Excel格式的文件中(单个文件)
#C:\Users\lenovo:导出文件地址
import os
print(os.path.abspath('.'))
#查找文件地址
writer=pd.ExcelWriter('test111.xlsx')
df7.to_excel(writer,sheet_name='应用')
df8.to_excel(writer,sheet_name='语文')
df9.to_excel(writer,sheet_name='数学')
writer.save()
writer.close()
#一个Excel文件包含三个表
#想要保存多个sheet在同一工作簿中,需要用到一个函数------pd.ExcelWriter()
df['结果']=df['分数'].apply(lambdax:'合格'ifx>59else'不合格')
df
#df.apply():把每一个值都待入函数中
df['sex']=df['性别'].map({'男':1,'女':0})
df.T
#map:只用于Series,实现每个值->值的映射
#df.T:转置
df
del df['sex']
df
#del:删除
df3=df.groupby(['姓名','性别','学科']).sum()
#df3=df.groupby(['姓名','性别','学科']).mean()
df3
#df.groupby([col1,col2]) # 按照列col1和col2对数据框df做分组
#groupby:聚合,只能找出唯一确定的值。需要添加聚合函数
#df.mean() # 得到数据框df中每一列的平均值
df3.to_excel('test111.xlsx',sheet_name='测试')#导出
df3=df.groupby(['姓名','性别','学科']).mean()
df3
分类算法-重点
先无监督学习(聚类),后监督学习
sklearn官网
连续--回归;离散--分类
K的邻近算法
加载数据,数据预处理的部分都是一样的
!pip install scikit-learn#安装 sklearn
from sklearn import datasets
#tab:补全 、Ctrl+Enter:运行、Shift+Enter:新建一行
#datasets:库
iris=datasets.load_iris()#加载iris数据集
iris
爬虫--预处理--获取数据:样本数据--特征工程--选择模型--训练--测试
-
训练集是用于发现和预测潜在关系的一组数据。
-
测试集是用于评估预测关系强度和效率的一组数据。
一、数据预处理
选择模型-训练-测试-评估
朴素贝叶斯
相互独立
#加载数据
from sklearn import datasets
iris = datasets.load_iris()
#导入模型
from sklearn.naive_bayes import GaussianNB
#MultinomialNB:多项式模型;GaussianNB:高斯模型;BernoulliNB:伯努利模型
gnb = GaussianNB()
#训练模型+预测数据
y_pred = gnb.fit(iris.data,iris.target).predict(iris.data)
#输出:针对训练集的数据,统计预测值的结果与真实的结果不相同的数目
print("Number of mislabeled points out of a total %d
points : %d"%(iris.data.shape[0],(iris.target !=
y_pred).sum()))
决策树
信息熵H(A)
实验训练-分类、回归
'''
1、获取数据
2、特征工程(特征抽取noehot\word2V、无量纲化处理:归一化、标准化,降维;方差降维、PCA降维、相关性降维)NLP
3、分成训练集、测试集
4、选择模型
5、训练
6、测试
7、评估
8、保存
'''
#一、获取数据
from sklearn import datasets#导入所需数据集
iris = datasets.load_iris()#加载iris数据集
iris
X = iris.data#data:数据集中的数据
Y = iris.target#数据集的种类
X
Y
iris.target_names#目标标签名
iris.feature_names#特征名
#二、特征工程
from sklearn.model_selection import train_test_split#split:分割数据模块
train_x,test_x,train_y,test_y = train_test_split(X,Y,test_size = 0.3,random_state = 1)
#训练集和测试集:train、test来源于X,Y;test_size:测试集所占比例;random_state:自由度
len(train_x)#len:长度,个数之类
len(test_x)
len(X)
#模型的选择
from sklearn.preprocessing import StandardScaler#引入库:标准化,有监督学习,有标签
from sklearn.neighbors import KNeighborsClassifier#K的邻近算法
knn = KNeighborsClassifier()
knn.fit(train_x,train_y)#训练模型
test_p = knn.predict(test_x)#预测模型
test_p
test_y
from sklearn.metrics import accuracy_score#评估
result = accuracy_score(test_y,test_p)#准确率
result
from sklearn.model_selection import GridSearchCV#模型优化:网格搜索
param_grid = {'n_neighbors':[3,5,7,9,11]}
gridcv = GridSearchCV(knn,param_grid=param_grid,cv=10)
gridcv.fit(train_x,train_y)#训练
gridcv.best_params_#最优参数
test_p1 = gridcv.predict(test_x)#预测
accuracy_score(test_y,test_p1)#准确率
#朴素贝叶斯
'''
生成朴素贝叶斯
先引用朴素贝叶斯模型
初始化模型
'''
from sklearn.naive_bayes import GaussianNB
nb = GaussianNB()
from sklearn import tree#树
tree = tree.DecisionTreeClassifier()
tree.fit(train_x,train_y)#训练
test_p2 = tree.predict(test_x)#预测
accuracy_score(test_y,test_p2)#准确率
from sklearn.datasets import fetch_openml#导入数据集
data,target = fetch_openml(name="boston", as_frame=True, return_X_y=True, parser="pandas")
#data:特征值,target:标签值
data
target
train_x1,text_x1,train_y1,test_y1=train_test_split(data,target,test_size=0.3,random_state=1)
#random_state:自由度
#线性回归模型
from sklearn.linear_model import LinearRegression,SGDRegressor,Lasso,Ridge
line = Ridge()
line.fit(train_x1,train_y1)#训练
test_p3=line.predict(text_x1.to_numpy())#(text_x1)#预测
#to_unmpy:将DataFrame转换成numpy
text_x1
#text_x1.to_numpy()#这种才可以
test_p3
import pandas as pd
import numpy as np
type(text_x1)
type(test_p3)
test_y1
#评估方法,均方误差
#指的是预测值与真实值之差的平方的平均值. 它常用于回归问题中评估模型的预测精度.
#其结果越小,表示模型的误差越小,模型的准确性也就越高。因此,当我们看到mean_squared_error的结果小时,可以认为模型的性能较好。
from sklearn.metrics import mean_squared_error
mean_squared_error(test_y1,test_p3)
特征工程--代码
这段代码使用了 scikit-learn(简称 sklearn)中的 DictVectorizer 类和 text 模块。
DictVectorizer 类是用于将字典类型的特征向量转换为稀疏或密集矩阵表示的工具。在自然语言处理中,我们通常会使用词袋模型来表示文本数据,其中每个文本都可以表示为一个字典,其中键是单词,值是单词在该文本中出现的频率或计数。DictVectorizer 将这些字典类型的特征向量转换为机器学习算法可以处理的矩阵形式。
text 模块是 sklearn 中的一个子模块,包含了用于文本处理的各种工具和算法。例如,CountVectorizer 和 TfidfVectorizer 类都是用于将文本转换为数值特征向量表示的工具,TfidfTransformer 类用于计算文本的 TF-IDF(词频-逆文档频率)权重。这些工具和算法可以帮助我们将文本数据转换为机器学习算法可以处理的数值特征向量形式,以便进行分类、聚类或其他任务。
出现的问题:
原因:
正确代码:
这段代码是使用sklearn中的DictVectorizer将字典转换为稀疏矩阵,并且进行了一些后续操作。具体解释如下:
-
DictVectorizer(sparse=True):创建一个DictVectorizer对象,其中sparse=True表示将结果转换为稀疏矩阵(即只存储非零元素的位置和值),以节省内存空间。
-
result=transfrom.fit_transform(dic):使用fit_transform方法将字典dic转换为稀疏矩阵result,该矩阵的行数对应于字典中的样本数,列数对应于字典中的特征数(即键的数量)。
-
ss=transfrom.get_feature_names_out():获取每个列的名称,也就是字典中所有键的名称。
-
print(result.toarray()):将稀疏矩阵result转换为普通矩阵并打印出来。
-
print(ss):打印出所有特征的名称。
-
transfrom.inverse_transform(result):将矩阵result转换回原始字典形式。
总之,这段代码的作用是将字典转换为稀疏矩阵,并且可以在稀疏矩阵和字典之间进行转换操作。