可视化是数据分析的重要一环,也是python比较擅长的工作,本笔记系列尽可能采用统一的数据源和基于matplotlib原生版本进行可视化。

数据源是从国家统计局网站上下载的2000年-2017年的全国各省、直辖市、自治区的GDP数据和人口统计数据,2018年的数据尚未公布,不过网上已公布,可作为后续机器学习预测的比对目标;数据源采用csv格式。

本笔记是基于pandas进行数据读取的,因此也简单的总结了一下pandas的一些常规操作,比如文件读取、数据显示、数据分布、数据列名的展示,数据的分组和统计,数据的排序,行列数据的汇总,以及行列的转换。

其次本文简单演示了一下如何展示行数据和列数据,以及如何展示多列数据。

本系列的最终目标是通过GDP和人口统计数据集来演示matplotlib的各种主要图表。

代码示例

  1. import pandas as pd
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. import matplotlib
  5. #--------------------------获取相关数据------------------------
  6. #从国家统计局下载2000年-2017年GDP数据和人口数据
  7. #打开GDP数据文件,并输出其前五行,各列数据分布、各列名
  8. '''
  9. df=pd.read_csv('GDP.csv', encoding = "gbk")
  10. print(df.head())
  11. print(df.describe())
  12. print(list(df.columns.values))
  13. '''
  14. #打开人口数据文件,并输出其前五行,各列数据分布、各列名
  15. df=pd.read_csv('population.csv', encoding = "gbk",index_col=1)
  16. print(df.head())
  17. print(df.describe())
  18. #-----------以下为六种列名打印方法,均以数组形式返回------------
  19. print([column for column in df])
  20. print(list(df))
  21. print(list(df.columns))
  22. print(list(df.columns.values))
  23. print(list(df.columns.tolist()))
  24. print([i for i in df.columns if i not in ['区域', '地区']])
  25. #------------------dataframe进行groupby分组----------------------
  26. #对个别维度进行分组统计
  27. print(df.groupby('区域').sum())
  28. #对多个维度进行分组统计
  29. print(df.groupby(['区域','地区']).mean())
  30. #对多个指标按照不同规则进行分组统计
  31. print(df.groupby('区域').agg({'2017年':[np.mean, 'sum'],
  32. '2016年':['count',np.std],
  33. '2015年':[np.average,np.max,np.min,np.std,np.sum],
  34. '2014年':['count','min', 'mean', 'max'],
  35. '2013年':['min',np.min,'max',np.max]}))
  36. #------------------datafame增加新列或新行----------------------
  37. #新增一列汇总列,对同行数据进行汇总
  38. #由于前两列是非数字列,所以要从第三列开始统计2017年~2000年的数字
  39. #df['total'] = df.apply(lambda x: x.sum(), axis=1)
  40. df['total'] = df.apply(lambda x: x[2:].sum(), axis=1)
  41. #新增一行,对同一列数据进行汇总
  42. #df.loc['row_total'] = df.apply(lambda x: x.sum())
  43. #---------------------dataframe排序-----------------------------
  44. #Dataframe排序,但不影响实际存储值
  45. df.sort_values(by="total",ascending= False)
  46. print(df.sort_values(by="total",ascending= False))
  47. #-------------------dataframe行列转换---------------------------
  48. df2=df.stack()
  49. print(df2)
  50. #-------------------dataframe简单画图----------------------------
  51. matplotlib.rcParams['font.sans-serif']=['SimHei'] # 用黑体显示中文
  52. matplotlib.rcParams['axes.unicode_minus']=False # 正常显示负号
  53. #对某列数据画图
  54. #df['2017年'].plot()
  55. #对索引行数据画图,时间是倒序的,为了体现社会主义优越性,只好把行转置一下顺序
  56. #df.loc['北京市'][2:19].plot()
  57. #df.loc['北京市'][18:2:-1].plot()
  58. #plt.show()
  59. fig=plt.figure()
  60. #取2010年和2017年的列数据作图
  61. ax=fig.add_subplot(3,1,1)
  62. ax.plot(df['2017年'].values)
  63. ax.plot(df['2000年'].values)
  64. #取2010年到2017年的列数据作图
  65. ax1=fig.add_subplot(3,1,2)
  66. colname=[i for i in df.columns if i not in ['区域', '地区','total']]
  67. for i in colname:
  68. ax1.plot(df[i].values)
  69. #取北京市2010年到2017年的行数据作图,并且倒排序
  70. ax2=fig.add_subplot(3,1,3)
  71. ax2.plot(df.loc['北京市'][18:2:-1])
  72. plt.xticks(rotation=90)
  73. plt.show()

Python可视化分析笔记(数据源准备和简单可视化)_数据分布

Python可视化分析笔记(数据源准备和简单可视化)_数据源_02

Python可视化分析笔记(数据源准备和简单可视化)_数据源_03