SmplML


NameSmplML JSON
Version 1.0.6 PyPI version JSON
download
home_pagehttps://github.com/JhunBrian/SmplML
SummarySmplML is a user-friendly Python module for streamlined machine learning classification and regression. It offers intuitive functionality for data preprocessing, model training, and evaluation. Ideal for beginners and experts alike, SmplML simplifies ML tasks, enabling you to gain valuable insights from your data with ease.
upload_time2023-06-13 04:33:47
maintainer
docs_urlNone
authorJhun Brian Andam
requires_python
licenseMIT
keywords machine learning classification regression
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # SmplML / SimpleML: Simplified Machine Learning for Classification and Regression

SmplML is a user-friendly Python module for streamlined machine learning classification and regression. It offers intuitive functionality for data preprocessing, model training, and evaluation. Ideal for beginners and experts alike, SmplML simplifies ML tasks, enabling you to gain valuable insights from your data with ease.

## Features

- Data preprocessing: Easily handle encoding categorical variables and data partitioning.
- Model training: Train various classification and regression models with just a few lines of code.
- Model evaluation: Evaluate model performance using common metrics.
- This module is designed to seamlessly handle various scikit-learn models, making it flexible for handling sklearn-like model formats.
- Added training feature for training multiple models for experimentation.

## Installation

<strong>You can install SmpML using pip:</strong>
```shell
pip install SimpleML
```

## Usage
The `TrainModel` class is designed to handle both classification and regression tasks. It determines the task type based on the `target` parameter. If the `target` has a `float` data type, the class automatically redirects the procedures to regression; otherwise, it assumes a classification task. 

### Data Preparation
Data  preparation like data spliting and converting categorical data into numerical data is also automatically executed when calling the `fit()` method.


```python
import seaborn as sns
import pandas as pd
from smpl_ml.smpl_ml import TrainModel
```

### Classification Task


```python
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.neighbors import KNeighborsClassifier
```


```python
df = sns.load_dataset('penguins')
df.head()
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>species</th>
      <th>island</th>
      <th>bill_length_mm</th>
      <th>bill_depth_mm</th>
      <th>flipper_length_mm</th>
      <th>body_mass_g</th>
      <th>sex</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>39.1</td>
      <td>18.7</td>
      <td>181.0</td>
      <td>3750.0</td>
      <td>Male</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>39.5</td>
      <td>17.4</td>
      <td>186.0</td>
      <td>3800.0</td>
      <td>Female</td>
    </tr>
    <tr>
      <th>2</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>40.3</td>
      <td>18.0</td>
      <td>195.0</td>
      <td>3250.0</td>
      <td>Female</td>
    </tr>
    <tr>
      <th>3</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>4</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>36.7</td>
      <td>19.3</td>
      <td>193.0</td>
      <td>3450.0</td>
      <td>Female</td>
    </tr>
  </tbody>
</table>
</div>




```python
clf_target = 'sex'
clf_features = df.iloc[:, df.columns != clf_target].columns

print(f"Class: {clf_target}")
print(f"Features: {clf_features}")
```

    Class: sex
    Features: Index(['species', 'island', 'bill_length_mm', 'bill_depth_mm',
           'flipper_length_mm', 'body_mass_g'],
          dtype='object')
    

#### Single Classification Model Training


```python
# Initialize TrainModel object
clf_trainer = TrainModel(df.dropna(), target=clf_target, features=clf_features, models=LogisticRegression(C=0.01, max_iter=10_000))

# Fit the object
clf_trainer.fit()
```


<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.85</td>
      <td>0.82</td>
      <td>0.83</td>
      <td>0.84</td>
      <td>0.84</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.82</td>
      <td>0.85</td>
      <td>0.84</td>
      <td>0.83</td>
      <td>0.84</td>
    </tr>
  </tbody>
</table>
</div>


The displayed dataframe when calling the `fit()` method contains the training results, this output can be suppressed by setting `verbose=False`.


```python
# Evaluate the model
clf_trainer.evaluate()
```


<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.73</td>
      <td>0.86</td>
      <td>0.83</td>
      <td>0.78</td>
      <td>0.8</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.86</td>
      <td>0.73</td>
      <td>0.77</td>
      <td>0.81</td>
      <td>0.8</td>
    </tr>
  </tbody>
</table>
</div>


The displayed dataframe when calling the `evaluate()` method contains the testing results, this output can be suppressed by setting `verbose=False`.


```python
# Access the fitted model
clf_trainer.fitted_models_dict
```




    {'LogisticRegression': LogisticRegression(C=0.01, max_iter=10000)}



#### Multiple Classification Model Training


```python
# Initialize TrainModel object
clfs = [LogisticRegression(), DecisionTreeClassifier(), RandomForestClassifier(), SVC(), KNeighborsClassifier()]

