对比Excel轻松学Python数据分析
前言
入门篇
目标
第1章数据分析基础
1.1数据分析是什么:
1.2为什么要做数据分析:
1.3数据分析在经营中有三大作用
1.4数据分析在分析什么
(1)总体概览指标:(统计绝对数)
(2)对比性指标:是说明现象之间数量对比关系的指标
(3)集中趋势指标:
(4)离散程度指标:
(5)相关性指标:
(6)相关关系和因果关系
1.5数据分析的常规流程
(1)熟悉工具:
(2)明确目的:首先明确分析的目的,希望得到什么
(3)获取数据:这准备工作:
1)需要什么指标
2)什么时间段的数
3)数据存在哪里
4)怎么提取,是自己SQL还是系统中
(4)熟悉数据
1)检查数据多少类型.
2)所需指标是否满足.
(5)处理数据:
1)异常:给合具体业务处理
2)重复:删除重复
3)缺失:比例高于30%,放弃指标,低于30%,填充0,均值、众数等
(6)分析数据:围绕着指标展开.并且经常采用的一个方法一--下钻
(7)得结论
(8)验证结论
(9)展示结论
1.6数据分析工具
实践篇
第2章熟悉锅——Python基础知识
2.1流程
2.2工具Jupyter Notebook
2.3基础语法
2.3.1 输出与输出格式设置format()
2.3.2注释
2.3.3容器 str/list/dict/tup
2.3.4运算符
2.3.5循环语句for/while
2.3.6条件语句if/else/elif
2.3.7函数
2.3.7高级特性 列表生成器/map()
2.3.7模块module import
第3章Pandas数据结构
3.1Series数据结构
3.1.1 Series是什么--[数据标签,数据]一维数组
3.1.2 创建一个Series---pd.Series(list/dict)
(1)列表--pd.Series(list)
(2)指定索引--pd.Series(list,inedx=[])
(3)传入一个字典pd.Series(dict)
3.1.3 利用index方法获取Series的索引----S_list.index
3.1.4 利用values方法获取Series的值----S_list.values
3.2DataFrame表格型数据结构
3.2.1 DataFrame是什么---表格型数据结构
3.2.2 创建一个DataFrame--pd.dataFrame(list,index,colum
(1)不指定行/列索引创建DataFrame
(2)指定行/列索引创建DataFrame--index(行名称)/columns(列名)
3.2.3 获取DataFrame的行、列索引---df.index/df.columns
3.2.4 获取DataFrame的值
Series数据结构
DataFrame表格型数据结构
第4章准备食材——获取数据源--pandas
4.1导入外部数据--pandas.read_x()
4.2新建数据--DataFrame新建数据
4.3熟悉数据
4.3.1 利用head预览前几行--df.head(n)--n无时默认5行
4.3.2 利用shape获取数据表的大小--df.shape
4.3.3 利用info获取数据类型---df.info()
4.3.4 利用describe获取数值分布情况--df.describe()
第5章淘米洗菜——数据预处理
5.1 缺失值处理
5.1.1 缺失值查看---df.info()/df.isnull()
5.1.2 缺失值删除--df.dropna(how=”all”)
5.1.3 缺失值填充df.fillna(0/{key1:value1,key2:value2})
5.2 重复值处理-- drop_duplicates(subset=[],keep=)
5.3 异常值的检测与处理
5.3.1 异常值检测
5.3.2 异常值处理
5.4 数据类型转换
5.4.1 数据类型—int/float/object/string_/unicode/dateti
5.4.2 类型转换—df[].dtype---df[].astype(string)
5.5 索引设置
5.5.1 为无索引表添加索引—df.columns=[],df.index=[]
5.5.2 重新设置索引—df.set_index()
5.5.3 重命名索引---df.rename(columns={},index={})
5.5.4 重置索引—df.reset_index()
第6章菜品挑选——数据选择
6.1 列选择----df[]/df.iloc[]
6.1.1 选择某一/几列--普通/位置索引---df[“col1”,”col2”]/df.iloc
6.1.2 选择连续的某几列--切片索引--df.iloc[0:15,0:3]
6.2 行选择--df.loc[]/df.iloc[]/df[df[“”]<100]
6.2.1 选择某一行/某几行---df.loc[“row”]/df.iloc[[1,2,3]]
6.2.2 选择连续的某几行---df.iloc[1:3]
6.2.3 选择满足条件的行---布尔索引--df[df[“产品ID”]<100]
6.3 行列同时选择
6.3.1 普通索引+普通索引选择指定的行和列—df.loc[[0,1,2],[“col1”,”co
6.3.2 位置索引+位置索引选择指定的行和列—df.iloc[[0,1,2],[1,2,3]]
6.3.3 布尔索引+普通索引选择指定的行和列—df[df[“col1”]<100][[“col2”
6.3.4 切片索引+切片索引选择指定的行和列—df.iloc[1:2,1:4]
6.3.5 切片索引+普通索引选择指定的行和列—df.ix[]这个方法没有找到
第7章切配菜品——数值操作
7.1 数值替换
7.1.1 一对一替换—df[“col”].replace(A,B)/df.replace(A,B)
7.1.2 多对一替换—df.replace([A,B],C)
7.1.3 多对多替换—df.replace({“A”:”a”,”B”:”b”})
7.2 数值排序
7.2.1 按照一列数值进行排序-- df.sort_values(by=["年龄"],ascend
7.2.2 按照有缺失值的列进行排序—df.sort_values(by=,na_position=
7.2.3 按照多列数值进行排序—df.sort_values(by=[col1,col2],asc
7.3 数值排名—df[col].rank(method=)
7.4 数值删除
7.4.1 删除列—df.drop([col]/df.columns[[0,1]]/columns=
7.4.2 删除行—df.drop([r1,r2]/index=[r1,r2]/df.index[[
7.4.3 删除特定行—df[df[“年龄”]<40]—选出与删除条件相反的数据形成新的集合
7.5 数值计数—df.value_counts()
7.6 唯一值获取—df[“col”].unique()
7.7 数值查找——df.isin ([])
7.8 区间切分—pd.cut(df[],num/bins=[])--pd.qcut(df[“col
7.9 插入新的行或列—df.insert(index,newcol,[row_value])/df
7.10 行列互换—df.T/df.T.T(还原)
7.11 索引重塑—df.stack()/df.stack().unstack()
7.12 长宽表转换
7.12.1 宽表转换为长表
1.stack()方法-- df_turn.set_index(["Company","Name"]).
2.melt()方法—df.melt(id_vars=,var_name=,value_name=)
7.12.2 长表转换为宽表—df.pivot_table(index=[],columns=,va
7.13 apply()与applymap()函数—df[].apply(lamda)/df.app
第8章开始烹调——数据运算
8.1 算术运算—+-*/
8.2 比较运算—>< != ==
8.3 汇总运算—count/sum/mean/max/min/median/mode/std/qu
8.3.1 count非空值计数
8.3.2 sum求和--语法同count
8.3.3 mean求均值--语法同count
8.3.4 max求最大值--语法同count
8.3.5 min求最小值--语法同count
8.3.6 median求中位数--语法同count
8.3.7 mode求众数--语法同count
8.3.8 var求方差--语法同count
8.3.9 std求标准差--语法同count
8.3.10 quantile求分位数-- df.quantile(0.25,axis=1)
8.4 相关性运算—df[col1].corr(df[col2])
第9章炒菜计时器——时间序列--datetime
9.1 获取当前时刻的时间
9.1.1 返回当前时刻的日期和时间--datetime.datetime.now()/dateti
9.1.2 分别返回当前时刻的年、月、日—nowtime.year/month/day
9.1.3 返回当前时刻的周数—time.weekay()+1/ time.isocalendar(
9.2 指定日期和时间的格式date/time/strftime
9.3 字符串和时间格式相互转换---str(time)/parse(str_time)
9.3.1 将时间格式转换为字符串格式—str(time)
9.3.2 将字符串格式转换为时间格式—parse(str_time)
9.4 时间索引
9.5 时间运算
9.5.1 两个时间之差
9.5.2 时间偏移
第10章菜品分类——数据分组/数据透视表--groupby/pivot_table
10.1 数据分组--groupby
10.1.1 分组键是列名—直接按照给的列名统计
10.1.2 分组键是Series—先按照Series分组,在统计-- df.groupby([df
10.1.3 神奇的aggregate方法-- df.groupby("客户分类").aggrega
10.1.4 对分组后的结果重置索引—df_aggregate2.reset_index()
10.2 数据透视表—pd.pivot_table()
第11章水果拼盘——多表拼接--oracle中的关联和union
11.1 表的横向拼接--oracle中的表关联
11.1.1 连接表的类型--1-1/n-1/n-n
(1)一对一--只有一个公共列--pd.merge(df1,df2)
(2)多对一--on=”col_name”
(3)多对多
11.1.2 连接键的类型
(1)默认以公共列作为连接键
(2)用on来指定连接键--on=”col_name”
(3)分别指定左右连接键--left_on="编号",right_on="序号"--oracle左右两边列
(4)把索引列当作连接键--将公共列设置成索引再用索引拼接
11.1.3 连接方式--inner/left/right/outer--oracle中的左右关联(
(1)内连接(inner)
(2)左连接(left)
(3)右连接(right)
(4)外连接(outer)
11.1.4 重复列名处理--col_x,col_y
11.2 表的纵向拼接
11.2.1 普通合并
11.2.2 索引设置
11.2.3 重叠数据合并--df.drop_duplicates()
第12章盛菜装盘——结果导出
12.1 导出为.xlsx文件-- df.to_excel(excel_writer, sheet_
12.2 导出为.csv文件—df.to_csv(path_or_buf, index, colum
12.3 将文件导出到多个Sheet—writer= pd.ExcelWriter
第13章菜品摆放——数据可视化--matplotlib
13.1 数据可视化是什么
13.2 数据可视化的基本流程
13.2.1 整理数据---明确要把哪些数据图表化
13.2.2 明确目的---明确要表达什么
13.2.3 寻找合适的表现形式---合适的表现形式
13.3 图表的基本组成元素
13.4 Excel与Python可视化
13.5 建立画布和坐标系
13.5.1建立画布
(1)导入matplotlib库以及基本设置
(2)建立画布
13.5.2建立坐标系
(1)add_subplot函数建立坐标系-----利用add_subplot函数建立坐标系时需要先
(2)plt.subplot2grid函数建立坐标系--------不需要先建立画布,只需要导入pl
(3)plt.subplot函数建立坐标系---与plt.subplot2grid函数类似
(4)plt.subplots函数建立坐标系---同时返回多个坐标系,相当于操作多维数组
(5)几种创建坐标系方法的区别
13.6设置坐标轴
13.6.1设置坐标轴的标题---xlabel、ylabel--- labelpad(距离)
13.6.2设置坐标轴的刻度---xticks、yticks----自定义显示不同刻度处的值
13.6.3设置坐标轴的范围---xlim,ylim---设置坐标轴的最大值和最小值
13.6.4 坐标轴的轴显示设置---axis---设置坐标轴显示/隐藏
13.7其他图表格式的设置
13.7.1网格线设置--grid--axis
13.7.2设置图例---plt.legend(),绘图时必须有label,loc参数修改图例位置
13.7.3图表标题设置---plt.title---loc设置其他
13.7.4设置数据标签---text---zip迭代显示
13.7.5图表注释--annotate
13.7.6 数据表---plt.table
13.8绘制常用图表
13.8.1绘制折线图--plt.plot(x,y)
13.8.2绘制柱形图--plt.bar(x,y,height)
(1)普通柱形图
(2)簇状柱形图
(3)堆积柱形图实例
13.8.3绘制条形图--plt.barh(y(y轴内容),width(x轴内容),height(条
13.8.4绘制散点图--plt.scatter(x,y,s(面积),c(颜色),marcher,线
13.8.5绘制气泡图--plt.scatter()
13.8.6绘制面积图--plt.stacklot(x,y,labels,colors)
13.8.7绘制树地图--squarify.plot(数据列表,图例标签,各个图例颜色,数据标签)
13.8.8绘制雷达图--plt.polar(角度,半径r*pi,color,marker,line
13.8.9绘制箱形图--plt.boxplot(x(箱形的数据),labels:数据的标签,ver
13.8.10绘制饼图---plt.pie(x数据,labels数据标签)
13.8.11绘制圆环图--plt.pie()
13.8.12绘制热力图--plt.imshow(x(矩阵),cmap(配色方案))
13.8.13绘制水平线和垂直线—plt.axhline(y,xmin,xmax)水平/plt.ax
13.9绘制组合图表
13.10绘制双坐标轴图表
13.10.1绘制双y轴图表—plt.twinx()在两个图形之间调用
13.10.2绘制双x轴图表—plt.twinx()
13.11绘图样式设置---plt.style.use(样式明名)
第14章 典型数据分析案例
14.1 利用Python实现报表自动化
14.1.1 为什么要进行报表自动化
14.1.2 什么样的报表适合自动化
14.1.3 如何实现报表自动化
14.2 自动发送电子邮件--smtplib(连接服务器)--email(设置邮件)
14.3 假如你是某连锁超市的数据分析师
14.4 假如你是某银行的数据分析师
第15章 NumPy数组
15.1 NumPy简介
15.2 NumPy数组的生成-----(一般/特殊类型/随机数组)
15.2.1 生成一般数组--np.array(list/dict/嵌套list)
15.2.2 生成特殊类型数组
(1) 生成固定范围的随机数组—arange(start,stop,step)—[start,sto
(2)生成指定形状全为0的数组—zeros(n/(row_num,col_num))
(3) 生成指定形状全为1的数组—ones(n/(row_num,col_num))
(4) 生成一个正方形单位矩阵—eye(n)
15.2.3 生成随机数组
(1)生成0-1之间随机数--np.random.rand(n/row_num,col_num)
(2) 生成正态分布的指定形状数组-- np.random.randn(n/row_num,col_
(3) 生成一定范围内的随机整数数组-- np.random.randint(low,high,si
(4)从已知数组中随机选取相应大小的数组--np.random.choice(num/list,si
(5)将原数组顺序打乱(洗牌)--np.random.shuffle(arr)
生成数组函数总结
15.3 NumPy数组的基本属性---(形状、大小、类型、维数)
15.4 NumPy数组的数据选取
15.4.1 一维数据选取--arr[index]/arr[inedx1,index2]/arr[a
15.4.2 多维数据选取----arr[0:1,3:5]--逗号隔开行列
15.5 NumPy数组的数据预处理
15.5.1 NumPy数组的类型转换--arr.astype(np.type)
15.5.2 NumPy数组的缺失值处理--np.isnan(arr)--arr[np.isnan(
15.5.3 NumPy数组的重复值处理--np.unique(arr)
15.6 NumPy数组重塑--arr_old.size=arr_new.size
15.6.1 一维数组重塑--arr.reshape(row_num,col_num)
15.6.2 多维数组重塑--reshape同上
15.6.3 数组转置-----arr.T
15.7 NumPy数组合并
15.7.1 横向合并--concatenate、hstack、column_stack
(1)concatenate方法---np.concatenate([arr1,arr2],axis=1)
(2)hstack方法--元组np.hstack((arr1,arr2))
(3)column_stack方法---元组np.column_stack((arr1,arr2))
15.7.2 纵向合并--concatenate、vstack、row_stack
(1)concatenate方法--np.concatenate([arr1,arr2],axis=0)
(2)vstack方法--元组np.vstack((arr1,arr2))
(3)row_stack方法---元组np.row_stack((arr1,arr2))
15.8 常用数据分析函数
15.8.1 元素级函数--np.abs(arr)------ abs/square/sqrt/lo
15.8.2 描述统计函数---arr.sum/mean/max(axis=0/1)
15.8.3 条件函数--np.where(condition,x,y)--条件真为x,假为y类似于
15.8.4 集合关系--含(np.inld(arr1,arr2))、交集(intersectld)