data/comment_version_relation.py

121 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 分析post中text block和code block数据的相关性
# 一元线性回归
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
versioncnt = pd.read_csv('E:/学习相关资料/SOTorrent数据分析/posts_versioncount.csv/posts_versioncount.csv') # 读取version数据
commentblkcnt = pd.read_csv('E:/学习相关资料/SOTorrent数据分析/posts_metadata.csv/posts_metadata.csv') # 读取comment数据
aa = versioncnt.iloc[10000:20000, 2:3] # 39905357
print(aa.shape)
bb = commentblkcnt.iloc[10000:20000, 3:4]
print(bb.shape)
aa = np.array(aa)
bb = np.array(bb)
# cc = np.array([aa, bb])
aa_mean = np.mean(aa, axis=0) # axis=0,表示按列求均值
aa_std = np.std(aa, axis=0)
aa_zscore = (aa - aa_mean) / aa_std # 标准化
bb_mean = np.mean(bb, axis=0) # axis=0,表示按列求均值
bb_std = np.std(bb, axis=0)
bb_zscore = (bb - bb_mean) / bb_std # 标准化
cc_zscore_corr = np.corrcoef(aa_zscore.reshape(1, 10000), bb_zscore.reshape(1, 10000)) # 相关系数矩阵
print(cc_zscore_corr[0, 1])
# d = pd.read_csv('Salary_Data. csv')
# d.head()
# # #看一下数据的分布情況
# # %matplotlib inline
# # d.plot.scatter(x='x1', y='y')
# #处理数据将其变成特征矩阵X和结果矩阵Y
# df=pd.Dataframe(data=d, columns=['yearsexperlence', 'Salary'])
# df.insert(0, 'x0', [1]*df.shape[0])
# df =df. rename(columns={'Yearsexperience': 'x1', 'Salary': 'y'})
# x=df[['x0','x1']].values
# y=df[['y']].values
# # 画线性方程和数据的散点图
# def plotline(x, y, theta):
# px = np.linspace(x[0][1],x[-1][1],10000)
# py = theta[0]+theta[1]*px #方程式
# plt.figure(num=1)
# #获取图片并命名
# plt.plot(px, py, color='blue', linewidth=1.0, label='blue')
# plt.plot(x[: ,1],y, 'bo')
# plt.show()
# 梯度下降
def Optimization(x, y, theta, learning_rate):
for i in range(iter):
theta = Updata(x, y, theta, learning_rate)
return theta
def Updata(x, y, theta, learning_rate):
m = len(x)
sum = 0.0
sum1 = 0.0
alpha = learning_rate
h = 0
for i in range(m):
h = theta[0] + theta[1] * x[i]
sum += (h - y[i])
sum1 += (h - y[i]) * x[i]
theta[0] -= alpha * sum / m
theta[1] -= alpha * sum1 / m
return theta
# 数据初始化
learning_rate = 0.001
theta = [0, 0]
iter = 1000
aa_zscore = np.array(aa_zscore)
bb_zscore = np.array(bb_zscore)
# %pylab inline
plt.scatter(aa_zscore, bb_zscore, color='black')
plt.xlabel('version')
plt.ylabel('comment')
plt.show()
plt.savefig("Version与Comment关系散点图.jpg")
regr = linear_model.LinearRegression()
regr.fit(aa_zscore, bb_zscore)
regr.fit(aa_zscore, bb_zscore)
print('Intercept:{}'.format(regr.intercept_))
print('Coefficient:{}'.format(regr.coef_))
plt.scatter(aa_zscore, bb_zscore, color='black')
plt.plot(aa_zscore, regr.predict(aa_zscore), linewidth=3, color='blue')
plt.xlabel('version')
plt.ylabel('comment')
plt.title('VersionCount与CommentCount关系')
plt.show()
plt.savefig("Version与Comment线性关系图.jpg")
theta = Optimization(aa_zscore, bb_zscore, theta, learning_rate)
# 可视化
plt.figure(figsize=(35, 35))
plt.scatter(aa_zscore, bb_zscore, marker='o')
plt.plot(aa_zscore, bb_zscore)
plt.xticks(fontsize=40)
plt.yticks(fontsize=40)
plt.xlabel('Comment Count', fontsize=40)
plt.ylabel('Version Count', fontsize=40)
plt.title('Version与Comment线性关系', fontsize=40)
plt.savefig("Version与Comment线性关系.jpg")
plt.show()