机器学习——数据科学包(三)
一、索引
(一)行索引
Series索引
为行索引命名
(二)列索引
为索引命名
(三)重复索引
判断是否有重复索引
对重复索引的值进行求和
对其求平均值
(三)多级索引
(1)创建多级索引
(2)索引交换
选取一级索引
选取二级索引
选取第a行(是一个DataFrame)
选取二级索引为1 的(是两个索引级别的seriers)
将一级索引(row-1)和二级索引(row-2)进行交换
根据一级索引进行排序
根据二级索引进行排序
(3)按照索引层次进行统计
a、求和
根据一级索引
根据二级索引
(4)索引与列的转换
创建普通的DataFrame
把c列设计为索引值
用c和d设计为二级索引
把索引转换为平面dataframe
二、分组计算
分组计算三步曲:拆分->应用->合并
分组运算原理
(一)对Series分组
(二)对DataFrame分组
(三)分组中的元素个数统计
显示每个元素分组个数
根据key1分组然后求和
只显示data1的结果
生成多层索引的分组结果,然后用unstack转化成dataframe
(四)对分组进行迭代
用for对groupby进行迭代,然后转化成字典
(五)分组转化为字典
(六)按列分组
查看每一列的数据类型
按列进行求和
(七)通过字典进行分组
创建dataframe
创建字典
用count查看分组后元素的情况
(八)通过函数进行分组
根据行数进行分组
(九)通过索引级别进行分组
通过多级索引进行分组
三、聚合运算
(一)内置聚合函数
注:pandas的内置聚合函数:sum,mean,min,max,describe
(二)自定义聚合函数agg
最大值-最小值
(三)一次性应用多个聚合函数
(四)不同的列应用不同聚合函数
(五)重置索引:让作为索引的key1作为数据而不是索引
算group时传入参数
四、分组运算和转换
(一)分组数据变换transform
用transform实现;使结果更直观
(二)自定义数据处理apply
(三)数据过滤filter
输出按某个列排序最大的两行
针对key1分组输出最大的2行
针对data2进行排序
例子:实现空值处理
求出东西部州的平均值
五、 数据导入导出
1索引:将个列或多个列读取出来构成DataFrame,其中涉及是否从文件中读取索引以及列名
2●类型推断和数据转换:包括用户自定义的转换以及缺失值标记
3日期解析
4*迭代:针对大文件进行逐块迭代。这个是Pandas和Python原生的csv库的最大区别
5●不规整数据问题:跳过一些行,或注释等等
在pycharm中创建csv文件
用ipython notebook读取文件
(一)索引及列名
用整数分配列名称
指定列名称
指定多级行索引
处理不规则的分隔符
注;\s 表示正则表达式中的空格
pandas自动将第一列作为索引
(二)缺失值处理
指定缺失值
针对每一列指定缺失值
(三)逐块的读取数据
指定输出前10行
textFileReader支持pandas里的迭代器协议
降序排列,输出前10个
(四)保存数据到磁盘
指定不写索引值
写入时指定不写列标签
指定只写几列数据
指定分割符
(五)二进制数据
用pickle包实现
缺点:更新速度快,早期写的程序可能输出不够精确
(六)其他格式简介
HDFS: HDF5是个C语言实现的库,可以高效地读取磁盘.上的二进制存储的科学数据
- Excel文件:
pd.read. excel/pd ExcelFile/pd.ExcelWrite - JISON:通过json模块转换为字典,再转换为DataFrame
- SQL数据库:通过pd.io.sql模块来从数据库读取数据
*NoSQL (MongoDB)数据库:需要结合相应的数据库模块, 如pymongo。再通过游标把数据读出来,转换为DataFrame
六、时间序列
(一)python里的datatime
timedelta 表示时间之间的间隔
获取当前时间
求时间差
格式化时间
将字符串转换为datatime
(二)Pandas里的时间序列
用python里的时间列表创建时间序列
(1)时间序列
已知开始时间和结束时间
已知开始时间和个数
正则化
(2)时间的频率转换
以天为频率
以星期为单位
以月份为频率
以每个月的最后一个工作日为频率
以小时为频率
(三)时期及算术运算
(1)时期序列
月份
年份
季度
(2)时期的频率转换
a、以年为单位的时期转换为以月为单位的时期(默认终点)
起始时间
b、以月为单位转化成以年为单位
每年的结束时间是12月份
每年的结束月份是3月份
c、在Q-JAN下2016Q4的起始时间段
d、获取该季度倒数第二个工作日下午4点20分
(4)Timestamp和Period相互转换
a、将基于时间戳的时间序列转化为基于时期的时间序列
以天为频度
以月为频度时,索引存在重合
b、将基于时期的时间序列转化为基于时间戳的时间序列
七、重采样
●高频率>低频率>降采样: 5分钟股票
交易数据转换为日交易数据
●低频率>高频率>升采样
●其他重采样:每周三(W-WED)转换为每周五(W-FRI)
以起始时间为行索引
以结束时间为行索引
(一)OHLC重采样
采集5分钟里面的最高价,最低价,开盘价,收盘价
(二)通过groupby重采样
(1)基于月份重采样
(2)将以天为单位的时间戳的序列转换成以月份为单位的时期的序列
(三)升采样和插值
(1)升采样
以季度采样
指定向前填充
(2)插值
ffill后面的数据向前面求插值
设置限制
(四)时期重采样
以12月份为结尾
以三月份为结尾
(五)从文件中解析出序列
将索引列设为Date
将日交易数据转换为周交易数据
求出周交易量
八、数据可视化
Pandas 的数据可视化使用matplotib为基础组件。 更基础的信息可参阅matplotib相关内容。本节主要介绍Pandas里提供的matplotib更便捷的数据可视化操作。
(一)线型图
(1)一维数组
(2)二维数组
使x轴和y轴相同
指定索引
以ID为x轴,A,C为y轴。
(二)柱状图
只画一列
(三)直方图
a是生成1000个数,均值在-1附近;b是生成1000个数,均值在0附近;c是生成1000个数,均值在1附近。
只画a列
bins改变等分密度
加大等分密度
将图形叠在一起
(四)概率密度图
注:均值决定概率密度中心点的位置,方差决定图形宽窄
(1)画出a的概率密度图
(2)画出A、B、C的概率密度图
(五)散布图:当数据比较大时,可以通过散布图观察各个数据维度之间的关联,对其进行分类。
创建400个数据
a和b的散布图
b和c的散布图
(六)饼图
默认为椭圆形
指定为正方形
指定标签
指定百分比
将字体放大
指定颜色
(七)高级绘图函数
Pandas高级绘图函數放在pandas.tools.plotting 包里。
定制化的绘图需要学习matplotib这个包的用法
九、实例
(一)股票数据分析
(1)股票数据获取
运行data_source.py,得到.csv文件
(2)股票波动幅度分析
a、波动幅度周期选择
输出Adj Close数据:
对数据进行重新采样
(最高价-最低价)/最高价=每个月的波动幅度
求平均值
b、股票波动幅度计算
(3)年化收益率
a、最大年化收益率
b、当前年化收益率
c、平均年化收益率
每年的数据增长情况:
求出具体每年的增长价格
求每年的增长率
画出柱状图
(二)时间事件日志
(1)时间事件日志简介
使用dida365.com来作为GTD工具
使用特殊格式记录事件类别和花费的时间,
(2)数据读取
a、导出数据
b、读出数据
创建一个日期解析函数给日期读入函数
使dudate变成只包含日期的索引
(3)数据清洗
a、数据选择
Status !=0表示事件按时完成了
b、数据解析
(4)数据分析
a、时间总览
求平均每天用来成长的时间
b、精力分配
c、专注力
每一天的专注力
每个月的精力分配:
对数据进行重采样