是的这个系列我还没有写完,上次的(三)写到了将数据提取到CSV中,这篇其实就是拉开了数据分析的序列。
回想自己以前上的网课就讲了三大块,基础、爬虫和数据分析,之前的LVGL库研究失败了,资料少,进度慢,主要还是自己菜,有时候又有学C的冲动了,但是始终扔不下python,总觉得我跟他有缘。
言归正传,开始分析,顺便温习了一下之前学的数据分析课程,首先理顺思路:
我想要达成什么目的?
1.列出具体数据,单位领导教会了我一件事,用数据说话,数据确实可以增强文章信服力,只不过单位的数据都是应付的,敷衍的,莫得感情的,我收集的数据都是真实的,不会骗人;
2.画图,顺便复习一下各种图,折线图可以看走势,每天来多少电话,饼状图看比例,看看哪个傻缺老给我打电话,散点看时间分布,比如几点到几点接的电话最多等
3.形成月报,类似打王者的王者周报,可以自动把文字,图片贴上去,形成海报
方法都是常规的,没有太各路的,唯独数据清洗这个环节有点问题,脏数据太多了,本来我电话线就接触不良,还老有憨憨接电话过快,导致还没看清来电号码。贴上代码把:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
df=pd.read_csv('data.csv')
realdata=df[df['lasttime']>5]
outdata=realdata[realdata['type']=='B']
outdata = outdata.set_index('date') # 将date设置为index
#---------头
indata=realdata[realdata['type']=='Z']
unkowndata=realdata[realdata['type']=='0']
outcome_call=outdata.shape[0]
income_call=indata.shape[0]
unkown_call=unkowndata.shape[0]
starttime=str(outdata.head(1)['time'])[8:13]
endtime=str(outdata.tail(1)['time'])[8:13]
line_one='从'+starttime+'到'+endtime+'的电话统计情况:\n'+'共计接到电话'+str(outcome_call)+'次,拔出电话'+str(income_call)+'次,未判明'+str(unkown_call)+'次'
groupdata=outdata.groupby("date")
print(line_one)
# #---------------总体情况
data_a=[]
data_b=[]
for x,y in groupdata:
data_a.append(x)
data_b.append(y.shape[0])
data_style=pd.DataFrame({"date":data_a,"num":data_b})
maxl=data_style['num'].idxmax()
days=len(data_a)
line_three='平均每天接到'+str(round(outcome_call/days,2))+'个电话,\n最多的一天'+str(data_style['date'][maxl])[-5:]+'共接了'+str(data_style['num'][maxl])+'个电话'
print(line_three)
#---------------总体情况2
plt.figure(figsize=(30,10))
plt.title('Daily Incoming Calls',fontsize='xx-large')
plt.plot(data_a,data_b)
plt.xticks(rotation=300)
plt.grid()
plt.savefig('1.jpg')
# #---------------每日的折线图
diglist=[]
data_c=[]
data_d=[]
for index, row in outdata.iterrows():
if row['phonenumber'].isdigit():
diglist.append(row['phonenumber'])
else:
diglist.append('others')
df_dig=pd.DataFrame({'number':diglist})
df_dig=df_dig.groupby('number')
for x,y in df_dig:
if y.shape[0]>=5:
data_c.append(x)
data_d.append(y.shape[0])
plt.figure(figsize=(10,10))
plt.title('Calls distribution',fontsize='xx-large')
plt.pie(data_d,labels=data_c,autopct='%1.1f%%',shadow=False,startangle=150)
plt.savefig('2.jpg')
#---------------饼状图(去除了小样本数据)
看看结果:
从01-21到02-18的电话统计情况:
共计接到电话517次,拔出电话24次,未判明65次
平均每天接到17.83个电话,
最多的一天02-08共接了52个电话
这是在丢失了一部分数据的情况下,然后上图:
当然图片还是不够好看,而且字特小,后面再想办法美化一下吧