%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import pandas as pd
import numpy as np
import networkx as nx
import seaborn as sns
import matplotlib.pyplot as plt
from Helper import *
from ggplot import *
from plotnine import *
import scipy.stats as stats
import researchpy as rp
import statsmodels.api as sm
from statsmodels.formula.api import ols
import pixiedust_node
# import pixiedust
# from pixiedust.display import *
import time
# seaborn-pastel, fivethirtyeight
plt.style.use('fivethirtyeight')
surveyData = pd.read_csv('./resources/responsedata.csv')
colum2FixData = ['4.1.A Tìm cách đến đáp họ', '4.1.B Sẽ nhận trong hoàn cảnh khó khăn?']
for col in colum2FixData:
valueCounts = surveyData[col].value_counts()
valueList = valueCounts.tolist()
popularLabelFor = valueCounts.index.tolist()[valueList.index(max(valueList))]
surveyData[col].fillna(popularLabelFor, inplace = True)
surveyData['6.1 Số lượng vé sẵn lòng mua'] = surveyData['6.1.A Số lượng vé sẵn lòng mua']\
.fillna(surveyData['6.1.B Số lượng vé sẵn lòng mua'])
surveyData = surveyData.drop(columns=[
'6.1.A Số lượng vé sẵn lòng mua',
'6.1.B Số lượng vé sẵn lòng mua',
'13. Thông tin đáp viên'
])
surveyDataHeaders = surveyData.columns.tolist()
surveyDataNumberHeaders = surveyData.select_dtypes(include=['int64', 'float64']) \
.copy().columns.tolist()
surveyDatalb = surveyData.select_dtypes(include=['object']) \
.copy().drop(columns=['Timestamp'])
surveyDatalbHeaders = surveyDatalb.columns.tolist()
surveyDataAll = surveyData.copy()
for col in surveyDatalbHeaders:
surveyDatalb[col] = surveyDatalb[col].astype('category').cat.codes
surveyDataAll[col] = surveyDataAll[col].astype('category').cat.codes
surveyDatalb.info()
display(surveyDatalb.head(2))
display(surveyDatalb.describe())
surveyData.info()
display(surveyData.head(2))
display(surveyData.describe())
DisplayMDDataSummery(surveyData, surveyDatalbHeaders, surveyDataNumberHeaders)
drawAllColumTypeObject(plt, surveyData)
def drawSummaryRatioFor(data, quest, labels=None, compare=None):
drawSNSPlot(data, quest, None, labels)
drawSNSPlot(data, quest, compare, labels)
def drawSummaryRatioWith(data, quest, labels=None):
drawPieChart(plt, data, quest, None, labels)
for v in surveyDatalbHeaders:
print('So sánh với:', v)
drawSummaryRatioFor(data, quest, labels=labels, compare=v)
quest4Var = '4.1.A Tìm cách đến đáp họ'
ans4Label = {"1.0": "Không muốn", "2.0": "Bình thường", "3.0": "Muốn", "4.0": "Rất muốn"}
drawSummaryRatioWith(surveyData, quest4Var, ans4Label)
drawOneColumTypeObject(plt, surveyData, surveyDatalbHeaders, '4.1.B Sẽ nhận trong hoàn cảnh khó khăn?')
quest5Var = '5. Cho ai đó trước khi nhờ vả'
ans5Label = {"1": "Không nên", "2": "Bình thường", "3": "Nên", "4": "Phải làm"}
drawSummaryRatioWith(surveyData, quest5Var, ans5Label)
kindCharts = ['swarm', 'box', 'boxen', 'violin', 'bar', 'point']
def drawCatPlotFor(data, quest, x, rota=0):
rt = rota
hr = 'center'
if rota > 0:
hr = 'right'
for k in kindCharts:
ch = sns.catplot(x=x, y=quest, kind=k, data=data)
ch.set_xticklabels(rotation=rt, horizontalalignment=hr)
plt.show();
quest6_1Var = '6.1 Số lượng vé sẵn lòng mua'
print('Chúng ta sẽ so sánh với các câu hỏi sau:')
display(surveyDatalbHeaders)
for v in surveyDatalbHeaders:
drawCatPlotFor(surveyData, quest6_1Var, v, 15)
print('-'*60)
quest8Var = '8. Mức độ mua sản phẩm mì nổi tiếng khi vừa ra mắt'
ans8Label = {"1": "Không mua", "2": "Cân nhắc", "3": "Mua ít", "4": "Mua nhiều"}
drawSummaryRatioWith(surveyData, quest8Var, ans8Label)
quest9Var = '9. Mức độ mua sản phẩm mì nổi tiếng khi vừa ra mắt + được mời dùng thử'
ans9Label = {"1": "Không mua", "2": "Cân nhắc", "3": "Mua ít", "4": "Mua nhiều"}
drawSummaryRatioWith(surveyData, quest9Var, ans9Label)
quest10Var = '10. Mời các bạn một chầu ăn trước ngày ứng cử vào vị trí trưởng clb'
ans10Label = {"1": "Chưa nghĩ đến", "2": "Cân nhắc", "3": "Mời", "4": "Chắc chắn rồi"}
drawSummaryRatioWith(surveyData, quest10Var, ans10Label)
sns.catplot(x="1. Giới tính", y="6.1 Số lượng vé sẵn lòng mua",
hue="4. Đã từng nhận lời ngỏ ý giúp đỡ hoặc tặng quà?", col="6. Nhận ly sinh tố?",
data=surveyData, kind="box",
height=10, aspect=.8);
corr = surveyDataAll.corr()
corr
# Transform it in a links data frame (3 columns only):
links = corr.stack().reset_index()
links.columns = ['var1', 'var2','value']
links
# Keep only correlation over a threshold and remove self correlation (cor(A,A)=1)
links_filtered=links.loc[ (links['value'] > 0.2) & (links['var1'] != links['var2']) ]
links_filtered
# Build your graph
G=nx.from_pandas_edgelist(links_filtered, 'var1', 'var2')
# Plot the network:
plt.figure(4, figsize=(30,30))
nx.draw(G, with_labels=True, node_color='orange', node_size=800, edge_color='black', linewidths=40, font_size=20)
flights = links.pivot("var1", "var2", "value")
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(16, 9))
sns.heatmap(flights, annot=True, fmt='.2f', linewidths=.5, ax=ax)
%%node
var tesaaa = 'hello'
display(surveyData)