鱼C论坛

 找回密码
 立即注册
查看: 2563|回复: 11

[技术交流] 打包exe后,启动速度慢的问题

[复制链接]
发表于 2021-1-21 15:50:13 | 显示全部楼层 |阅读模式

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

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

x



废话不多说上源码,两个py文件,第一个叫database。如下:
  1. import pyodbc
  2. import pandas as pd
  3. import os
  4. import tempfile
  5. os.environ['MPLCONFIGDIR']=tempfile.mkdtemp()
  6. import matplotlib.pyplot as plt
  7. import seaborn as sns
  8. import numpy as np
  9. import warnings
  10. warnings.filterwarnings('ignore')
  11. import datetime
  12. import concurrent.futures
  13. import time

  14. now = datetime.datetime.now().strftime('%Y-%m-%d')
  15. now_15ago=(datetime.datetime.now()-datetime.timedelta(days=14)).strftime('%Y-%m-%d')
  16. now_1ago=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')
  17. now_2ago=(datetime.datetime.now()-datetime.timedelta(days=2)).strftime('%Y-%m-%d')
  18. now_30ago = (datetime.datetime.now()-datetime.timedelta(days=30)).strftime('%Y-%m-%d')

  19. plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  20. plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  21. #显示所有列
  22. pd.set_option('display.max_columns', None)
  23. #显示所有行
  24. pd.set_option('display.max_rows', None)
  25. #下边是5条产线,15个access数据库表格
  26. a_fg = r'A Rubber Line POs List.mdb'
  27. a_per = r'A Rubber Line Performance List.mdb'
  28. a_stop = r'A Rubber Line Stops List.mdb'

  29. b_fg = r'B Rubber Line POs List.mdb'
  30. b_per = r'B Rubber Line Performance List.mdb'
  31. b_stop = r'B Rubber Line Stops List.mdb'

  32. c_fg = r'C Rubber Line POs List.mdb'
  33. c_per = r'C Rubber Line Performance List.mdb'
  34. c_stop = r'C Rubber Line Stops List.mdb'

  35. cb_fg = r'CB Rubber Line POs List.mdb'
  36. cb_per = r'CB Rubber Line Performance List.mdb'
  37. cb_stop = r‘CB Rubber Line Stops List.mdb'

  38. ccv_fg = r'CCV XLPE Line POs List.mdb'
  39. ccv_per = r'CCV XLPE Line Performance List.mdb'
  40. ccv_stop = r'CCV XLPE Line Stops List.mdb'

  41. #下边是后边要用的sql语句
  42. fg_a = "SELECT * FROM A_Rubber_Line_POLIST"
  43. per_a = "SELECT * FROM A_Rubber_Line_PerformList"
  44. stop_a = "SELECT * FROM A_Rubber_Line_StopList"

  45. fg_b = "SELECT * FROM B_Rubber_Line_POLIST"
  46. per_b = "SELECT * FROM B_Rubber_Line_PerformList"
  47. stop_b = "SELECT * FROM B_Rubber_Line_StopList"

  48. fg_c = "SELECT * FROM C_Rubber_Line_POLIST"
  49. per_c = "SELECT * FROM C_Rubber_Line_PerformList"
  50. stop_c = "SELECT * FROM C_Rubber_Line_StopList"

  51. fg_cb = "SELECT * FROM CB_Rubber_Line_POLIST"
  52. per_cb = "SELECT * FROM CB_Rubber_Line_PerformList"
  53. stop_cb = "SELECT * FROM CB_Rubber_Line_StopList"

  54. fg_ccv = "SELECT * FROM CCV_XLPE_Line_POLIST"
  55. per_ccv = "SELECT * FROM CCV_XLPE_Line_PerformList"
  56. stop_ccv = "SELECT * FROM CCV_XLPE_Line_StopList"



  57. savepath = r'C:\DATA_FILE'
  58. #下边这个函数是为了让饼图显示数量和百分比的
  59. def my_label(pct, allvals):
  60.     try:
  61.         absolute = int(pct/100.*np.sum(allvals))
  62.         return "{:.1f}%\n({:d})".format(pct, absolute)
  63.     except Exception as e:
  64.         print(e)
  65. #下边这个函数是读取5个fg数据库表格的通用函数,5个表格字段一样的
  66. def get_data_fg(mdb_file,sql,line):
  67.     global savepath
  68.     driver = '{Microsoft Access Driver (*.mdb, *.accdb)}'
  69.     con = pyodbc.connect(f'Driver={driver};DBQ={mdb_file};Pwd=FSL24680')
  70.     df = pd.read_sql(sql,con)
  71.     df['PRODUCTION_DATE'] = df['COIL_NO'].str[:8]
  72.     df['PRODUCTION_DATE'] = pd.to_datetime(df['PRODUCTION_DATE'], format='%Y-%m-%d')
  73.     df['date'] = df['PRODUCTION_DATE']
  74.     # df.set_index('date', inplace=True)
  75.     df['line'] = line
  76.     df['itp_'] = df['QUALITY_DECISION'].str.cat(df['PRODUCTION_DECISION'], na_rep='_')  # 连接合并,空的写下划线
  77.     df['itp'] = df['itp_'].isin(['Failnan', 'nanFail', 'FailFail', 'FailPass', 'PassFail'])  # 只要含有Fail的就认为是不合格轴
  78.     df['itp'] = df['itp'].astype('str')  # 把判定结果的转换为字符串,False代表合格。

  79.     df['段长'] = pd.cut(df['COIL_LENGTH'],
  80.                            bins=[0, 300, 600, 1000, 10000],
  81.                            include_lowest=True,
  82.                            labels=['300m以内', '300到600m', '600到1000m', '1km以上'])
  83.     # print(df)
  84.     # print(df.info())
  85.     df.to_pickle(os.path.join(savepath, f'{line}fg.pkl'))
  86.     # df.to_excel(os.path.join(savepath, f'{line}fg.xlsx'))
  87.     print('***********',sql,"****************")
  88.     return df
  89. ##下边这个函数是读取5个per数据库表格的通用函数,5个表格字段一样的
  90. def get_data_per(mdb_file,sql,line):
  91.     global savepath
  92.     driver = '{Microsoft Access Driver (*.mdb, *.accdb)}'
  93.     con = pyodbc.connect(f'Driver={driver};DBQ={mdb_file};Pwd=FSL24680')
  94.     df = pd.read_sql(sql,con)
  95.     df['date'] = df['PRODUCTION_DATE']
  96.     # df.set_index('date', inplace=True)
  97.     df['line'] = line
  98.     df.to_pickle(os.path.join(savepath, f'{line}per.pkl'))
  99.     # df.to_excel(os.path.join(savepath, f'{line}per.xlsx'))
  100.     print('***********',sql,"****************")
  101.     return df
  102. #下边这个函数是读取5个stop数据库表格的通用函数,5个表格字段一样的
  103. def get_data_stop(mdb_file,sql,line):
  104.     global savepath
  105.     driver = '{Microsoft Access Driver (*.mdb, *.accdb)}'
  106.     con = pyodbc.connect(f'Driver={driver};DBQ={mdb_file};Pwd=FSL24680')
  107.     df = pd.read_sql(sql,con)
  108.     # print(df)
  109.     df['STOP_REASON'] = np.where((df['STOP_TIME_HOUR'] > 10) & (df['STOP_REASON'] == ''), '歇班',
  110.                                       df['STOP_REASON'])
  111.     df['STOP_REASON'] = np.where((df['STOP_TIME_HOUR'] < 10) & (df['STOP_REASON'] == ''), '等待下班',
  112.                                       df['STOP_REASON'])
  113.     df_stop = df[~df['STOP_REASON'].astype(str).str.contains('歇班')]
  114.     # print(df_stop)
  115.     a = df_stop.values.tolist()
  116.     # print('---')
  117.     # print(a)
  118.     res = []
  119.     res_=[]
  120.     for i in range(0, len(a) - 1):
  121.         m = a[i + 1][2]
  122.         n = a[i][3]
  123.         b = (m - n).total_seconds() / 3600
  124.         if b >= 0.2:
  125.             res.append(a[i])
  126.         else:
  127.             res.append([a[i][0], a[i][1], a[i][2], a[i + 1][3], a[i + 1][4], a[i + 1][5],a[i][6],a[i][7],a[i][8]])
  128.             res_.append(
  129.                 [a[i][0], a[i][1], a[i][2], a[i + 1][3], a[i + 1][4], a[i + 1][5] + '+跨班', a[i][6], a[i][7], a[i][8]])
  130.     df_stop2 = pd.DataFrame(res)
  131.     print(df_stop2)
  132.     df_stop2.columns = ['date', 'INDEX SUB_INDEX', 'STOP_FROM', 'STOP_TO', 'STOP_TIME_HOUR', 'STOP_REASON',
  133.                         'PRODUCTION_DATE', 'SHIFT', 'OPERATOR','LINE']
  134.     df_stop2.drop_duplicates(subset=['STOP_TO'], keep='first', inplace=True)
  135.     df_stop2['date']=df_stop2['PRODUCTION_DATE']
  136.     # df_stop2.set_index('date', inplace=True)
  137.     df_stop2['line'] = line
  138.     # print(df_stop2)
  139.     df_stop2.to_pickle(os.path.join(savepath, f'{line}stop.pkl'))
  140.     # df_stop2.to_excel(os.path.join(savepath, f'{line}stop.xlsx'))

  141.     if len(res_)==9:
  142.         df_stop3 = pd.DataFrame(res_)
  143.         df_stop3.columns = ['date', 'INDEX SUB_INDEX', 'STOP_FROM', 'STOP_TO', 'STOP_TIME_HOUR', 'STOP_REASON',
  144.                             'PRODUCTION_DATE', 'SHIFT', 'OPERATOR']
  145.         df_stop3.drop_duplicates(subset=['STOP_TO'], keep='first', inplace=True)
  146.         df_stop3['date'] = df_stop3['PRODUCTION_DATE']
  147.         df_stop3['line'] = line
  148.         # df_stop3.to_excel(os.path.join(savepath, f'{line}stop_跨班.xlsx'))
  149.     print('***********',sql,"****************")
  150.     return df_stop2
  151. #把5个fg表格合并成一个并输出pkl文件
  152. def concat_file_fg():
  153.     start = time.time()
  154.     with concurrent.futures.ThreadPoolExecutor() as executor:
  155.         fga = executor.submit(get_data_fg, a_fg, fg_a, 'A')
  156.         fgb = executor.submit(get_data_fg, b_fg, fg_b, 'B')
  157.         fgc = executor.submit(get_data_fg, c_fg, fg_c, 'C')
  158.         fgcb = executor.submit(get_data_fg, cb_fg, fg_cb, 'CB')
  159.         fgccv = executor.submit(get_data_fg,ccv_fg, fg_ccv, 'CCV')
  160.         dfga = fga.result()
  161.         dfgb = fgb.result()
  162.         dfgc = fgc.result()
  163.         dfgcb = fgcb.result()
  164.         dfgccv = fgccv.result()
  165.         df_fg = pd.concat([dfga, dfgb, dfgc, dfgcb, dfgccv])
  166.         df_fg.to_excel(r'C:\PTCC_MES_DATA_FILE\fg2021_all.xlsx', index=False)
  167.         df_fg.to_pickle(r'C:\PTCC_MES_DATA_FILE\fg2021_all.pkl')
  168.     end = time.time()
  169.     print(end-start)
  170.     print('fg载入数据完成------------------')
  171.     return df_fg
  172. #把5个per表格合并成一个并输出pkl文件
  173. def concat_file_per():
  174.     start = time.time()
  175.     with concurrent.futures.ThreadPoolExecutor() as executor:
  176.         pera = executor.submit(get_data_per, a_per, per_a, 'A')
  177.         perb = executor.submit(get_data_per, b_per, per_b, 'B')
  178.         perc = executor.submit(get_data_per, c_per, per_c, 'C')
  179.         percb = executor.submit(get_data_per, cb_per, per_cb, 'CB')
  180.         perccv = executor.submit(get_data_per, ccv_per, per_ccv, 'CCV')
  181.         dfpa = pera.result()
  182.         dfpb = perb.result()
  183.         dfpc = perc.result()
  184.         dfpcb = percb.result()
  185.         dfpccv = perccv.result()
  186.         df_p = pd.concat([dfpa, dfpb, dfpc, dfpcb, dfpccv])
  187.         df_p.to_excel(r'C:\PTCC_MES_DATA_FILE\per2021_all.xlsx', index=False)
  188.         df_p.to_pickle(r'C:\PTCC_MES_DATA_FILE\per2021_all.pkl')
  189.     end = time.time()
  190.     print(end - start)
  191.     print('per载入数据完成------------------')
  192.     return df_p
  193. #把5个stop表格合并成一个并输出pkl文件
  194. def concat_file_stop():
  195.     start = time.time()
  196.     with concurrent.futures.ThreadPoolExecutor() as executor:
  197.         stopa = executor.submit(get_data_stop, a_stop, stop_a, 'A')
  198.         stopb = executor.submit(get_data_stop, b_stop, stop_b, 'B')
  199.         stopc = executor.submit(get_data_stop, c_stop, stop_c, 'C')
  200.         stopcb = executor.submit(get_data_stop, cb_stop, stop_cb, 'CB')
  201.         stopccv = executor.submit(get_data_stop, ccv_stop, stop_ccv, 'CCV')
  202.         dfsa = stopa.result()
  203.         dfsb = stopb.result()
  204.         dfsc = stopc.result()
  205.         dfscb = stopcb.result()
  206.         dfsccv = stopccv.result()
  207.         df_s = pd.concat([dfsa, dfsb, dfsc, dfscb, dfsccv])
  208.         df_s.to_excel(r'C:\PTCC_MES_DATA_FILE\stop2021_all.xlsx', index=False)
  209.         df_s.to_pickle(r'C:\PTCC_MES_DATA_FILE\stop2021_all.pkl')
  210.     end = time.time()
  211.     print(end - start)
  212.     print('stop载入数据完成------------------')
  213.     return df_s
  214. #画图函数1,ui上点击按钮对应画图
  215. def out1_data(line,start=now_15ago,end=now,now_1 = now_1ago):

  216.     global savepath
  217.     df_fg = pd.read_pickle(os.path.join(savepath, f'{line}fg.pkl'))
  218.     df_fg.set_index('date', inplace=True)
  219.     df_fg = df_fg.loc[start:end]
  220.     df_fg['PRODUCTION_DATE'] = df_fg['PRODUCTION_DATE'].astype(str).str[:10]
  221.     # print(df_fg)

  222.     # df_per = pd.read_excel(os.path.join(savepath, f'{line}per.xlsx'))
  223.     df_per = pd.read_pickle(os.path.join(savepath, f'{line}per.pkl'))
  224.     df_per.set_index('date', inplace=True)
  225.     df_per = df_per.loc[start:end]
  226.     df_per['PRODUCTION_DATE']=df_per['PRODUCTION_DATE'].astype(str).str[:10]
  227.     # print(df_per)

  228.     df_stop = pd.read_pickle((os.path.join(savepath, f'{line}stop.pkl')))
  229.     df_stop['PRODUCTION_DATE'] = df_stop['PRODUCTION_DATE'].astype(str).str[:10]
  230.     df_stop.set_index('date', inplace=True)


  231.     #----------------------------------------------------
  232.     plt.figure(facecolor='white', figsize=(16, 9))
  233.     sns.set(style="darkgrid")
  234.     plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  235.     plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  236.     try:
  237.         ax1 = plt.subplot(221)
  238.         sns.lineplot(x='PRODUCTION_DATE',
  239.                    y='SPEED_EFFICIENCY',
  240.                    data=df_per,
  241.                    hue='SHIFT',
  242.                     marker='*',
  243.                    ax=ax1)
  244.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['SPEED_EFFICIENCY']):
  245.             if y<0.95:
  246.                 plt.text(x=x,y=y+0.02,s='%.01f%%' % (y * 100),color='red',size=14)

  247.         plt.xticks(ha='right', rotation=45)
  248.         plt.ylim(0, 1.2)
  249.         plt.xticks(fontsize=13)
  250.         plt.yticks(fontsize=13)
  251.         plt.xlabel('')
  252.         # plt.grid(axis='y',linestyle='--',color='red',alpha=0.3)
  253.         plt.ylabel('速度效率 / %', fontsize=14, fontweight='bold')
  254.         ax1.set_title(f'{line} Line 15天 速度效率 %\n', fontsize=18, fontweight='bold')
  255.     except Exception as e:
  256.         print(e,'15天 速度效率')

  257.     ax2 = plt.subplot(222)
  258.     try:
  259.         zongshu = df_fg.groupby(['PRODUCTION_DATE', 'PRODUCTION_SHIFT'], as_index=False)['itp'].agg('count')
  260.         df_fg_hege = df_fg[df_fg['itp'] == 'False']
  261.         hegeshu = df_fg_hege.groupby(['PRODUCTION_DATE','PRODUCTION_SHIFT'],as_index=False)['itp'].agg('count')
  262.         df_ftq = pd.concat([zongshu,hegeshu],axis=1)
  263.         df_ftq.columns = ['PRODUCTION_DATE','PRODUCTION_SHIFT','zongshu','date','SHIFT','hegeshu']
  264.         df_ftq['FTQ']=df_ftq['hegeshu']/df_ftq['zongshu']
  265.         # print(df_ftq)
  266.         sns.lineplot(x='PRODUCTION_DATE',
  267.                      y='FTQ',
  268.                      data=df_ftq,
  269.                      hue='SHIFT',
  270.                      marker='*',
  271.                      ax=ax2)
  272.         for x,y in zip(df_ftq['PRODUCTION_DATE'],df_ftq['FTQ']):
  273.             if y<0.1:
  274.                 plt.text(x=x,y=y+0.02,s='%.01f%%' % (y * 100),color='red',size=14)

  275.         plt.xticks(ha='right', rotation=45)
  276.         plt.ylim(0.6, 1.2)
  277.         plt.xticks(fontsize=13)
  278.         plt.yticks(fontsize=13)
  279.         plt.xlabel('')
  280.         plt.ylabel('FTQ / %', fontsize=14, fontweight='bold')
  281.         ax2.set_title(f'{line} Line 15天 FTQ %\n', fontsize=18, fontweight='bold')
  282.     except Exception as e:
  283.         print(e,'15天 FTQ')
  284.     ax3 = plt.subplot(223)
  285.     try:
  286.         sns.lineplot(x='PRODUCTION_DATE',
  287.                      y='RUN_TIME_HOUR',
  288.                      data=df_per,
  289.                      hue='SHIFT',
  290.                      marker='*',
  291.                      ax=ax3)
  292.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['RUN_TIME_HOUR']):
  293.             plt.text(x=x,y=y,s=round(y,1),color='red',size=14)

  294.         plt.xticks(ha='right', rotation=45)
  295.         # plt.ylim(0.6, 1.2)
  296.         plt.xticks(fontsize=13)
  297.         plt.yticks(fontsize=13)
  298.         plt.xlabel('')
  299.         plt.ylabel('run_time / h', fontsize=14, fontweight='bold')
  300.         ax3.set_title(f'{line} Line 15天 Run_Time h\n', fontsize=18, fontweight='bold')
  301.     except Exception as e:
  302.         print(e,'15天 Run_Time')

  303.     ax4 = plt.subplot(224)
  304.     try:
  305.         sns.lineplot(x='PRODUCTION_DATE',
  306.                      y='OEE',
  307.                      data=df_per,
  308.                      hue='SHIFT',
  309.                      marker='*',
  310.                      ax=ax4)
  311.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['OEE']):
  312.             plt.text(x=x,y=y,s='%.01f%%' % (y * 100),color='red',size=14)

  313.         plt.xticks(ha='right', rotation=45)
  314.         # plt.ylim(0.6, 1.2)
  315.         plt.xticks(fontsize=13)
  316.         plt.yticks(fontsize=13)
  317.         plt.xlabel('')
  318.         plt.ylabel('OEE / %', fontsize=14, fontweight='bold')
  319.         ax4.set_title(f'{line} Line 15天 OEE %\n', fontsize=18, fontweight='bold')
  320.     except Exception as e:
  321.         print(e,'15天 OEE')
  322.     plt.tight_layout()
  323.     plt.show()
  324.     ###################################################
  325.     ###################################################
  326.     plt.figure(facecolor='white', figsize=(16, 9))
  327.     ax1 = plt.subplot(221)
  328.     try:
  329.         ax = sns.barplot(x='PRODUCTION_DATE',
  330.                          y='TOTAL_LENGTH',
  331.                          data=df_per,
  332.                          hue='SHIFT',
  333.                          ci=0,
  334.                          ax=ax1)
  335.         for p in ax.patches:
  336.             height = p.get_height()
  337.             ax.text(x=p.get_x() ,
  338.                     y=height + 2,
  339.                     s='{: .0f}m'.format(height), color='red', size=14)
  340.         plt.xticks(ha='right', rotation=45)
  341.         # plt.ylim(0.6, 1.2)
  342.         plt.xticks(fontsize=13)
  343.         plt.yticks(fontsize=13)
  344.         plt.xlabel('')
  345.         plt.ylabel('length / m', fontsize=14, fontweight='bold')
  346.         ax1.set_title(f'{line} Line 15天 产量/ m\n', fontsize=18, fontweight='bold')
  347.     except Exception as e:
  348.         print(e,'15天 产量')
  349.     #############################################
  350.     ax2 = plt.subplot(222)
  351.     try:
  352.         df_fg1 = df_fg.loc[now_1:now]
  353.         axx = sns.barplot(x='COIL_NO',
  354.                           y='COIL_LENGTH',
  355.                           data=df_fg1,
  356.                           ci=0,
  357.                           color='blue',
  358.                           ax=ax2)
  359.         for p in axx.patches:
  360.             height = p.get_height()
  361.             axx.text(x=p.get_x() + (p.get_width() / 2),
  362.                      y=height,
  363.                      s='{: .0f}m'.format(height), color='red', size=14)
  364.         plt.xticks(ha='right', rotation=45)
  365.         # plt.ylim(0.6, 1.2)
  366.         plt.xticks(fontsize=13)
  367.         plt.yticks(fontsize=13)
  368.         plt.xlabel('')
  369.         plt.ylabel('length / m', fontsize=14, fontweight='bold')
  370.         ax2.set_title(f'{line} Line  昨天产量/ m\n', fontsize=18, fontweight='bold')
  371.     except Exception as e:
  372.         print(e,'昨天产量')
  373.     ##################################
  374.     ax3 = plt.subplot(223)
  375.     try:
  376.         df_stop = df_stop.loc[now_1:now]
  377.         axxx = sns.barplot(x='STOP_REASON',
  378.                            y='STOP_TIME_HOUR',
  379.                            data=df_stop,
  380.                            hue='SHIFT',
  381.                            estimator=sum,
  382.                            ci=0,
  383.                            ax=ax3)
  384.         for p in axxx.patches:
  385.             height = p.get_height()
  386.             axxx.text(x=p.get_x() + (p.get_width() / 2),
  387.                       y=height + 0.1,
  388.                       s=f'{round(height,1)}h', color='red', size=14)
  389.         plt.xticks(ha='right', rotation=45)
  390.         # plt.ylim(0.6, 1.2)
  391.         plt.xticks(fontsize=13)
  392.         plt.yticks(fontsize=13)
  393.         plt.xlabel('')
  394.         plt.ylabel('小时 / m', fontsize=14, fontweight='bold')
  395.         ax3.set_title(f'{line} Line  昨天停车 / h\n', fontsize=18, fontweight='bold')
  396.     except Exception as e:
  397.         print(e,'昨天停车')
  398.     ax4 = plt.subplot(224)
  399.     try:
  400.         bing = df_per.groupby('SHIFT')['RUN_TIME_HOUR'].agg('sum').sort_values(ascending=True)
  401.         ax4 = bing.plot(kind='pie',
  402.                         subplots=True,
  403.                         # labels=labels,
  404.                         # explode=(0,0.1,0,0),#突显
  405.                         autopct=lambda x: my_label(x, bing),
  406.                         # autopct='%.1f%%',  # 设置百分比格式,保留一位
  407.                         pctdistance=0.8,  # 设置百分比与圆心的距离
  408.                         startangle=90,  # 设置饼图的开始角度
  409.                         radius=1,  # 设置饼图的半径
  410.                         counterclock=True,  # 是否逆时针,false是顺时针
  411.                         shadow=False,  # 无阴影设置
  412.                         labeldistance=1.1,  # 默认1.1
  413.                         # rotatelabels=True# True,标签放线是沿半径方向
  414.                         textprops={'fontsize': 13}
  415.                         )
  416.         plt.axis('scaled')  # 'tight''scaled'
  417.         plt.ylabel('')
  418.         plt.xlabel('')
  419.         plt.title('\n15天白夜班开车时间占比\n', fontsize=18, fontweight='bold')
  420.     except Exception as e:
  421.         print(e,'15天白夜班开车时间占比')
  422.     plt.tight_layout()
  423.     plt.show()
  424.     return
  425. #画图函数2,ui上点击按钮对应画图
  426. def out2_data(line,start=now_15ago,end=now):
  427.     '''
  428.     近1个月
  429.     停车分析,
  430.     1.次数柏拉图
  431.     2.时长sum柏拉图
  432.     3.时长mean柱状图图
  433.     top3箱图
  434.     '''
  435.     global savepath
  436.     df_s = pd.read_pickle((os.path.join(savepath, f'{line}stop.pkl')))
  437.     df_s['PRODUCTION_DATE'] = df_s['PRODUCTION_DATE'].astype(str).str[:10]
  438.     df_s.set_index('date', inplace=True)

  439.     # 筛选出近一个月的数据
  440.     df_s = df_s.loc[start:end]
  441.     # df_s['shichang'].dropna(inplace=True)
  442.     try:
  443.         # 筛选停车原因次数中的top3
  444.         top3list = df_s['STOP_REASON'].value_counts().head(3).index.tolist()
  445.         df_s_top1 = df_s[df_s['STOP_REASON'].isin([top3list[0]])]
  446.         title1 = top3list[0]
  447.         df_s_top1_count = df_s_top1.groupby('OPERATOR')['STOP_REASON'].agg('count').sort_values(ascending=False)
  448.         # top2的df
  449.         df_s_top2 = df_s[df_s['STOP_REASON'].isin([top3list[1]])]
  450.         title2 = top3list[1]
  451.         df_s_top2_count = df_s_top2.groupby('OPERATOR')['STOP_REASON'].agg('count').sort_values(ascending=False)
  452.         # top3的df
  453.         df_s_top3 = df_s[df_s['STOP_REASON'].isin([top3list[2]])]
  454.         title3 = top3list[2]
  455.         df_s_top3_count = df_s_top3.groupby('OPERATOR')['STOP_REASON'].agg('count').sort_values(ascending=False)
  456.     except Exception as e:
  457.         print(e,'停车种类不够三种')

  458.     plt.figure(facecolor='white', figsize=(16, 9))
  459.     sns.set(style="darkgrid")
  460.     plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  461.     plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  462.     ax1 = plt.subplot(231)
  463.     try:
  464.         df1 = df_s['STOP_REASON'].value_counts()
  465.         p1 = 1.0 * df1.cumsum() / df1.sum()
  466.         df1.plot(kind='bar', ax=ax1)
  467.         for i, v in enumerate(df1.values):
  468.             a = v.__str__().strip('[,]')
  469.             plt.text(i, v, a,
  470.                      ha='center',
  471.                      va='bottom',
  472.                      fontsize=12)
  473.         plt.ylabel(u"stop_count")
  474.         p1.plot(color='r', secondary_y=True, style='-o', linewidth=0.5, ax=ax1)
  475.         plt.annotate(format(p1[2], '.2%'), xy=(2, p1[2]), xytext=(2 * 0.9, p1[2] * 0.9),
  476.                      arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
  477.         plt.ylabel(u'count_rate')
  478.         for tick in ax1.get_xticklabels():
  479.             tick.set_rotation(45)
  480.             tick.set_horizontalalignment('right')
  481.         ax1.set_title(f'{line} Line stop_count\n', fontsize=18, fontweight='bold')
  482.     except Exception as e:
  483.         print('停车次数', e)
  484.     # ---------------------------
  485.     ax2 = plt.subplot(232)
  486.     try:
  487.         df2 = df_s.groupby('STOP_REASON')['STOP_TIME_HOUR'].agg('sum').sort_values(ascending=False)
  488.         # print(df2)
  489.         p2 = 1.0 * df2.cumsum() / df2.sum()
  490.         df2.plot(kind='bar', ax=ax2)
  491.         for i, v in enumerate(df2.values):
  492.             a = round(float(v.__str__().strip('[,]')), 1)
  493.             plt.text(i, v, a,
  494.                      ha='center',
  495.                      va='bottom',
  496.                      fontsize=12)
  497.         plt.ylabel(u"stop time_sum")
  498.         p2.plot(color='r', secondary_y=True, style='-o', linewidth=0.5, ax=ax2)
  499.         plt.annotate(format(p2[2], '.2%'), xy=(2, p2[2]), xytext=(2 * 0.9, p2[2] * 0.9),
  500.                      arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2'))
  501.         plt.ylabel(u'time_rate')
  502.         ax2.set_xlabel('')
  503.         for tick in ax2.get_xticklabels():
  504.             tick.set_rotation(45)
  505.             tick.set_horizontalalignment('right')
  506.         ax2.set_title(f'{line} Line stop_time/h\n', fontsize=18, fontweight='bold')
  507.     except Exception as e:
  508.         print('停车总时长', e)
  509.     ax3 = plt.subplot(233)
  510.     try:
  511.         df3 = df_s.groupby('STOP_REASON')['STOP_TIME_HOUR'].agg('mean').sort_values(ascending=False)
  512.         df3.plot(kind='bar', ax=ax3)
  513.         for i, v in enumerate(df3.values):
  514.             a = round(float(v.__str__().strip('[,]')), 1)
  515.             plt.text(i, v, a,
  516.                      ha='center',
  517.                      va='bottom',
  518.                      fontsize=12)
  519.         ax3.set_xlabel('')
  520.         plt.ylabel(u'stop time_ave/h')
  521.         for tick in ax3.get_xticklabels():
  522.             tick.set_rotation(45)
  523.             tick.set_horizontalalignment('right')
  524.         ax3.set_title(f'{line} Line stop time_ave/h\n', fontsize=18, fontweight='bold')
  525.     except Exception as e:
  526.         print('停车平均时长', e)
  527.     # ------------------------
  528.     ax4 = plt.subplot(234)
  529.     try:
  530.         df_s_top1_median = df_s_top1.groupby('OPERATOR')['STOP_TIME_HOUR'].median()
  531.         list1 = df_s_top1_median.index.tolist()
  532.         ax4 = sns.boxplot(
  533.             x='OPERATOR',
  534.             y='STOP_TIME_HOUR',
  535.             hue='OPERATOR',
  536.             data=df_s_top1,
  537.             order=list1
  538.         )
  539.         df_s_top1_25 = df_s_top1.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['25%']
  540.         df_s_top1_75 = df_s_top1.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['75%']
  541.         for i, v in enumerate(df_s_top1_median.values):
  542.             a = round(float(v.__str__().strip('[,]')), 1)
  543.             plt.text(i, v, a,
  544.                      ha='center',
  545.                      va='bottom',
  546.                      fontsize=12)
  547.         for i, v in enumerate(df_s_top1_25.values):
  548.             a = round(float(v.__str__().strip('[,]')), 1)
  549.             plt.text(i, v, a,
  550.                      ha='center',
  551.                      va='bottom',
  552.                      fontsize=12)
  553.         for i, v in enumerate(df_s_top1_75.values):
  554.             a = round(float(v.__str__().strip('[,]')), 1)
  555.             plt.text(i, v, a,
  556.                      ha='center',
  557.                      va='bottom',
  558.                      fontsize=12)
  559.         ax4.tick_params(axis='x', labelsize=15)
  560.         plt.title(f"TOP1:《{title1}》\n", fontsize=18, fontweight='bold')
  561.         plt.ylabel('')
  562.         plt.xlabel('')
  563.         plt.grid(axis='y', color='red', linestyle=':')
  564.     except Exception as e:
  565.         print(e)
  566.         # -------------------------------------------------------------
  567.     ax5 = plt.subplot(235)
  568.     try:
  569.         df_s_top2_median = df_s_top2.groupby('OPERATOR')['STOP_TIME_HOUR'].median()
  570.         list2 = df_s_top2_median.index.tolist()
  571.         ax5 = sns.boxplot(
  572.             x='OPERATOR',
  573.             y='STOP_TIME_HOUR',
  574.             hue='OPERATOR',
  575.             data=df_s_top2,
  576.             order=list2
  577.         )
  578.         df_s_top2_25 = df_s_top2.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['25%']
  579.         df_s_top2_75 = df_s_top2.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['75%']
  580.         for i, v in enumerate(df_s_top2_median.values):
  581.             a = round(float(v.__str__().strip('[,]')), 1)
  582.             plt.text(i, v, a,
  583.                      ha='center',
  584.                      va='bottom',
  585.                      fontsize=12)
  586.         for i, v in enumerate(df_s_top2_25.values):
  587.             a = round(float(v.__str__().strip('[,]')), 1)
  588.             plt.text(i, v, a,
  589.                      ha='center',
  590.                      va='bottom',
  591.                      fontsize=12)
  592.         for i, v in enumerate(df_s_top2_75.values):
  593.             a = round(float(v.__str__().strip('[,]')), 1)
  594.             plt.text(i, v, a,
  595.                      ha='center',
  596.                      va='bottom',
  597.                      fontsize=12)
  598.         ax5.tick_params(axis='x', labelsize=15)
  599.         plt.title(f"TOP2:《{title2}》\n", fontsize=18, fontweight='bold')
  600.         plt.ylabel('')
  601.         plt.xlabel('')
  602.         plt.grid(axis='y', color='red', linestyle=':')
  603.     except Exception as e:
  604.         print(e)
  605.         # ----------------------------------------------------------
  606.     ax6 = plt.subplot(236)
  607.     try:
  608.         df_s_top3_median = df_s_top3.groupby('OPERATOR')['STOP_TIME_HOUR'].median()
  609.         list3 = df_s_top3_median.index.tolist()
  610.         ax6 = sns.boxplot(
  611.             x='OPERATOR',
  612.             y='STOP_TIME_HOUR',
  613.             hue='OPERATOR',
  614.             data=df_s_top3,
  615.             order=list3)
  616.         df_s_top3_25 = df_s_top3.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['25%']
  617.         df_s_top3_75 = df_s_top3.groupby('OPERATOR')['STOP_TIME_HOUR'].describe()['75%']
  618.         for i, v in enumerate(df_s_top3_median.values):
  619.             a = round(float(v.__str__().strip('[,]')), 1)
  620.             plt.text(i, v, a,
  621.                      ha='center',
  622.                      va='bottom',
  623.                      fontsize=12)
  624.         for i, v in enumerate(df_s_top3_25.values):
  625.             a = round(float(v.__str__().strip('[,]')), 1)
  626.             plt.text(i, v, a,
  627.                      ha='center',
  628.                      va='bottom',
  629.                      fontsize=12)
  630.         for i, v in enumerate(df_s_top3_75.values):
  631.             a = round(float(v.__str__().strip('[,]')), 1)
  632.             plt.text(i, v, a,
  633.                      ha='center',
  634.                      va='bottom',
  635.                      fontsize=12)
  636.         ax6.tick_params(axis='x', labelsize=15)
  637.         plt.title(f"TOP3:《{title3}》\n", fontsize=18, fontweight='bold')
  638.         plt.ylabel('')
  639.         plt.xlabel('')
  640.         plt.grid(axis='y', color='red', linestyle=':')
  641.     except Exception as e:
  642.         print(e)
  643.     plt.tight_layout()
  644.     plt.show()
  645.     return
  646. #画图函数3,ui上点击按钮对应画图
  647. def out3_data(line,start=now_15ago,end=now):
  648.     '''
  649.     按钮三种的数据都是默认筛选近15天的数据
  650.     1.段长饼图----》fg
  651.     2.run time饼图/人之间的关系----》per
  652.     3.轴长度直方图----》fg
  653.     4.run time直方图----》per
  654.     '''
  655.     global savepath
  656.     df_fg = pd.read_pickle(os.path.join(savepath, f'{line}fg.pkl'))
  657.     df_fg.set_index('date', inplace=True)
  658.     df_fg = df_fg.loc[start:end]
  659.     df_fg['PRODUCTION_DATE'] = df_fg['PRODUCTION_DATE'].astype(str).str[:10]

  660.     df_per = pd.read_pickle(os.path.join(savepath, f'{line}per.pkl'))
  661.     df_per.set_index('date', inplace=True)
  662.     df_per = df_per.loc[start:end]
  663.     df_per['PRODUCTION_DATE'] = df_per['PRODUCTION_DATE'].astype(str).str[:10]

  664.     # 筛选出近一个月的数据
  665.     df_p = df_per.loc[start:end]
  666.     df_fg = df_fg.loc[start:end]
  667.     plt.figure(facecolor='white', figsize=(16, 9))
  668.     sns.set(style="darkgrid")
  669.     plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  670.     plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

  671.     ax1 = plt.subplot(221)
  672.     try:
  673.         tu_1 = df_fg['段长'].value_counts()
  674.         ax1 = tu_1.plot(kind='pie',
  675.                         subplots=True,
  676.                         # labels=labels,
  677.                         # explode=(0,0.1,0,0),#突显
  678.                         autopct=lambda x: my_label(x, tu_1),
  679.                         # 设置百分比格式,保留一位#autopct=lambda x: my_label(x,data)
  680.                         # autopct='%.1f%%',  # 设置百分比格式,保留一位
  681.                         pctdistance=0.8,  # 设置百分比与圆心的距离
  682.                         startangle=90,  # 设置饼图的开始角度
  683.                         radius=1,  # 设置饼图的半径
  684.                         counterclock=False,  # 是否逆时针,false是顺时针
  685.                         shadow=False,  # 无阴影设置
  686.                         labeldistance=1.1,  # 默认1.1
  687.                         # rotatelabels=True# True,标签放线是沿半径方向
  688.                         textprops={'fontsize': 13}
  689.                         )
  690.         plt.axis('scaled')  # 'tight''scaled'
  691.         plt.ylabel('')
  692.         plt.xlabel('')
  693.         plt.title(f'{start}~{end}\n{line} Line 段长分布饼图\n', fontsize=18, fontweight='bold')
  694.     except Exception as e:
  695.         print('段长分布饼图',e)
  696.     ax2 = plt.subplot(222)
  697.     try:
  698.         tu_2 = df_p.groupby('OPERATOR')['RUN_TIME_HOUR'].agg('sum').sort_values(ascending=True)
  699.         ax2=tu_2.plot(kind='pie',
  700.                            subplots=True,
  701.                            # labels=labels,
  702.                            # explode=(0,0.1,0,0),#突显
  703.                            autopct=lambda x: my_label(x, tu_2),  # 设置百分比格式,保留一位#autopct=lambda x: my_label(x,data)
  704.                            # autopct='%.1f%%',  # 设置百分比格式,保留一位
  705.                            pctdistance=0.8,  # 设置百分比与圆心的距离
  706.                            startangle=90,  # 设置饼图的开始角度
  707.                            radius=1,  # 设置饼图的半径
  708.                            counterclock=True,  # 是否逆时针,false是顺时针
  709.                            shadow=False,  # 无阴影设置
  710.                            labeldistance=1.1,  # 默认1.1
  711.                            # rotatelabels=True# True,标签放线是沿半径方向
  712.                            textprops={'fontsize': 13}
  713.                            )
  714.         plt.axis('scaled')  # 'tight''scaled'
  715.         plt.ylabel('')
  716.         plt.xlabel('')
  717.         plt.title('\n Run_Time VS 人员分布饼图\n', fontsize=18, fontweight='bold')
  718.     except Exception as e:
  719.         print('runtime饼图',e)
  720.     ax3 = plt.subplot(223)
  721.     try:
  722.         tu_3 = df_fg
  723.         ax3 = sns.distplot(
  724.             tu_3['COIL_LENGTH'],
  725.             bins='auto', ##auto,fd,doane,scott,stone,rice,sturges,sqrt
  726.             hist=True,
  727.             rug=False)
  728.         ax3.tick_params(axis='x', labelsize=13)
  729.         ax3.tick_params(axis='y', labelsize=13)
  730.         plt.xlabel('轴长度 / m',fontsize=15)
  731.         plt.title( '\n轴长度直方图\n',fontsize=18, fontweight='bold')
  732.     except Exception as e:
  733.         print('段长分布直方图',e)
  734.     ax4 = plt.subplot(224)
  735.     try:
  736.         tu_8 = df_p
  737.         ax4=sns.distplot(
  738.                 tu_8['RUN_TIME_HOUR'],
  739.                 bins='auto',
  740.                 hist=True,
  741.                 rug=False)
  742.         ax4.tick_params(axis='x', labelsize=13)
  743.         ax4.tick_params(axis='x', labelsize=13)
  744.         plt.xlabel('run_time / h',fontsize=15)
  745.         plt.title('\n Run_Time 直方图\n',fontsize=18, fontweight='bold')
  746.     except Exception as e:
  747.         print('runtime直方图',e)
  748.     plt.tight_layout()
  749.     plt.show()
  750.     return
  751. #画图函数4,ui上点击按钮对应画图
  752. def out4_data(start=now_30ago,end=now):
  753.     '''
  754.     1.每条产线段长箱图
  755.     2.每条产线的runtime箱图
  756.     3.每条产线的oee箱图
  757.     4. 每条产线的top3停车时长之和占总的监控运行时间占比饼图
  758.     5.每个人OEE箱图

  759.     '''
  760.     df_p = pd.read_pickle(os.path.join(savepath, 'per2021_all.pkl'))
  761.     df_p.set_index('date',inplace=True)
  762.     #计算运行时间
  763.     df_p = df_p.loc[start:end]
  764.     yunxingshijian = df_p.groupby('line')['TOTAL_TIME_HOUR'].agg('sum')
  765.     # print(yunxingshijian)

  766.     df_fg = pd.read_pickle(os.path.join(savepath, 'fg2021_all.pkl'))
  767.     df_fg.set_index('date', inplace=True)
  768.     df_fg = df_fg.loc[start:end]

  769.     df_s = pd.read_pickle(os.path.join(savepath, 'stop2021_all.pkl'))
  770.     df_s.set_index('date',inplace=True)
  771.     df_s = df_s.loc[start:end][['line','STOP_REASON','STOP_TIME_HOUR']]
  772.     # print(df_s.info())
  773.     df_s['计数'] = df_s.groupby(['line','STOP_REASON']).transform('count')
  774.     #按照产线和原因分组,按照次数的top3进行时长求和
  775.     df_s1 = df_s.groupby(['line', 'STOP_REASON', '计数']).sum().groupby('line', as_index=False).apply(
  776.         lambda x: x.sort_values('计数', ascending=False).head(3))
  777.     #每条线前三的时长之和
  778.     df_s2 = df_s1.groupby('line')['STOP_TIME_HOUR'].agg('sum')

  779.     df_s3 = pd.concat([yunxingshijian,df_s2],axis=1)
  780.     df_s3.reset_index(inplace=True)
  781.     df_s3['tingchezhanbi']=df_s3['STOP_TIME_HOUR']/df_s3['TOTAL_TIME_HOUR']
  782.     # print(df_s3)
  783.     # df_s3.to_excel('2.xlsx')
  784.     # y = df_s2.values/yunxingshijian.values
  785.     # x = yunxingshijian.index.tolist()
  786.     # print(x)
  787.     # print(y)

  788.     plt.figure(facecolor='white', figsize=(16, 9))
  789.     sns.set(style="darkgrid")
  790.     plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  791.     plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
  792.     ax1 = plt.subplot(241)
  793.     try:
  794.         ax1 = sns.boxplot(
  795.                 x='line',
  796.                 y='COIL_LENGTH',
  797.                 data=df_fg,
  798.                 order=['A','B', 'C', 'CB','CCV'])
  799.         tu_1 = df_fg.groupby('line')['COIL_LENGTH'].median()
  800.         # print(tu_13)
  801.         tu_1_ = df_fg.groupby('line')['COIL_LENGTH'].describe()['25%']
  802.         tu_1__ = df_fg.groupby('line')['COIL_LENGTH'].describe()['75%']
  803.         for i, v in enumerate(tu_1.values):
  804.             a = round(float(v.__str__().strip('[,]')), 1)
  805.             plt.text(i, v, a,
  806.                          ha='center',
  807.                          va='bottom',
  808.                          fontsize=12)
  809.         for i, v in enumerate(tu_1_.values):
  810.                 a = round(float(v.__str__().strip('[,]')), 1)
  811.                 plt.text(i, v, a,
  812.                          ha='center',
  813.                          va='bottom',
  814.                          fontsize=12)
  815.         for i, v in enumerate(tu_1__.values):
  816.                 a = round(float(v.__str__().strip('[,]')), 1)
  817.                 plt.text(i, v, a,
  818.                          ha='center',
  819.                          va='bottom',
  820.                          fontsize=12)
  821.         ax1.tick_params(axis='x', labelsize=18)
  822.         ax1.tick_params(axis='y', labelsize=16)
  823.         plt.xlabel('')
  824.         plt.ylabel('coil_lenth/m', fontsize=18, fontweight='bold')
  825.         ax1.set_title(f'\n{start}-{end}\nCoil_Length vs Line\n', fontsize=24, fontweight='bold')
  826.     except Exception as e:
  827.         print('轴段长箱图',e)
  828.     ax2 = plt.subplot(242)
  829.     try:
  830.         ax2 = sns.boxplot(
  831.             x='line',
  832.             y='RUN_TIME_HOUR',
  833.             data=df_p,
  834.             order=['A', 'B', 'C', 'CB', 'CCV'])
  835.         tu_2 = df_p.groupby('line')['RUN_TIME_HOUR'].median()
  836.         # print(tu_14)
  837.         tu_2_ = df_p.groupby('line')['RUN_TIME_HOUR'].describe()['25%']
  838.         tu_2__ = df_p.groupby('line')['RUN_TIME_HOUR'].describe()['75%']
  839.         for i, v in enumerate(tu_2.values):
  840.             a = round(float(v.__str__().strip('[,]')), 1)
  841.             plt.text(i, v, a,
  842.                      ha='center',
  843.                      va='bottom',
  844.                      fontsize=12)
  845.         for i, v in enumerate(tu_2_.values):
  846.             a = round(float(v.__str__().strip('[,]')), 1)
  847.             plt.text(i, v, a,
  848.                      ha='center',
  849.                      va='bottom',
  850.                      fontsize=12)

  851.         for i, v in enumerate(tu_2__.values):
  852.             a = round(float(v.__str__().strip('[,]')), 1)
  853.             plt.text(i, v, a,
  854.                      ha='center',
  855.                      va='bottom',
  856.                      fontsize=12)
  857.         ax2.tick_params(axis='x', labelsize=18)
  858.         ax2.tick_params(axis='y', labelsize=16)
  859.         plt.xlabel('')
  860.         plt.ylabel('run_time/h', fontsize=18, fontweight='bold')
  861.         ax2.set_title('\nRun_Time vs Line\n', fontsize=24, fontweight='bold')
  862.     except Exception as e:
  863.         print('runtime箱图',e)
  864.     ax3 = plt.subplot(243)
  865.     try:
  866.         ax3 = sns.boxplot(
  867.             x='line',
  868.             y='OEE',
  869.             data=df_p,
  870.             order=['A', 'B', 'C', 'CB', 'CCV'])
  871.         tu_3 = df_p.groupby('line')['OEE'].median()
  872.         tu_3_ = df_p.groupby('line')['OEE'].describe()['25%']
  873.         tu_3__ = df_p.groupby('line')['OEE'].describe()['75%']
  874.         for i, v in enumerate(tu_3.values):
  875.             a = float(v.__str__().strip('[,]'))
  876.             b = '%.01f%%' % (a * 100)
  877.             # print(a,type(a))
  878.             plt.text(i, v, b,
  879.                      ha='center',
  880.                      va='bottom',
  881.                      fontsize=12)
  882.         for i, v in enumerate(tu_3_.values):
  883.             a = float(v.__str__().strip('[,]'))
  884.             b = '%.01f%%' % (a * 100)
  885.             # print(a,type(a))
  886.             plt.text(i, v, b,
  887.                      ha='center',
  888.                      va='bottom',
  889.                      fontsize=12)
  890.         for i, v in enumerate(tu_3__.values):
  891.             a = float(v.__str__().strip('[,]'))
  892.             b = '%.01f%%' % (a * 100)
  893.             # print(a,type(a))
  894.             plt.text(i, v, b,
  895.                      ha='center',
  896.                      va='bottom',
  897.                      fontsize=12)
  898.         ax3.tick_params(axis='x', labelsize=18)
  899.         ax3.tick_params(axis='y', labelsize=16)
  900.         # ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
  901.         plt.ylim(0, 1.2)
  902.         plt.xlabel('')
  903.         plt.ylabel('OEE/%', fontsize=18, fontweight='bold')
  904.         ax3.set_title('\nOEE vs Line\n', fontsize=24, fontweight='bold')
  905.     except Exception as e:
  906.         print('OEE箱图',e)

  907.     ax4 = plt.subplot(244)
  908.     try:
  909.         axx=sns.barplot(x='line',
  910.                     y='tingchezhanbi',
  911.                     data=df_s3,
  912.                     ci=0,
  913.                     # color='blue',
  914.                     ax=ax4)

  915.         for p in axx.patches:
  916.             height = p.get_height()
  917.             axx.text(x=p.get_x(),
  918.                      y=height+0.02,
  919.                      s='%.01f%%' % (height * 100),
  920.                      color='black',
  921.                      size=12)
  922.         # plt.xticks(ha='right', rotation=45)
  923.         # plt.ylim(0.6, 1.2)
  924.         ax4.tick_params(axis='x', labelsize=18)
  925.         ax4.tick_params(axis='y', labelsize=16)
  926.         plt.xlabel('')
  927.         plt.ylabel('top3 停车/运行时间', fontsize=16, fontweight='bold')
  928.         ax4.set_title('\nTop3停车占系统运行时间\n', fontsize=24, fontweight='bold')

  929.     # try:
  930.     #     plt.bar(x,y,color=["brown", "green", "red", "grey", "purple"],alpha=0.8)
  931.     #     for a,b in zip(x,y):
  932.     #         ax4.text(a,b+0.02,'%.01f%%' % (b * 100),
  933.     #                  ha='center',
  934.     #                  va='bottom',
  935.     #                  fontsize=12)
  936.     #     ax4.tick_params(axis='x', labelsize=18)
  937.     #     ax4.tick_params(axis='y', labelsize=16)
  938.     #     plt.ylim(0,1.0)
  939.     #     plt.xlabel('')
  940.     #     plt.ylabel('top3 stop/sys total time%', fontsize=18, fontweight='bold')
  941.     #     plt.title('\ntop3stop/sys total time\n', fontsize=24, fontweight='bold')
  942.     except Exception as e:
  943.         print('三大停车时间/运行时间占比',e)

  944.     ax5 = plt.subplot(212)
  945.     try:
  946.         tu_5_ = df_p.groupby('OPERATOR')['OEE'].describe()
  947.         order_list = tu_5_.index.tolist()
  948.         ax = sns.boxplot(x='OPERATOR',
  949.                          y='OEE',
  950.                          data=df_p,
  951.                          order=order_list
  952.                          )
  953.         tu_5 = df_p.groupby('OPERATOR')['OEE'].median()
  954.         tu_5_ = df_p.groupby('OPERATOR')['OEE'].describe()['25%']
  955.         tu_5__ = df_p.groupby('OPERATOR')['OEE'].describe()['75%']
  956.         for i, v in enumerate(tu_5.values):
  957.             a = float(v.__str__().strip('[,]'))
  958.             b = '%.01f%%' % (a * 100)
  959.             # print(a,type(a))
  960.             plt.text(i, v, b,
  961.                      ha='center',
  962.                      va='bottom',
  963.                      fontsize=12)
  964.         for i, v in enumerate(tu_5_.values):
  965.             a = float(v.__str__().strip('[,]'))
  966.             b = '%.01f%%' % (a * 100)
  967.             # print(a,type(a))
  968.             plt.text(i, v, b,
  969.                      ha='center',
  970.                      va='bottom',
  971.                      fontsize=12)
  972.         for i, v in enumerate(tu_5__.values):
  973.             a = float(v.__str__().strip('[,]'))
  974.             b = '%.01f%%' % (a * 100)
  975.             # print(a,type(a))
  976.             plt.text(i, v, b,
  977.                      ha='center',
  978.                      va='bottom',
  979.                      fontsize=12)
  980.         ax5.tick_params(axis='x', labelsize=18)
  981.         ax5.tick_params(axis='y', labelsize=16)
  982.         ax.set_xticklabels(ax.get_xticklabels(), rotation=45)
  983.         plt.ylim(0, 1.2)
  984.         plt.xlabel('')
  985.         plt.ylabel('OEE/%', fontsize=16, fontweight='bold')
  986.         plt.title('\nOEE vs Stuff\n', fontsize=24, fontweight='bold')
  987.     except Exception as e:
  988.         print('OEE个人箱图',e)
  989.     plt.tight_layout()
  990.     plt.show()
  991.     return df_s1
  992. #画图函数5,ui上点击按钮对应画图
  993. def out11_data(line,start,end):
  994.     '''
  995.     1.白班和夜班的速度效率(速度效率---per)
  996.     2.白班和夜班FTQ(质量生产判定---fg)
  997.     3.白班和夜班RUN_TIME(runtime---per)
  998.     4.白班和夜班OEE(oee---per)
  999.     5.15天产量(real_length---fg)
  1000.     6.runtime饼图(runtime---per)
  1001.     '''
  1002.     global savepath
  1003.     df_fg = pd.read_pickle(os.path.join(savepath, f'{line}fg.pkl'))
  1004.     df_fg.set_index('date', inplace=True)
  1005.     df_fg = df_fg.loc[start:end]
  1006.     df_fg['PRODUCTION_DATE'] = df_fg['PRODUCTION_DATE'].astype(str).str[:10]
  1007.     # print(df_fg)

  1008.     # df_per = pd.read_excel(os.path.join(savepath, f'{line}per.xlsx'))
  1009.     df_per = pd.read_pickle(os.path.join(savepath, f'{line}per.pkl'))
  1010.     df_per.set_index('date', inplace=True)
  1011.     df_per = df_per.loc[start:end]
  1012.     df_per['PRODUCTION_DATE']=df_per['PRODUCTION_DATE'].astype(str).str[:10]
  1013.     # print(df_per)

  1014.     df_stop = pd.read_pickle((os.path.join(savepath, f'{line}stop.pkl')))
  1015.     df_stop['PRODUCTION_DATE'] = df_stop['PRODUCTION_DATE'].astype(str).str[:10]
  1016.     df_stop.set_index('date', inplace=True)


  1017.     #----------------------------------------------------
  1018.     plt.figure(facecolor='white', figsize=(16, 9))
  1019.     sns.set(style="darkgrid")
  1020.     plt.rcParams['font.sans-serif'] = ['STZhongsong']  # 中文字体设置-黑体
  1021.     plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题

  1022.     try:
  1023.         ax1 = plt.subplot(231)
  1024.         sns.lineplot(x='PRODUCTION_DATE',
  1025.                    y='SPEED_EFFICIENCY',
  1026.                    data=df_per,
  1027.                    hue='SHIFT',
  1028.                     marker='*',
  1029.                    ax=ax1)
  1030.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['SPEED_EFFICIENCY']):
  1031.             if y<0.95:
  1032.                 plt.text(x=x,y=y+0.02,s='%.01f%%' % (y * 100),color='red',size=14)

  1033.         plt.xticks(ha='right', rotation=45)
  1034.         plt.ylim(0, 1.2)
  1035.         plt.xticks(fontsize=13)
  1036.         plt.yticks(fontsize=13)
  1037.         plt.xlabel('')
  1038.         plt.ylabel('速度效率 / %', fontsize=14, fontweight='bold')
  1039.         ax1.set_title(f'{line} Line 15天 速度效率 %\n', fontsize=18, fontweight='bold')
  1040.     except Exception as e:
  1041.         print(e,'15天 速度效率')

  1042.     ax2 = plt.subplot(232)
  1043.     try:
  1044.         zongshu = df_fg.groupby(['PRODUCTION_DATE', 'PRODUCTION_SHIFT'], as_index=False)['itp'].agg('count')
  1045.         df_fg_hege = df_fg[df_fg['itp'] == 'False']
  1046.         hegeshu = df_fg_hege.groupby(['PRODUCTION_DATE','PRODUCTION_SHIFT'],as_index=False)['itp'].agg('count')
  1047.         df_ftq = pd.concat([zongshu,hegeshu],axis=1)
  1048.         df_ftq.columns = ['PRODUCTION_DATE','PRODUCTION_SHIFT','zongshu','date','SHIFT','hegeshu']
  1049.         df_ftq['FTQ']=df_ftq['hegeshu']/df_ftq['zongshu']
  1050.         # print(df_ftq)
  1051.         sns.lineplot(x='PRODUCTION_DATE',
  1052.                      y='FTQ',
  1053.                      data=df_ftq,
  1054.                      hue='SHIFT',
  1055.                      marker='*',
  1056.                      ax=ax2)
  1057.         for x,y in zip(df_ftq['PRODUCTION_DATE'],df_ftq['FTQ']):
  1058.             if y<0.1:
  1059.                 plt.text(x=x,y=y+0.02,s='%.01f%%' % (y * 100),color='red',size=14)

  1060.         plt.xticks(ha='right', rotation=45)
  1061.         plt.ylim(0.6, 1.2)
  1062.         plt.xticks(fontsize=13)
  1063.         plt.yticks(fontsize=13)
  1064.         plt.xlabel('')
  1065.         plt.ylabel('FTQ / %', fontsize=14, fontweight='bold')
  1066.         ax2.set_title(f'{line} Line 15天 FTQ %\n', fontsize=18, fontweight='bold')
  1067.     except Exception as e:
  1068.         print(e,'15天 FTQ')
  1069.     ax3 = plt.subplot(233)
  1070.     try:
  1071.         sns.lineplot(x='PRODUCTION_DATE',
  1072.                      y='RUN_TIME_HOUR',
  1073.                      data=df_per,
  1074.                      hue='SHIFT',
  1075.                      marker='*',
  1076.                      ax=ax3)
  1077.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['RUN_TIME_HOUR']):
  1078.             plt.text(x=x,y=y,s=round(y,1),color='red',size=14)

  1079.         plt.xticks(ha='right', rotation=45)
  1080.         # plt.ylim(0.6, 1.2)
  1081.         plt.xticks(fontsize=13)
  1082.         plt.yticks(fontsize=13)
  1083.         plt.xlabel('')
  1084.         plt.ylabel('run_time / h', fontsize=14, fontweight='bold')
  1085.         ax3.set_title(f'{line} Line 15天 Run_Time h\n', fontsize=18, fontweight='bold')
  1086.     except Exception as e:
  1087.         print(e,'15天 Run_Time')

  1088.     ax4 = plt.subplot(234)
  1089.     try:
  1090.         sns.lineplot(x='PRODUCTION_DATE',
  1091.                      y='OEE',
  1092.                      data=df_per,
  1093.                      hue='SHIFT',
  1094.                      marker='*',
  1095.                      ax=ax4)
  1096.         for x,y in zip(df_per['PRODUCTION_DATE'],df_per['OEE']):
  1097.             plt.text(x=x,y=y,s='%.01f%%' % (y * 100),color='red',size=14)

  1098.         plt.xticks(ha='right', rotation=45)
  1099.         # plt.ylim(0.6, 1.2)
  1100.         plt.xticks(fontsize=13)
  1101.         plt.yticks(fontsize=13)
  1102.         plt.xlabel('')
  1103.         plt.ylabel('OEE / %', fontsize=14, fontweight='bold')
  1104.         ax4.set_title(f'{line} Line 15天 OEE %\n', fontsize=18, fontweight='bold')
  1105.     except Exception as e:
  1106.         print(e,'15天 OEE')

  1107.     ax5 = plt.subplot(235)
  1108.     try:
  1109.         ax = sns.barplot(x='PRODUCTION_DATE',
  1110.                          y='TOTAL_LENGTH',
  1111.                          data=df_per,
  1112.                          hue='SHIFT',
  1113.                          ci=0,
  1114.                          ax=ax5)
  1115.         for p in ax.patches:
  1116.             height = p.get_height()
  1117.             ax.text(x=p.get_x() ,
  1118.                     y=height + 2,
  1119.                     s='{: .0f}m'.format(height), color='red', size=14)
  1120.         plt.xticks(ha='right', rotation=45)
  1121.         # plt.ylim(0.6, 1.2)
  1122.         plt.xticks(fontsize=13)
  1123.         plt.yticks(fontsize=13)
  1124.         plt.xlabel('')
  1125.         plt.ylabel('length / m', fontsize=14, fontweight='bold')
  1126.         ax5.set_title(f'{line} Line 15天 产量/ m\n', fontsize=18, fontweight='bold')
  1127.     except Exception as e:
  1128.         print(e,'15天 产量')
  1129.     #############################################
  1130.     ax6 = plt.subplot(236)
  1131.     try:
  1132.         bing = df_per.groupby('SHIFT')['RUN_TIME_HOUR'].agg('sum').sort_values(ascending=True)
  1133.         ax6 = bing.plot(kind='pie',
  1134.                         subplots=True,
  1135.                         # labels=labels,
  1136.                         # explode=(0,0.1,0,0),#突显
  1137.                         # autopct='%.1f%%',  # 设置百分比格式,保留一位
  1138.                         autopct=lambda x: my_label(x, bing),
  1139.                         pctdistance=0.8,  # 设置百分比与圆心的距离
  1140.                         startangle=90,  # 设置饼图的开始角度
  1141.                         radius=1,  # 设置饼图的半径
  1142.                         counterclock=True,  # 是否逆时针,false是顺时针
  1143.                         shadow=False,  # 无阴影设置
  1144.                         labeldistance=1.1,  # 默认1.1
  1145.                         # rotatelabels=True# True,标签放线是沿半径方向
  1146.                         textprops={'fontsize': 13}
  1147.                         )
  1148.         plt.axis('scaled')  # 'tight''scaled'
  1149.         plt.ylabel('')
  1150.         plt.xlabel('')
  1151.         plt.title('\n15天白夜班开车时间占比\n', fontsize=18, fontweight='bold')
  1152.     except Exception as e:
  1153.         print(e,'15天白夜班开车时间占比')
  1154.     plt.tight_layout()
  1155.     plt.show()
  1156.     return

