一、完成好ADB、Recovery、Magisk刷入后,将手机关机

此时务必确保你将小米账号退出登录,将手机屏幕密码全部清除,万万切记!!!

二、进入Recovery模式

  1. 长按电源+音量上键进入Recovery模式;

  2. 将卡刷ROM包通过ADB传入手机中;

传入指令为:adb push F:/MI9_MIUI13_22.1.25.zip /data

  • F:/MI9_MIUI13_22.1.25.zip为电脑上存放ROM包的目录
  • /data是手机中的data目录
  1. 此时我们点击安装按钮

image-20230128220748101

  1. 选择ROM安装包并点击刷入镜像(这里为了方便演示,包名依旧使用Magisk.zip代替哈)

image-20230128220917992

  1. 滑动确认,安装完毕以后重启系统

image-20230128221042974

  1. 等待正常进入系统即可。

image-20230128221849684

image-20230128221911543

如需ROM包+工具包请添加WX:15624552379

image-20230128221223307

一、安装ADB命令行

安装教程参照本站《Windows系统安装ADB命令行并配置环境》一文

二、刷入适合你机型的第三方 Recovery

目前推荐的第三方 Recovery 有 OrangeFoxTeamWinRecoveryProject (即 TWRP)

OrangeFox 是基于 TWRP 制作的。你可以理解为 TWRP 的魔改版本

三、下载TWRP

下载地址:https://dl.twrp.me/cepheus/

四、TWRP刷入步骤如下

  1. 手机关机,长按 音量减键 + 电源键 进入 FASTBOOT 模式。用数据线把手机和电脑连接起来。

  2. TWRP 为示例。下载对应的 recovery.img 到任意一个位置。如果你选择使用 LR.Team 定制版 TWRP,可以选择一键刷入版,就不会有下一步复杂的操作。

  3. 打开 cmd (或者其它终端),输入 fastboot flash recovery 上一步解压的 recovery.img 的文件地址 。以下是一个示例:

C:\Users\CYZ> fastboot flash recovery D:\recovery.img
Sending 'recovery' (65536 KB)                      OKAY [  2.040s]
Writing 'recovery'                                 OKAY [  0.368s]
Finished. Total time: 2.427s

如果出现

'fastboot' 不是内部或外部命令,也不是可运行的程序或批处理文件。 说明你没有配置好 ADB 环境。

  1. 在上一步的状态下,长按 音量加键 + 电源键 进入 Recovery 模式。
  2. 一般情况下,会出现一个英文界面,此时记住入 TWRP 后,会询问“是否保持系统分区为只读”。这里滑动按钮以允许修改 ,不然不能禁止 MIUI 替换回官方 Recovery。

滑动按钮允许 TWRP 修改 System 分区

  1. 由于 MIUI 在启动时会检查 System 分区完整性,上一步 TWRP 修改了 System 分区,这时重启手机会无法启动系统(“卡米”问题),需要通过刷入 Magisk 移除启动验证。

五、Magisk刷入步骤如下

  1. 电脑下载 Magisk 安装包,将其复制到手机上(这时电脑可以识别手机 MTP 设备),如果此时手机处于Recovery状态,我们可以是ADB命令将电脑中的文件快速传入手机,语法为abd push 电脑文件地址 手机文件内地址,例如 adb push F:/Magisk.apk /data

  2. TWRP 界面上点击“安装”,找到下载的是 Magisk 安装包,点击文件名,滑动按钮刷入;

  3. 等待 Magisk 刷入完成,点击“重启系统”,这时就不会有“卡米”问题,重启手机也不会丢失 TWRP 安装;

通过 TWRP 安装 Magisk 图解

  1. 安装了 Magisk 的缘故,启动系统后会看到一个 Magisk Manager 软件。它是 Magisk 图形管理软件,自带 Root 功能,也可以通过安装功能模块扩展更多玩法。

由于之前操作有修改 System 分区,后续更新 MIUI 原版系统需要注意(关闭系统自动更新),在更新系统前打开 Magisk Manager 软件,点击“卸载 Magisk”,选择“还原原厂映像”,之后再更新系统,更新后重新安装 TWRP 和 Magisk。

如需ROM包+工具包请添加WX:15624552379

image-20230128221223307

一、ADB安装包下载、解压、复制

下档路径如下:

Windows版本:https://dl.google.com/android/repository/platform-tools-latest-windows.zip
Mac版本:https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
Linux版本:https://dl.google.com/android/repository/platform-tools-latest-linux.zip

