title: Python第三阶段学习总结
category: Python数据分析
date: 2021/12/10
一. 数据分析概述
1. 数据分析师的职责和技能栈
1.1 职责
- 监控数据
- 揪出异常
- 找到原因
- 探索趋势
1.2 技能栈
- 计算机科学(数据分析工具、编程语言、数据库)
- 数学和统计学(数据思维、统计思维)
- 人工智能(机器学习算法)
- 业务理解能力(沟通、表达、经验)
- 总结和表述能力(商业PPT、文字总结)
2. 数据分析的流程
我们提到数分析这个词很多时候可能指的都是狭义的数据分析,这类数据分析主要目标就是生成可视化报表并通过 这些报表来洞察业务中的问题。广义的数据分析还包含了数据挖掘的部分,不仅要通过数据实现对业务的监控和分 析,还要利用机器学习算法,找出隐藏在数据背后的知识,并利用这些知识为将来的决策提供支撑。简单的说,⼀ 个完整的数据分析应该包括基本的数据分析和深⼊的数据挖掘两个部分。
基本的数据分析工作⼀般包含以下几个方面的内容,当然因为行业和工作内容的不同会略有差异。
- 确定目标(输入):理解业务,确定指标口径
- 获取数据:数据仓库、电子表格、三方接口、网络爬虫、开放数据集等
- 清洗数据:缺失值/重复值/异常值处理、数据变换(格式化、规范化)、数据归约、离散化等
- 探索数据:运算、统计、分组、聚合、可视化
- 数据报告(输出):数据发布,工作成果总结汇报
- 分析洞察(后续):解释数据的变化,提出对应的方案
深入的数据挖掘工作通常包含以下几个方面的内容,当然因为行业和工作内容的不同会略有差异。
- 确定目标(输入):理解业务,明确挖掘目标
- 数据准备:数据采集、数据描述、数据探索、质量判定等
- 数据加工:提取数据、清洗数据、数据变换、特殊编码、降维、特征选择等
- 数据建模:模型比较、模型选择、算法应用
- 模型评估:交叉检验、参数调优、结果评价
- 模型部署(输出):模型落地、业务改进、运营监控、报告撰写
3. 数据分析相关库
3.1 三大神器
-
NumPy:支持常见的数组和矩阵操作,通过
ndarray
类实现了对多维数组的封装,提供了操作这些数组的方法和函数集。由于 NumPy 内置了并行运算功能,当使用多核 CPU 时,Numpy会自动做并行计算。 -
Pandas:pandas的核心是其特有的数据结构
DataFrame
和Series
,这使得 pandas 可以处理包含不同类型的数据的负责表格和时间序列,这⼀点是NumPy的ndarray
做不到的。使用 pandas,可以轻松顺利的加载各种形式的数据,然后对数据进行切片、切块、处理缺失值、聚合、重塑和可视化等操作。 -
Matplotlib:matplotlib 是⼀个包含各种绘图模块的库,能够根据我们提供的数据创建高质量的图形。此外, matplotlib 还提供了 pylab 模块,这个模块包含了很多像 MATLAB ⼀样的绘图组件。
二. NumPy的运用
三. Pandas的运用
四. Matplotlib的运用
-
Matplotlib —> 画图给自己看,用于数据探索
-
画布 —>
figure()
—> Figure -
坐标系 —>
subplot()
—> 一个画布上可以有多个坐标系 —> Axes -
坐标轴 —>
plot()
/scatter()
/bar()
/pie()
/hist()
/box()
…- 趋势 —> 折线图
- 关系 —> 散点图
- 差异 —> 柱状图
- 占比 —> 饼图
- 分布 —> 直方图
- 描述性统计信息 —> 箱线图(盒须图)
# 折线图 x = np.linspace(-2 * np.pi, 2 * np.pi, 60) y1, y2 = np.sin(x), np.cos(x) plt.figure(figsize=(8, 4)) plt.plot(x, y1, color='blue', marker='^') plt.plot(x, y2, color='green', marker='o')
# 散点图 plt.scatter(x, y) plt.plot(x, y_hat, color='red') plt.plot(x, y_hat2, color='green') plt.xlabel('距离(km)') plt.ylabel('单位(万元)')
# 柱状图 ser.plot(figsize=(6, 3), width=0.3, kind='bar', color=['r', 'y', 'b', 'g']) plt.grid(True, alpha=0.25, axis='y', linestyle='--') plt.xticks(rotation=0) plt.yticks(np.arange(0, 601, 100)) # 显示图列 plt.legend(['需求量']) # 在柱状图的柱子上绘制数字 for i in range(ser.size): # plt.text里前两个放的是坐标 plt.text(i, ser[i] + 5, ser[i], ha='center') plt.show
# 柱状图和折线图 temp = np.round(lagou_df.groupby('city').salary.mean(), 1) temp.plot(kind='bar', figsize=(10, 4)) temp.plot(kind='line', color='red', marker='o', linestyle='--') plt.grid(True, alpha=0.25, axis='y', linestyle='--') plt.xticks(rotation=0) plt.yticks(np.arange(0, 30, 5)) plt.xlabel('city') plt.ylabel('sal') for i in range(temp.size): plt.text(i, temp[i] + 1, temp[i], ha='center') plt.show()
# 饼图(wedgeprops参数 ---> 甜甜圈图) temp.plot( kind='pie', figsize=(6,6), autopct='%.1f%%', wedgeprops=dict(width=0.6, edgecolor='white'), pctdistance=0.7, explode=(0, 0, 0, 0.2, 0, 0, 0, 0, 0, 0), shadow=True ) plt.ylabel('') plt.show()
# 箱线图 ---> 找到异常值 plt.boxplot(heights, whis=3) plt.show()
-
-
Seaborn —> 对Matplotlib做了封装,用默认的配置减少绘图参数(具体代码上官网查看示例 http://seaborn.pydata.org/index.html)
!pip install seaborn
import seaborn as sns sns.set_theme(style="ticks") sns.pairplot(tips_df, y_vars='tip', x_vars=['total_bill', 'size'] )
-
ECharts / D3.js —> 商业数据看板 / 数字化大屏 —> 前端JavaScript绘图库
- 后端程序:提供绘图需要使用的数据(API接口)—> 数据的服务化 —> Java / PHP / Python
- 前端程序:通过HTTP获取数据,用JavaScript将数据渲染到网页上
—> PyECharts(具体代码上官网查看示例 https://pyecharts.org/#/zh-cn/intro)
!pip install pyecharts !pip install snapshot_selenium
# 柱状图 from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.globals import ThemeType bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) bar.add_xaxis(ser.index.values.tolist()) bar.add_yaxis('成交量', np.round((ser.values / 10 ** 6), 2).tolist()) # bar.render('bar.html') bar.render_notebook()
# 柱状图 from pyecharts.charts import Bar from pyecharts import options as opts from pyecharts.globals import ThemeType # from pyecharts.render import make_snapshot # from snapshot_selenium import snapshot bar = Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT)) bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90]) bar.add_yaxis("商家B", [15, 6, 45, 20, 35, 66]) bar.add_yaxis("商家C", [10, 15, 25, 30, 65, 76]) # 全局参数 bar.set_global_opts(title_opts=opts.TitleOpts( title="销售统计图", subtitle="服装区商家销售统计", pos_left='12%' ), toolbox_opts=opts.ToolboxOpts(), datazoom_opts=opts.DataZoomOpts() ) bar.render_notebook() # 可以将形成的图表下载 # make_snapshot(snapshot, bar.render(), "bar.png")
图表的标记形状选择
图表的颜色选择