结合使用pandas,tk,os,matplotlib,re库对各省份疫苗文件进行分析,并将数据可视化。
通过面对对象的概念编程,代码如下:
import pandas as pd
import tkinter as tk
import tkinter.ttk as ttk
import os
import matplotlib.pyplot as plt
import pylab as pl
import re
plt.rcParams["font.family"]="SimHei"
plt.rcParams['axes.unicode_minus']=False
class GUIAPP:
########获得省名##########
def get_file_name(self):
filepath="files"
self.filesname=os.listdir(filepath)
self.provname=[]
for item in self.filesname:
item1,iten2=item.split(".",1)
self.provname.append(item1)
#######将所有文件整合成一个dataFrame对象,并对数据进行修正#######
def get_all(self):
self.all=[]
for file in os.listdir('files/'):
self.all.append(pd.read_csv('files/'+file))
for x in range(1,len(self.all)):
self.all[0]=self.all[0].append(self.all[x])
self.all=self.all[0]
self.all=self.all[(self.all['price']!='议价失败') & (self.all['price']!='GMP到期,放弃议价') & (self.all['price']!='''企业放弃议价''') & (self.all['price']!='参考采购价参考(元)')& (self.all['price']!='未报价')]
self.all['price']=self.all['price'].apply(lambda x: float(re.split(r'元|.|/',str(x))[0]))
self.DrugName=self.all["name"].unique()
self.DrugName=list(self.DrugName)
################获得公司名称##############
def get_company_name(self):
self.company=list(self.all["create_company"].unique())
########根据省名获取药品价格图###########
def get_drug_information(self,event):
plt.close()
plt.figure(figsize=(15,10))
self.name=self.varProv.get()
data=self.all[self.all["prov"]==self.name]
drug=list(data["name"])
price=list(data["price"])
plt.scatter(drug,price)
plt.title("{}疫苗价格图".format(self.varProv.get()))
pl.xticks(rotation=45)
plt.show()
###########画出生产某个疫苗的公司价格图###########
def get_name_and_drow(self,event):
plt.close()
plt.figure(figsize=(15,10))
self.N=self.varDrugName.get()
data=self.all[self.all["name"]==self.N]
company=list(data["create_company"])
price=list(data["price"])
plt.scatter(company, price)
pl.xticks(rotation=45)
plt.title("{}疫苗价格图".format(self.varDrugName.get()))
plt.show()
#########获得某家公司所产生的疫苗并画图##############
def get_drug(self,event):
plt.close()
plt.figure(figsize=(15,10))
self.drugName=self.all[self.all["create_company"]==self.varDrug.get()]
self.com1=list(self.drugName["name"])
self.com=[]
for item in self.com1:
item1=item[0:6]
self.com.append(item1)
self.pri=list(self.drugName["price"])
plt.scatter(self.com,self.pri)
pl.xticks(rotation=45)
plt.title("{}公司疫苗研发定价情况".format(self.varDrug.get()) )
plt.show()
def __init__(self):
self.window=tk.Tk()
self.window.geometry("400x800")
self.window.resizable(height=False,width=False)
self.window.title("疫苗情况分析选择器")
self.get_file_name() #获取省份名称
self.get_all() #获取所有信息
self.get_company_name() #获取公司名称
self.frm1=tk.Frame(self.window,height=780,width=220).place(x=10,y=10)
self.varProv=tk.StringVar()
self.varDrug=tk.StringVar()
self.varDrugName=tk.StringVar()
self.b1=tk.Button(self.frm1,text="不同省份疫苗价格情况",font="楷体",bg="white").place(x=10,y=270)
self.cb1=ttk.Combobox(self.frm1,textvariable=self.varProv,value=tuple(self.provname))
self.cb1.current(0)
self.cb1.bind("<<ComboboxSelected>>",self.get_drug_information)
self.cb1.place(x=10,y=300)
self.b2=tk.Button(self.frm1,text="不同公司生产疫苗情况",font="楷体",bg="white").place(x=10,y=370)
self.cb2=ttk.Combobox(self.frm1,textvariable=self.varDrug)
self.cb2["value"]=self.company
self.cb2.current(0)
self.cb2.bind("<<ComboboxSelected>>",self.get_drug)
self.cb2.place(x=10,y=400)
self.b3=tk.Button(self.frm1,text="不同疫苗生产情况",font="楷体",bg="white").place(x=10,y=470)
self.cb3=ttk.Combobox(self.frm1,textvariable=self.varDrugName)
self.cb3["value"]=self.DrugName
self.cb3.current(0)
self.cb3.bind("<<ComboboxSelected>>",self.get_name_and_drow)
self.cb3.place(x=10,y=500)
self.window.mainloop()
def main():
app=GUIAPP()
if "__name__"==main():
main()
运行结果如下:
可以从不同省份,不同公司,不同疫苗是哪个角度去分析数据,分别表示某个省份疫苗情况分析,某个公司生产的疫苗情况分析,某个疫苗不同公司生产的情况分析。
``