1:注释代码段
1 | #program mark -[注释内容] |
2:取消xcode编译器内对于弃用方法的警告
1 | #pragma clang diagnostic push |
3:取消对未使用变量的警告,使用方式和2相同,必须成对出现#pragma clang
1 | #pragma clang diagnostic push |
还有种方式也能达到同样效果
1 | #pragma unused (foo) |
4: 忽略内存泄露告警
1 | #pragma clang diagnostic push |
record life and technology
1 | #program mark -[注释内容] |
1 | #pragma clang diagnostic push |
1 | #pragma clang diagnostic push |
还有种方式也能达到同样效果
1 | #pragma unused (foo) |
1 | #pragma clang diagnostic push |
1 | import matplotlib.pyplot as plt |
颜色、标记和线型
1 | plt.plot(randn(30).cumsum(), 'ko--') |
刻度、标签和图例
xlim | xticks | xticklabels |
---|---|---|
范围 | 刻度位置 | 刻度标签 |
标题、轴标签、刻度以及刻度标签
1 | fig = plt.figure(); ax = fig.add_subplot(1,1,1) |
添加图例
1 | # 方式一:传入参数label |
图注解以及在Subplot上绘图
1 | fig = plt.figure() |
将图标保存到文件
1 | plt.savefig('figpath.svg') |
matplotlib配置
1 | # 如设置图像大小 |
简单Series图表
1 | from pandas import Series |
简单的DataFrame图表
1 | df = DataFrame(np.random.randn(10,4).cumsum(0), columns=['A','B','C','D'],index=np.arange(0,100,10)) |
1 | # kind="bar"(垂直柱状图),kind="barh"(水平柱状图) |
1 | df = DataFrame(np.random.rand(6,4), index=['one', 'two', 'three', 'four', 'five', 'six'], |
1 | tips = pd.read_csv('../pydata-book-master/ch08/tips.csv') |
1 | data = pd.read_csv('../pydata-book-master/ch08/Haiti.csv') |
1 | # 抽取分类编码,构造全0DataFrame |
pandas对象中的数据可通过内置方式合并:
数据集的合并(merge)和连接(join)是通过键将行连接起来的。
1 | df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], |
两边都有的列就都有数据,一边有列一边的数据,没有就用缺省值NaN填充。
DataFrame的连接键位于索引上;传入left_index=True或right_index=True(或两者)指定。
1 | left1 = DataFrame({'key': ['a', 'b', 'c', 'a', 'b', 'a'], |
对于像这样的东西,了解一下,知道有这么个东西,以后用到能想到,查一下;
现在第一次看没必要看得这么深,也很难懂,看不懂还影响了心情。
1 | arr = np.arange(12).reshape((3, 4)) |
NumPy的where函数,实现合并两个有重叠部分数据集;Series的combine_first方法实现同样的功能,且数据对齐。
重新排列表格型数据的基础运算,谓之重塑(reshape)或轴向旋转运算(pivot)。
1 | data = DataFrame({'k1':['one']*3 + ['two']*4, |
了解到有这么个知识点可以完成那些功能,将来遇到要实现的时候能回忆起来就可以了。
Series的map方法可接受一个函数或含有映射关系的自典型对象。
1 | ## 肉类 |
replace提供了简单灵活的替换方式。
1 | data = Series([1.,-999.,2.,-999.,-1000.,3.]) |
1.连接符
join连接列表或元祖
1 | # print piece |
2.子串定位in关键字
1 | # print 'guido' in val |
3.count计算子串出现的次数
1 | val.conut(',') |
re模块函数可分三大类:模式匹配
替换以及拆分。
1 | import re |
清理散乱数据,字符串规整化工作。
data.map,所有字符串和正则表达式方法都能被应用于(传入lambda表达式或其他函数)各个值,但如果存在NA就会报错。通过Series的str属性即可访问这些方法。如str.contains检查是否含”gmail”.
1 | data.str.contains('gmail') |
1 | import json |
为了实现一个订单下多个商品同时评价功能,列表分五种状态(非常满意,满意,一般,较差,不满意)展示,用一个listview,item中有一个GridView,GridView中放置最多五张图片;在listview上下滑动时会出现item中的图片重复、错乱、闪烁等问题。
先讲我的错误。遇到问题后Google,参考了一些资料,都是提示要在外层listview的adapter上设置setTag(), 然后在内层GridView的adapter上整体和需要标记复用的imageView上setTag()。照此执行了,还是出错;后来在同事指点下,原来外层adapter中设置gridAdapter时只是在没有塞值时gridView.setVisibility(View.GONE)
,忘了要在有值的时候gridView.setVisibility(View.VISIBLE)
, 所以导致在复用的时候,没有了GridView可复用。
输入输出分类:
pandas提供了将表格数据读取为DataFrame对象的函数;其中read_csv和read_table是应用最多的两个:
函数 | 说明 |
---|---|
read_csv | 从文件、URL、文件型对象中加载带分隔符的数据;默认逗号 |
read_table | 从文件、URL、文件型对象中加载带分隔符的数据;默认制表符”\t” |
类型推断是这些函数中最重要的功能之一。
1 | $ cat ex1.csv |
对于没有标题行的文件
1 | $ cat ex2.csv |
指定索引
1 | # 指定索引 |
1 | # 非固定分隔符,需要正则表达式 |
跳过异常行(使用参数skiprows)
1 | $ cat ch06/ex4.csv |
可以认为1,3,4行为异常数据
1 | print pd.read_csv('../pydata-book-master/ch06/ex4.csv', skiprows=[0,2,3]) |
大文件只想读取一小部分或者逐块对文件进行迭代
1 | result = pd.read_csv('../pydata-book-master/ch06/ex6.csv', nrows=5) |
逐块读取;用到chunksize(行数)
1 | # chunker = pd.read_csv('../pydata-book-master/ch06/ex6.csv', chunksize=100) |
1 | data = pd.read_csv('../pydata-book-master/ch06/ex5.csv') |
pandas.read_csv生成的是DataFrame对象;
DataFrame的to_csv方法,可以将数据写到一个用逗号分隔的文件中
1 | data.to_csv('./ch06_out.csv') |
将缺失值替换为其他标记值
1 | data.to_csv(sys.stdout, na_rep='NULL') |
只输出特定列,指定顺序
1 | data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c']) |
Series也有to_csv()方法
1 | datas = pd.date_range('1/1/2000', periods=7) |
更简单的读取方法from_csv
1 | # print Series.from_csv('./ch06tsseries.csv', parse_dates=True) |
场景:pandas.read_table加载表格数据时,由于畸形行导致错误
1 | # $ cat ch06/ex7.csv |
手动写入分隔符文件csv.writer
1 | with open('mydata.csv', 'w') as fw: |
tip:一些东西还是要看源码才最直接
JSON已成为HTTP请求在Web浏览器和其他程序之间发送数据的标准格式之一、
1 | obj1 = """ |
1 | # http://finance.yahoo.com/quote/AAPL/options?ltr=1 |
1 | from lxml import objectify |
1 | # 保存到磁盘上 |
1 | xls_file = pd.ExcelFile('../pydata-book-master/ch06/ex1.xlsx') |
1 | import requests |
1 | # 数据库选择标准:性能、数据完整性、应用程序的伸缩性需求 |
1 | # 电脑上需要装MongoDB数据库; |
走过了一遍第六章,给我的感觉是,工具很强大,可以做很多数据分析工作,数据结构知识还是匮乏,一些比较复杂的东西还是不能很好的理解,需要加强,多看几遍也是一个方法。
时间上,下班时间有点晚,可以看书的时间都在9点左右,有点晚,太累了,以后下班是不是可以早一点,做饭时间吃饭时间太晚;另外严重缺乏锻炼了,涨了一些肉的,膝盖还是没有恢复,需要针对性锻炼。
记一下,博客的评论插件,多说社会化评论系统已经关闭;选择移除多说或者换成其他的。
………………………………………………2017-03-25 22:57 Sat&合肥-皖水公寓
- Series最重要的一个功能:在算术运算中会自动对齐不同索引的数据(键相同)。
- Series对象本身及其索引都有一个name属性。
1 |
|
DataFrame是一个表格型的数据结构,含有一组有序的列,每列可以是不同的值类型。既有行索引也有列索引。可看做由Series组成的字典。
以二维结构保存数据,可视为多维数据(层次化索引的表格型结构是pandas中许多高级数据处理功能的关键要素)。
方式一:直接传入一个由等长列表或NumPy数组组成的字典:
1 | ## 构建 |
1.1. 指定列序列
1 | frame2 = DataFrame(data, columns=['year', 'state', 'pop']) |
1.2. 通过字典标记方式或属性方式,获取一个Series
1 | # print frame2['state'] |
1.3. 行,通过名称或位置获取,如用索引字段ix
1 | # print frame2.ix[1] |
1.4. 直接给列赋值,新建test列,赋值2.3
1 | frame2['test'] = 2.3 |
将列表或数组赋值给某个列时,长度必须和DataFrame相匹配;空位都将填上缺失值NaN。
方式二:嵌套字典,即字典的字典。
1 | pop = {'Nevada': {2001:2.3, 2004:3.4}, |
2.1 设置index和columns的name属性
1 | frame3.index.name = 'year';frame3.columns.name = 'state' |
2.2 value属性会以二维ndarray形式返回DataFrame中的数据
1 | # print frame3.values |
pandas索引对象负责管理轴标签和其他元数据(比如轴名称等)。
Index对象不可修改。此特性非常重要,使得Index对象在多个数据结构之间安全共享。
1 |
|
1 | obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e']) |
利用标签的切片与普通Python切片运算不同,末端是包含的,即封闭区间。如
1 | obj = Series(np.arange(4.), index=['a','b','c','d']) |
对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。
1 | s1 = Series([7.3, 4.5, 67.1, 2.3], index=['a', 'b', 'd', 'f']) |
1 | # obj = Series(range(4), index=['d','c','b','a']) |
按值对Series排序,用其order方法;
排序时缺失值会被放到Series末尾。
sort_index()方法已过时,用sort_value()方法代替。
1 | # DataFrame根据列值排序,传列名给by选项 |
排序
1 | obj = Series([7, 3, 5, 7, 9, 3, 1]) |
第五章于20170319结束,时间节点设计有问题,现在需要手动敲的越来越多,所以速度跟不上,尤其是精力跟不上了。看书要分主次,重要的知识点要细看,必须手动敲出来;一些同类化的知识可以跳着看,以节省时间。
但是有一个原则不能改,一些重要的知识点不能跳过,需要真真的✋敲出来。不然那就是真正的浪费时间。
Tip:全称Numerical Pythn,是高性能科学计算和数据分析的基础包。本书所有高级工具的构建基础。
对于大部分数据分析应用,作者关注功能:
Tip:标准NumPy约定,总是使用
import NumPy as np
,而不是from NumPy import *
.
Tip:NumPy最重要特点是其N维数组对象(即ndarray,该对象是一个快速而灵活的大数据集容器)。
大多数数据分析工作不需要深入理解NumPy,但精通面向数组的编程和思维方式是成为Python科学计算牛人的一大关键步骤。
Focus:本书提到的
数组
、NUmPy数组
、ndarray
都是指ndarray对象
1 | #!/usr/bin/python |
Focus:如无特别指定,数据类型基本都是float64
ndarray的astype方法可转换其dtype:
1 | arr = np.array([1,2,3,4,5]) |
无需循环就可执行批量运算;这就叫做矢量化(vectorization)。不同大小数组之间的运算叫做广播。
1 | arr = np.array([[1.,2.,3.], [4.,5.,6.]]) |
与列表最重要区别在于,数组切片是原始数组的视图。说明数据不会被复制,视图伤的任何修改都会直接反映到数组上。若非要复制,就要显式复制:arr[5:8].copy()
1 | arr = np.arange(10) |
ndarray切片语法与一维对象相似。多维切片只是一维的基础山进行扩展。
沿着第0轴切片;切片是沿着一个轴向选取元素的。一次传入多个切片:
1 | arr2d = np.array([[1,2,3],[4,5,6],[7,8,9]]) |
上面只能得到相同维数的数组视图。
通过将整数索引和切片混合,可以得到低维度的切片:
1 | print arr2d[1,:2] |
Focus:
:
,冒号表示选取整个轴。
对切片表达式进行赋值,该操作会扩散到整个选区。
1 | arr2d[:2, 1:] = 0 |
二维数组切片,第一个数字开始在行这个维度上切片,第二个数字在列上切片。
布尔型索引选取数组中多数据,总是创建数的副本,即使是返回一摸一样多数组。
⚠️:Python关键字and和or在布尔型数组中无效。
通过布尔型数组设置值,如下,将data中的所有负值都设为0:
1 | data[data < 0] = 0 |
一维数组设置正行或列的值:
1 | data[name != 'Joe'] = 7 |
指利用整数数组进行索引;花式索引跟切片不一样,总是将数据复制到新数组中。
1 | arr = np.empty((8,3)) |
1 | arrzzdh = np.arange(15).reshape(3,5) |
用数组表达式代替循环的做法,称为矢量化。
1 | points = np.arange(-5,5,0.1) # 1000个间隔相等的点 |
如numpy.where函数
是三元表达式x if condition erse y
的矢量化版本。
1 | result = np.where(condition="",x="",y="") |
满足条件则x,否则y
1 | arr = np.random.randn(5, 4) |
1 | ## 排序 |
1 | ## 唯一化 |
1 | ## 用于数组的文件输入输出 |
1 | # 存取文本文件 |
最后涉及到了线性代数,随机漫步等数学概念,深切体会到学好数学是任何一门科学想要往高了走的必然阶梯,计算机科学当然也不例外。
今天组内培训,讲了一些代码规范、版本更新和项目管理的知识,无规矩不成方圆,团队大了,尤其需要一套行之有效的规矩来约束每个人的行为,代码能体现一个人的行为方式,是否有代码洁癖。Talk is cheap, show me the code.
希望组内能坚持下去,互相code Review。
Tip:动手敲一敲,跟所有由键盘驱动的控制台环境一样,锻炼对常用命令的肌肉记忆是学习曲线中不可或缺的一部分。
?
,就能查看对象的一些信息这一章介绍了IPython的强大功能,作为数据分析利器的存在。目前我还是用PyCharm这个IDE顺手。这一章暂且搁置,若后续需要了解再来查看。–20170307
1 | import this |
今日感悟:在项目开发过程中,一些坑现在不填平,以后还会跳出来坑你,还是往死里坑。这也正是
Errors should never pass silently.
的意指。so,不要逃避困难,遇到问题,想办法解决。
这一章节主要是环境构建工作。
遇到问题,无法安装pandas包,pip也无法安装;
命令sudo easy_install xxx
,怀疑是网速原因,超时了。
所以直接下载了zip包。。补充:之后在公司网速可以的情况下由下载下来了,安装了pip工具。
1 | #!/usr/bin/python |
1 | time_zones = [rec['tz'] for rec in record if 'tz' in rec] |
1 | # pandas时区计数 |
1 | unames = ['user_id', 'gender', 'age', 'occupation', 'zip'] |
1 | # 1880-2010年间全美婴儿姓名 |
感到这一章就是先展示一下能干什么,用到的东西不熟悉,也只能照着敲敲;因此决定暂不跟着敲了;P41-P47跳过。
题记:这本书是2016年6月10日购于Aamazon,至今还是新的,有愧初衷。决定于2017年2月25日开始看,本书共12章,400页(不含附录)。计划两个月看完。那么,到3月25日要看200页,大概到第七章结束;四周200页,一周就是50页。
那么就从附录的基础开始看吧。
时间计划表:
周序号 | 时间 | 章节 | 页码 | 执行情况 |
---|---|---|---|---|
1 | 20170227-20170305 | 第一、二章 | p1-p47 | 完成 |
2 | 20170306-20170312 | 第三、四章 | p48-p112 | 完成 |
3 | 20170313-20170319 | 第五章 | p115-p161 | 完成 |
4 | 20170320-20170325 | 第六章 | p162-p185 | 完成 |
5 | 20170326-201704 | 第七章 | p186-p230 | - |
6 | 20170305-20170305 | - | - | - |
7 | 20170305-20170305 | - | - | - |
8 | 20170305-20170305 | - | - | - |
9 | 20170305-20170305 | - | - | - |
-重拾Python基础
1 | #!/usr/bin/python |
20170226 23:06 周日 于皖水公寓1#1317
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia-plus根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true