复制代码



下边是ui的py文件
ui上有各数据加载的按钮,点击加载按钮,调用database文件中的3个合并文件的函数
其他的按钮就是对应出图的


  1. from PyQt5.QtCore import *
  2. from PyQt5.QtWidgets import *
  3. from PyQt5.uic import loadUiType
  4. from threading import Thread
  5. import database as db
  6. import datetime

  7. now = datetime.datetime.now().strftime('%Y-%m-%d')
  8. now_15ago=(datetime.datetime.now()-datetime.timedelta(days=14)).strftime('%Y-%m-%d')
  9. now_1ago=(datetime.datetime.now()-datetime.timedelta(days=1)).strftime('%Y-%m-%d')



  10. #UI--Logic分离
  11. ui,_ = loadUiType('main_2021new.ui')

  12. class Signal_progressbar(QObject):
  13.     progress_update = pyqtSignal(int)
  14. #实例化信号
  15. so = Signal_progressbar()
  16. class Mainapp(QMainWindow,ui):

  17.     #定义构造方法
  18.     def __init__(self):
  19.         QMainWindow.__init__(self)
  20.         self.setupUi(self)
  21.         self.handle_ui_change()
  22.         self.handle_buttons()
  23.         so.progress_update.connect(self.setProgress)
  24.         self.hebing_progressBar.setRange(0, 4)
  25.         self.ongoing = False
  26.         self.jishu_dateEdit.setDate(QDate.currentDate())
  27.         self.kaishi_dateEdit.setDate(QDate.fromString(now_15ago, "yyyy-MM-dd"))

  28.     # UI变化处理
  29.     def handle_ui_change(self):
  30.         self.tabWidget.tabBar().setVisible(True)

  31.     # 处理所按钮的消息与槽的通信
  32.     def handle_buttons(self):
  33.         self.queding_pushButton.clicked.connect(self.hebing_click)
  34.         self.tuichu_pushButton.clicked.connect(QCoreApplication.quit)

  35.         self.a1_pushButton.clicked.connect(lambda: self.out1_click('A'))
  36.         self.b1_pushButton.clicked.connect(lambda: self.out1_click('B'))
  37.         self.c1_pushButton.clicked.connect(lambda: self.out1_click('C'))
  38.         self.cb1_pushButton.clicked.connect(lambda: self.out1_click('CB'))
  39.         self.ccv1_pushButton.clicked.connect(lambda: self.out1_click('CCV'))

  40.         self.a2_pushButton.clicked.connect(lambda: self.out2_click('A'))
  41.         self.b2_pushButton.clicked.connect(lambda: self.out2_click('B'))
  42.         self.c2_pushButton.clicked.connect(lambda: self.out2_click('C'))
  43.         self.cb2_pushButton.clicked.connect(lambda: self.out2_click('CB'))
  44.         self.ccv2_pushButton.clicked.connect(lambda: self.out2_click('CCV'))

  45.         self.aa1_pushButton.clicked.connect(lambda: self.out11_click('A'))
  46.         self.bb1_pushButton.clicked.connect(lambda: self.out11_click('B'))
  47.         self.cc1_pushButton.clicked.connect(lambda: self.out11_click('C'))
  48.         self.cbcb1_pushButton.clicked.connect(lambda: self.out11_click('CB'))
  49.         self.ccvccv1_pushButton.clicked.connect(lambda: self.out11_click('CCV'))

  50.         self.aa2_pushButton.clicked.connect(lambda: self.out2_click('A'))
  51.         self.bb2_pushButton.clicked.connect(lambda: self.out2_click('B'))
  52.         self.cc2_pushButton.clicked.connect(lambda: self.out2_click('C'))
  53.         self.cbcb2_pushButton.clicked.connect(lambda: self.out2_click('CB'))
  54.         self.ccvccv2_pushButton.clicked.connect(lambda: self.out2_click('CCV'))

  55.         self.aa3_pushButton.clicked.connect(lambda: self.out3_click('A'))
  56.         self.bb3_pushButton.clicked.connect(lambda: self.out3_click('B'))
  57.         self.cc3_pushButton.clicked.connect(lambda: self.out3_click('C'))
  58.         self.cbcb3_pushButton.clicked.connect(lambda: self.out3_click('CB'))
  59.         self.ccvccv3_pushButton.clicked.connect(lambda: self.out3_click('CCV'))

  60.         self.box_pushButton.clicked.connect(lambda: self.out4_click())


  61.     def kaishi_jieshu_click(self):
  62.         start = self.kaishi_dateEdit.text()
  63.         end = self.jishu_dateEdit.text()
  64.         print(start,end)
  65.         return (start,end)

  66.     def hebing_click(self):
  67.         try:
  68.             def workerThread():
  69.                 self.ongoing = True
  70.                 self.hebing_progressBar.setRange(0, 3)
  71.                 db.concat_file_per()
  72.                 so.progress_update.emit(1)
  73.                 db.concat_file_fg()
  74.                 so.progress_update.emit(2)
  75.                 db.concat_file_stop()
  76.                 so.progress_update.emit(3)
  77.                 self.ongoing = False
  78.             if self.ongoing:
  79.                 QMessageBox.warning(self.window(), '警告', '任务进行中,请等待完成')
  80.                 return
  81.             worker = Thread(target=workerThread)
  82.             worker.start()
  83.         except Exception as e:
  84.             print(e)

  85.     def setProgress(self, value):
  86.         self.hebing_progressBar.setValue(value)

  87.     def out1_click(self,line):#近15天
  88.         db.out1_data(line,start=now_15ago,end=now,now_1=now_1ago)

  89.     def out2_click(self,line):
  90.         start, end = self.kaishi_jieshu_click()
  91.         db.out2_data(line,start,end)

  92.     def out11_click(self,line):
  93.         start, end = self.kaishi_jieshu_click()
  94.         db.out11_data(line,start,end)
  95.     def out3_click(self,line):
  96.         start, end = self.kaishi_jieshu_click()
  97.         db.out3_data(line,start,end)

  98.     def out4_click(self):
  99.         start, end = self.kaishi_jieshu_click()
  100.         db.out4_data(start,end)


  101. def main():
  102.     app = QApplication([])
  103.     window = Mainapp()
  104.     window.show()
  105.     app.exec_()


  106. if __name__ == '__main__':
  107.     main()
