scikit-lab-kit 0.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,65 @@
1
+ PRACTICAL 10: ASSOCIATION - APRIORI (GROCERIES DATASET)
2
+
3
+ STEPS:
4
+ 1. Install the libraries: pip install pandas seaborn matplotlib mlxtend
5
+ 2. Load groceries.csv and remove the empty (nan / None) items from every transaction.
6
+ 3. Convert the transactions into a one-hot table using TransactionEncoder.
7
+ 4. Find the frequent itemsets with Apriori (min_support = 0.01).
8
+ 5. Plot the top 15 itemsets by support.
9
+ 6. Generate the association rules with lift >= 1.
10
+ 7. Filter the rules (antecedent length >= 2 with confidence > 0.3, and consequent length >= 2).
11
+ 8. Print the rules by the metrics lift, confidence, leverage and conviction.
12
+
13
+ CODE:
14
+ import pandas as pd
15
+ import seaborn as sns
16
+ import matplotlib.pyplot as plt
17
+ from mlxtend.preprocessing import TransactionEncoder
18
+ from mlxtend.frequent_patterns import apriori, association_rules
19
+ data = pd.read_csv("groceries.csv")
20
+ print("First 5 rows of raw data:\n", data.head())
21
+ transactions = data.values.astype(str).tolist()
22
+ transactions = [[item for item in row if item != 'nan' and item != 'None'] for row in transactions]
23
+ print("\nFirst 2 cleaned transactions:\n", transactions[:2])
24
+ te = TransactionEncoder()
25
+ te_ary = te.fit(transactions).transform(transactions)
26
+ df = pd.DataFrame(te_ary, columns=te.columns_)
27
+ print("\nOne-hot encoded shape:", df.shape)
28
+ frequent_itemset = apriori(df, min_support=0.01, use_colnames=True)
29
+ print(f"Total frequent itemsets found: {len(frequent_itemset)}")
30
+ top_15 = frequent_itemset.nlargest(n=15, columns='support').copy()
31
+ top_15['itemset_str'] = top_15['itemsets'].apply(lambda x: ', '.join(list(x)))
32
+ plt.figure(figsize=(12, 6))
33
+ colors = ['#FFB6C1', '#ADD8E6', '#98FB98', '#FFD700', '#FFA07A', '#87CEEB', '#FFC0CB', '#FF69B4', '#00FA9A', '#FF6347']
34
+ sns.barplot(x='itemset_str', y='support', data=top_15, hue='itemset_str', palette=colors[:len(top_15)], legend=False)
35
+ plt.xticks(rotation=45, ha='right')
36
+ plt.title("Top Frequent Itemsets by Support")
37
+ plt.tight_layout()
38
+ plt.show()
39
+ rules = association_rules(frequent_itemset, metric="lift", min_threshold=1)
40
+ rules = rules.sort_values(by=['support'], ascending=False)
41
+ rules["antecedent_len"] = rules["antecedents"].apply(lambda x: len(x))
42
+ rules["consequent_len"] = rules["consequents"].apply(lambda x: len(x))
43
+ rule_3_filtered = rules[(rules['antecedent_len'] >= 2) &
44
+ (rules['confidence'] > 0.3) &
45
+ (rules['lift'] > 1)].sort_values(by=['lift', 'support'], ascending=False)
46
+ print("\nRule 3 (Antecedent Len >= 2, Conf > 0.3, Lift > 1):\n", rule_3_filtered.head())
47
+ rule_4_filtered = rules[(rules['consequent_len'] >= 2) &
48
+ (rules['lift'] > 1)].sort_values(by=['lift', 'confidence'], ascending=False)
49
+ print("\nRule 4 (Consequent Len >= 2, Lift > 1):\n", rule_4_filtered.head())
50
+ print("---------------------ACCURACY METRICS-------------------------------")
51
+ rules = association_rules(frequent_itemset, metric="lift", min_threshold=1)
52
+ print(rules)
53
+ rules = association_rules(frequent_itemset,metric="confidence",min_threshold=1)
54
+ print(rules)
55
+ rules = association_rules(frequent_itemset,metric="leverage",min_threshold=1)
56
+ print(rules)
57
+ rules = association_rules(frequent_itemset,metric="conviction",min_threshold=1)
58
+ print(rules)
59
+
60
+ EXPLANATION:
61
+ - Apriori finds the items that are bought together often, using the support (how frequent an itemset is).
62
+ - TransactionEncoder turns every basket into True / False columns, one per item, which Apriori needs.
63
+ - association_rules() makes rules like "A -> B" and measures them with support, confidence and lift (lift > 1 means the items really go together).
64
+ - The filters keep the stronger multi-item rules (antecedent >= 2 items with confidence > 0.3, and consequent >= 2 items).
65
+ - The last part prints the rules by lift, confidence, leverage and conviction to compare the metrics.
@@ -0,0 +1,140 @@
1
+ PRACTICAL 11: ASSOCIATION - APRIORI (OWN DATASET)
2
+
3
+ Dataset taken: Travel.csv (read as travel1.csv)
4
+
5
+ STEPS:
6
+ 1. Install the libraries: pip install pandas seaborn matplotlib mlxtend
7
+ 2. Load the travel csv and drop the Traveler_ID column.
8
+ 3. Convert the numeric columns into groups: Age -> Age_Group, Average_Spend_USD -> Spend_Level (low / medium / high), Travel_Frequency_per_Year -> Freq_Level.
9
+ 4. Add the column name before every text value (for example City_Paris) so the items are unique.
10
+ 5. Convert every row into a transaction and one-hot encode it with TransactionEncoder.
11
+ 6. Find the frequent itemsets with Apriori (min_support = 0.05) and plot the top 15.
12
+ 7. Generate the association rules (lift >= 1) and print them by lift.
13
+ 8. Print the multi-condition rules (antecedent length >= 2, confidence > 0.3) and the high-confidence rules (confidence >= 0.5).
14
+
15
+ CODE:
16
+ import matplotlib.pyplot as plt
17
+ import pandas as pd
18
+ import seaborn as sns
19
+ from mlxtend.frequent_patterns import apriori, association_rules
20
+ from mlxtend.preprocessing import TransactionEncoder
21
+ data = pd.read_csv("travel1.csv")
22
+ if "Traveler_ID" in data.columns:
23
+ data = data.drop(columns=["Traveler_ID"])
24
+ if "Age" in data.columns:
25
+ data["Age_Group"] = pd.cut(
26
+ data["Age"],
27
+ bins=[0, 25, 40, 60, 100],
28
+ labels=["Age_18-25", "Age_26-40", "Age_41-60", "Age_60+"],
29
+ )
30
+ data = data.drop(columns=["Age"])
31
+ if "Average_Spend_USD" in data.columns:
32
+ data["Spend_Level"] = pd.qcut(
33
+ data["Average_Spend_USD"],
34
+ q=3,
35
+ labels=["Spend_Low", "Spend_Medium", "Spend_High"],
36
+ )
37
+ data = data.drop(columns=["Average_Spend_USD"])
38
+ if "Travel_Frequency_per_Year" in data.columns:
39
+ data["Freq_Level"] = pd.qcut(
40
+ data["Travel_Frequency_per_Year"],
41
+ q=3,
42
+ labels=["Freq_Low", "Freq_Medium", "Freq_High"],
43
+ duplicates="drop",
44
+ )
45
+ data = data.drop(columns=["Travel_Frequency_per_Year"])
46
+ for col in data.select_dtypes(include=["object", "category"]).columns:
47
+ data[col] = col + "_" + data[col].astype(str)
48
+ transactions = data.values.tolist()
49
+ transactions = [
50
+ [str(item) for item in row if pd.notna(item) and item != "nan"]
51
+ for row in transactions
52
+ ]
53
+ te = TransactionEncoder()
54
+ te_ary = te.fit(transactions).transform(transactions)
55
+ df = pd.DataFrame(te_ary, columns=te.columns_)
56
+ print("Encoded Dataset Shape:", df.shape)
57
+ frequent_itemsets = apriori(df, min_support=0.05, use_colnames=True)
58
+ print(f"Total Frequent Itemsets Generated: {len(frequent_itemsets)}")
59
+ # Plot Top Itemsets
60
+ plt.figure(figsize=(12, 6))
61
+ top_itemsets = frequent_itemsets.nlargest(n=15, columns="support").copy()
62
+ top_itemsets["itemsets_str"] = top_itemsets["itemsets"].apply(
63
+ lambda x: ", ".join(list(x))
64
+ )
65
+ sns.barplot(
66
+ x="itemsets_str",
67
+ y="support",
68
+ data=top_itemsets,
69
+ palette="Blues_r",
70
+ hue="itemsets_str",
71
+ legend=False,
72
+ )
73
+ plt.xticks(rotation=45, ha="right")
74
+ plt.title("Top 15 Itemsets by Support")
75
+ plt.tight_layout()
76
+ plt.show()
77
+ # Generate and Filter Association Rules
78
+ rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.0)
79
+ if not rules.empty:
80
+ rules["antecedent_len"] = rules["antecedents"].apply(len)
81
+ rules["consequent_len"] = rules["consequents"].apply(len)
82
+ # Convert frozensets to readable strings for display
83
+ display_rules = rules.copy()
84
+ display_rules["antecedents"] = display_rules["antecedents"].apply(
85
+ lambda x: list(x)
86
+ )
87
+ display_rules["consequents"] = display_rules["consequents"].apply(
88
+ lambda x: list(x)
89
+ )
90
+ print("\n--- ALL VALID RULES (Sorted by Lift) ---")
91
+ print(
92
+ display_rules.sort_values(by="lift", ascending=False)[
93
+ ["antecedents", "consequents", "support", "confidence", "lift"]
94
+ ].head(10)
95
+ )
96
+ print("\n--- MULTI-CONDITION RULES (Antecedent Len >= 2 & Conf > 0.3) ---")
97
+ filtered_rules_1 = display_rules[
98
+ (display_rules["antecedent_len"] >= 2)
99
+ & (display_rules["confidence"] > 0.3)
100
+ & (display_rules["lift"] > 1.0)
101
+ ].sort_values(by=["lift", "support"], ascending=False)
102
+ print(
103
+ filtered_rules_1[
104
+ ["antecedents", "consequents", "support", "confidence", "lift"]
105
+ ].head(10)
106
+ )
107
+ print("\n--- HIGH-CONFIDENCE ACCURACY METRICS ---")
108
+ high_conf_rules = association_rules(
109
+ frequent_itemsets, metric="confidence", min_threshold=0.5
110
+ )
111
+ high_conf_rules["antecedents"] = high_conf_rules["antecedents"].apply(
112
+ lambda x: list(x)
113
+ )
114
+ high_conf_rules["consequents"] = high_conf_rules["consequents"].apply(
115
+ lambda x: list(x)
116
+ )
117
+ print(
118
+ high_conf_rules.sort_values(by="confidence", ascending=False)[
119
+ [
120
+ "antecedents",
121
+ "consequents",
122
+ "support",
123
+ "confidence",
124
+ "lift",
125
+ "leverage",
126
+ "conviction",
127
+ ]
128
+ ].head(10)
129
+ )
130
+ else:
131
+ print(
132
+ "No association rules met the threshold. Consider lowering min_support."
133
+ )
134
+
135
+ EXPLANATION:
136
+ - Travel data is not in basket form, so the numeric columns (age, spend, frequency) are first converted into groups like Age_26-40 or Spend_High.
137
+ - Each text value gets its column name in front, so every row becomes a "basket" of items such as Destination_Paris.
138
+ - Apriori finds the combinations of items that occur in at least 5% of the travellers.
139
+ - The rules (like "Age_26-40 + Spend_High -> Freq_High") are ranked by lift and filtered by confidence.
140
+ - If no rule meets the threshold, the program prints a message to lower min_support.
@@ -0,0 +1,36 @@
1
+ PRACTICAL 12: FP-TREE ASSOCIATION
2
+
3
+ Dataset: disney_movies.csv
4
+
5
+ STEPS:
6
+ 1. Install the library: pip install pyfpgrowth
7
+ 2. Read disney_movies.csv with the csv module (utf8 encoding) and keep every row as a list.
8
+ 3. Remove the empty values from each row and remove the header row.
9
+ 4. Print some records (first 10) to check the data.
10
+ 5. Find the frequent patterns with find_frequent_patterns (minimum support count = 2).
11
+ 6. Generate the association rules from the patterns with generate_association_rules (minimum confidence = 0.7).
12
+ 7. Print the patterns and the rules.
13
+
14
+ CODE:
15
+ import pyfpgrowth
16
+ import csv
17
+ with open('disney_movies.csv',encoding="utf8",newline='') as f:
18
+ reader=csv.reader(f)
19
+ data=list(reader)
20
+ for i in range(len(data)) :
21
+ if '' in data[i]:
22
+ data[i]=[x for x in data[i] if x]
23
+ data.pop(0)
24
+ print("some records",data[0:10])
25
+ patterns=pyfpgrowth.find_frequent_patterns(data,2)
26
+ print("pattern",patterns)
27
+ print()
28
+ rules=pyfpgrowth.generate_association_rules(patterns,0.7)
29
+ print("rules output",rules)
30
+
31
+ EXPLANATION:
32
+ - FP-Growth is a faster alternative to Apriori: it builds a compact FP-tree of the transactions and does not generate candidate itemsets.
33
+ - Each row of the csv (one movie with its details) is treated as one transaction after the empty cells are removed.
34
+ - find_frequent_patterns(data, 2) returns the item patterns that appear in at least 2 transactions.
35
+ - generate_association_rules(patterns, 0.7) keeps only the rules whose confidence is 70% or more.
36
+ - The output is a dictionary of patterns with their counts and the rules in the form: antecedent -> (consequent, confidence).
@@ -0,0 +1,51 @@
1
+ PRACTICAL 13: CLASSIFIERS EXPLANATION (PCA, SVM, RANDOM FOREST)
2
+
3
+ (The code for these three is given in Practical 7: 4. PCA, 5. SVM and 6. Random Forest.)
4
+
5
+
6
+ 1. PCA (PRINCIPAL COMPONENT ANALYSIS)
7
+
8
+ STEPS:
9
+ 1. Standardize the data (mean 0, standard deviation 1).
10
+ 2. Calculate the covariance matrix of the features.
11
+ 3. Find the eigenvectors (directions) and eigenvalues (importance) of the matrix.
12
+ 4. Sort them and keep the top components (usually 80% to 95% of the variance), then project the data on them.
13
+
14
+ EXPLANATION:
15
+ - PCA is an unsupervised dimensionality reduction method: it reduces many features into a few new ones called principal components.
16
+ - The principal components are combinations of the original features, and PC1 holds the maximum variance.
17
+ - Each next component is perpendicular (uncorrelated) to the earlier ones and holds the next highest variance.
18
+ - Standardization is needed first, otherwise a feature with large numbers (like salary) would dominate.
19
+ - Dropping the last components loses little information but makes the data simpler.
20
+
21
+
22
+ 2. SVM (SUPPORT VECTOR MACHINE)
23
+
24
+ STEPS:
25
+ 1. Plot the data points of the two classes.
26
+ 2. Find the hyperplane (decision boundary) that separates the classes.
27
+ 3. Choose the hyperplane with the maximum margin, with the support vectors (nearest points) on its edges.
28
+ 4. If the data is not linearly separable, apply a kernel (linear, polynomial or RBF) to separate it in a higher dimension.
29
+
30
+ EXPLANATION:
31
+ - SVM is a supervised classifier that finds the widest "street" between the two classes.
32
+ - Only the support vectors (the points closest to the boundary) decide the position of the boundary.
33
+ - Parameter C controls the balance: high C allows fewer mistakes (risk of overfitting), low C gives a wider margin.
34
+ - The kernel trick lets SVM draw curved boundaries without actually moving the data to a higher dimension.
35
+ - The RBF kernel is the common choice for complex, non-linear data.
36
+
37
+
38
+ 3. RANDOM FOREST
39
+
40
+ STEPS:
41
+ 1. Bootstrapping: take a random sample (with replacement) of the rows for each tree.
42
+ 2. Feature randomness: at each split, let the tree choose from a random subset of the features only.
43
+ 3. Train every decision tree fully on its own sample.
44
+ 4. Aggregation: every tree votes and the majority class is the final answer (average for regression).
45
+
46
+ EXPLANATION:
47
+ - Random forest is an ensemble method that combines many decision trees ("wisdom of the crowd").
48
+ - Different rows and different features make every tree different, so their errors cancel out.
49
+ - A single deep tree overfits easily, but the forest generalizes better.
50
+ - For classification the majority vote is used, for regression the average of the tree outputs.
51
+ - It also gives feature importance, which shows the most useful features.
@@ -0,0 +1,16 @@
1
+ PRACTICAL 14: PRINCIPAL COMPONENT ANALYSIS (PCA)
2
+
3
+ (The PCA code with the explained-variance plot is given in Practical 7: 4. PCA.)
4
+
5
+ STEPS:
6
+ 1. Standardize the data: make every feature have mean 0 and standard deviation 1.
7
+ 2. Calculate the covariance matrix to see how the features vary together.
8
+ 3. Find the principal components: the eigenvectors (directions) and eigenvalues (importance) of the covariance matrix.
9
+ 4. Pick the top k components that keep most of the variance (for example 95%) and transform the data by projecting it on them.
10
+
11
+ EXPLANATION:
12
+ - PCA is a dimensionality reduction technique that reduces the number of features while keeping the most important information.
13
+ - It converts correlated features into a smaller set of uncorrelated features called principal components.
14
+ - PC1 is the direction of maximum variance and PC2 is the next best direction, perpendicular to PC1.
15
+ - Example: with the two features Radius and Area, most of the spread lies along PC1, so projecting on PC1 turns 2D data into 1D with little loss.
16
+ - The explained variance ratio tells how much information each component keeps.
scikit_lab/viewer.py ADDED
@@ -0,0 +1,106 @@
1
+ """Numbered DAML (scikit-learn) practical viewer. Prints everything in red.
2
+
3
+ * Terminal / cmd / PowerShell : ANSI red escape codes.
4
+ * IDLE : IDLE ignores ANSI codes, but it shows
5
+ sys.stderr in red, so text goes there.
6
+ """
7
+ import os
8
+ import sys
9
+ from pathlib import Path
10
+
11
+ PRACTICALS_DIR = Path(__file__).parent / "practicals"
12
+
13
+ RED = "\033[31m"
14
+ RESET = "\033[0m"
15
+
16
+ # (menu number, file name, menu title)
17
+ REGISTRY = [
18
+ ("1", "01_data_cleaning_missing_values.txt", "Data cleaning - missing values"),
19
+ ("2", "02_data_cleaning_noisy_data.txt", "Data cleaning - noisy data (outliers)"),
20
+ ("3", "03_data_cleaning_on_dataset.txt", "Data cleaning on a dataset (loan credit)"),
21
+ ("4", "04_preprocessing_contingency.txt", "Preprocessing - correlation and contingency table"),
22
+ ("5", "05_eda.txt", "Exploratory data analysis (EDA)"),
23
+ ("6", "06_decision_tree.txt", "Decision tree"),
24
+ ("7", "07_compare_classification_models.txt", "Comparing classification models"),
25
+ ("8", "08_classification_improvement.txt", "Classification improvement (bagging, boosting)"),
26
+ ("9", "09_clustering.txt", "Clustering (K-Means, hierarchical)"),
27
+ ("10", "10_association_apriori_groceries.txt", "Association - Apriori (groceries)"),
28
+ ("11", "11_association_apriori_own_dataset.txt", "Association - Apriori (own dataset)"),
29
+ ("12", "12_fp_tree_association.txt", "FP-Tree association"),
30
+ ("13", "13_classifiers_explanation.txt", "Classifiers explanation (PCA, SVM, Random Forest)"),
31
+ ("14", "14_pca.txt", "Principal Component Analysis (PCA)"),
32
+ ]
33
+
34
+ _IN_IDLE = "idlelib.run" in sys.modules or "idlelib.pyshell" in sys.modules
35
+ _USE_ANSI = (not _IN_IDLE) and sys.stdout.isatty() and "NO_COLOR" not in os.environ
36
+
37
+ if _USE_ANSI and os.name == "nt":
38
+ os.system("") # switches on ANSI escape handling in Windows consoles
39
+
40
+
41
+ def _red(text="", end="\n"):
42
+ """Write text in red (see module docstring)."""
43
+ if _IN_IDLE:
44
+ sys.stderr.write(text + end)
45
+ sys.stderr.flush()
46
+ elif _USE_ANSI:
47
+ sys.stdout.write(RED + text + RESET + end)
48
+ sys.stdout.flush()
49
+ else:
50
+ sys.stdout.write(text + end)
51
+ sys.stdout.flush()
52
+
53
+
54
+ def _ask(prompt):
55
+ _red(prompt, end="")
56
+ return input().strip()
57
+
58
+
59
+ def _read(filename):
60
+ return (PRACTICALS_DIR / filename).read_text(encoding="utf-8")
61
+
62
+
63
+ def _lookup(choice):
64
+ """Return the file name for a menu number, or None."""
65
+ choice = choice.strip()
66
+ for number, filename, _title in REGISTRY:
67
+ if choice == number:
68
+ return filename
69
+ return None
70
+
71
+
72
+ def show_menu():
73
+ _red("SCIKIT-LEARN LAB: DAML PRACTICALS")
74
+ for number, _filename, title in REGISTRY:
75
+ _red(" {:<4}{}".format(number, title))
76
+ _red(" m Show this menu")
77
+ _red(" 0 Exit")
78
+ _red()
79
+
80
+
81
+ def main():
82
+ while True:
83
+ try:
84
+ choice = _ask("Enter number (0 to exit): ")
85
+ except (EOFError, KeyboardInterrupt):
86
+ _red()
87
+ break
88
+ if choice == "0":
89
+ break
90
+ if choice.lower() == "m":
91
+ show_menu()
92
+ continue
93
+ name = _lookup(choice)
94
+ if name is None:
95
+ _red("Invalid number.")
96
+ continue
97
+ _red(_read(name))
98
+ try:
99
+ _ask("\nPress Enter to continue...")
100
+ except (EOFError, KeyboardInterrupt):
101
+ _red()
102
+ break
103
+
104
+
105
+ if __name__ == "__main__":
106
+ main()
@@ -0,0 +1,46 @@
1
+ Metadata-Version: 2.4
2
+ Name: scikit-lab-kit
3
+ Version: 0.1.0
4
+ Summary: Numbered DAML (scikit-learn) practicals: steps, code and short explanation
5
+ Requires-Python: >=3.9
6
+ Description-Content-Type: text/markdown
7
+
8
+ # scikit-lab-kit
9
+
10
+ Numbered viewer for the DAML practicals (steps, code and a short explanation), shown in **red**.
11
+ Type a number to show a practical, `m` to show the menu, `0` to exit.
12
+
13
+ ## Install
14
+ ```
15
+ python -m pip install scikit-lab-kit
16
+ ```
17
+
18
+ ## Run
19
+ ```
20
+ python -m scikit_lab
21
+ ```
22
+ or in IDLE / Python:
23
+ ```python
24
+ import scikit_lab
25
+ scikit_lab.main()
26
+ ```
27
+
28
+ ## Menu
29
+ | No. | Practical |
30
+ |-----|-----------|
31
+ | 1 | Data cleaning - missing values |
32
+ | 2 | Data cleaning - noisy data (outliers) |
33
+ | 3 | Data cleaning on a dataset (loan credit) |
34
+ | 4 | Preprocessing - correlation and contingency table |
35
+ | 5 | Exploratory data analysis (EDA) |
36
+ | 6 | Decision tree |
37
+ | 7 | Comparing classification models |
38
+ | 8 | Classification improvement (bagging, boosting) |
39
+ | 9 | Clustering (K-Means, hierarchical) |
40
+ | 10 | Association - Apriori (groceries) |
41
+ | 11 | Association - Apriori (own dataset) |
42
+ | 12 | FP-Tree association |
43
+ | 13 | Classifiers explanation (PCA, SVM, Random Forest) |
44
+ | 14 | Principal Component Analysis (PCA) |
45
+
46
+ This package only displays text; it does not run the practical code.
@@ -0,0 +1,22 @@
1
+ scikit_lab/__init__.py,sha256=IVBTwNz12dnoR-9fQFnh2qEdBzCRG1eCjxTzTq1WkeA,45
2
+ scikit_lab/__main__.py,sha256=WtCt1iyekjUh0YPYLne9Fd6e3DsB83PZQYetYMvCNNY,64
3
+ scikit_lab/viewer.py,sha256=qsNEJxtUg5IwAaRox3vQ-9SVfgy0tkOgB1yFBjsHNA0,3459
4
+ scikit_lab/practicals/01_data_cleaning_missing_values.txt,sha256=k6Tc041AD7wv-aM4bYYepibD1u2pky3A0lQjCtvtsrw,3112
5
+ scikit_lab/practicals/02_data_cleaning_noisy_data.txt,sha256=Ol_Qk5mjAks6tI7DwWIs8qW35WuyCsHAdjN9_NL0MJM,2786
6
+ scikit_lab/practicals/03_data_cleaning_on_dataset.txt,sha256=ASWs2lqKRvtkTtPQkPzlaZXZbJlfU7Nlrc9SFEyl-ys,2489
7
+ scikit_lab/practicals/04_preprocessing_contingency.txt,sha256=76I9QXBVpOTZr3Fpf8cJRVEmtHKd04nXz7IpqqHc4ZU,1970
8
+ scikit_lab/practicals/05_eda.txt,sha256=uLOUJo6fAc4AZVv88A7CW2tWrFhUbk3-ZDv8WFbhmNY,8933
9
+ scikit_lab/practicals/06_decision_tree.txt,sha256=TAvl84rpLoF7LvxEw3VKsgAmOu1hLm0m3LmJauUxshk,3243
10
+ scikit_lab/practicals/07_compare_classification_models.txt,sha256=xqI7nNgZyM5t5hSre5GYMwl8uF-E1cLQpzUYlgk88nw,14540
11
+ scikit_lab/practicals/08_classification_improvement.txt,sha256=LHPscbQl7m64KKaPbHCZZLfXNls0tg-KhOGLuN_LZho,7253
12
+ scikit_lab/practicals/09_clustering.txt,sha256=UP2Hab0tPmN2iKneAFXvGcuztTybNHP15z0qt2niItE,4060
13
+ scikit_lab/practicals/10_association_apriori_groceries.txt,sha256=9F9TrGDl1KWLvlYfDHmRdOlNMy6RjfuNvIbGSvmX4VA,3796
14
+ scikit_lab/practicals/11_association_apriori_own_dataset.txt,sha256=cKRqxwRU9heVJAYwBEqInF0N5-oCwrG2QYQeo9_-zvI,5592
15
+ scikit_lab/practicals/12_fp_tree_association.txt,sha256=aZ1PK7ni1SPgq8aIBHKlr4vVIcxfHAD_g3H6BfqlCow,1616
16
+ scikit_lab/practicals/13_classifiers_explanation.txt,sha256=O1r9lZFXy9e2QxmUhZot2W6zM1l6B_dN2ML3w0Ir3EQ,2752
17
+ scikit_lab/practicals/14_pca.txt,sha256=2YXSof0_RLxJLcZDTEF_RSxSDG1TQH3okhafU2rzpvI,1117
18
+ scikit_lab_kit-0.1.0.dist-info/METADATA,sha256=1wSpaCmyuoETi8KY4GW9Aok9XhMq4y1-655a2ajzmmw,1333
19
+ scikit_lab_kit-0.1.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
20
+ scikit_lab_kit-0.1.0.dist-info/entry_points.txt,sha256=Onb6irRSKSLmYmt3pg25Boci5You7plxD-KHV7yt8ac,54
21
+ scikit_lab_kit-0.1.0.dist-info/top_level.txt,sha256=rqf279cQXctZGv0ZqAsLxerY-ogJVUTE_fsdSTeccHE,11
22
+ scikit_lab_kit-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (84.2.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ scikit-lab = scikit_lab.viewer:main
@@ -0,0 +1 @@
1
+ scikit_lab