《python数据科学手册》学习笔记及书评(代码片段)

李英俊小朋友 李英俊小朋友     2023-02-02     224

关键词:

《Python数据科学手册》学习笔记

写在前面

  • 封面

  • 读后感

    • 只能说挺不错的,前面数据分析部分挺好,后面机器学习部分差点东西

1. 食谱数据库数据找不到的问题

  • 问题:

    • 在P163页,3.11.3 案例:食谱数据库中,涉及到的食谱数据无法下载,在网上也找不到资源。是不是很揪心!!!是不是很绝望!!!
    • 我也是。。。然后我在网上搜了大概半个小时把,放弃了,然后慢慢看书上给的连接:食谱数据库
    • 我想,肯定有很多跟我看同一本书的歪果仁,在评论区吐槽没有数据。
    • 果然让我找到了解决办法。。。时隔多年,作者之一总算过来提供最新数据连接了。。。参考链接
  • 结论:

    • 数据连接:https://s3.amazonaws.com/openrecipes/20170107-061401-recipeitems.json.gz

    • 下载方法:右键另存为就完事儿了。。。(链接都有了,再不会我就没辙了。。。)下完了然后右键解压缩。。。如图。。。

2.Seaborn马拉松可视化里时分秒转化为秒数的问题

  • 抄作业

    在做Python Data Science Handbook的实例学习,4.16.3 案例:探索马拉松比赛成绩里,有提示将时分秒的时间化为秒的总数,以方便画图。书里给出的指令是:

    data[‘split_sec’]=data[‘split’].astype(int)/1E9

    data[‘final_sec’]=data[‘final’].astype(int)/1E9

    我用这种方式会出现以下错误:

    TypeError: cannot astype a timedelta from [timedelta64[ns]] to [int32]

  • 结论

    • 描述的连接里面给出了一种解决办法,可是这种解决办法太复杂了,我想了一个更简单的

    • 先写一个将Timedelta格式的时间数据转化为总秒数的函数:

      data['split_sec'] = data['split'].apply(transfor_time)
      data['final_sec'] = data['final'].apply(transfor_time)
      
    • 然后对我们需要的列广播这个函数:

      data['split_sec'] = data['split'].apply(transfor_time)
      data['final_sec'] = data['final'].apply(transfor_time)
      
    • 查看结果:

      data.head()
      

    • OK!完美解决。。。

3. scikit-learn使用fetch_mldata无法下载MNIST数据集的问题

4. GridSearchCV.grid_scores_和mean_validation_score报错

  • 问题:

    • 在P438页,5.13.4 示例:不是很朴素的贝叶斯中的2. 使用自定义评估器小节中有这样一行代码:scores = [val.mean_validation_score for val in grid.grid_scores_]

    • 运行之后报错:AttributeError: 'GridSearchCV' object has no attribute 'grid_scores_'

    • 经过百度了之后,可以知道grid_scores_在最新的sklearn中已经被弃用了,换成了cv_results_参考链接

    • 那么,更改这个参数后,依然报错:AttributeError: 'str' object has no attribute 'mean_validation_score'

    • 这个问题就再也没有搜到好的解决方案了,所以我去查了GridSearchCV的文档

    • 然后发现,关于cv_results_的内容如下:

    • 这就很尴尬了,所以没有一个参数是包含validation关键字的,我的理解是,验证集和测试集在某种情况下可以认为是等价的。所以我猜测mean_validation_score对应的应该就是mean_test_score

    • 这样,原来的代码就改成了scores = grid.cv_results_['mean_test_score']

    • 为了证明我的猜想是正确的,所以,按照得到的scores结果,顺着其他的代码,知道最后绘图:

    • 事实证明,跟书上得到图一毛一样,所以证明我对源代码修改的猜想是正确的

    • 即证明了

      • 旧版本代码:scores = [val.mean_validation_score for val in grid.grid_scores_]
      • 与新版本代码:scores = grid.cv_results_['mean_test_score']
      • 等价!

