IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 《Python数据科学手册》学习笔记 -> 正文阅读

[Python知识库]《Python数据科学手册》学习笔记

前言

软件安装注意事项

Miniconda的可用下载地址:Miniconda — Conda documentation。但Miniconda需自己安装各Python程序包(新手不适)。建议直接使用Anaconda。

第1章

1.4 IPython魔法命令

1.4.1 粘贴代码块:%paste和%cpaste

%paste和%cpaste在Jupyter Notebook中不可用(%lsmagic魔法函数列表中也无对应项)。报错如下:

UsageError: Line magic function `%paste` not found.

实测在IPython中可用。

1.7 与shell相关的魔法命令

此处删不掉对应临时目录(本节内容应是在Anaconda Powershell Prompt下运行ipython):

In [20]: rm -r tmp

1.9 代码的分析和计时

1.9.3 用%lprun进行逐行分析

Python3.7下安装line-profiler需Visual Studio 2017支持。

第2章

2.4 聚合:最小值、最大值和其他值

2.4.3 示例:美国总统的身高是多少

In[13]:!head -4 data/president_heights.csv

对应Windows系统下用type指令查看文件内容:

In[13]:!type data\president_heights.csv

第3章

3.6层级索引

3.6.2 多级索引的创建方法

In[17]:pd.MultiIndex(levels=[['a', 'b'], [1, 2]],

?????????????? labels=[[0, 0, 1, 1], [0, 1, 0, 1]])

Out[17]:MultiIndex(levels=[['a', 'b'], [1, 2]],
?????????? codes=[[0, 0, 1, 1], [0, 1, 0, 1]])
d:\Users\Administrator\Anaconda3\lib\site-packages\ipykernel_launcher.py:2: FutureWarning: the 'labels' keyword is deprecated, use 'codes' instead

现版本’labels’已经被’codes’取代。

3.7 合并数据集:Concat与Append操作

3.7.2 通过pd.concat实现简易合并

现版本axis=’col’需改为axis=’columns’

In[8]:??????? df3 = make_df('AB', [0, 1])

df4 = make_df('CD', [0, 1])

print(df3); print(df4); print(pd.concat([df3, df4], axis='columns'))

3.9 累计与分组

3.9.1 行星数据

通过Seaborn下载行星数据失败:

In[2]:??????? import seaborn as sns

planets = sns.load_dataset('planets')

URLError: <urlopen error [Errno 11004] getaddrinfo failed>

将电脑DNS设置改为114.114.114.114有可能修复

3.11 向量化字符串操作

3.11.3 案例:食谱数据库

新建一个字符串,将所有行JSON对象连接起来,然后再通过pd.read_json来读取所有数据:

In[20]:???? # read the entire file into a Python array

