Giter Site home page Giter Site logo

dominance-analysis / dominance-analysis Goto Github PK

View Code? Open in Web Editor NEW
146.0 20.0 57.0 4.65 MB

This package can be used for dominance analysis or Shapley Value Regression for finding relative importance of predictors on given dataset. This library can be used for key driver analysis or marginal resource allocation models.

Home Page: https://pypi.org/project/dominance-analysis/

License: MIT License

Python 91.78% TeX 8.22%
dominance-analysis relative-importance keydrivers shapley-value regression-models logistic-regression dominance predictor multiple-regression classification-model

dominance-analysis's Introduction

Dominance-Analysis : A Python Library for Accurate and Intuitive Relative Importance of Predictors

PyPI version Downloads GitHub license Build Status Build Status Build status Documentation Status Maintainability Scrutinizer Code Quality Build Status Code Intelligence Status Join the chat at https://gitter.im/dominance_analysis/community OpenSSF Best Practices

This package is designed to determine relative importance of predictors for both regression and classification models. The determination of relative importance depends on how one defines importance; Budescu (1993) and Azen and Budescu (2003) proposed using dominance analysis (DA) because it invokes a general and intuitive definition of "relative importance" that is based on the additional contribution of a predictor in all subset models. The purpose of determining predictor importance in the context of DA is not model selection but rather uncovering the individual contributions of the predictors.

In case the target is a continuous variable, the package determines the dominance of one predictor over another by comparing their incremental R-squared contribution across all subset models. In case the target variable is binary, the package determines the dominance over another by comparing their incremental Pseudo R-Squared contribution across all subset models.


Installation

Use the following command to install the package:

pip install dominance-analysis

Important Parameters

  • data : Complete Dataset, should be a Pandas DataFrame.
  • target : Name of the target variable, it should be present in passed dataset.
  • top_k : No. of features to choose from all available features. By default, the package will run for top 15 features.
  • objective : It can take value either 0 or 1. 0 for Classification and 1 for Regression. By default, the package will run for Regression.
  • pseudo_r2 : It can take one of the Pseudo R-Squared measures - "mcfadden","nagelkerke", "cox_and_snell" or "estrella", where default="mcfadden". It's not needed in case of regression (objective=1).
  • data_format: It can take value 0, 1 or 2. 0 is for raw data, 1 is when correlation matrix (correlation of predictors with the target variable) is being passed, 2 is when covraiance matrix (covariance of predictors with the the traget variable) is being passed. By default, the package will run for raw data (data_format=0). This parameter is not needed in case of classification.

Dominance Analysis - The Significance!

Dominance Analysis, according to Azen and Budescu meets three important criteria for measuring relative importance. First, the technique should be defined in terms of its ability to reduce error in predicting the outcome variable. Next, it should permit direct comparison of measures within a model (that is, X1 is twice as important as X2). Finally, the technique should permit inferences concerning an attribute's direct effect (that is, when considered by itself), total effect (that is, when considered with other attributes) and partial effect (that is, when considered with various combinations of other predictors). Hence, Dominance analysis is both robust and intuitive and its interpretation is also very straightforward.

Dominance Analysis - The Math!

Dominance Analysis is unique as it measures relative importance in a pairwise fashion, and the two predictors are compared in the context of all 2(p−2) models that contain some subset of the other predictors. So, if we have a total of 'p' predictors, we will build 2p-1 models (all possible subset models) and compute the incremental R2 contribution of each predictor to the subset model of all other predictors. The additional contribution of a given predictor is measured by the increase in R2 that results from adding that predictor to the regression model.

Let's consider a scenario when we have 4 predictors; X1, X2, X3 and X4. We will have to build a total of 24-1 models i.e. 15 models- 4C1 = 4 models with only one predictor, 4C2 = 6 models with two predictors each, 4C3 = 4 models with three predictors each and 1 (4C4) complete model with all 4 predictors. Thus, the additional contributions of X1 are computed as the increases in the proportion of variance accounted for when X1 is added to each subset of the remaining predictors (i.e., the null subset {.}, {X2}, {X3}, {X4}, {X2X3}, {X2X4}, {X3X4} and {X2X3X4}). Similarly, the additional contributions of X2 are the increases in the proportion of variance accounted for when X2 is added to each subset of the remaining predictors (i.e., the null subset {.}, {X1}, {X3}, {X4}, {X1X3}, {X1X4}, {X3X4} and {X1X3X4})

Below is the illustration of formulas used to compute the averaged additional contributions of X1 and X2 within model size in the poupulation with four predictors (We use the notation to represent the proportion of variance in Y that is accounted for by the predictors in the model X. For example, represents the proportion of variance in Y that is accounted for by the model consisting of X1 and X3. The additional contribution of a given predictor is measured by the increase in proportion of variance that results from adding that predictor to the regression model):

Table 1

The measure for proportion of variance that we have used for regression is R2 but since we don't have R2 in logsitic regression/classification models, we have used Pseudo R2.

