过程:提出问题->准备数据->分析数据->获得结论->(成果可视化)
注:变量前带#表示可选项
matplotlib 数据可视化 折线图 1 2 3 4 5 from matplotlib import pyplot as plt 导入pyplot plt.plot(x,y) 绘制折线图 plt.show() 展示图形 .plot()其他属性:label,color,linestyle,linewidth,alpha plt.subplot(rows,clos,num)绘制多个子图,要求行数、列数、正在绘制第几张图参数
多次调用.plot()
函数可以在一个图形上绘制多个图形
设置展示细节 1 2 3 4 5 6 7 8 9 plt.figure(figsize=(20,8),dpi=80) figsize传入宽高,dpi传入清晰度 plt.savefig("") 传入地址保存图片 plt.xticks(x) 将x全部标注在x轴上(y轴同理) plt.xticks(x,x_list) 以x_list一一对应替换x plt.xticks(x,x_list,rotation=90) rotation旋转角度 plt.xlabel("content") x轴标注(y轴同理) plt.title("title") 表格标题 plt.grid(#alpha=0.4) 绘制网格 alpha表示透明度 plt.legend() 添加图例(需要在.plot(label="lab1")设置标签)
其他图形 1 2 3 4 plt.scatter(x,y) 绘制散点图 plt.bar(x,y) 绘制条形图 plt.barh(x,y) 绘制横状条形图 plt.hist(a, num_bins) 绘制直方图 num_bins:分成的组数
其他绘图工具 ploty,百度echarts等
numpy 创建数组 1 2 3 4 5 6 7 import numpy as np 导入numpy np.array(X,#dtype=) X为列表,将其转换为数组,dtype指定类型 np.arrage(a,b) 生成从a到b的整数数组 np.reshape(X) 传入一个元组,重新定义矩阵形状,返回新矩阵 np.flatten() 将矩阵转为一维数组 np.transpose() 或 np.T() 矩阵转置 np.swapaxes(,) 转换轴(可用于转置)
读取数据 csv:逗号分割型数据
1 2 np.loadtxt(frame, dtype=np.float, delimiter=None, skiprows=0, usecols=None, unpack=False) 读取文本文件 frame:文件路径 delimiter:分割方法 unpack:转置
其他操作 1 2 3 4 5 6 7 8 9 10 11 np.where(条件,操作1,操作2) numpy的三元运算符 np.clip(10,8) 裁剪(小于10替换为10,大于18替换为18) np.vstack((t1,t2)) 竖直拼接矩阵 np.hstack((t1,t2)) 水平拼接矩阵 t[[1,2],:] 交换1,2行 t[:,[1,2]] 交换1,2列 np.ones((3,4)) 生成一个全1的3*4矩阵 np.zeros((3,4)) 生成一个全0的3*4矩阵 np.eye(10) 生成一个宽高为10的对角矩阵 np.argmax(t,axis=0) 取0号坐标轴(x轴)每项最大值 np.argmax(t,axis=1) 取1号坐标轴(y轴)每项最小值
随机数
常用统计函数
注意点 1 2 3 a=b 浅拷贝 a=b[:] 切片方法(同浅拷贝) a=b.copy() 深拷贝
特殊数据类型
1 2 3 4 np.nan not a number(非数字,或计算错误) np.inf infinity(无穷,有正负) np.isnan(t1) 返回是否nan的布尔矩阵 注:np.nan!=np.nan
pandas Series 1 2 3 4 import pandas as pd 导入pandas pd.Series([],#index=) 创建带标签数组(字典?),index指定索引 pd.Series({}) 直接传入字典创建 series.index/series.value 调用索引/值
读取外部数据 1 2 pd.read_csv("") 读取文件 pd.read_sql(sql_sentence.connection) 读取数据库
DatFrame 矩阵型series,有行索引和类索引
1 2 3 4 5 6 7 8 9 10 11 12 pd.DataFrame([],#index=,#columxs=) 创建DataFrame,index行索引,colums列索引 pd.DataFrame({},{},{}) 传入字典行索引自动从0排序 df.dead(2) 显示前2行 df.tail(3) 显示后3行 df.info() 显示信息 df.describe() 统计信息 df.sort_values(by="",ascending=True) 排序 by按某标签排序,scending正序排序 df.loc[] 通过标签索引行数据 df.iloc[] 通过位置获取行数据 df.set_index() 设置索引 df.set_index([]) 设置复合索引 df.swaplevel() 交换复合索引次序
数据合并
1 2 3 4 5 t1.join(t2, on="a") 按行索引将两个dataframe合并(以t1为准,通过a项) t1.merge(t2, on="a") 按列索引将两个dataframe合并(以t1为准,通过a项) df1.merge(df2, on="", how="inner") inner表示内连接(交集)outer表示外连接(并集) df1.merge(df2, on="", how="left") left表示左连接(以df1为准)right表示右连接(以df2为准) 不存在的值都补充为Nan,默认内连接
数据分组
1 2 3 4 5 6 7 grouped=df.groupby(by="a") 将数据按a分组,返回包含元组的Series类型 df["country"].groupby(by=[df["country"],df["state/province"]]) 对几列数据进行分组 grouped.count() 统计个数 遍历groupby: #i为a的类型,j为具体数据 for i, j in grouped: #TODO