第四章 Python數據分析實戰 習題(數據見附件sizhang.xlsx)
- 班主任現有一班級的兩張表,如下。
表一:成績表
學 號 C# 線 代 Python
16010203 78 88 96
表二:信息表
姓 名 學 號 手機號碼
張三 16010203 16699995521
現請幫班主任做如下工作:
-
給成績表加上姓名列;
-
給成績表加上字段“總分”列,並求出總分;
-
增加列字段“等級”,標註每人“總分”的“優、良、中、及格、差”(270≤優,240≤良, 210≤中,及格≤180,差≤180);
-
計算各門課程的平均成績以及標準差;
-
做"總分"成績分佈圖,縱座標表示成績,橫座標表示學號或者姓名,畫出總分的均分橫線,讓每位同學的總分圓點分佈在均分線上下,以便於觀察每位同學的成績離開均分的距離。
你們要的Python作業來啦,詳細代碼介紹可查看我徒弟的博客: Python數據分析實戰
此處只是將我徒弟的代碼做一個總合。其中有需要注意的地方,運行時有個問題: 讀取Excel表格數據時,sheet_name根據你的表格sheet名稱填寫。
在此聲明,此代碼來自我徒弟:瀟囧囧_的博客,更多好文章,學習總結可關注我徒弟一起學習交流。
import pandas as pd
sheet1 = pd.read_excel("D:\Downloads\python_data.xlsx",sheet_name="成績表")
sheet2 = pd.read_excel("D:\Downloads\python_data.xlsx",sheet_name="信息表")
print(sheet1)
sheet1 = pd.merge(sheet1,sheet2,left_on='學號',right_on='學號') #連接兩個表
sheet1 = sheet1.drop(columns = ['手機號'])
print(sheet1)
sheet1["總分"] = sheet1["C#"]+sheet1["線 代"]+sheet1["Python"]
print(sheet1)
def return_ans(x):
if x>=270:
b='優'
elif x>=240 and x<270:
b='良'
elif x>=210 and x<240:
b='中'
elif x>=180 and x<210:
b='及格'
else:
b='差'
return b
sheet1['等級'] = sheet1['總分'].apply(lambda x:return_ans(x))
print(sheet1)
print("C#的平均成績爲",sheet1['C#'].values.mean())
print("C#的標準差爲",sheet1['C#'].values.std())
print("線 代的平均成績爲",sheet1['線 代'].values.mean())
print("線 代的標準差爲",sheet1['線 代'].values.std())
print("Python的平均成績爲",sheet1['Python'].values.mean())
print("Python的標準差爲",sheet1['Python'].values.std())
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['Simhei']
s = sheet1['總分'].values.mean()
plt.bar(range(len(sheet1['總分'])),sheet1['總分'],width=0.8)
plt.xticks(range(len(sheet1['總分'])),sheet1['姓名'])
plt.axhline(s, color='red', linestyle='--')
plt.show()
歡迎關注公衆號【夜來疏影】