The beauty of the math of Dominance Analysis is that the sum of the overall average incremental R2 of all predictors is equal to the R2 of the complete model (model with all predictors). Hence, the total R2 can be attributed to each predictor in the model. Below is an illustration of Dominance Analysis in the Population for Hypothetical example with four predictors:

Table 2

It can bee seen that the Percentage Relative Importance of predictors has been computed by dividing the Overall Average Incremental R2 contribution of predictors by the R2 of the complete model. This explains the intuitive nature of Dominance Analysis wherein the overall R2 of the model can be attributed to individual predictors within the model.


Pseudo R-Squared for Classification Task / Logistic Regression

Measures of fit in logistic regression can be classified by those based on sums of squares and those based on maximum likelihood statistics. Reviews of a variety of measures of fit proposed for logistic regression can be found in Amemiya (1981), Menard (2000), Mittlbock and Schemper (1996) and Zheng and Agresti (2000). Given the large number of proposed measures, criteria for defining appropriate R2 analogues need to he determined. The following criteria, which are also found in the linear regression literature (e.g., Kvilseth. 1985: Van den Burg & Lewis, 1988), were used to select R2 analogues for logistic regression:

  1. Boundedness: The measure should vary between a minimum of zero, indicating complete lack of fit, and a maximum of one, indicating perfect fit.
  2. Linear invariance: The measure should be invariant to nonsingular linear transformations of the variables (Ys and Xs).
  3. Monotonicity: The measure should not decrease with the addition of a predictor.
  4. Intuitive Interpretability: The measure of fit is intuitively interpretable, in that it agrees with the scale of the linear case for intermediate values.

Based on these criteria, the following four R2 analogues were chosen that satisfied at least three of these four properties:

1. McFadden's Pseudo-R Squared

McFadden's Pseudo-R squared measure is defined as :

This measure satisfies all the four properties.

2. Nagelkerke Pseudo-R Squared

Nagelkerke Pseudo-R squared measure is defined as :

This measure satisfies three of the four properties and doesn't satisfy the property of Interpretability.

3. Cox and Snell R-Squared

Cox and Snell Pseudo-R squared measure is defined as :

This measure satisfies three of the four properties.

4. Estrella R-Squared

Estrella Pseudo-R squared measure is defined as :

This measure satisfies all the four properties.

Using each of these four R2 analogues, the additional contribution of a given predictor to a specific logistic model can be measured as the change (i.e., increase) in the R2 analogues when the predictor is added to the model. Even though, all the four measures will give similar results, we recommend using either Estrella's (1998) model fit measure or McFadden's (1974) measure for conducting dominance analysis in logistic regression. We have a slight preference for McFadden's measure (and that is what the package will compute by default) because it is computationally simpler, but both McFadden's and Estrella’s measures satisfy the minimum requirements for an R2 analogues.


Note: Since, Dominance Analysis is computationally intensive as it builds all subset model (2p-1 models), we have provided the user the flexibility to choose number of top predictors that they want to compute relative importance for. For regression, Top K features are selected based on F-regression and for classification it is based on Chi-Squared statistic. Dominance Analysis can be used in combination with Principal Component Analysis (PCA) or Factor Analysis or any other feature reduction algorithm for getting accurate and intutive importance of predictors.


Dominance Statistics

As described earlier, a relative importance measure should be able to describe a predictor's direct, total and partial effect, therefore in the Dominance Statistics, we have come up with four different types of Dominance measures. These measures have been conceptualized, defined and formulated by us and are unique to this library. Below are the definitions and interpretations of the measures:

  1. Interactional Dominance - This is the incremental R2 contribution of the predictor to the complete model. Hence, the Interactional Dominance of a particular predictor 'X' will be the diffrence between the R2 of the complete model and the R2 of the model with all other predictors except the particular predictor 'X'.
    Consider a scenario when we have Y as the dependent variable and four predictors X1, X2, X3 and X4, let R2Y.X1,X2 be the R2 of the model between Y and X1, X2 ; R2Y.X1,X3 be the R2 of the model between Y and X1, X3 so on and so forth. In this case, the interactional dominance of predictor X1 will be R2Y.X1,X2,X3,X4 - R2Y.X2,X3,X4.
    Hence, interactional dominance can be interpreted as the incremental impact or incremental variability explained by the predictor in presence of all other predictors.

  2. Individual Dominance - The individual dominance of a predictor is the R2 of the model between the dependent variable and the predictor. So, the individual dominanace of predictor X1 will be R2Y.X1.
    Hence, individual dominance can be interpreted as the variability explained by the predictor alone or the quantum of impact that a predictor will have in absence of all other predictors.

  3. Average Partial Dominance - This is average of average incremental R2 contributions of the predictor to all subset models except complete model and bi-variate (when only one predcitor is present) model.
    Hence, this can be interpreted as the average impact that a predictor has when it is available in all possible combinations with other predictors except the combination when all predcitors are available.

  4. Total Dominance - The last measure of dominance summarizes the additional contributions of each predictor to all subset models by averaging all the conditional values. In the example on table 3, this consists of averaging the four averaged entries in each column.

