利用Python进行数据分析-学习笔记一

利用Python进行数据分析-学习笔记一

chapter 1 Python语言基础,IPython及Jupyter Notebook

Python是一种解释型语言,Python解释器通过一次执行一条语句来运行程序。标准的交互式Python解释器可以通过在命令行中输入Python启动:

$ python
Python 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 5
>>> print(a)
5

在命令汉字行看到的>>>提示符是键入代码的地方。要退出Python解释器回到命令行提示符,可以输入exit()或者按下Ctrl-D

通过python命令,再把.py文件作为第一个参数就可以非常方便的的运行Python程序。假设我们已经写好了一个叫做hello_world.py的文件:

print("hello world")

执行以下命令去运行程序(hello_world.py必须在命令行的当前路径下):

$ python hello_world.py
Hello world

下面来简单介绍ipython:ipython是一个加强版的python解释器,当使用%run命令时,ipython会在同一个进程内执行指定文件的代码,确保你在执行完成时可以立即探索执行结果。

$ ipython
Python 3.6.0 | packaged by conda-forge | (default, Jan 13 2017, 23:17:12)
Type "copyright", "credits" or "license" for more information.

IPython 5.1.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: %run hello_world.py
Hello world

In [2]:
IPython基础
运行IPython命令行
import numpy as np
data = {i : np.random.randn() for i in range(7)}
data

结果:

