以此记录阅读和学习《利用Python进行数据分析》这本书中的觉得重要的点!

第一章:准备工作

1、一组新闻文章可以被处理为一张词频表,这张词频表可以用于情感分析。

2、大多数软件是由两部分代码组成:少量需要占用大部分执行时间的代码,以及大量不经常执行的“粘合剂代码”。

cython已经成为python领域中创建编译型扩展以及对接c/c++代码的一大途径。

3、在那些要求延迟性非常小的应用程序中(例如高频交易系统),为了尽最大可能地优化性能,耗费时间使用诸如C++这样更低级、更低生产率的语言进行编程也是值得的。

4、Python中有一个叫做全局解释器锁(GIL)的东西,这是一种防止解释器同时执行多条python字节码指令的机制。

Cython项目可以集成(OpenMP 一个用于并行计算的C框架),以实现并行处理循环进而大幅度提高数值算法的速度

5、Numpy还有一个重要的作用:作为算法之间传递数据的容器。对于数值型数据,Numpy数组在存储和处理数据时,要比内置的Python数据结构高效的多!

6、Pandas提供了大量的适用于金融数据的高性能时间序列功能和工具。Pandas的DataFrame源自于R的data.frame对象。但是R中data.frame提供的功能只是Pandas中DataFrame提供功能的子集。

7、 Ipython主要用于交互式数据处理和利用matplotlib对数据进行可视化处理。

8、scipy.weave:利用内联C++代码加速数组计算的工具。

9、语法糖:一种编程语法,它并不会带来新的性能,但是会使代码更易读、更易写。

第二章:引言

1、pandas中选择某一列数据非空:

cframe=df[df.a.notnull()]

2、numpy中的where过滤:

operation_sys=np.where(cframe["a"].str.contains("Windows"),"Windows","Not Windows")

3、按照某一列和对应长度的列表进行分组,并统计该列每个时区分别制定列表内容出现的次数:

"根据时区和新的操作系统分组"
by_tz_os=cframe.groupby(["tz",operation_sys])
by_tz_os.size().unstack().fillna(0)[:5]

4、argsort 函数的使用????

"选取最常出现的时区"
indexer=arg_counts.sum(1).argsort()
"通过take按照这个顺序截取最后10行"
count_sub=arg_counts.take(indexer)[-10:]
"通过stacked=True 来生成一张条形图"
count_sub.plot(kind="barh",stacked=True) #"将两种信息都衔接在一起表现在图表中!"

5、基于机器学习的推荐算法的学习

6、读取数据库表数据.dat文件的数据到DataFrame中

unames=["user_id","gender","age","occupation","zip"]
users=pd.read_table("{dir}{name}".format(dir=movie_dir,name="users.dat"),sep="::",header=None,names=unames)

7、pandas中的切片算法:

users[:5]

8、三表联合merge为一张表(会自动根据重合的字段来进行合并)

data=pd.merge(pd.merge(users,ratings),movies)

9、根据性别计算对每个电影的平均评分

"按照性别对各电影的评分进行综合排名。使用pivot_table 方法"
mean_ratings=data.pivot_table("rating",columns="gender",index="title",aggfunc="mean")
mean_ratings[:5]

10、进一步分析电影评分数据

"过滤掉评分数据不足250条的电影 按照title分组。得到每组的评分条数"
rating_by_title=data.groupby("title").size()
active_titles=rating_by_title.ix[rating_by_title>=250]
cur_mean_ratings=mean_ratings.ix[active_titles] #从之前的mean_ratings中选取评论数》=250条的数据
"为了了解女性观众最喜欢的电影,按照性别‘f’进行降序排列"
cur_mean_ratings.sort_index(by="F",ascending=False)[:4]

11、找到对电影评分分歧大的电影信息

