科二挂了,六级过了,真是大喜大悲的一天啊,下午躺了一下午。
这次写的是用python来做微信账单分析,以我七月份的消费为例,进行分析。
最终达到的效果如下,为了避免泄露博主隐私,消费记录进行了打码
这里是用python进行分析,配合使用pyecahrts进行分析
微信账单是从微信钱包里导出来的,微信——>支付——>钱包——>账单,导出来的文件是csv格式,以下是部分的截图。
导入文件,这里写了一个读取的函数,分析上表,我们可以看到实际数据是从第18行进行记录的,因此这里我们写一个count,当count到达17以后,就进行下一步的处理。
#coding:utf8
import csv
def read_csv(filename):
csv_file = csv.reader(open(filename,encoding='UTF-8'))
count=0
for line in csv_file: #数据类型是列表
if count >=17:
#print(line[0]) #从17行开始,为主要的内容
savedata(line)
count+=1
上面的savedata函数是用来分类数据,将其分为“收入”,“支出”,同时这里新建几个全局变量,用来记录分类的结果,并用于之后的分析
#声明全局变量
#支出记录
paymentlist=[]
#收入记录
incomelist=[]
#支出多少笔数据
paymentnum=0
pay=0
#收入多少笔数据
incomenum=0
income=0
def savedata(line):
global paymentnum
global incomenum
print(line[4])
if line[4]=='支出':
paymentlist.append(line)
paymentnum+=1
else:
incomelist.append(line)
incomenum+=1
以下是收入、支出各自求和的函数,我们分析这个钱,前面有个符号,这是我们不用的,因此是从第1个字符进行读取,且需要转换为浮点型,之前是字符串型。
#收入求和
def getPayMentlist():
all=0
for item in paymentlist:
# print(float(item[5][1:]))
all=all+float(item[5][1:])
print(all)
return all
#支出求和
def getIncomelist():
all=0
for item in incomelist:
# print(float(item[5][1:]))
all=all+float(item[5][1:])
print(all)
return all
以下的函数做到了各个商铺的消费、支出分类,以及最大消费的识别,使用的是字典,同样定义了一个全局变量。
#支出明细归纳汇总
dict1={}
def getPayment_listDetail():
for item2 in paymentlist:
x=dict1.get(item2[2])
if x ==None:
#如果没有这个key,就对字典进行赋值
dict1[item2[2]]=float(item2[5][1:])
else:
#字典中有key对应的value,取出value+现在的值
dict1[item2[2]]=dict1[item2[2]]+float(item2[5][1:])
max=0
maxtitle=""
for i in dict1:
print(i+':',dict1[i])
temp=dict1[i]
if max<temp:
max=temp
maxtitle=i
print("最大的消费记录:{},{}".format(maxtitle,max))
主函数的执行
read_csv("微信支付账单(20190701-20190801).csv") #加载主要数据
print("支出笔数:{}".format(paymentnum))
print("收入笔数:{}".format(incomenum))
getPayMentlist()
getIncomelist()
getPayment_listDetail()
下面就是pyecahrts的使用,这个安装自行百度,这里可视化的是前10个的数据,没有按照消费的大小进行。
from pyecharts import Pie
#list是转换为列表
attr = list(dict1.keys())[:10]
v1 = list(dict1.values())[:10]
pie = Pie("饼图示例")
pie.add("",attr,v1,is_label_show=True)
pie.render("七月份消费记录.html")
至此,完成。