概述
数据分析学习及实用技巧 —— LF《数据分析集训营》
本学习笔记内容来源于网络视频课,多为拼凑内容,但也很实用;
涵盖了职业分析、Excel、notebook & numpy & pandas & matplotlib
的常规使用,仅为数据分析入门要求,如果想深入了解,可自阅官方文档;
职业解析
- 导数据 做报表
- 需求理解 动态分析
- 预测
sql、excel、python + 业务理解,数据分析思维很重要;
数据分析岗位要求:
- 做什么:
- 了解公司核心业务:针对公司的数据流,从数据仓库、数据库中提取、监测数据;
- 检测业务健康度:指标体系搭建、报表检测、办公自动化;
- 精细化运营:用户分析、埋点、日志数据、BI平台、搭建BI平台;
- 基于数据的新业务:支撑核心业务增长、新业务线、行业分析报告、数据探索;
- 对外提供付费数据服务;
- 需要什么:
- 理解业务的能力;
- 搭建指标体系:报表监测,Excel,SQL,Python;
- 运营能力:埋点设计,统计学分析方法,数据分析报告,整理日志数据(SQL自己查);
- BI平台的使用和接入:神策、PowerBI;或者搭建自己的BI平台(这是数据产品经理的工作,但是我们是这部分业务的需求方);
- 支撑新业务:数据挖掘、智能服务、推荐算法;搭建新的指标体系;
- 行业分析报告的撰写和解读 、数据探索;
技术栈和能力解读:
- 数据业务思维 对标 运营岗;
- 数据处理能力 sql+Excel+BI工具+Python
- 数据分析 统计学+数据分析报告+可视化 用数据说话
- 预测 机器学习
- 其他: R(不需要了)、SAS、SPSS(拖拽的图表)、Matlab(也不需要);
Tips:
- 小基础:SQL
- 生产力:Excel
- BI工具:超智能
- 拉差距:Python
具体岗位职责:
- 做表格、做报表、数据分析报告、问题分析和跟踪、重点业务客户跟踪;
- 产品运营相关数据分析整理,建立分析模型(指 BI的使用 和 机器学习);Tableau;
- 智能营销、风控,主要是预测场景;
- 数学、统计学、计算机相关;
前景:
- 擅长与人打交道:业务方向,高级数据分析 业务专家
- IT型:数据平台 数据质量 大数据工程师
- 喜欢数据:机器学习算法 数据挖掘 算法 解决方案专家
理解业务、学习技术、领域深耕(用户增长、风控、推荐、金融量化)、数据科学;
数据分析思维、统计学、Excel、SQL、Python、业务理解、PBI、Tableau、数据分析报告;
可以兼职做一些数据分析的工作;
一名好的数据分析师:
- 搭建好的指标体系,选择好的指标,生成好的报表;
- 直观的传达信息:可视化;
- 正确且高效的传达信息;
- 真实的统计,统计所传达的真相;
好的指标:
- 王者为例:
- 作战指标:场次 胜率 输出 生存 KDA
- 信誉指标:信誉分 被举报次数 举报成功次数
- 等级指标:VIP等级、经验等级
- 社交指标:好友数 点赞数
思维训练:
- 看别人的报告、图表,所表达的信息;
- 看指标:行业的指标、指标体系;
- 利用统计学:查看数据分布,适当选择可视化方法;
Excel入门基础
- 数据格式 单元格格式【开始】
- 函数:汇总 统计 文本处理 时间计算 查找和匹配 【公式】
- 可视化【插入】
- 数据透视表
Power Query:使用PowerBI,而不用Excel;
基础、数据条件格式、快捷键
- F2: 切换单元格的编辑和选择模型
- alt+enter:单元格中换行
- 行列操作 可以自动调节 单元格行高、宽
- 设置单元格格式 可以调整文字排列角度
数据格式:
- 文本;数字;其他;自定义;
选择特定的数据类型 主要是为了匹配使用相应的函数
Excel的自定义格式:
##"次"
[>=75][蓝色]##"次";[<75][红色]##"次" // 这种根据条件改变了数字值的颜色;使用条件格式 可以设置单元格的颜色(颜色进度条);
[>=60][蓝色]##"分";[<60][红色]##"分"####;0000(自动补位)
- 自定义格式的结构
方式1
四个部分代码结构,中间用 ; 号间隔:
格式: 正数格式;负数格式;零格式;文本格式
示例:
两部分代码结构:
第一部分用于正数和零,第二部分用于负数
00.00;[红色]"-"00;
一部分代码结构:
用于所有数字
要跳过某一代码部分,需要为其指定一个结束分号;
方式2
特定条件,如
大于条件值;小于条件值;等于条件值;文本
示例:
[红色][<=100];[蓝色][>100]
方式3
特定条件
条件值1;条件值2;同时不满足条件值1,2;文本
使用方法:
使用 TEXT(value, format txt)
示例:
TEXT(1234.4567, "00.00") 显示为 1234.46
这里会用到一些符号标记:
- G/通用格式 // 这是默认的格式
- # // 代表数字
- ##.## // 保留两位小数
- ##.00 // 保留两位小数 不够则补0
- 0 // 也代表数字,不过 0000 对应的数值如果只要3位 就会在前 补一个0(这个0并无意义)
- "" // 使用双引号标记显示的字符串 仅仅是额外显示 不会影响被保留的单位
- ? // 为无意义的零在小数点两边添加空格,以便使小数点对其
- ??.???
- , // 显示千位分隔符或者将数字除以千倍显示
- #,# // 千位分隔符
- #, // 除以千倍
- #,, // 除以千千倍
- . // 小数点 如果外加双引号则为字符
- 0.#
- % // 百分比
- #% // 以百分比显示数字
- / // 显示后面一个字符 实际会被转成双引号的形式
- "" // 显示双引号里的字符
- * // 重复下一次字符 直到充满列宽,用于文本重复显示
条件格式
- 数据条;色阶;显示规则;
单元格样式
清除功能
排序和筛选
- 自定义排序,可以按照
- 单元格值 的排序
- 单元格颜色 的排序
- 字体颜色 的排序
- 条件格式图标 的排序
查找和选择
- 查找指定内容的单元格后,在查找弹出内容 全选
- 再针对指定的内容 进行替换
填充柄、冻结窗格、数据格式的变换
审阅:保护工作表、工作簿,即添加密码、进行操作限制;
只开放部分区域:可以 使用审阅中的“允许编辑区域”
填充柄:
- 放在单元格的右下角,变成➕号,然后拖动;
- 填充方式是可选的(右键拖动):可复制、可填充等差 等比 日期序列等;
添加自定义选项序列
- 文件 选项 高级 编辑自定义列表;
多个不连续单元格填入同数据
- Ctrl 逐个选中
- Ctrl + Enter补全
文本记忆输入:
- 右键 从下拉列表中选择,会把所编辑单元格之上的所有数据使用下拉选择输入;
- 相当于进行了有效性验证
数据验证:
- 单元格只能输入要求的数据;
- 选择验证区域,选择 数据 -》数据验证 功能,进行验证条件设置;可以把已存在的无效数据圈出来;
数据可以从外部导入;(更确切的说是引入)
单列数据 可以 使用 数据中的分列功能 进行按照特定分隔符的拆分;
汇总的快捷方式:Alt
+ =
视图 冻结单元格:当数据行列较多时,方便查看;
定位条件 替换 排序等常用操作
填充空值:
- 查找 选择、定位条件、空值(或其他);
分类汇总:
- 数据 分类汇总;
查找 选择、定位条件、可见单元格
选择性粘贴:
- 对粘贴的数据 进行额外的操作
- 可以转置,将行转列
隔一行差一行
- 插入辅助列:
- 有数据的部分 填入等差数列 首项1
- 无数据的部分 填入等差数列 首项2
- 排序即可
快速填充、智能填充(Ctrl + e)
数据分列:
- 右侧需要有一个空列
Python编程环境
Anaconda和镜像
Anaconda / Miniconda
- python环境管理工具,支持conda命令安装所需包;
- 选择Python3 64位版本, Miniconda3 Windows 64-bit;
- Mac下载 MacOS pkg即可;
打开Anaconda Prompt终端:(或者cd到conda目录 conda activate base
)
接下来可以 做一些 conda的配置;
Anaconda 镜像使用帮助
- Anaconda 是一个用于科学计算的 Python 发行版,支持 Linux, Mac, Windows, 包含了众多流行的科学计算、数据分析的 Python 包。
- Anaconda 安装包可以到
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/
下载。 - TUNA 还提供了 Anaconda 仓库与第三方源(conda-forge、msys2、pytorch等,查看完整列表)的镜像,各系统都可以通过修改用户目录下的
.condarc
文件。Windows 用户无法直接创建名为.condarc
的文件,可先执行conda config --set show_channel_urls yes
生成该文件之后再修改。
注:由于更新过快难以同步,我们不同步pytorch-nightly, pytorch-nightly-cpu, ignite-nightly这三个包。
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
- 即可添加 Anaconda Python 免费仓库。
- 运行
conda clean -i
清除索引缓存,保证用的是镜像站提供的索引。 - 运行
conda create -n myenv numpy
测试一下吧。
主要是配置国内的安装源 如清华源;(某些包如果这个源没有,就需要更换其他源,或者使用pip安装)
conda install jupyter
pip install pyecharts # pyecharts只能使用pip安装
环境变量:
- 打开命令提示符,可执行的指令包括:内部命令、外部命令、可运行程序、批处理文件;
- 我们之所以能够执行python启动python环境,是因为我们配置了环境变量;
- 环境变量相当于执行命令时,优先检索的路径;
用户变量 和 系统变量:
- 一般配置到系统变量 PATH中;
- 主目录、script、lib、bin;
- 相关的指令包括: conda、python、jupyter notebook;
which python
查看指定终端命令 环境变量的路径
conda的基本使用:
Conda:查看
conda list
conda env list
conda update conda
Conda:创建
conda create -n your_env_name python=X.X
python --version
source activate your_env_name(虚拟环境名称) / activate your_env_name(虚拟环境名称) / conda activate base
conda install -n your_env_name [package]即可安装package到your_env_name中
Conda:切换
deactivate env_name,也可以使用`activate root`切回root环境
Linux下使用 source deactivate
Conda:更新
conda update conda
conda update --force conda
移除环境
使用命令conda remove -n your_env_name(虚拟环境名称) --all, 即可删除。
删除环境中的某个包。
使用命令conda remove --name $your_env_name
$package_name 即可。
设置国内镜像
如果需要安装很多packages,你会发现conda下载的速度经常很慢,因为Anaconda.org的服务器在国外。所幸的是,清华TUNA镜像源有Anaconda仓库的镜像,我们将其加入conda的配置即可:
# 添加Anaconda的TUNA镜像
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# TUNA的help中镜像地址加有引号,需要去掉
# 设置搜索时显示通道地址
conda config --set show_channel_urls yes
示例:
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
conda config --set show_channel_urls yes
notebook操作
单元格选中状态(编辑状态)
- a 上边加一个
- b 下边加一个
- c copy
- v 粘贴
- dd 删除单元格
- x 剪切单元格(往往用来替代删除)
- z 撤销单元格操作(注意撤销的是对单元格的操作)
- m 切换到markdown
- y 切换回code
- 编辑状态 切换到 选中状态:esc
shift+enter
/ctrl + enter
运行单元格shift + tab
查看函数 类似问号?的方式查看函数文档func?
help(len)
魔发指令:
%run
运行外部python脚本(一般可以把软件工具包 写成这样一个单独的脚本)%time
记录一行运行时间
%time func
%%time
记录多行运行时间
%%time
func1
func2
%timeit
循环多次取均值
%timeit func
%%timeit
循环多次取均值
%%timeit
func1
func2
%who
查看当前Python变量%whos
更详细
值得注意IN OUT 的单元格序号 说明单元格的操作是有顺序的;
In[45]
可以返回 单元格In序号为45的输出Out[44]
可以返回 单元格Out序号为44的输出_
最近一次输出_44
等价于Out[44]
多个cell运行独立 但是资源共享;Ipython内核:基于python内核,做了数学上的优化;
Python数据处理之 numpy、pandas、matplotlib
numpy、pandas、matplotlib + seaborn、pyecharts
numpy
矩阵运算
import numpy as np
import matplotlib.pyplot as plt
arr = np.array([])
arr.sum()
np.arange(1,10,2) # 一组等差序列
np.random.randn(n) # 一组随机数 服从正态分布(均值0 方差1)
plt.hist(data) # 直方图展示
np.random.randint(起始数, 终止数,(行,列))
arr.reshape((4,5))
# 从0 到 2π 之间 拆出100个数,等差数列
x = np.linespace(0, 2*np.pi, 100)
y = np.sin(x)
pandas
二维表格处理:分析 和清晰
- series
- DataFrame
import pandas as pd
pd.Series(['a','b','c']) # 默认 显示索引 0 1 2
names = pd.Series(['a','b','c'], index=['x','y','z']) # 指定 显示索引为 x y z
ages = pd.Series(['1','2','3'], index=['x','y','z'])
# 共用索引 即可组成表格
pd.DataFrame(data={
'names':names,
'ages':ages
})
# 也可以传入数组(ndarray也可)进行构建
pd.DataFrame([[1,2],[1,2],[1,2]], columns=['date','score'], index=["A","B","C"])
# 其他构造方法
df = pd.DataFrame()
df['date'] = [1,3,5]
df['score'] = [2,4,6]
# 从一个字典构造
pd.DataFrame.from_dict({'a':[],'b':[]}) # 默认列索引
pd.DataFrame.from_dict({'a':[],'b':[]}, orient="index") # 可以改变朝向 变成行索引
修改索引 :
# 把列设置为索引
df.set_index('date') # 未修改原数据
df.set_index('date', inplace=True) # 替换原数据
# 把索引设置为列
df.reset_index()
df.reset_index(inplace=True)
# 修改 索引和列名
df.rename(index={"A":"a","B":"b","C":"c"}, columns={'X':'x','Y':'y'}, inplace=True)
文件读取和写入:
pd.read_excel('./xxx1.xlsx')
pd.read_excel('./xxx1.xlsx', sheet_name=0) # 第一个sheet的索引为0
pd.read_excel('./xxx1.xlsx', index_col=0) # 将第0列设定为 行索引
pd.read_excel('./xxx1.xlsx', header=0) # 将第0行设定为 列索引(多行就传入数组)
df.to_excel('./xxx2.xlsx', index=False)
数据的读取和筛选:
data_list = [[1,2,3]],[4,5,6],[7,8,9]
data = pd.DataFrame(data=data_list, index=['r1','r2','r3'], columns=['c1','c2','c3'])
# 读取n列
data['c1'] # 单列 seriex
data[['c1','c2']] # 多列 dataframe
# 读取n行
data.loc['r1'] # 单行
data.loc[['r1','r2']] # 多行
data.head(10) # 查看前10行 默认为5
# 筛选
data[df['c1'] > 1]
data.shape
data.describe()
data.info()
data['c1'].value_counts() # 数值频次统计
# 运算
df['sum'] = df['c1'] + df['c2'] + df['c3']
# 聚合运算
df.sum(axis=0) # 列向 每一列求和 series
df.mean(axis=1) # 行向 每一行求和 series
# 数据映射:通过map方法 对数据列进行映射
def map_func(x):
if x >0 :
return 'A'
else:
return 'B'
df['c1'].map(map_func) # map是对Series的
df.apply(map_func) # apply是对Dataframe的
df.apply(map_func, axis=0) # axis=0(每次给一列,可以对该列的每行访问)
df.apply(map_func, axis=1) # apply通过设置axis=1(每次给一行,可以对该行的列访问)
df.sort_values(by='c1', ascending=False) # 排序
df.drop_duplicates(subset=["name", "songer"], keep="first", inplace=True) # 按列去重
# pandas 其他常用方法:
mean(axis=0, skipna=False) # DataFrame 经计算返回的是 Series对象 默认按列进行计算
sum(axis)
sort_index(axis, ascending) # 对 列/行 索引进行排序
sort_values(by, axis, ascending) # 对 列/行 值进行排序
# 空值处理
df.fillna(value=0, inplace=True) # 全部填充
df.loc[2, 'c2'] = 0 # 单独赋值 索引为2的行 列名为c2的列
df.loc[‘a’,’one’] # 更推荐的方式 和ndarray类似
df.loc[['a’,’c'],:]
# 空值检验
df.isnull()
df.isnull().sum() # 每列空值个数
df.isnull().sum().mean() # 每列空值占比
# 处理缺失数据的方法:
dropna() #默认 一行只要有一个缺失值 整行就都会被删掉
dropna(how=‘all’) # how的默认值是any 设置为all之后 那么需要整行都是缺失值 才会被删掉;
dropna(axis=1) # 按列轴 进行 缺失值处理
fillna()
isnull()
notnull()
pandas 时间相关:
# pandas 对时间对象的处理
# 时间序列类型:
#
时间戳
#
时期
#
间隔
# Python标准库处理时间对象:datetime time
import datetime
datetime.datetime.strptime(‘2021-06-21’,’%Y-%m-%d')
# 灵活处理时间对象:dateutil库(pandas依赖该库)
dateutil.parser.parse('2021/06/21’)
dateutil.parser.parse('06/21/2021')
# 成组处理时间对象:
pd.to_datetime(['2021/06/21','2021/06/22'])
# 生成时间范围:
dt = pd.date_range(start, end, freq='1h20min') # 默认频率是天(D day)、月(M month)、半个月(SM semi-month)小时(H hour)、周日(W week)、周一(W-MON)、工作日(B business)、分钟(T min)、秒(S second)、年(A year);
pd.date_range(start, period)
dt[0].to_pydatetime()
# pandas 时间序列
#
以时间对象作为索引的 Series 或 DataFrame
#
datetime对象作为索引时 是存储在 DatetimeIndex对象中的
# 时间序列特殊功能:
#
传入 年 年月 作为切片方式
#
传入日期范围作为切片方式
#
丰富的函数支持:
resample() # 重新采样
sr.truncate(before,after) # 类似切片
sr = pd.Series(np.arange(100), index=pd.date_range('2020-01-01', period=100))
sr['2020-03'] # 整个三月
sr['2020-03':'2020-4'] # 切片 支持不完整的日期
sr.resample('W').sum() # 会算出来 每一周数据的和
sr.resample('M').mean() # 每个月数据的平均值
使用实例:
# 时间类型装换
pd.to_datetime(df['日期'])
df.info()
df.set_index('日期')
# 2016年3月的所有数据(DataFrame)
df.loc['2016-3'] # 由于是datetime类型 这里索引行 会自动识别
# 路径简要操作
if not os.path.exists('./test'):
os.makedirs('./test')
for item in os.listdir('./test')
file_path = os.path.join('./test', item)
print(file_path)
for root, dirs, filenames in os.walk('./test')
print('逐层路径 遍历目录!!')
for filename in filenames:
print(os.path.join(root, filename))
# 汇总:
# 级联汇总:纵向(字段同)
pd.concat(df1, df2)
# 合并汇总:横向(关联索引同)
matplotlib
数据可视化功能:
- plt.plot() 折线图
- plt.bar() 柱状图
- plt.pie() 饼状图
- plt.scatter() 散点图
# 引入方式
import matplotlib.pyplot as plt
# from matplotlib import pyplot as plt # 同
%matplotlib inline
# 多条线:
plt.plot(x, y, color='red', linewidth=3, linestyle='--') # -- 虚线
plt.plot(x, y, color='red', linewidth=3, linestyle='-') # - 实线
plt.show() # 渲染(单元末尾可选)
plt.bar(x,y)
plt.bar(x,y, color=np.random.random((4,3))) # 4个 3元组 值为0~1之间的小数
plt.show() # 渲染(单元末尾可选)
plt.scatter(x, y)
plt.scatter(x, y, s=z) # s指 size 表示散点大小
plt.show() # 渲染(单元末尾可选)
# 图例、标题和说明
plt.title('Title')
plt.xlabel('X')
plt.ylabel('Y')
plt.plot(x, y, label='L1') # 图例信息
plt.legend() # 图例展示
plt.legend(loc='upper right') # 指定位置 右上角【upper lower right left】
# 中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示为方块的问题
# 可以打印 查看 plt.rcParams
pandas中的便捷绘图:
df.plot(kind='line') # 线状图
df.plot(kind='bar') # 柱状图
df.plot(kind='hist') # 直方图
df.plot(kind='bie') # 饼图
df.plot(kind='box') # 箱体图
df.plot(kind='area') # 面积图
# series 也有类似的绘图功能
df.T.plot()
绘制多图:子画布
figure
axes:1
axes:2
axes:3
axes:4
# 绘制多图
plt.figure(figsize=(12, 8)) # 调整画板大小
ax1 = subplot(221) # 2行2列的画布 在子图序号1上进行绘制
ax1.plot(x, y)
ax2= subplot(222)
ax2.plot(x, y)
ax3= subplot(223)
ax3.plot(x, y)
ax4= subplot(224)
ax4.plot(x, y)
Over!
最后
以上就是幽默电灯胆为你收集整理的数据分析——基础环境和工具数据分析学习及实用技巧 —— LF《数据分析集训营》的全部内容,希望文章能够帮你解决数据分析——基础环境和工具数据分析学习及实用技巧 —— LF《数据分析集训营》所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复