Advertisement
junbjn98

Python - Tuyền

May 25th, 2018
291
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.54 KB | None | 0 0
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3.  
  4. # nhớ cài cái thư viện pandas với matplotlib
  5. # nếu có thể thì bắt exception với validate cho chuyên nghiệp hơn nghe tuyền :))
  6. # https://pandas.pydata.org/pandas-docs/stable/options.html
  7. # https://pandas.pydata.org/pandas-docs/stable/io.html#excel-files
  8. # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html
  9. # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html
  10. # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html
  11.  
  12.  
  13. def menu():
  14.     print('+--------- MENU ---------+')
  15.     print('| 1. Import file excel   |')
  16.     print('| 2. Print all data      |')
  17.     print('| 3. Calculation         |')
  18.     print('| 4. Stats               |')
  19.     print('| 5. Update data         |')
  20.     print('| 6. Export file excel   |')
  21.     print('| 7. Print menu          |')
  22.     print('| 8. Exit                |')
  23.     print('+------------------------+')
  24.  
  25.  
  26. def import_file():
  27.     global data
  28.     # ví dụ D:\project.xlsx
  29.     file_path = input('Enter path: ')
  30.     # in ngang
  31.     pd.set_option('expand_frame_repr', False)
  32.     data = pd.read_excel(file_path)
  33.     pd.options.display.max_rows = 100
  34.     pd.options.display.max_columns = 20
  35.     print('Success\n')
  36.  
  37.  
  38. def print_data():
  39.     print('\n', data.to_string(index=False), '\n')
  40.  
  41.  
  42. def calculation(score):
  43.     data['Quiz'] = round((data['Quiz 1'] + data['Quiz 2'] + data['Quiz 3']) / 3 + data['Bonus'] - data['Minus'], 1)
  44.     data['GPA'] = round(score[0] * data['Quiz'] + score[1] * data['Midterm'] + score[2] * data['Final'], 1)
  45.     i = 0
  46.     for x in data['GPA']:
  47.         if x >= 90:
  48.             data.loc[i, 'Rank'] = 'A+'
  49.         elif x >= 80:
  50.             data.loc[i, 'Rank'] = 'A'
  51.         elif x >= 70:
  52.             data.loc[i, 'Rank'] = 'B+'
  53.         elif x >= 60:
  54.             data.loc[i, 'Rank'] = 'B'
  55.         elif x >= 50:
  56.             data.loc[i, 'Rank'] = 'C+'
  57.         # còn gì nữa thì tuyền điền thêm vô nghe
  58.         else:
  59.             data.loc[i, 'Rank'] = 'C'
  60.  
  61.         if x >= 50:
  62.             data.loc[i, 'Status'] = 'Pass'
  63.         else:
  64.             data.loc[i, 'Status'] = 'Fail'
  65.         i += 1
  66.     print('Success\n')
  67.  
  68.  
  69. def stats():
  70.     mean = round(data['GPA'].mean(), 1)
  71.     print('\n* Mean =', mean)
  72.  
  73.     # cái này nam lấy từ hàm có sẵn của nó, thử tính tay lại cái công thức xem có đúng ko
  74.     std = round(data['GPA'].std(), 1)
  75.     print('* Stdev =', std)
  76.  
  77.     min_index = data['GPA'].idxmin()
  78.     print('* Min GPA:\n', data.loc[[min_index]].to_string(index=False))
  79.  
  80.     max_index = data['GPA'].idxmax()
  81.     print('* Max GPA:\n', data.loc[[max_index]].to_string(index=False))
  82.  
  83.     c_pass = len(data[data['Status'] == 'Pass'])
  84.     print('* Num pass =', c_pass)
  85.  
  86.     c_fail = len(data[data['Status'] == 'Fail'])
  87.     print('* Num fail =', c_fail, '\n')
  88.  
  89.     # Box Plot
  90.     plt.subplots(figsize=(8, 8), dpi=88)
  91.     plt.title('Box Plot')
  92.     plt.ylabel('GPA')
  93.     plt.boxplot(data['GPA'])
  94.  
  95.     # Pie Chart
  96.     labels = ['A+', 'A', 'B+', 'B', 'C+', 'C']
  97.     values = [len(data[data['Rank'] == 'A+']), len(data[data['Rank'] == 'A']), len(data[data['Rank'] == 'B+']),
  98.               len(data[data['Rank'] == 'B']), len(data[data['Rank'] == 'C+']), len(data[data['Rank'] == 'C'])]
  99.     fig1, ax1 = plt.subplots(figsize=(8, 8), dpi=88)
  100.     plt.title('Pie Chart')
  101.     ax1.pie(values, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
  102.     plt.legend(labels=labels)
  103.  
  104.     plt.show()
  105.  
  106.  
  107. def update_data():
  108.     while True:
  109.         index = eval(input('Input No.: '))
  110.         col_name = input('Input Col name: ')
  111.         new_value = eval(input('Input new value: '))
  112.         data.loc[index - 1, col_name] = new_value
  113.         calculation(score)
  114.  
  115.         x = input('Do you want to change data? (Y/N): ')
  116.         if x == 'N':
  117.             break
  118.  
  119.  
  120. def export_file():
  121.     file_path = input('Enter path: ')
  122.     data.to_excel(file_path, index=False)
  123.     print('Success\n')
  124.  
  125.  
  126. data = ''
  127. menu()
  128. while True:
  129.     n = eval(input('Input a number: '))
  130.     if n == 1:
  131.         import_file()
  132.     elif n == 2:
  133.         print_data()
  134.     elif n == 3:
  135.         # ví dụ nhập 0.3, 0.3, 0.4
  136.         score = [float(x) for x in input('Input % [Quiz, Midterm, Final]: ').split(',')]
  137.         calculation(score)
  138.     elif n == 4:
  139.         stats()
  140.     elif n == 5:
  141.         update_data()
  142.     elif n == 6:
  143.         export_file()
  144.     elif n == 7:
  145.         menu()
  146.     elif n == 8:
  147.         exit()
  148.     else:
  149.         print('Please enter a number between 1 and 8!')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement