Excel做数据分析,用得久了,困扰也来了

数据太大跑不动

Excel有容量限制,几十万行就会很慢,百万行就跑不动了

公式太难写不出

集合运算、分组后运算都是Excel不擅长的,比如

找出股票连涨超过5天的区间
怎么办?

数据库?

数据量大点倒是没问题,但环境准备挡住90%的Excel用户。而且,其实SQL难度经常远大于Excel。

计算每支股票最长连涨天数

这种嵌套代码,专业程序员都很难写出来

SELECT CODE, MAX(con_rise) AS longest_up_days
FROM (
	SELECT CODE, COUNT(*) AS con_rise
	FROM (
		SELECT CODE, DT, 
					SUM(updown_flag) OVER (PARTITION BY CODE ORDER BY CODE, DT) AS no_up_days
		FROM (
			SELECT CODE, DT, 
						CASE WHEN CL > LAG(CL) OVER (PARTITION BY CODE ORDER BY CODE, DT)  THEN 0
									ELSE 1 END AS updown_flag
			FROM stock
		)
	)
	GROUP BY CODE, no_up_days
)
GROUP BY CODE

Excel直观四步搞定

1、按照代码、日期排序

2、填写公式计算连续上涨天数

3、分组汇总计算最长连续上涨天数

4、收缩显示,解决

BI?

借助数据库解决大数据没问题,但还是有同样的环境准备困难。

BI能做的运算复杂度更不如SQL,Excel熟手很受限。

看来只能学编程了,毕竟没什么不能用编程做,可是...

VBA

表格数据运算能力太弱,随便啥事都很麻烦。

并不直接提供大数据支持,啥都要硬写。

Python

表格数据运算能力还行,但还是有点复杂。

计算每支股票最长连涨天数
import pandas as pd
stock_file = "StockRecords.txt"
stock_info = pd.read_csv(stock_file,sep="\t")
stock_info.sort_values(by=['CODE','DT'],inplace=True)
stock_group = stock_info.groupby(by='CODE')
stock_info['label'] = stock_info.groupby('CODE')['CL'].diff().fillna(0).le(0).astype(int).cumsum()
max_increase_days = {}
for code, group in stock_info.groupby('CODE'):
    max_increase_days[code] = group.groupby('label').size().max() – 1
max_rise_df = pd.DataFrame(list(max_increase_days.items()), columns=['CODE', 'max_increase_days'])

也没有直接的大数据支持,还得硬写

编程语言的交互性也不好,远没有所见即所得的Excel顺手

esProc Desktop 三大优势

1网格代码直观自然、调试便利

从此告别烦人的print大法

2强大表格数据运算能力,远超Python

计算每支股票最长连涨天数
A
1=T("stock.xlsx")
2=A1.sort(DT)
3=A2.group(CODE;~.group@i(CL< CL[-1]).max(~.len()):max_increase_days)

顺便解决Excel难题

找出股票连涨超过5天的区间
A
1=T("stock.xlsx")
2=A1.sort(CODE,DT)
3=A2.group@i(CODE!=CODE[-1]||CL< CL[-1])
4=A3.select(~.len()>=5)
5=A4.conj()

天然的大数据支持

游标技术可以轻松处理超过内存的大数据; 添加选项即可启用并行计算提升性能。

计算每支股票最长连涨天数
A
1StockRecords.txt
2=file(A1).cursor@t().sortx(CODE,DT)
3=A2.group(CODE;~.group@i(CL< CL[-1]).max(~.len()):max_increase_days)
找出股票连涨超过5天的区间
A
1StockRecords.txt
2=file(A1).cursor@t().sortx(CODE,DT)
3=A2.group(CODE).conj(~.group@i(CL< CL[-1]))
4=A3.select(~.len()>=5).conj()

3强交互性,所见即所得

找出股票连涨超过5天的区间

还有XLL强化Excel

直接在Excel中找出股票连涨超过5天的区间
=spl("=E(?1).sort(CODE,DT).group@i(CODE!=CODE[-1]||CL< CL[-1]).select(~.len()>=5).conj()",A1:D253)