# 数据分析 **Repository Path**: chenjialun16/data-analysis ## Basic Information - **Project Name**: 数据分析 - **Description**: 机器算法总结 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ##Numpy小结 * Numpy定义 * 开源的Python科学计算库, * 用于快速处理任意维度的数组 * Numpy中,存储对象是ndarray * 创建 * np.array([]) * numpy的优势 * 内存块风格一体式存储 * 支持并行化运算 * 效率高于纯Python代码 * 底层使用了C,内部释放了GIL(全局解释器) * ndarray的属性名字 属性解释 * ndarray.shape 数组维度的元组 * ndarray.ndim 数组维数 * ndarray.size 数组中的元素数量 * ndarray.itemsize 一个数组元素的长度(字节) * ndarray.dtype 数组元素的类型 * ndarray.flat 变成列表 * 生成0和1的数组 * np.ones () * np.ones_ like () * 从现有数组中生成 * np.array -深拷贝 * np.asarray -浅拷贝 * 生成固定范围数组 * np.linspace () num 生成等间隔的多少个 * np.arange () step 每间隔多少生成数据 * np.logspace () 生成以10的N次幂的数据 * 生成随机数组 * 均匀分布生成 * np.random.rand * np.random.uniform() low high size * 正态分布 * 均值(图像的左右位置),方差(值越小,图形越瘦高,数据越集中) * np.random.normal() low high size * 数组的索引 * 直接索引 * 先对行索引,再对列索引 * 高纬度索引,从宏观到微观 * 形状修改 * 对象.reshape 不进行行列互换,产生新变量 * 对象.resize 不进行行列互换,对原值修改 * 对象.T 进行行列互换 * 类型修改 * 对象.astype(dtype=np.float32) * 数组去重 * np.unique() * ndarry运算 * 逻辑运算 直接判断 * np.all() 所有满足要求才true * np.any() 一个满足要求就true * np.where 三位运算符 np.where(A>B,C,D) == A>B?A:B * np.logical_or(A,B) 或 * np.logical_and(A,B) 并 * np.where(np.logical_and(stock>0.5,stock<=1),5,0) * np.clip(A,5,9) 保留5和9之间的数 小于5的是5 大于9的是9 * 对象.max() midian() mean() * std() 标准差 * var() 方差 * 对象.argmax() 返回最大值的下标 * numpy中 axis=0 代表列 axis=1代表行 * 数组和数组的运算 * 需要满足广播机制 * 维度相同 或者 shape对应位置为1 * 矩阵相乘 * np.matmul() 矩阵相乘 不支持矩阵和数字相乘 * np.dot() 点乘 支持矩阵和数字相乘 ##pandas * pandas概念 * 开源的数据挖掘库 用于数据探索 * 封装matplotlib,numpy * 创建DataFrame,修改index和columns * pd.DataFrame(ndarry,index= ,columns= ) * 创建日期 * pd.date_range() * start -- 开始日期 * end -- 结束日期 * periods -- 时间跨度 与end选其一即可 * freq -- 统计时间方式 * 行索引,叫index,axis=0 * 列索引,叫colums,axis=1 * 对象.head() 对象.tail() * 对象.reset_index(drop=False) * 默认 drop=False 不删除原来索引 * drop = True 删除原来索引 * 对象.set_index(drop=True) * 默认 drop=True 删除原来索引 * 如果索引是两个的时候就是multiIndex * 索引 * **直接取值的时候 先列后行 ** * loc -- 先行后列 索引值 * iloc -- 先行后列 索引值的下标 * 赋值操作 * 对象.列名 * 对象[''] * 排序 * 对象.sort_values(by=[列名,列名] , ascending = True) * 对象.sort_index( ascending = True) * 默认升序 * 算术运算 * 直接用方法 add()、sub() * 对象.query('") 逻辑运算函数 参数:" 字段名 > 2 & 字段名 < 4 " * 对象.isin([value]) * 统计运算 * 对象.describe() * mode 众数 出现最多的数 知道即可 * median() 中位数 排序后取值(两数平均值) * idxmax() 获取最大值的索引 * 累计求和 * cumsum 累计求和 * 自定义运算 * data[['字段名']].apply(func,axis=0) * func可以为匿名函数 * data[['b']].apply(lambda x:x.max()-x.min(),axis = 0) * 读取文件 * pd.read_csv(路径 , sep=',' , usecols = [需要的列] ) * pd.to_csv(路径 , sep = ',' , columns=[] ,header=True,index = True ,) * sep 以什么为分割 * columns: 需要哪列 * mode: 方式 'w': 重写 'a':追加 * index:是否写进索引 * pd.read_hdf(路径, key = None, **kwargs) * pd.to_hdf(xxx.h5,key = ) * 读取h5文件 * pd.read_json(路径,orient=,type=,lines= ) * pd.to_json(路径,orient=) * 一般 orient = 'records' 按照什么方式进行读取或者写入 * lines一般为True 是否按照行读取和写入 * 推荐实用hdf * 压缩方式为blose,速度快 * 压缩后提高利用率,节省空间 * 支持跨平台 * 处理缺失值 * np.NaN的类型是float * pd.isnull() 判断是否有缺失值 np.any(pd.isnull()) 有返回True * pd.notnull() np.all(pd.notnull()) 有返回False * 对象.dropna(axis='rows') 删除有NaN数据的一行 * pd.fillna(value,inplace=True) 替换有NaN的数据 * value 替换的值 * inplace True修改原数据 False 不替换修改原数据,生成新对象 * 对象[列名] .fillna(value = 对象[列名].mean()) * 替换思路 把 ?替换为np.NaN * 对象.repalce(to_replace=需要替换的值 ,value=替换后的值 ) * 数据离散化 * 把一些数据分到某个区间,最后用不同的符号或者数字表达 * pd.qcut(data,q=分组个数) 把数据大致分成数量相等的几类 qcut = pd.qcut(data,10) qcut.value_counts() * 对象.value_counts() 数量统计 * pd.cut(data,bins=自定义分组) 指定分组间隔 自定义分组bins= [-7,-3,0,3,7] * one-hot编码 把数据转为为0,1统计类型 别名:哑变量、热独编码 * pd.get_dummies(data,prefix=分组名称) 增加columns的前缀 * 数据合并 * pd.concat([data1,data2],axis = 1) * pd.merge(left,right,how='inner'or 'outer',on=,left_on=,right_on=) * 拼接方式 how = 'inner'or 'outer' or 'left' or 'right' 与sql一样 * 交叉表和透视表 * 交叉表 用于计算一列数据对于另一列数据的分组个数 (寻找两列之间关系) * pd.crosstable(value1 , value2) 返回具体数量 * 透视表 DataFrame.pivot_table(values=[],index=[],columns=[]) * 把Index 转为 DatetimeIndex pd.to_datetime(data.index) * 分组与聚合 * DataFrame.groupby(key, as_index = False) * data.groupby(['color'])没有意义 需要聚合 * data.groupby(['color'])['size'].mean() 按颜色分组对大小取平均值 * data.groupby('userId').agg([list]) 转为列表 * as_index = False 多加一个索引