读取csv文件生成分析图形

# coding:utf-8

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style

dataset_path = 'Mountains.csv'

#设置中文字体正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
#设置表格的背景样式
style.use('ggplot')

def procrss_success(value):
    if '>' in str(value):
        #值中包含>号的
        return 150
    elif 'Many' in str(value):
        #值是Many
        return 100
    else:
        #值是正常数据的或者是空数据的
        return  value

def run_main():
    data = pd.read_csv(dataset_path)

    #将山脉高度和2004年之前成功登顶的次数及失败对应的行重命名,方便后续操作
    #data.rename()修改完之后的数据要重新赋值给data替换原始数据
    data = data.rename(columns={'Height (m)':'Height',
'Ascents bef. 2004':'Success','Failed attempts bef. 2004':'Failed'})

    #数据处理
    #先将Failed这一列中所有的值为NaN的,替换为0
    data['Failed'] = data['Failed'].fillna(0).astype(int)
    #处理Sussess这一列中的非法数据
    data['Success'] = data['Success'].apply(procrss_success)
    data['Success'] = data['Success'].fillna(0).astype(int)
    #处理首次登顶的数据列First ascent
    #利用了条件索引,查看首次登顶的时间是不是不等于'unclimbed'
    data = data[data['First ascent'] != 'unclimbed']
    data['First ascent'] = data['First ascent'].astype(int)


    # print data['Success'].head(50)
    # print type(data)

    #数据可视化
    # # 1.登顶次数VS年份
    # # plt.hist(data['First ascent'],bins=20)
    # data1 = data.groupby(['First ascent']).sum()
    # # print data1
    # #data1.index:获取data1对象的索引数据,直接得到一个可迭代的索引列表
    # # print data1.index
    # plt.plot(data1.index,data1['Success'],'ro--')
    # plt.ylabel('次数')

    # plt.xlabel('年份')
    # plt.title('每年成功登顶山峰的次数')
    # #保存图片到本地
    # plt.savefig('frist_ascent_vs_year.png')

    #2.山峰数量的对比:8千以上的有多少山峰,7千以上的有多少
    # plt.hist(data['Height'],bins=20)
    # plt.ylabel('数量')
    # plt.xlabel('高度')
    # plt.title('高峰数量对比图')
    # plt.savefig('height.png')

    #3.统计各个山峰首次登顶的时间
    fig = plt.figure(figsize=(10,5))
    fig.add_subplot(2,1,1)
    #alpha:透明度
    #s:调整圆点的尺寸大小
    plt.scatter(data['Height'],data['First ascent'],alpha=0.8,s=50)
    plt.xlabel('海拔(m)')
    plt.ylabel('首次登顶时间(y)')
    plt.title('各山脉首次登顶时间对比')

    #4.对比首次登顶时间和山峰排名的对比
    fig.add_subplot(2,1,2)
    plt.scatter(data['First ascent'],data['Rank'],alpha=0.8,s=50)
    plt.xlabel('首次登顶时间(y)')
    plt.ylabel('山峰排名(r)')
    plt.title('首次登顶时间和山峰排名的对比')

    plt.show()

if __name__=='__main__':
    run_main()

你可能感兴趣的:(读取csv文件生成分析图形)