复制代码


@hrp
搜狗截图20210121154931.png

评分

参与人数 1贡献 +3 收起 理由
aaron.yang + 3

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-1-21 15:55:20 | 显示全部楼层
打包命令是 pyinstaller -w -D xxx.py
形成的文件夹下多个文件的形式。
问题是:
首次双击exe打开时,启动时间比较久。我打开了任务管理器后。
给其他人电脑(没有python)启动时,时间快10s了,令人发指。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-21 15:58:57 | 显示全部楼层
各位帮忙看看哪款还有优化空间。
或者怎么写才更python
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 21:27:49 From FishC Mobile | 显示全部楼层
rsj0315 发表于 2021-1-21 15:58
各位帮忙看看哪款还有优化空间。
或者怎么写才更python

你的代码好长啊,不大想看了 = =
可以找找论坛里别的打包 exe 的方法,以前似乎发过一个方案但我忘记了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 21:54:29 | 显示全部楼层
本帖最后由 hrp 于 2021-1-21 23:33 编辑
rsj0315 发表于 2021-1-21 15:58
各位帮忙看看哪款还有优化空间。
或者怎么写才更python


目前粗略测试发现matplotlib和seaborn和pandas这三个包导入比较慢,加起来占2~3秒时间,matplotlib和seaborn占大头。
其中seaborn是对matplotlib的封装,如果可能的话把它们其中之一干掉,全部用另一个来实现功能,可以节省不少启动时间。
还有就是python环境安装太多的包,打包的时候会带入其他不需要的库,所以尝试用Anaconda3创建一个干净的虚拟python环境,只安装需要的包再打包,可能启动耗时会有好转。