5. Jupyter导出PDF从入门到绝望

  • 问题:

    • 我在使用jupyter lab的时候,想要把我的代码和结果导出成pdf格式的(由于里面有图片,所以不想导出成html)。然后报错:

    • 然后我用pip安装了pandoc,发现并没有什么luan用。并且好像跟报错所指的pandoc不一样。反正就是绝望就完事儿了

  • 方案:

    1. 下载安装windows开发环境包的管理器,Chocolatey。参考官网了连接,用cmd粘代码就能装:官网

      @"%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\\chocolatey\\bin"

    2. 然后呢,就可以用这个管理工具安装pandoc了,参考pandoc官网

      choco install pandoc

    3. 安装完事儿!

    4. 然后导出pdf的时候发现,竟然对pandoc的版本有要求,也是佛了,那就重新搞一下把。。。

      安装固定版本的pandoc,根据官网发布的版本list,我选择安装1.19版本的。choco install pandoc --version 1.19

      安装时安装完毕了,不知道为啥,一副好像报错了的样子,下的我赶紧去看一下到底是安装好了没。。。

      应该是完事儿了,然后试试导出pdf。

    5. pandoc好像是没有问题了,可是另一个包好像又除了问题:

      所以现在又要安装这个:

      choco install miktex

    6. 完。。。做完这一步,电脑自动重启了,然后jupyter lab打不开了,报错:

      ImportError: cannot import name 'constants' from 'zmq.backend.cython’

      然后没办法,用pip升级了一下pyzmq包,总算是能打开了。。。

      然后,告诉我,我下载的插件不能用了,要重新“build”,所以就重新安装了插件。。。(像显示目录啊之类的插件。。。)

      我真的很绝望。。。

    7. 然后依然报同样的错误。。。于是我怀疑,是不是MikTex有错,于是在官网上下了一个exe安装的那种,一路确认下去。。。参考链接下载链接

      果然,在点了导出pdf的时候,报错缺少的文件就弹出来安装程序了。。。

    8. 然后就成功保存pdf啦!

  • 另辟蹊径

    说实话,这样导出来的pdf并不好看,还有一种方法,直接导出html,里面保留了插入的图片的那种,更能还原jupyter原来的排版。参考链接

6. 机器学习部分笔记