(一)将文件下载后解压到自定义目录,出现如下文件内容

image-20230128205812390

(二)然后我们复制如下几个文件到C:\Windows\SysWOW64\adb目录(32位系统复制到C:\Windows\System32\adb目录)

image-20230128205917954

二、配置环境变量

(一)打开资源管理器

image-20230128210751414

(二)系统属性

image-20230128210814193

(三)关于

image-20230128210845362

(四)系统信息

image-20230128210906020

(五)高级系统设置

image-20230128210943291

(六)高级

image-20230128211026561

(七)环境变量

image-20230128211122999

(八)系统变量-Path-编辑

image-20230128211308736

(九)新建-填入下述地址(C:\Windows\SysWOW64\adb)

image-20230128211458309

三、检验安装是否成功

(一)WIN+R调用命令行

image-20230128211737514

(二)输入cmd

image-20230128211808340

(三)输入adb --version

image-20230128211850389

只要能正常输出版本号,就说明ADB安装成功!!!可以进行下一步搞机测试 !!!

如需ROM包+工具包请添加WX:15624552379

image-20230128221223307

本文申明

  • 如果本文出现逻辑或者学术错误,请在本页留言或者联系作者邮箱(caoyongzhuo@qq.com[国内邮箱];warnerjulia866@gmail.com[国外邮箱])

  • 虽然Markdown语法优雅且规范,但由于博客采用复杂的显示模式,部分文字或表格会被浏览器转义为较丑样式,后期优化,还请谅解

  • 任何转载复用,请遵守 Creative Commons 国际准则,未经授权禁止商业用途

  • 未对接任何广告,下文推荐的数据分发平台均为作者亲测后推荐,读者可以自行选择阿里云[建议]、腾讯云[建议]、百度云[不建议]等大厂平台

  • 如需广告对接请移步上述邮箱或下述WX号,请说明来意,否则一律拒接

Stata安装

  • 本文使用 Stata17 MP 中文和谐版(永久激活序列号)编写,内置常用命令库,如需安装与作者相同版本的Stata或有数据分析、一对一辅导需求,请移步WX号:15624552379

image-20230113163316287

Stata导入数据

[-] 导入方式(为方便示例,都使用Excel数据,不考虑SQL数据库数据)

  • 使用代码导入


    1. 优点:对于超大型数据(一般是5w以上)的数据来说,使用代码导入更加快速,不易出错
    2. 缺点:要提前对于Excel数据进行分析整理
  • 使用Stata图形化界面导入


    1. 优点:对于中小型数据、不懂复杂数据结构的人来说是一种友好方式
    2. 缺点:不适合超大型数据导入

[-] 示例数据如下(请读者自行下载)

  • 为了博客运转速度不被大型文件拖垮,本文所有数据将全部托管于”七牛云CDN“进行转储并全球分发,请读者自行下载

  • 下载模式:点击加粗或高亮超链接文字跳转下载

  • 特别说明:七牛云CDN的付费挺贵的,希望不要有任何不怀好意之人使用网络下载器或爬虫频繁发起请求,博客安装了IP探针并且和公安联网,访客IP都将被记录存档,每12小时上传云端,如果遇到不法分子恶意请求或攻击,后果自负!

  • auto示例数据.xlsx下载

[-] 使用代码方式导入

cd "F:\STATA测试数据" //切换工作目录
clear //清除内存中的数据
set more off //设置结果滚动显示
import excel using "auto示例数据.xlsx", firstrow clear //更多参数请在命令行窗口输入 help import 进行详细语法查看
  • 工作目录以自己电脑的Excel文件存储地址为准,前三行是stata编码的三部曲
  • auto示例数据.xlsx是需要导入的文件名,具体以自己的文件名为准
  • firstrow参数是将Excel的第一行作为Stata变量名

image-20230113163923153

image-20230113164101176

  • clear参数是将目前Stata内存中的数据清楚
  • import的类型不止Excel一种,具体可以参考手册进行查看,手册查看方式:在命令行窗口输入 help import

[-] 使用Stata图形化界面导入

  • 打开Stata,在顶部选择”文件“?”导入“?”Excel电子表格“

image-20230114100637190

  • 在接下来的界面中,选择”浏览“?找到你”存放Excel的目录“?选择”工作表“?选择”单元格范围“?勾选”将第一行作为变量名“?点击”确定“

