Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pandas as pd
- import matplotlib.pyplot as plt
- # nhớ cài cái thư viện pandas với matplotlib
- # nếu có thể thì bắt exception với validate cho chuyên nghiệp hơn nghe tuyền :))
- # https://pandas.pydata.org/pandas-docs/stable/options.html
- # https://pandas.pydata.org/pandas-docs/stable/io.html#excel-files
- # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.html
- # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html
- # https://matplotlib.org/api/_as_gen/matplotlib.pyplot.pie.html
- def menu():
- print('+--------- MENU ---------+')
- print('| 1. Import file excel |')
- print('| 2. Print all data |')
- print('| 3. Calculation |')
- print('| 4. Stats |')
- print('| 5. Update data |')
- print('| 6. Export file excel |')
- print('| 7. Print menu |')
- print('| 8. Exit |')
- print('+------------------------+')
- def import_file():
- global data
- # ví dụ D:\project.xlsx
- file_path = input('Enter path: ')
- # in ngang
- pd.set_option('expand_frame_repr', False)
- data = pd.read_excel(file_path)
- pd.options.display.max_rows = 100
- pd.options.display.max_columns = 20
- print('Success\n')
- def print_data():
- print('\n', data.to_string(index=False), '\n')
- def calculation(score):
- data['Quiz'] = round((data['Quiz 1'] + data['Quiz 2'] + data['Quiz 3']) / 3 + data['Bonus'] - data['Minus'], 1)
- data['GPA'] = round(score[0] * data['Quiz'] + score[1] * data['Midterm'] + score[2] * data['Final'], 1)
- i = 0
- for x in data['GPA']:
- if x >= 90:
- data.loc[i, 'Rank'] = 'A+'
- elif x >= 80:
- data.loc[i, 'Rank'] = 'A'
- elif x >= 70:
- data.loc[i, 'Rank'] = 'B+'
- elif x >= 60:
- data.loc[i, 'Rank'] = 'B'
- elif x >= 50:
- data.loc[i, 'Rank'] = 'C+'
- # còn gì nữa thì tuyền điền thêm vô nghe
- else:
- data.loc[i, 'Rank'] = 'C'
- if x >= 50:
- data.loc[i, 'Status'] = 'Pass'
- else:
- data.loc[i, 'Status'] = 'Fail'
- i += 1
- print('Success\n')
- def stats():
- mean = round(data['GPA'].mean(), 1)
- print('\n* Mean =', mean)
- # 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
- std = round(data['GPA'].std(), 1)
- print('* Stdev =', std)
- min_index = data['GPA'].idxmin()
- print('* Min GPA:\n', data.loc[[min_index]].to_string(index=False))
- max_index = data['GPA'].idxmax()
- print('* Max GPA:\n', data.loc[[max_index]].to_string(index=False))
- c_pass = len(data[data['Status'] == 'Pass'])
- print('* Num pass =', c_pass)
- c_fail = len(data[data['Status'] == 'Fail'])
- print('* Num fail =', c_fail, '\n')
- # Box Plot
- plt.subplots(figsize=(8, 8), dpi=88)
- plt.title('Box Plot')
- plt.ylabel('GPA')
- plt.boxplot(data['GPA'])
- # Pie Chart
- labels = ['A+', 'A', 'B+', 'B', 'C+', 'C']
- values = [len(data[data['Rank'] == 'A+']), len(data[data['Rank'] == 'A']), len(data[data['Rank'] == 'B+']),
- len(data[data['Rank'] == 'B']), len(data[data['Rank'] == 'C+']), len(data[data['Rank'] == 'C'])]
- fig1, ax1 = plt.subplots(figsize=(8, 8), dpi=88)
- plt.title('Pie Chart')
- ax1.pie(values, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)
- plt.legend(labels=labels)
- plt.show()
- def update_data():
- while True:
- index = eval(input('Input No.: '))
- col_name = input('Input Col name: ')
- new_value = eval(input('Input new value: '))
- data.loc[index - 1, col_name] = new_value
- calculation(score)
- x = input('Do you want to change data? (Y/N): ')
- if x == 'N':
- break
- def export_file():
- file_path = input('Enter path: ')
- data.to_excel(file_path, index=False)
- print('Success\n')
- data = ''
- menu()
- while True:
- n = eval(input('Input a number: '))
- if n == 1:
- import_file()
- elif n == 2:
- print_data()
- elif n == 3:
- # ví dụ nhập 0.3, 0.3, 0.4
- score = [float(x) for x in input('Input % [Quiz, Midterm, Final]: ').split(',')]
- calculation(score)
- elif n == 4:
- stats()
- elif n == 5:
- update_data()
- elif n == 6:
- export_file()
- elif n == 7:
- menu()
- elif n == 8:
- exit()
- else:
- print('Please enter a number between 1 and 8!')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement