wadiz_df_original = pd.read_csv('wadiz_df_0329_1.csv', index_col=0)
user_comment = pd.read_csv('user_data_all_0329.csv', index_col=0)
provider_comment = pd.read_csv('provider_data_all_0329.csv', index_col=0)
wadiz_df = pd.read_csv('wadiz_provider_analysis_0329.csv', index_col=0)
provider_comment_grammar = pd.read_csv('comment_analysis.csv', index_col=0)

# 각 DataFrame별 샘플 수 비교
print('Original DataFrame :', len(wadiz_df_original))
print('User comment :', len(user_comment['project_id'].value_counts()))
print('Provider comment :', len(provider_comment['project_id'].value_counts()))
print('Provider comment grammar check:', len(provider_comment_grammar['project_id'].value_counts()))
print('Revised DataFrame :', len(wadiz_df))

"""
Explanation: Distribution Test
- 각 feature들에 대해 성공/실패 샘플에 대한 분포 검정(평균, 분포)
가정

각 카테고리별 분포 차이는 무의미 (샘플수가 너무 작음)
지역별 차이는 무의미 (서울, 경기권에 몰려있음)
target(목표펀딩금액)이 결과에 가장 큰 영향을 미칠 것
월별 분포 차이

[grammar_level 가정]

grammar_level은 개설자의 수준을 대변
맞춤법과 신뢰도는 상관관계 (http://www.copydesk.org/forms/nrj-article-recall.pdf)
grammar_level이 결과에 영향
End of explanation
"""


# grammar null값 제거
wadiz_df = wadiz_df[wadiz_df['provider_grammar_level'].notnull()]
# duration 처리
wadiz_df['date_duration'] = wadiz_df['date_duration'].apply(lambda x: int(x[:-24]))

"""
Explanation: 최종 분석 샘플 : 599개 (0값 제거, grammar_level 측정 가능 샘플만 포함)
End of explanation
"""


figure = plt.figure(figsize=(10,8));
sns.kdeplot(wadiz_df['funding_rate']);
plt.xlim(-3, 10);
plt.xticks(fontsize=15);
plt.yticks(fontsize=15);
plt.legend(fontsize = 15);
plt.xlabel('funding_rate', fontsize=15);
plt.ylabel('distribution', fontsize = 15);

# 전체 분산과 각 category 분산과의 분포 차이 검정
# K-S : Kolmogorov Smirnov test
for i in wadiz_df['category'].unique()[:-1]:
    all_data = wadiz_df['funding_rate']
    category_data = wadiz_df.loc[wadiz_df['category'] == i]['funding_rate']
    print('[all_sample vs {category_i}]'.format(category_i = i)), 
    print('  K-S statistic :', round(sp.stats.ks_2samp(all_data, category_data)[0], 4))
    print('  p-value :', round(sp.stats.ks_2samp(all_data, category_data)[1], 4))

"""
Explanation: Kolmogorov-Smirnov test : 두 분포의 차이 검정
2 sample T-test : 두 샘플의 평균 차이 검정
Shapiro test : 단일 분포의 정규성 검정
Mann-Whitney U test : 비모수 검정법, 두 샘플의 평균 차이 검정

1. Category Distribution
End of explanation
"""


print(wadiz_df['area'].value_counts())

"""
Explanation: 모든 test-statistics의 p-value들이 0.05이상이므로 귀무가설(null hypothesis : 분포가 같다) 기각(reject) 불가

2. Area Distribution
End of explanation
"""


# 가장 많은 부분을 차지하는 서울/경기만 분석
plt.figure(figsize=(10,8));
sns.kdeplot(wadiz_df.loc[wadiz_df['area'] == 'seoul']['funding_rate'], label = 'seoul');
sns.kdeplot(wadiz_df.loc[wadiz_df['area'] == 'kyungki']['funding_rate'], label = 'kyungki', linestyle = '--');
plt.xlim(-2, 6);
plt.legend(fontsize = 15);
plt.xlabel('funding_rate', fontsize=15);
plt.ylabel('distribution', fontsize = 15);

# Ks_2sampResult : Kolmogorov-Smirnov test
# Ttest_indResult : 2 sample T-test

seoul_dist = wadiz_df.loc[wadiz_df['area'] == 'seoul']['funding_rate']
kyungki_dist = wadiz_df.loc[wadiz_df['area'] == 'kyungki']['funding_rate']
print('seoul vs kyungki :'), 
print(sp.stats.ks_2samp(seoul_dist, kyungki_dist))
print(sp.stats.ttest_ind(seoul_dist, kyungki_dist))

"""
Explanation: 지역별 샘플개수가 작아서 분포의 차이 검정 불가
End of explanation
"""


figure = plt.figure(figsize=(10,8))
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 1]['date_duration'], label = 'success')
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 0]['date_duration'], label = 'fail', c='r', linestyle='--')
plt.xlim(-50, 100);
plt.xlabel('date_distribution', fontsize=15);
plt.ylabel('distribution', fontsize = 15);
plt.legend(fontsize = 15);

# Ks_2sampResult : Kolmogorov-Smirnov test
# Ttest_indResult : 2 sample T-test
success_duration = wadiz_df.loc[wadiz_df['success'] == 1]['date_duration']
fail_duration = wadiz_df.loc[wadiz_df['success'] == 0]['date_duration']
print('[success_duration vs fail_duration]'), 
print(sp.stats.ks_2samp(success_duration, fail_duration)),
print(sp.stats.ttest_ind(success_duration, fail_duration))

"""
Explanation: 지역간 평균 차이없음 (t-test p-value > 0.05), 분포 차이 없음 (K-S test p-value > 0.05)

3. Date_duration Distribution
End of explanation
"""


figure = plt.figure(figsize=(10,8))
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 1]['target'], label = 'success');
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 0]['target'], label = 'fail');
#plt.xlim(-3, 10)
plt.xticks(fontsize=15);
plt.yticks(fontsize=15);
plt.legend(fontsize = 15);
plt.xlabel('duration', fontsize=15);
plt.ylabel('distribution', fontsize = 15);

success_target = wadiz_df.loc[wadiz_df['success'] == 1]['target']
fail_target = wadiz_df.loc[wadiz_df['success'] == 0]['target']

#정규성 test (성공 샘플의 목표펀딩금액)
print('Shapiro test statistics :', sp.stats.shapiro(success_target)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(success_target)[1])

#정규성 test (실패 샘플의 목표펀딩금액)
print('Shapiro test statistics :', sp.stats.shapiro(fail_target)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(fail_target)[1])

"""
Explanation: 성공/실패 Project 간 duration 차이 없음 (평균, 분포)

4. Target(목표펀딩금액) Distribution
End of explanation
"""


# 분포, 평균 검정
# Ks_2sampResult : Kolmogorov-Smirnov test
# MannwhitneyuResult : Mann-Whiteney U test
print(sp.stats.ks_2samp(success_target, fail_target)),
print(sp.stats.mannwhitneyu(success_target, fail_target))

"""
Explanation: 두 샘플 모두 정규분포를 이루지않아 (p-value < 0.05, 귀무가설 : 정규분포를 이룬다) t-test보다 mann-whiteney u test로 평균 차이 검정
End of explanation
"""


print('성공 Project들의 target 평균 :', np.mean(success_target), 
      'Std :', np.std(success_target))
print('실패 Project들의 target 평균 :', np.mean(fail_target),
     'Std :', np.std(fail_target))

"""
Explanation: 검정 결과 두 분포는 동일한 분포(p-value >0.05)이고 평균차이는 존재함 (p-value < 0.05)

평균은 차이가 있음 (p-value <= 0.05) 분포는 같은 분포를 나타냄(p-vlaue >=0.05)
End of explanation
"""