In below table, we have illustrated the calculation used to arrive at the four measures of dominance.

Table 3


If we calculate the four measures of dominance from the above example, we will get the following values:

Table 4

Dominance Levels

The following three levels of dominance can be achieved between each pair of predictors in Dominance Analysis:

  • Complete Dominance - One predictor is said to completely dominate another predictor if its dominance holds across all possible subset models (that do not include the two predictors under comparison). Back to the four-predictor model, for example, complete dominance of X1 over X2 is achieved if the additional R2 contribution of X1 is more than that of X2 to the null model, the model consisting of X3, the model consisting of X4, and the model consisting of both X3 and X4. In Table 3, we can see that incremental R2 of X1 is greater than that of X2 for all subset models and hence X1 completely dominates X2.
    If the additional contributions are inconsistent in favoring the same predictor across all subset models, then complete dominance is undetermined while weaker levels of dominance may still be achieved.
  • Conditional Dominance - If a predictor’s averaged additional contribution within each model size is greater than that of another predictor, then the first predictor is said to conditionally dominate the latter. Here, the model size is indicated by the number of predictors included in a given model. If a predictor’s averaged additional contribution is greater for some model sizes but not for all, then conditional dominance between the two predictors cannot be established.
  • General Dominance - If overall averaged additional R2 contribution of one predictor is greater than the other then that predictor is said to generally dominate the other.

The three levels of dominance (complete, conditional,and general) are related to each other in a hierarchical fashion: Complete dominance implies conditional dominance, which, in turn, implies general dominance. However, for p > 3 the converse may not hold; that is, general dominance does not imply conditional dominance and conditional dominance does not necessarily imply complete dominance.


Complete code for below examples is available in example folder or the following public kernels on Kaggle: Regression - Dominane Analysis on Boston House Price Data & Classification- Dominance Analysis on Breast Cancer Dataset


User Guide for computing Relative Importance when the response variable is Continous

Using Boston Housing Dataset downloaded from: https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html

Selecting top K features and getting R2 of the Complete Model

from dominance_analysis import Dominance_Datasets
from dominance_analysis import Dominance
boston_dataset=Dominance_Datasets.get_boston()
dominance_regression=Dominance(data=boston_dataset,target='House_Price',objective=1)


Incremental R-Squared

incr_variable_rsquare=dominance_regression.incremental_rsquare()


Plot Incremental R-Squared and the Dominance Curve

dominance_regression.plot_incremental_rsquare()




Dominance Statistics (R-Squared)

dominance_regression.dominance_stats()


Dominance Level

dominance_regression.dominance_level()


User Guide for computing Relative Importance when the response variable is Binary

Breast Cancer Wisconsin (Diagnostic) dataset downloaded from: https://goo.gl/U2Uwz2

Selecting top K features and getting Pseudo R2 of the Complete Model

from dominance_analysis import Dominance_Datasets
from dominance_analysis import Dominance
breast_cancer_data=Dominance_Datasets.get_breast_cancer()
dominance_classification=Dominance(data=breast_cancer_data,target='target',objective=0,pseudo_r2="mcfadden")


Incremental Pseudo R-Squared

incr_variable_rsquare=dominance_classification.incremental_rsquare()


Plot Incremental Pseudo R-Squared

dominance_classification.plot_incremental_rsquare()




Dominance Statistics (R-Squared)

dominance_classification.dominance_stats()


Dominance Level

dominance_classification.dominance_level()


User Guide for computing Relative Importance when a Correlation Matrix is provided

Using Boston Housing Dataset downloaded from: https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html

Getting R2 of the Complete Model

from dominance_analysis import Dominance_Datasets
from dominance_analysis import Dominance
boston_dataset=Dominance_Datasets.get_boston()
corr_data = boston_dataset.corr()
dominance_regression=Dominance(data=corr_data,target='House_Price',data_format=1)


Incremental R-Squared

incr_variable_rsquare=dominance_regression.incremental_rsquare()


Plot Incremental R-Squared and the Dominance Curve

dominance_regression.plot_incremental_rsquare()




Dominance Statistics (R-Squared)

dominance_regression.dominance_stats()


Dominance Level

dominance_classification.dominance_level()


User Guide for computing Relative Importance when a Covariance Matrix is provided

Using Boston Housing Dataset downloaded from: https://www.cs.toronto.edu/~delve/data/boston/bostonDetail.html

Getting R2 of the Complete Model

from dominance_analysis import Dominance_Datasets
from dominance_analysis import Dominance
boston_dataset=Dominance_Datasets.get_boston()
cov_data = boston_dataset.cov()
dominance_regression=Dominance(data=cov_data,target='House_Price',data_format=2)


Incremental R-Squared

incr_variable_rsquare=dominance_regression.incremental_rsquare()


