Python程序设计期末课程设计——数据可视化相关

#导入所需的库
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
import seaborn as sns

#配置绘图参数,包括使用中文字体和解决负数问题
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

#抽取10000名用户的数据,每次抽取500条数据,并在每次抽取时跳过一些行
df0 = pd.DataFrame()
a = 1
for i in range(20):
    b = random.randint(a,a+99499)
    df1 = pd.read_csv('User.csv',skiprows = b,nrows = 500)
    df1.columns = ['uid','name','avatar','level','sex','sign','vip_type','vip_status','vip_role','archive','fans','friend','like_num','is_senior']
    df0 = pd.concat([df0,df1],ignore_index = True)
    a+=100000

#提取出四个重要的列,并计算它们之间的相关系数
W = df0['uid']
X = df0['archive']
Y = df0['fans']
Z = df0['like_num']
result1 = X.corr(Y)
result2 = X.corr(Z)
result3 = W.corr(Y)
result4 = W.corr(Z)
print(result1, result2, result3, result4)  

#将整个数据集分成6份,并根据它们的不同列绘制散点图
df1 = df0.loc[:, ['uid', 'fans']]
df2 = df0.loc[:, ['uid', 'like_num']]
df3 = df0.loc[:, ['archive', 'fans']]
df4 = df0.loc[:, ['archive', 'like_num']]
df5 = df0.loc[:, ['fans', 'like_num']]
df6 = df0.loc[:, ['fans', 'like_num', 'archive']]

#绘制1和2号散点图,基于相同的x和y轴绘制多个散点图
sns.pairplot(df1)
sns.pairplot(df2)

#绘制3号散点图,使用线性回归模型绘制散点图,并设置边界
sns.set(font_scale = 1, style = "white")
lm3 = sns.lmplot(x = 'archive', y = 'fans', data = df3, fit_reg = False)
lm3.set(title = 'Correlation analysis between archive and fans')
lm3.axes[0,0].set_xlim(-5,)
lm3.axes[0,0].set_ylim(-5,)

#绘制4号散点图,与3号类似,使用线性回归模型绘制散点图,并设置边界
sns.set(font_scale = 1, style = "white")
lm4 = sns.lmplot(x = 'archive', y = 'like_num', data = df4, fit_reg = False)
lm4.set(title = 'Correlation analysis between archive and like_num')
lm4.axes[0,0].set_xlim(-5,)
lm4.axes[0,0].set_ylim(-5,)

#绘制5号散点图
sns.set(style = "ticks")  #通过调用 sns.set() 函数,对配色方案进行调整
pairplot = sns.pairplot(df5, diag_kind = "kde", plot_kws = dict(s = 4, edgecolor = "gray", linewidth = 0.5), diag_kws = dict(shade = True), corner = True)  #通过设置 plot_kws 参数,对散点图的线宽和样式进行调整
#通过设置 diag_kind 和 corner 参数,对子图类型和布局进行调整
sns.set(font_scale = 1.2)
fig5 = plt.gcf()
fig5.set_size_inches(10, 10)  #对画布大小进行调整
plt.subplots_adjust(top = 0.95)
#通过调用 seaborn 库自带的函数进行调整,实现了坐标轴标签、刻度、网格等属性的调整,提高了图像的可读性和解释性。
plt.suptitle("Correlation analysis between fans and like_num", fontsize = 18)
sns.despine()
pairplot.savefig("fig5.png", dpi=300)  #通过设置 dpi 参数,对图像每英寸点数进行调整

#绘制6号散点图
df6.plot.scatter('like_num', 'fans', c = 'archive', colormap='jet')
plt.title('Correlation analysis according to archive')

#自定义处理会员相关数据的函数
def vip(df):
    num1=len(df[df['vip_type']==0])
    num2=len(df[(df['vip_type']!=0) & (df['vip_status']==0)])
    num3=len(df[(df['vip_type']!=0) & (df['vip_status']==1)])
    data_vip = [['从未购入大会员',num1/10000],['曾经是大会员',num2/10000],['目前是大会员',num3/10000]]
    df_vip = pd.DataFrame(data_vip,columns=['状态','占比'])
    plt.pie(df_vip['占比'],labels=df_vip['状态'],autopct='%.1f%%',textprops={'fontsize':'x-large'},labeldistance=1.2,startangle=90,shadow=True)
    plt.show()
    
    num4=len(df[df['vip_role']==0])
    num5=len(df[df['vip_role']==1])
    num6=len(df[df['vip_role']==3])
    num7=len((df[df['vip_role']==7]) | (df[df['vip_role']==15]))
    data_viprole = [['非大会员',num4/10000],['月度大会员',num5/10000],['年度大会员',num6/10000],['十年/百年大会员',num7/10000]]
    df_viprole = pd.DataFrame(data_viprole,columns=['会员类型','占比'])
    plt.pie(df_viprole['占比'],labels=df_viprole['会员类型'],autopct='%.1f%%',textprops={'fontsize':'x-large'},labeldistance=1.2,startangle=90,shadow=True)
    plt.show()
    payment=25*(num5/10000)+233*(num6/10000)
    return(payment)   

#抽取10000名老用户的数据
df_oldusers = pd.DataFrame()
a = 1
for i in range(20):
    b = random.randint(a,a+49499)
    df1 = pd.read_csv('User.csv',skiprows=b,nrows=500)
    df1.columns = ['uid','name','avatar','level','sex','sign','vip_type','vip_status','vip_role','archive','fans','friend','like_num','is_senior']
    df_oldusers = pd.concat([df_oldusers,df1],ignore_index=True)
    a+=50000

#抽取10000名新用户的数据
df_newusers = pd.DataFrame()
a = 1000001
for i in range(20):
    b = random.randint(a,a+99499)
    df2 = pd.read_csv('User.csv',skiprows=b,nrows=500)
    df2.columns = ['uid','name','avatar','level','sex','sign','vip_type','vip_status','vip_role','archive','fans','friend','like_num','is_senior']
    df_newusers = pd.concat([df_newusers,df2],ignore_index=True)
    a+=100000 

print(vip(df_oldusers))
print(vip(df_newusers))

这段代码的主要功能是对一个包含用户数据的文件进行处理和可视化分析。下面是对代码的逐行解读:

1.导入所需的库:导入了pandas、numpy、matplotlib.pyplot、random和seaborn这些库,以便于后续的数据处理和可视化操作。
2.配置绘图参数:通过设置matplotlib的rcParams属性,将字体设置为中文字体,并解决坐标轴上的负数显示问题。
3.抽取用户数据:创建一个空的数据框df0,并通过循环抽取10000个用户的数据,每次抽取500条数据,并在每次抽取时跳过一些行。抽取后的数据读取为DataFrame对象df1,然后将df1与之前的数据合并,得到完整的用户数据框df0。
4.提取重要列并计算相关系数:从df0中提取出四个重要的列,即'uid'、'archive'、'fans'和'like_num',并计算它们之间的相关系数。
5.将数据集分成不同部分并绘制散点图:根据不同的列,将整个数据集df0分成6份,并使用seaborn的pairplot函数绘制不同列之间的散点图,其中第1和第2个散点图使用相同的x和y轴。
6.绘制散点图3和4:使用线性回归模型绘制散点图,并通过设置边界限制绘图范围。
7.绘制散点图5:使用seaborn的pairplot函数绘制散点图,通过设置的参数对散点图的样式进行调整。

总的来说,这段代码的目的是通过绘制散点图来探索并呈现用户数据之间的相关性和分布情况,以便进一步的数据分析和理解。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cytingle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值