clf_trainer = TrainModel(df.dropna(), target=clf_target, features=clf_features, models=clfs, test_size=0.4)

# Fit the object
clf_trainer.fit(verbose=False)
```


```python
# Evaluate the model
clf_trainer.evaluate(verbose=True)
```


<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.76</td>
      <td>0.81</td>
      <td>0.82</td>
      <td>0.79</td>
      <td>0.78</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.81</td>
      <td>0.76</td>
      <td>0.75</td>
      <td>0.78</td>
      <td>0.78</td>
    </tr>
  </tbody>
</table>
</div>



<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.86</td>
      <td>0.83</td>
      <td>0.85</td>
      <td>0.85</td>
      <td>0.84</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.83</td>
      <td>0.86</td>
      <td>0.84</td>
      <td>0.83</td>
      <td>0.84</td>
    </tr>
  </tbody>
</table>
</div>



<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.84</td>
      <td>0.86</td>
      <td>0.87</td>
      <td>0.85</td>
      <td>0.85</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.86</td>
      <td>0.84</td>
      <td>0.83</td>
      <td>0.84</td>
      <td>0.85</td>
    </tr>
  </tbody>
</table>
</div>



<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.49</td>
      <td>0.73</td>
      <td>0.67</td>
      <td>0.57</td>
      <td>0.6</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.73</td>
      <td>0.49</td>
      <td>0.56</td>
      <td>0.63</td>
      <td>0.6</td>
    </tr>
  </tbody>
</table>
</div>



<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Recall</th>
      <th>Specificity</th>
      <th>Precision</th>
      <th>F1-Score</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Male</th>
      <td>0.74</td>
      <td>0.78</td>
      <td>0.79</td>
      <td>0.76</td>
      <td>0.76</td>
    </tr>
    <tr>
      <th>Female</th>
      <td>0.78</td>
      <td>0.74</td>
      <td>0.73</td>
      <td>0.75</td>
      <td>0.76</td>
    </tr>
  </tbody>
</table>
</div>


#### Results


```python
clf_trainer.results_df
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Model</th>
      <th>Accuracy</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>RandomForestClassifier</td>
      <td>0.85</td>
    </tr>
    <tr>
      <th>1</th>
      <td>DecisionTreeClassifier</td>
      <td>0.84</td>
    </tr>
    <tr>
      <th>2</th>
      <td>LogisticRegression</td>
      <td>0.78</td>
    </tr>
    <tr>
      <th>3</th>
      <td>KNeighborsClassifier</td>
      <td>0.76</td>
    </tr>
    <tr>
      <th>4</th>
      <td>SVC</td>
      <td>0.60</td>
    </tr>
  </tbody>
</table>
</div>




```python
clf_trainer.fitted_models_dict
```




    {'LogisticRegression': LogisticRegression(),
     'DecisionTreeClassifier': DecisionTreeClassifier(),
     'RandomForestClassifier': RandomForestClassifier(),
     'SVC': SVC(),
     'KNeighborsClassifier': KNeighborsClassifier()}



Accuracy results and the fitted models can be accessed through the `results_df` and `fitted_models_dict` attributes.

### Regression Task


```python
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.svm import SVR
from sklearn.ensemble import GradientBoostingRegressor
```


```python
df = sns.load_dataset('penguins')
df.head()
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>species</th>
      <th>island</th>
      <th>bill_length_mm</th>
      <th>bill_depth_mm</th>
      <th>flipper_length_mm</th>
      <th>body_mass_g</th>
      <th>sex</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>39.1</td>
      <td>18.7</td>
      <td>181.0</td>
      <td>3750.0</td>
      <td>Male</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>39.5</td>
      <td>17.4</td>
      <td>186.0</td>
      <td>3800.0</td>
      <td>Female</td>
    </tr>
    <tr>
      <th>2</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>40.3</td>
      <td>18.0</td>
      <td>195.0</td>
      <td>3250.0</td>
      <td>Female</td>
    </tr>
    <tr>
      <th>3</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>4</th>
      <td>Adelie</td>
      <td>Torgersen</td>
      <td>36.7</td>
      <td>19.3</td>
      <td>193.0</td>
      <td>3450.0</td>
      <td>Female</td>
    </tr>
  </tbody>
</table>
</div>




```python
reg_target = 'bill_length_mm'
reg_features = df.iloc[:, df.columns != reg_target].columns

