#!/usr/bin/env python # coding: utf-8 # In[1]: import numpy as np import pandas as pd # In[2]: data = pd.read_csv('responses.csv') # In[3]: data.head() # In[4]: data.shape # In[5]: data.columns # In[6]: data = pd.read_csv('responses.csv') data = data.drop(104) data = data.dropna(subset=['E-mail адрес', 'Пол', 'Дата рождения', 'GPA (Средний балл)', 'Есть ли у вас научные публикации / доклады?', 'Какой ваш уровень владения английским языком?', 'Как называется изучаемый на курсе предмет по-английски?', 'Сколько параметров имеет нормальное распределение?', 'Какой статистический критерий примените для проверки различия между двумя связанными выборками, в случае, если нельзя сделать предположение о виде распределения выборки?']) data.shape # In[7]: new_data = pd.DataFrame() # In[8]: new_data['email'] = [email.split('@')[1] for email in data['E-mail адрес']] new_data.head() # In[9]: new_data.insert(1, 'course_role', data["Роль на курсе"].values) new_data.insert(2, 'gender', data["Пол"].values) new_data.head() # In[10]: new_data.insert(3, 'birth_date', [date.split('/')[2] for date in data['Дата рождения']]) new_data.head() # In[11]: tmp_data = np.empty(data['GPA (Средний балл)'].values.shape, 'object') # [0..2.5, 2.5..5, 5..7.5, 7.5..10] tmp_data[data['GPA (Средний балл)'].values < 2.5] = '0' tmp_data[np.bitwise_and(data['GPA (Средний балл)'].values >= 2.5, data['GPA (Средний балл)'].values < 5.0)] = '1' tmp_data[np.bitwise_and(data['GPA (Средний балл)'].values >= 5.0, data['GPA (Средний балл)'].values < 7.5)] = '2' tmp_data[data['GPA (Средний балл)'].values >= 7.5] = '3' tmp_data # In[12]: new_data.insert(4, 'gpa', tmp_data) new_data.head() # In[13]: set(data['Есть ли у вас научные публикации / доклады?']) # In[14]: new_data.insert(5, 'papers', ['many' if val[0] == 'д' else 'some' if val[0] == 'е' else 'none' for val in data['Есть ли у вас научные публикации / доклады?']]) new_data.head() # In[15]: set(data['Какой ваш уровень владения английским языком?']) # In[16]: new_data.insert(6, 'english_level', data['Какой ваш уровень владения английским языком?'].values) new_data.head() # In[17]: set(data['Как называется изучаемый на курсе предмет по-английски?']) # In[18]: new_data.insert(7, 'course_name', data['Как называется изучаемый на курсе предмет по-английски?'].values) new_data.head() # In[19]: set(data['Сколько параметров имеет нормальное распределение?']) # In[20]: new_data.insert(8, 'normal_params', list(map(str, data['Сколько параметров имеет нормальное распределение?']))) new_data.head() # In[21]: set(data['Какой статистический критерий примените для проверки различия между двумя связанными выборками, в случае, если нельзя сделать предположение о виде распределения выборки?']) # In[22]: new_data.insert(9, 'stat_crit', data['Какой статистический критерий примените для проверки различия между двумя связанными выборками, в случае, если нельзя сделать предположение о виде распределения выборки?'].values) new_data.head() # In[23]: # ... # In[24]: new_data = pd.get_dummies(new_data) new_data.head() # In[25]: new_data.shape # In[26]: # conda install orange3 # pip install orange3-associate # https://orange3-associate.readthedocs.io/en/latest/ # conda create --name py27 python=2.7 anaconda (если стоит третий питон по умолчанию) # activate py27 # conda install orange # http://docs.orange.biolab.si/2/reference/rst/Orange.associate.html # deactivate (после использования) # In[27]: from orangecontrib.associate.fpgrowth import frequent_itemsets, association_rules # In[28]: itemsets = dict(frequent_itemsets(new_data.values, 0.5)) # In[29]: itemsets # In[30]: for i, item in enumerate(new_data.columns): print(i, item) # In[31]: sorted(list(association_rules(itemsets, 0.8)), key=lambda x: -x[3]) # In[32]: itemsets = dict(frequent_itemsets(new_data.values, 0.3)) itemsets # In[33]: for i, item in enumerate(new_data.columns): print(i, item) # In[34]: for rule in sorted(list(association_rules(itemsets, 0.9)), key=lambda x: -x[3]): print("{} --> {} with supp = {}, conf = {}".format([new_data.columns[ftr] for ftr in rule[0]], [new_data.columns[ftr] for ftr in rule[1]], rule[2], rule[3])) # In[35]: for rule in sorted(list(association_rules(itemsets, 0.9)), key=lambda x: -x[3]): if len(rule[0]) > 1: continue print("{} --> {} with supp = {}, conf = {}".format([new_data.columns[ftr] for ftr in rule[0]], [new_data.columns[ftr] for ftr in rule[1]], rule[2], rule[3])) # In[36]: for rule in sorted(list(association_rules(itemsets, 0.9)), key=lambda x: -x[3]): if len(rule[0]) != 2: continue print("{} --> {} with supp = {}, conf = {}".format([new_data.columns[ftr] for ftr in rule[0]], [new_data.columns[ftr] for ftr in rule[1]], rule[2], rule[3]))