image-20230114102322326

image-20230114102440649

  • 此时数据已经导入Stata的数据管理器中,我们可以在右侧的<变量窗口##中看到导入的数据变量名(Excel表的第一行)

image-20230114102753628

  • 如果需要查看每一个变量名所对应的具体数值,我们可以点击Stata上方的数据编辑器

image-20230114103013997

数据类型、数据结构辨析

[-] Stata的常用数据类型

  • str --- 字符串类型 (在Stata 17的数据管理器中显示为黄色)
  • byte --- 字节类型 (在Stata 17的数据管理器中显示为白色)
  • int --- 整形类型 (在Stata 17的数据管理器中显示为白色)
  • double --- 数值类型 (在Stata 17的数据管理器中显示为蓝色)

认识基本的数据类型有助于后期在数据预处理过程中如merge、append、duplicates drop等命令的正常运行

[-] Stata的常用数据结构

  • 截面数据 --- 作者口诀:多个体,单时间
  • 时间序列数据 --- 作者口诀:单个体,多时间
  • 面板数据 --- 作者口诀:多个体,多时间


作者在此处使用 山东大学 - 陈强 -《高级计量经济学》中的课件进行阐释,陈强博客地址:http://www.econometrics-stata.com/col.jsp?id=101


  1. 截面数据
2013 年中国分省 GDP (亿元)
省份 GDP
北京 19500.56
天津 14370.16
河北 28301.41
山西 12602.24
内蒙古 16832.38
辽宁 27077.65
吉林 12981.46
黑龙江 14382.93
上海 21602.12
江苏 59161.75
浙江 37568.49
安徽 19038.87
福建 21759.64
江西 14338.5
山东 54684.33
河南 32155.86
湖北 24668.49
湖南 24501.67
广东 62163.97
广西 14378
海南 3146.46
重庆 12656.69
四川 26260.77
贵州 8006.79
云南 11720.91
西藏 807.67
陕西 16045.21
甘肃 6268.01
青海 2101.05
宁夏 2565.06
新疆 8360.24
  1. 时间序列数据
1994-2013 年山东省 GDP (亿元)
年份 GDP
1994 3844.5
1995 4953.35
1996 5883.8
1997 6537.07
1998 7021.35
1999 7493.84
2000 8337.47
2001 9195.04
2002 10275.5
2003 12078.2
2004 15021.8
2005 18366.9
2006 21900.2
2007 25776.9
2008 30933.3
2009 33896.6
2010 39169.9
2011 45361.9
2012 50013.2
2013 54684.3
  1. 面板数据
1994-2013 年中国分省 GDP (亿元)
省份 年份 GDP
北京 1994 1145.31
北京 1995 1507.69
... ... ...
北京 2012 17879.4
北京 2013 19500.56
天津 1994 732.89
天津 1995 931.97
... ... ...
天津 2012 12893.88
天津 2013 14370.16
... ... ...
新疆 1994 662.32
新疆 1995 814.85
... ... ...
新疆 2012 7505.31
新疆 2013 8360.24

在一般情况下,对于面板数据,我们可以拆分成截面数据和时间序列数据,但是这个过程无法逆向拆分,只可以逆向补充。原因是面板数据作为多个体、多时间的数据结构来说,想要拆分成截面数据的话,只需要提取单个时间节点的数据;想要拆分成时间序列数据的话,只需要提取单个个体的数据,这是一个十分有趣的过程,在下面我们进行详细介绍。

[-] 面板数据拆分为截面数据

** 面板数据拆分截面数据演示
cd "F:\STATA测试数据" //切换工作目录
clear //清除内存中的数据
set more off //设置结果滚动显示
import excel using "1994-2013年分省.xlsx", firstrow clear //导入面板数据

image-20230114144448416

  • 我们假设只需要截取1994年的界面数据
keep if 年份 == 1994 //第一种方式,使用keep保留符合要求的数据
drop if 年份 != 1994 //第二种方式,使用drop删除不符合要求的数据


此处Markdown语法与Stata语法出现了转义,请读者按照下图第14行代码中的"!="描述<不等于##逻辑判断


image-20230114145114977

[-] 面板数据拆分为时间序列数据

keep if 省份 == "北京" //第一种方式,使用keep保留符合要求的数据
drop if 省份 != "北京" //第二种方式,使用drop删除不符合要求的数据