"如果想找到评分分歧最大的电影,则可以计算电影评分的方差或标准差"
rating_std_by_title=data.groupby("title")["rating"].std()
"根据active_titles进行过滤"
rating_std_by_title=rating_std_by_title.ix[active_titles]
"对series进行降序排列"
rating_std_by_title=rating_std_by_title.order(ascending=False)
利用python进行数据分析:
第三章:ipython
1、分析每句python执行的时间:
%timeit python语句。
eg:
"时间分析命令。 用于分析每条命令执行的时间"
strings=["Lindsay","Poo","Pandas","Python","Numpy","Scipy"]*100000
%timeit method1=[x for x in strings if x.startswith("Lin")] %timeit method2=[x for x in strings if x[:3]=="Lin"] %timeit会自动多次执行,以产生一个精确的平均执行时间! 第四章:Numpy基础:数组和矢量计算
1、Numpy部分功能:
用于对整组数据进行快速运算的标准数学函数(无需编写循环)
用于集成由C、C++、Fortran等语言编写的代码的工具。
2、理解Numpy数组,以及面向数组的计算有利于更高效的使用诸如Pandas之类的工具。
3、Pandas还提供了一些Numpy所没有的更加领域特定的功能:如时间序列处理等!
4、Numpy可以像标量一样进行运算。
import numpy as np
data=np.array([[1,2,3,4,5],[6,7,8,9,10]])
data
"可以对整个np.array数组进行标量运算"
print data*10
print data+data
5、numpy是同构数据多维容器。 类型相同。 data.shape data.dtype
6、精通面向数组的编程和逻辑思维方式是成为Python科学计算牛人的一大关键步骤。
7、"使用zeros 和 one 和 empty 构建numpy数组。"
np.zeros(8)
np.zeros((2,3)) np.ones(5)
np.ones((3,4)) np.empty(6)
np.empty((3,2)) #认为np.empty 返回全0数据是不安全的。很多情况下,返回的是一些未初始化的垃圾值。
8、np.arange(n) 是python中range的数组版
9、"numpy中的astype 可以将numpy转换为特定的类型"
data4=data4.astype("string_")
data4.dtype
data4
10、astype 无论如何都会创建出一个新的数组(原始数据的一份拷贝),几十新dtype和老的dtype相同也是如此!
11、注意:浮点数(float64和gloat32)只能表示近似的分数值。 在复杂计算中,由于可能会积累一些浮点错误,因子比较操作只能在一定小数位以内有效。
12、数组和标量之间的运算(数组的矢量化)
arr=np.array([[1,2,3],[4,5,6]])
arr+arr
arr-arr
arr*arr
1/arr
arr**0.5
13、基本的索引和切片
"Numpy数组的索引和切片"
arr=np.arange(10)
arr[5]
arr[5:8]
arr[5:8]=14
arr
#注意:数组切片是原始数组的视图,这意味着数据不会被复制,视图上的任何修改都会直接反映到源数组上。 arr_slice=arr[5:8]
arr_slice[1]=12345
arr_slice
arr arr[:]=64
arr
#如果想要得到的是numpy.array切片的一份副本而非视图,就需要显式地进行复制操作。如:arr[5:8].copy()
14、二维数组中,各索引位置上的元素不是标量,而是一维数组。 可以通过以","分割的列表来访问某个元素。
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2[2]
arr2[1,2]
arr2[1][2] #后两种方式是等价的。
15、多维数组切片: 例如:
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
#print arr2
arr2[:1,:2] #中间用","分割。
16、布尔型索引:
"布尔型索引 。 索引列表要和numpy数组的行数一致。 索引列表包含值为:True 或 False。 "
names=np.array(['Bob','Joe','Will','Joe','Joe','Bob','Will'])
data=np.random.randn(7,4) "选取name为 Bob的"
names=="Bob"
"根据name=='Bob'条件 选择数据"
data[names=='Bob'] data[names=='Bob',2] "选取多个判断条件时,需要使用 布尔运算符 | 或 &。 多个判断条件之间用()括起来"
(names=='Bob') | (names=='Joe')
"利用布尔条件选择数据"
data[(names=='Bob') | (names=='Joe')] "注意:通过布尔型索引选取数组中的数据,将总是创建数据的副本。 即使返回一模一样的数组也是如此。"
"python关键字:and 或 or 在布尔型数组中无效!" "将所有负值都设置为0"
data[data<0]=0 "通过一维布尔数组 设置整行 或 整列的值"
data[names!='Bob']=7
data
17、"花式索引:根据指定整数数组进行索引"
arr=np.empty((8,4)) #返回数组中数据并不是0,而是随机的未初始化的数值 for i in xrange(8):
arr[i]=i
arr
arr[[3,4,7]] #从0下标开始,取数据。
arr
arr[[-2,-5,-6]]
18、reshape
"根据多个索引数组 选取数据"
data=np.arange(32).reshape(8,4)
data
data[[1,2,3,4],[3,2,0,1]] #相当于指定坐标的点的列表
data[[1,2,3,4]][:,[3,2,0,1]] #先选中所有行切片之后,再选择列。
"注意:花式索引,和切片不同。 总是将数据复制到新数组中!"
19、通用函数:快速的元素级别数组函数
arr=np.arange(10)
np.sqrt(arr)
np.exp(arr) x=np.random.randn(8)
y=np.random.randn(8)
np.maximum(x,y) #返回x,y中对应位置的最大值 组成的数组 arr=np.random.randn(7)*5
print arr
np.modf(arr) #返回两个数组,分别为:小数部分数组和整数部分数组。
20、用数组表达式替换循环的做法,称之为:矢量化。 矢量化数组运算比等价的python方式快上一两个数量级(甚至更多)
21、"将条件逻辑表现为 数组运算"
xarr=np.array([1,2,3,4,5,6,7,8])
yarr=np.array([2,4,9,16,25,36,49,64])
cond=np.array([True,False,True,False,False,False,True,False]) result=np.where(cond,xarr,yarr)
result
1、"用于布尔型数组的方法:在sum cumsum cumprod std 等方法中,布尔类型被强制转化为1(True),0(False)"
"可以用sum 对数组中的True的值进行统计"
arr=np.random.randn(100)
(arr>0).sum() "any 和 all。 any:用于判断数组中是否存在一个或多个True。 all:数组中是否全部都为True"
arr=np.array([True,False,False])
arr.any() arr=np.array([False,False,False])
arr.any() arr=np.array([True,True])
arr.all() arr=np.array([False,False])
arr.all() "这两个方法也适用于 非布尔类型数据。 所有非0数值均被当做True"
arr=np.array([1,2,0,3,4])
arr.any() arr=np.array([-1,-2])
arr.any()
arr.all() 2、"排序 和python中的list一样。 可以通过sort方法实现就地排序。 改变了原始数组中数据的顺序"
arr=np.random.randn(8)
print arr
arr.sort()
print arr arr2=np.random.randn(5,4)
print arr2
arr2.sort(1) #多维数组排序
print arr2 arr3=np.random.randn(8)
print arr3 print np.sort(arr3) #使用顶级方法 np.sort,返回的是数组的一个已排序的副本。 arr.sort()是在原始数据上就地排序。 3、"唯一化 以及 其他的集合逻辑"
"返回已排好序的唯一数组"
names=np.array(["bob","joe","anna","joe","anna"])
np.unique(names) #返回已排序好的唯一数组 ints=np.array([1,2,3,4,5,1,2,3,4,1,2,1])
np.unique(ints) "np.in1d 测试原始数组在另外一个数组中的成员资格。 返回一个布尔类型的数组"
np.in1d(ints,[4,7,8]) "其他各种集合操作 :交集、并集、差集、异或 等" 4、numpy进行数据存储 "存储和读取二进制文件 如果没有填写后缀:.npy 则numpy在保存的时候会自动添加"
arr=np.random.randn(10)
np.save("arr",arr)
np.load("arr.npy") "numpy 将多个数组添加到亚索文件中。 如果未指定后缀,则会默认添加后缀:.npz 会对各个数组进行延迟加载!"
arr2=np.array([[1,2,3],[4,5,6],[7,8,9]])
np.savez("savez",a=arr,b=arr2)
np.load("savez.npz")["b"]

