Pandas — 数据处理
Pyecharts — 数据可视化
collections — 数据统计
可视化部分:
进入正题~~
import jiebaimport stylecloudimport pandas as pdfrom PIL import Imagefrom collections import Counterfrom pyecharts.charts import Geofrom pyecharts.charts import Barfrom pyecharts.charts import Linefrom pyecharts.charts import Piefrom pyecharts.charts import Calendarfrom pyecharts.charts import WordCloudfrom pyecharts import options as optsfrom pyecharts.commons.utils import JsCodefrom pyecharts.globals import ThemeType,SymbolType,ChartType
2.1 读取数据
df = pd.read_excel("医院药品销售数据.xlsx")
结果:
2.2 数据大小
df.shape
(6578, 7)
一共有6578条药品购买数据。
2.3 查看索引、数据类型和内存信息
df.info()
部分列存在数据缺失。
2.4 统计空值数据
df.isnull().sum()
2.5 输出空行
df[df.isnull().T.any()]
df1 = df.copy()df1 = df1.dropna(subset=['购药时间'])df1[df1.isnull().T.any()]df1['社保卡号'].fillna('0000', inplace=True)df1['社保卡号'] = df1['社保卡号'].astype(str)df1['商品编码'] = df1['商品编码'].astype(str)df1['销售数量'] = df1['销售数量'].astype(int)
2.6 销售数量,应收金额,实收金额三列的统计情况
df1[['销售数量','应收金额','实收金额']].describe()
df2 = df1.copy()df2['销售数量'] = df2['销售数量'].abs()df2['应收金额'] = df2['应收金额'].abs()df2['实收金额'] = df2['实收金额'].abs()
2.7 列拆分(购药时间列拆分为两列)
df3 = df2.copy()df3[['购药日期', '星期']] = df3['购药时间'].str.split(' ', 2, expand = True)df3 = df3[['购药日期', '星期','社保卡号','商品编码', '商品名称', '销售数量', '应收金额', '实收金额' ]]
代码:
每天销量整理相差不大,周五、周六偏于购药高峰。 代码: 可以看出:苯磺 酸氨氯地平片(安内真)、开博通、酒石酸美托洛尔片(倍他乐克)等治疗高血压、心绞痛药物购买量比较多。。
3.6 药品名称词云
篇幅原因,部分代码未完全展示,如果需要可在下方获取,也可在线运行(含全部代码+数据文件): https://www.heywhale.com/mw/project/61b83bd9c63c620017c629bccolor_js = """new echarts.graphic.LinearGradient(0, 1, 0, 0, [{offset: 0, color: '#FFFFFF'}, {offset: 1, color: '#ed1941'}], false)"""g1 = df3.groupby('星期').sum()x_data = list(g1.index)y_data = g1['销售数量'].values.tolist()b1 = ( Bar() .add_xaxis(x_data) .add_yaxis('',y_data ,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js))) .set_global_opts(title_opts=opts.TitleOpts(title='一周各天药品销量',pos_top='2%',pos_left = 'center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), yaxis_opts=opts.AxisOpts(name="销量",name_location='middle',name_gap=50,name_textstyle_opts=opts.TextStyleOpts(font_size=16))) )b1.render_notebook()
color_js = """new echarts.graphic.LinearGradient(0, 1, 0, 0, [{offset: 0, color: '#FFFFFF'}, {offset: 1, color: '#08519c'}], false)"""g2 = df3.groupby('商品名称').sum().sort_values(by='销售数量', ascending=False)x_data = list(g2.index)[:10]y_data = g2['销售数量'].values.tolist()[:10]b2 = ( Bar() .add_xaxis(x_data) .add_yaxis('',y_data ,itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js))) .set_global_opts(title_opts=opts.TitleOpts(title='药品销量前十',pos_top='2%',pos_left = 'center'), legend_opts=opts.LegendOpts(is_show=False), xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), yaxis_opts=opts.AxisOpts(name="销量",name_location='middle',name_gap=50,name_textstyle_opts=opts.TextStyleOpts(font_size=16))) )b2.render_notebook()
纵然伤心,也不要愁眉不展,因为你不知是谁会爱上你的笑容