目录

  • 1 模块一  Python与机器学习概述
    • 1.1 Python与机器学习简介
    • 1.2 发展历程
    • 1.3 基本语法
    • 1.4 帮助
    • 1.5 应用
    • 1.6 示例源代码(食品识别小小专家系统)
    • 1.7 示例代码   蜡笔小新
    • 1.8 小结
    • 1.9 Python基础教程(教&学资料)
      • 1.9.1 安装Python
      • 1.9.2 第一个python程序
      • 1.9.3 Python基础
      • 1.9.4 函数
      • 1.9.5 高级特性
      • 1.9.6 函数式编程
      • 1.9.7 模块
      • 1.9.8 面向对象编程
      • 1.9.9 面向对象高级编程
      • 1.9.10 错误、调试和测试
      • 1.9.11 IO编程
      • 1.9.12 进程和线程
      • 1.9.13 正则表达式
      • 1.9.14 常用内建模块
      • 1.9.15 常用第三方模块
      • 1.9.16 图形界面
      • 1.9.17 网络编程
      • 1.9.18 电子邮件
      • 1.9.19 访问数据库
      • 1.9.20 Web开发
      • 1.9.21 异步IO
      • 1.9.22 使用MicroPython
      • 1.9.23 实战训练(day1~~day10)
        • 1.9.23.1 Day 1 - 搭建开发环境
        • 1.9.23.2 Day 2 - 编写Web App骨架
        • 1.9.23.3 Day 3 - 编写ORM
        • 1.9.23.4 Day 4 - 编写Model
        • 1.9.23.5 Day 5 - 编写Web框架
        • 1.9.23.6 Day 6 - 编写配置文件
        • 1.9.23.7 Day 7 - 编写MVC
        • 1.9.23.8 Day 8 - 构建前端
        • 1.9.23.9 Day 9 - 编写API
        • 1.9.23.10 Day 10 - 用户注册和登录
      • 1.9.24 Day 11 - 编写日志创建页
      • 1.9.25 Day 12 - 编写日志列表页
      • 1.9.26 Day 13 - 提升开发效率
      • 1.9.27 Day 14 - 完成Web App
      • 1.9.28 Day 15 - 部署Web App
      • 1.9.29 Day 16 - 编写移动App
    • 1.10 FAQ
    • 1.11 阶段总结
  • 2 PYthon程序示例
    • 2.1 程序示例(一)初识程序
    • 2.2 程序示例(二)查看今天是今年的第几天
    • 2.3 程序示例(三)if elif else语句
    • 2.4 程序示例(四)元组,列表, 堆栈,队列
    • 2.5 程序示例(五)学玩游戏《学色彩  神魔三龟玩变色》
    • 2.6 程序示例(六)函数
    • 2.7 程序示例(七)字符串
    • 2.8 程序示例(八)文件
    • 2.9 程序示例(九)排序
    • 2.10 程序示例-机器学习中英单词翻译小专家
    • 2.11 程序示例      画花朵  &  画佩奇
    • 2.12 程序示例   华夏时钟
    • 2.13 示例:  显示图片,响声
    • 2.14 播放声音视频文件mp3、wmv、wav、m4a等)
    • 2.15 Python WEB开发技术实战
  • 3 模块2 NumPy数值计算
    • 3.1 ndarray创建与索引
    • 3.2 ndarray的基础操作
    • 3.3 ufunc
    • 3.4 小结
    • 3.5 习题与实训
  • 4 模块3   pandas基础
    • 4.1 pandas常用类
    • 4.2 DataFrame基础操作
    • 4.3 其他数据类型操作
    • 4.4 小结
    • 4.5 习题与实训
    • 4.6 练习题
  • 5 模块4 pandas进阶
    • 5.1 数据读取与写出
    • 5.2 DataFrame进阶
    • 5.3 数据准备
    • 5.4 小结
    • 5.5 习题与实训
    • 5.6 练习习题及解答(参考)
  • 6 模块5 Matplotlib基础绘图
    • 6.1 Matplotlib绘图基础
    • 6.2 分析特征关系常用图形
    • 6.3 分析特征内部数据状态常用图形
    • 6.4 小结
    • 6.5 习题与实训
  • 7 模块6 机器学习库 scikit-learn
    • 7.1 数据准备
    • 7.2 降维
    • 7.3 分类
    • 7.4 回归
    • 7.5 聚类
    • 7.6 模型选择
    • 7.7 小结
    • 7.8 习题与实训
  • 8 模块7 餐饮企业综合分析
    • 8.1 (案例)餐饮企业分析需求
    • 8.2 数据准备
    • 8.3 使用K-means算法进行客户价值分析
    • 8.4 使用决策树算法实现餐饮客户流失预测
    • 8.5 小结
    • 8.6 习题与实训
  • 9 模块8  通信运营商客户流失分析与预测
    • 9.1 通信运营商客户流失分析需求
    • 9.2 数据准备
    • 9.3 特征工程
    • 9.4 使用多层感知器算法实现通信运营商 客户流失预测
    • 9.5 小结
    • 9.6 习题与实训
  • 10 学习参考资源
    • 10.1 机器学习的通俗讲解
    • 10.2 十大机器学习算法及其应用
    • 10.3 常用机器学习算法优缺点及其应用领域
    • 10.4 轻松学会 Python turtle 绘图
    • 10.5 Python 习题库
      • 10.5.1 习题1
    • 10.6 上机操作实训库
    • 10.7 面试准备题
    • 10.8 Python 程序扩展名 及发布程序时的选择
    • 10.9 计算机Python考试大纲
    • 10.10 Python  基础知识点梳理
    • 10.11 Python常用模块大全
    • 10.12 机器学习基本术语
    • 10.13 几个机器学习的成功案例
    • 10.14 60个机器学习算法应用场景实例
  • 11 章节测验(必测)
    • 11.1 测验一
    • 11.2 测验二
    • 11.3 测验三
    • 11.4 测验四
    • 11.5 测验五
    • 11.6 测验六
    • 11.7 测验七
    • 11.8 测验八
    • 11.9 测验九
    • 11.10 测验十
    • 11.11 编程专项测验
    • 11.12 填空题专项测验
    • 11.13 判断题专项测试
    • 11.14 简答题专项测试
    • 11.15 《机器学习技术》总复习
    • 11.16 书本--习题参考解答
  • 12 综合实训项目及展示
    • 12.1 项目(一)作品展示(1)
    • 12.2 项目(一)作品展示(2)
    • 12.3 团队项目实训(必作!)
