《Python数据分析与数据化运营》第二版 常见问题

在该文章中,仅总结第二版相关的问题,有关第一版的问题,请到“《Python数据分析与数据化运营》第一版常见问题”查看。

最近更新时间:2020-03-25

1. 问题:第二版的书籍配套源代码下载地址?
2. 问题:第二版和第一版比有哪些变化?
3. 问题:为什么第五章5.7 案例-基于RFM的精细化用户管理中的from pyecharts import Bar3D导入错误?
4. 问题:第2章P55 “对于纯文本……,Python默认的3种方法更为合适”中的3种方法指的是什么?
5. 问题:P96 中位数做兜底策略? 兜底策略是什么技术?
6. 问题:第三章P91 维度行是什么意思呢?
7. 问题:get_dummies 和 onehotEncode使用上的场合或者是区别是什么?
8. 问题:为什么在P238导入pyecharts时会报错?
9. 问题:我看书上用的是mysql数据库,能用sqlserver代替吗?
10. 问题:为什么我的百度地图API调用无效?
11. 问题:P201设置的n_folds=5没有使用?
12. 问题:P93-P94的库使用,是否可以用Pandas,sklearn,而非书中的Pandas,sklearn,pandas这样的顺序?
13. 问题:P95各个打印的df对象分别是什么?
14. 问题:为什么我按照书上的内容敲代码,我的代码报错了?而其他人没报错?

1. 问题:第二版的书籍配套源代码下载地址?

代码下载:http://www.dataivy.cn/book/python_book_v2.zip

2. 问题:第二版和第一版比有哪些变化?

本书在第一版上市后,得到来自于各行各业很多好友和读者的支持和反馈,在此致以感谢!第二版在第一版基础上做了很多优化甚至重写,另外新增了很多内容。

优化以及重写的内容

  • 全部代码基于Python3做优化或重写,书中的Python版本是7。
  • 基于Jupyter做调试、分析和应用,更适合数据分析师的应用场景,包括探索性分析、数据预处理、结果可视化展示、交互式演示等。
  • 网页数据解析中基于Class做功能封装和处理,更方便以网页对象为主体的数据工作。
  • PIL/Pollow的替换和方法应用介绍,应用于图像处理工作
  • 第四章数据挖掘的案例部分,每一部分的案例都经过重写,并增加了很多知识点,并以实际案例为需求,实际应用数据挖掘算法做建模和分析应用。
  • Matplotlib调用3D图形展示多个维度的信息,并可通过拖拽展示不同角度下数据的分布情况。
  • 第五章第一个案例RFM代码的重构,以及针对不同分组的精细化运营策略的制定。
  • 第五章第二个案例基于嵌套Pipeline和FeatureUnion复合数据工作流的营销响应预测,基于复合(两层管道)的pipeline做数据工作流管理。
  • 第六章第二个案例基于基于集成算法GBDT和RandomForest的投票组合模型的异常检测,将基础算法改为GBDT和RF,这两个是典型的代表模型“准确度”和“稳定度”的代表算法,这种兼顾“准”和“稳”的模型搭配更符合实际需求。
  • 第七章基于自动节点树的数据异常原因下探分析的树形图的内容和可视化,优化了代码和样式,可视化效果更好并能获得更多信息,包括维度分解过程、主因子、其他因子和潜在因子等。

新增的内容

  • 基于Anaconda的Python环境的安装和配置,更方便初学者快速搭建Python应用环境。
  • Jupyter基础工具的用法,包括安装、启动、基础操作、魔术命令、新内核安装和使用、执行shell命令、扩展和插件使用、系统基础配置等。
  • 基于Pandas的get_dummies做标志转换,即OneHotEncode转换。
  • 特征选择的降维中新增feature_selection配合SelectPercentile、VarianceThreshold、RFE、SelectFromModel做特征选择。
  • 特征转换的降维中新增PCA、LDA、FA、ICA数据转换和降维的具体方法。
  • 特征组合的降维中新增基于GBDT、PolynomialFeatures、gplearn的genetic方法做组合特征。
  • 第四章分类算法中新增使用XGboost做分类应用,以及配合graphviz输出矢量图形。
  • pyecharts的数据可视化的应用和操作,尤其是关联关系图的应用。
  • python通过rpy2调用R程序,实现关联算法的挖掘,包括直接执行程序文件、代码段、变量使用等。
  • python通过rpy2调用airma实现自动ARIMA的应用,降低Python在时间序列算法应用时的门槛。
  • 自动化学习:增加了对于自动化数据挖掘与机器学习的理论、流程、知识和应用库介绍,并基于TPOT做自动化回归和分类学习案例演示。

