目录

  • 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 团队项目实训(必作!)
数据读取与写出



# 写入数据 示例

#DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='',

#float_format=None, columns=None, header=True, index=True, index_label=None,

#startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None,

#inf_rep='inf', verbose=True, freeze_panes=None)

'''

该函数主要参数为:excel_writer。

excel_writer:写入的目标excel文件,可以是文件路径、ExcelWriter对象;

sheet_name:被写入的sheet名称,string类型,默认为'sheet1';

na_rep:缺失值表示,string类型;

header:是否写表头信息,布尔或list of string类型,默认为True;

index:是否写行号,布尔类型,默认为True;

encoding:指定写入编码,string类型。

'''

import pandas as pd

writer = pd.ExcelWriter('学生成绩表.xlsx')

df1 = pd.DataFrame(data={'学号':[20001,20002,20003, '成绩':[65,85,96]})

df1.to_excel(writer,'20大数据1班')

writer.save()


# pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False, **kwds)


'''

该函数主要的参数为io、sheetname、header、names、encoding。

io:excel文件,可以是文件路径、文件网址、file-like对象、xlrd workbook;

sheetname:返回指定的sheet,参数可以是字符串(sheet名)、整型(sheet索引)、list(元素为字符串和整型,返回字典{'key':'sheet'})、none(返回字典,全部sheet);

header:指定数据表的表头,参数可以是int、list of ints,即为索引行数为表头;

names:返回指定name的列,参数为array-like对象。

encoding:关键字参数,指定以何种编码读取。

该函数返回pandas中的DataFrame或dict of DataFrame对象,利用DataFrame的相关操作即可读取相应的数据。

'''

#读入数据 代码示例:

import pandas as pd

import xlrd

# excel_path = '学生成绩表.xlsx'

d = pd.read_excel('学生成绩表.xlsx')

print(d)



# 写入 HX学生成绩表.xlsx

import pandas as pd

writer = pd.ExcelWriter('HX学生成绩表.xlsx')

df1 = pd.DataFrame(data={'学号':[20001,20002,20003], '成绩':[65,75,95]})

df1.to_excel(writer,'20大数据1班')

df2 = pd.DataFrame(data={'学号':[21001,21002,21003], '成绩':[77,87,97]})

df2.to_excel(writer,'21大数据1班')

writer.save()


#读入数据 代码示例:

import pandas as pd

import xlrd

d = pd.read_excel('HX学生成绩表.xlsx')

print('学生成绩表 \n',d)

d = pd.read_excel('HX学生成绩表.xlsx','20大数据1班')

print('20大数据1班成绩表 \n',d)

d = pd.read_excel('HX学生成绩表.xlsx','21大数据1班')

print('21大数据1班成绩表 \n',d)


 

 

 





对于python进行数据处理来说,pandas式一个不得不用的包,它比numpy很为强大。import

# 应用示例
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# 函数反应和映射
df = DataFrame(np.random.randn(4,3), columns= list("bde"),
               index= ["Utah", "Ohio", "Texas", "Oregon"])
# print df
# print np.abs(df)
# 将函数应用到各列或行所形成的一维数组上。
f = lambda x : x.max() - x.min()
# 每一列的最大值减最小值
# print df.apply(f, axis=0)
# 每一行的最大值减最小值
# print df.apply(f, axis=1)
# 返回值由多个值组成的Series
def f(x):
    return Series([x.min(), x.max()], index=["min","max"])
# print df.apply(f)
# 保留两位小数点
format = lambda x : "%.2f" % x
# print df.applymap(format)
# print df["e"].map(format)

# 排序和排名
obj = Series(np.arange(4.), index=["b","a","d","c"])
# print obj.sort_index()
frame = DataFrame(np.arange(8).reshape((2,4)),index=["three","one"],
                  columns=["d",'a','b','c'])
# 按照索引的行进行排序
# print frame.sort_index(axis=1)
# 按照索引的列进行排序
# print frame.sort_index(axis=0)
# 按照值的列进行排序(必须传入一个列的索引且只能排列一组)
# print frame.sort_values('b', axis=0, ascending=False)
# 按照值的行进行排序(必须传入一个行的索引且只能排列一组)
# print frame.sort_values("one", axis=1, ascending=False)
# 根据多个列进行排序
# print frame.sort_index(by=["a","b"])

# 排名
obj1 = Series([7,-5,7,4,2,0,4])
# print obj1.rank()

# 加减乘除   add代表加,sub代表减, div代表除法, mul代表乘法
df1 = DataFrame(np.arange(12).reshape((3,4)), columns=list("abcd"))
df2 = DataFrame(np.arange(20).reshape((4,5)), columns=list("abcde"))

# print df1 + df2
# 将缺失值用0代替
# print df1.add(df2, fill_value=0)
# 再进行重新索引时,也可以指定一个填充值
# print df1.reindex(columns=df2.columns, fill_value=0)

data = {"state": ["Ohio","Ohio","Ohio","Nevada","Nevada"],
        "year" : [2000, 2001, 2002, 2001, 2002],
        "pop"  : [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
# print frame
# 矩阵的横坐标
# print frame.columns
# 矩阵的纵坐标
# print frame.index
# 获取列通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
# print frame["state"]
# print frame.year
# 获取行也通过类似字典标记的方式或属性的方式,比如用索引字段ix
# print frame.ix[3]
# 修改列的内容
frame["debt"] = 16.5
# print frame
# 精准匹配
val = Series([-1.2, -1.5, -1.7], index=["two", "four", "five"])
frame.index = Series(['one', 'two', 'three', 'four', 'five'])
frame.debt = val
# print frame
# 为不存在的列赋值存在列中的某个值会创建出一个布尔列。关键字del用于删除列。
frame["eastern"] = frame.state == "Ohio"
# print frame
del frame["eastern"]       # 只能这样表示
# print frame
# 嵌套字典
pop = { "Nevada" : {2001 : 2.4, 2002 : 2.9},
        "Ohio"   : {2000 : 1.5, 2001 : 1.7, 2002 : 3.6}
        }
# 传给DataFrame,它会被解释为:外层字典的键作为列,内层键则作为行索引
frame2 = DataFrame(pop)
# print frame2
# 对该结果进行转置
# print frame2.T
# 内层字典的键会被合并、排序以形成最终的索引。
frame3 = DataFrame(pop, index=[2001, 2002, 2003])
# print frame3
frame3.index.name = "year"; frame3.columns.name = "state"
# print frame3


# 重新索引
obj = Series([4.5, 7.2, -5.3, 3.6], index=["d", "b", "a", "c"])
# reindex将会根据新索引进行重排。
obj2 = obj.reindex(["a", "b", "c", "d", "e"])
# print obj2
# 将缺失值用0代替
obj2 = obj.reindex(["a", "b", "c", "d", "e"], fill_value= 0)
# print obj2

# 插值处理--Series
obj3 = Series(["blue", "purple", "yellow"], index=[0,2,4])
# 前向填充ffill或pad
a = obj3.reindex(xrange(6), method="ffill")
# print a
# 后向填充bfill或backfill
b = obj3.reindex(xrange(6), method="bfill")
# print b

# 插值处理--DataFrame
import numpy as np
f = DataFrame(np.arange(9).reshape((3,3)), index=["a","c","d"],
              columns=["Ohio", "Texas", "California"])
# 改变行的索引
f2 = f.reindex(["a","b","c","d"], fill_value=9)
# print f2
# 改变列的索引
col = ["Texas", "Utah", "California"]
f3 = f.reindex(columns=col)
# print f3
# 同时改变列和行的索引
f4 = f.reindex(["a","b","c","d"], method="ffill",
               columns=["Texas", "Utah", "California"])
# print f4

# 丢弃指定轴上的项--Series
mys = Series(np.arange(5.), index=["a","b","c","d","e"])
# print mys
# drop()删除某个索引以及对应的值
mys_new = mys.drop("c")
# print mys_new
mys_new1 = mys.drop(["c","e"])
# print mys_new1

# 丢弃指定轴上的项--DataFrame
data = DataFrame(np.arange(16).reshape((4,4)),
                 index=["Ohio", "Colorado", "Utah", "New York"],
                 columns=["one", "two", "three", "four"])
# 删除某行轴上的值
data1 = data.drop(["Ohio","Utah"], axis=0)    # axis=0代表行
# print data1
# 删除某列轴上的值
data2 = data.drop(["one","three"], axis=1)    # axis=1代表列
# print data2

obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
# 使用is_unique属性可以知道他的值是否是唯一的
print obj.index.is_unique
# obj['a']
df = DataFrame(np.random.randn(4, 3), index=['a', 'b', 'a', 'b'])
print df.ix["b", 1]
print df[1]

复制代码

pandas中的索引高级处理:

复制代码

from pandas import Series, DataFrame
import pandas as pd
import numpy as np
# 索引、选取和过滤--Series
obj = Series(np.arange(4), index=["a","b","c","d"])
# print obj["b"]
# print obj[1]
# print obj[2:4]
# print obj[["b","a","d"]]
# print obj[[1,3]]
# print obj[obj < 2]
# 利用标签的切片运算与普通的python切片运算不同,其末端是包含的
# print obj["b":"c"]
obj["b":"c"] = 5
# print obj

# 索引、选取和过滤--DataFrame
data = DataFrame(np.arange(16).reshape((4, 4)),
                 index=["Ohio", "Colorado", "Utah", "New York"],
                 columns=["one", "two", "three", "four"])
# 选取某列的值
# print data["two"]
# 选取多个列的值
# print data[["two","one"]]
# 通过切片或布尔型数组选取行的值
a = data[:2]
b = data[data["three"] > 5]
# data[data < 5] = 0
# print data
# 选取出列和行的值,用ix[行,列]
c = data.ix["Ohio","two"]
# print c, data
# print data.ix["Ohio",["two","three"]]
# 可以用数字代替列的轴
# print data.ix[["Ohio","Colorado"],[3,0,1]]
# 也可以用数字代替行的轴
# print data.ix[[0,1],[3,0,1]]
d = data.ix[:"Utah", "two"]
# 行中每个值大于5且前三列的值
e = data.ix[data.three > 5, :3]
# print e

# Series的字符串表现形式为:索引在左边,值在右边。如果没有指定索引,那么默认从0到(N-1)的整数型索引。
# 可以通过values和index属性获取数组的形式和索引。
obj = Series([2,3,-6,7])
# print obj
# print obj.values
# print obj.index
obj2 = Series([2,3,-6,7],index=["d","b","a","c"])
# print obj2.index
# print obj2["a"]
obj2["d"] = 6
# print obj2[["c","a","d"]]
# print obj2[obj2 > 0 ]
# print obj2 * 2
# print np.exp(obj2)
sdata = {"Ohio" : 35000, "Texas" : 71000, "Oregon" : 16000, "Utah" : 5000}
# 直接用字典建立数组
obj3 = Series(sdata)
# 如果只传入一个字典,则结果Series中的索引就是原字典的键。
states = ["California","Ohio","Oregon","Texas"]
obj4 = Series(sdata, index=states)
# 上述obj4中California在对应的sdata中找不到对应值,所以用NaN表示(缺失值)
# 检测是否有缺失值。
pd.isnull(obj4)
pd.notnull(obj4)
obj4.isnull()
# Series最重要的一个功能是:它在算术运算中会自动对齐不同的索引的数据。
# print obj3 + obj4

# Series对象和索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
obj4.name = "population"
obj4.index.name = "state"
# print obj4
# Series的索引可以通过赋值的方式就地修改
obj.index = ["Bob","Steve","Jeff","Ryan"]
print obj

复制代码

用pandas包进行简单的统计学计算:

复制代码

import numpy as np
import pandas as pd
from pandas import Series, DataFrame
df = DataFrame([[1.4, np.nan], [7.1, -4.5],
                [np.nan, np.nan],[0.75, -1.3]],
               index=['a','b','c','d'],
               columns=["one","two"])
# print df.sum()
# 传入axis=1将会按行进行求和运算
# print df.sum(axis=1)
# NA值会自动被排除,除非整个切片是NA值。可以通过skipna选项禁止这种功能
d = df.mean(axis=1, skipna=False)
f = lambda x : "%.2f" % x
# print d.apply(f)

# 统计
# 间接统计
# print df.idxmax()
# 累计型统计(前一项加后一项)
# print df.cumsum()
# 一次性汇总统计
# print df.describe()
# print df.min(axis=1)

# 计算相关系数和协方差

obj = DataFrame(np.random.randn(5,4),
                index=["2009-12-24","2009-12-28","2009-12-29","2009-12-30","2009-12-31"],
                columns=["AAPL","GOOG","IBM","MSFT"])
obj.index.name = "Data"
# print obj
# index 代表行, columns 代表列
# corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相对系数。cov用于计算协方差:
# print obj.MSFT.corr(obj.IBM)
# print obj.MSFT.cov(obj.IBM)
# 用于DataFrame的corr和cov
# 相关系数
# print obj.corr()
# 协方差
# print obj.cov()
# 按列或行跟一个Series或Data Frame之间的相关系数
# axis=1进行行进行计算
# print obj.corrwith(obj.IBM)


# 唯一值
obj1 = Series(["c",'a','d','a','a','b','b','c','c'])
uniques = obj1.unique()
# 加排序
# print uniques.sort()
# 计算出现的频率
print obj1.value_counts()