print('<월별 프로젝트 수>')
print(wadiz_df['month'].value_counts())

plt.figure(figsize=(10,8))
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] ==1]['month'], label = 'success')
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] ==0]['month'], label = 'fail')
plt.xticks(range(1, 12), fontsize=15)
plt.yticks(fontsize=15)
plt.xlabel('month', fontsize=15)
plt.ylabel('distribution', fontsize = 15)
plt.legend(fontsize = 15)
print('<월별 성공/실패 분포>')

# Ks_2sampResult : Kolmogorov-Smirnov test
# Ttest_indResult : 2 sample T-test
success_month = wadiz_df.loc[wadiz_df['success'] ==1]['month']
fail_month = wadiz_df.loc[wadiz_df['success'] ==0]['month']
print('[success_month vs fail_month]'), 
print('')
print(sp.stats.ks_2samp(success_month, fail_month))
print(sp.stats.ttest_ind(success_month, fail_month))

"""
Explanation: 5. Month Distribution
End of explanation
"""


plt.figure(figsize=(10,8))
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 1]['provider_grammar_level'], label = 'success')
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 0]['provider_grammar_level'], label = 'fail')
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.xlabel('grammar_level', fontsize=15)
plt.ylabel('distribution', fontsize = 15)
plt.legend(fontsize = 15)

wadiz_df['log_grammar_level'] = wadiz_df['provider_grammar_level'].apply(lambda x: np.log(x))

# log scailing
plt.figure(figsize=(10,8))
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 1]['log_grammar_level'], label = 'success')
sns.kdeplot(wadiz_df.loc[wadiz_df['success'] == 0]['log_grammar_level'], label = 'fail')
plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.xlabel('grammar_level', fontsize=15)
plt.ylabel('distribution', fontsize = 15)
plt.legend(fontsize = 15)

success_grammar = wadiz_df.loc[wadiz_df['success'] == 1]['provider_grammar_level']
fail_grammar = wadiz_df.loc[wadiz_df['success'] == 0]['provider_grammar_level']

success_log_grammar = wadiz_df.loc[wadiz_df['success'] == 1]['log_grammar_level']
fail_log_grammar = wadiz_df.loc[wadiz_df['success'] == 0]['log_grammar_level']

#정규성 test (성공 샘플의 grammar)
print('Shapiro test statistics :', sp.stats.shapiro(success_grammar)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(success_grammar)[1])

#정규성 test (실패 샘플의 grammar)
print('Shapiro test statistics :', sp.stats.shapiro(fail_grammar)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(fail_grammar)[1])

# Ks_2sampResult : Kolmogorov-Smirnov test
# MannwhitneyuResult : Mann-Whiteney U test
print(sp.stats.ks_2samp(success_grammar, fail_grammar)),
print(sp.stats.mannwhitneyu(success_grammar, fail_grammar))

"""
Explanation: K-S test, t-test 결과 두 분포의 차이는 없음

6. 개설자 Grammar level Distribution
End of explanation
"""


#정규성 test (실패 샘플의 log_grammar)
print('Shapiro test statistics :', sp.stats.shapiro(success_log_grammar)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(success_log_grammar)[1])

#정규성 test (성공 샘플의 log_grammar)
print('Shapiro test statistics :', sp.stats.shapiro(fail_log_grammar)[0]),
print('Shapiro test p-value :', sp.stats.shapiro(fail_log_grammar)[1])

# Ks_2sampResult : Kolmogorov-Smirnov test
# MannwhitneyuResult : Mann-Whiteney U test
print(sp.stats.ks_2samp(success_log_grammar, fail_log_grammar)),
print(sp.stats.mannwhitneyu(success_log_grammar, fail_log_grammar))

"""
Explanation: grammar_level을 변형시키지않고  분석시 정규분포가 성립하지 않음.
Mann-whiteney u test 실시하면 평균차이가 있다는 결과가 나오고 성공/실패 샘플 두 분포는 다른 분포임
End of explanation
"""


