用python构建的以数据分析为中心的语言

elda的Python项目详细描述


数据分析扩展语言(ELDA)

关于ELDA

愿景/目标

广泛的数据分析语言诞生之初,其愿景是提供一种数据分析工具,这种工具是在学习一种侧重于数据分析的编程语言之间做出的平等承诺的结果,以及有效地处理数据,以便在数据科学中对任何具有上下文的人进行有用的计算。所有这一切的目的是,在采用分析工具时,语言作为没有技术背景的用户的促进者,因此,在具有数学知识但没有编程知识的人之间架起了一座桥梁,可以使用更强大的数据分析和操作工具。

因此,可以得出两个主要结论。首先,不期望语言用户对任何编程都有先验知识,因为人们期望通过使用这些知识可以获得这些知识。第二,一旦获得了面向数据分析的编程的基本知识,就可以进行足够深度的计算,使语言被认为对更稳健的解决方案的原型设计有用。

主要目标

E.L.D.A的目标是帮助没有编程经验的人进行基本的统计计算,如:均值、方差、标准差、聚类、数据分类、图表绘制,它的目的是缩短有或没有技术经验的人之间的差距,如毕业生和学生。 γ elda与r、matlab和octave属于同一类语言,它们允许矩阵操作和数据映射。这些更为成熟的语言与我们的项目之间的区别在于,elda并不打算做这些语言所做的所有事情;例如,时间序列的分析就超出了这个编译器的范围。我们编译器的主要目的是成为使用这些语言转换的第一步。

快速参考手册

安装

由于elda是一种完全在python上开发的语言,所以它作为pyhton包分发,因此可用 通过包管理器pip。

要安装ELDA,只需运行:

pip install elda

这将安装所有必需的包,并通过命令使语言编译器和虚拟机可用 线路接口。此命令分为两部分:编译和执行,编译程序运行:

elda -c <file>

这将生成一个扩展名为.eo且与程序同名的对象文件。要执行它,只需运行:

elda -e <compiled_file>

注意:根据您现有的python设置,第一次调用elda可能需要一些时间来执行。 这是因为matplotlib(在引擎盖下使用)缓存了一些执行所需的文件,并且只会发生这种情况 曾经,

语言示例

elda程序是高度结构化的,具有声明、语句,并返回所有遵循设置顺序的内容。例如, 要创建递归fibonacci程序,应存储返回值,并在 函数结束,如下所示:

int fibonacci(int x) {
    int return_value;
    if (x == 0) {
        return_value = 0;
    }
    if (x == 1) {
        return_value = 1;
    }
    if (x != 0 and x != 1) {
        return_value = fibonacci(x-1) + fibonacci(x-2);
    }
    return return_value;
}

void main() {
    out(fibonacci(10));
}

阵列处理

要用elda声明数组,必须在类型声明之后添加数组的大小,而在变量id之前添加数组的大小。 例如,一个处理矩阵的简单程序:

int[5] vectorA = [1,2,3,4,5];
int[5] vectorB = [5,4,3,2,1];

int[5][5] matrixA = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]];
int[5][5] matrixB = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25]];

int[5][5] mult;
int[5][5] trans;
int[5] sum;

void print_matrix(int w) {
    string row = "";
    for i with range(0, 5) {
        for j with range(0, 5) {
            if (w == 1) {
                row = row + mult[i][j] + " ";
            } else {
                row = row + trans[i][j] + " ";
            }
        }
        out(row);
        row = "";
    }
}

void print_vector() {
    string row = "";
    for i with range(0, 5) {
        row = row + sum[i] + " ";
    }
    out(row);
    row = "";
}

void multiply_matrixes() {
    for i with range(0, 5) {
        for j with range(0, 5) {
            for k with range(0, 5) {
                mult[i][j] = mult[i][j] + matrixA[i][k] * matrixB[k][j];
            }
        }
    }
    print_matrix(1);
}

void sum_vectors() {
    for i with range(0, 5) {
        sum[i] = vectorA[i] + vectorB[i];
    }
    print_vector();
}

void transpose_matrix() {
    for i with range(0, 5) {
        for j with range(0, 5) {
            trans[j][i] = matrixA[i][j];
        }
    }
    print_matrix(2);
}

void main() {
    out("Matrix multiplication of 5x5");
    multiply_matrixes();

    out("Vector sum");
    sum_vectors();

    out("Transposed matrix of matrixA");
    transpose_matrix();
}

最后,elda提供了一些现成的分析功能。只需调用这些函数就可以使用这些函数 从程序内部的任何地方,由于它们是语言的一部分,因此不需要模块或导入。

int[50] x = [4, 5, 7, 8, 11, 14, 16, 18, 19, 20, 25, 27, 28, 33, 34, 35, 37, 38, 41, 43, 44, 45, 48, 49, 50, 52, 53, 55, 56, 58, 63, 64, 66, 67, 71, 73, 74, 76, 79, 81, 83, 84, 85, 86, 87, 90, 92, 94, 96, 100];
int[50] y = [2, 4, 5, 6, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21, 22, 23, 24, 26, 27, 34, 35, 37, 40, 41, 45, 46, 50, 51, 52, 54, 57, 59, 60, 61, 64, 65, 66, 69, 70, 78, 82, 83, 85, 86, 91, 92, 95, 97, 98, 99];

