1.小试数据统计分析
2017-12-28 13:07
253 查看
初探皇包车旅游数据分析
本文数据来自精品旅行服务成单预测的算法比赛数据源 。目录
初探皇包车旅游数据分析目录
皇包车注册用户分析
1 性别比例
2 年龄分布
3 省份分布
订单数据分析
1 订单类型
2 精品订单用户分析
3 订单目的地国家分布图
评价信息分析
1 评论数据分析
总结
遇到的困难
解决方法
本次练习主要使用python3的pandas模块进行数据处理,matplotlib模块进行可视化显示图表。代码习惯使用面向对象写,但是这个分析不适合用这个,用 jupyter更好。最终用jupyter写完后,又改为面向对象代码,以下每小节代码可以写在对象的方法中单独运行。
下面为开头通用代码
import pandas as pd import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] # 画图中文显示 class Huangbc(): def __init__(self): # 用户信息表 self.userProfile = pd.read_csv('userProfile_train.csv') # 用户评论表 self.userComment = pd.read_csv('userComment_train.csv') # 订单信息表 self.orderHistory = pd.read_csv('orderHistory_train.csv')
1. 皇包车注册用户分析
用户个人信息:userProfile_train.csv数据共有四列,分别是用户id、性别、省份、年龄段。注:信息会有缺失。
例如:
userid | gender | province | age |
---|---|---|---|
100000000231 | 男 | 北京 | 70后 |
1.1 性别比例
# 去除含空值行 userprofile_df = self.userProfile.dropna(axis=0) '统计不同性别用户数量' gender_group = userprofile_df.groupby('gender', as_index=False).count() # 画图 gender_labels = [gender_group.loc[0, 'gender'],gender_group.loc[1, 'gender']] plt.pie(gender_group.loc[:, 'userid'],labels=gender_labels, autopct='%1.1f%%') plt.title('注册用户性别比例') plt.show()
注册用户中,男性用户为2020人,女性用户为1558人,如下图所示,男性所占比例为56.5%,女性为43.5%,男性比女性高出13%。
1.2 年龄分布
'统计年龄分布情况' userprofile_df = self.userProfile.dropna(axis=0) age_group = userprofile_df.groupby('age', as_index=False).count().sort_values('userid', ascending=False) # 按年龄分组 x1 = age_group.loc[:, 'age'] x2 = age_group.loc[:, 'userid'] plt.bar(range(len(x1)), x2) plt.xticks(range(len(x1)),x1) plt.title('注册用户年龄分布') plt.show()
在注册用户中,不同年龄层的顾客对企业的服务要求可能会有不同,所以进行了注册用户年龄分布的统计分析。
从上图可以看出,注册用户中,80后是主力军,但和70后,60后用户数量差距不大。出国旅游的大多数应该是有了一定工作时间和积蓄的人群,而90后属于刚工作,薪酬不高,正是努力奋斗的时期,人数较少情有可原,但随着90后工作经验的增加,薪酬的增长,其用户占比上升也是正常的事情。而00后属于无收入人群,订车应该也是父母的事,所以最少也是预料之中。
1.3 省份分布
'统计注册用户区域分布情况' userprofile_df = self.userProfile.dropna(axis=0) province_group = userprofile_df.groupby('province', as_index=False).count().sort_values('userid', ascending=False) # 按省份分组 x2 = province_group.loc[:, 'province'] y2 = province_group.loc[:, 'userid'] # 为了解决根据y值大小依次显示问题 plt.barh(range(len(x2)),y2) plt.yticks(range(len(x2)),x2, fontsize=8) plt.title('注册用户区域分布') plt.show()
2 订单数据分析
用户历史订单数据:orderHistory_train.csv该数据描述了用户的历史订单信息。数据共有7列,分别是用户id,订单id,订单时间,订单类型,旅游城市,国家,大陆。其中1表示购买了精品旅游服务,0表示普通旅游服务。
例如:
userid | orderid | orderTime | orderType | city | country | continent |
---|---|---|---|---|---|---|
100000000371 | 1000709 | 1503443585 | 0 | 东京 | 日本 | 亚洲 |
2.1 订单类型
'统计不同旅游类型数量' ordertype_df = self.orderHistory.dropna().groupby('orderType', as_index=False).count() y = ordertype_df['userid'] labels = ordertype_df['orderType'] plt.pie(y, labels=labels, autopct='%1.1f%%') plt.title('订单类型分布图') plt.show()
不同订单类型的数量比例,其中1表示精品包车服务订单,0表示普通包车服务订单
从图中可以看出,精品订单较少仅为15.3%,普通订单相对就很多,为84.7%,是高端的5.5倍之多。精品订单的附加值高,着重提高精品订单的比例应该是企业关注的问题。
2.2 精品订单用户分析
'不同年龄层选择高端旅游的比例' orderhis_userpro_df = pd.merge(self.orderHistory, self.userProfile, on='userid').dropna() age_group = orderhis_userpro_df.groupby('age', as_index=False) x3 = age_group.count()['age'] # 年龄 y3 = [] # 不同年龄段高端消费比例 # 遍历每个年龄组,计算高端消费比例 for index, row in age_group: x3.append(row['age']) num_type_1 = len(row[row['orderType']==1]) percent_1 = float(num_type_1)/len(row)*100 y3.append(percent_1) plt.bar(x3,y3) plt.title('不同年龄层选择高端旅游的比例') plt.show()
虽然在注册用户中00后和90后的数量位于后两位,但在不同年龄层选择高端旅游的比例中,二者位于前两位,可以看出00后和90后有高端消费的潜力。
2.3 订单目的地国家分布图
'不同国家订单数量' orderhis_userpro_df = pd.merge(self.orderHistory, self.userProfile, on='userid').dropna() country_df = orderhis_userpro_df.groupby('country', as_index=False).count().sort_values('userid', ascending=False) # 按国家分组排序 x4 = country_df['country'].head(10) y4 = country_df['userid'].head(10) plt.bar(range(len(x4)), y4) plt.xticks(range(len(x4)), x4, fontsize=8) plt.title('订单目的地国家分布图') plt.show()
下面进行了订单在不同国家的分布情况
从图中可以看出,用户首选的国家为日本,这符合中国人赴日购买马桶盖的潮流。接下来为美国,澳大利亚。美国排在前三是理所当然,而澳大利亚位居第三的原因可能是留学、和北半球季节相反的气候,以及优美的自然环境。
3.评价信息分析
评论数据:userComment_train.csv共有5个字段,分别是用户id,订单id,评分,标签,评论内容。
其中受数据保密性约束,评论内容仅显示一些关键词。
userid | orderid | rating | tags | commentsKeyWords |
---|---|---|---|---|
10044000637 | 1001930 | 5.0 | 主动热情|提前联系|景点介绍详尽|耐心等候 | [‘平稳’, ‘很好’] |
3.1 评论数据分析
# 评论信息分析 def userComment_analyze(self): # 平均分以及总评论数 mean_rating = self.userComment['rating'].mean() num = len(self.userComment) print(mean_rating, num) '字符串处理为字段' tags_list_df = pd.DataFrame(self.userComment['tags'].str.split('|')) # print(tags_list_df) m = [] for index,row in tags_list_df.iterrows(): new = {} # 该字段下存在list和空值两种类型 if type(row['tags'])==list: for tag in row['tags']: new[tag]=1 m.append(new) m_df = pd.DataFrame(m).fillna(0).astype(int) # 空值填充0 total_df = pd.merge(self.userComment, m_df, left_index=True, right_index=True) rating_df = total_df.groupby('rating', as_index=False).sum().sort_values('rating') # 按照评分从小到大排序 # 评分为5分的评论分布 rating_5 = rating_df[rating_df['rating']==5] x0 = rating_5.loc[:, '不协助搬运行李':'驾驶鲁莽'].T.sort_values(6) x0 = x0[x0[6]>10] # 提取出现次数较大的评价 labels = x0.index plt.pie(x0, labels=labels, autopct='%1.1f%%') plt.title('5分评分的评论分布图') plt.show()
评价信息表中共有9863条数据,5分制打分的评分平均分为4.91。
从图中可以看出,在打分为5分的评论中,前五位分别为提前联系、主动热情、耐心等候、主动搬运行李和驾驶平稳,可以看出在顾客心中这些方面的服务质量尤为重要。
总结
这次练习主要是对pandas和matlibplot模块进行练习,最终也起到了相应的作用。了解到python相对excel在处理数据中的优势,首先是字符串处理,只有语言工具才能处理,而且在表之间的合并等类似sql中的关联数据处理中,python的pandas包可以高效处理这些数据合并。遇到的困难
直方图不能有序的按照y值从大到小排列统计加和数据为单行df,取单行数据时只能取出标签字段名
字符串处理,tags字段元素为字符串,怎样把字符串分割后作为标签字段作为列添加在原df中
解决方法
直方图默认的排序是按照x轴排序,当x轴是字符串时,顺序就乱七八糟,不能按照传入列表的y值顺序显示。后来通过先把y值有序排列,先用range()数字占位,再用真正的字符串标签标注上plt.barh(range(len(x2)),y2)
plt.yticks(range(len(x2)),x2)
来解决了问题
把原df转置,变成单列DataFrame对象,再取单列数据即可
首先了解到pd.DataFrame()可以传入列表嵌套字典的数据类型来转化为DataFrame对象,而且列表中的字典不需要拥有相同的键,最后生成的DataFrame对象的字段是列表中所有字典中的键的加和(键不重复)。所以采用pandas中的str中的方法对字符串进行分割为字典,再遍历每行的列表处理为字典,最终处理为理想的列表嵌套字典的数据类型,转化为DataFrame对象,和原df进行合并即可获得。
相关文章推荐
- qml-qt项目利用google 分析进行数据统计分析
- CCBPM(CCFlow与JFlow)H5版本中新增的数据统计分析功能演示(一)
- 某中小企业网站运营数据分析实例(百度商桥统计)
- PHP+Hadoop数据统计分析
- 统计分析基础-描述数据
- 数据的统计分析
- 机器学习(七)使用pandas库进行数据分析_——统计信息和离散化
- 移动互联网数据分析 移动客户端流量统计 移动客户端数据统计(一)
- (十一)数据的统计描述和分析
- 网站数据统计分析之二:前端日志采集是与非
- 网站数据统计分析之一:日志收集原理及其实现
- 网站用户行为数据统计与分析之一:埋点代码设计
- 数据挖掘与统计分析的区别
- 网站流量的数据统计和分析
- Druid (大数据实时统计分析数据存储)
- 如何通过统计分析工具做好APP的数据分析和运营
- ArcGIS runtime sdk for android 结合mpchartlib进行离线数据统计分析
- 大数据统计分析平台之二、ElasticSearch 6.2.1的安装与使用
- Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
- Excel在统计分析中的应用—第二章—描述性统计-求分组数据的众数