6.1 判定系数

  1. 定义

    判定系数(coefficient of determination),也叫可决系数或决定系数,是指在线性回归中,回归平方和与总离差平方和之比值,其数值等于相关系数的平方。它是对估计的回归方程拟合优度的度量。(参考:百度百科

    判定系数(记为R 2 ^2 2)在统计学中用于度量因变量的变异中可由自变量解释部分所占的比例,以此来判断统计模型的解释力。对于简单线性回归而言,判定系数为样本相关系数的平方。

    假设一数据集包括 y 1 , y 2 , . . . , y n y_1, y_2, ..., y_n y1,y2,...,yn共n个观察值,相对应的模型预测值分别为 f 1 , f 2 , . . . , f n f_1, f_2, ..., f_n f1,f2,...,fn。定义残差 e i = y i − f i e_i = y_i - f_i ei=yifi

    平均观察值为: y ˉ = 1 n ∑ i = 1 n y i \\bary = \\cfrac1n \\sum\\limits_i=1^n y_i yˉ=n1i=1nyi

    于是可以得到总平方和: S S t o t = ∑ i = 1 ( y i − y ˉ ) 2 SS_tot = \\sum\\limits_i=1 (y_i - \\bary)^2 SStot=i=1(yiyˉ)2

    回归平方和: S S r e g = ∑ i = 1 ( f i − y ˉ ) 2 SS_reg = \\sum\\limits_i=1 (f_i - \\bary)^2 SSreg=i=1(fiyˉ)2

    残差平方和: S S r e s = ∑ i = 1 ( y i − f i ) 2 = ∑ i = 1 e i 2 SS_res = \\sum\\limits_i=1 (y_i - f_i)^2 = \\sum\\limits_i=1 e_i^2 SSres=i=1(yifi)2=i=1ei2

    由此,判定系数可定义为: R 2 = 1 − S S r e s S S t o t R^2 = 1 - \\cfracSS_resSS_tot R2=1SStotSSres

  2. 总结

    R 2 ^2 2 = 1:表示模型与数据完全吻合。

    R 2 ^2 2 = 0:表示模型不比简单取均值好。

    R 2 ^2 2 < 0:表示模型性能很差。

  3. 系数标准

    判定系数只是说明列入模型的所有解释变量对因变量的联合的影响程度,不说明模型中单个解释变量的影响程度。
    判定系数达到多少为宜?没有一个统一的明确界限值;若建模的目的是预测因变量值,一般需考虑有较高的判定系数。若建模的目的是结构分析,就不能只追求高的判定系数,而是要得到总体回归系数的可信任的估计量。判定系数高并不一定说明每个回归系数都可信任。

6.2 朴素贝叶斯

  1. 贝叶斯定理

    我们在生活中经常遇到这种情况:我们可以很容易直接得出P(A|B),P(B|A)则很难直接得出,但我们更关心P(B|A),贝叶斯定理就为我们打通从P(A|B)求得P(B|A)的道路。

    P ( B ∣ A ) = P ( A ∣ B ) P ( B ) P ( A ) P(B|A) = \\cfracP(A|B)P(B)P(A) P(BA)=P(A)P(AB)P(B)

    推导: P ( A , B ) = P ( B ∣ A ) ∗ P ( A ) = P ( A ∣ B ) ∗ P ( B ) P(A, B) = P(B|A) * P(A) = P(A|B) * P(B) P(A,B)=P(BA)P(A)=P(AB)P(B)

    参考:机器学习之贝叶斯(贝叶斯定理、贝叶斯网络、朴素贝叶斯)

    朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是因为这种方法的思想真的很朴素。

    朴素贝叶斯的思想基础是这样的:**对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。**通俗来说,就好比这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为什么呢?因为黑人中非洲人的比率最高,当然人家也可能是美洲人或亚洲人&#x

    《流畅的python》学习笔记及书评(代码片段)

    《流畅的python》学习笔记文章目录《流畅的python》学习笔记写在前面1.Python数据模型1.1特殊方法2.序列构成的数组2.1内置序列类型2.2列表推导和生成器表达式2.3元组不仅仅是不可变的列表2.4切片2.5增量赋值2.6排序2.7数组、内存视... 查看详情

    《tensorflow实战google深度学习框架(第二版)》学习笔记及书评(代码片段)

    ...习总结2.TensorFlow图像预处理完整样例3.TensorFlow多线程输入数据处理框架3.1队列与多线程3.2输入文件队列3.3组合训练数据3 查看详情

    python深度学习:python数据处理及可视化(读书笔记)(代码片段)

    老铁们,我们Python的深度学习开始了,第一篇正式的文章就是数据处理和可视化,我们开始吧!数据处理与可视化一、NumPy的初步使用二、Matplotlib包的使用--图形化数据处理三、深度学习理论方法--相似度计算(可... 查看详情

    14张python代码速查表,玩转数据分析&可视化&机器学习

    Python基础系列推出的内容包括:Python基础、Python进阶、导入数据及JupyterNotebook。Python数据科学速查表-Python基础Python数据科学速查表-导入数据Python数据科学速查表-JupyterNotebook数据处理系列推出的内容包括:Numpy、Pandas及Sci... 查看详情

    python基础库及机器学习笔记(代码片段)

    1.介绍本节将主要介绍Python中的常用第三方库。这些库都是实现了各种计算功能的开源库,它们极大地丰富了Python的应用场景和计算能力,这里主要介绍NumPy、pandas和Matplotlib三个库的基础使用。其中NumPy是Python用来进行矩... 查看详情

    14张python代码速查表,玩转数据分析&可视化&机器学习

    Python基础系列推出的内容包括:Python基础、Python进阶、导入数据及JupyterNotebook。Python数据科学速查表-Python基础Python数据科学速查表-导入数据Python数据科学速查表-JupyterNotebook数据处理系列推出的内容包括:Numpy、Pandas及Sci... 查看详情

    python数据科学手册seaborn马拉松可视化里时分秒转化为秒数的问题(代码片段)

    Python数据科学手册Seaborn马拉松可视化里时分秒转化为秒数的问题问题描述:我实在是太懒了,问题描述抄的网上的哈哈哈:https://www.jianshu.com/p/6ab7afa059d1在做PythonDataScienceHandbook的实例学习,4.16.3案例:探索马拉松比赛成绩里,... 查看详情

    python数据分析与挖掘学习笔记-淘宝商品数据清洗及预处理(代码片段)

    这一节开始就正式开始啦~~这一部分主要是针对淘宝的部分商品数据(小零食)进行预处理。1.读取商品源数据这里拿到的数据是sql数据,因此需要使用mysql。首先我们安装好mysql,可以直接通过指令安装... 查看详情

    python全栈100天学习笔记day36关系型数据库及mysql(代码片段)

    关系数据库入门关系数据库概述数据持久化-将数据保存到能够长久保存数据的存储介质中,在掉电的情况下数据也不会丢失。数据库发展史-网状数据库、层次数据库、关系数据库、NoSQL数据库。1970年,IBM的研究员E.F.Codd... 查看详情

    数据科学速查手册(包括机器学习,概率,微积分,线性代数,python,pandas,numpy,数据可视化,sql,大数据等方向)

    介绍:https://redstonewill.com/2372/ 项目网址:https://github.com/FavioVazquez/ds-cheatsheets 查看详情

    python学习笔记(代码片段)

    个人学习python过程中的记录,仅供个人查阅。python学习笔记应用打印变量和字符串(使用变量和字符串给文件名命名)保留指定小数点位数计算百分位创建DataFrame格式数据小心切片会改变原数据复制数据科学计算前要修改为浮... 查看详情

    机器学习必备手册

    机器学习是计算机科学的一个子领域,在人工智能领域,机器学习逐渐发展成模式识别和计算科学理论的研究。从2016年起,机器学习到达了不合理的火热巅峰。但是,有效的机器学习是困难的,因为机器学习本身就是一个交叉... 查看详情

    python全栈100天学习笔记day40mongodb安装配置及应用(代码片段)

    MongoDB概述MongoDB简介MongoDB是2009年问世的一个面向文档的数据库管理系统,由C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。虽然在划分类别的时候后,MongoDB被认为是NoSQL的产品,但是它... 查看详情

    numpy学习笔记

       最近一直再看利用python进行数据分析这本书,准备写一个系列的学习笔记,这是第一篇,什么时候想起来就什么时候写点。第一篇写的是numpy的基本用法。   numpy是python的一个科学计算库,是很多python科... 查看详情

    python数据分析笔记系列之二:python语法基础,ipython和jupyternotebooks(代码片段)

    ...算机科学家、物理学家和其它研究领域的工作人员。学习Python和成为软件工程师的优秀书籍也有了。因为这本书是专 查看详情

    python数据分析笔记系列之二:python语法基础,ipython和jupyternotebooks(代码片段)

    ...算机科学家、物理学家和其它研究领域的工作人员。学习Python和成为软件工程师的优秀书籍也有了。因为这本书是专 查看详情

    python数据分析与挖掘学习笔记-电商网站数据分析及商品自动推荐实战与关联规则算法(代码片段)

    这一节主要涉及到的数据挖掘算法是关联规则及Apriori算法。由此展开电商网站数据分析模型的构建和电商网站商品自动推荐的实现,并扩展到协同过滤算法。关联规则最有名的故事就是啤酒与尿布的故事,非常有效地说... 查看详情

    python数据分析入门--scipy库学习笔记(代码片段)

    ...ge模块8.optimize模块9.stats模块10.ord模块总结前言scipy是一个python开源的数学计算库,可以应用于数学、科学以及工程领域,它是基于numpy的科学计算库。主要包含了统计学、最优化、线性代数、积分、傅里叶变换、信号处理... 查看详情