Excel做 “回归分析”,你可能都没玩儿过!

点击上方蓝色字关注~

来源:大数据分析和人工智能

网站分析中专业的工具除了Google Analytics, Adobe Sitecatalyst, Webtrends, 腾讯分析和百度统计等外,我想最常用的数据处理工具就是Excel了,Excel里头最基础的就是运算和图表的制作,稍微高级一点就是函数和数据透视表的使用了,当然你可能还会想到VBA和宏,但估计很少高手会使用这些高级的功能。

那对于高级的数据分析而言,也就是涉及统计学的专业分析方法和原理的时候,是不是就一定得求助于SPSS,SAS这类专业的分析工具呢?数据分析从低级到高级层次的跳跃过程中有没有可以起承接作用的工具呢?

其实是有的,这就是Excel的数据分析功能。高级的数据分析会涉及回归分析、方差分析和T检验等方法,不要看这些内容貌似跟日常工作毫无关系,其实往高处走,MBA的课程也是包含这些内容的,所以早学晚学都得学,干脆就提前了解吧,请查看以下内容。

在使用之前,首先得安装Excel的数据分析功能,默认情况下,Excel是没有安装这个扩展功能的,安装如下所示:

1. 鼠标悬浮在Office按钮上,然后点击【Excel选项】

2. 找到【加载项】,在管理板块选择【Excel加载项】,然后点击【转到】

3. 选择【分析工具库】,点击【确定】

4. 安装完后,就可以【数据】板块看到【数据分析】功能,如下所示

安装完后,首先来了解一下回归分析的内容。

回归分析

在详细进行回归分析之前,首先要理解什么叫回归?实际上,回归这种现象最早由英国生物统计学家高尔顿在研究父母亲和子女的遗传特性时所发现的一种有趣的现象:

身高这种遗传特性表现出”高个子父母,其后代身高也高于平均身高;但不见得比其父母更高,到一定程度后会往平均身高方向发生’回归’”。这种效应被称为”趋中回归”。现在的回归分析则多半指源于高尔顿工作的那样一整套建立变量间的数量关系模型的方法和程序。这里的自变量是父母的身高,因变量是子女的身高。

百度百科对于回归分析的定义是: 回归分析(regression analysis)是确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法。运用十分广泛:

  • 回归分析按照涉及的自变量的多少,可分为一元回归分析和多元回归分析

  • 按照自变量和因变量之间的关系类型,可分为线性回归分析和非线性回归分析

应用案例

这里举个电商的例子:电子商务的转换率是一定的,网站访问数一般正比对应于销售收入,现在要建立不同访问数情况下对应销售的标准曲线,用来预测搞活动时的销售收入,如下所示:

1. 首先,利用散点图描绘图形


2. 添加趋势线,并且显示回归分析的公式和R平方值

从图得知,R平方值=0.9995,趋势线趋同于一条直线,公式是:y=0.01028x-27.424


R 平方值是介于 0 和 1 之间的数字,当趋势线的 R 平方值为 1 或者接近 1 时,趋势线最可靠。因为R2 >0.99,所以这是一个线性特征非常明显的数值,说明拟合直线能够以大于99.99%地解释、涵盖了实际数据,具有很好的一般性, 能够起到很好的预测作用。


3. 使用Excel的数据分析功能


(1)点击【数据分析】,在弹出的选择框中选择【回归】,然后点击【确定】

(2)【X值输入区域】选择访问数的单元格,【Y值输入区域】选择销售额的单元格,同时勾选如下所示的选项,包括残差、标准残差、残差图、线性拟合图和正态概率图

(3)以下内容是残差和标准残差

(4)以下是残差图

残差图是有关于实际值与预测值之间差距的图表,如果残差图中的散点在中轴上下两侧分布,那么拟合直线就是合理的,说明预测有时多些,有时少些,总体来说是符合趋势的,但如果都在上侧或者下侧就不行了,这样有倾向性,需要重新处理。


(5)以下是线性拟合图

