0%

数据分析

过程:提出问题->准备数据->分析数据->获得结论->(成果可视化)

注:变量前带#表示可选项

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轴)每项最小值

随机数

img

常用统计函数

img

注意点

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