Plot Incremental R-Squared and the Dominance Curve

dominance_regression.plot_incremental_rsquare()




Dominance Statistics (R-Squared)

dominance_regression.dominance_stats()


Dominance Level

dominance_classification.dominance_level()


Authors & License

The Dominance Analysis package is based on the concept developed by Azen and Budescu (see references). This package is released under a MIT License. Dominance Analysis Python package has been developed by Shashank Shekhar, Sajan Bhagat, Kunjithapatham Sivakumar and Bala Koteshwar Kolluri . Pull requests submitted to the GitHub Repo are highly encouraged!


References

  1. Azen, R. (2000). Inference for predictor comparisons:Dominance analysis and the distribution of R2 differences. Dissertation Abstracts International B, 61/10, 5616.
  2. Azen, R., Budescu, D. V., & Reiser, B. (2001). Criticality of predictors in multiple regression. British Journal of Mathematical and Statistical Psychology, 54, 201–225.
  3. Azen, R., Budescu, D. V. (2003). The Dominance Analysis Approach for Comparing Predictors in Multiple Regression. Psychological Methods, 2003, Vol. 8, No. 2, 129–148. https://doi.org/10.1037/1082-989X.8.2.129
  4. Azen, R., Budescu, D. V. (2006). Comparing Predictors in Multivariate Regression Models: An Extension of Dominance Analysis. Journal of Educational and Behavioral Statistics Summer 2006, Vol. 31, No. 2, pp. 157-180. https://doi.org/10.3102/10769986031002157
  5. Azen, R., Traxel, N. (2009). Using Dominance Analysis to Determine Predictor Importance in Logistic Regression. Journal of Educational and Behavioral Statistics September 2009, Vol. 34, No. 3, pp. 319-347. https://doi.org/10.3102/1076998609332754
  6. Budescu, D. V. (1993). Dominance analysis: A new approach to the problem of relative importance of predictors in multiple regression. Psychological Bulletin, 114(3), 542-551. https://doi.org/10.1037/0033-2909.114.3.542
  7. Luo, W., & Azen, R. (2013). Determining Predictor Importance in Hierarchical Linear Models Using Dominance Analysis. Journal of Educational and Behavioral Statistics, 38(1), 3-31. https://doi.org/10.3102/1076998612458319

dominance-analysis's People

Contributors

asif-salim avatar azure-pipelines[bot] avatar balakolluri avatar dominance-analysis avatar gitter-badger avatar quintshekhar avatar sajanbhagat avatar vibish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

dominance-analysis's Issues

How to use for Logistic Regression

Hi all!

Very interesting package and oddly unique in the python ecosystem. I really appreciate your work here.

I'm just starting to explore DA and RWA as method of driver analysis, and so trying to better understand how things work generally and how to use the driver-analysis package specifically.

A problem I'm currently working on is setup as a logistic regression problem, and reading through the code, I see that if objective is set to 1 the r-sq values are estimated via a linear regression model while otherwise it uses the indicated r-sq method, e.g. mcfadden.

I also noticed that the LogisticRegression class has been imported from sklearn but isn't used. I found this odd, and consequently, am wondering if in the case of logistic regression, one should set objective to 0 or if it's just not implemented yet.

What's the recommended usage here?

Thanks!

Andrew

Trying to install but errors around the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly

Trying to pip install dominance-analysis package but seems be erroring out due to NumPy and the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly.

