matplotlib
参考MATLIB

from matplotlib import pyplot as plt
import random


x = range(0,120)
y = [random.randint(20,30) for i in range(120)]

plt.figure(figsize=(18,8),dpi=50)


plt.xticks(x[::10])
plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
import random
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
#调整x轴的刻度 字符串hello(i)与i对应
#_x = x  对x进行强制类型转换
_x = list(x)[::20]
_xtickslabels = ["hello{}".format(i) for i in _x]
plt.xticks(_x,_xtickslabels)

plt.plot(x,y)
plt.show()
from matplotlib import pyplot as plt
import random
import matplotlib

matplotlib.rc#python Ctrl+B看源码
x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#调整x轴的刻度 字符串hello(i)与i对应
#_x = x  对x进行强制类型转换
_x = list(x)
_xtickslabels = ["10点{}分".format(i) for i in range(60)]
_xtickslabels += ["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::10],_xtickslabels[::10],rotation=45)#rotation为旋转角度
plt.show()
#2linux系统下常用的命令 fc-list :
from matplotlib import pyplot as plt
import random
import matplotlib#windows和linux设置字体
from matplotlib import font_manager

#一定可设置中文
#my_font = font_manager.FontPropereties(fanme="")#文件字体的位置

#windows和Linux设置字体的方式
matplotlib.rc("font",family="monospace",weight="bold")#等效下几行代码
#font={'family':'monospace'
#      'weight':'bold'
#      'size':'larger'
# }
#matplotlib.rc("font",**font)#python Ctrl+B看源码

x = range(0,120)
y = [random.randint(20,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)

#_x = x  对x进行强制类型转换
_x = list(x)
_xtickslabels = ["10点{}分".format(i) for i in range(60)]
_xtickslabels += ["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(_x[::10],_xtickslabels[::10],rotation=45)#rotation为旋转角度 fontproperties=my_font
plt.show()
#折线图
from matplotlib import pyplot as plt
from matplotlib import font_manager
#my_font = font_manager.FontPropereties(fanme="")#文件字体的位置

#一个男生20岁到24岁谈的女朋友的数量
y1 = [0,1,3,1,2]
y2 = [0,8,5,4,3]
x = range(20,25)

plt.plot(x,y1,label="The First Guy",color="cyan")
plt.plot(x,y2,label="Second",linestyle="-.",color = "#DB7093")
xtickslabel=["{}years old".format(i) for i in x]
plt.xticks(x,xtickslabel,rotation=45)

plt.xlabel("age")
plt.ylabel("num of girl friends")
plt.title("name of picture")

plt.grid(alpha=0.5,linestyle=":")#alpha设置透明度,linestyle...
plt.legend()#(prop=my_font,loc=0)位置最好0=“best”,看源码查看位置 
plt.show()
#散点图
from matplotlib import pyplot as plt
from matplotlib import font_manager
#myfont=font_manager.FontPropereties(fname="文字字体的路径")

y3 = [11,17,16,19,23]
y10 = [21,17,18,15,13]

x3 = range(5)
x10= range(15,20)

plt.scatter(x3,y3,label="Match")
plt.scatter(x10,y10,label="Oct")
plt.legend()#loc prop

x = list(x3)+list(x10)
xticklabels = ["3.{}".format(i+1) for i in x3]
xticklabels += ["12.{}".format(i-14) for i in x10]

plt.xticks(x,xticklabels,rotation=45)
plt.xlabel("date")
plt.ylabel("temperature")
plt.title("hah")
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager

#my_font = font_manager.FontProperetation(fname="")
a=["QQ","VX","facebook"]
b=[12,13.6,11]

plt.bar(range(3),b,width=0.3)

plt.xticks(range(3),a)
plt.show()
from matplotlib import pyplot as plt
from matplotlib import font_manager

#my_font = font_manager.FontProperetation(fname="")
a=["QQ","VX","facebook"]
b=[12,13.6,11]

plt.barh(range(3),b,height=0.3)

plt.yticks(range(3),a)
plt.grid()
plt.show()

numpy
列表和数组的区别:数组要求数据类型一致。
数据维度的python表述:
一维数组:列表和集合类型。列表有序,集合无序。
二维数组:列表类型
多维维数组:列表类型
高维数据(仅使用最基本的二元关系展示数据间的复杂结构):字典类型、数据表示格式。

numpy是一个开源的python科学计算基础库。
  ❀一个强大的n维数组对象 ndarray
  ❀广播功能函数
  ❀整合C /C++/Frotran代码的工具
  ❀线性代数、傅里叶变换、随机数生成功能
numpy是Scipy和panas等数据处理和科学计算库的基础

ndarray
数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据。
优化 快 节省存储空间。
一般情况要求元素类型相同。
轴(axis)保存数据的维度
秩(rank)轴的数量
ndarray对象的属性
.ndim 秩,即轴的数量或维度的数量
.shape ndarray对象的尺度,对于矩阵,n行m列
.size ndarray 对象元素的个数,相当于.shape中的n*m
.dype ndarray对象的元素类型
.itemsize ndarray对象中每个元素的大小,以字节为单位

import numpy as np

t1 = np.array([1,2,3]);
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(t2)
print("*"*100)
import numpy as p
t3 = np.arange(10)
print(t3)
print(type(t3))
print(t3.dtype)
#设置数据类型
t4 = np.array(range(10),dtype="float32")
print(t4)
print(type(t4))
print(t4.dtype)

#调整数据类型
t5=t4.astype("int32")
print(t5.dtype)
import numpy as np
import random

#取小数
t6 = np.array([random.random()for i in range(10)])
print(t6)

#取小数点
t7 = np.round(t6,2)
print(t7)

# round(random.randm(),3)

np.arange(n) 类似range()函数,返回ndarray类型,元素从0到n-1
np.ones(shape) 根据shape生成一个全1数组,shape是元组类型
np.zeros(shape) 根据shape生成一个全0数组,shape是元组类型
np.full(shape,val) 根据shape生成一个全val数组,shape是元组类型
np.eye(n) 创建一个正方形的n*n单位矩阵,对角线为1,其余为0.
np.linspace() 根据起止数据等间距地填充数据,形成数组
np.concatenate() 将两个或多个数组合并成一个新的数组
.reshape(shape) 不改变数组元素,返回一个shape形状的数组,原数组不变
.resize(shape) 与.reshape()功能一致,但修改原数组
.swapaxes(ax1,ax2) 将数组n个维度中两个维度进行调换
.flatten() 对数组进行降维,返回折叠后的一维数组,原数组不变
a.tolist

ndarray的索引和切片
索引:获取数组中特定位置元素的过程
切片:获取数组元素子集的过程
参考matlib

CSV的文件存取
np.savetxt(frame,array,fmt=’%.18e’,delimiter=None)
frame:文件、字符串或产生器,可以是.gz或.bz2的压缩文件
array:存入文件的数组
fmt:写入文件的格式。例如:%d、%.2f、%,18e。
delimiter:分割字符串,默认是空格。

np.loadtxt(frame,dype=np.float,delimiter=None,unpack=False)
dtype:数据类型,可选
unpack:如果True,读入属性将分别写入不同变量

CSV只能存储一维和二维数据
多维数据的存储

a.tofile(frame,sep=’’,format=’%s’)
frame:文件、字符串
sep:数据分割字符串,如果是空船,写入文件为二进制。
format:写入数据的格式

np.fromfile(frame, dtype=float, count=-1, sep=")
々frame:文件、字符串。
々dtype:读取的数据炎型。
々count:读入元素个数,-1表示連人整个文件。
々sep:数据分割字符串,如果是空串,写人文件カ二迸制。

NumPy的便捷文件存取
np.save(fname, array或np.savez(fname, array)
frame: 文件名,以.npy为扩展名,压缩扩展名为.npz
array;数组变量
np.load(fname)
必frame:文件名,以.npy为扩展名,压缩扩展名为.npz

NUMPY库的随机数函数
np.random的随机数函数
rand(d0,d1,…,dn) 根据d0-dn创建随机数数组,浮点数,[0,1), 均匀分布
randn(d0.d1…dn)根 据d0-dn创建随机数数组,标准正志分布
randint(low[,high,shape]) 根据shape创建随机整数或整数数组,范围是[low, high)
seed(s)随机数种子, s是给定的种子值
shuffle(a) 根据数组a的第一轴进行随排列,改变数组x
permutation(a)根据数组a的第一轴产生一个新的乱序数组,不该比那数组x
choice(a[,size,replace,p]) 从一维数组a中以概率p抽取元素,形成size形状新
数组replace表示是否可以重用元素,
shuffle(a) 根据数组a的第1轴进行随排列,改变数组x
permutation(a)

choice(al,size,replace,pl)
根据数组a的第1轴进行随排列,改变数组x
根据数组a的第1轴产生一个新的乱序数组,不改变数组x从一维数组a中以概率p抽取元素,形成size形状新数组replace表示是否可以重用元素,默认为False
uniform(low,high,size)产生具有均匀分布的数组,low起始值,high结束值,size形状
nornal(loc,scale,size) 正态分布,均值、标准差、形状
poisson(lam,size) 泊松的分布 随机事件概率、形状

numpy的统计函数
sum(a,axis=None)
mean(a,axis=None)
average(a,axis=None)
std(a,axis=None)方差
var(a,axis=None)标准差
min() max()
argmin() argmax() 计算数组a中元素最小值、最大值的降一维后下标
unravel()_index(index,shape) 根据shape将一维下标index转换成多维下标
ptp(a) 计算数组a中元素最大值与最小值的差
median(a) 计算数组a中元素的中位数(中值)

numpy的梯度函数
np.gradient(f)计算数组中元素的梯度,当f为多维时,返回每个维度梯度(看,斜率)

pandas库
http://pandas.pydata.org Pandas是pythond的第三方库,提供高性能易用数据类型和分析工具。
pandas是基于numpy实现的扩展库
pandas数据类型
series和dataframe
基本操作、运算操作、特征类操作、关联类操作

numppy

pandas

基础数据类型ndarray

扩展数据类型series、datafram

关注数据的结构表达

数据的应用表达



维度:数据间的关系

数据与索引间关系

series类型
series类型是由一组数据以及与数据相关的索引组成
一维的带标签的数组

import pandas as pd
a = pd.Series(range(20))
print(a)
b = a.cumsum()
print(b)
``
0      0
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10    10
11    11
12    12
13    13
14    14
15    15
16    16
17    17
18    18
19    19
dtype: int64
0       0
1       1
2       3
3       6
4      10
5      15
6      21
7      28
8      36
9      45
10     55
11     66
12     78
13     91
14    105
15    120
16    136
17    153
18    171
19    190
dtype: int64


import pandas as pd
c = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(c)

a    9
b    8
c    7
d    6
dtype: int64

Series类型可由如下类型创建:
python列表
标量值

import pandas as pd
s = pd.Series(22,index=['a','b','c'])
print(s)


a    22
b    22
c    22
dtype: int64

python字典

#字典类型创建Series类型
import pandas as pd
s=pd.Series({'a':9,'b':8,'c':7})
print(s)

a    9
b    8
c    7
dtype: int64
#字典类型创建Series类型
#index指定Series的结构
import pandas as pd
e = pd.Series({'a':9,'b':8,'c':7},index=['c','a','b','d'])
print(e)

c    7.0
a    9.0
b    8.0
d    NaN
dtype: float64

ndarray

#用numpy类型创建Series类型
import numpy as np
import pandas as pd

f = pd.Series(np.arange(3))
print(f)
0    0
1    1
2    2
dtype: int32
#用numpy类型创建Series类型
import numpy as np
import pandas as pd

m = pd.Series(np.arange(5),index=np.arange(9,4,-1))
print(m)

其他函数

Series基本操作
.index
.values
自动索引和自定义索引并存,不能混用
.name

import pandas as pd
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(b.index)
print(b.values)
print(b['b'])

Index(['a', 'b', 'c', 'd'], dtype='object')
[9 8 7 6]
8
import pandas as pd
b = pd.Series([9,8,7],['a','b','c'])
b.name='孙玉的Series索引对象'
b.index.name='索引列'
print(b)

索引列
a    9
b    8
c    7
Name: 孙玉的Series索引对象, dtype: int64

索引和切片

import pandas as pd
b = pd.Series([9,8,7,6],index=['a','b','c','d'])
print(b.index)
print(b.values)
print(b['b'])
print(b[0])
print("********************")
print(b[b>b.median()])

Index(['a', 'b', 'c', 'd'], dtype='object')
[9 8 7 6]
8
9
********************
a    9
b    8
dtype: int64
import pandas as pd
a = pd.Series([1,1,1],index=['b','c','d'])
b = pd.Series([1,1,1],index=['a','b','c'])
print(a+b)

a    NaN
b    2.0
c    2.0
d    NaN
dtype: float64

dataframe数据类型
dataframe类型由共同相同索引的一组列组成
DataFrame是一个表格型的数据类型,每列值类型可以不同
DATaFrame既有行索引index、也有列索引(纵向索引index,横向索引column)
DataFrame常用于表达二维数据,但也可表达多维数据
DataFrame类型可以由如下类型创建
二维ndarray对象
由一维ndarray、列表、字典、元组或Series构成的字典
Series类型
其他的DataFrame类型

import pandas as pd
a = pd.Series([1,1,1],index=['b','c','d'])
b = pd.Series([1,1,1],index=['a','b','c'])
print(a+b)

  0  1  2  3  4
0  0  1  2  3  4
1  5  6  7  8  9

二维ndarray对象

import pandas as pd
import numpy as np
d = pd.DataFrame(np.arange(10).reshape(2,5))
print(d)

   one  two
a    1    4
b    2    5
c    3    6

** **

import pandas as pd
dt = {'one':pd.Series([1,2,3],index=['a','b','c']),
      'two':pd.Series([4,5,6],index=['a','b','c'])
     }
d = pd.DataFrame(dt)
print(d)
dd=pd.DataFrame(d,index=['b','c','d'],columns=['two','three'])
print(dd)

   one  two
a    1    4
b    2    5
c    3    6
   two  three
b  5.0    NaN
c  6.0    NaN
d  NaN    NaN
import pandas as pd
d = pd.DataFrame({'one':pd.Series([1,2,3],index=['a','b','c']),
      'two':pd.Series([4,5,6],index=['a','b','c'])
     })
print(d)



   one  two
a    1    4
b    2    5
c    3    6

如何改变Series和pandas的结构
增加、重排:重新索引   .reindex
删除:drop