利用Python进行数据分析(一)
- 一、IPython及Python基础
- 1、数据科学中的术语
- 2、IPython 基础
- Tab补全
- 内省
- %load
- 执行剪贴板中的程序
- IPython快捷键
- IPython魔术命令
- 3、Python 语法基础
- 代码块缩进
- 注释
- 函数和对象方法调用
- 变量和参数传递
- 动态引用、强类型
- 属性和方法
- 导入
- 比较运算
- 可变对象与不可变对象
- 标量类型
- 类型转换
- 日期和时间
- 控制流
- 三元表达式
一、IPython及Python基础
1、数据科学中的术语
规整: 将非结构化或者同时也很凌乱的数据整理成结构化、清晰形式的过程。
语法糖: 并不增加新特性,但有利于代码编写的编程语法。
2、IPython 基础
Tab补全
Tab 键自动补全代码(变量名)、库函数(datetime.<Tab>)、系统路径(/<Tab>)
内省
在一个变量名前后使用 ? 可以显示关于该对象的概要信息
a=[1,2,3];a?
output:
Type: list
String form: [1, 2, 3]
Length: 3
Docstring:
list() -> new empty list
list(iterable) -> new list initialized from iterable's items
%load
将脚本导入一个代码单元
#test.py
def f(x,y,z):
return (x+y)/z
%load test.py
output:
def f(x,y,z):
return (x+y)/z
执行剪贴板中的程序
%paste获得剪贴板中全部的文本,并作为一个代码块执行
%cpaste与之类似,但会提示让你粘贴代码,并以–结束
IPython快捷键
命令 | 说明 |
Ctrl -P或上箭头键 | 以当前输入内容开始,向后搜索历史命令 |
Ctrl-N或下箭头键 | 以当前输入内容开始,向前搜索历史命令 |
Ctrl-R | 按行读取的反向历史搜索 |
Ctrl-Shift-v | 从剪贴板粘贴文本 |
Ctrl-C | 中止当前正在执行的代码 |
Ctrl-A | 将光标移动到行首 |
Ctrl-E | 将光标移动到行尾 |
Ctrl-K | 删除光标后本行的所有内容 |
Ctrl-U | 删除当前行 |
Ctrl-F | 将光标向前移动一个字符 |
Ctrl-b | 将光标向后移动一个字符 |
Ctrl-L | 清屏 |
IPython魔术命令
%timeit 可以检查一段Python语句执行的时间
import numpy as np
%timeit np.dot(a,a)
a=[1,2,3];
output:
2.51 µs ± 92.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
3、Python 语法基础
代码块缩进
Python使用缩进来表示一个代码块,而不是大括号。冒号表示缩进代码块的开始。单个代码块中的所有代码必须保持相同的缩进。
for x in array:
if x<pivot:
less.append(x)
else:
greater.append(x)
注释
以 # 开头
Ctrl+1 注释/反注释快捷键(Spyder)
函数和对象方法调用
result=f(a,b,c,d=5,e='foo')
变量和参数传递
a=[1,2,3]
b=a
a.append(4)
print(b)
result :
[1, 2, 3, 4]
此时a 、b 两个引用指向一个对象,赋值操作也被称为绑定 。
当将对象作为参数传给函数时,指向原始对象的新的本地变量就会被创建而无需复制,如果你将一个新的对象绑定到一个函数的内部变量上时,这种变更不会在上级范围中产生影响。因此,更换可变参数的内部值是可以做到的.
def append_element(lista,element):
lista.append(element)
data=[1,2,3]
append_element(data,4)
print(data)
result :
[1, 2, 3, 4]
动态引用、强类型
Python中的对象引用并不涉及类型,以下操作是没有问题的:
a=5
type(a)
#int
a='foo'
type(a)
#str
类型信息是存储于对象自身之中的,如下操作会报错:
'5'+5
# TypeError: must be str, not int
了解对象的类型是十分重要的,可以使用 isinstance 函数来检查对象是否是一个类型的特定实例。
a=4;b=4.5;
isinstance(a,int)
#True
isinstance(a,(int,float))
#True
isinstance(b,(int,float))
#True
属性和方法
Python中的对象一般都会有属性(Python对象内部存储的其他对象)和方法(与对象内部对象有关的函数),属性和方法都可以用刑辱obj.attribute_name的语法进行调用。
a='foo'
a.<Press Tab>
导入
# Test.py
PI = 3.14159
def f(x):
return x+2
def g(a,b):
return a+b
import Test as t
from Test import PI as pi,g as gf
result=Test.f(5)
result=t.f(5)
result=gf(5,3)
比较运算
a=[1,2,3]
b=a
c=list(a)
a==b
# True
a is b
# True
a==c
# True
a is c
# False
可变对象与不可变对象
可变对象中包含的对象和值是可以被修改的,如:
a_list=['foo',2,[4,5]]
a_list[2]=(3,4)
a_list
# ['foo', 2, (3, 4)]
不可变对象不可以被修改:
a_tuple=(3,5,(4,5))
a_tuple[1]='four'
# TypeError: 'tuple' object does not support item assignment
可变对象 | 不可变对象 |
列表、字典、 Numpy 数组 | 字符串、元组 |
标量类型
类型 | 描述 |
None | Python中的"null"值(只存在一个实例) |
str | 字符串类型(3个单引号或者3个双引号可以保存多行字符串) |
bytes | 原生ASCII字节 |
float | 双精度64位浮点数值(整数除法会自动转型为浮点数) |
bool | True或者False |
int | 任意精度无符号整数(可以存储任意大小数字) |
类型转换
s='3.14159'
fval=float(s)
# 3.14159
int(fval)
# 3
bool(fval)
# True
bool(0)
# False
日期和时间
datetime 模块提供了datetime、date和time类型,详见p48,。
from datetime import datetime,date,time
dt=datetime(2020,1,14,16,45,30)
dt.day
# 14
dt.minute
# 45
dt.date()
# datetime.date(2020, 1, 14)
dt.time()
# datetime.time(16, 45, 30)
控制流
if-elif-else 条件控制语句
a=-5;
if a>0:
print("正")
elif a<0:
print("负")
else:
print(0)
# 负
for 循环
遍历一个集合或一个迭代器。
for x in range(5):
print(x)
# 0
# 1
# 2
# 3
# 4
while 循环
x=4
while x>0:
print(x)
x-=1
# 4
# 3
# 2
# 1
pass
pass 就是什么都不做,用于表示代码段中不需要执行任何操作或者作为还没有实现的代码占位符
a=-5;
if a>0:
print("正")
elif a<0:
# print("负")
pass
else:
print(0)
# 此时没有输出
三元表达式
# value=true-expr if condition else false-expr
x=5
'Non-Nagative' if x>=0 else 'Nagative'
# 'Non-Nagative'