家裏寶寶學校進行了小測驗,分數拿回來一看,怎麼才那麼點分數,爲了激勵他,將他分數在班級排名給他分析了一下,希望他下一步能盡力繼續前進吧
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontManager
def main():
"""
主函數
"""
#fm = FontManager()
#mat_fonts = set(f.name for f in fm.ttflist)
#print('字體信息:')
#print(mat_fonts)
plt.rcParams['font.family'] = ['Alibaba PuHuiTi']
plt.rcParams['axes.unicode_minus'] = False
aqi_data = pd.read_csv('score.csv')
print('基本信息:')
print(aqi_data.info())
print('數據預覽(5行數據):')
print(aqi_data.head())
# 基本統計
print('分數最高:', aqi_data['score'].max())
print('分數最低:', aqi_data['score'].min())
print('分數均值:', aqi_data['score'].mean())
# 過濾數據
clean_aqi_data=aqi_data[aqi_data['score']>287]
print('分數大於287個數:', len(clean_aqi_data))
new_aqi_data= clean_aqi_data.sort_values(by=['score'])
print('分數大於287 排序:\n', new_aqi_data)
print(type(new_aqi_data))
print('變化百分比:')
bfb=new_aqi_data.pct_change(axis='rows')
print (bfb)
df1 = pd.DataFrame({'id':new_aqi_data['id'],'score':bfb['score']})
# figsize 輸出圖片寬高 條形圖
new_aqi_data.plot(kind='bar',x='id' ,y='score', title='分數大於287的條形圖',figsize=(8, 5))
plt.savefig('score.png')
# 柱狀圖
new_aqi_data.plot(kind='hist',x='id' ,y='score', title='分數大於287的柱狀圖',figsize=(8, 5))
plt.savefig('zhu.png')
# 散點圖
new_aqi_data.plot(kind='scatter',x='id' ,y='score', title='分數大於287的散點圖',figsize=(8, 5))
plt.savefig('sandiantu.png')
# 將分數環比 條形圖
df1.plot(kind='bar', x='id', y='score', title='分數大於287的階梯',figsize=(8, 5))
plt.savefig('jieti.png')
plt.show()
if __name__ == '__main__':
main()
先輸入數據到一個csv文件,只有2列,一列id一列分數
用pandas庫,熊貓?分析數據太方便,很容易就知道最高分,最低分,平均分
後來過濾一下把大於287分的前幾名拿出來分析一下
最簡單條形圖,把分數從低到高排一排標示一下,讓人看看節節高
柱狀圖,就會把相近的圖合併擠一塊
散點圖,假設id是表示以前成績的,現在知道那些人已經列到上面那些人在下面
分數環比條形圖,知道每人跟前面一個人差距
還要一張圖是折線,但是直接用發現id是當做x軸數據的話就亂了,id不連續,最後發現需要把id當做字符,另外整個序列當x值
def drawline(new_aqi_data):
plt.title='分數大於287的line圖'
x=range(19)
xlabel=[]
for i in new_aqi_data['id']:
xlabel.append(str(i))
plt.xticks(x, xlabel, rotation=0)
plt.plot(x,new_aqi_data['score'])
# 設置x軸的標籤
plt.xlabel('代號')
# 設置y軸的標籤
plt.ylabel('分數')
plt.yticks(rotation=0)
plt.figure(figsize=(8,5))