在线性拟合图中可以看到,除了实际的数据点,还有经过拟和处理的预测数据点,这些参数在以上的表格中也有显示。


(6)以下是正态概率图

正态概率图一般用于检查一组数据是否服从正态分布,是实际数值和正态分布数据之间的函数关系散点图,如果这组数值服从正态分布,正态概率图将是一条直线。回归分析不一定得符合正态分布,这里只是仅仅把它描绘出来而已。


以上数据表格和图表都说明公式y=0.01028x-27.424是一个值得信赖的预测曲线,假设搞活动时流量有50万访问数的话,那么预测销售将是51373,如下图所示:

取数,取数,取个屁啊!

图解 Numpy

后台回复“入群”即可加入小z数据干货交流群
<think>嗯,用户问的是如何用适当的数据结构和算法来表示和解决搬箱子游戏的问题。首先,我需要理解搬箱子游戏的基本机制。这类游戏通常涉及一个网格地图,玩家推动箱子到目标位置,每个箱子必须到达指定点才能过关。数据结构方面,首先要考虑如何表示游戏的状态,包括玩家位置、箱子位置、墙壁和目标点。 然后想到可能需要用图搜索算法,比如A*寻路算法,因为用户之前提到过A*在游戏中的应用。但搬箱子的问题比普通的寻路复杂,因为推动箱子会改变游戏状态,每个移动都可能影响后续的路径。这时候状态空间会变得很大,需要考虑高效的表示方法。 接下来,数据结构的选择很重要。比如,每个状态可以用一个结构体或类来保存玩家位置、箱子坐标等。为了优化存储,可能需要压缩这些信息,比如使用位掩码或者坐标对。不过,用户之前的引用里提到Redis的压缩列表,但这里可能不太适用,因为搬箱子游戏的状态需要频繁更新和快速访问,压缩列表适合存储较小的元素,但可能不够灵活。 另外,用户提到降采样和池化操作,虽然这在图像处理中常用,但搬箱子问题可能不太相关。不过,可以考虑状态空间的简化,比如忽略对称状态或者合并相似状态,以减少计算量。 关于算法,A*算法需要合适的启发式函数。对于搬箱子,常见的启发式可能是计算每个箱子到目标的最小距离之和。但需要注意,推动箱子后玩家的位置是否允许继续移动,所以启发式函数需要可采纳的,不能高估实际成本。 用户之前的引用里还提到随机寻路算法,但搬箱子需要精确的路径规划,随机方法可能效率不高。不过,在生成关卡或者测试时,可能用随机算法来模拟不同的情况。 然后,考虑到状态可能非常多,如何高效存储和检索已访问的状态是关键。可以使用哈希表来存储状态和其对应的代价,避免重复计算。或者使用优先队列来管理待探索的状态,按估计总成本排序。 另外,用户的问题可能还涉及到如何表示地图。二维数组可能足够,但每个单元格需要区分墙壁、空地、目标点、箱子和玩家。可以用不同的字符或枚举类型来表示。 最后,需要验证算法在复杂情况下的表现,比如多个箱子需要按特定顺序推动的情况。这时候可能需要更高级的算法,比如分层次规划,先解决某个箱子,再处理下一个,但要注意相互之间的依赖。 总之,数据结构需要有效捕捉游戏状态,算法需要高效搜索状态空间,同时启发式函数要准确估计剩余步骤,才能有效解决搬箱子问题。</think>### 搬箱子游戏(推箱子)的数据结构与形式化表示 #### 一、核心数据结构设计 1. **地图表示** - 使用二维数组或矩阵描述游戏场景,每个单元格可定义为以下类型(符号示例): - `#`:墙壁(不可通行) - `.`:空地(可移动区域) - `$`:箱子 - `@`:玩家角色 - `*`:目标点(箱子需到达的位置) - `+`:箱子已位于目标点 - 示例结构: ```python game_map = [ ['#', '#', '#', '#', '#'], ['#', '@', '.', '$', '#'], ['#', '.', '#', '.', '#'], ['#', '*', '.', '.', '#'], ['#', '#', '#', '#', '#'] ] ``` 2. **状态表示** - 每个游戏状态需包含以下信息: ```python class GameState: def __init__(self, player_pos, boxes_pos, map_layout): self.player = player_pos # (x, y)坐标 self.boxes = boxes_pos # 集合{(x1, y1), (x2, y2)...} self.map = map_layout # 静态地图信息 ``` - **关键优化**:通过哈希(如坐标组合的字符串)快速判断状态唯一性[^4]。 --- #### 二、算法设计与实现 1. **寻路算法选择** - **A*算法**:用于玩家移动路径规划,避开障碍物(参考引用[1][^1]) - 启发函数(Heuristic)可选用曼哈顿距离或欧几里得距离 - 示例代码段: ```python def heuristic(a, b): return abs(a[0] - b[0]) + abs(a[1] - b[1]) ``` 2. **状态空间搜索** - **广度优先搜索(BFS)**或**双向BFS**:适合求解最短移动步数 - **IDA***(迭代加深A*):减少内存占用,适用于复杂关卡 - **状态压缩**:利用位运算或字符串编码存储玩家和箱子位置(参考Redis压缩列表思想[^4]) 3. **推动逻辑实现** - 判断箱子是否可推动的伪代码: ```python def can_push_box(player_pos, box_pos, direction, map): new_box_pos = (box_pos[0] + direction[0], box_pos[1] + direction[1]) return map[new_box_pos] != '#' # 目标位置非墙壁 ``` --- #### 三、形式化建模 1. **问题描述为状态转移系统** - 定义状态集合 $S$,初始状态 $s_0$,目标状态集合 $S_{goal}$ - 动作集合 $A = \{上, 下, 左, 右\}$ - 转移函数 $T: S \times A \rightarrow S$(包含推动箱子的连锁反应) 2. **目标函数** - 最小化总移动步数: $$ \min \sum_{t=1}^T \text{cost}(a_t) $$ - 约束条件:所有箱子必须位于目标点 $\forall b \in \text{boxes}, b \in S_{goal}$ --- #### 四、优化策略 1. **死锁检测** - 提前识别无法解决的箱子布局(如箱子被推到角落且无目标点) - 示例规则:若箱子两侧均为墙壁且不在目标点,则判定为死锁 2. **分层规划** - 第一阶段:计算玩家到达箱子附近的路径 - 第二阶段:规划推动箱子的顺序(参考全局路径优化[^2]) 3. **预处理技术** - 对地图进行降采样简化分析(如将连续可移动区域合并,参考池化思想[^2]) --- ### 示例解决方案流程 ```python # 使用优先队列实现A*搜索 import heapq def solve_sokoban(initial_state): frontier = [] heapq.heappush(frontier, (0, initial_state)) came_from = {} cost_so_far = {} came_from[initial_state] = None cost_so_far[initial_state] = 0 while frontier: current_cost, current_state = heapq.heappop(frontier) if is_goal(current_state): break for next_state in generate_next_states(current_state): new_cost = cost_so_far[current_state] + 1 if next_state not in cost_so_far or new_cost < cost_so_far[next_state]: cost_so_far[next_state] = new_cost priority = new_cost + heuristic(next_state) heapq.heappush(frontier, (priority, next_state)) came_from[next_state] = current_state return reconstruct_path(came_from, current_state) ``` --- ### 相关问题 1. 如何处理多个箱子之间的依赖关系以避免循环推动? 2. 如何设计高效的启发式函数来加速A*算法在推箱子问题中的收敛? 3. 能否将强化学习应用于搬箱子游戏的自动求解? 4. 在移动端设备上运行推箱子算法时需要考虑哪些性能优化手段? [^1]: A*算法在游戏路径规划中的核心应用场景 [^2]: 池化与降采样思想对复杂问题的简化作用 [^4]: 状态压缩技术对存储效率的提升
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值