【读书笔记】只有浅出没有深入的数据分析(十二 )

这章的前提是“数据邦新闻”想让我们帮助分析销量。这里总共给了4个表格。

import pandas as pd

df1 = pd.read_csv('./hfda_data/hfda_ch12_articleHitsComments.csv')
df2 = pd.read_csv('hfda_ch12_articles.csv')
df3 = pd.read_csv('./hfda_data/hfda_ch12_issues.csv')
df4 = pd.read_csv('./hfda_data/hfda_ch12_sales.csv')


我们这里先导入4个表格,大家可能发现df2的路径变了,因为原csv文件可能是excel做的而直接更改了后缀名,导致用pandas读取会报错pandas.errors.ParserError: Error tokenizing data. C error: Expected 4 fields in line 33, saw 6。

这里我用numbers表格打开文件重新另存为一个csv后pandas就可以读取了,我直接另存为到python当前目录下了。

这时我们看一下df2.shape  会告诉我们(1162,1) 我们用记事本打开csv文件,把第一行的hfda_ch12_articles删掉即可

这时df2.shape就会变为(1162,6)了。

文章这里让我们把hfda_ch12_issues.csv创建一个副本。

df3.to_excel('./hfda_data/dispatch_analysis.xls')

这时书中让我们把两个表格合并(把df2加入到df3中).两个表格的形状不同,如果我们这里添加会出现很多的麻烦。我们不妨看一下作者要做什么。

原来作者要把df2里的issueID出现次数作为统计量加入到df3中,这样我们就容易处理多了。

 

import pandas as pd


df1 = pd.read_csv('./hfda_data/hfda_ch12_articleHitsComments.csv')
df2 = pd.read_csv('hfda_ch12_articles.csv')
df2 = df2.iloc[::, [0, 1, 2, 3]]
df3 = pd.read_csv('./hfda_data/hfda_ch12_issues.csv')
df4 = pd.read_csv('./hfda_data/hfda_ch12_sales.csv')

Article_count = []

for i in range(1, 116):
    Article_count.append(df2[df2.issueID == i].shape[0])


df5 = pd.DataFrame(Article_count, columns=['ArticleCount'])
res = pd.merge(df3, df5, left_index=True, right_index=True, how='outer')

我这里先把df2 后两列nan的数据去掉,免得麻烦。

 

书中又总结了销量,我们这里按照上面的方法继续写。

lotsize = []
for i in range(1, 116):
    lotsize.append(np.sum(df4[df4.issueID == i].lotSize))


df6 = pd.DataFrame(lotsize,columns = ['Sales'])

res1 = pd.merge(res, df6, left_index=True, right_index=True, how='outer')

res1.to_csv('./hfda_data/hfda_ch12_total.csv')

按照书里的方法我们将res1存下来。

 

然后我们来制作散点图:

import pandas as pd
import matplotlib.pyplot as plt


df = pd.read_csv('./hfda_data/hfda_ch12_total.csv')

plt.figure(1)
plt.scatter(df.ArticleCount, df.Sales, s=20, linewidths=0.2, edgecolors='black')

plt.show()

书中通过jitter加入了一些噪音让散点图的点更能分散开,我们这里把点改成空心效果也还不错。或者我们不使用c='white',直接改marker的参数,不画点(其实是圆,可以自己动手试试点是什么样,marker='.')。总之matplotlib可更改参数还是很多的,我们可以通过更改各种参数,让数据更容易直接观察。

下面书中通过分9组(按照作者分)分别针对他们的评论次数和点击率制作成散点图。这里我们也做一下。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


df = pd.read_csv('./hfda_data/hfda_ch12_articleHitsComments.csv')

Niko = df.authorName.str.count('Niko Christian').nonzero()
Paul = df.authorName.str.count('Paul Semenec').nonzero()
Rafaela = df.authorName.str.count('Rafaela Cortez').nonzero()
Jon = df.authorName.str.count('Jon Radermacher').nonzero()
Matt = df.authorName.str.count('Matt Janney').nonzero()
Nicole = df.authorName.str.count('Nicole Fry').nonzero()
Brewster = df.authorName.str.count('Brewster Dombkowski').nonzero()
Destiny = df.authorName.str.count('Destiny Adams').nonzero()
Jason = df.authorName.str.count('Jason Wightman').nonzero()

NikowebHits = []
NikocommentCount = []
PaulwebHits = []
PaulcommentCount = []
RafaelawebHits = []
RafaelacommentCount = []
JonwebHits = []
JoncommentCount = []
MattwebHits = []
MattcommentCount = []
NicolewebHits = []
NicolecommentCount = []
BrewsterHits = []
BrewstercommentCount = []
DestinyHits = []
DestinycommentCount = []
JasonHits = []
JasoncommentCount = []

for i in np.array(Niko).squeeze():
    NikowebHits.append(df.iloc[i, 2])
    NikocommentCount.append(df.iloc[i, 3])

for i in np.array(Paul).squeeze():
    PaulwebHits.append(df.iloc[i, 2])
    PaulcommentCount.append(df.iloc[i, 3])

for i in np.array(Rafaela).squeeze():
    RafaelawebHits.append(df.iloc[i, 2])
    RafaelacommentCount.append(df.iloc[i, 3])

for i in np.array(Jon).squeeze():
    JonwebHits.append(df.iloc[i, 2])
    JoncommentCount.append(df.iloc[i, 3])

for i in np.array(Matt).squeeze():
    MattwebHits.append(df.iloc[i, 2])
    MattcommentCount.append(df.iloc[i, 3])

for i in np.array(Nicole).squeeze():
    NicolewebHits.append(df.iloc[i, 2])
    NicolecommentCount.append(df.iloc[i, 3])

for i in np.array(Brewster).squeeze():
    BrewsterHits.append(df.iloc[i, 2])
    BrewstercommentCount.append(df.iloc[i, 3])

for i in np.array(Destiny).squeeze():
    DestinyHits.append(df.iloc[i, 2])
    DestinycommentCount.append(df.iloc[i, 3])

for i in np.array(Jason):
    JasonHits.append(df.iloc[i, 2])
    JasoncommentCount.append(df.iloc[i, 3])

plt.figure(1)

plt.subplot(3, 3, 1)
plt.scatter(NikocommentCount, NikowebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 2)
plt.scatter(PaulcommentCount, PaulwebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 3)
plt.scatter(RafaelacommentCount, RafaelawebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 4)
plt.scatter(JoncommentCount, JonwebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 5)
plt.scatter(MattcommentCount, MattwebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 6)
plt.scatter(NicolecommentCount, NicolewebHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 7)
plt.scatter(BrewstercommentCount, BrewsterHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 8)
plt.scatter(DestinycommentCount, DestinyHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.subplot(3, 3, 9)
plt.scatter(JasoncommentCount, JasonHits, s=20, linewidths=0.2, edgecolors='black')
plt.xlim(0, 40)
plt.ylim(0, 4000)

plt.show()

请一定要统一xlim和ylim。

散点图和书中一致,Rafaela的表现是最好的。Destiny和Nicole表现也还算不错,Paul,Brewster,Jason则表现的不太受欢迎,Niko的数据很分散。

至此书中已经介绍完12章了,我准备再写两章(第十三章和附录1)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值