【粉丝福利】个人博文数据可视化分析

本文分析20240826-20240921时间段内的CSDN个人博文数据,绘制条形图、饼图、箱线图。

数据处理

存储为pandas数据
import os
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#读取Excel文件
data = pd.read_excel('20240922单篇文章分析.xls')
data.info()

 

存储为numpy数据 
import matplotlib.pyplot as plt
np_data=data

#完整存储过程
current_dir = os.path.dirname(os.path.realpath('__file__'))
filename = os.path.join(current_dir, 'train.csv')

#读取列名
with open(filename,encoding='utf-8') as f:
     head_index=np.array(f.readline()[:-1].split(','))
#打印列名
print(head_index)
#下载数据
or_data=np.loadtxt('train.csv',delimiter=',',dtype=np.str,encoding='utf-8',skiprows=1)

按等级划分“阅读量” 
#把阅读量的数据建成一维数组
n=pd.Series(data.loc['0':'42',['阅读量']].all())
#分组
pd.cut(n,[0,200,600,1500],labels=["0","1","2"])
按“文件类型”计数 
data.groupby(['文件类型']).count()

s_type=data['文件类型']
type=list(np.unique(s_type))
#将“文件类型”列的数据存为列表
t=list(np.unique(type))
# np_data['阅读量']=np_data['阅读量'].astype(np.float)
d=data.loc[data['文件类型']=='原创','阅读量']
d1=data.loc[data['文件类型']=='转载','阅读量']
#每个文件类型的阅读量
# u,c=np.unique(d['文件类型','阅读量'],return_counts=True,axis=1)
num=list(d)
#计算每个文件类型的平均阅读量
condition_price=[]
for i in t:
#     n2=or_data[np.where(np_data['阅读量']==i)]
#     n2=n2.T
    condition_price.append(round(np.average(d.astype(np.float64)),0))
for i in t:
    condition_price.append(round(np.average(d1.astype(np.float64)),1))

condition_price

数据分析

每个文件类型的平均阅读量
dg=np.unique(np_data['文件类型'])
plt.bar(dg,l) #绘制条形图
plt.title('每个文件类型的平均阅读量')
plt.xticks(dg)
plt.xlabel('文件类型')
plt.ylabel('阅读量')
plt.show()

每个文章标题的阅读量 
title=np.unique(np_data['文章标题'])
# u,c=np.unique(title,np.unique(np_data['阅读量']),return_counts=True,axis=1)
num=list(title)
#计算每个标题的阅读量
tt=[]
sn=[]
for i in num:
    tt.append(i)
    sn.append(np.sum(data.loc[data['文章标题']==i,'阅读量']))
n1=np.array(tt)
n2=np.array(sn)
#将两个一维数组合并为二维
n=np.c_[n1,n2]

fig, ax = plt.subplots()
#设置图形大小
plt.figure(figsize=(40, 30))
#按数据排序并绘图
plt.barh(range(43), n1, align='center')
#设置y轴数据
plt.yticks(range(43), li)
plt.title('每个文章标题的阅读量')
# 设置坐标 轴数据并排序
n2= [truncate_label(str(n1), 4) for label in x]
ax.set_xticklabels(n1)
#设置标签倾斜度
plt.xticks(rotation=45)
plt.xlabel('文章标题')
plt.ylabel('阅读量')
plt.show()

 一段时间内博文的阅读量分布 (分文件类型)
#设置字体
plt.rcParams['font.sans-serif'] = 'SimHei'
# plt.figure(figsize=(40, 30))
plt.hist(data.loc[data['文件类型']=='原创','阅读量'].values,color='red',label='原创',range=(100,1500),alpha=0.1)
plt.hist(data.loc[data['文件类型']=='转载','阅读量'].values,color='green',label='转载',range=(100,1500),alpha=0.1)
plt.xlabel('阅读量')
plt.ylabel('个数')
plt.title('一段时间内博文的阅读量分布')
#设置图例
plt.legend(['原创','转载'])
plt.show()

一段时间内每篇博文的数量分布 (分文件类型)
plt.figure(figsize=(30, 5))
plt.hist(data.loc[data['文件类型']=='原创','文章标题'].values,color='red',rwidth=5,label='原创',alpha=0.1)
plt.hist(data.loc[data['文件类型']=='转载','文章标题'].values,color='green',rwidth=5,label='转载',alpha=0.1)
plt.xticks(rotation=45)
plt.xlabel('文章标题')
plt.ylabel('个数')
plt.title('一段时间内每篇博文的数量分布')
plt.legend(['原创','转载'])
plt.show()

博文文件类型百分比饼图 
plt.figure(figsize=(10,5))
n1=np.array(data['文件类型']).astype(np.str)
u1,c1=np.unique(n1[:],return_counts=True,axis=0)

#种类对应的个数
num1=list(c1)
#种类
t1=list(u1)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.pie(num1,labels=t1,autopct='%1.2f%%') #绘制饼图,百分比保留小数点后两位
plt.title('博文文件类型百分比饼图')
plt.show()

博文创建日期百分比饼图 
plt.figure(figsize=(10,5))
n1=np.array(data['创建日期']).astype(np.str)
u1,c1=np.unique(n1[:],return_counts=True,axis=0)

#种类对应的个数
num1=list(c1)
#种类
t1=list(u1)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.pie(num1,labels=t1,autopct='%1.2f%%') #绘制饼图,百分比保留小数点后两位
plt.title('博文创建日期百分比饼图')
plt.show()

 一段时间内每篇博文的创建时间及数量分布
plt.figure(figsize=(15, 5))
plt.hist(data.loc[data['文件类型']=='原创','创建日期'].values,color='red',rwidth=5,label='原创',alpha=0.1)
plt.hist(data.loc[data['文件类型']=='转载','创建日期'].values,color='green',rwidth=5,label='转载',alpha=0.1)
plt.xticks(rotation=45)
plt.xlabel('文件类型')
plt.ylabel('数量')
plt.title('一段时间内每篇博文的创建时间及数量分布')
plt.legend(['原创','转载'])
plt.show()

个人原创博文阅读量箱线图 
j=data.loc[data['文件类型']=='原创','阅读量']
#获取四方位差
j.iloc[:]=j.iloc[:].astype('float64')
statistics = j.iloc[:].describe() #保存基本统计量
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
d=statistics.loc['dis']*1.5
dmin=statistics.loc['25%']-d
dmax=statistics.loc['75%']+d
print(d,dmin,dmax)
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.boxplot(j.iloc[:]) #绘制饼图,百分比保留小数点后两位
plt.title('个人原创博文阅读量箱线图')
plt.show()

个人转载博文阅读量箱线图 
m=data.loc[data['文件类型']=='转载','阅读量']
#获取四方位差
m.iloc[:]=m.iloc[:].astype('float64')
statistics = m.iloc[:].describe() #保存基本统计量
statistics.loc['dis'] = statistics.loc['75%']-statistics.loc['25%'] #四分位数间距
d=statistics.loc['dis']*1.5
dmin=statistics.loc['25%']-d
dmax=statistics.loc['75%']+d

plt.rcParams['font.sans-serif'] = 'SimHei'
plt.boxplot(m.iloc[:]) #绘制饼图,百分比保留小数点后两位
plt.title('个人转载博文阅读量箱线图')
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

绚烂的萤火

互相学习,共同成长!

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

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

打赏作者

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

抵扣说明:

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

余额充值