《Python数据分析与数据化运营》第二版勘误

本书默认已经修正了第一版遇到的所有问题,因此以下勘误仅限于第二版。有关第一版的勘误,请见“《Python数据分析与数据化运营》第一版勘误”。

最近更新时间:2020-2-23

最近一次新书重印更新为2019.9重印,读者可查看“前言”的前1页找到相关信息,如下:

微信图片_20191010105943

1.P108 第二段文字中,英语、数据、语文成绩……中的“数据”应为“数学”(2019.9重印时更正)。
2.P149 最下面使用聚类算法离散化的amount2的值应该是4个,对应的数据也应该是4个值(2019.9重印时更正)
3.P93 页面顶部描述文字中,“通过df.null方法找到所有数据..”中的df.null应该改为df.isnull()(2019.9重印时更正)
4.P396页,模型训练-交叉验证 章节的代码中的“cv_score = cross_val_score(model_gdbc”应该改为“cv_score = cross_val_score(model_vot”
5.P179 最底部最后一行的文字表述中“不能直接fit到klearn的K-Means模”中的“klearn”应为“sklearn”
6.P198 左侧靠中间位置的文本描述中,(1)部分, “此时的回归模型及其不稳定且方差较大” 中的“及其”应为“极其”
7.P347 步骤5 模型训练 – 建立pipeline中用到的模型对象 模块中缺少pipeline的代码段
8.P102 第2部分生成原始数据中,原始数据应为3行4列,同时后续的输出值需要增加score相关的信息
9.P180 第1部分导入库中 import matplotlib.pyplot as plt重复导入
10.P187 通过print(df.head())方法打印应输出多条记录,而非只有3条
11.P103 中部“在该过程中,先建立一个LabelEncoder对象…”该段文字描述有误
12.P126 上部分“from sklearn.svm import SVC # SVM中的分类算法SVC”,这段代码脱离代码段,样式不对。
13.P63 在SQL相关功能,中提到的正则表达式的部分,LIKE不属于通用意义上的正则表达式,只是在MYSQL中用于实现类似正则表达式功能的关键字。
14.P77 subplot段落中的“nrws”应为“nrows”
15.P78 2.3.4内容中“Python读取视频最简单的库也是Opencv”应为“Python读取视频最简单的库也是Opencv”,OpenCV注意大小写
16.P126 3.4.6内容中data2.txt的数据label记录分布,读取方式错误,对应到P127的展示结果也有问题。

1.P108 第二段文字中,英语、数据、语文成绩……中的“数据”应为“数学”。

微信图片_20190628132827
4类聚类群体

解释:如下图圆圈处文字
2.P149 最下面的amount2的值应该是4个,对应的数据也应该是4个值。

使用聚类法实现离散化,k=4,那么应该代表4类数据,对应的唯一值应该是0,1,2,3

python_isnull

3.P93 页面顶部描述文字中,“通过df.null方法找到所有数据..”中的df.null应该改为df.isnull()
在描述缺失值的方法中,页面顶部描述文字中,“通过df.null方法找到所有数据..”中的df.null应该改为df.isnull(),如下图:

3.4.P396页,模型训练-交叉验证 章节的代码中的“cv_score = cross_val_score(model_gdbc”应该改为“cv_score = cross_val_score(model_vot”

P396页,模型训练-交叉验证 章节的代码:
> cv_score = cross_val_score(model_gdbc, x_smote_resampled, y_smote_resampled, cv=cv)
应该改为:
> cv_score = cross_val_score(model_vot, x_smote_resampled, y_smote_resampled, cv=cv)
这是对集成模型的交叉检验的测试,而非单个模型。

5.P179 最底部最后一行的文字表述中“不能直接fit到klearn的K-Means模”中的“klearn”应为“sklearn”
最底部最后一行的文字表述中“不能直接fit到klearn的K-Means模”中的“klearn”应为“sklearn”,缺少一个字符s,即sklearn。

6.P198 左侧靠中间位置的文本描述中,(1)部分, “此时的回归模型及其不稳定且方差较大” 中的“及其”应为“极其”
左侧靠中间位置的文本描述中,(1)部分, “此时的回归模型及其不稳定且方差较大” 中的“及其”应为“极其”,此为文字用词错误。

未标题-1

7.P347 步骤5 模型训练 – 建立pipeline中用到的模型对象 模块中缺少pipeline的代码段
在 P347 步骤5 模型训练 – 建立pipeline中用到的模型对象 模块中,只有已经构建好的每个model,而没有pipelines,如下图:

正确的应为:
model_etc = ExtraTreesClassifier() # ExtraTree,用于EFE的模型对象
model_rfe = RFE(model_etc) # 使用RFE方法提取重要特征
model_lda = LinearDiscriminantAnalysis() # LDA模型对象
model_rf = RandomForestClassifier() # 分类对象
# ============== 这里开始增加 ==============
# 构建带有嵌套的pipeline
pipelines = Pipeline([
(‘feature_union’, FeatureUnion( # 组合特征pipeline
transformer_list=[
(‘model_rfe’, model_rfe), # 通过RFE中提取特征
(‘model_lda’, model_lda), # 通过LDA提取特征
],
transformer_weights={ # 建立不同特征模型的权重
‘model_rfe’: 1, # RFE模型权重
‘model_lda’: 0.8, # LDA模型权重
},
)),
(‘model_rf’, model_rf), # rf模型对象
])
# ============== 到这里增加结束 ==============

8.P102 第2部分生成原始数据中,原始数据应为3行4列,同时后续的输出值需要增加score相关的信息
在P102页第2部分生成原始数据中,在中间部分print(df) # 打印输出原始数据框 之后的文字描述中,有如下描述:
“数据为3行3列的数据框,分别包含id、sex和level列,其中的id为模拟的用户ID,sex为用户性别(英文),level为用户等级(分别用high、middle和low代表三个等级)”
应改为:
“数据为3行4列的数据框,分别包含id、sex、level和score列,其中的id为模拟的用户ID,sex为用户性别(英文),level为用户等级(分别用high、middle和low代表三个等级),score列为用户得分等级(其中1/2/3分别是等级字符串,而非数字)”

同时,P102-P103对应的结果,由于新增了一列,后续的数据中应该包括score列特征。在print(raw_convert_data)后,会输出score信息。

在p104的中间部分的输出,也会包含score_1,score_2,score_3的信息,请读者知悉。

9.P180 第1部分导入库中 import matplotlib.pyplot as plt重复导入
代码可直接忽略重复部分,或删除其中任意一条。

10.P187 通过print(df.head())方法打印应输出多条记录,而非只有3条
在本书第二版的撰写中,由于新增了很多内容,因此本书在正常情况下,print(df.head())应该输出5条记录,但书中的示例中只有3条,原因是笔者手动删除了更多的2条,以减少页面代码量。请读者知悉。在代码正式执行下,不会出该问题。

11.P103 中部“在该过程中,先建立一个LabelEncoder对象…”该段文字描述有误
在该段落中,原文是“在该过程中,先建立一个LabelEncoder对象model_LabelEncoder,然后使用model_LabelENcoder做fit_transform转换,转换后的值直接替换上一步创建的副本transform_data_copy,然后使用toarray方法输出为矩阵”。
正文的解释应该为:“在该过程中,先建立一个OneHotEncode对象model_enc,然后使用model_enc做fit_transform转换,然后使用toarray方法输出为矩阵”。

12.P126 上部分“from sklearn.svm import SVC # SVM中的分类算法SVC”,这段代码脱离代码段,样式不对。
这段代码本身属于代码格式,应与正文区分开。与上面的代码样式合并。

13.P63 在SQL相关功能,中提到的正则表达式的部分,LIKE不属于通用意义上的正则表达式,只是在MYSQL中用于实现类似正则表达式功能的关键字。
如题

14.P77 subplot段落中的“nrws”应为“nrows”
如题

15.P78 2.3.4内容中“Python读取视频最简单的库也是Opencv”应为“Python读取视频最简单的库也是Opencv”,OpenCV注意大小写
如题

16.P126 3.4.6内容中data2.txt的数据label记录分布,读取方式错误,对应到P127的展示结果也有问题。
在读取数据过程中,“第2部分 导入数据文件”pd.read_table中的sep参数的值应该是 \t 。
同时,读取之后数据的展示中,label为0和1的数据结果应该如下:

   col1  col2  col3  col4  col5
 label
 0       475   475   475   475   475
 1       525   525   525   525   525
受到源数据的影响,后续的P127页的数据处理后结果的展示,也都有变化,具体为: P127顶部的数据展示:
    col1  col2  col3  col4  col5
label
0       475   475   475   475   475
1       475   475   475   475   475

P127中部的数据展示:

  col1  col2  col3  col4  col5
label
0        525   525   525   525   525 
1        525   525   525   525   525 

====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》第二版上市啦!

50+数据流工作知识点
14个数据分析与挖掘主题
8个综合性运营分析案例
涵盖会员、商品、流量、内容4大主题
360°把脉运营问题并贴合数据场景落地


本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:
  • 标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
  • Python调用R的rpy2
  • 统计分析:Statsmodels
  • 中文处理:结巴分词
  • 文本挖掘:Gensim
  • 数据挖掘和算法:XGboost、gplearn、TPOT
  • 爬虫和解析:requests、Beautiful Soup、xml
  • 图像处理:OpenCV和PIL/Pollow
  • 数据读取:xlrd、pymongo、pymysql
  • 数据预处理:imblearn
  • 展示美化类:Matplotlib、pyecharts、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你对以下内容感兴趣,那么本书将值得一看:
  • KMeans聚类的自动K均值的确立方法
  • 基于软方法的多分类模型组合评估模型的应用
  • 基于自动下探(下钻、细分)的应用
  • 基于增量学习的多项式贝叶斯分类
  • pipeline管道技术的应用
  • 基于超参数的自动参数值的优化方法
  • 特征自动选择
  • 文本分类、文本主题挖掘
  • 基于自动时间序列ARIMA的P、D、Q的调整
  • python决策树规则输出
  • 基于自定义图像的文本标签云
  • 非结构化数据,例如图像、音频、文本等处理
  • 对象持久化处理
  • 如何使用Python调用R实现数据挖掘
  • 自动化学习:增加了对于自动化数据挖掘与机器学习的理论、流程、知识和应用库介绍,并基于TPOT做自动化回归和分类学习案例演示
有关这本书的写作感受、详细内容介绍、附件(含数据和代)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》第二版出版了!要购买此书,可以去京东当当天猫等查看。

《Python数据分析与数据化运营》第二版勘误》上有14个想法

  1. 宋老师你好,在3.2.3代码python标志转化实操中,使用了sklearn进行标志转换。在我使用后发现它会出现 could not convert string to float: ‘middle’的错误,我再去看了第一版的代码,也和第二版相同,不知道这个问题要怎么解决。

  2. P396页,模型训练-交叉验证 章节的代码:
    > cv_score = cross_val_score(model_gdbc, x_smote_resampled, y_smote_resampled, cv=cv)
    是否应该是
    > cv_score = cross_val_score(model_vot, x_smote_resampled, y_smote_resampled, cv=cv)

  3. 4.1.6 聚类分析这里发现一个勘误, “字符串型特征(IS_ACTIVE)代表一个分类型变量,不能直接fit到klearn的K-Means模型中” 之类klearn 应该为 sklearn

  4. 4.2 回归分析-案例:大型促销活动前的销售预测
    pre_y_list = [model.fit(X_train, y_train).predict(X_test) for model in model_list] # 各个回归模型预测的y值列表

    TypeError: must be real number, not str
    应该是model_list的问题,希望发布纠错代码

    • 你好。我测试了下代码,是可以正常运行的。

      你的报错我没有遇到,我的是python3.7版本。你方便的话加我微信,详细描述下到底如何出现这个问题的吧。或者你在地下把你的python版本、执行错误截图等发一下,我看下。谢谢。

  5. 宋老师,我使用的最新版的anaconda(201910),碰到如下问题
    3.2.3 代码实操:Python标志转换 一节中,
    1)拆分ID和数据列时,执行df.iloc[:,1:]后,打印的结果跟书上的不一样,比书上多一列:scroe
    2)对数据列中的字符串做转换,3)合并数据后 结果跟书上是一致的;
    使用Pandas的get_dummies做标志转换后,结果又多了scroe_1,scroe_2,score_3 三列;

    麻烦核实一下~

pancrasqin进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注