3. 问题:为什么第五章5.7 案例-基于RFM的精细化用户管理中的from pyecharts import Bar3D导入错误?

在pyecharts库中,pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容,v1 是一个全新的版本。对应的语法也发生了较大的改变。

如果读者的环境是最新版(v1及之后),那么按照书中的
from pyecharts import Bar3D 就会报错无法导入。

在v1版本之后,需要使用 from pyecharts.charts import Bar3D 方法导入Bar3D库。

所以,读者需要留意自己的pyecharts版本,然后选择对应的语法。

3种方法

4. 问题:第2章P55 “对于纯文本……,Python默认的3种方法更为合适”中的3种方法指的是什么?

这里指的是使用open方法获得读取对象后,调用read、readline或readline读取的方法。

中位数
QQ截图20190701132020

5. 问题:P96 中位数做兜底策略? 兜底策略是什么技术?

这里的“兜底策略”指在任意情况下,都能保障数据的一种方式,不是一种技术。如书中所讲,如果使用均值填充,那么当数据中存在inf时,无法计算其均值,而中位数则可以计算。这样可以保证填充的数值的有效性。例如:

新的维度行

6. 问题:第三章P91 维度行是什么意思呢?
在第三章P91中介绍变化维度表时,提到了维度行是什么意思呢?

该意思是,将每个变化的维度都记录下来,并形成新的记录,这样每次在匹配时,只需要匹配当时使用的维度即可。例如:

ID修改日期KEYCATE1CATE2
12019-07-019009109998家装建材家装
22019-08-089009109998服饰家装家装

上面的表是一个变化维度表,里面的对的KEY是关联产品信息的键值,用来标记产品ID。在这个表中,基于ID可以匹配出产品类别。

在不同时期,该ID所属的一级分类(CATE1)有变化,例如2019年7月1日的值和2019年8月8日的属性值不同,这时可同时记录两个属性信息。这样后续可以基于修改日期判断,在不同周期下应该匹配哪个模式。

7. 问题:get_dummies 和 onehotEncode使用上的场合或者是区别是什么?
pandas的get_dummies 和 sklearn中的onehotEncode都能实现亚编码转换(书中称为标志转换),二者的使用区别在于:

  • pandas的get_dummies 是“一次性”的,即用于单次的数据分析场景;
  • sklearn中的onehotEncode 是“可复用”的,即在每次fit之后,一般后续继续其他与处理和模型训练;而如果在预测性应用中,例如分类或回归,则需要对新的数据再次做fit,这时候需要保证前面训练时的规则与后面对预测数据的规则保持一致,所以必须要用持久化的处理对象才能实现。这个原理跟模型训练和预测是相同的。

8. 问题:为什么在P238导入pyecharts时会报错?
本书第二版的pyecharts仍然基于v0.5的版本实现的,而现在最新的版本已经到v1.*。目前pycharts中v1.*与v0.5的版本是不兼容的,因此如果读者电脑上是v1.*的版本,那么执行pycharts展示图形时会报错。

在P238 创建关系图中,v1.*版本的代码如下:
# from pyecharts import options as opts # 先导入配置方法库

graph = Graph(init_opts=opts.InitOpts(width=”800px”, height=”800px”))
graph.add(“”, nodes, edges, repulsion=8000,layout=’circular’,is_rotate_label=True)
graph.set_global_opts(title_opts=opts.TitleOpts(title=”商品关联结果图”))

请读者注意区别使用。

9. 问题:我看书上用的是mysql数据库,能用sqlserver代替吗?
Python支持几乎各种数据库,因此可以使用sqlserver代码mysql数据库,在使用时,安装并使用pymssql(第三方库),该库的用法几乎与pymysql相同;也可以使用pyodbc,通过odbc的方式连接sqlserver也是可以的,尤其是在大量(百万到千万)数据规模下,写入数据时设置fast_executemany = True,写入非常快。

10. 问题:为什么我的百度地图API调用无效?
笔者的百度API注册较早,目前的百度地图API已经升级URL地址,目前的的API地址格式为: http://api.map.baidu.com/geocoder?address=地址&output=输出格式类型&key=用户密钥&city=城市名

而笔者的API地址为: http://api.map.baidu.com/geocoder/v2/?address=%s&output=json&ak=%s

因此,后期注册的读者,请用百度最新的API格式,之前已经注册的API,可严用笔者书中的格式。

与百度地图API调用无效相关的另一个可能性是,部分读者没有自己注册新的账户,而目前笔者的API的调用资源已经接近限制值,所有会导致,直接使用笔者源代码中的代码和权限信息,导致无法正常返回信息。