习题与实训

###1

# 代码 3-1

import pandas as pd

import numpy as np

print('通过ndarray创建的Series为:\n',

      pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'], name='ndarray'))


# 代码 3-2

dit = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

print('通过dict创建的Series为:\n', pd.Series(dit))


# 代码 3-3

list1 = [0, 1, 2, 3, 4]

print('通过list创建的Series为:\n', pd.Series(list1, index=['a', 'b', 'c', 'd', 'e'], name='list'))


# 代码 3-4

series = pd.Series(list1, index=['a', 'b', 'c', 'd', 'e'], name='list')

print('数组形式返回Series为:', series.values)

print('Series的Index为:', series.index)

print('Series的形状为:', series.shape)

print('Series的维度为:', series.ndim)


# 代码 3-5

print('Series位于第1位置的数据为:', series[0])


# 代码 3-6

print('Series中Index为a的数据为:', series['a'])


# 代码 3-7

bool = (series < 4)

print('bool类型的Series为:\n', bool)

print('通过bool访问Series结果为:\n', series[bool])


# 代码 3-8

# 更新元素

series['a'] = 3

print('更新后的Series为:\n', series)


# 代码 3-9

series1 = pd.Series([4, 5], index=['f', 'g'])

# 追加Series

print('在series插入series1后为:\n', series.append(series1))

# 新增单个数据

series1['h'] = 7

print('在series1插入单个数据后为:\n', series1)


# 代码 3-10

# 删除数据

series.drop('e', inplace=True)

print('删除索引e对应数据后的series为:\n', series)


# 代码 3-11

dict1 = {'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]}

print('通过dict创建的DataFrame为:\n', pd.DataFrame(dict1, index=['a', 'b', 'c', 'd', 'e']))


# 代码 3-12

list2 = [[0, 5], [1, 6], [2, 7], [3, 8], [4, 9]]

print('通过list创建的DataFrame为:\n',

      pd.DataFrame(list2, index=['a', 'b', 'c', 'd', 'e'], columns=['col1', 'col2']))


# 代码 3-13

df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},

                  index=['a', 'b', 'c', 'd', 'e'])

print('DataFrame的Index为:', df.index)

print('DataFrame的列标签为:', df.columns)

print('DataFrame的轴标签为:', df.axes)

print('DataFrame的维度为:', df.ndim)

print('DataFrame的形状为:', df.shape)


# 代码 3-14

print('默认返回前5行数据为:\n', df.head())