1:-0.8445343866158372,
2:1.2539550827346986,
3:-0.4716165071892965,
4:1.4871738066920603,
5:0.12535112214383046,
6:-2.0241679120500202}```

常见的print打印语句不同,IPython中大多数Python对象被格式化为更可读,更美观的形式。

from numpy.random import randn 
data = {i : randn() for i in range(7)} 
print(data) 
{0: -1.5948255432744511, 1: 0.10569006472787983, 2: 1.972367135977295, 3: 0.15455217573074576, 4: -0.24058577449429575, 5: -1.2904897053651216, 6: 0.3308507317325902}
运行Jupyter notebook

启动Jupyter

$ jupyter notebook
[I 15:20:52.739 NotebookApp] Serving notebooks from local directory:
/home/wesm/code/pydata-book
[I 15:20:52.739 NotebookApp] 0 active kernels
[I 15:20:52.739 NotebookApp] The Jupyter Notebook is running at:
http://localhost:8888/
[I 15:20:52.740 NotebookApp] Use Control-C to stop this server and shut down
all kernels (twice to skip confirmation).
Created new window in existing browser session.

界面如下所示:
主界面
右上角点击新建按钮选择Python3即可新建一个笔记本
在这里插入图片描述
输入一行python代码,然后按下Shift-EnterCtrl-Enter来执行。

Tab补全

当在命令行输入表达式时,按下键即可为任意变量(对象,函数等)搜索命名空间,与你目前输入的字符串进行匹配:

In [1]: an_apple = 27

In [2]: an_example = 42

In [3]: an<Tab>

在这里插入图片描述

内省

在一个变量名前的前后使用**?**可以显示一些关于该对象的概要信息:

In [8]: b = [1, 2, 3]

In [9]: b?
Type:       list
String Form:[1, 2, 3]
Length:     3
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items

In [10]: print?
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
Type:      builtin_function_or_method

这就是对象内省。

%run命令

可以在IPython会话中使用**%run**命令运行任意的Python程序文件。

例如在ipython_script_test.py中有如下脚本:

def f(x, y, z):
    return (x + y) / z

a = 5
b = 6
c = 7.5

result = f(a, b, c)

运行该程序:

In [14]: %run ipython_script_test.py
In [15]: c
Out [15]: 7.5

In [16]: result
Out[16]: 1.4666666666666666

在Jupyter notebook中如果想将一个脚本文件导入一个代码单元,可以使用**%load**魔法函数

>>> %load ipython_script_test.py

    def f(x, y, z):
        return (x + y) / z

    a = 5
    b = 6
    c = 7.5

    result = f(a, b, c)
快捷键

Jupyter笔记本有两种不同的键盘输入模式. 编辑模式允许您将代码或文本输入到一个单元格中,并通过一个绿色的单元格来表示 命令模式将键盘与笔记本级命令绑定在一起,并通过一个灰色的单元格边界显示,该边框为蓝色的左边框。在这里我只罗列编辑模式的快捷键:

编辑模式(按 Enter 生效)

Tab : 代码完成或缩进

Shift-Tab : 工具提示

Ctrl-] : 缩进

Ctrl-[ : 取消缩进

Ctrl-A : 全选

Ctrl-Z : 撤销

Ctrl-/ : 评论

Ctrl-D : 删除整行

Ctrl-U : 撤销选择

Insert : 切换 重写标志

Ctrl-Home : 跳到单元格起始处

Ctrl-上 : 跳到单元格起始处

Ctrl-End : 跳到单元格最后

Ctrl-下 : 跳到单元格最后

Ctrl-左 : 跳到单词左边

Ctrl-右 : 跳到单词右边

Ctrl-删除 : 删除前面的单词

Ctrl-Delete : 删除后面的单词

Ctrl-Y : 重做

Alt-U : 重新选择

Ctrl-M : 进入命令行模式

Ctrl-Shift-F : 打开命令配置

Ctrl-Shift-P : 打开命令配置

Esc : 进入命令行模式

Shift-Enter : 运行代码块, 选择下面的代码块

Ctrl-Enter : 运行选中的代码块

Alt-Enter : 运行代码块并且插入下面

Ctrl-Shift-Minus : 在鼠标出分割代码块

Ctrl-S : 保存并检查

下 : 光标下移

上 : 光标上移

常用魔术命令

在代码块里输入**%magic**可获得所有可用魔术命令的详细文档。

在这里插入图片描述

matplotlib集成

在Ipython命令行中,运行%matplotlib命令可以生成多个绘图窗口,而不干扰控制台的对话。

In [26]: %matplotlib
Using matplotlib backend: Qt4Agg

在Jupyter notebook中使用

In [26]: %matplotlib inline
Python语言基础
语言语义
缩进

Python使用缩进(tab或者空格)来组织代码,一个冒号代表一个缩进代码块的开始,单个代码块中所有的代码必须保持相同的缩进,直到代码块结束。

for x in array:
    if x < pivot:
        less.append(x)
    else:
        greater.append(x)
注释

Python用**#**表示注释,不执行#后的语句

有时候像排除掉部分代码又不想删除,这时候就可以使用#注释掉相应语句

results = []
for line in file_handle:
    # keep the empty lines for now
    # if len(line) == 0:
    #   continue
    results.append(line.replace('foo', 'bar'))

写在语句的后面,说明语句含义

print("Reached this line")  # Simple status report
函数和对象调用的方法

调用函数时,向函数括号里传递0或多个参数,通常会把返回值赋值给一个变量;

result = f(x, y, z)
g()
变量和参数传递

在Python中对一个变量赋值时,就创建了一个指向等号右边对象的引用。例如:

a=[1,2,3]
b=a
a.append(4)
b
Out[1]: [1,2,3,4]

在Python中,a,b实际指向了相同的对象,即原来的[1,2,3]

导入

在Python中,模块就是以.py为后缀名并包含python代码的文件,假设我们有以下模块;

# some_module.py
PI = 3.14159

def f(x):
    return x + 2

def g(a, b):
    return a + b

假如我们想从另一个相同路径下的文件连接到some_module.py中定义的变量或函数,我们需要:

import some_module 
result = some_module.f(5) 
pi = some_module.PI

或者

from some_module import f, g, PI 
result = g(5, PI)

通过使用as关键词,对导入内容给予不同的变量名

import some_module as sm 
from some_module import PI as pi, g as gf
r1 = sm.f(pi) r2 = gf(6, pi)
二元运算符和比较运算
操作符描述
a + b
a - b
a * b
a / b除以
a // b整除以
a ** ba的b次方
a & b
a | b
a ^ b对布尔值,a异或b;对整数则是按位异或
a == b相等则为Rrue
a != b不等则为True
a <=b, a < b小于等于,小于
a >=b,a > b大于等于,大于
a is ba,b是同一个对象则为True
a is not ba,b不是同一个对象则为True
可变对象与不可变对象

Python中的大部分对象,例如列表,字典,Numpy数组都是可变对象,大多数用户定义的类型也是可变的。可变对象中包含的对象和值是可以被修改的;

a_list = ['foo', 2, [4, 5]]
a_list[2] = (3, 4)
a_list

Out[]: ['foo', 2, [4, 5]]

字符串和元组不可改变:
在这里插入图片描述

标量类型
类型描述
Nonenull
str字符串类型
byte原生ASCII类型(或者Unicode编码字节)
float双精度64位浮点数值
bool布尔值,true 或false
int任意精度无符号整数
字符串

用单引号或者双引号创建一个字符串:

a = 'one way of writing a string' 
b = "another way"

对于含有换行的多行字符串,可以使用三个单引号**’’'或者三个双引号"""**:

c = """
This is a longer string that
spans multiple lines
"""

可以使用count方法来计算c的回车符:

c.count('\n')
3

很多python对象可以通过str函数转成字符串:

a = 5.6
s = str(a)
print(s)

字符串可别看作序列;

s = 'python'
list(s)
s[:3]

**s[:3]**这种语法被称为切片

类型转换
s = '3.14159'
fval = float(s)
type(fval)
out: float
int(fval)
out: 3
bool(fval)
out: True
bool(0)
out: False
None

None是null值类型。如果一个函数没有显式的返回值,那么它会隐式的返回None.

日期和时间

Python中内置的datatime模块,提供了datatime,data,time类型。

from datetime import datetime, date, time
dt = datetime(2011, 10, 29, 20, 30, 21)
dt.day
dt.minute

strftime方法将datatime转化为字符串:

dt.strftime('%m/%d/%Y %H:%M')

strptime将字符串转化为datatime对象:

datetime.strptime('20091031', '%Y%m%d')
控制流
if,elif,else
  if x < 0: 
      print('It's negative')
  
  if x < 0: 
            print('It's negative') 
                  elif x == 0: 
                  print('Equal to zero') 
                  elif 0 < x < 5: 
                  print('Positive but smaller than 5') 
                  else: 
                  print('Positive and larger than or equal to 5')
  
for循环

for循环用于遍历一个集合或一个迭代器。语法如下所示:

for value in collection:

# do something with value

使用continue关键字可以跳过continue之后的代码进入下一次循环。例如对列表中的非null值进行累加:

sequence = [1, 2, None, 4, None, 5] 
total = 0 
for value in sequence: 
    if value is None: 
        continue 
        total += value

break关键字可以结束一个for循环。以下代码会对列表元素累加,直到5出现:

sequence = [1, 2, 0, 4, 6, 5, 2, 1] 
total_until_5 = 0 
for value in sequence: 
    if value == 5: 
        break 
        total_until_5 += value
while循环

while循环会在条件符合时一直执行代码块,知道条件判断为False或显式的以break结尾时才结束:

x = 256 
total = 0 
while x > 0: 
    if total > 500: 
        break 
        total += x 
        x = x // 2
pass

pass用于在代码段中表示不执行任何操作(或者是作为还没有实现的代码占位符)。

if x < 0: print('negative!') elif x == 0:

# TODO: put something smart here
pass

else: print('positive!')

整理自《利用Python进行数据分析》第二版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值