每年考点变化较大,仅供参考
CSDN的排版能力有限,因此留pdf版本,祝大伙全部95+,呼呼
山东大学软件学院2022-2023数据科学导论知识点整理【软工大数据课组】-统计分析文档类资源-CSDN文库
第1,2讲
总体上是概论部分,可能考的也就名词解释了,总结如下:
什么是大数据,大数据的界限,4V?
- 大数据是一种数据规模大到 在数据的获取管理,存储处理,分析计算都远远超过传统数据库软件工具处理范围的 数据集合。
- 大数据的界限是PB
- 4V: 体量巨大、速度极快(高实时性)、模态多样、价值密度低(但商业价值高)
什么是数据科学?
基于传统的数学,统计学的理论和方法,运用计算机技术进行大规模的数据计算,分析,应用的学科
数据处理的一般步骤是什么
采集,表示与存储,预处理(清洗,集成等),建模分析,可视化,决策
第4,5讲 数据采集与整理
数据预处理
基本方法:数据清理,数据集成,数据变换,数据规约
why预处理?
脏数据 在数据挖掘工作中,脏数据是指不完整、含噪声、不一致的数据
why脏数据?
- 不完整,有些数据属性的值丢失或不确定;缺失必要数据,例:缺失学生成绩
- 不准确,属性值错误,例:成绩 = -10; 噪声数据:包含孤立(偏离期望)的离群
- 不一致,数据结构有较大差异;存在数据重复和信息冗余现象;数据需求改动,例,评价等级:“百分制”与“A, B, C”
数据错误是不可避免的
数据质量的含义:正确性,一致性,完整性,可靠性
数据清洗
数据缺失或出错(噪声)的原因就很多了:采集出错,反爬虫,加密,存储出错,人为,等等
处理缺失方法
数据缺失的类型
- 完全随机缺失:不依赖其他属性/变量,不影响样本的无偏性
- 随机缺失:缺失与其他完全属性/变量有关系 - “期末成绩”的依赖于“平时表现”- “工资”与“人群背景”的关系
- 非随机缺失: 数据缺失与属性/变量自身的取值有关 Eg.工资问卷
数据删除
(可能丢失信息,或改变分布),但如果数据是完全随机缺失,对结果不产生影响,则可以删除
数据填充
- 特殊值填充 - 空值填充,不同于任何属性值。例,NLP词表补0,DL补mask- 样本/属性的均值、中位数、众数填充
- 使用最可能的数据填充 - 热卡填充(找相似的样本,并就近补齐)- K最近距离法(KNN,找最近的K个相似的样本,并加权平均估计样本缺失数据)- 利用回归等估计方法(基于数据集建立回归方程模型)- 期望值最大化方法(EM算法)
处理噪声方法
噪声是测量误差的随机部分
- 包括错误值,或偏离期望的孤立点值
- 需要对数据进行平滑
分箱(binning)
利用近邻数据对数据进行平滑,步骤如下:
排序数据,并将他们分到等深的箱中
按箱平均值平滑、按箱中值平滑、按箱边界平滑等(离散化)
回归(Regression)
回归模型可以做缺失值填充,也可以做数据平滑,同个道理,把噪声数据用回归模型预测数据替代
聚类
特殊处理【没讲】
在特定的应用任务中,根据目标不同,需要特殊的数据清理方法
比如冷启动问题:如何在没有大量用户数据的情况下设计个性化推荐系统并让用户对推荐结果满意而愿意使用推荐系统
几种推荐系统是否存在冷启动问题
- 基于人口统计学的推荐:无冷启动问题
- 基于内容的推荐:有冷启动问题
- 基于协同过滤的推荐:对新物品和新用户都有冷启动问题
通用推荐问题(两种协同过滤算法)
UserCF算法推荐的是那些和目标用户有着共同兴趣爱好的其他用户所喜欢的物品
ItemCF算法推荐的是那些和目标用户之前喜欢的物品类似的其他物品
UserCF算法的推荐更偏向于社会化,而ItemCF算法的推荐更偏向于个性化
数据集成
将多个数据源的数据整合到一个一致的数据存储中,目标是获得更多更完整的数据,获得更全面的数据画像,如用户画像等
无序数据:每个数据样本的不同维度是没有顺序关系的
有序数据:对应的不同维度(如特征)是有顺序要求的
对于无序数据
集成数据(库)时,经常出现冗余数据
- 冗余属性
- 冗余样本
检测冗余属性
Pearson相关系数:
- >0:两项属性可以把一个作为冗余删除
- =0:相互独立
- <0:负相关
卡方检验:值越大,两个变量相关的可能越大
检测冗余样本
各种距离
欧几里得距离(对数据标准化很重要)
马氏距离
在欧式距离的基础上,考虑到各种特性之间的联系(协方差);把方差归一化,使得特征之间的关系更加符合实际情况
各种相似度
看一下SMC,Jaccard相关系数,余弦相似度怎么算
- Jaccard相关系数用在集合数据上
- 余弦相似度用在文档,图片上
对于有序数据
Spearman Rank相关系数
怎么算+用途:信息检索,推荐系统
NDCG
数据变换
数据规范化
目的:将不同数据(属性)按一定规则进行缩放,使它们具有可比性
- 最小-最大规范化(对原始数据进行线性变换。把数据A的观察值v从原始的 区间[minA,maxA]映射到新区间 [new_minA,new_maxA])【0-1规范化又称为归一化】
- z-score规范化【结果仅用于比较】
数据离散化【熵的计算】
连续数据过于细致,数据之间的关系难以分析,划分为离散化的区间,发现数据之间的关联,便于算法处理
Eg. 把年龄离散化为不同年龄段,把成绩离散化为不同等级,总之就是让他们不连续
- 非监督离散化(可采用噪声清理方法)【无类别信息】 - 分箱- 聚类
- 监督离散化(基于熵的离散化)【有类别信息】 - 熵的计算- -
- 根据熵确定分割点
答案应该是第二和第三个数据之间
数据规约
数据清理、数据集成之后,获得多源且质量完好的数据集,但数据规模过大
目标:缩小数据挖掘所需的数据集规模,缩小后的数据集可以产生几乎相同的分析结果
用于数据归约的时间不应当超过或“抵消”在归约后的数据上 挖掘节省的时间
- 维度归约(减少所考虑的随机变量或属性的个数)、 - PCA(主成分分析)【需要复习计算,行列式计算,求特征值,求特征向量】 - 所有行先减去各自行的平均值- 求协方差矩阵C- 对协方差矩阵求特征值,特征向量- 标准化特征向量(长度为1)【不一定要做】- 用标准化后的特征向量(按特征值大小排序),取K个组成矩阵P- Y=XP-
- 缺点:求特征值的计算效率是比较低的;映射得到的维度是不可逆的,且不可解释,没有具体意义- 如何求矩阵的特征值和特征向量是可帅鸭的博客-CSDN博客矩阵特征值怎么求- 特征子集选择 - 做法:删除不相关或冗余的属性来减少维度与数据量 目标:找到最小属性集,使得数据的概率分布尽可能接近使用所有属 性得到的原分布 理解:从全部属性中选取一个特征属性子集,使构造出来的模型更好- 启发式步骤:建立子集集合,构造评价函数,构建停止准则,验证有效性【决策树】
- 数值归约(用较小的数据表示形式替换原始数据)【没咋讲】 - 参数化方法【只存参数,不存数据】:各种回归模型- 非参数化方法:直方图,聚类,抽样
特征工程
从这里开始,就和实际任务密切相关了
概念
在数据预处理以后(或者数据预处理过程中),如何从数据中提取有效的特征,使这些特征能够尽可能的表达原始数据中的信息,使得后续建立的数据模型能达到更好的效果,就是特征工程所要做的工作。
设计特征
- 独热特征表示:将每个属性表示成一个很长的向量(每维代表一个属性值,如词语) - 优点:直观,简洁- 缺点: - 维度灾难:当需要表示的属性非常多的时候,独热特征表示在空间和时间上的开销都是十分巨大的- 语义鸿沟:每个属性都是完全独立的,无法刻画属性间的联系
- TF-IDF(词频-逆文档率) - 词频:TF = 某个词(特征值)在句子(数据)中出现的频率- 逆文档率:lg(语料库(数据库)的句子(数据)总数 / 包含该词(特征值)的句子(数据)总数)- 应用:搜索引擎;关键词提取;文本相似性;文本摘要
例:假如一篇文件的总词语数是100个,而词语“母牛”出现了3次,那么“母牛”一词在该文件中的词频就是3/100=0.03。一个计算文件频率 (IDF) 的方法是文件集里包含的文件总数除以测定有多少份文件出现过“母牛”一词。所以,如果“母牛”一词在1,000份文件出现过,而文件总数是10,000,000份的话,其逆向文件频率就是 lg(10,000,000 / 1,000)=4。最后的TF-IDF的分数为0.03 * 4=0.12。
当词语在所有文件中都没有出现时,IDF的分母要加1
特征子集挑选
特征子集评价
PPT76-79看一下就好
知道三种式
过滤式仅仅是用信息统计的启发式准则来评价
封装式是直接用最终分类器性能作为评价标准,比过滤式好的代价是泛化性变差,同时计算开销较高
嵌入式有两种选择:基于奖惩和基于树模型
奖惩式新增了特征的权重,现在也往往内嵌在深度学习中
树模型是在说,决策树,随机森林等本身也是一种特征选择
传统ML和深度学习区别
从手动特征提取到自动特征提取
第6讲
数据分类
结构化数据
csv等
半结构化数据
(自描述结构),分割实体及其属性 。如:XML,JSON等
非结构化数据(文档,文本,图片,视频,音频等)
数据库
常见数据库
关系型:MySQL,Oracle
非关系型:Redis,Mongo,Neo4j,Hbase等
【这一讲有点太逆天了,下面从往年题出发重新归纳知识点】
SQL类型
类别一:Data Definition Language (DDL) 数据定义语言****(create,delete等)****
类别二:Data Manipulation Language (DML) 数据操作语言(增删改查)
类别三: Data Control Language(DCL):数据控制语言,用来定义访问权限和安全级别
类别四:Data Query Language(DQL):数据查询语言,用来查询记录(数据)。【Select】
SQL要复习
- create,delete(DDL)
- SELECT会结合连接考【Inner Join = Join,Outer Join (左,右,全),自然连接】
关系型数据库优点
【PPT逆天版】
- 数据结构化,管理效率高
- 存取路径对用户隐蔽,用户只要指出“干什么”,不必详细说明“怎么干”
实际上,明显的优点应该在对于事务的支持,有高一致性
why NoSQL?
可以从下面几个方面来说,主要看题目怎么问:
从数据结构化来说
- 随着大数据时代的降临,我们面对的不仅仅是结构化数据的存储,还有各种半结构化,非结构化的数据
- 举例来说,前期需求不明确,非严格事务性的产品,可以使用NoSQL(MongoDB),因为传统RDBMS更改表结构的代价较大,结构不灵活;对于明显面向联系的数据产品来说,使用Neo4J很可能是个不错的选择,因为RDBMS对联系的查询代价比较大
从高并发读写来说(Web 2.0)
- 传统RDBMS几乎所有操作都要过磁盘,这是为了保证事务特性带来的巨大开销;但这种开销在新的Web 2.0中可能是不必要的,起码对于博客系统来说,两个用户短时间内看到的内容不完全一致不会带来很大影响,所以NoSQL一个重要的思路就是降低一定的一致性【降低支持的事务等级】,从而获得更高的读写效率,获得更高的可用性和分区容错
- 传统RDBMS是不分区的,意味着不支持横向拓展,这会导致硬件上的IO瓶颈;分布式是应对高并发的重要方案,NoSQL往往都对此提供了强大支持,有自动化分区服务等等
- 使用内存做缓存可以改善这一情形,内存式KV数据库—Redis
从海量数据下的查询(读写)来说
- 传统RDBMS是行式的,在条件查询下会带来更高的成本;不妨尝试列式存储,该类型也常常应用在大规模的数据分析上
- 集合运算在Redis上很轻松【内存式,结构简单,很快】,但传统就不好说了
- 分布式。。。。。
几种NoSQL的应用场景
集合运算—Redis
社交,推荐系统,数据可视化—Neo4j
数据分析—列式
只要不是强事务性的,用Mongo都会带来性能提升
Redis优点
- 支持的数据类型包括string、list、set、zset(有序集合)和hash
- 支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且操作都是原子性的,支持各种不同方式的排序
- 内存式,分布式,轻松应对高并发场景
- 对数据结构性要求不高
- 可拓展,分布式
NoSQL比较通用的:
- 分布式,轻松应对高并发场景,高并发读写性能优异
- 分布式,优越的水平拓展性能【图除外】
- 海量数据下高效的查询性能
- 对数据结构性要求不高,数据结构修改代价小
【有时间再看看数据存储模型吧,感觉考的概率不大】
【这科目感觉记忆量有点抽象了,有时间再详细看NoSQL笔记和SQL吧】
第7讲
数据探索性分析【重点】****
指对已有的数据在尽量量少的先验假定情况下进行探索,逐步了解数据的特点
作用:利用人机交互技术和数据可视化技术,通过不断揭示数据的规律和数据间的关联,引导分析人员发现并认识以前不知道的数据模式或规律。对未知的数据模式和规律的探索是其价值所在。
探索式数据分析的基本方法
计算一些汇总统计量,了解数据的典型值,还可以通过确定异常值,了解数据的异常情况
制图和制表,展示变量的分布情况、时间序列数据的变化趋势以及变量之间的关系。
总体:在每一个特定的大数据分析问题中,问题有关对象(个体)所构成的集合即为待研究问题的总体
样本:从总体中抽取的若干个个体,具有随机性和独立性
下面都是常见的数据统计方法
数据分布
集中趋势
离散程度
形状变化
平均数,中位数,分位数,众数
方差和标准差,极差和四分位差,异众比率,变异系数
峰度,偏度
异众比率:非众数组的频率占总频数的比率
变异系数:原始数据标准差和原始数据平均数的比,当系数大于15%的时候,数据可能不正常
峰度:描述总体中所有取值 分布形态陡峭程度 or 平坦程度
偏度:描述的是某总体取值分布的对称性
【我觉得不会细考计算,有时间再看】
参数估计(点估计)
用样本统计量���的某个取值直接作为总体参数���的估计值
简单来说,就是用样本指标直接估计总体指标
指标为某个特征值:如数学期望、方差和相关系数等
矩估计
一阶原点矩:期望(平均数)
二阶中心矩:方差
三阶中心矩:偏度
四阶中心矩:峰度
最小二乘估计(LSE)
极大似然估计(MLE)
思想:利用已知的样本结果信息,反推最具有可能(最大概率)导致这些样本结果出现的模型参数值
目标:概率分布函数或者似然函数最大;用似然函数取到最大值时的参数值作为估计值
过程:
取一个模型,参数未定
代入变量
取对数
解一个最好的参数使得式子最大
【还有很多似然函数,但我觉得就能考一个对数似然】
最大后验概率估计(MAP)
【这个太难算了,记个公式,知道区别就行】
区别:在极大似然(MLE)下新增了先验知识(假设),考虑了先验概率
当先验分布均匀时,MAP 估计与MLE 相等
先验分布的选择是重要的,根据先验分布决定先验概率
优点:
- 引入先验知识
- 在小数据量下更稳定
缺点:
- 和MLE一样,只返回参数的单值估计
- 当用不同的参数去表示同一分布时,MAP会对超参数很敏感
点估计的数量型指标
- 平均绝对误差(MAE)
- 均方误差(MSE)
- 均方根误差(RMSE)【最常用】
假设检验
假设检验与参数估计
相同:都利用样本对总体进行推断,采用的技术手段相似;
不同:推断的出发点不同,结果也不同
- 参数估计:用样本的统计来来估计总体参数的推断方法,待估计的总体参数在估计前是未知的
- 假设检验:先对待估计的总体参数提出一个假设,再利用样本去检验该假设是否成立【逻辑上是反证法】
基本概念
一般有两个假设:
原假设H0:想要拒绝的假设
备择假设H1:想要接收的假设
H0和H1不一定是事件的全集,而与实际研究目的相关,具有主观性
两类错误:
第一类错误,弃真���:H0成立时,拒绝了H0
第二类错误,取伪���:H0错误时(H1成立),接收了H0
α 错误的犯错率为置信度,降低置信度就可以降低α 错误的犯错率
β错误则是由很多客观因素造成的,难以明确表示
首先要降低α 错误
增大样本量可以使得两类错误同时减小
【怎么算大概率不考,需要的话看PPT7 119-127】
抽样方法
基本概念
非概率抽样
抽取样本时不是依据随机原则,而是根据研究目的对数据的要求,采用某种方式从总体中抽出部分单位对其实施调查
缺点:抽取样本有主观性,使结果有偏差;不可能计算各个元素的入样概率,无法得到可靠的估计值及抽样误差估计值,不能推断总体
等概率抽样
每一个单元的入样概率均相等;
常见的有:简单随机抽样,系统抽样,分层抽样,整群抽样等等
系统抽样是在总样本数过多时,随机取一部分,再进行简单随机抽样
根据某个特性进行分层,层间差距大,层内差距小,按比例抽取来满足等概率
整群抽样是直接一次性抽取所需样本数,但需要满足群内差异大,群外差异小的特性
不等概率抽样
如果总体单元相差较大,等概率抽样效果不一定好
eg.估计合肥市商业零售总额,大型商场、中型超市和小型商店的差别非常明显,平等对待显然不合理
分层抽样:按规模分层,大型抽样比高、小型抽样比低 目录抽样:少数大单元普查而大多数小单元进行抽样
大数据why需要抽样
- 节省时间和算力,提高效率;因为样本整体的结果有时候是不可得的,或者获取成本太高
- 解决样本不均衡问题;通过对大类数据进行欠抽样,小类数据进行过抽样,从而使得数据比例达到实验预期
- 在定性工作上往往还是由人力来完成,抽样减少数据量才有可能由人力进行处理
第8讲 数据分析—机器学习
概念
机器学习是人工智能的子领域,它研究如何教给计算机自我学习的能力,而不是让机器按照固定的程序运行
机器学习是使用训练数据对模型进行学习,训练,优化的过程,最终利用模型对其他数据进行预测和判断的方法。
机器学习的基本流程
业务场景分析
- 对业务场景进行分析,了解业务痛点问题,分析机器学习是否适用于该问题- 把业务需求抽象成机器学习问题,如分类、聚类、回归、降维等应用场景
数据处理
- 进行数据清洗,数据集成,数据变换等操作来获取数据- 特征工程,获取高质量特征
训练机器学习模型和评价
- 切分数据集为训练集和测试集- 根据选择的算法进行训练,得到模型- 使用测试集对模型进行评估
使用机器学习模型
- 使用模型对新遇到的数据样本进行预测
数据准备
大头已经在前面讲过了
实体数字化:比如婚否的取值有是、否两种可能,所以它是类别型数据,我们用1、0表示是、和否
这里可能因为度量单位不同等,需要进行数据变换
文本数字化:0/1表示法(每个词有则1,无则0),计数法(重要的词具有更高的值而不止是1),TF-IDF
——解决:N—Gram技术【不考】
图的数字化:数据结构:邻接矩阵,邻接链表,边列表
在这里插入图片描述
- 图像数字化:RGB
统计和机器学习
【重点记一下】
统计:
- 只能刻画总体,而不能刻画细节规律
- 坚实的数学理论基础,有严密的逻辑性,其结果能用公式给出,结果精确,可解释性强
- 建模技巧性强,对假设依赖强,有时难以满足现实情况
机器学习
- 能刻画系统局部细节特征
- 基于归纳推理,无需苛刻的假设【反过来则难以解释,需要进一步验证规则,同时,难以推广到其他业务领域】
- 能从中反应发现新的规律,且具有较高实时性【反过来模型时效性强】
机器学习常用方法
回归模型
- 一元线性回归
- 逻辑斯蒂回归模型(sigmoid)
损失函数
用于刻画预测结果的优异程度
- 均方误差(mean squared error, MSE)
- 平均绝对误差(mean absolute error, MAE)
优化
目标是最小化/最大化目标函数,方法是优化参数
- 梯度下降(根据斜率下降)
分类问题
SVM向量机
找一个线性函数,可以把输入分成预期的两类
SVM的目标是分类间隔最大化
但不一定在本维度线性可分【why 核函数】
核函数:将样本映射到高维空间,使其基本线性可分【what|how 核函数】
Pre感知机
现代神经网络的雏形,但没有激活函数,所以感知机是一种线性分类模型,属于判别模型
SVM向量机
Pre感知机
目标
分类间隔最大化
最大程度正确划分,最小化错误
过拟合
一定程度上避免
很容易造成过拟合
学习策略
拉格朗日函数
梯度下降
逻辑斯蒂回归(sigmoid)
该函数把样本特征的线性组合映射到了(0,1)上
函数的值具有特殊的含义,它表示结果取类别1的概率
决策树
熵的计算看第4,5讲,数据离散化
均匀分布时,熵最大为log2C
确定分布时,熵最小为0
条件熵就是根据分类比例加权的算法
找一个点进行分割,算得的条件熵前后比较即可得出信息增益
决策树优点:
- 可以接收类别型特征【重要】
- 分类效果与其他算法相当
- 训练,测试效率高
决策树构建:
全局最优是一个NP—Hard问题
所以需要启发式算法进行训练
一个方法是用贪心算法
- 每次分类都选择信息增益最大的特征,对训练数据进行划分【类别型就直接选特征,数值型选特征后需要确定阈值】
- 当训练样本都属于一个类别,或者没有更多样本和特征时停止
过拟合
机器学习算法拟合噪声数据,而不是数据中的有意义规律
现象:在训练数据上得到的精度,远大于在测试数据上得到的精度
原因:
训练数据量太少【数据单一】
模型过于复杂,模型参数过多 - 决策树:太深、节点太多
解决方案:
增加训练数据,降低模型复杂度
决策树:剪枝,减少节点数量
第9讲 数据分析—神经网络
输入层——N个隐藏层——输出层
隐藏层内有很多神经元,每个神经元都有激活函数如sigmoid,tanh等
也可以不使用激活函数,但结果就只能是线性的了
【当然,这里要求比较简单,面向考点复习,意思意思就行了】
前向传导
计算输出值的过程,称为前向传导,也叫前向传播,
反向传播
反向传播仅指用于计算梯度的方法
反向传播是拿来算Loss函数对于每个参数的偏微分的
然后用结果修正参数表
主要用的就是链式法则,其实很简单.jpg
最后修正参数就行了,η是学习率,超参数,越大学习越快,代价是可能难以逼近最低点(梯度下降)
第10讲
数据可视化作用
- 协助思考
- 使用感知代替认知
- 作为大量工作记忆的外界辅助
- 增强认知能力
数据可视化方法和技术
【重点看有什么种类,优缺点往往集中在简单直观和对复杂密集图表现的取舍上】
图可视化技术 - 节点链接图- 可以直接反应出网络关系,图的总体结构及其路径- 但对密集图不适用- 相邻矩阵法- 完全规避边的交叉,非常适用于致密的图,且伸缩性强- 可视化效果比较抽象,难以跟踪路径
统计图表可视化
地理数据可视化 - 点数据可视化- 线数据可视化- 区域数据可视化
文本可视化
作用:文本可视化将文本中蕴含的语义特征(词频、逻辑结构、主题聚类、动态演化规律等)直观的展示出来
时空数据可视化
一维二维三维标量场数据可视化,PPT63-65看一下就行
数据可视化工具
【随便记几个,考过】
Google Charts,Echarts,D3.js,neo4j bloom,R,Processing 等
第11讲
总纲
数据获取【网页抓取】
提升性能:异步抓取,DNS预解析
链接调度:累积式抓取,增量式抓取【搜索引擎的日常抓取】
重复检测:I-Match算法
爬虫:robots.txt(友好访问|存放于网站根目录下的ASCII编码的文本文件,它通常告诉网络搜索引擎的漫游器内容是否能被获取)
恶意爬虫危害:
- 增加网站带宽负担
- 核心文本被爬取
- 注册用户被扫描(一个个验证手机号看是否注册)
- 点击欺诈(不知道真实的访问量)
数据处理【中文分词】
中文基于单字,中文书面表达方式以汉字作为最小单位的,但词与词之间没有显性的界限标志
词法分析包含:
分词
词性标注(名词,动词,形容词等)
命名实体识别
词义消歧
分词的意义
正确的机器自动分词是正确的中文信息处理的基础
分词主要难题
- 如何识别未登录词
- 如何利用语言学知识
- 词语边界歧义处理【分词歧义】
- 实时性应用中的效率问题
分词主要方法
基于人工规则
基于统计机器学习
基于深度学习
优点
简单、可理解、结果可控
数据驱动,应用广泛
精度高
缺点
规则维护困难,分词精度欠佳
高质量训练数据获取昂贵,特征工程
可解释性差,需要海量训练数据
版权归原作者 不会考试的creeper 所有, 如有侵权,请联系我们删除。