print('返回后3行数据为:\n', df.tail(3))


# 代码 3-15

# 更新列

df['col1'] = [10, 11, 12, 13, 14]

print('更新列后的DataFrame为:\n', df)


# 代码 3-16

# 插入列

df['col3'] = [15, 16, 17, 18, 19]

print('插入列后的DataFrame为:\n', df)


# 代码 3-17

# 删除列

df.drop(['col3'], axis=1, inplace=True)

print('删除col3列后的DataFrame为:\n', df)

# 删除行

df.drop('a', axis=0, inplace=True)

print('删除a行后的DataFrame为:\n', df)


# 代码 3-18

print('series的Index为 :\n', series.index)


# 代码 3-19

print('series中Index各元素是否大于前一个:', series.index.is_monotonic)

print('series中Index各元素是否唯一:', series.index.is_unique)


# 代码 3-20

index1 = series.index

index2 = series1.index

print('index1连接index2后结果为:\n', index1.append(index2))

print('index1与index2的差集为:', index1.difference(index2))

print('index1与index2的交集为:', index1.intersection(index2))

print('index1与index2的并集为:\n', index1.union(index2))

print('index1中的元素是否在index2中:', index1.isin(index2))


###2

# 代码 3-21

import pandas as pd

df = pd.DataFrame({'col1': [0, 1, 2, 3, 4], 'col2': [5, 6, 7, 8, 9]},

                  index=['a', 'b', 'c', 'd', 'e'])

print('创建的DataFrame为:\n', df)


# 访问单列数据

print('DataFrame中col1列数据为:\n', df['col1'])


# 代码 3-22

# 以属性的方式访问单列数据

print('DataFrame中col1列数据为:\n', df.col1)


# 代码 3-23

# 访问单列多行数据

print('DataFrame中col1列前3行数据为:\n', df['col1'][0: 3])


# 代码 3-24

# 访问多列多行数据

print('DataFrame中col1列、col2列前3行数据为:\n', df[['col1', 'col2']][0: 3])


# 代码 3-25

# 访问多行数据

print('DataFrame的前3行为:\n', df[:][0: 3])


# 代码 3-26

# 访问单列数据

print('DataFrame中col1列数据为:\n', df.loc[:, 'col1'])

# 访问多列数据

print('DataFrame中col1列、col2数据为:\n', df.loc[:, ['col1', 'col2']])

# 访问单行数据

print('DataFrame中a行对应数据为:\n', df.loc['a', :])

# 访问多行数据

print('DataFrame中a行、b行对应数据为:\n', df.loc[['a', 'b'], :])

# 行列结合访问数据

print('DataFrame中a行、b行,col1列、col2列对应的数据为:\n',

      df.loc[['a', 'b'], ['col1', 'col2']])


# 代码 3-27

# 接收bool数据

print('DataFrame中col1列大于0的数据为:\n', df.loc[df['col1'] > 0, :])

# 接收函数

print('DataFrame中col1列大于0的数据为:\n', df.loc[lambda df: df['col1'] > 0, :])


# 代码 3-28

# 访问单列数据

print('DataFrame中col1列数据为:\n', df.iloc[:, 0])

# 访问多列数据

print('DataFrame中col1列、col2列数据为:\n', df.iloc[:, [0, 1]])

# 访问单行数据

print('DataFrame中a行数据为:\n', df.iloc[0, :])

# 访问多行数据

print('DataFrame中a行、b行数据为:\n', df.iloc[[0, 1], :])

# 行列结合访问数据

print('DataFrame中a行、b行,col1列、col2列数据为:\n', df.iloc[[0, 1], [0, 1]])


# 代码 3-29

# 接收bool数据

print('DataFrame中col1列大于0的数据为:\n', df.iloc[df['col1'].values > 0, :])

# 接收函数

print('DataFrame中col1列大于0的数据为:\n', df.iloc[lambda df: df['col1'].values > 0, :])


# 代码 3-30

# 按行索引排序

print('按行索引排序后的DataFrame为:\n', df.sort_index(axis=0))


# 代码 3-31

# 按列索引降序排列

print('按列索引降序排列后的DataFrame为:\n', df.sort_index(axis=1, ascending=False))


# 代码 3-32

# 按列排序

print('按col2列排序后的DataFrame为:\n', df.sort_values('col2'))


# 代码 3-33

# 按行降序排列

print('按列降序排列后的DataFrame为:\n', df.sort_values('a', axis=1, ascending=False))


# 代码 3-34

print('按col2列排序,返回前2个最小值:\n', df.nsmallest(2, 'col2'))

