左图清楚地说明了2018年每分钟产生的海量数据。技术巨人(如图)维护您的每项活动的记录(在您同意的情况下),将其存储为原始数据,然后转换这些数据转化为有价值的信息并保持盈利。 但是,谁从原始数据中获得了如此宝贵的见解? 这些公司有机会雇用某种福尔摩斯吗!!!
好吧,可能是的!
因此,让我们学习如何使自己成为Sherlock (至少是一个自信的初学者)并从原始数据中检测隐藏的答案。
首先,让我们使用对图或correlation heatmap pairplot可用定量特征之间的关系。
您可以从heatmap中观察到,应用程序完成的安装数量与应用程序获得的评论数量之间存在大量的相关性。 另外,如果可以去除异常值,那么我们可能会在pairplot观察到其他特征的良好相关性。
这是下面两个数字的代码-
#相关图的热图
plt.figure(figsize =(7,5))
sns.heatmap(df_temp.corr(),cmap ='Blues') plt.show()
#配对图
plt.figure(figsize =(7,5))
sns.pairplot(df_temp,kind ='reg',diag_kind ='kde',markers ='+') plt.show()
现在,让我们列出一些已知信息并进行验证-
- 应用程序
rating划分,即每0.5步rating提取应用程序数目。 - 按应用程序
rating划分的应用程序type比率,即每0.5步长rating有多少个free和paid应用程序可用。 - 每种
content type的rating比率,即每个类别的rating比率为0.5。 - 每6个
genres的rating比率,即根据应用的最大数量仅选择前6个genres的比率为0.5rating。 - 每个
category的应用数量。 - 每年更新的应用数量。
- 每月更新的应用数量。
- 每年几个月中更新的应用数量。