anaconda3-py38.png

pyi-py38.png


技术水平有限,实在不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-21 23:59:58 | 显示全部楼层
这么厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-22 08:25:20 | 显示全部楼层
hrp 发表于 2021-1-21 21:54
目前粗略测试发现matplotlib和seaborn和pandas这三个包导入比较慢,加起来占2~3秒时间,matplotlib和se ...

收到感谢,画图的两个包去掉一个的话,估计也是seaborn,但是全matplotlib也画风也忒单调了。
我准备尝试安装个新的环境。打包下试试。

有一点我要说明下,我每次打包都是把这两个py文件和ui拿到桌面,放到一个文件夹里,然后开始打包的。
我要是装一个新的虚拟环境应该如何操作呢?还是拖到桌面?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-22 09:15:02 From FishC Mobile | 显示全部楼层
rsj0315 发表于 2021-1-22 08:25
收到感谢,画图的两个包去掉一个的话,估计也是seaborn,但是全matplotlib也画风也忒单调了。
我准备尝 ...

文件放在哪里跟用什么py环境没有关系的。
如果你会用anaconda3的话打开anaconda3的命令行窗口,输入
  1. conda create -n 环境名字比如py38 python=3.8
复制代码
创建一个虚拟环境,激活它,然后安装pyinstaller和运行你程序所需的第三方包,然后用pyinstaller打包,具体用法版主有发帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-25 21:15:18 | 显示全部楼层
建议把install改成from……install……?
不知道只导入需要的功能会不会好一些,毕竟导这么多包不卡是肯定不可能的
但是我的想法在您这个的规模下有点高工作量……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-26 09:08:35 | 显示全部楼层
rsj0315 发表于 2021-1-21 15:58
各位帮忙看看哪款还有优化空间。
或者怎么写才更python

可以参考一下这个方法:
https://fishc.com.cn/thread-90726-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-26 09:24:41 | 显示全部楼层
厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-26 12:33:05 | 显示全部楼层
hrp 发表于 2021-1-21 21:54
目前粗略测试发现matplotlib和seaborn和pandas这三个包导入比较慢,加起来占2~3秒时间,matplotlib和se ...

大佬厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 13:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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