import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
data = pd.read_pickle("jian_shu.pkl")
one_list=[]
two_list=[]
for one,two in data:two_list+=twoone=one.split("\n")one=[[b]+[float(i[:-1]) * 1000 if 'k' in i else float(i) for i in c[2:-2].split("字 ·")] for _, b, c in np.array(one).reshape([-1, 3])]one=pd.DataFrame(data=one, columns=["name", "strs", "like"])one_list.append(one)
one=pd.concat(one_list)
one["url"]=two_list
one=one.drop_duplicates("name")
one=one.sort_values("like")
one["one_str_price"]=one["like"]/(one["strs"]+1)
one["get_like_str"]=one["strs"]/(one["like"]+1)
one=one.sort_values("one_str_price")
one=one.sort_values("get_like_str",ascending=False)
# one[["strs","like"]]
plt.plot(one["strs"].tolist())
plt.plot(one["like"].tolist())
plt.plot(one["one_str_price"].tolist())
plt.plot(one["get_like_str"].tolist())
plt.legend(["strs","like","like/strs"])
plt.show()# 用字最少最讨喜的 进行分析
# like 要大于0
# one=one.fill_na(0)
one=one[one["like"]>0]
one=one[one["strs"]>0]
# 每个字价值要大
one=one.sort_values("one_str_price")
one=one[one["one_str_price"]>one["one_str_price"].median()]
pd.to_pickle(one,"jian_fen.pkl")
这段代码的目的是处理和分析一个名为 “jian_shu.pkl” 的 pandas pickle 文件,该文件中包含了从简书网站抓取的数据。以下是对代码的逐行解释:
- 引入所需的库:
pandas as pd
:用于数据处理和分析。numpy as np
:用于数值计算。matplotlib.pyplot as plt
:用于绘制图表。
- 读取数据:
- 使用
pd.read_pickle("jian_shu.pkl")
读取之前保存的 pickle 文件。
- 使用
- 初始化列表:
one_list
和two_list
被初始化为空列表,用于存储处理后的数据。
- 处理数据:
- 对于
data
中的每一对one
和two
:- 将
two
(URL 列表)添加到two_list
。 - 将
one
(文章信息)分割成多行,并处理每一行以提取文章的名称、字数和喜欢数。 - 将处理后的数据转换成 DataFrame,并添加到
one_list
。
- 将
- 对于
- 合并数据:
- 使用
pd.concat(one_list)
将所有处理后的 DataFrame 合并成一个大的 DataFrame。
- 使用
- 清理数据:
- 删除重复的条目,基于文章名称。
- 按照喜欢数对数据进行排序。
- 计算每个字获得的喜欢数(
one_str_price
)和获得一个喜欢的字数(get_like_str
)。
- 绘制图表:
- 使用
plt.plot
绘制文章字数、喜欢数、每个字获得的喜欢数和获得一个喜欢的字数的图表。 - 使用
plt.legend
添加图例。 - 使用
plt.show
显示图表。
- 使用
- 筛选数据:
- 保留喜欢数大于 0 的文章。
- 保留字数大于 0 的文章。
- 按照每个字获得的喜欢数对数据进行排序。
- 保留每个字获得的喜欢数大于中位数的文章。
- 保存处理后的数据:
- 使用
pd.to_pickle
将筛选和排序后的数据保存到 “jian_fen.pkl” 文件。
代码中的一些潜在问题或需要注意的点:
- 使用
one=one.sort_values("one_str_price")
和one=one.sort_values("get_like_str",ascending=False)
被调用两次,但第二次调用会被第一次调用的结果覆盖。one=one.fill_na(0)
这行代码被注释掉了,但如果数据中确实存在 NaN 值,那么这行代码应该是用来填充 NaN 值的。- 在处理文章信息时,代码假设每行数据都有特定的格式,如果实际数据格式不同,这段代码可能无法正确处理。
one["url"]=two_list
这行代码将所有的 URL 添加到 DataFrame 中,但没有考虑到每篇文章可能有多个 URL,这可能需要进一步处理。- 在绘制图表时,
plt.plot
被调用四次,但只有最后一次调用会被显示,因为之前的调用结果被覆盖了。正确的做法应该是使用不同的变量来存储每次调用的结果,然后在plt.legend
中引用这些变量。