numpy
一个数值计算包
python列表与numpy矩阵区别
for循环 :[x+1 for x in a]
多个元素需要用zip捆绑:[x+y for(x,y) in zip(a,b)]
np.array()+1
各元素+1
a+b
各元素相加
a*b
矩阵相乘或者是各元素相乘
numpy矩阵
所有操作默认对行进行
生成方式
以行形式默认生成,也就是行向量
- 直接生成:
a = np.array([1,2,3,4])
和a = np.array([[0,1,2,3],[10,11,12,13]])
- 列表中产生数组:
a = np.array(l)
- 其他函数:
np.zeros(5)
和np.ones(5) #括号内传个数,默认浮点数
矩阵属性
- dtype:
np.ones(5,dtype="bool")
数组中要求所有元素的 dtype 是一样的 - astype:强制类型转换:
a = a.astype("float") #强制类型转换
-
总元素个数:
a.size
- 矩阵维度:
a.nidm
索引:
切片操作:
- 多维度切片:
a[0,3:5]
- 计算前缀和/差技巧:
ob = np.array([21000,21800,22240,23450,25000])
计算公式:ob2 = ob[1:]-ob[:-1]
函数:
注意这些函数传入参数都是numpy中的矩阵
对于多维数组,函数都是默认对行或者对所有元素进行操作
以下对行元素操作
- argsort函数:
np.sort(mv_num)
以下对所有元素操作
- 求和:
np.sum(mv_num)
- 均值:
np.mean(mv_length)
- 标准差:
np.std(mv_length)
-
相关系数矩阵:
np.cov(mv_score,mv_length)
注意传入两个行向量 - 转置:
a.T
Pandas
数据分析包,分为两种基本结构
Series 一维数组
DataFrame二维数组
Series
- 默认生成方式:
s = pd.Series([1,3,5,np.nan,6,8])
常见函数:
因为索引可以不是数值了,所以切片操作更加灵活了
- 输出数值:
s.values
DataFrame
- 默认生成方式:
df = pd.DataFrame(np.random.randn(6,4), index = date, columns = list("ABCD"))
数据集是一个np形式的矩阵,索引和列作为参数给出
常见函数
- 查看头尾数据:
df.head()
和df.tail(3)
默认为5 - 返回一个np矩阵:
df.values
Pandas读取和保存操作
- 读取excel表格,把index和column也读取进来:
df = pd.read_excel(r"C:\Users\Lovetianyi\Desktop\python\作业3\豆瓣电影数据.xlsx",index_col = 0)
- 存放至当前文件夹:``df.to_excel(“movie_data.xlsx”) `
*索引操作
注意pandas不调用iloc函数默认使用列索引
- 行索引:
df.iloc[0:5]
- 列索引:
df["名字"][:5]
和`df[[“名字”,“类型”]][:5] -
条件索引:
df[df["产地"] == "美国"][:5] #内部为bool
和df[(df.产地 == "美国") & (df.评分 > 9)][:5]
条件索引返回满足列条件的行,列索引返回的是对应列
*缺失值处理
排序操作
df.sort_values(by = "投票人数", ascending = False)[:5] #默认从小到大
注意dataframe结构的构成,中间的矩阵都是values
统计分析
描述性分析:df.describe()
给出一系列基本的统计值
统计性的函数
pandas默认对列进行求值,这点于numpy不同
Matplotlib可视化
matplotlib.pyplot包含一系列类似MATLAB中绘图函数的相关函数
绘图函数
- 显示图片:
plt.show()
一般不会直接显示图
绘制函数:plt.plot([1,2,3,4],[1,4,9,16],linewidth = 4.0,"ro")
**
- 属性如下:
- 线条属性
- 字符和类型属性
- 提前修改属性:plt.setp(line,“color”,‘r’,“linewidth”,4)
- 指定坐标轴:
plt.axis([xmin, xmax, ymin, ymax])
- 支持传入多张图:`
子图
figure是窗口,subplot是子图,
- 子图figure:
plt.figure(num)
这里,figure(1)其实是可以省略的,因为默认情况下plt会自动产生一幅图像。
t1 = np.arange(0.0,5.0,0.1)
t2 = np.arange(0.0,4.0,0.02)
plt.figure(figsize = (10,6))
plt.subplot(211)
plt.plot(t1,f(t1),"bo",t2,f(t2),'k') #子图1上有两条线
plt.subplot(212)
plt.plot(t2,np.cos(2*np.pi*t2),"r--")
plt.show()
具有统计意义图像绘制
直接看笔记查对应参数