本次复习的知识点如下:
- numpy的reshape以及shape在实战中的运用
- matplotlib饼图绘制
分析目标
观察上次的数据,数据中有的数据有会员与非会员两种用户类别。
这次我们主要分析一下两种类别用户在数据中占比。
数据读取与数据清洗
根据流程示意图我们主要遵循下面几个步骤:
图 | 源自网络
在过去两次的文章中已经有关于数据读取和数据分析操作的详细代码讲解,所以不再赘述。
此处代码为:
# 数据读取,数据清洗 def read_clean_data(): clndata_arr_list = [] for data_filename in data_filenames: file = os.path.join(data_path, data_filename) data_arr = np.loadtxt(file, skiprows=1, delimiter=',', dtype=bytes).astype(str) cln_arr = np.core.defchararray.replace(data_arr[:, -1], '"', '') cln_arr = cln_arr.reshape(-1,1) clndata_arr_list.append(cln_arr) year_cln_arr = np.concatenate(clndata_arr_list) return year_cln_arr
这里需要注意两点:
- 因为数据较大,我们没有数据文件具体数据量,所以在使用
numpy.reshape
时我们可以使用numpy.reshape(-1,1)
这样numpy可以使用统计后的具体数值替换-1
。 - 我们对数据的需求不再是获取时间的平均值,只需获取数据最后一列并使用
concatenate
方法堆叠到一起以便下一步处理。
数据分析
根据这次的分析目标,我们取出最后一列Member type
。
在上一步我们已经获取了全部的数值,在本部只需筛选统计出会员与非会员的数值就可以了。
我们可以先看下完成后的这部分代码:
# 数据分析 def mean_data(year_cln_arr): member = year_cln_arr[year_cln_arr == 'Member'].shape[0] casual = year_cln_arr[year_cln_arr == 'Casual'].shape[0] users = [member,casual] print(users) return users
同样,这里使用numpy.shape
获取用户分类的具体数据。
结果展示
生成的饼图:
下面是生成饼图的代码:
# 结果展示 plt.figure() plt.pie(users, labels=['Member', 'Casual'], autopct='%.2f%%', shadow=True, explode=(0.05, 0)) plt.axis('equal') plt.tight_layout() plt.savefig(os.path.join(output_path, './piechart.png')) plt.show()
总结
关于之前文章中numpy的大部分用法在这三篇的实战中都有提及,接下来还剩一篇numpy实战总结全文,之后会进入pandas的复习。