此处Markdown语法与Stata语法出现了转义,请读者按照下图第14行代码中的"!="描述<不等于##逻辑判断


image-20230114181202928

字符串拼接

[-] 原始数据结构

| var1 | var2 | //变量名

% str % str % //数据类型

[-] 语法

gen new_var = var1 + var2

[-] 示例原始数据

| var1 | var2 |
| 12345| 5678 |

[-] 示例语法

gen sum_string = var1 + var2

[-] 示例结果数据

| var1 | var2 | sum_string | //变量名
| 12345 | 5678 | 123455678 | //变量名所对应的数值

字符串拆分

[-] 原始数据结构

| sum_string |

% str %

[-] 语法

gen new_var = substr(sum_string,m,n)

  • m : 从单元格第几个字符开始
  • n :从开始字符选择几个字符
  • 注意:一个汉字占用2个字符,一个数字占用1个字符

[-] 示例原始数据

| sum_string |

| 12345678 |

[-] 示例语法

gen var3 = substr(sum_string,2,4)

[-] 示例结果数据

| var3 |

| 2345 |

分组求和(单、多层级)

[-] 原始数据结构

数据结构不限

[-] 语法

bysort var1 : egen new_var = sum(var2) // 以var1为分类,对var2分组求和

bysort var1 var3 : egen new_var = sum(var2) // 以var1为一级分类,var3为二级分类,对var2分组求和

  • 其中的sum()函数可以更换为count()分组计数、max()分组求最大值
  • 其中的new_var变量名换成自己想要的就行

[-] 示例原始数据

| var1 | var2 | var3 |
| 1 | 3 | A |
| 1 | 2 | A |
| 1 | 2 | A |
| 1 | 3 | B |
| 1 | 2 | B |
| 1 | 3 | B |
| 2 | 1 | A |
| 2 | 1 | A |
| 2 | 2 | A |
| 2 | 2 | B |
| 2 | 2 | B |

[-] 示例语法

bysort var1 var3 : egen newvar = count(var2)

[-] 示例结果数据

| var1 | var2 | var3 | new_var |
| 1 | 3 | A | 3 |
| 1 | 2 | A | 3 |
| 1 | 2 | A | 3 |
| 1 | 3 | B | 3 |
| 1 | 2 | B | 3 |
| 1 | 3 | B | 3 |
| 2 | 1 | A | 3 |
| 2 | 1 | A | 3 |
| 2 | 2 | A | 3 |
| 2 | 2 | B | 3 |
| 2 | 2 | B | 3 |

文章地址:https://caoyongzhuo.cn/archives/902
备用地址:https://cloud.tencent.com/developer/article/2200692
代码如下:

%% 初始操作
cd 'F:\MATLAB\已恢复\本地磁盘(E)\caoyongzhuo\test2022_2\test2022_2' % 切换工作目录
ls % 列出当目录文件以确保工作路径选择正确
clc;
clear;

%% 第一问
clc;
clear;
Price = 3080; % 上证A股综合指数价格
mu = 1.051^(1/250)-1; % 上证A股综合指数平均收益率
sigma = 0.7/sqrt(250); % 上证A股综合指数标准差
N = 250*2; % 依据上课作业文件,我们可知一年的交易日为250天,两年极为250*2
dist = 'norm'; % 确定随机的模式(正态分布)
Price = RandnPrice(dist,Price,mu,sigma,N); % 上证A股综合指数预测价格
plot(Price(:,1)); % 行列转换
xlabel('time');
ylabel('price');

%% 第二问
clear % 清楚workspace中的数据文件
clc % 清楚窗口中的所有代码

% 设置时间序列数据
ftsdatas = ascii2fts('data.txt',2,2) % 设置时间序列数据
save ftsdatas.mat %将时间序列数据的mat文件保存在工作目录下

% MACD指标
% 绘制收盘价
load ftsdatas.mat
macdc = macd(ftsdatas)
plot(macdc)
% 绘制开盘价
macdo = macd(ftsdatas,'open')
plot(macdo)

% 威廉指标
wms = willpctr(ftsdatas)
plot(wms) % 绘制wms图像
hold on % 保持绘图窗口保持不变
plot(wms.dates,-80*ones(1,length(wms)),'color',[0.5 0 0],'linewidth',3) % 绘制的是横轴为时间,纵轴为一列,wms长度行的线条
plot(wms.dates,-20*ones(1,length(wms)),'color',[0 0.5 0],'linewidth',3)
hold off %关闭绘图窗口