利用python进行数据分析--(阅读笔记一)的更多相关文章

  1. 《利用Python 进行数据分析》 - 笔记(4)----json

    解决方案: 读写文本格式的数据: pandas 提供了一些用于将表格型数据读取为DataFrame对象的函数 pandas 中的解析函数 函数的选项可以划分为以下几个大类 索引:将一个或多个列当做返回 ...

  2. 《利用Python进行数据分析》笔记---第6章数据加载、存储与文件格式

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  3. 《利用Python进行数据分析》笔记---第5章pandas入门

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  4. 《利用Python进行数据分析》笔记---第4章NumPy基础:数组和矢量计算

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  5. 《利用Python进行数据分析》笔记---第2章--1880-2010年间全美婴儿姓名

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  6. 《利用Python进行数据分析》笔记---第2章--MovieLens 1M数据集

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  7. 《利用Python进行数据分析》笔记---第2章--来自bit.ly的1.usa.gov数据

    写在前面的话: 实例中的所有数据都是在GitHub上下载的,打包下载即可. 地址是:http://github.com/pydata/pydata-book 还有一定要说明的: 我使用的是Python ...

  8. 【python】《利用python进行数据分析》笔记

    [第三章]ipython C-a 到行首 C-e 到行尾 %timeit 测量语句时间,%time是一次,%timeit是多次. %pdb是自动调试的开关. %debug中,可以用b 12在第12行设 ...

  9. $《利用Python进行数据分析》学习笔记系列——IPython

    本文主要介绍IPython这样一个交互工具的基本用法. 1. 简介 IPython是<利用Python进行数据分析>一书中主要用到的Python开发环境,简单来说是对原生python交互环 ...

