家里宝宝学校进行了小测验,分数拿回来一看,怎么才那么点分数,为了激励他,将他分数在班级排名给他分析了一下,希望他下一步能尽力继续前进吧
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))