Below is a snippet of the output (entire error log here: https://justpaste.it/8kif7) :

      
      
            compile options: '-DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DNO_ATLAS_INFO=3 -DHAVE_CBLAS -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/umath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Inumpy/core/include -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -c'
            extra options: '-faltivec -I/System/Library/Frameworks/vecLib.framework/Headers'
            clang: numpy/core/src/multiarray/alloc.c
            clang: numpy/core/src/multiarray/array_assign_scalar.c
            clang: numpy/core/src/multiarray/buffer.c
            clang: numpy/core/src/multiarray/common.c
            clang: numpy/core/src/multiarray/datetime_strings.c
            clang: numpy/core/src/multiarray/descriptor.c
            clang: numpy/core/src/multiarray/conversion_utils.c
            clang: build/src.macosx-10.14.6-arm64-3.8/numpy/core/src/multiarray/einsum.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/hashdescr.c
            clang: build/src.macosx-10.14.6-arm64-3.8/numpy/core/src/multiarray/lowlevel_strided_loops.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/multiarraymodule.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/nditer_constr.c
            clang: numpy/core/src/multiarray/refcount.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/scalarapi.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/temp_elide.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/multiarray/vdot.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: build/src.macosx-10.14.6-arm64-3.8/numpy/core/src/umath/loops.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/umath/ufunc_object.c
            clang: build/src.macosx-10.14.6-arm64-3.8/numpy/core/src/umath/scalarmath.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/npymath/halffloat.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/npymath/npy_math.c
            clang: numpy/core/src/common/npy_longdouble.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: numpy/core/src/common/numpyos.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: /private/var/folders/vd/39skl3994x3gx21w0dlr0gnr0000gn/T/pip-install-c767vcux/numpy_10342ae013024639a12b440585ce6ab2/numpy/_build_utils/src/apple_sgemv_fix.c
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            clang: error: the clang compiler does not support 'faltivec', please use -maltivec and include altivec.h explicitly
            error: Command "clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -iwithsysroot/System/Library/Frameworks/System.framework/PrivateHeaders -iwithsysroot/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.8/Headers -arch arm64 -arch x86_64 -Werror=implicit-function-declaration -DNPY_INTERNAL_BUILD=1 -DHAVE_NPY_CONFIG_H=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE=1 -D_LARGEFILE64_SOURCE=1 -DNO_ATLAS_INFO=3 -DHAVE_CBLAS -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/umath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Inumpy/core/include -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/include/numpy -Inumpy/core/src/common -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/include/python3.8 -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/common -Ibuild/src.macosx-10.14.6-arm64-3.8/numpy/core/src/npymath -c numpy/core/src/multiarray/alloc.c -o build/temp.macosx-10.14.6-arm64-3.8/numpy/core/src/multiarray/alloc.o -MMD -MF build/temp.macosx-10.14.6-arm64-3.8/numpy/core/src/multiarray/alloc.o.d -faltivec -I/System/Library/Frameworks/vecLib.framework/Headers" failed with exit status 1
            [end of output]
      
        note: This error originates from a subprocess, and is likely not a problem with pip.
      error: legacy-install-failure
      
      × Encountered error while trying to install package.
      ╰─> numpy
      
      note: This is an issue with the package mentioned above, not pip.
      hint: See above for output from the failure.
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× pip subprocess to install build dependencies did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

unable to pip install

Describe the bug
cannot pip install this as i get error

To Reproduce
Steps to reproduce the behavior:

  1. pip install dominance-analysis

Expected behavior
it just works

Additional context
i am using windows, and use anaconda.

and installed scipy using 'conda install scipy'

result below:

ERROR: Command errored out with exit status 1:
     command: 'C:\Users\zahra\anaconda3\python.exe' -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'C:\\Users\\zahra\\AppData\\Local\\Temp\\pip-install-la_s4ox1\\scipy\\setup.py'"'"'; __file__='"'"'C:\\Users\\zahra\\AppData\\Local\\Temp\\pip-install-la_s4ox1\\scipy\\setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record 'C:\Users\zahra\AppData\Local\Temp\pip-record-xtwrjrzn\install-record.txt' --single-version-externally-managed --compile --install-headers 'C:\Users\zahra\anaconda3\Include\scipy'
         cwd: C:\Users\zahra\AppData\Local\Temp\pip-install-la_s4ox1\scipy\
    Complete output (131 lines):

    Note: if you need reliable uninstall behavior, then install
    with pip instead of using `setup.py install`:

      - `pip install .`       (from a git repo or downloaded source
                               release)
      - `pip install scipy`   (last SciPy release on PyPI)


    Running from scipy source directory.
    lapack_opt_info:
    lapack_mkl_info:
    No module named 'numpy.distutils._msvccompiler' in numpy.distutils; trying from distutils
    customize MSVCCompiler
      libraries mkl_rt not found in ['C:/Users/zahra/anaconda3\\Library\\lib']
      NOT AVAILABLE

    openblas_lapack_info:
      libraries openblas not found in ['C:\\Users\\zahra\\anaconda3\\lib', 'C:\\', 'C:\\Users\\zahra\\anaconda3\\libs']
    get_default_fcompiler: matching types: '['gnu', 'intelv', 'absoft', 'compaqv', 'intelev', 'gnu95', 'g95', 'intelvem', 'intelem', 'flang']'
    customize GnuFCompiler
    Could not locate executable g77
    Could not locate executable f77
    customize IntelVisualFCompiler
    Could not locate executable ifort
    Could not locate executable ifl
    customize AbsoftFCompiler
    Could not locate executable f90
    customize CompaqVisualFCompiler
    Could not locate executable DF
    customize IntelItaniumVisualFCompiler
    Could not locate executable efl
    customize Gnu95FCompiler
    Could not locate executable gfortran
    Could not locate executable f95
    customize G95FCompiler
    Could not locate executable g95
    customize IntelEM64VisualFCompiler
    customize IntelEM64TFCompiler
    Could not locate executable efort
    Could not locate executable efc
    customize PGroupFlangCompiler
    Could not locate executable flang
    don't know how to compile Fortran code on platform 'nt'
      NOT AVAILABLE

    openblas_clapack_info:
      libraries openblas,lapack not found in ['C:\\Users\\zahra\\anaconda3\\lib', 'C:\\', 'C:\\Users\\zahra\\anaconda3\\libs']
      NOT AVAILABLE

    flame_info:
      libraries flame not found in ['C:\\Users\\zahra\\anaconda3\\lib', 'C:\\', 'C:\\Users\\zahra\\anaconda3\\libs']
      NOT AVAILABLE

    atlas_3_10_threads_info:
    Setting PTATLAS=ATLAS
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\lib
      libraries tatlas,tatlas not found in C:\Users\zahra\anaconda3\lib
      libraries lapack_atlas not found in C:\
      libraries tatlas,tatlas not found in C:\
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\libs
      libraries tatlas,tatlas not found in C:\Users\zahra\anaconda3\libs
    <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
      NOT AVAILABLE

    atlas_3_10_info:
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\lib
      libraries satlas,satlas not found in C:\Users\zahra\anaconda3\lib
      libraries lapack_atlas not found in C:\
      libraries satlas,satlas not found in C:\
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\libs
      libraries satlas,satlas not found in C:\Users\zahra\anaconda3\libs
    <class 'numpy.distutils.system_info.atlas_3_10_info'>
      NOT AVAILABLE

    atlas_threads_info:
    Setting PTATLAS=ATLAS
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\lib
      libraries ptf77blas,ptcblas,atlas not found in C:\Users\zahra\anaconda3\lib
      libraries lapack_atlas not found in C:\
      libraries ptf77blas,ptcblas,atlas not found in C:\
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\libs
      libraries ptf77blas,ptcblas,atlas not found in C:\Users\zahra\anaconda3\libs
    <class 'numpy.distutils.system_info.atlas_threads_info'>
      NOT AVAILABLE

    atlas_info:
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\lib
      libraries f77blas,cblas,atlas not found in C:\Users\zahra\anaconda3\lib
      libraries lapack_atlas not found in C:\
      libraries f77blas,cblas,atlas not found in C:\
      libraries lapack_atlas not found in C:\Users\zahra\anaconda3\libs
      libraries f77blas,cblas,atlas not found in C:\Users\zahra\anaconda3\libs
    <class 'numpy.distutils.system_info.atlas_info'>
      NOT AVAILABLE

    accelerate_info:
      NOT AVAILABLE

    lapack_info:
      libraries lapack not found in ['C:\\Users\\zahra\\anaconda3\\lib', 'C:\\', 'C:\\Users\\zahra\\anaconda3\\libs']
      NOT AVAILABLE

    C:\Users\zahra\anaconda3\lib\site-packages\numpy\distutils\system_info.py:1748: UserWarning:
        Lapack (http://www.netlib.org/lapack/) libraries not found.
        Directories to search for the libraries can be specified in the
        numpy/distutils/site.cfg file (section [lapack]) or by setting
        the LAPACK environment variable.
      return getattr(self, '_calc_info_{}'.format(name))()
    lapack_src_info:
      NOT AVAILABLE

    C:\Users\zahra\anaconda3\lib\site-packages\numpy\distutils\system_info.py:1748: UserWarning:
        Lapack (http://www.netlib.org/lapack/) sources not found.
        Directories to search for the sources can be specified in the
        numpy/distutils/site.cfg file (section [lapack_src]) or by setting
        the LAPACK_SRC environment variable.
      return getattr(self, '_calc_info_{}'.format(name))()
      NOT AVAILABLE

    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\zahra\AppData\Local\Temp\pip-install-la_s4ox1\scipy\setup.py", line 492, in <module>
        setup_package()
      File "C:\Users\zahra\AppData\Local\Temp\pip-install-la_s4ox1\scipy\setup.py", line 488, in setup_package
        setup(**metadata)
      File "C:\Users\zahra\anaconda3\lib\site-packages\numpy\distutils\core.py", line 135, in setup
        config = configuration()
      File "C:\Users\zahra\AppData\Local\Temp\pip-install-la_s4ox1\scipy\setup.py", line 395, in configuration
        raise NotFoundError(msg)
    numpy.distutils.system_info.NotFoundError: No lapack/blas resources found.

Boston housing dataset removed from sklearn v 1.2+

Describe the bug
If you have a version of sklearn >1.2 installed, then importing Dominance will fail because load_boston is no longer available.

To Reproduce
Steps to reproduce the behavior:

  1. open python environment
  2. from dominance_analysis import Dominance

Expected behavior
nothing

Screenshots
File "/path/dominance_analysis_al857.py", line 53, in
from dominance_analysis import Dominance
File "/path/opt/anaconda3/lib/python3.8/site-packages/dominance_analysis/init.py", line 1, in
from dominance_analysis.dominance import *
File "/path/opt/anaconda3/lib/python3.8/site-packages/dominance_analysis/dominance.py", line 6, in
from sklearn.datasets import load_boston
File "/path/opt/anaconda3/lib/python3.8/site-packages/sklearn/datasets/init.py", line 156, in getattr
raise ImportError(msg)
ImportError:
load_boston has been removed from scikit-learn since version 1.2.

The Boston housing prices dataset has an ethical problem: as
investigated in [1], the authors of this dataset engineered a
non-invertible variable "B" assuming that racial self-segregation had a
positive impact on house prices [2]. Furthermore the goal of the
research that led to the creation of this dataset was to study the
impact of air quality but it did not give adequate demonstration of the
validity of this assumption.

The scikit-learn maintainers therefore strongly discourage the use of
this dataset unless the purpose of the code is to study and educate
about ethical issues in data science and machine learning.

In this special case, you can fetch the dataset from the original
source::

import pandas as pd
import numpy as np

data_url = "http://lib.stat.cmu.edu/datasets/boston"
raw_df = pd.read_csv(data_url, sep="\s+", skiprows=22, header=None)
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
target = raw_df.values[1::2, 2]

Alternative datasets include the California housing dataset and the
Ames housing dataset. You can load the datasets as follows::

from sklearn.datasets import fetch_california_housing
housing = fetch_california_housing()

for the California housing dataset and::

from sklearn.datasets import fetch_openml
housing = fetch_openml(name="house_prices", as_frame=True)

for the Ames housing dataset.

[1] M Carlisle.
"Racist data destruction?"
https://medium.com/@docintangible/racist-data-destruction-113e3eff54a8

[2] Harrison Jr, David, and Daniel L. Rubinfeld.
"Hedonic housing prices and the demand for clean air."
Journal of environmental economics and management 5.1 (1978): 81-102.
https://www.researchgate.net/publication/4974606_Hedonic_housing_prices_and_the_demand_for_clean_air

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
recommend using a different example dataset.
force installing a scikit-learn version <1.2 also works but is less ideal

Extending Interface to Incorporate Models in Statsmodels

Hi @dominance-analysis!

I am a fellow dominance analysis software developer who has mostly focused, to date, on the Stata and R software. I've been interested in your project for some time and wanted to approach you all to see if you were interested in collaborating to extend dominance-analysis' interface to generalize it in an effort to be able to incorporate most models in the statsmodels package.

Broadly, what I would propose is incorporating something like the domir R package's R formula based approach that uses a formula interface to select subsets of features but using the patsy formula structure for which many models in Statsmodels have an API.

I anticipate it would be a reasonably straightforward extension of the domir function to patsy formulas for selecting features as an interface to statsmodels' formula API. From there, it would be a matter of incorporating the architecture you all have developed in this package to implement the dominance statistic computations and dominance designations.

I would be happy to expand more on what I am thinking if this suggestion for an extension of the capabilities of the package is unclear.

Look forward to hearing from you all!

'Dominance' object has no attribute 'incrimental_r2' / 'Dominance' object has no attribute 'variable_stats'

Describe the bug
Pretty simple, just trying to reproduce the examples and it seems that they are serious problem with the dominance.py:

from dominance_analysis import Dominance
dominance_regression = Dominance(data=X_train, target='TARGET', objective=1)

dominance_regression.plot_incremental_rsquare()
--> 'Dominance' object has no attribute 'incrimental_r2'
dominance_regression.dominance_stats()
--> 'Dominance' object has no attribute 'variable_stats'

Did Nothing special, just pip install dominance-analysis, and tried it for the first time and here the results.

Hope it can be corrected because package seems great!!!

Thanks!!

Seeing - ValueError: k should be >=0, <= n_features = 7; got 8. Use k='all' to return all features.

Am running DA 1.1.8 on python 3.8 and when I run this command:

dom_classif_tp = Dominance(data=df_bug_report, target="Y", objective=0, pseudo_r2="mcfadden")

I see the errors in the attached file errors.txt. The df_bug_report dataframe can be built by running:

df_bug_report = pd.read_csv("df_bug_report.csv") # using the attached csv file

The attached data file has 50 rows with 7 predictors: X1, X2, X3, X4, X5, X6, X7
X1 and X2 are continuous real variables. X3 - X7 are binary variables. The response is the Y column which is also binary.

errors.txt

df_bug_report.csv

ValueError: Input X must be non-negative.

Thank you for this package.

If dataset has negative values in columns I get this is error:
"ValueError: Input X must be non-negative."

Dataset example: https://www.kaggle.com/c/instant-gratification

Tnx

P.S. For this dataset https://www.kaggle.com/c/instant-gratification
dominance analysis did not recognize feature "wheezy-copper-turtle-magic" as important
(categorical variable encoded as integer)
https://www.kaggle.com/c/instant-gratification/discussion/92587

Is this librarray still maintained ? Can we help ?

I'd like to know if there are still some active contributors on this package ?
We would like to use it, but noticed that there wasn't much activity here.

We also weren't able to make it run on Python 3.8, 3.10 and 3.6. On 3.7 it seems to run, but that's rather limited.

We can help with the maintenance part of this package, the first steps would be to:

  • Use Tox to test on various environments if the library is correctly installed.
  • Add some unit tests to the library.
  • Make it run on 3.7+ instead of just 3.1

Let us know if you're interested.

Thanks !

Working with large datasets

Is your feature request related to a problem? Please describe.

Due to the combinatorial explosion in the number of models necessary to evaluate dominance of n features in a dataset, it's not feasible to evaluate a dataset with more than ~15 features.

Currently, it appears that the only implemented feature available for dealing with this difficulty is the argument top-k which selects the k most dominant features and evaluates all models on these, to the exclusion of the rest.

This is helpful, but makes it difficult to compare features from a larger dataset as it excludes all additional features.

Would it be possible to justify calculating the dominance using a sub-sample of the model space M using only m models where m is equal to the (N,r) combinations where r is set to a max value, e.g. 4, while N remains equal to the total number of features in the original dataset instead of being truncated prematurely at e.g. 15. In other words, the feature combinations would be all tetraplets, triplets, pairs, and singles from the entire feature space, if r == 4.

This sampling technique is similar to the balanced incomplete block design structure of best-worst scaling analysis. I haven't yet investigated, but perhaps the BWS literature can provide some direction on the mathematical foundations of such an approach.

Not sure if this repo is still active, but would love to hear ideas and feedback from the authors on the idea given their familiarity and expertise with the package and dominance analysis in general.

Best,

Andrew

R Squared more than 1

Hi Team,

I am getting more than 1 for R-Squared value for the attached data.

test.xlsx

code used:

import pandas as pd
from dominance_analysis import Dominance

dfA = pd.read_excel(r"test.xlsx")
dfA_corr = dfA.corr()
#dfA_regression = Dominance(data=dfA, target="ltr", objective=1)
dfA_regression = Dominance(data=dfA_corr, target="ltr", data_format=1)
R2_value = dfA_regression.complete_model_rsquare()

The reason for using correlation method is because we do not want to remove the any nulls from data. The last record has BU as null. If we use objective=1, then we need to remove all null rows, we do not intend to remove it.

Please suggest.

dominance analysis given a correlation matrix

Describe the solution you'd like
I'd like to do a dominance analysis given a correlation matrix.
I do not have the whole dataset.

Describe alternatives you've considered
An alternative would be to refresh my R knowledge and work with https://github.com/clbustos/dominanceAnalysis or ask a colleague to dig out an Excel file we used three years ago.

Additional context
I love python and would love to use this library instead of the alternatives listed above.

Failed import with skickit-learn > 1.2

Describe the bug
When importing dominance-analysis, datasets from sklearn are also imported:

from sklearn.datasets import load_boston

This fails for sklearn > 1.2 (https://scikit-learn.org/1.0/modules/generated/sklearn.datasets.load_boston.html)

To Reproduce
Steps to reproduce the behavior:

  1. Install a scikit-learn version higher than 1.2
  2. Install dominance-analysis
  3. Import dominance-analysis

Expected behavior
Import doesn't fail

Screenshots

Desktop (please complete the following information):

  • OS: macOS 13.2.1
  • Python version 3.10

Attribute Error when calling dominance_stats()

Getting an AttributeError: 'Dominance' object has no attribute 'variable_stats' when trying to call that method.

Replicate it by running the breast cancer example found in the documentation.

Support for Multithreading/Parallelism?

Is your feature request related to a problem? Please describe.
I am running dominance analysis on datasets with 50 top features and up to 400 samples, so there are hundreds of millions of combinations which cannot be computed easily within a single thread.

Describe the solution you'd like
I was wondering if you could support multiprocessing especially for larger datasets, or if this is something that can already be done, if this is easily achievable. Any help would be very much appreciated, as this tool is perfect for what I need!

Dominance relative percentage as negative

I ran dominance analysis with a set of data and getting negative total dominance values as well as negative percentage. Though the percentage adds up to 100 but shouldn't the percentage be positive numbers.
Adding the data used and results as well.

df = pd.read_excel('data.xlxs', sheet_name='data')
df_regression = Dominance(data=df, target='score', objective=1)
df_regression.incremental_rsquare()
df_tda = df_regression.dominance_stats()['Percentage Relative Importance']

data_results.xlsx

Only the last plot is showing up for incremental_rsquare()

Describe the bug
I can only get the last plot to show up for the dominance_regression.plot_incremental_rsquare() function.

To Reproduce
I followed the tutorial in order.
Steps to reproduce the behavior:

  1. Import Libaries
    from dominance_analysis import Dominance_Datasets
    from dominance_analysis import Dominance

  2. Import Toy Data
    boston_dataset=Dominance_Datasets.get_boston()

  3. Run Regression
    dominance_regression=Dominance(data=boston_dataset,target='House_Price',objective=1)

  4. Get RSquared
    incr_variable_rsquare=dominance_regression.incremental_rsquare()

  5. Plot the Incremental R-Squared
    dominance_regression.plot_incremental_rsquare()

Expected behavior

I expected all the plots to show up but only the last plot is visible

Screenshots
missing_plots

Desktop (please complete the following information):

  • OS: Mac OSX
  • Browser: Chrome
  • Version: 85.0.4183.83

Additional context
Add any other context about the problem here.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.