鱼C论坛

 找回密码
 立即注册
查看: 1586|回复: 5

急救急救pandas问题急急急

[复制链接]
发表于 2020-6-29 22:48:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如题,参加python比赛,在论坛朋友的帮助下本来已经写好了,但是比赛说不让用pandas库,我已经写好了,想用泡菜保存为本地二进制文件,但还是不行,还有两天交稿,有没有抢救的方法
  1. #import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import matplotlib.ticker as ticker
  4. import matplotlib.animation as animation
  5. import random
  6. import pickle
  7. import easygui as g
  8. import os

  9. '''def get_pandafile(name):
  10.     data0 = pd.read_excel(name, sheet_name='Sheet1',
  11.                           usecols=['大名称', '小名称', '日期', '累计确诊'])
  12.     pickle_file = open('%s.pkl'% name, 'wb')
  13.     pickle.dump(data0, pickle_file)
  14.     pickle_file.close()'''


  15. def randomcolor():
  16.     colorlist = ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F']
  17.     color = ''
  18.     for i in range(6):
  19.         color += random.choice(colorlist)
  20.     return '#' + color


  21. def get_colordict():
  22.     area_list1 = set(df['小名称'])
  23.     color_list = []
  24.     for i in range(len(area_list1)):
  25.         str_1 = randomcolor()
  26.         color_list.append(str_1)
  27.         str_1 = randomcolor()
  28.     area_list2 = [i for i in area_list1]

  29.     color_dict = dict(zip(area_list2, color_list))
  30.     return color_dict


  31. def load_data(name):
  32.     pickle_file = open('%s.pkl' % name, 'rb')
  33.     pdfile = pickle.load(pickle_file)
  34.     return pdfile
  35. try:
  36.     choices = ['绘制中国新冠疫情动态图','世界各国新冠肺炎疫情动态图']
  37.     reply = g.choicebox('请选择需要绘制的图像', choices = choices)
  38.     #get_pandafile('世界各国新冠肺炎疫情.xlsx')
  39.     #get_pandafile('中国省份新冠肺炎疫情.xlsx')
  40.     #print('(输入1绘制中国疫情动态图,输入2绘制世界疫情动态图)')
  41.     #a = input('请选择需要绘制的图像:')
  42.     if reply=='绘制中国新冠疫情动态图':
  43.         name = '中国省份新冠肺炎疫情.xlsx'
  44.     elif reply=='世界各国新冠肺炎疫情动态图':
  45.         name = '世界各国新冠肺炎疫情.xlsx'
  46.     df = load_data(name)
  47. except NameError as reason:
  48.     g.msgbox('谢谢使用')
  49.     os._exit(0)

  50. colorlist = get_colordict()
  51. fig, ax = plt.subplots(figsize=(15, 8))

  52. colors = dict(zip(
  53.     ['India', 'Europe', 'Asia', 'Latin America', 'Middle East', 'North America', 'Africa'],
  54.     ['#adb0ff', '#ffb3ff', '#90d595', '#e48381', '#aafbff', '#f7bb5f', '#eafb50']
  55. ))
  56. group_lk = df.set_index('大名称')['小名称'].to_dict()


  57. def draw_barchart(current_day):
  58.     dff = df[df['日期'].eq(current_day)].sort_values(by='累计确诊', ascending=True).tail(10)
  59.     ax.clear()
  60.     plt.rcParams['font.sans-serif'] = ['SimHei']
  61.     ax.barh(dff['小名称'], dff['累计确诊'], color=[colorlist[x] for x in dff['小名称']])
  62.     dx = dff['累计确诊'].max() / 200
  63.     for i, (value, name) in enumerate(zip(dff['累计确诊'], dff['大名称'])):
  64.         ax.text(value - dx, i, name, size=14, weight=600, ha='right', va='bottom')
  65.         ax.text(value - dx, i - .25, group_lk[name], size=10, color='#444444', ha='right', va='baseline')
  66.         ax.text(value + dx, i, f'{value:,.0f}', size=14, ha='left', va='center')
  67.     ax.text(1, 0.4, current_day, transform=ax.transAxes, color='#777777', size=46, ha='right', weight=800)
  68.     ax.text(0, 1.06, '累计人数', transform=ax.transAxes, size=12, color='#777777')
  69.     ax.xaxis.set_major_formatter(ticker.StrMethodFormatter('{x:,.0f}'))
  70.     ax.xaxis.set_ticks_position('top')
  71.     ax.tick_params(axis='x', colors='#777777', labelsize=12)
  72.     ax.set_yticks([])
  73.     ax.margins(0, 0.01)
  74.     ax.grid(which='major', axis='x', linestyle='-')
  75.     ax.set_axisbelow(True)
  76.     ax.text(0, 1.12, '新冠疫情累计确诊人数',
  77.             transform=ax.transAxes, size=24, weight=600, ha='left')
  78.     ax.text(1, 0, 'by二中朱宝恒', transform=ax.transAxes, ha='right',
  79.             color='#777777', bbox=dict(facecolor='white', alpha=0.8, edgecolor='white'))
  80.     plt.box(False)


  81. month_day = [0, 31, 29, 31, 30, 31, 30]


  82. def all_day(start, end):
  83.     days = []
  84.     cur_day = start
  85.     while cur_day < end:
  86.         mon = (cur_day // 100) % 100
  87.         if cur_day % 100 == month_day[mon]:
  88.             cur_day = 20200000 + (mon + 1) * 100 + 1
  89.         else:
  90.             cur_day += 1
  91.         days.append(cur_day)
  92.     return days


  93. days = all_day(20200122, 20200608)

  94. if __name__ == '__main__':
  95.     draw_barchart(20200607)
  96.     animator = animation.FuncAnimation(fig, draw_barchart, frames=days)
  97.     plt.show()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-29 22:50:30 | 显示全部楼层
numpy 呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-29 23:20:39 | 显示全部楼层
numpy可以
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-30 22:58:05 | 显示全部楼层
有没有人啊
快来救救孩子啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 07:52:01 | 显示全部楼层
我看代码中pd主要是读取excel和选择列,是不是可以用openpyxl去替代这些啊。
不知道效率会不会慢一些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 07:54:24 | 显示全部楼层
rsj0315 发表于 2020-7-1 07:52
我看代码中pd主要是读取excel和选择列,是不是可以用openpyxl去替代这些啊。
不知道效率会不会慢一些

这个就回到我最开始纠结的问题上。
pandas直接输出series和dataframe,可以直接用plt画图。

openpyxl只会输出列表里。和plt结合起来不会,而且输出的列表,遍历起来也挺费劲的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 00:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表