print('按col2列排序,返回前2个最大值:\n', df.nlargest(2, 'col2'))


# 代码 3-35

df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],

                    'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']})

df3 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 'B': ['B0', 'B1', 'B2']})

# 横向堆叠df2、df3

print('横向堆叠df2、df3后的DataFrame为:\n', pd.concat([df2, df3], axis=1))

# 横向堆叠(内连)df2、df3

print('横向堆叠(内连)df2、df3后的DataFrame为:\n',

      pd.concat([df2, df3], axis=1, join='inner'))


# 代码 3-36

print('横向堆叠df2、df3后的DataFrame为:\n', df2.join(df3, rsuffix='_2'))


# 代码 3-37

# 纵向堆叠df2、df3

print('纵向堆叠df2、df3后的DataFrame为:\n', pd.concat([df2, df3], axis=0))

# 纵向堆叠(内连)df2、df3

print('纵向堆叠(内连)df2、df3后的DataFrame为:\n',

      pd.concat([df2, df3], axis=0, join='inner'))


# 代码 3-38

print('纵向堆叠df2、df3后的DataFrame为:\n', df2.append(df3))


# 代码 3-39

print('以列key为键,内连df2、df3后的DataFrame为:\n',

      pd.merge(df2, df3, on='key', how='inner'))


###3

# 代码 3-40

import pandas as pd

print('创建的Timestamp为:Timestamp({0})'.format(pd.Timestamp(2018, 8, 15, 12)))


# 代码 3-41

print('最小时间为:', pd.Timestamp.min)

print('最大时间为:', pd.Timestamp.max)


# 代码 3-42

import numpy as np

date = ['2016/8/1 11:11:46', '2017/9/2 12:13:48', '2015/7/3 09:08:40',

        np.nan, '2016/8/1 11:11:46']

series = pd.Series(date)

print('创建的Series为:\n', series)

series1 = pd.to_datetime(series)

print('转换为时间类型的Series为:\n', series1)


# 代码 3-43

date1 = pd.Timestamp(2018, 8, 15, 12, 21, 59)

print('从Timestamp提取的年为:', date1.year)

print('从Timestamp提取的月为:', date1.month)

print('从Timestamp提取的日为:', date1.day)

print('从Timestamp提取的小时为:', date1.hour)

print('从Timestamp提取的分钟为:', date1.minute)

print('从Timestamp提取的秒为:', date1.second)


# 代码 3-44

print('从Series提取的年为:\n', series1.dt.year)

print('从Series提取的月为:\n', series1.dt.month)

print('从Series提取的日为:\n', series1.dt.day)


# 代码 3-45

print('创建的Timedelta为:Timedelta({0})'.format(pd.Timedelta('1days 1minute')))


# 代码 3-46

print('创建的Timedelta为:Timedelta({0})'. format(pd.Timedelta(days=1, minutes=1)))


# 代码 3-47

series2 = pd.Series(['1days 1minute', '2days 3minute'])

# 转换成Timedelta

timedelta = pd.to_timedelta(series2)

print('转换后的Series为:\n', timedelta)


# 代码 3-48

time_delta = pd.Timestamp(2018, 8, 15, 12) - pd.Timestamp(2018, 8, 14, 12)

print('Timestamp相减后结果为:TimeDelta({0})'.format(time_delta))


# 代码 3-49

print('Timedelta相减后为:TimeDelta({0})'. format(timedelta[1] - timedelta[0]))


# 代码 3-50

print('Timestamp与Timedelta相减后为:',

      'Timestamp({0})'.format(pd.Timestamp(2018, 8, 15, 12) + timedelta[0]))


# 代码 3-51

# 转换为小时

print('Timedelta频率转换为小时后的数值为:\n', timedelta / pd.Timedelta('1 hour'))

# 转换为分钟

print('Timedelta频率转换为分钟后的数值为:\n', timedelta / pd.Timedelta('1 minute'))


# 代码 3-52

# 转换为小时

print('Timedelta频率转换为小时后的数值为:\n', timedelta.astype(('timedelta64[h]')))

# 转换为分钟

print('Timedelta频率转换为分钟后的数值为:\n', timedelta.astype(('timedelta64[m]')))


# 代码 3-53

print('从Timedelta提取的天数为:', timedelta[0].days)

print('从Timedelta提取的秒数为:', timedelta[0].seconds)

print('从Timedelta提取的微秒数为:', timedelta[0].microseconds)

print('从Timedelta提取的纳秒数为:', timedelta[0].nanoseconds)


