每天1小时学会数据分析、挖掘、清洗、可视化从入门到项目实战
导读:如何成为一名合格的业务数据分析师?
知识点:
Power Query会在Power BI中讲
在学了Python之后,放弃VBA(所以不必要学)
选择模式,输入模式,编辑模式(双击可以进入)。
按F2可以在编辑和输入模式之间切换。
"ctrl+shift+下"可以用于查看某一列是否有空缺。
“alt+enter”可以在单元格内换行。
在格式可以选择自动调整列宽,行高。
文本格式,默认靠左。
数值格式,默认靠右。
有些函数针对文本,有些针对数值
可以自定义格式。
##“次”
,则输入数值25,会显示25次,但是仍然是数值格式。[>=75][蓝色]##"次";[<75][红色]##"次";
,则大于等于75会显示蓝色,且后面带上单位次。这改的是数值本身的颜色。
# 代表原本的数据格式,0代表数值格式,0000表示不足位则补齐4位。
数据条、色阶、规则
ctrl+鼠标左键
选中多个不连续单元格,然后输入内容,再ctrl+回车
补全所有选中单元格。
这个方法也可以用于删除不连续单元格。
在数据选项卡,选择数据验证。
注意,如果数据源丢失了,那么表格信息也就没了。
如果数据源修改了,那么表格信息刷新之后也能看到修改。要点击表设计选项卡的刷新。
在单元格前面加上英文格式的单引号,则会默认居左。
利用格式刷
Alt+=会自动对上面的元素求和。
"ctrl+shift+方向"可以快速选择某个方向上的单元格。
这个方法可以被用来找空缺。
如果单元格有空缺,则计算平均值时,分子分母都不会记录这个单元格。
在数据选项卡-选择分类汇总
如果直接复制1.14中的分类汇总结果,即使把分级隐藏了,还是会复制隐藏的单元格。
这时候可以通过”查找和选择“,然后选择”可见的单元格“,这样再进行复制,就不会复制隐藏的单元格了。
如何使上表实现一行有数据,一行空,一行有数据的效果?
使用辅助行,先添加等差数列1,2,…
然后再在结尾的空行处,添加1.1,2.1,…
最后对辅助行使用升序排序,然后删掉辅助列,就达到效果了。
智能填充
ctrl+~可以切换显示原始公式或者值。
相对引用:你变它就变,如A2:A5
绝对引用:如$A2混合引用:如2 混合引用:如2混合引用:如A2,A$2
$在谁前面,谁就不能动了,按F4可以在相对引用,绝对引用,混合引用之间互相切换
IF(判断条件,True的结果,False的结果) # 判断
AND(条件,条件) # 与
OR(条件,条件) # 或
NOT(条件) # 非
excel中对文本的引用必须是双引号
MID(文本,开始字符下标,几个字符长度) # 取子串
LEFT(文本,几个字符长度) # 从左取子串
RIGHT(文本,几个字符长度) # 从右取子串
LEN(文本) # 文本长度
TEXT(文本,文本格式) # 数字转化文本格式
# 文本格式如"yyyy-mm-dd",可以参考单元格格式中的自定义的书写方法
REPLACE(原始文本,开始字符下标,几个字符长度,替换的内容) # 替换特定位置处的文本
# 简单的
INT() # 向下舍数取整
MOD(除数,被除数) # 求余数
ROUND(数值,几位小数) # 四舍五入,精确到指定小数位
AVERAGE(一组数据) # 求平均
MAX(一组数据) # 求最大
MIN(一组数据) # 求最小
SUM(一组数据) # 求和
COUNT(一组数据) # 数值计数
# 稍微有点难度的
SUMIF(条件区域,条件,求和的数据区域) # 条件求和
SUMIFS(求和的数据区域,条件区域1,条件1,条件区域2,条件2,...) # 多条件求和
COUNTIF(条件区域,条件) # 条件计数
COUNTIFS(条件区域1,条件1,条件区域2,条件2) # 多条件计数
VLOOKUP(查找对象(如姓名),查找区域(如姓名列和值列),得到哪一列的值,查找方式):垂直方向查找
# 查找对象必须在查找区域的第一列中,否则找不到
# 查找区域一般需要绝对引用
# 查找方式分为近似匹配(TRUE或1)和精确匹配(FALSE或0),一般采用后者
MATCH函数的应用场景:返回查找对象在查找区域中的位置
MATCH(查找对象, 查找区域,查找方式):查找函数
TODAY() # 当前日期
NOW() # 当前日期和时间
DATE(年,月,日) # 组合得到给定的日期
DATEDIF(开始时间,结束时间,单位) # 计算日期差
# 单位是“D”表示天,“M”表示月,“Y”表示年
YEAR() # 求年
MONTH() # 求月
DAY() # 求日
当跨表引用数据时,会在引用前加上"表名+!"
值字段设置中可以选择要采取的聚合操作,如求和,求平均等。
点到数据透视表,会出现上下文选项卡。
在“数据透视表工具-分析”选项卡下,可以点击”字段列表“,”+/-按钮“来修改透视表的显示样式。在“数据透视表工具-设计”选项卡下,点击报表布局,点击”以表格形式显示“。在分类汇总里可以点击”不显示分类汇总“。
在”分析“里面可以点”选项“,在布局和格式里,可以选择”合并且居中排列带标签的单元格“。
前提是内容和格式极度相似
略
前提:单元格处于选中状态
1.新增cell:
按a:在选中单元格上方插入一个新的cell
按b:在选中单元格下方插入一个新的cell
2.删除cell:
按dd:删除选中cell
按x:剪切cell
3.复制cell
按c:复制选中cell
4.粘贴
按v:粘贴已复制的cell到选中的cell的正下方
Ctrl+Enter运行选中单元格,然后继续选中当前单元格
Shift+Enter运行选中单元格,并在其下方选中一个单元格,如果下方没有单元格,则新增一个
ALt+Enter运行选中单元格,并在其下方新增一个单元格
%run xx.py
%%time 一行代码
%%time
多行代码
jupyter notebook是基于IPython的,所以
In存放着所有已输入命令的字符串组成的字符串列表,可以通过In[index]获得元素。
Out返回所有含输出命令的序号及其输出组成的字典,可以通过Out[index]获得元素。
Numpy是pandas库的基础。
普通列表里面的元素可以是任意类型的,但数组ndarry里面的元素则必须是同类型的(会自动把元素类型统一,方便运算)。
ages = [17, 19, 20, 34]
ages_array = np.array(ages)
可以通过索引访问数组元素
数组相比列表而言,提供了一些方便的方法,如求和方法ndaaray.sum()
数组*2会对里面每个元素乘以2,而列表乘以2会复制扩充原列表。
# 构造二维数组
array2 = np.array([[1,2],[3,4]])
# 一个参数,则起点为0,参数为终点,步长为1
x = np.arange(5) # [0, 1, 2, 3, 4]
# 两个参数,则第一参数为起点,第二参数为终点,步长为1
y = np.arange(5, 10) # [5, 6, 7, 8, 9]
# 三个参数,则第一参数为起点,步长为1,第二参数为终点,第三个参数为步长
z = np.arange(5, 10, 0.5)
np.random.randn(n) # 创建服从正太分布的n个随机数组成的一维数组
np.random.randint(整数x, 整数y, [行m, 列n]) # 创建由x到y之间的随机数组成的m*n数组
ndaaray.reshape((a, b))方法可以将数组的形状改变成a行b列。
pandas被广泛用于快速数据分析,以及数据清洗和准备工作。相比Numpy而言,pandas更擅长处理二维数据。
pandas主要有两种数据结构:series和DataFrame。
series类似于一维数组,但是它还包含一组索引。
import pandas as pd
s1 = pd.Series([“a”, "b", "c"], index=[“x”, "y", "z"])
import pandas as pd
# 方法1:通过列表创建,可以通过index和col来配置行索引和列索引
a = pd.DataFrame(二维列表, index=[], col=[])# 方法2.11:通过字典创建,字典键会变成列索引
先创建两个series(或者列表),用变量names和ages存放
pd.DataFrame({"names": names,"ages": ages
})# 方法2.2:如果想让字典键变成行索引,可以通过from_dict方式,并设置orient参数为index
c = pd.DataFrame.from_dict({"a": [1, 3, 5], "b": [2, 4, 6]}, orient="index")# 方法2.3:通过把DataFrame当字典使用来赋予列
mdate = [1, 3, 4, 5]
score = [10, 20, 30, 40]
a = pd.DataFrame()
a["key1"] = mdata
a["key2"] = score# 方法3:通过np.arrange()方法来创建二维数组,然后传递给DataFrame
pd.DataFrame(np.arange(12).reshape(3,4), index=[1,2,3], columns=[...])
# DataFrame.set_index可以将某列设置为行索引,但这样不会改变原DataFrame,而是返回一个新的DataFrame
a.set_index(“日期”)
# 要在原DataFrame上更改,要么直接赋值给原变量,要么使用参数inplace=True(如下)
a.set_index("日期", inplace=True)
# 可以重命名索引,也有inplace参数
a.rename(index={"A": "万科", ...}, columns={"date":"日期"}, inplace=True)
# 可以重置索引,让行索引变成常规列,也有inplace参数
a = a.reset_index()
import pandas as pd
data = pd.read_excel('data.xlsx')
# 指定sheet读取
pd.read_excel("path", sheet_name=1)
# 参数index,以表格中的某列或某些列来设置行索引
# 参数header,以表格中某行或某些行设置列索引
pd.read_excel(path, index=0, header=[0, 1])
data.to_excel("mdata.xlsx")
pd.read_csv("csv文件", sep=',', header=[0,1])
data.to_csv("mdata2.csv")
python中的\有转义功能,如\n等。所以只写一个\,需要再前面加r,去掉转义功能。或者写2个\。
# windows下绝对路径举例
"E:\\大数据分析\\data.xlsx"
r"E:\大数据分析\data.xlsx"
"E:/大数据分析/data.xlsx" # 这种写法主要用于linux,也可以用于windows(python也可以读取)
b = data["c1"] #读取c1列,返回Series
b = data[["c1"]] # 读取c1列, 返回DataFrame
d = data.loc["r1"] # 读取r1行,返回成一列的Series
d = data.loc[["r2", "r3"]] # 读取r2行和r3行,返回DataFrame
records.loc[2, "身高"]
df.head(n) # 查看前n行,n不填默认为5
data[data["c1"] > 1] # 筛选c1列数字大于1的行
data.shape # 返回(3, 3)
df.describe() # 返回每一列的计数,均值等
df.info() # 可以看到每一列数据的数据类型和非空数据个数
data["c1"].value_counts()
df["sum"] = df["c1"] + df["c2"]
df.sum() # 默认对列进行求和,得到Series
df.mean() # 默认对列求均值
# 设置axis=1可以求行方向的
df.sum(axis=1)
df.mean(axis=1)
先定义map_funct方法
records["身体"].map(map_funct) # 对身高列做map方法
表中数据如果显示NaN(表示Not a Number),表示空值。
data.fillna(value=0, inplace=True)
records.isnull() # 对每个数做空值检验,是空值的位置为Trure
# 求出每一列空值的个数
records.isnull().sum()
# 求出每一列空值的占比
records.isnull().mean()
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
%matplotlib inline # 这个魔法指令保证图像一定能渲染到jupyter上
x = [1,2 3]
y = [2,4,7]
plt.plot(x, y)
plt.show() # 建议写上。不用的话,在jupyter上也能看到,但是是在Out里
plt.bar(x, y, color=np.random.random((4,3))) # 利用0-1随机浮点数配置rgb颜色
plt.show()
x # 横轴数据
y #纵轴数据
size # 大小,也可以用来表示第三维数据
plt.scatter(x, y, s=size) # 这样就成了气泡图
pandas绘制折线图
df # 10行3列的dataframe
df.plot() # 会把3列化成3条折线
df["人均收入"].plot(kind='line') # 和df.plot()一样
df["人均收入"].plot(kind='bar') # 绘制柱状图
df.T可以转置dataframe
plt.plot(x, y, label="line of sin") # label就是图例要展示的信息
plt.title("xxx") # 添加标题
plt.xlabel("X") # 添加x轴
plt.ylabel("Y") # 添加y轴
plt.legend(loc="upper right") # 允许展示图例,且用loc参数配置位置,这里放在右上角
np.linspace(0, 2*np.pi, 100) 从0-2pi拆分出100个数,等差数列
plt.rcParams['font.sans-serif'] = 'SimHei' # 用来正常显示中文标签,simhei:黑体字
# 更改了字体会导致不显示负号,所以要
plt.rcParams['axes.unicode_minus'] = False # 解决符号"-"显示为方块的问题
figure是画布,下面有很多axes(子图)。
subplot()函数,含有3个参数,第一个表示行数,第二个表示列数,第三个表示子图序号。如subplot(2,2,1)表示绘制2行2列的子图,并在第1个子图上绘图。
plt.figure(figsize=(12, 8)) # 通过调整画布来调整整体大小
# 分别获取子画布绘图
ax1 = plt.subplot(221)
ax1.plot(x,y)
ax2 = plt.subplot(222)
ax2.plot(x,np.cos(x))
ax3 = plt.subplot(223)
ax3.plot(x,np.cos(x))
ax4 = plt.subplot(224)
ax4.plot(x,np.cos(x))
import os
os.listdir('./') # 获取当前目录下的子目录和子文件
for root, dirs, filenames in os.walk('./)': # 迭代进入子目录,获取子文件...
os.path.join(root, filename) # 拼接路径
pd.concat(files) # 将多个dataframe组成的李彪进行级联
从”离职率“指标展开。
p65-p72,暂略
RFM分析模型
漏斗分析模型(AARRR分析模型)
杜邦分析法(了解)
略
PowerBI官网:https://powerbi.microsoft.com/zh-cn/
传统公司的痛点:
1.没有专门的分析师,有领域专家,但是卡在工具使用上
2.数据量很复杂,表很散,大量工作用在表的集中。很多时间浪费在想法-制作报表的过程中。
3.缺ETL过程:源-整合-数据治理-加载 - 大数据架构
外卖公司里面有很多系统,如客户订单系统,物流管理系统,商家系统,客服售后系统,这些系统是独立开发的。然后考虑接入数据中台。
数据分析平台:只读。如国内:FineReport,神策,诸葛IO。美国:Tableau(做地图起家)、PowerBI(微软)。
APP:用户操作:埋点数据。
要在PowerBI中获取更多视觉对象,需要账号,账号分为普通账号
1.企业邮箱,或者edu邮箱, 可以免费申请,可以从淘宝买,10元以内。
2.pro账号:不仅可以获得更多视觉对象,可以发布报表文档,权限管理可分享,99永久。个人不建议买。
PowerBI可以通过:获取数据,选择其他,选择Web连接,读取网页中的表格信息。适用于读取一些内容多,但是网站比较老的数据网站。
可以去PowerBI文档:https://learn.microsoft.com/zh-cn/power-bi/。查看一些函数的用法。
获取数据,加载文件夹,然后在Power Query编辑器中,找到加载的文件夹内容,删除其他列(如创建时间等),只保留Content列,然后选择合并文件(注意合并的文件,一定要注意标题对应一致)
必须要安装mysql-connector-net-…msi文件放在mysql的文件夹里面,PowerBI才能连接Mysql。
excel也可以进入powerquery编辑器。(所以后面的讲解都在excel的powerquery编辑器上)
在“数据选项卡",选择"来自表格/区域"。
上一篇:分布式锁学习笔记