int[50] reg_x;
int[50] reg_y;

int[50][2] xy;

void display_data(int v) {
	if (v == 1) {
		out("Data for x");
		out("Min of x: " + min(x));
		out("Max of x: " + max(x));
		out("Mean of x: " + mean(x));
		out("Median of x: " + median(x));
		out("Std deviation of x: " + std(x));
		out("Variance of x: " + var(x));
	} else {
		out("Data for y");
		out("Min of y: " + min(y));
		out("Max of y: " + max(y));
		out("Mean of y: " + mean(y));
		out("Median of y: " + median(y));
		out("Std deviation of y: " + std(y));
		out("Variance of y: " + var(y));
	}
}

void compute_linear_regression() {
	float[2] reg_params = linear_regression(x, y);
	int val_x = 2;
	string res = "Linear function: " + reg_params[0];
	res = res + "x + " + reg_params[1];

	out(res);
	for i with range(0, 50) {
		reg_x[i] = val_x;
		reg_y[i] = reg_params[0] * val_x + reg_params[1];
		val_x = val_x + 2;
	}
	graph(reg_x, reg_y, "plot");
}

void compute_logistic_regression() {
	float[2] reg_params = logistic_regression(x, y);

	out("Logistic Regression parameters: ");
	out(reg_params[0]);
	out(reg_params[1]);
}

void populate_xy() {
	for i with range(0, size(x)) {
		xy[i][0] = x[i];
		xy[i][1] = y[i];
	}
}

void compute_kmeans() {
	float[2][2] centers = k_means(2, xy);
	float[2] val_x;
	float[2] val_y;

	val_x[0] = centers[0][0];
	val_y[0] = centers[0][1];
	val_x[1] = centers[1][0];
	val_y[1] = centers[1][1];

	out("First center at: ");
	out("X: " + val_x[0]);
	out("Y: " + val_y[0]);

	out("Second center at: ");
	out("X: " + val_x[1]);
	out("Y: " + val_y[1]);

	graph(val_x, val_y, "scatter");
}

void main() {
	display_data(1);
	out("----------------------");
	display_data(2);

	graph(x, y, "scatter");

	compute_linear_regression();
	compute_logistic_regression();

	populate_xy();
	compute_kmeans();
}

提供特殊功能

  • 平均值(arr)-计算数据数组的平均值

    • arr:一维数组。
    • 返回:具有数组平均值的浮点值。
  • min(arr)-获取最小值on数组

    • arr:一维数组。
    • 返回:具有数组最小值的浮点值。
  • max(arr)-获取数组的最大值

    • arr:一维数组。
    • 返回:数组最大值的浮点值。
  • 中值(arr)-获取数组的中值

    • arr:一维数组。
    • 返回:具有数组中值的浮点值。
  • var(arr)-获取数组的方差值

    • arr:一维数组。
    • 返回:具有数组方差值的浮点值。
  • std(arr)-获取数组的标准偏差值

    • arr:一维数组。
    • 返回:具有数组标准偏差值的浮点值。
  • 线性回归(arr_x,arr_y)-得到两个表示x值和y的数组的线性回归参数 值:

    • arr_x:一维数组。
    • arr_y:一维数组。
    • 返回:带有回归参数的数组。
  • logistic_回归(arr_x,arr_y)-得到两个表示x值和y的数组的logistic回归参数 值:

    • arr_x:一维数组。
    • arr_y:一维数组。
    • 返回:带有回归参数的数组。
  • k_意味着(k,arr_xy)-在给定一个表示x和y值对的数组的情况下,得到k个簇中心。

    • k:表示集群数量的整数。
    • arr_x y:表示x和y值对的二维数组。例如:[[1,2],[2,3],[4,5]]。
    • 返回:具有簇中心C和Y坐标的数组。
  • size(arr)-获取数组的大小

    • arr:一维或二维数组。
    • 返回:具有数组大小的int。
  • type(var)-以字符串形式获取变量的类型

    • arr:变量,不能是数组。
    • 返回:具有类型名的字符串。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java关闭应用程序按钮Listener   Java中的多线程同步在Java示例中的思考   java如何查看Tomcat正在使用/访问的JAR?   java My代码在调用垃圾收集器后不会终止   多线程Java连接线程池和connectionfactory?   java在运行时修改JAR文件   java Android:使用光标时引发IllegaleException   在Netbeans中测试不可执行库的java?   泛型在参数上强制子类Java类型   spring Java:继承与依赖注入“自动连线”   javascript如何解析这个xml元素   java打印特定序列中的数组   带有ProcessingTimeSessionWindow的java Apache Flink自定义触发器   java如何配置消息驱动的Bean应用程序和Glassfish来使用来自远程MessageBroker的消息?