print(f"Class: {reg_target}")
print(f"Features: {reg_features}")
```

    Class: bill_length_mm
    Features: Index(['species', 'island', 'bill_depth_mm', 'flipper_length_mm',
           'body_mass_g', 'sex'],
          dtype='object')
    

#### Single Regression Model Training


```python
# Initialize TrainModel object
reg_trainer = TrainModel(df.dropna(), 
                         target=reg_target, 
                         features=reg_features,
                         models=LinearRegression())

# Fit the object
reg_trainer.fit(verbose=False)
```


```python
# Evaluate the model
reg_trainer.evaluate()
```


<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>MSE</th>
      <th>RMSE</th>
      <th>MAE</th>
      <th>R-squared</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>Metrics</th>
      <td>6.3</td>
      <td>2.51</td>
      <td>1.91</td>
      <td>0.81</td>
    </tr>
  </tbody>
</table>
</div>



```python
# Access the model
reg_trainer.fitted_models_dict
```




    {'LinearRegression': LinearRegression()}



#### Multiple Regression Model Training


```python
# Initialize TrainModel object
regs = [LinearRegression(), DecisionTreeRegressor(), RandomForestRegressor(), SVR(), GradientBoostingRegressor()]

reg_trainer = TrainModel(df.dropna(), target=reg_target, features=reg_features, models=regs, test_size=0.4)

# Fit the object
reg_trainer.fit(verbose=False)
```


```python
# Evaluate the model
reg_trainer.evaluate(verbose=False)
```

#### Results


```python
reg_trainer.results_df
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>Model</th>
      <th>MSE</th>
      <th>RMSE</th>
      <th>MAE</th>
      <th>R-squared</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>RandomForestRegressor</td>
      <td>5.74</td>
      <td>2.40</td>
      <td>1.87</td>
      <td>0.81</td>
    </tr>
    <tr>
      <th>1</th>
      <td>GradientBoostingRegressor</td>
      <td>6.58</td>
      <td>2.57</td>
      <td>1.94</td>
      <td>0.79</td>
    </tr>
    <tr>
      <th>2</th>
      <td>DecisionTreeRegressor</td>
      <td>6.98</td>
      <td>2.64</td>
      <td>2.06</td>
      <td>0.77</td>
    </tr>
    <tr>
      <th>3</th>
      <td>LinearRegression</td>
      <td>7.63</td>
      <td>2.76</td>
      <td>2.11</td>
      <td>0.75</td>
    </tr>
    <tr>
      <th>4</th>
      <td>SVR</td>
      <td>21.51</td>
      <td>4.64</td>
      <td>3.63</td>
      <td>0.31</td>
    </tr>
  </tbody>
</table>
</div>




```python
reg_trainer.fitted_models_dict
```




    {'LinearRegression': LinearRegression(),
     'DecisionTreeRegressor': DecisionTreeRegressor(),
     'RandomForestRegressor': RandomForestRegressor(),
     'SVR': SVR(),
     'GradientBoostingRegressor': GradientBoostingRegressor()}




```python

```


Change Log
==================