with open(' 'data/recipeitems-latest.json', 'r') as f:

??? ????????????????? # Extract each line

??? ????????????????? data = (line.strip() for line in f)

??? ????????????????? # Reformat so each line is the element of a list

data_json = "[{0}]".format(','.join(data))

会报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 4058: illegal multibyte sequence

需改为:

In[20]:???? # 将文件内容读取成Python数组

with open('data/recipeitems-latest.json', 'r', encoding='UTF-8') as f:

??? ????????????????? # 提取每一行内容

??? ????????????????? data = (line.strip() for line in f)

??? ????????????????? # 将所有内容合并成一个列表

??? ????????????????? data_json = "[{0}]".format(','.join(data))

3.12 处理时间序列

3.12.5 重新取样、迁移和窗口

使用pandas-datareader程序包从谷歌/雅虎财经导入金融数据失败:

In[25]:???? from pandas_datareader import data

goog = data.DataReader('GOOG', start='2004', end='2016',

?????????????????????? ?????????? data_source='google')

NotImplementedError: data_source='google' is not implemented

若改为data_source='yahoo'

ReadTimeout: HTTPSConnectionPool(host='finance.yahoo.com', port=443): Read timed out. (read timeout=30)

3.12.7 案例:美国西雅图自行车统计数据的可视化

In[36]:???? data.columns = ['West', 'East']

data['Total'] = data.eval('West + East')

因现在所用数据本身有总数项,此处改为:

In[36]:???? data.columns = ['Total', 'East', 'West']

3.13 高性能Pandas: eval()与query()

3.13.1 query()与eval()的设计动机:复合代数式

Numpy随机数获取失败:

In[1]:??????? import numpy as np

rng = np.random.RandomState(42)

x = rng.rand(1E6)

y = rng.rand(1E6)

TypeError: 'float' object cannot be interpreted as an integer

这里需改回为:

x = rng.rand(1000000)

y = rng.rand(1000000)

第4章

4.1 Matplotlib常用技巧

4.1.3 用不用show()? 如何显示图形

2.在IPython shell中画图

启动ipython后使用%matplotlib魔法命令报错:

In[1]:??????? %matplotlib

AttributeError: 'NoneType' object has no attribute 'lower'

暂时只在IPython Notebook中使用命令%matplotlib inline或%matplotlib notebook启动图形。

4.5 可视化异常处理

4.5.2 连续误差

高斯过程回归方法调用失败:

In[1]:??????? from sklearn.gaussian_process import GaussianProcess

ImportError: cannot import name 'GaussianProcess' from 'sklearn.gaussian_process' (d:\Users\Administrator\Anaconda3\lib\site-packages\sklearn\gaussian_process\__init__.py)

4.13 Matplotlib自定义:配置文件与样式表

4.13.1 手动配置图形

改用灰色背景时异常:

In[3]:??????? # use a gray background

ax = plt.axes(axisbg='#E6E6E6')

ax.set_axisbelow(True)

AttributeError: 'AxesSubplot' object has no property 'axisbg'

此处需要改为:

In[3]:??????? ax = plt.axes(facecolor='#E6E6E6')

4.15 用Basemap可视化地理数据

载入Basemap时故障:

In[1]:??????? from mpl_toolkits.basemap import Basemap

会报错KeyError:'PROJ_LIB',需在本地系统中增加环境变量:

变量名:PROJ_LIB

变量值:D:\Users\Administrator\Anaconda3\Library\share

4.16 用Seaborn做数据可视化

4.16.2 Seaborn图形介绍

1.频次直方图、KDE和密度图

频次直方图的绘制时:

In[6]:??????? for col in 'xy':

??? ????????????????? plt.hist(data[col], normed=True, alpha=0.5)

新版本matplotlib中normed已被density取代,报错为:

AttributeError:'Rectangle' object has no property 'normed'

该调用语句可改为:

plt.hist(data[col], density=True, alpha=0.5)

获得一个二维数据可视化图时:

In[9]:??????? sns.kdeplot(data);

d:\Users\Administrator\Anaconda3\lib\site-packages\seaborn\distributions.py:679: UserWarning: Passing a 2D dataset for a bivariate plot is deprecated in favor of kdeplot(x, y), and it will cause an error in future versions. Please update your code.

? warnings.warn(warn_msg, UserWarning)

在更高版本环境中会报错,暂时没找到解决方法:

ValueError: If using all scalar values,you must pass an index

4.16.3 案例:探索马拉松比赛成绩数据

把字符串转换为时间类型:

In[25]:???? def convert_time(s):

??? ????????????????? h, m, s = map(int, s.split(':'))

??? ????????????????? return pd.datetools.timedelta(hours=h, minutes=m, seconds=s)

会报错:

AttributeError:module 'pandas' has no attribute 'datetools'

可不使用自建的这个函数,直接调用pd.to_timedelta()

即将下一段中调用部分改为:

converters={'split':pd.to_timedelta, 'final':pd.to_timedelta}

后续将时间换算成秒时:

In[27]:???? 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]

此处可改为:

In[27]:???? data['split_sec'] = data['split'].astype(np.int64) / 1E9

data['final_sec'] = data['final'].astype(np.int64) / 1E9

第5章

5.2 Scikit-Learn简介

5.2.2 Scikit-Learn的评估器API

3.有监督学习示例:鸢尾花数据分类

借助函数分割数据集:

In[15]:???? from sklearn.cross_validation import train_test_split

已无对应模块,报错为:

ModuleNotFoundError:No module named 'sklearn.cross_validation'

改为从现有模块调用该函数:

In[15]:???? from sklearn.model_selection import train_test_split

5.无监督学习示例:鸢尾花数据聚类

高斯混合模型的导入:

In[20]:???? from sklearn.mixture import GMM

会报错:

ImportError: cannot import name 'GMM' from 'sklearn.mixture'

应改为:

In[20]:???? from sklearn.mixture import GaussianMixture????? # 1.选择模型类

model = GaussianMixture(n_components=3,

???????????????????????????????????????????????????????????? covariance_type='full')???? # 2.设置超参数,初始化模型

5.2.3 应用:手写数据探索

2.无监督学习:降维

In[20]:???? plt.scatter(data_projected[:, 0], data_projected[:, 1], c=digits.target,

??????????? ???????? ?edgecolor='none', alpha=0.5,

??????????? ???????? ?cmap=plt.cm.get_cmap('spectral', 10))

此处报错:

ValueError:Colormap spectral is not recogized.

此处对应方案首字母需大写,应该为:

???????? ?????????????? ?cmap=plt.cm.get_cmap('Spectral', 10)

3.数字分类

In[32]:???? test_images = xtest.reshape(-1, 8, 8)

报错为:

NameError:name 'xtest' is not defined

此前定义的是'Xtest',此处应为:

In[32]:???? test_images = Xtest.reshape(-1, 8, 8)

5.3 超参数与模型验证

5.3.1 什么是模型验证

3.交叉检验

LOO交叉检验的调用:

In[8]:??????? from sklearn.model_selection import LeaveOneOut

scores = cross_val_score(model, X, y, cv=LeaveOneOut(len(X)))

会报错:

TypeError: LeaveOneOut() takes no arguments