上图的重点-
- 应用程序的最大数量被评定为
4.5,以5为步长,步长0.5。 - 在每个评级范围内, 免费应用程序的数量均超过付费应用程序 。
- 面向
Everyone的应用程序数量最多,其次是“Teen和“Mature 17+。 上面说明了每种内容类型的等级。 -
Genres最高的Tools,Entertainment和Education,最高得分为4.5。 - 应用程序数量最多的前三类包括“
Family,“Game和“Tools。 - 随着时间的流逝,最多可以更新的应用程序数量。 因此,有一个向上的模式 。
- 结合所有年份的数据,夏季(即7月)将更新最大数量的应用程序。
- 每年的四月之后,更新频率都很高。
这里是上图的代码。
#1.应用分级评估
rate = df.Rating.apply(lambda x:np.round(x * 2)/ 2) #舍入到最接近的0.5
#检索每个唯一评级的频率
val,cnt = np.unique(rate,return_counts = True)
df_rate = pd.DataFrame([val,cnt])。T
df_rate.columns = ['val','cnt'] #2。按应用程序等级划分的应用程序类型比率
df_rating_type = pd.DataFrame([rate,df.Type])。T #3 。每种内容类型的应用评分
df_rating_content = pd.DataFrame([rate,df.ContentRating])。T #4。排名前6个流派的收视率
df_rating_genres = pd.DataFrame([rate,df.Genres])。T
#查找应用数量最多的前6个流派
val_g,cnt_g = np.unique(df_rating_genres.Genres,return_counts = True)
df_genres = pd.DataFrame([val_g,cnt_g])。T
df_genres.columns = ['流派','计数']
df_genres.sort_values('Count',ascending = False,inplace = True)
df_genres = df_genres.iloc [:6,:]。reset_index(drop = True)
#为仅包含这6个子类的行设置子数据框
df_rating_genres = df_rating_genres [df_rating_genres.Genres.isin(df_genres.Genres)] #5.每个类别的应用数量
ratio_cat_app = df.groupby('Category')['App']。count()。reset_index()
ratio_cat_app.sort_values('App',ascending = False,inplace = True) #6.每月,每年和每年几个月中的更新次数
#将LastUpdated列转换为date列
df.LastUpdated = pd.to_datetime(df.LastUpdated,format ='%B%d,%Y')
df.LastUpdated.head(2) #0 2018-01-07
#1 2018-01-15
#名称:LastUpdated,dtype:datetime64 [ns] val_y,cnt_y = np.unique(df.LastUpdated.dt.year,return_counts = True)
val_m,cnt_m = np.unique(df.LastUpdated.dt.month,return_counts = True) df_date = pd.DataFrame(df.LastUpdated.astype(str).str.split('-')。tolist(),列=清单('YMD'))
df_date.head(3)#YMD
#0 2018年01月07日
#1 2018年01月15日
#2 2018 08 01 date_temp = df_date.groupby(['M','Y'])。apply(lambda x:len(x))。unstack()
date_temp.fillna(0,inplace = True) #产生月份的顺序
从datetime导入datetime
months_seq = [date_strftime(datetime.strptime(str(_),“%m”),“%b”)for _ in range(1,13)] === PANDAS绘图=================== ## 1
plt.figure(figsize =(20,20))
sns.set_style('dark')
row_mask = 6
col_mask = 2 ax1 = plt.subplot2grid((row_mask,col_mask),(0,0))
sns.barplot(x ='val',y ='cnt',data = df_rate,调色板='Blues',ax = ax1)
sns.despine(ax = ax1)
ax1.set_ylabel('Count')
ax1.set_xlabel('评分')
ax1.set_title('应用程序划分等级',权重='粗体') #2
ax2 = plt.subplot2grid((row_mask,col_mask),(0,1))
df_rating_type.groupby(['Rating','Type'])。\
apply(lambda x:len(x))。unstack()。\
plot.bar(stacked = True,
腐烂= 0,颜色= ['浅蓝色','深蓝色'],ax = ax2)
sns.despine(ax = ax2)
ax2.legend(loc ='左上')
ax2.set_xlabel('评分')
ax2.set_ylabel('Count')
ax2.set_title('根据应用程序等级得出的应用程序类型比率',weight ='bold') #3
ax3 = plt.subplot2grid((row_mask,col_mask),(1,0))
df_rating_content.groupby(['ContentRating','Rating'])。\
apply(lambda x:len(x))。unstack()。\
情节(种类='barh',堆积=真,
rot = 0,colormap =“蓝调”,ax = ax3)
sns.despine(ax = ax3)
ax3.legend(loc ='upper right',ncol = 3)
ax3.set_xlabel('评分')
ax3.set_ylabel('内容类型')
ax3.set_title('每种内容类型的评级比率',权重='粗体') #4
ax4 = plt.subplot2grid((row_mask,col_mask),(1,1))
df_rating_genres.groupby(['Genres','Rating'])。\
apply(lambda x:len(x))。unstack()。\
情节(种类='barh',堆积=真,
rot = 0,colormap =“蓝调”,ax = ax4)
sns.despine(ax = ax4)
ax4.legend(loc ='右下',ncol = 3)
ax4.set_xlabel('评分')
ax4.set_title('排名前6个流派的收视率',权重='粗体') #5 ax5 = plt.subplot2grid((row_mask,col_mask),(2,0),rowspan = 2,colspan = 2)
sns.barplot(x ='App',y ='Category',data = ratio_cat_app,调色板='Blues_r',ax = ax5)
sns.despine(ax = ax5)
ax5.set_title('每个类别的应用数量',weight ='bold') #6a
ax6a = plt.subplot2grid((row_mask,col_mask),(4,0))
ax6a.plot(val_y,cnt_y,'--o',线宽= 2)
sns.despine(trim = True,ax = ax6a)
ax6a.set_title('每年应用程序更新的趋势',weight ='bold') #6b
ax6b = plt.subplot2grid((row_mask,col_mask),(4,1))
ax6b.plot(months_seq,cnt_m,'--o',线宽= 2)
ax6b.set_title('montly应用程序更新中的上升和下降趋势',weight ='bold') #6c
ax6c = plt.subplot2grid((row_mask,col_mask),(5,0),colspan = 2)
#标准化值,以便所有值都可以可视化而不会产生任何偏差
pd.DataFrame(MinMaxScaler()。fit_transform(date_temp),index = months_seq,columns = date_temp.columns)。\
情节(种类='线',样式='-o',颜色图='蓝调',xticks = np.arange(12),ax = ax6c)
ax6c.set_title('每年月份的更新次数(标准),权重='粗体')
ax6c.legend(loc ='upper left',ncol = 5)
sns.despine(ax = ax6c) plt.tight_layout()
plt.show()
让我们还使用wordcloud根据最大rating , reviews , size和installs带来顶级应用程序的可视化。


这是wordcloud子图的代码-
从wordcloud导入WordCloud
import random #函数创建灰色wordcloud。
#信用:https://amueller.github.io/word_cloud/auto_examples/a_new_hope.html
def grey_color_func(word,font_size,位置,方向,random_state = None,
** kwargs):
返回“ hsl(0,0 %%,%d %%)”%random.randint(60,100) #根据应用名称创建功能字典
wc_rating = pd.DataFrame(df_temp.Rating).set_index(df.App).to_dict()['Rating']
wc_reviews = pd.DataFrame(df_temp.Reviews).set_index(df.App).to_dict()['Reviews']
wc_size = pd.DataFrame(df_temp.Size).set_index(df.App).to_dict()['Size']
wc_installs = pd.DataFrame(df_temp.Installs).set_index(df.App).to_dict()['Installs'] plt.figure(figsize =(14,8)) r_c = 8 ax7 = plt.subplot2grid((r_c, r_c),(0,0),colspan = 4,rowspan = 4)
wc1 = WordCloud()
wc1.generate_from_frequencies(频率= wc_rating)
ax7.imshow(wc1.recolor(color_func = grey_color_func,random_state = 3),插值=“双线性”)
ax7.set_title('评分',重量='粗体',尺寸= 20)
ax7.axis(“ off”) ax8 = plt.subplot2grid((r_c,r_c),(0,4),colspan = 4,rowspan = 4)
wc2 = WordCloud()
wc2.generate_from_frequencies(频率= wc_reviews)
ax8.imshow(wc2.recolor(color_func = grey_color_func,random_state = 3),插值=“双线性”)
ax8.set_title('评论',重量='粗体',尺寸= 20)
ax8.axis(“ off”) ax9 = plt.subplot2grid((r_c,r_c),(4,0),colspan = 4,rowspan = 4)
wc3 = WordCloud()
wc3.generate_from_frequencies(频率= wc_size)
ax9.imshow(wc3.recolor(color_func = grey_color_func,random_state = 3),插值=“双线性”)
ax9.set_title('Size',weight ='bold',size = 20)
ax9.axis(“ off”) ax10 = plt.subplot2grid((r_c,r_c),(4,4),colspan = 4,rowspan = 4)
wc4 = WordCloud()
wc4.generate_from_frequencies(频率= wc_installs)
ax10.imshow(wc4.recolor(color_func = grey_color_func,random_state = 3),插值=“双线性”)
ax10.set_title('Installs',weight ='bold',size = 20)
ax10.axis(“ off”) plt.show()
到目前为止,我们已经学习了熊猫提供的各种属性和方法,并验证了各种已知信息。 现在,让我们获取洞察力,即未知信息,这些信息将为进一步的决策提供价值。
本案例的目的是了解-
一个应用在Google Play商店中被评为5星需要什么?
因此,让我们尝试回答它。
print('具有5星评级的独特应用程序数量:',len(df [df.Rating == 5.0])) #具有5星评级的独特应用程序数量:271
在这271个应用程序中,让我们获取主要功能的最高价值以做出决定。
df_5star = df [df.Rating == 5.0] .reset_index() #保存索引以从df_temp 功能访问大小= [
df_5star.Category,
df_5star。评论,
df_temp.iloc [df_5star.iloc [:, 0] ,:]。大小,
df_5star.Installs,
df_5star.Type,
df_5star.ContentRating,
df_5star.Genres,
df_5star.LastUpdated,
df_5star.AndroidVer
] df_expect = pd.DataFrame(index = ['Category','Reviews','Size','Installs',
'类型','内容分级','类型','最新更新','Android版本'],
列= ['值']) cnt = 0
功能特点:
val_t,cnt_t = np.unique(fea,return_counts = True)
df_expect.iloc [cnt,0] = pd.DataFrame([val_t,cnt_t])。T.sort_values(1,ascending = False).iloc [0,0]
cnt + = 1 df_expect + ----------------- + --------------------- +
| | 价值观|
+ ----------------- + --------------------- +
| 分类| 家庭|
| 评论| 1 |
| 尺寸 11000000 |
| 安装| 100 |
| 类型 免费|
| 内容分级| 大家
| 类型| 教育|
| 最后更新| 2018-07-24 00:00:00 |
| Android版本| 4.1及以上|
+ ----------------- + --------------------- +
因此,根据我们的分析,我们的新手Sherlock可以指出,对于一款拥有高于星级5星评级的应用而言,这是关键。
总而言之,要成为五星级应用程序,它应该是免费的,适合所有人,并应强调教育和家庭。 此外,它应至少维护1次审核,安装100次并且可以消耗将近11 MB的磁盘空间,因此需要轻巧。 最后,它应该经常更新并保留在android 4.1及更高版本中。


这就完成了我们的熊猫指南。 祝贺您完成了这一甜蜜的旅程。 您已经了解了主要熊猫方法和属性的使用。
要了解更多信息,请访问Pandas原始网站,或加入任何有趣的在线课程,例如Applied AI课程,Coursera,Udemy,Udacity等。
GitHub — Jupyter笔记本(保存本教程中使用的完整代码)
应用人工智能课程,2018年12月15日
如有任何宝贵建议和反馈,欢迎随时提出您的意见。 此外,您可以随时通过kumar.vivek@acm.org与我联系以进行讨论。 学习愉快!