1.0.6 (06/13/2023)
------------------
- Added regression
- Modified docstrings
- Added pre-defined function
- Fixed local issues
- Added training feature for training multiple models.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/JhunBrian/SmplML",
    "name": "SmplML",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "Machine Learning,Classification,Regression",
    "author": "Jhun Brian Andam",
    "author_email": "andam.jhunbrian@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/42/e6/c5a3a776288194371bd91d09b794eb05e8dc012e575daca6c8a45241950c/SmplML-1.0.6.tar.gz",
    "platform": null,
    "description": "# SmplML / SimpleML: Simplified Machine Learning for Classification and Regression\r\n\r\nSmplML is a user-friendly Python module for streamlined machine learning classification and regression. It offers intuitive functionality for data preprocessing, model training, and evaluation. Ideal for beginners and experts alike, SmplML simplifies ML tasks, enabling you to gain valuable insights from your data with ease.\r\n\r\n## Features\r\n\r\n- Data preprocessing: Easily handle encoding categorical variables and data partitioning.\r\n- Model training: Train various classification and regression models with just a few lines of code.\r\n- Model evaluation: Evaluate model performance using common metrics.\r\n- This module is designed to seamlessly handle various scikit-learn models, making it flexible for handling sklearn-like model formats.\r\n- Added training feature for training multiple models for experimentation.\r\n\r\n## Installation\r\n\r\n<strong>You can install SmpML using pip:</strong>\r\n```shell\r\npip install SimpleML\r\n```\r\n\r\n## Usage\r\nThe `TrainModel` class is designed to handle both classification and regression tasks. It determines the task type based on the `target` parameter. If the `target` has a `float` data type, the class automatically redirects the procedures to regression; otherwise, it assumes a classification task. \r\n\r\n### Data Preparation\r\nData  preparation like data spliting and converting categorical data into numerical data is also automatically executed when calling the `fit()` method.\r\n\r\n\r\n```python\r\nimport seaborn as sns\r\nimport pandas as pd\r\nfrom smpl_ml.smpl_ml import TrainModel\r\n```\r\n\r\n### Classification Task\r\n\r\n\r\n```python\r\nfrom sklearn.linear_model import LogisticRegression\r\nfrom sklearn.tree import DecisionTreeClassifier\r\nfrom sklearn.ensemble import RandomForestClassifier\r\nfrom sklearn.svm import SVC\r\nfrom sklearn.neighbors import KNeighborsClassifier\r\n```\r\n\r\n\r\n```python\r\ndf = sns.load_dataset('penguins')\r\ndf.head()\r\n```\r\n\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>species</th>\r\n      <th>island</th>\r\n      <th>bill_length_mm</th>\r\n      <th>bill_depth_mm</th>\r\n      <th>flipper_length_mm</th>\r\n      <th>body_mass_g</th>\r\n      <th>sex</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>0</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>39.1</td>\r\n      <td>18.7</td>\r\n      <td>181.0</td>\r\n      <td>3750.0</td>\r\n      <td>Male</td>\r\n    </tr>\r\n    <tr>\r\n      <th>1</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>39.5</td>\r\n      <td>17.4</td>\r\n      <td>186.0</td>\r\n      <td>3800.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n    <tr>\r\n      <th>2</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>40.3</td>\r\n      <td>18.0</td>\r\n      <td>195.0</td>\r\n      <td>3250.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n    <tr>\r\n      <th>3</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n    </tr>\r\n    <tr>\r\n      <th>4</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>36.7</td>\r\n      <td>19.3</td>\r\n      <td>193.0</td>\r\n      <td>3450.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n\r\n```python\r\nclf_target = 'sex'\r\nclf_features = df.iloc[:, df.columns != clf_target].columns\r\n\r\nprint(f\"Class: {clf_target}\")\r\nprint(f\"Features: {clf_features}\")\r\n```\r\n\r\n    Class: sex\r\n    Features: Index(['species', 'island', 'bill_length_mm', 'bill_depth_mm',\r\n           'flipper_length_mm', 'body_mass_g'],\r\n          dtype='object')\r\n    \r\n\r\n#### Single Classification Model Training\r\n\r\n\r\n```python\r\n# Initialize TrainModel object\r\nclf_trainer = TrainModel(df.dropna(), target=clf_target, features=clf_features, models=LogisticRegression(C=0.01, max_iter=10_000))\r\n\r\n# Fit the object\r\nclf_trainer.fit()\r\n```\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.85</td>\r\n      <td>0.82</td>\r\n      <td>0.83</td>\r\n      <td>0.84</td>\r\n      <td>0.84</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.82</td>\r\n      <td>0.85</td>\r\n      <td>0.84</td>\r\n      <td>0.83</td>\r\n      <td>0.84</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\nThe displayed dataframe when calling the `fit()` method contains the training results, this output can be suppressed by setting `verbose=False`.\r\n\r\n\r\n```python\r\n# Evaluate the model\r\nclf_trainer.evaluate()\r\n```\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.73</td>\r\n      <td>0.86</td>\r\n      <td>0.83</td>\r\n      <td>0.78</td>\r\n      <td>0.8</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.86</td>\r\n      <td>0.73</td>\r\n      <td>0.77</td>\r\n      <td>0.81</td>\r\n      <td>0.8</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\nThe displayed dataframe when calling the `evaluate()` method contains the testing results, this output can be suppressed by setting `verbose=False`.\r\n\r\n\r\n```python\r\n# Access the fitted model\r\nclf_trainer.fitted_models_dict\r\n```\r\n\r\n\r\n\r\n\r\n    {'LogisticRegression': LogisticRegression(C=0.01, max_iter=10000)}\r\n\r\n\r\n\r\n#### Multiple Classification Model Training\r\n\r\n\r\n```python\r\n# Initialize TrainModel object\r\nclfs = [LogisticRegression(), DecisionTreeClassifier(), RandomForestClassifier(), SVC(), KNeighborsClassifier()]\r\n\r\nclf_trainer = TrainModel(df.dropna(), target=clf_target, features=clf_features, models=clfs, test_size=0.4)\r\n\r\n# Fit the object\r\nclf_trainer.fit(verbose=False)\r\n```\r\n\r\n\r\n```python\r\n# Evaluate the model\r\nclf_trainer.evaluate(verbose=True)\r\n```\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.76</td>\r\n      <td>0.81</td>\r\n      <td>0.82</td>\r\n      <td>0.79</td>\r\n      <td>0.78</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.81</td>\r\n      <td>0.76</td>\r\n      <td>0.75</td>\r\n      <td>0.78</td>\r\n      <td>0.78</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.86</td>\r\n      <td>0.83</td>\r\n      <td>0.85</td>\r\n      <td>0.85</td>\r\n      <td>0.84</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.83</td>\r\n      <td>0.86</td>\r\n      <td>0.84</td>\r\n      <td>0.83</td>\r\n      <td>0.84</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.84</td>\r\n      <td>0.86</td>\r\n      <td>0.87</td>\r\n      <td>0.85</td>\r\n      <td>0.85</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.86</td>\r\n      <td>0.84</td>\r\n      <td>0.83</td>\r\n      <td>0.84</td>\r\n      <td>0.85</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.49</td>\r\n      <td>0.73</td>\r\n      <td>0.67</td>\r\n      <td>0.57</td>\r\n      <td>0.6</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.73</td>\r\n      <td>0.49</td>\r\n      <td>0.56</td>\r\n      <td>0.63</td>\r\n      <td>0.6</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Recall</th>\r\n      <th>Specificity</th>\r\n      <th>Precision</th>\r\n      <th>F1-Score</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Male</th>\r\n      <td>0.74</td>\r\n      <td>0.78</td>\r\n      <td>0.79</td>\r\n      <td>0.76</td>\r\n      <td>0.76</td>\r\n    </tr>\r\n    <tr>\r\n      <th>Female</th>\r\n      <td>0.78</td>\r\n      <td>0.74</td>\r\n      <td>0.73</td>\r\n      <td>0.75</td>\r\n      <td>0.76</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n#### Results\r\n\r\n\r\n```python\r\nclf_trainer.results_df\r\n```\r\n\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Model</th>\r\n      <th>Accuracy</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>0</th>\r\n      <td>RandomForestClassifier</td>\r\n      <td>0.85</td>\r\n    </tr>\r\n    <tr>\r\n      <th>1</th>\r\n      <td>DecisionTreeClassifier</td>\r\n      <td>0.84</td>\r\n    </tr>\r\n    <tr>\r\n      <th>2</th>\r\n      <td>LogisticRegression</td>\r\n      <td>0.78</td>\r\n    </tr>\r\n    <tr>\r\n      <th>3</th>\r\n      <td>KNeighborsClassifier</td>\r\n      <td>0.76</td>\r\n    </tr>\r\n    <tr>\r\n      <th>4</th>\r\n      <td>SVC</td>\r\n      <td>0.60</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n\r\n```python\r\nclf_trainer.fitted_models_dict\r\n```\r\n\r\n\r\n\r\n\r\n    {'LogisticRegression': LogisticRegression(),\r\n     'DecisionTreeClassifier': DecisionTreeClassifier(),\r\n     'RandomForestClassifier': RandomForestClassifier(),\r\n     'SVC': SVC(),\r\n     'KNeighborsClassifier': KNeighborsClassifier()}\r\n\r\n\r\n\r\nAccuracy results and the fitted models can be accessed through the `results_df` and `fitted_models_dict` attributes.\r\n\r\n### Regression Task\r\n\r\n\r\n```python\r\nfrom sklearn.linear_model import LinearRegression\r\nfrom sklearn.tree import DecisionTreeRegressor\r\nfrom sklearn.ensemble import RandomForestRegressor\r\nfrom sklearn.svm import SVR\r\nfrom sklearn.ensemble import GradientBoostingRegressor\r\n```\r\n\r\n\r\n```python\r\ndf = sns.load_dataset('penguins')\r\ndf.head()\r\n```\r\n\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>species</th>\r\n      <th>island</th>\r\n      <th>bill_length_mm</th>\r\n      <th>bill_depth_mm</th>\r\n      <th>flipper_length_mm</th>\r\n      <th>body_mass_g</th>\r\n      <th>sex</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>0</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>39.1</td>\r\n      <td>18.7</td>\r\n      <td>181.0</td>\r\n      <td>3750.0</td>\r\n      <td>Male</td>\r\n    </tr>\r\n    <tr>\r\n      <th>1</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>39.5</td>\r\n      <td>17.4</td>\r\n      <td>186.0</td>\r\n      <td>3800.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n    <tr>\r\n      <th>2</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>40.3</td>\r\n      <td>18.0</td>\r\n      <td>195.0</td>\r\n      <td>3250.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n    <tr>\r\n      <th>3</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n      <td>NaN</td>\r\n    </tr>\r\n    <tr>\r\n      <th>4</th>\r\n      <td>Adelie</td>\r\n      <td>Torgersen</td>\r\n      <td>36.7</td>\r\n      <td>19.3</td>\r\n      <td>193.0</td>\r\n      <td>3450.0</td>\r\n      <td>Female</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n\r\n```python\r\nreg_target = 'bill_length_mm'\r\nreg_features = df.iloc[:, df.columns != reg_target].columns\r\n\r\nprint(f\"Class: {reg_target}\")\r\nprint(f\"Features: {reg_features}\")\r\n```\r\n\r\n    Class: bill_length_mm\r\n    Features: Index(['species', 'island', 'bill_depth_mm', 'flipper_length_mm',\r\n           'body_mass_g', 'sex'],\r\n          dtype='object')\r\n    \r\n\r\n#### Single Regression Model Training\r\n\r\n\r\n```python\r\n# Initialize TrainModel object\r\nreg_trainer = TrainModel(df.dropna(), \r\n                         target=reg_target, \r\n                         features=reg_features,\r\n                         models=LinearRegression())\r\n\r\n# Fit the object\r\nreg_trainer.fit(verbose=False)\r\n```\r\n\r\n\r\n```python\r\n# Evaluate the model\r\nreg_trainer.evaluate()\r\n```\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>MSE</th>\r\n      <th>RMSE</th>\r\n      <th>MAE</th>\r\n      <th>R-squared</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>Metrics</th>\r\n      <td>6.3</td>\r\n      <td>2.51</td>\r\n      <td>1.91</td>\r\n      <td>0.81</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n```python\r\n# Access the model\r\nreg_trainer.fitted_models_dict\r\n```\r\n\r\n\r\n\r\n\r\n    {'LinearRegression': LinearRegression()}\r\n\r\n\r\n\r\n#### Multiple Regression Model Training\r\n\r\n\r\n```python\r\n# Initialize TrainModel object\r\nregs = [LinearRegression(), DecisionTreeRegressor(), RandomForestRegressor(), SVR(), GradientBoostingRegressor()]\r\n\r\nreg_trainer = TrainModel(df.dropna(), target=reg_target, features=reg_features, models=regs, test_size=0.4)\r\n\r\n# Fit the object\r\nreg_trainer.fit(verbose=False)\r\n```\r\n\r\n\r\n```python\r\n# Evaluate the model\r\nreg_trainer.evaluate(verbose=False)\r\n```\r\n\r\n#### Results\r\n\r\n\r\n```python\r\nreg_trainer.results_df\r\n```\r\n\r\n\r\n\r\n\r\n<div>\r\n<style scoped>\r\n    .dataframe tbody tr th:only-of-type {\r\n        vertical-align: middle;\r\n    }\r\n\r\n    .dataframe tbody tr th {\r\n        vertical-align: top;\r\n    }\r\n\r\n    .dataframe thead th {\r\n        text-align: right;\r\n    }\r\n</style>\r\n<table border=\"1\" class=\"dataframe\">\r\n  <thead>\r\n    <tr style=\"text-align: right;\">\r\n      <th></th>\r\n      <th>Model</th>\r\n      <th>MSE</th>\r\n      <th>RMSE</th>\r\n      <th>MAE</th>\r\n      <th>R-squared</th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr>\r\n      <th>0</th>\r\n      <td>RandomForestRegressor</td>\r\n      <td>5.74</td>\r\n      <td>2.40</td>\r\n      <td>1.87</td>\r\n      <td>0.81</td>\r\n    </tr>\r\n    <tr>\r\n      <th>1</th>\r\n      <td>GradientBoostingRegressor</td>\r\n      <td>6.58</td>\r\n      <td>2.57</td>\r\n      <td>1.94</td>\r\n      <td>0.79</td>\r\n    </tr>\r\n    <tr>\r\n      <th>2</th>\r\n      <td>DecisionTreeRegressor</td>\r\n      <td>6.98</td>\r\n      <td>2.64</td>\r\n      <td>2.06</td>\r\n      <td>0.77</td>\r\n    </tr>\r\n    <tr>\r\n      <th>3</th>\r\n      <td>LinearRegression</td>\r\n      <td>7.63</td>\r\n      <td>2.76</td>\r\n      <td>2.11</td>\r\n      <td>0.75</td>\r\n    </tr>\r\n    <tr>\r\n      <th>4</th>\r\n      <td>SVR</td>\r\n      <td>21.51</td>\r\n      <td>4.64</td>\r\n      <td>3.63</td>\r\n      <td>0.31</td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n</div>\r\n\r\n\r\n\r\n\r\n```python\r\nreg_trainer.fitted_models_dict\r\n```\r\n\r\n\r\n\r\n\r\n    {'LinearRegression': LinearRegression(),\r\n     'DecisionTreeRegressor': DecisionTreeRegressor(),\r\n     'RandomForestRegressor': RandomForestRegressor(),\r\n     'SVR': SVR(),\r\n     'GradientBoostingRegressor': GradientBoostingRegressor()}\r\n\r\n\r\n\r\n\r\n```python\r\n\r\n```\r\n\r\n\r\nChange Log\r\n==================\r\n\r\n1.0.6 (06/13/2023)\r\n------------------\r\n- Added regression\r\n- Modified docstrings\r\n- Added pre-defined function\r\n- Fixed local issues\r\n- Added training feature for training multiple models.\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "SmplML is a user-friendly Python module for streamlined machine learning classification and regression. It offers intuitive functionality for data preprocessing, model training, and evaluation. Ideal for beginners and experts alike, SmplML simplifies ML tasks, enabling you to gain valuable insights from your data with ease.",
    "version": "1.0.6",
    "project_urls": {
        "Homepage": "https://github.com/JhunBrian/SmplML"
    },
    "split_keywords": [
        "machine learning",
        "classification",
        "regression"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "a4367df0bbf240cb6fcecc9be142deed48205797da2817206e08b75f7ffaf005",
                "md5": "76f66558f702360050315ecaf1cf8a6c",
                "sha256": "e89b005fd2511f511d2c56a14298e29b0d78294f32d852c6f0935c5fbe92bf16"
            },
            "downloads": -1,
            "filename": "SmplML-1.0.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "76f66558f702360050315ecaf1cf8a6c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 10224,
            "upload_time": "2023-06-13T04:33:39",
            "upload_time_iso_8601": "2023-06-13T04:33:39.971659Z",
            "url": "https://files.pythonhosted.org/packages/a4/36/7df0bbf240cb6fcecc9be142deed48205797da2817206e08b75f7ffaf005/SmplML-1.0.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "42e6c5a3a776288194371bd91d09b794eb05e8dc012e575daca6c8a45241950c",
                "md5": "9c51f2393997b2d016b46288bbd92a0e",
                "sha256": "c8a8e5909026cce70e7680aaacf81cbc270c0f3e576b344fbe114e49904d5ef7"
            },
            "downloads": -1,
            "filename": "SmplML-1.0.6.tar.gz",
            "has_sig": false,
            "md5_digest": "9c51f2393997b2d016b46288bbd92a0e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 8748,
            "upload_time": "2023-06-13T04:33:47",
            "upload_time_iso_8601": "2023-06-13T04:33:47.747957Z",
            "url": "https://files.pythonhosted.org/packages/42/e6/c5a3a776288194371bd91d09b794eb05e8dc012e575daca6c8a45241950c/SmplML-1.0.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-06-13 04:33:47",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "JhunBrian",
    "github_project": "SmplML",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "smplml"
}
        
Elapsed time: 0.16222s