随机推荐

  1. 公司4:JrVue主题定制-2

    页面折叠布局:(折叠按钮.transition动画.git项目池模块分支) 布局组件(template): <el-container> <el-aside> <!-- ...

  2. Linux安装PHP环境

    简介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要 ...

  3. random模块思维导图

  4. [转]C语言常见错误总结1

    指针与数组的对比c程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建.数组名对应着(而不是指向)一块内存,其地 ...

  5. 292 Nim Game Nim游戏

    您和您的朋友,两个人一起玩 Nim游戏:桌子上有一堆石头,每次你们轮流拿掉 1 到 3 块石头. 拿掉最后一块石头的人就是胜利者.由您来开局.你们两个都是聪明人,相信都有最佳的游戏策略. 请编写一个函 ...

  6. java简单打印金字塔(案例)

    学习编程语言,打印简单的金字塔是基础的案例,在这里就简单的写了个案例,希望能帮助到各位 代码 效果 class  kinTa{    public static void main(String[] ...

  7. 构建一个.net的干货类库,以便于快速的开发 - 工具类

    相信每一个开发的框架都会有一个工具类,工具类的作用有很多,通常我会将最常用的方法放在工具类里 取得用户IP 取得网站根目录的物理路径 枚举相关 非法关键字检查 绝对路径改为相对路径 获取小数位(四舍五 ...

  8. MySql学习笔记(2)-简介

    一.什么是MySql MySql是开放源代码的数据库管理系统之一: MySql是一个支持多线程高并发多用户的关系型数据库管理系统: MySql最擅长的是查询性能,而不是事务处理(需要借助第三方存储引擎 ...

  9. Spring.Net学习笔记(2)-依赖注入

    一.开发环境 操作系统:Win10 编译器:VS2013 framework版本:.net 4.5 Spring版本:1.3.1 二.涉及程序集 Spring.Core.dll Common.Logg ...

  10. Android通过微信实现第三方登录并使用OKHttp获得Token及源码下载

    这里对于App在微信开放平台上申请AppID和secret在这里就略过了,我们微信的授权登录流程,腾讯官网给的流程如下: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用 ...