具体描述
朝乐门老师的《Python编程:从数据分析到数据科学(原稿)》作为全国高校大数据教育联盟主办的“Python编程及数据分析骨干教师高级研修班”的指定教材,得到与会代表的一致好评。该教材较好地反映了本学科的基本理论、基本知识、基本技能,并注重知识体系的系统性、科学性和先进性,对于大数据类专业中开设Python编程课程具有重要的示范意义和指导作用。—— 全国高校大数据教育联盟
作者简介
朝乐门,1979年生,中国人民大学数据工程与知识工程教育部重点实验室、信息资源管理学院副教授,博士生导师;章鱼大数据首席数据科学家;中国计算机学会信息系统专委员会委员、ACM高级会员、国际知识管理协会正式委员、全国高校大数据教育联盟大数据教材专家指导委员会委员;主持完成国家自然科学基金、国家社会科学基金等重要科学研究项目10余项;参与完成核高基、973、863、国家自然科学基金重点项目、国家社会科学基金重大项目等国家重大科研项目10余项;获得北京市中青年骨干教师称号、国际知识管理与智力资本杰出成就奖、Emerald/EFMD国际杰出博士论文奖、国家自然科学基金项目优秀项目、中国大数据学术创新奖、中国大数据创新百人榜单、中国人民大学优秀博士论文奖等多种奖励30余项。朝乐门是我国第一部系统阐述数据科学理念、理论、方法、技术和工具的重要专著——《数据科学》(清华大学出版社,2016)的作者,也是数据科学与大数据技术专业第一个领域本体“DataScienceOntology”研发团队的总负责人。
目录信息
1 为什么要学习Python?学习Python 的什么 3
2 学习Python 之前需要准备的工作有哪些 6
3 如何看懂和运行本书代码 8
31 输入部分8
32 输出部分 10
33 错误与异常信息 11
34 外部数据文件12
35 注意事项 14
第二篇 Python基础
4 数据类型19
41 查看数据类型的方法 20
42 判断数据类型的方法21
43 数据类型的转换方法22
44 特殊数据类型23
45 序列类型26
5 变量28
51 变量的定义方法29
52 Python 是动态类型语言29
53 Python 是强类型语言 30
54 Python 中的变量名是引用31
55 Python 中区分大小写32
56 变量命名规范32
57 iPython 的特殊变量33
58 查看Python 关键字的方法 34
59 查看已定义的所有变量35
510 删除变量37
6 语句书写规范39
61 一行一句 40
62 一行多句 40
63 一句多行 41
64 复合语句 42
65 空语句 43
7 赋值语句44
71 赋值语句在Python 中的重要地位 45
72 链式赋值语句 45
73 复合赋值语句 46
74 序列的拆包式赋值 46
75 两个变量值的调换 47
8 注释语句48
81 注释方法 48
82 注意事项 49
9 运算符50
91 特殊运算符53
92 内置函数57
93 math 模块58
94 优先级与结合方向59
10 if语句61
101 基本语法61
102 elif 语句62
103 if 与三元运算63
104 注意事项 64
11 for语句67
111 基本语法67
112 range()函数67
113 注意事项68
12 while语句71
121 基本语法71
122 注意事项72
13 pass语句74
131 含义 74
132 作用75
14 列表76
141 定义方法78
142 切片操作79
143 反向遍历81
144 类型转换83
145 extend 与append 的区别83
146 列表推导式 84
147 插入与删除87
148 常用操作函数89
15 元组94
151 定义方法95
152 主要特征97
153 基本用法99
154 应用场景 100
16 字符串 103
161 定义方法 104
162 主要特征 105
163 字符串的操作 106
17 序列111
171 支持索引 112
172 支持切片 113
173 支持迭代 114
174 支持拆包 114
175 支持*运算 115
176 通用函数 117
18 集合 120
181 定义方法 121
182 主要特征 122
183 基本运算 123
184 应用场景 125
19 字典126
191 定义方法 127
192 字典的主要特征 128
193 字典的应用场景 129
20 迭代器与生成器 130
201 可迭代对象与迭代器 131
202 生成器与迭代器 132
21 函数 134
211 内置函数135
212 模块函数135
213 用户自定义函数136
22 内置函数137
221 内置函数的主要特点 138
222 数学函数 138
223 类型函数 139
224 其他功能函数 140
23 模块函数 145
231 import 模块名 146
232 import 模块名as 别名 147
233 from 模块名import 函数名 147
24 自定义函数 149
241 定义方法 151
242 函数中的docString 152
243 自定义函数的调用方法 152
244 返回值 153
245 自定义函数的形参与实参 154
246 变量的可见性 156
247 值传递与地址传递 158
248 自定义函数时的注意事项 160
25 lambda 函数162
251 lambda 函数的定义方法 163
252 lambda 函数的调用方法 164
26 模块166
261 导入与用法 167
262 查看内置模块清单的方法 168
27 包171
271 包的基本术语 172
272 安装包 172
273 查看已安装包 173
274 更新(或删除)已安装包 173
275 导入包 174
276 查看包的帮助 175
277 常用包 176
28 帮助文档177
281 help 函数 178
282 DocString 178
283 查看源代码 179
284 doc 属性 180
285 dir()函数 181
286 其他方法 183
第三篇 Python进阶
29 异常与错误187
291 try/except/finally 188
292 异常信息的显示模式 189
293 断言 190
30 程序调试方法192
301 调试程序的基本方法 193
302 设置错误信息的显示方式 194
303 设置断言的方法 195
31 面向对象编程197
311 类的定义方法 198
312 类中的特殊方法 199
313 类之间的继承关系 201
314 私有属性及@property 装饰器 203
315 self 和cls 204
316 new 与init 的区别和联系 205
32 魔术命令 208
321 运行py 文件:%run 209
322 统计运行时间:%timeit 与%%timeit 210
323 查看历史In 和Out 变量:%history 211
324 更改异常信息的显示模式:%xmode 212
325 调试程序:%debug 214
326 程序运行的逐行统计:%prun 与%lprun 215
327 内存使用情况的统计:%memit 216
33 搜索路径218
331 变量搜索路径 219
332 模块搜索路径 221
34 当前工作目录224
341 显示当前工作目录的方法 225
342 更改当前工作目录的方法 225
343 读、写当前工作目录的方法 226
第四篇 数据加工
35 随机数229
351 一次生成一个数 230
352 一次生成一个随机数组 231
36 数组234
361 创建方法 238
362 主要特征 241
363 切片/读取 243
364 浅拷贝和深拷贝 249
365 形状和重构 250
366 属性计算 254
367 ndarray 的计算 256
368 ndarray 的元素类型 258
369 插入与删除 259
3610 缺失值处理 260
3611 ndarray 的广播规则 261
3612 ndarray 的排序 262
37 Series 265
371 Series 的主要特点 266
372 Series 的定义方法 266
373 Series 的操作方法 269
38 DataFrame274
381 DataFrame 的创建方法 277
382 查看行或列 278
383 引用行或列 279
384 index 操作 283
385 删除或过滤行/列 285
386 算术运算 290
387 大小比较运算 296
388 统计信息 297
389 排序 299
3810 导入/导出 301
3811 缺失数据处理 302
3812 分组统计 308
39 日期与时间311
391 常用包与模块 312
392 时间和日期类型的定义 312
393 转换方法 314
394 显示系统当前时间 316
395 计算时差 317
396 时间索引 317
397 period_range()函数 320
40 可视化321
401 Matplotlib 可视化 323
402 改变图的属性 326
403 改变图的类型 329
404 改变图的坐标轴的取值范围 330
405 去掉边界的空白 332
406 在同一个坐标上画两个图 333
407 多图显示 334
408 图的保存 335
409 散点图的画法 335
4010 Pandas 可视化 336
4011 Seaborn 可视化 339
4012 数据可视化实战 343
41 自然语言处理346
411 自然语言处理的常用包 347
412 自然语言处理的包导入及设置 347
413 数据读入 348
414 分词处理 349
415 自定义词汇 350
416 停用词处理 354
417 词性分布分析 356
418 高频词分析 358
419 词频统计 360
4110 关键词分析 362
4111 生成词云 363
42 Web爬取365
421 Scrapy 的下载与安装 367
422 Scrapy Shell 的基本原理 368
423 Scrapy Shell 的应用 370
424 自定义Spider 类 374
425 综合应用 379
第五篇 数据分析
43 统计分析389
431 业务理解 390
432 数据读入 391
433 数据理解 392
434 数据准备 393
435 模型类型的选择与超级参数的设置 394
436 训练具体模型及查看其统计量 396
437 拟合优度评价 397
438 建模前提假定的讨论 398
439 模型的优化与重新选择 400
4310 模型的应用 404
44 机器学习 405
441 机器学习的业务理解 406
442 数据读入 407
443 数据理解 408
444 数据准备 411
445 算法选择及其超级参数的设置 414
446 具体模型的训练 415
447 用模型进行预测 415
448 模型评价 416
449 模型的应用与优化 417
· · · · · · (收起)
读后感
用户评价
在我的职业生涯中,我一直致力于提升数据的分析和应用能力,希望能够从数据中挖掘出有价值的洞察。《Python编程:从数据分析到数据科学》这本书,在数据挖掘和探索性数据分析(EDA)方面的内容,给了我非常大的启发。书中详细阐述了数据挖掘的整个流程,从数据收集、数据预处理,到特征工程、模型选择和评估。我尤其喜欢书中关于探索性数据分析(EDA)的讲解,作者强调了EDA在理解数据、发现模式、以及指导后续建模过程中的关键作用。书中提供了大量的Python技巧和方法,来帮助我们进行EDA。例如,我学会了如何使用Pandas的`describe()`函数来快速获取数据的统计摘要,如何使用`info()`函数来了解数据的结构和数据类型,以及如何使用`value_counts()`函数来查看分类变量的频次分布。书中还提供了如何使用可视化工具(如Matplotlib和Seaborn)来探索数据的分布、识别异常值、以及发现变量之间的关系。例如,我能够通过绘制散点图来观察两个变量之间的相关性,通过箱线图来比较不同组别数据的分布情况。此外,书中还介绍了聚类分析(如K-Means)和关联规则挖掘(如Apriori算法)等数据挖掘技术,这让我能够从海量数据中发现隐藏的模式和规律。作者的讲解方式非常注重实践,他通过大量的案例来展示如何将这些技术应用于实际问题。例如,我学会了如何对客户进行细分,以及如何发现商品之间的购买关联性。这本书让我能够更有效地进行数据分析,从原始数据中提取有价值的信息,并将其转化为 actionable insights。
作为一名希望将编程技能应用于学术研究的跨学科研究者,我一直在寻找一本能够连接Python编程与学术研究方法的书籍。《Python编程:从数据分析到数据科学》这本书,在如何利用Python进行研究项目管理和数据处理方面,给了我很多实用的指导。我发现书中关于项目管理和版本控制的内容非常宝贵。例如,作者详细介绍了如何使用Git和GitHub来管理代码,以及如何进行团队协作。这对于我参与合作研究项目非常有帮助,能够确保代码的版本和变更得到有效的跟踪和管理。在数据处理方面,本书提供了关于如何高效地读取、清洗和转换学术研究中常见的数据格式的实用技巧。例如,我学会了如何使用Pandas来处理实验数据,如何对收集到的问卷数据进行编码和清洗,以及如何将数据整理成适合统计分析的格式。此外,书中关于文本分析和自然语言处理(NLP)的部分,也对我非常有启发。例如,我能够利用NLTK或SpaCy库来处理文献数据,进行文本的情感分析,或者提取关键词,这对于我的文献综述和理论研究非常有价值。作者的讲解方式注重细节,他不仅提供了代码示例,还解释了代码背后的逻辑和最佳实践。这让我能够将Python应用于我的研究中,提高我的数据处理效率,并为我的学术成果提供更坚实的数据支持。这本书为我提供了一个强大的工具箱,使我能够更有效地进行学术研究,并从数据中获得更深入的见解。
一直以来,我都对人工智能领域充满向往,但总觉得门槛很高,难以入门。在一次偶然的机会,我看到了《Python编程:从数据分析到数据科学》这本书,它所涵盖的内容,尤其是关于深度学习的基础知识,彻底改变了我的看法。本书并没有一开始就深入到复杂的神经网络结构,而是从人工智能的基本概念讲起,循序渐进地引导读者进入这个迷人的领域。作者详细介绍了神经网络的组成部分,如神经元、激活函数、层等,并解释了它们是如何协同工作的。我尤其喜欢书中关于反向传播算法的讲解,虽然这是一个复杂的概念,但作者通过清晰的图示和简洁的代码示例,让我能够理解它是如何工作的,以及它是如何驱动模型学习的。接着,本书介绍了深度学习中一些重要的网络架构,例如卷积神经网络(CNN)在图像识别中的应用,以及循环神经网络(RNN)在序列数据处理中的优势。书中提供了使用TensorFlow和PyTorch这两个主流深度学习框架的入门代码,这让我能够快速地搭建和训练自己的模型。例如,我尝试使用CNN来识别手写数字,并取得了令人鼓舞的结果。书中还讨论了深度学习在自然语言处理、计算机视觉等领域的应用案例,这让我看到了人工智能的巨大潜力。作者的讲解方式非常注重实践,他鼓励读者动手尝试,通过修改代码参数来观察模型行为的变化。这种“玩中学”的学习方式,极大地激发了我对深度学习的兴趣。这本书不仅为我打开了人工智能的大门,更让我看到了自己未来在这个领域发展的可能性。
在我的职业生涯中,我一直致力于提升自己的数据分析能力,以期在工作中能够做出更明智的决策。《Python编程:从数据分析到数据科学》这本书,在机器学习部分的内容,对我而言,简直是雪中送炭。我一直对机器学习这个领域充满好奇,但苦于没有一个清晰的入门途径。这本书则提供了一个非常系统化的学习路径。作者从机器学习的基本概念入手,详细介绍了监督学习、无监督学习和强化学习的区别。接着,他深入浅出地讲解了各种经典的机器学习算法,如线性回归、逻辑回归、决策树、支持向量机(SVM)、K-均值聚类等。书中对于这些算法的数学原理并没有进行过度的推导,而是侧重于算法的直观理解和实际应用。特别令我印象深刻的是,作者在讲解每一个算法时,都提供了使用Scikit-learn库的实际代码示例,这让我能够非常方便地将理论知识转化为实践。例如,在学习逻辑回归用于分类问题时,我能够快速地使用Scikit-learn构建模型,对数据进行训练和预测,并学会如何评估模型的性能,例如使用准确率、精确率、召回率和F1分数。书中还详细介绍了特征工程的重要性,以及如何通过特征选择、特征提取(如主成分分析PCA)来提升模型的性能。此外,对于模型评估和调优的部分,作者也给出了非常实用的建议,例如如何使用交叉验证来防止过拟合,如何通过调整超参数来优化模型。阅读这本书,不仅让我掌握了机器学习的基本技能,更重要的是,它培养了我对数据和模型的深入理解能力。我现在已经能够将机器学习技术应用于实际的业务场景,例如预测客户流失,或者对产品进行推荐,这给我带来了巨大的职业价值。
作为一名有着多年Excel使用经验的数据工作者,我发现传统的电子表格工具在处理大规模、复杂的数据集时,已经越来越显得力不从心。因此,我一直在寻找一个能够接替Excel,并且功能更加强大的数据处理和分析工具,最终,《Python编程:从数据分析到数据科学》这本书成为了我的首选。这本书在数据处理和清洗方面的内容,可以说是我之前接触过的任何资料都无法比拟的。它详细介绍了NumPy和Pandas这两个Python生态系统中最重要的库。NumPy在处理数值计算和数组操作上的效率,以及Pandas在数据结构(如DataFrame和Series)上的强大支持,都让我感到惊叹。书中关于如何读取不同格式的数据文件(如CSV、Excel、JSON),如何处理缺失值、异常值,如何进行数据筛选、排序、分组、聚合等操作,都进行了非常系统和深入的讲解。我尤其喜欢书中关于Pandas DataFrame的讲解,它提供了一种非常直观和灵活的方式来操作表格型数据。例如,当我需要对一个包含数百万行记录的用户行为日志进行分析时,我能够熟练地使用Pandas的`loc`和`iloc`进行基于标签和位置的索引,使用`groupby()`函数进行数据分组和聚合,并且能够高效地处理数据合并和连接操作。本书还强调了数据清洗的重要性,它不仅仅是删除错误数据,更是一个理解数据、探索数据、为后续分析做好准备的关键步骤。作者通过大量的实际案例,展示了如何识别数据中的不一致性,如何进行数据类型转换,以及如何使用正则表达式进行复杂的数据匹配和替换。这些技巧极大地提高了我的数据处理效率,并且让我能够更放心地进行后续的分析。这本书彻底改变了我对数据处理的认知,它让我从繁琐的手动操作中解放出来,用更高效、更智能的方式来驾驭数据。
作为一名在职的金融分析师,我一直渴望深入理解数据科学领域,并希望找到一本既能打牢基础又能快速上手的Python实操指南。在浏览了众多书籍后,我毫不犹豫地选择了《Python编程:从数据分析到数据科学》。收到书的那一刻,我就被它厚实且充满专业气息的封面吸引了。翻开第一页,我就被作者严谨的逻辑和清晰的语言所折服。这本书并非简单罗列Python语法,而是循序渐进地引导读者构建一个完整的知识体系。从Python的安装和基础环境搭建,到数据类型、变量、运算符等核心概念,都讲解得细致入微,即使是零基础的读者也能轻松跟上。特别令我印象深刻的是,作者在讲解每一个知识点时,都结合了实际数据分析的场景,例如如何使用列表和元组来存储不同类型的数据,如何利用字典高效地管理键值对信息。书中对条件语句和循环结构的讲解更是深入人心,通过大量贴近实际业务的代码示例,我不仅掌握了编程逻辑,更学会了如何用Python解决具体问题。例如,在处理一个包含大量交易记录的数据集时,我能够运用for循环和if-elif-else语句来筛选出符合特定条件的交易,并进行初步的聚合统计。作者的讲解风格非常平易近人,并没有过多的理论堆砌,而是将复杂的技术概念转化为易于理解的语言。同时,书中穿插的“小贴士”和“进阶提示”更是宝藏,它们不仅帮助我巩固了所学知识,还让我提前了解了未来可能遇到的挑战和解决方案。这本书的排版也非常舒适,代码块清晰明了,注释也十分到位,大大提升了阅读体验。我坚信,这本书将是我通往数据科学世界的坚实起点,为我未来的职业发展奠定坚实的基础。
对于我这样的初学者来说,选择一本合适的编程入门书籍至关重要。《Python编程:从数据分析到数据科学》这本书,在Python基础知识的讲解上,做得非常出色,可以说是为我打开了编程世界的大门。作者并没有一开始就抛出晦涩难懂的概念,而是从Python的安装和环境配置开始,一步步引导我搭建起自己的编程环境。从基本的数据类型,如整数、浮点数、字符串,到更复杂的列表、元组、字典和集合,作者都通过生动形象的比喻和清晰的代码示例,让我能够快速理解和掌握。我尤其喜欢书中关于控制流的讲解,包括条件语句(if-elif-else)和循环语句(for、while)。作者通过设计一些小型的练习项目,例如编写一个简单的计算器,或者一个猜数字游戏,让我能够将所学的知识融会贯通,并体会到编程的乐趣。更重要的是,这本书并没有将这些基础知识孤立起来,而是始终将它们与数据分析的应用场景联系起来。例如,在学习列表的时候,作者就展示了如何使用列表来存储一组观测值,如何使用循环来遍历这些值并进行统计;在学习字典的时候,作者则展示了如何使用字典来存储键值对信息,例如用户的姓名和对应的分数。这种“学以致用”的教学方式,让我对编程的学习不再感到枯燥和乏味,而是充满了探索的动力。本书的语言风格非常友好,没有过多的术语,即便遇到一些生词,作者也会在上下文中进行解释。读这本书,就像是在和一个经验丰富的导师对话,他能够耐心解答我的每一个疑问,并引导我不断前进。我现在已经能够独立编写一些简单的Python脚本来完成一些数据任务,这让我对未来的学习充满了信心。
作为一名在校的计算机科学专业学生,我深知掌握一门强大的编程语言对于未来职业发展的重要性。《Python编程:从数据分析到数据科学》这本书,在Python语言的高级特性和应用方面,给予了我极大的启发。我之前已经学习了一些Python的基础语法,但在这本书中,我学到了许多更深入、更实用的知识。例如,书中关于函数式编程的介绍,如lambda表达式、map、filter、reduce等,让我能够以更简洁、更优雅的方式编写代码。我还深入学习了面向对象编程(OOP)的概念,包括类、对象、继承、多态等,并通过大量示例理解了如何利用OOP来构建可重用、可维护的代码。书中还详细介绍了Python的异常处理机制,如何使用try-except-finally来优雅地处理程序运行过程中出现的错误,这对于编写健壮的程序至关重要。此外,本书在Python的网络编程和并发编程方面的内容也给我留下了深刻的印象。我学习了如何使用requests库进行HTTP请求,如何使用socket库进行底层的网络通信,以及如何使用threading和multiprocessing库来实现并发执行,以提高程序的效率。作者的讲解方式非常细致,他不仅提供了代码,还解释了代码背后的逻辑和设计思想。这让我不仅仅是学会了“怎么写”,更重要的是理解了“为什么这么写”。通过这本书,我能够将Python应用于更复杂的项目,例如开发Web应用、构建网络爬虫、或者实现高性能的计算任务。这本书为我打下了坚实的Python编程基础,也让我对未来在软件开发领域的发展充满了信心。
作为一名对统计学有着浓厚兴趣的学生,我一直想找到一本能够将Python编程与统计学理论完美结合的书籍。《Python编程:从数据分析到数据科学》这本书,在统计分析方面的内容,给了我极大的惊喜。书中在介绍Python基础的同时,也巧妙地融入了统计学中的核心概念。从描述性统计,如均值、中位数、标准差、方差的计算,到推断性统计,如假设检验、置信区间的构建,作者都提供了非常详细的讲解和Python代码实现。我特别喜欢书中关于如何使用SciPy库进行统计分析的章节。SciPy提供了丰富的功能,包括概率分布的计算、统计检验的执行、以及优化算法的应用。例如,在学习假设检验时,我能够利用SciPy中的`ttest_ind`函数来比较两个样本的均值是否存在显著差异,并根据p值来做出统计推断。书中还深入讲解了相关性分析和回归分析,这对于理解变量之间的关系至关重要。我学会了如何计算皮尔逊相关系数来衡量两个变量的线性相关程度,如何使用statsmodels库进行线性回归分析,并解读回归模型的系数和统计显著性。此外,书中对于泊松分布、二项分布、正态分布等常见概率分布的讲解,也让我对数据的内在规律有了更深刻的理解。作者的讲解风格非常严谨,但又不失通俗易懂,他能够将抽象的统计学概念转化为具体的Python代码,让我在实践中巩固所学。这本书不仅仅是一本编程书,更是一本优秀的统计学入门指南,它为我提供了强大的工具和方法,来探索和理解数据背后的统计规律。
我是一名对数据可视化充满热情的学生,一直想把我的数据故事以更生动、更直观的方式呈现出来。在学习Python的过程中,我发现《Python编程:从数据分析到数据科学》这本书的内容非常有吸引力,尤其是关于数据可视化部分的介绍,让我眼前一亮。书中对于Matplotlib和Seaborn这两个强大的可视化库的讲解,可以说是面面俱到。从最基础的折线图、散点图、柱状图的绘制,到更复杂的箱线图、热力图、小提琴图的运用,作者都进行了详尽的阐述。更难得的是,书中不仅提供了代码示例,还深入分析了不同图表类型适用于何种数据场景,以及如何通过调整参数来优化图表的可读性和美观度。例如,在分析客户购买行为时,我曾尝试用简单的柱状图来展示不同年龄段的消费金额,但效果并不理想。阅读本书后,我学习到了如何使用Seaborn的`countplot`绘制更具信息量的条形图,并结合`hue`参数来区分不同的产品类别,这使得我的分析结果一目了然。书中关于颜色映射、标签设置、图例调整等细节的处理,也让我受益匪浅。我学会了如何根据数据的分布情况选择合适的颜色方案,如何为图表添加清晰的标题和轴标签,以及如何有效地使用图例来区分不同的数据系列。本书的优点在于,它并没有将可视化视为一个独立的模块,而是将其巧妙地融入到整个数据分析流程中。从数据的读取、清洗、转换,到最终的可视化呈现,作者提供了一个完整的闭环解决方案。这让我深刻理解了,数据可视化不仅仅是画图,更是数据理解和沟通的重要环节。我现在能够自信地使用Python来创建各种精美的图表,将我的数据洞察有效地传达给他人,这对我来说是巨大的进步。
排版方式不喜欢,内容就这么多
排版方式不喜欢,内容就这么多
排版方式不喜欢,内容就这么多
排版方式不喜欢,内容就这么多
排版方式不喜欢,内容就这么多