项目:可视化高峰数据

柔情只为你懂 2021-11-05 07:18 499阅读 0赞

1.项目介绍

www.kaggle.com/abcsds/highest-mountains

2.涉及知识

Matplotlib数据可视化

3.代码及注释

  1. # -*- coding: utf-8 -*-
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. from matplotlib import style
  5. style.use('ggplot') # 设置图片显示的主题样式
  6. # 解决matplotlib显示中文问题
  7. plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
  8. plt.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题
  9. dataset_path = './dataset/Mountains.csv'
  10. def preview_data(data):
  11. """
  12. 数据预览
  13. """
  14. # 数据预览
  15. print(data.head())
  16. # 数据信息
  17. print(data.info())
  18. def proc_success(val):
  19. """
  20. 处理 'Ascents bef. 2004' 列中的数据
  21. """
  22. if '>' in str(val):
  23. return 200
  24. elif 'Many' in str(val):
  25. return 160
  26. else:
  27. return val
  28. def run_main():
  29. """
  30. 主函数
  31. """
  32. # 读取csv数据
  33. data = pd.read_csv(dataset_path)
  34. # 预览数据
  35. preview_data(data)
  36. # 数据重构
  37. # 重命名列名,inplace代表在原始上进行更改
  38. data.rename(columns={
  39. 'Height (m)': 'Height', 'Ascents bef. 2004': 'Success',
  40. 'Failed attempts bef. 2004': 'Failed'}, inplace=True)
  41. # 数据清洗
  42. data['Failed'] = data['Failed'].fillna(0).astype(int) #fillna代表空值补0,astype转换格式
  43. data['Success'] = data['Success'].apply(proc_success) #应用函数
  44. data['Success'] = data['Success'].fillna(0).astype(int)
  45. data = data[data['First ascent'] != 'unclimbed']
  46. data['First ascent'] = data['First ascent'].astype(int)
  47. # 可视化数据
  48. # 1. 登顶次数 vs 年份
  49. plt.hist(data['First ascent'].astype(int), bins=20)
  50. plt.ylabel('高峰数量')
  51. plt.xlabel('年份')
  52. plt.title('登顶次数')
  53. plt.savefig('./first_ascent_vs_year.png')
  54. plt.show() #先保存在显示
  55. # 2. 高峰vs海拔
  56. data['Height'].plot.hist(color='steelblue', bins=20) #直方图
  57. plt.bar(data['Height'],
  58. (data['Height'] - data['Height'].min()) / (data['Height'].max() - data['Height'].min()) * 23, # 按比例缩放,标准化
  59. color='red',
  60. width=30, alpha=0.2)
  61. plt.ylabel('高峰数量')
  62. plt.xlabel('海拔')
  63. plt.text(8750, 20, "海拔", color='red')
  64. plt.title('高峰vs海拔')
  65. plt.savefig('./mountain_vs_height.png')
  66. plt.show()
  67. # 3. 首次登顶
  68. data['Attempts'] = data['Failed'] + data['Success'] # 攀登尝试次数
  69. fig = plt.figure(figsize=(13, 7))
  70. fig.add_subplot(211)
  71. plt.scatter(data['First ascent'], data['Height'], c=data['Attempts'], alpha=0.8, s=50)
  72. plt.ylabel('海拔')
  73. plt.xlabel('登顶')
  74. fig.add_subplot(212)
  75. plt.scatter(data['First ascent'], data['Rank'].max() - data['Rank'], c=data['Attempts'], alpha=0.8, s=50)
  76. plt.ylabel('排名')
  77. plt.xlabel('登顶')
  78. plt.savefig('./mountain_vs_attempts.png')
  79. plt.show()
  80. # 也可以使用seaborn或者bokeh重现上述显示的结果
  81. if __name__ == '__main__':
  82. run_main()

发表评论

表情:
评论列表 (有 0 条评论,499人围观)

还没有评论,来说两句吧...

相关阅读