11. 问题:P201设置的n_folds=5没有使用?
在P201页的 n_folds=5 后续没有使用,可删除。

12. 问题:P93-P94的库使用,是否可以用Pandas,sklearn,而非书中的Pandas,sklearn,pandas这样的顺序?
是的,只是笔者在写作是没注意具体实现顺序问题。

13. 问题:P95各个打印的df对象分别是什么?
在P95-P96的各个打印对象中从上到下依次是:nan_result_pd1、nan_result_pd2、nan_result_pd3、nan_result_pd4、nan_result_pd5、nan_result_pd6,请读者注意区分

14. 问题:为什么我按照书上的内容敲代码,我的代码报错了?而其他人没报错??
我在自己的电脑上,按照书上的内容敲代码,但经常会报错。但是,其他人(本书读者)却没有发生类似的问题。为什么?

报错的原因有很多,这里的限制条件是:代码可以【在其他人的电脑上】正常运行,而在你的电脑上不行,很有可能是版本的问题。

本书的Python默认是3.7,采用anaconda安装。如果读者是自己安装的,或者即使用anaocnda安装的是3.6,那么也有可能出错。

例如:有读者自己通过其他途径,下载了anaconda3.6版本并安装,在第四章执行程序时,提示报错。后来经常查看,发现该读者用了3.6版本,对应的pandas的版本是0.20.*,而我的版本是3.7,对应的pandas是0.25.*。

虽然同一个库,不同的版本间功能大致相同。但也有些细微差异,例如:pandas0.20.*中,对于默认缺失值的识别是不支持 null的,而在0.25.*却可以。这会导致,如果数据中出现 null(注意是一个字符串),而使用0.20.*版本的话,会默认将 null 识别为一个字符串,而是0.25.*中,却可以识别为NULL值。


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

《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数据分析与数据化运营》第二版 常见问题》上有15个想法

  1. 预测函数predict_data()中,在画图时报错,predict_ts无法继续画出来。
    plt.figure() # 创建画布
    ts.plot(label=’raw time series’) # 设置推向标签
    predict_ts.plot(label=’predicted data’, style=’–‘) # 以虚线展示预测数据

    报错信息:ValueError: view limit minimum -36866.1 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units
    Error in callback <function install_repl_displayhook..post_execute at 0x0000000008D29840> (for post_execute):

  2. 建立的arma模型,可以通过statsmodels自带的save函数进行持久化,但会被存储为pickle格式,不便于java读取,我查了一些关于pkl转pmml的方法,但至今找不到可用的方法。向您咨询一下,我考虑将训练后的模型应用于java,可有什么好的建议或者方法可以参考使用?谢谢!

  3. 宋老师,您好,第一章中: 销售预测应用
    new_x = 84610
    pre_y = model.predict(new_x)
    print(pre_y)
    中会提示如下报错:
    ValueError: Expected 2D array, got 1D array instead:
    Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
    ————————-
    这部分代码中,在新版的sklearn中,所有的数据都应该是二维矩阵,哪怕它只是单独一行或一列(比如前面做预测时,仅仅只用了一个样本数据),所以需要使用.reshape(1,-1)进行转换,具体操作如下。
    new_x=84610
    new_x=np.array(new_x).reshape(1,-1)
    pre_y = model.predict(new_x)
    print(“预测销售额:”,pre_y)

    • 是的,感谢指出错误。该错误已经更新在勘误信息中:http://www.dataivy.cn/blog/python_book_knows_issues/#e21

  4. 在第四章4.4关联分析中
    使用pyecharts画图展示中top_n_rules=item_count.sort_values(ascending=False).iloc[:control_num]报错
    报错原因是AttributeError: ‘function’ object has no attribute ‘sort_values’
    想问一下应该怎么解决

    • 提示说item_count是一个function,而正常情况下,应该是一个dataframe。所以你打印下item_count,看下是什么值,另外用type(item_count)看下类型。如果有问题,那么再看下item_concat的数据是否正确。

  5. 3.4 处理样本分布不匀,源码 chapter3 中 data2.txt 应是数据有问题,
    0 475
    1 525
    而不是 书中或代码中
    0 942
    1 58

  6. 第6章的案例,使用集成算法,按书中代码,最后预测的订单数是846,和书中的预测的订单数833有差异,这个是什么原因呢?

    • 在算法里面,有一个非常重要的概念叫 随机,在模型的实现中,很多算法都有random_state 这个参数,这个参数可以控制随机种子的值。通过设置在多次执行时可以保障相同的随机起始点。
      你和我的电脑环境并不是1个电脑,所以即使设置相同的值,也不能获得完全相同的结果。模型在拟合的时候会有略微的“差距”,所以这个是正常的。

发表评论

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