% RSI技术指标
load ftsdatas.mat
rsi = rsindex(ftsdatas)
plot(rsi)
hold on
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0.5 0 0],'linewidth',2) % 绘制的是横轴为时间,纵轴为一列,rsi长度行的线条
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0 0.5 0],'linewidth',2)
hold off

% OBV指数
load ftsdatas.mat %% 从本地mat文件中调用数据
obv = onbalvol(ftsdatas) %%% 从workspace中调用数据
plot(obv)

% 绘制candle图
load ftsdatas.mat;
candle(ftsdatas)

% 绘制合并图
load ftsdatas.mat;
subplot(2,2,4)
candle(ftsdatas) %%绘制candle图

subplot(2,2,3)
plot(willpctr(ftsdatas))

subplot(2,2,1)
plot(macd(ftsdatas))

subplot(2,2,2)
rsi = rsindex(ftsdatas)
plot(rsi)
hold on
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0.5 0 0],'linewidth',2) % 绘制的是横轴为时间,纵轴为一列,rsi长度行的线条
plot(rsi.dates,30*ones(1,length(rsi)),'color',[0 0.5 0],'linewidth',2)
hold off

%% 第三问
%存放20股票的100天的收盘价
clc 
clear
load gp20.txt 
gps1=20
%%1﹣计算期望收益
price20 = mean(gp20)
%%2﹣计算收益率矩阵
retu =price2ret(gp20);
%%3﹣计算期望收益
expv = mean(retu);
%%%4﹣计算协方差矩阵% aita( X , Y )= sigama ( Xi - X )( Yi - Y ) Pi
aita = cov ( retu );
eig56= eig ( aita );
%协方差矩阵非半正定,进行修正
aita = aita+eye (gps1,gps1)*0.00001;%若非半正定,加很小的数使其为半正定矩阵

%% 第四问
clc
clear  %三个资产的投资选择问题
returns=[0.1 0.18 0.15] % 期望收益向量
stds=[0.15 0.25 0.2]    %标准差-表示每个资产的波动性
correlations=[1 0.9 0.1;0.9 1 0.4;0.1 0.4 1] %相关系数-对称矩阵
covariances=corr2cov(stds,correlations)  %计算协方差矩阵
portopt(returns,covariances,10) %选择10个点
hold on
rand('state',0)

weights=rand(500,3)
total=sum(weights,2) %weights矩阵的行相加
weights(:,1)=weights(:,1)./total %对权重做标准化处理
weights(:,2)=weights(:,2)./total
weights(:,3)=weights(:,3)./total
[portrisk,portreturn]=portstats(returns,covariances,weights)
plot(portrisk,portreturn,'.r')
title('均值-方差有效前沿以及各个资产组合的风险与收益')
xlabel('风险(标准差)')
ylabel('期望收益率')
hold off

clc
clear
rand('state',0)
figure
% RandSumOneTest
M=500;
N=3;
% method=1;
% X1=RandSumOne(M,N,method);
X1=rand(M,N)   
total1=sum(X1,2)       % 按行求和
for i=1:N             % 比例 标准化,变成了权重矩阵
    X1(:,i)=X1(:,i)./total1;
end
X2=rand(M,N)   
total2=sum(X2,2)       
for j=1:N             
    X2(:,j)=X2(:,j)./total2;
end
% method=2;
% X2=RandSumOne(M,N,method);

%预期收益率向量
ExpReturn = [0.1 0.18 0.15]; 
%协方差矩阵 
ExpCovariance = [0.0225000000000000,0.0337500000000000,0.00300000000000000
                0.0337500000000000,0.0625000000000000,0.0200000000000000
                 0.00300000000000000,0.0200000000000000,0.0400000000000000];
%变量初始化
PortRisk1=zeros(M,1);
PortReturn1=zeros(M,1);
PortRisk2=zeros(M,1);
PortReturn2=zeros(M,1);

for i=1:M
    [PortRisk1(i), PortReturn1(i)] = portstats(ExpReturn, ExpCovariance,X1(i,:));
    [PortRisk2(i), PortReturn2(i)] = portstats(ExpReturn, ExpCovariance,X2(i,:));
end
plot(PortRisk1, PortReturn1,'r.')
hold on
plot(PortRisk2, PortReturn2,'bo')
xlabel('PortRisk')
ylabel('PortReturn')
legend('X1','X2')