anaconda集成了工具包,适合入门,python比较少东西
pip镜像:
pip3 install statsmodels -i https://pypi.tuna.tsinghua.edu.cn/simple
基础语法
数据类型
Number(数字):int、float、bool、complex(复数)
String(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
type(a)
isinstance(a, int)
字符串
不可改变
```
多行字符串
啦
```
转义符 \
'a' + 'b'
'a' * 3
索引方式:
左往右0开始,右往左-1开始
a[头下标:尾下标:步长]
print(str[0:-1]) # 输出第一个到倒数第二个的所有字符
print(str[2:]) # 输出从第三个开始后的所有字符
print(str[1:5:2]) # 输出从第二个开始到第五个且每隔一个的字符(步长为2)
print(r'hello\nrunoob') # 在字符串前面添加一个 r,表示原始字符串,不会发生转义
list
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']
print (list[1:3]) # 从第二个开始输出到第三个元素
print (list[2:]) # 输出从第三个元素开始的所有元素
print (tinylist * 2) # 输出两次列表
print (list + tinylist) # 连接列表
a[2:5] = [13, 14, 15]
a[2:5] = [] # 将对应的元素值设置为 []
inputWords[-1::-1] # 倒序 runoob like I
Tuple
元组不可更改,其他与list类似
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 )
tinytuple = (123, 'runoob')
print (tuple + tinytuple) # 连接元组
Set
不重复的set
sites = {'Google', 'Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu'}
print(sites) # 输出集合,重复的元素被自动去掉
# 成员测试
if 'Runoob' in sites :
print('Runoob 在集合中')
else :
print('Runoob 不在集合中')
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a - b) # a 和 b 的差集
print(a | b) # a 和 b 的并集
print(a & b) # a 和 b 的交集
print(a ^ b) # a 和 b 中不同时存在的元素
字典
key,value
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
类型转换
以下几个内置的函数可以执行数据类型之间的转换。这些函数返回一个新的对象,表示转换的值。
函数 | 描述 |
---|---|
int(x [,base]) | 将x转换为一个整数 |
float(x) | 将x转换到一个浮点数 |
complex(real [,imag]) | 创建一个复数 |
str(x) | 将对象 x 转换为字符串 |
repr(x) | 将对象 x 转换为表达式字符串 |
eval(str) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s) | 将序列 s 转换为一个元组 |
list(s) | 将序列 s 转换为一个列表 |
set(s) | 转换为可变集合 |
dict(d) | 创建一个字典。d 必须是一个 (key, value)元组序列。 |
frozenset(s) | 转换为不可变集合 |
chr(x) | 将一个整数转换为一个字符 |
ord(x) | 将一个字符转换为它的整数值 |
hex(x) | 将一个整数转换为一个十六进制字符串 |
oct(x) | 将一个整数转换为一个八进制字符串 |
数据分析
NumPy
支持纬度数组和矩阵运算,对数组运算提供数学函数库
- 强大的N纬数组对象ndarray
- 广播函数
- 整合C、C++代码的工具
- 线性代数、傅里叶变换,随机数生成等
pip3 install numpy scipy matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
>>> from numpy import *
>>> eye(4)
array([[1., 0., 0., 0.],
[0., 1., 0., 0.],
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
Ndarray对象
同类型数组的集合,0下标开始
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
# 多于一个维度
import numpy as np
a = np.array([[1, 2], [3, 4]])
print (a)
[1 2 3]
a = np.array([1, 2, 3], dtype = complex)
print (a)
[1.+0.j 2.+0.j 3.+0.j]
数据类型
数据类型对象dtype
描述与数组对应的内存区域怎么使用
- 数据的类型(整数,浮点数或者 Python 对象)
- 数据的大小(例如, 整数使用多少个字节存储)
- 数据的字节顺序(小端法或大端法)
- 在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取的内存块的部分
- 如果数据类型是子数组,那么它的形状和数据类型是什么。
numpy.dtype(object, align, copy)
- object - 要转换为的数据类型对象
- align - 如果为 true,填充字段使其类似 C 的结构体。
- copy - 复制 dtype 对象 ,如果为 false,则是对内置数据类型对象的引用
# 使用标量类型
dt = np.dtype(np.int32)
print(dt)
int32
# int8, int16, int32, int64 四种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替
dt = np.dtype('i4')
print(dt)
int32
import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50),('xyz', 18, 75)], dtype = student)
# [('abc', 21, 50.0), ('xyz', 18, 75.0)]
print(a)
int8, int16, int32, int64 四种数据类型可以使用字符串 ‘i1’, ‘i2’,’i4’,’i8’ 代替
字符 | 对应类型 |
---|---|
b | 布尔型 |
i | (有符号) 整型 |
u | 无符号整型 integer |
f | 浮点型 |
c | 复数浮点型 |
m | timedelta(时间间隔) |
M | datetime(日期时间) |
O | (Python) 对象 |
S, a | (byte-)字符串 |
U | Unicode |
V | 原始数据 (void) |
数组属性
数组的纬度成为秩(轴的数量),二维数组的秩为2
ndarray对象的属性:
属性 | 说明 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于矩阵,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。 |
a = np.arange(24)
print (a.ndim) # a 现只有一个维度
# 现在调整其大小
b = a.reshape(2,4,3) # b 现在拥有三个维度
print (b.ndim)
a = np.array([[1,2,3],[4,5,6]])
print (a.shape)
# (2, 3)
a = np.array([[1,2,3],[4,5,6]])
a.shape = (3,2)
#or a = a.reshape(3,2)
print (a)
[[1 2]
[3 4]
[5 6]]
Pandas
pip install pandas
import pandas
pandas.__version__ # 查看版本
Series
表格中的一列,一维数组,任何类型
pandas.Series( data, index, dtype, name, copy)
- data:一组数据(ndarray 类型)。
- index:数据索引标签,如果不指定,默认从 0 开始。
- dtype:数据类型,默认会自己判断。
- name:设置名称。
- copy:拷贝数据,默认为 False。
Pandas 数据结构 – Series | 菜鸟教程 (runoob.com)
NumPy 数组属性 | 菜鸟教程 (runoob.com)
DataFrame
表格型的数据结构
D天
da.date_range('2016/7/1', 10, freq = '3D')
,频率默认是天
过滤
time.truncate(before='---', after='xxx')
数据重采样
- 时间频率转换
pd.date_range('x/x/x', periods=90, freq='D')
ts=pd.Series(np.random.randn(len(rng)), index=rng)
ts.resample('M').sum()
基本方法
df.count() #非空元素计算
df.min() #最小值
df.max() #最大值
df.idxmin() #最小值的位置,类似于R中的which.min函数
df.idxmax() #最大值的位置,类似于R中的which.max函数
df.quantile(0.1) #10%分位数
df.sum() #求和
df.mean() #均值
df.median() #中位数
df.mode() #众数
df.var() #方差
df.std() #标准差
df.mad() #平均绝对偏差
df.skew() #偏度
df.kurt() #峰度
df.describe() #一次性输出多个描述性统计指标
fillna(value, inplace=True),直接用value覆盖原值的缺失值
csv
header | int或者int列表,默认由推断出来。这是用于规定列名的行号。 |
---|---|
names | 类似于数组结构,选择性使用。这是要使用的列名称列表,与header共同使用。 |
index_col | 整数或者字符串或者整数/字符串列表。指定用作的行标签的列。 |