《使用python进行数据分析》
第一
环境搭建
1. 使用pip安装pandas, numpy, scipy, matplotlib, ipython
注意:首先需要安装venv(不然在下面的安装过程中会提示很多的错误,使用pycharm开发ide默认会安装好venv)
sudo pip install pandas
sudo pip install numpy
sudo pip install scipy
sudo pip install matplotlib
sudo pip install ipython
2. 使用easy_install安装pandas,numpy, scipy,matplotlib,ipython
sudo easy_install pandas
sudo easy_install numpy
sudo easy_install scipy
sudo easy_install matplotlib
sudo easy_install ipython
3. 使用源代码安装pandas,numpy,scipy,matplotlib,ipython(安装最新版本时推荐使用该方法)
git clone git://github.com/pydata/pandas.git
cd pandas
python setup.py install
git clone git://github.com/numpy/numpy.git numpy
cd numpy
python setup.py install
git clone http://github.com/scipy/scipy.git scipy
cd scipy
python setup.py install
git clone git://gtihub.com/matplotlib/matplotlib.git
cd matplotlib
python setup.py install
git clone --recursive https://github.com/ipython/ipython.git
cd ipython
python setup.py install
例:分别使用python和numpy进行相同的矩阵加法运算,比较两者的代码运行的时间长度
代码如下:
#!/usr/bin/env/python
from datetime import datetime
import numpy as np
def square_sum_python(n):
a = range(n)
b = range(n)
c = []
for i in range(len(a)):
a[i] = i ** 2
b[i] = i ** 3
c.append(a[i] + b[i])
return c
def square_sum_numpy(n):
a = np.arange(n) ** 2
b = np.arange(n) ** 3
c = a + b
return c
n = 10000
begin_at = datetime.now()
result = square_sum_python(n)
end_at = datetime.now()
time_len = end_at - begin_at
print 'running python code', time_len.microseconds
print 'sum of running python code', result[-3:]
begin_at = datetime.now()
result = square_sum_numpy(n)
end_at = datetime.now()
time_len = end_at - begin_at
print 'running numpy code', time_len.microseconds
print 'sum of running numpy code', result[-3:]
当计算的矩阵的长度为100时,两者代码运行花费的时间复杂度基本一致;当矩阵的长度为1000,10000时,numpy的运行的时间是python的十分之一甚至百分之一
4. ipython的作用
a.保存会话
%logstart
%hist -g thedate
%logoff
b. 执行系统shell命令
thedate = !date
thedate
c.显示历史命令
%hist
%hist -g thedate
d.作为学习手册
首先要安装readline,使用pip install readline或者easy_install readline安装即可
安装完成之后使用ipython -pylab打开ipython,输入help+空格+函数的一部分+Tab键;或者输入函数全名+问号+回车
第二
numpy的基本用法
1.numpy创建矩阵并选择元素
例如:
a = array(array(1,2), array(3,4))
print a
print a[0][0]
print a[0][1]
print a[1][0]
print a[1][1]
a.dtype
a.shape
2. numpy的数值类型
bool
int8/int16/int32/int64/inti/uint8/uint16/uint32/uint64
float32/float64/float
complex64/complex128
3.numpy处理数组的形状
一维数组转化为多维数组
multi_arr = np.arange(24).reshape(2,3,4)
多维数组转化为一维数组
one_arr = multi_arr.ravel()
one_arr = multi_arr.flatten()
调整数组的形状
multi_arr.shape = (6,4) //使用属性的方式更改shape
multi_arr.resize(6,4) //返回值为void,不生成新的数组
other_multi_arr = multi_arr.reshape(4,6) //改变shape,并返回新的数组
other_multi_arr = multi_arr.transpose() //返回转置
4. 堆叠数组
水平堆叠(x堆叠/列堆叠)hstack((a, b)) column_stack((a, b))
垂直堆叠(y堆叠/行堆叠)vstack((a, b)). row_stack((a, b))
纵向堆叠(z堆叠/深度堆叠)dstack((a, b))
例如:
import numpy as np
A = np.arange(9).reshape(3,3)
B = A * 2
H = np.hstack((A,B))
C = np.column_stack((A,B))
V = np.vstack((A,B))
R = np.row_stack((A,B))
D = np.dstack((A,B))
5.拆分数组
水平拆分(横向拆分)(沿着x轴进行拆分)hstack(a, 3)
垂直拆分(纵向拆分)(沿着y轴进行拆分)vstack(a,3)
沿着z轴进行拆分 dstack(a,3)
例如:
import numpy as np
A = np.arange(9).reshape(3,3)
H = np.hsplit(A,3)
V = np.vsplit(A,3)
6.numpy数组的属性
返回维度的数量 ndim
返回元素的数量 size
返回单个元素占用字节数 itemsize
返回所有元素占用字节数 nbytes
返回转置矩阵 T 或者transpose()
返回实部 real
返回虚部 imag
设置某个元素的值 A.flat[[m,n]] = value
获取某个元素的值 A.flat[[m,n]]
设置所有元素的值 A.flat = value
获取所有元素的值 A.flat
7.numpy数组的转换
将numpy数组转换为python列表
例如:
import numpy as np
A = np.arange(9).reshape(3,3);
a_list = A.tolist()
转换numpy数组元素的类型
例如:
import numpy as np
A = np.arange(9).reshape(3,3)
B = A.astype(complex)
8.创建数组的视图和副本
注意:对本源的修改,视图也会跟着修改,而副本不会被修改
例如:
import scipy.misc
import matplotlib.pyplot as plt
lena = scipy.misc.lena()
lena_view = lena.view()
lena_copy = lena.copy()
9.numpy数组的广播
例如:一个wav音频文件进行放大处理,这时相当于矩阵与常数的乘法
#!/usr/bin/env/python
import numpy as np
import urllib2
import scipy.io.wavfile
import matplotlib.pyplot as plt
response = urllib2.urlopen("http://www.thesoundarchive.com/austinpowers/smashingbaby.wav")
print response.info()
WAV_FILE = 'smashingbaby.wav'
file_handler = open(WAV_FILE, 'w')
file_handler.write(response.read())
file_handler.close()
sample_rate,data = scipy.io.wavfile.read(WAV_FILE)
print data.dtype
print data.shape
print data.size
print data
plt.subplot(2,1,1)
plt.title("The First")
plt.plot(data)
new_data = data * 2
new_data = new_data.astype(np.uint8)
print new_data.dtype
print new_data.shape
print new_data.size
print new_data
plt.subplot(2,1,2)
plt.title("The second")
plt.plot(new_data)
plt.show()
9.使用numpy对图片进行处理(实战)
例如:使用numpy对图片画对角线
#!/usr/bin/env/python import scipy.misc import matplotlib.pyplot as plt lena = scipy.misc.lena() shape = lena.shape x_max = shape[0] y_max = shape[1] lena[range(x_max), range(y_max)] = 0 lena[range(x_max-1, -1, -1), range(y_max)] = 0 plt.imshow(lena) plt.show()
例如:使用numpy打乱图片
#!/usr/bin/env/python import scipy.misc import matplotlib.pyplot as plt import numpy as np def shuffle_arr(size): arr = np.arange(size) np.random.shuffle(arr) return arr lena = scipy.misc.lena() x_max = lena.shape[0] y_max = lena.shape[1] x_arr = shuffle_arr(x_max) y_arr = shuffle_arr(y_max) plt.imshow(lena[np.ix_(x_arr, y_arr)]) plt.show()
第三
numpy与线性代数
获取程序包的版本号使用__version__属性
获取程序包的路径使用__path__属性
#!/usr/bin/env/python
import numpy as np
import scipy as sp
import matplotlib as mpl
def get_version():
print "version of numpy is", np.__version__
print "version of scipy is", sp.__version__
print "version of matplotlib is", mpl.__version__
def get_path():
print "path of numpy is", np.__path__
print "path of scipy is", sp.__path__
print "path of matplotlib is", mpl.__path__
get_version()
get_path()
2.使用numpy进行统计计算
例如:使用numpy计算最大值,最小值,平均值,中位数,标准差
#!/usr/bin/env/python import numpy as np data = np.arange(24).reshape(3,8) print "max is", data.max() print "max is", np.max(data) print "min is", data.min() print "min is", np.min(data) print "averge is", data.mean() print "averge is", np.mean(data) print "median is", np.median(data) print "sta is ", data.std() print "sta is", np.std(data)
3.运用numpy求解矩阵的逆
注意,numpy数组和矩阵是两个不同的概念;
首先使用np.mat()函数定义一个矩阵;再使用np.linalg.inv(A)计算A的逆;最后检验两者的乘是不是单位矩阵
#!/usr/bin/env /python
import numpy as np
A = np.mat("1 -2 1; 0 2 -8; -4 5 9")
print A
A_inv = np.linalg.inv(A)
print A_inv
check_result = A * A_inv
check_diff = A * A_inv - np.eye(3)
print check_result
print check_diff
5.计算矩阵的特征值和特征向量
#!/usr/bin/env/python
import numpy as np
A = np.mat("3 -2; 1 0")
eig_value = np.linalg.eigvals(A)
eig_value, eig_vector = np.linalg.eig(A)
print eig_value
print eig_vector
第四
使用pandas进行数据分析
1. 安装pandas
pandas的最小依赖集合为:
numpy,python-dateutil, pytz(专门处理时区问题的程序库)
使用pip安装pandas:
pip install pandas
使用easy_install安装pandas:
easy_install pandas
使用源代码安装pandas:
git clone git://github.com/pydata/pandas.git
cd pandas
python setup.py install
2.初步使用pandas的数组结构DataFrame(相当于numpy的数组)
创建DataFrame的方法有:
使用CSV来创建DataFrame
使用numpy数组来创建DataFrame
使用DataFrame来创建DataFrame
使用Series来创建DataFrame
首先下载案例csv文件,下载地址为http://www.exploredata.net/Downloads/WHO-Data-Set
代码如下:
#!/usr/bin/env/python
from pandas.io.parsers import read_csv
df = read_csv("WHO.csv")
print df
print "shape of dataframe:"
print df.shape
print "len of dataframe:"
print len(df)
print "columns of dataframe:"
print df.columns
print "dtypes of dataframe:"
print df.dtypes
print "index of dataframe:"
print df.index
print "values of dataframe:"
print df.values
3.使用pandas的数据结构Series
可以使用以下几种方式来创建Series:
使用python的dict来创建Series
使用numpy数组来创建Series
使用单个标量值来创建Series
案例代码如下所示:
#!/usr/bin/env/python
from pandas.io.parsers import read_csv
df = read_csv("WHO.csv")
print df
col_series_data = df["Country"]
print "one column of DataFrame:"
print col_series_data
print "type of one column of DataFrame:"
print type(col_series_data)
print "shepe of column of DataFrame:"
print col_series_data.shape
print "index of column of DataFrame:"
print col_series_data.index
print "value of column of DataFrame:"
print col_series_data.values
print "name of column of DataFrame:"
print col_series_data.name
《使用python进行数据分析》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器
PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语言是 ...
- Redis学习笔记--Redis数据过期策略详解==转
本文对Redis的过期机制简单的讲解一下 讲解之前我们先抛出一个问题,我们知道很多时候服务器经常会用到redis作为缓存,有很多数据都是临时缓存一下,可能用过之后很久都不会再用到了(比如暂存sessi ...
- LeetCode算法题详解之两个数组的交集
题目背景: 这个与我们高中时期学习的交集是一样的,顺便复习一下相关的数学知识有助于更好的理解. 交集的定义: 对于两个集合A和B,定义A和B的交集为C,其中C={x|x属于A且X属于B},记作A∩B. ...
- Python脱产8期 Day01
一 编程语言与目的 1.有特定语法,可以通过编程的方式,让计算机进行识别,从而让计算机根据人的意愿完成人想让其完成的事 2.控制奴役计算机,让其完成你想让它完成的事,从而解放人力. 二 计算机 五大组 ...
- 树莓派学习笔记(6):让Raspbian支持中文、禁用休眠
引自:http://www.leiphone.com/news/201406/raspberry-pi-hands-on.html 一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把 ...
- angularjs的ng-change事件演示
今天练习angularjs的ng-change事件. 比如用户作出选择时,系统所指定的选项中,没有用户合适的选项.此时我们可以让用户填写. 刚开始文本框是隐藏的.当用户选择了checkbox之后才会显 ...
- WPF loading遮罩层 LoadingMask
原文:WPF loading遮罩层 LoadingMask 大家可能很纠结在异步query数据的时候想在wpf程序中显示一个loading的遮罩吧 今天就为大家介绍下遮罩的制作 源码下载 点击此处 先 ...
- MVC ActionResult派生类关系图
态度决定一切,我要改变的不仅仅是技术,还有对待事情的态度! 先上个图: 由上图可知,ActionResult为根节点,其下有很多子节点!下面简单介绍下: MVC中ActionResult是Action ...
- Luogu P3768 简单的数学题
非常恶心的一道数学题,推式子推到吐血. 光是\(\gcd\)求和我还是会的,但是多了个\(ij\)是什么鬼东西. \[\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)=\sum_ ...
- Libgdx学习记录28——创建Desktop程序
1.新建Java Project. 2.添加libs,添加相关的jar文件. 3. 在Project Build Path中,添加Reference. 4. 添加文件夹assets,并右键Build ...