# 代码 3-54

print('从Series提取的天为:\n', timedelta.dt.days)

print('从Series提取的秒为:\n', timedelta.dt.seconds)


# 代码 3-55

timeindex = pd.DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04'])

print('创建的DatetimeIndex为:\n', timeindex)


# 代码 3-56

print('创建的DatetimeIndex为:\n', pd.date_range(start='2018-01-01', end='2018-01-08'))


# 代码 3-57

print('创建的DatetimeIndex为:\n', pd.date_range(start='2018-01-01', periods=8))


# 代码 3-58

print('创建的DatetimeIndex为:\n',

      pd.date_range(start='2018-01-01', periods=8, freq='M'))


# 代码 3-59

date = pd.date_range(start='2018-01-10 01:02:03', periods=5, freq='W')

list1 = [1, 2, 3, 4, 5]

arr = pd.Series(list1, index=date)

print('创建的时间序列为:\n', arr)


# 代码 3-60

print('访问2018-01-14 01:02:03的数据为:', arr['2018-01-21 01:02:03'])


# 代码 3-61

print('访问2018年1月份数据为:\n', arr['2018-1'])


# 代码 3-62

print('访问2017年12月到2018年2月3号的数据为:\n', arr['2017-12': '2018-02-03'])


# 代码 3-63

series3 = pd.Series(['a', 'abb', 'Ab12'])

print('大写后的Series为:\n', series3.str.upper())


# 代码 3-64

# 匹配以小写a开头的元素,将ab替换为F,作用于Series

print('替换后的Series为:\n', series3.str.replace(r'^ab', 'F'))

print('替换后的元素为:\n', series3.str.replace(r'^ab', 'F')[1])

# 匹配以小写a开头的元素,将ab替换为F,作用于str

print('替换后的str为:', series3[1].replace(r'^ab', 'F'))


# 代码 3-65

print('cat方法作用后的结果为:', series3.str.cat(sep='-'))

print('get方法作用后的结果为:\n', series3.str.get(1))

print('get_dummies方法作用后的结果为:\n', series3.str.get_dummies())

print('contains方法作用后的结果为:\n', series3.str.contains('ab', regex=False))

print('repeat方法作用后的结果为:\n', series3.str.repeat(2))

print('pad方法作用后的结果为:\n', series3.str.pad(width=2, side='left', fillchar='f'))


# 代码 3-66

# 位置索引

print('第一个字符为:\n', series.str[0])

# 切片索引

print('前两个字符为:\n', series3.str[0: 2])


# 代码 3-67

series4 = pd.Series(['a', 'b', 'b', 'c'], dtype='category')

print('指定Series数据类型创建的category为:\n', series4)


# 代码 3-68

series = pd.Series(['a', 'b', 'b', 'c'])

series1 = series.astype('category')

print('转换Series数据类型创建的category为:\n', series1)

from pandas.api.types import CategoricalDtype

cat_type = CategoricalDtype(categories=['b', 'c', 'd'], ordered=True)

series1 = series.astype(cat_type)

print('转换Series数据类型为CategoricalDtype创建的category结果为:\n', series1)


# 代码 3-69

raw_cat = pd.Categorical(['a', 'b', 'b', 'c'],

                         categories=['a', 'b', 'c'], ordered=False)

series = pd.Series(raw_cat)

print('接收Categorical对象创建category为:\n', series)


# 代码 3-70

series = pd.Series(range(9))

series1 = pd.cut(series, [0, 3, 6, 9, 12], right=False)

print('cut函数作用Series创建category结果为:\n', series1)


# 代码 3-71

series = pd.Series(['a', 'b', 'b', 'c'], dtype='category')

print('category的类别为:\n', series.cat.categories)

print('category的类别是否指定:', series.cat.ordered)


# 代码 3-72

series1 = series.cat.rename_categories([1, 2, 3])

print('重命名category的类别为:', series1.cat.categories)


# 代码 3-73

series1 = series.cat.add_categories(['e'])

print('新增后的category的类别为:\n', series1.cat.categories)


# 代码 3-74

series1 = series.cat.remove_categories(['c'])

print('删除后的category的类别为:\n', series1.cat.categories)


# 代码 3-75

series1 = series.cat.set_categories(['c', 'd'], ordered=True)

print('设置后的category的类别为:\n', series1.cat.categories)


# 代码 3-76

series1 = series.cat.set_categories(['c', 'e', 'a', 'b'], ordered=True)

print('指定顺序后的category为:\n', series1.sort_values())