改为去掉参数:

In[8]:??????? scores = cross_val_score(model, X, y, cv=LeaveOneOut())

5.3.2 选择最优模型

2.Scikit-Learn验证曲线

可视化验证曲线的调用:

In[13]:???? from sklearn.learning_curve import validation_curve

会报错:

ModuleNotFoundError: No module named 'sklearn.learning_curve'

现改为:

In[13]:???? from sklearn.model_selection import validation_curve

5.3.3 学习曲线

Scikit-Learn学习曲线

学习曲线的调用问题和前面问题相似:

In[17]:???? from sklearn.learning_curve import learning_curve

应改为:

In[17]:???? from sklearn.model_selection import learning_curve

5.3.4 验证实践:网格搜索

网格搜索元评估器的调用:

In[18]:???? from sklearn.grid_search import GridSearchCV

报错为:

ModuleNotFoundError: No module named 'sklearn.grid_search'

也改为:

In[18]:???? from sklearn.model_selection import GridSearchCV

画图显示时:

In[21]:???? plt.plot(X_test.ravel(), y_test, hold=True);

报错为:

AttributeError: 'Line2D' object has no property 'hold'

此处可去掉hold参数,即:

In[21]:???? plt.plot(X_test.ravel(), y_test);

5.6 专题:线性回归

5.6.4 案例:预测自行车流量

每一天的自行车流量计算:

In[15]:???? daily = counts.resample('d').sum()

daily['Total'] = daily.sum(axis=1)

daily = daily[['Total']] # remove other columns

因目前使用数据有总和项,此处进行对应修改:

In[15]:???? daily = counts.resample('d').sum()

daily = daily[['Fremont Bridge Total']] # remove other columns

daily.columns = ['Total']

线性回归模型的建立:

In[22]:???? column_names = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'holiday',

??????? ???????? ???????????'daylight_hrs', 'PRCP', 'dry day', 'Temp(C)', 'annual']

X = daily[column_names]

y = daily['Total']

model = LinearRegression(fit_intercept=False)

model.fit(X, y)

会报错:

ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

这是因为两份原始数据对应的时间跨度不一致,会产生缺失值,增加语句删除含缺失值的行即可:

daily.dropna(inplace=True)

另外可用下句检查数据中是否有缺失值:

print(np.isnan(daily).any())

书中此例实际使用的是东西向均值而非总流量。

5.7 专题:支持向量机

5.7.3 案例:人脸识别

RandomizedPCA的调用:

In[20]:???? from sklearn.decomposition import RandomizedPCA

ImportError: cannot import name 'RandomizedPCA' from 'sklearn.decomposition' (d:\Users\Administrator\Anaconda3\lib\site-packages\sklearn\decomposition\__init__.py)

已没有单独的RandomizedPCA,改为直接调用PCA即可:

In[20]:???? from sklearn.decomposition import PCA as RandomizedPCA

5.10 专题:流形学习

5.10.8 示例:手写数字的可视化结构

从mldata下载MINIST手写数字数据集被拒:

In[20]:???? from sklearn.datasets import fetch_mldata

mnist = fetch_mldata('MNIST original')

ConnectionResetError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。

可能需要尝试把数据自行下到本地。

5.12 专题:高斯混合模型

5.12.2 一般化E-M:高斯混合模型

高斯混合模型(GMM)的使用:??

In[10]:???? for pos, covar, w in zip(gmm.means_, gmm.covars_, gmm.weights_):

??? ???????? ???draw_ellipse(pos, covar, alpha=w * w_factor)

会报错:

AttributeError: 'GaussianMixture' object has no attribute 'covars_'

需改为:

In[10]:???? for pos, covar, w in zip(gmm.means_, gmm.covariances_, gmm.weights_)

5.12.3 将GMM用作密度估计

用GMM拟合原始数据获得16个成分生成400个新数据点时:

In[16]:???? Xnew = gmm16.sample(400, random_state=42)

TypeError: sample() got an unexpected keyword argument 'random_state'

此后5.12.4小节有一处有同样问题。

5.13 专题:核密度估计

5.13.4 示例:不是很朴素的贝叶斯

2.使用自定义评估器

自定义评估器的使用:

In[17]:???? scores = [val.mean_validation_score for val in grid.grid_scores_]

会报错:

AttributeError: 'GridSearchCV' object has no attribute 'grid_scores_'

现改为:

In[17]:???? scores = grid.cv_results_['mean_test_score']

主要软件版本:

Python?????????????????????????????? 3.7.3

Anaconda Navigator??????? 1.9.7

jupyter Notebook??????????? 6.0.0

IPython????????????????????????????? 7.6.1

NumPy?????????????????????????????? 1.16.4

Pandas?????????????????????????????? 0.24.2

Matploylib???????????????????????? 3.1.0

Seaborn???????????????????????????? 0.9.0

Scikit-Learn?????????????????????? 0.21.2

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:38:10  更:2021-09-22 14:40:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 5:13:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计