大家好,小编来为大家解答以下问题,python数据分析案例 药店销售数据分析,python数据分析案例大作业百度网盘,现在让我们一起来看看吧!
1.MoviesLens 1M数据集
1.1数据简介:
GroupLens实验室提供了一些从MoviesLens用户那里收集的20世纪90年代末到21世纪初的电影评分数据的集合。浙西额数据提供了电影的评分、流派、年份和观众数据(年龄、邮编、性别、职业)python简单新年祝福代码。
MovisLens1M数据集包含6000个用户对4000部电影的100万个评分。数据分布在三个表格之中:分别包含评分、用户信息和电影信息。
1.2代码(我是anaconda和jupyter两个软件联合进行的编码)
1.2.1python包的引用
import matplotlib.pyplot as plt import numpy as np import pandas as pd import matplotlib %matplotlib inline #在jupyter notebook中需要这一行,在pycharm中不需要 |
这是我在数据分析的过程中所运用到的python包。
1.2.2数据的调入
unames = ["user_id", "gender", "age", "occupation", "zip"] rnames = ["user_id", "movie_id", "rating", "timestamp"] mnames = ["movie_id", "title", "genres"] |
使用pandas库中的pd.read_table()
函数从MovieLens数据集的三个文件中读取数据。这些文件包括users.dat
、ratings.dat
和movies.dat
。
1.2.3数据的处理
users.head(5) ratings.head(5) movies.head(5) ratings #jupyter notebook 不用print也能有图像 |
可以使用head()
函数来查看数据框的前几行。
data = pd.merge(pd.merge(ratings, users), movies) data data.iloc[0] |
这段代码将合并ratings
、users
和movies
三个数据框,并将结果存储在data
变量中。通过打印data
,您可以查看合并后的数据框的内容。要访问data
中的特定行,可以使用.iloc[]
方法。
mean_ratings = data.pivot_table("rating", index="title", columns="gender", aggfunc="mean") mean_ratings.head(5) |
在使用pivot_table()
函数计算基于性别的电影评分的平均值,
pivot_table()
函数用于创建一个透视表,其中"rating"列作为值,"title"列作为行索引,"gender"列作为列索引,并使用"mean"聚合函数计算平均值。
通过打印mean_ratings.head(5)
,您可以查看计算得到的透视表的前5行,其中显示了每个电影标题的不同性别的平均评分。
ratings_by_title = data.groupby("title").size() ratings_by_title.head() active_titles = ratings_by_title.index[ratings_by_title >= 250] active_titles |
- 使用
groupby()
函数对data
数据框按照电影标题("title")进行分组,并使用size()
函数计算每个电影标题的出现次数。 - 使用
.head()
方法打印出计算得到的分组结果的前几行。 - 使用
ratings_by_title >= 250
来创建一个布尔索引,筛选出评分次数至少为250次的电影标题。然后,使用.index
属性获取这些电影标题的索引,并将结果存储在active_titles
变量中。通过打印active_titles
,您可以查看筛选得到的活跃电影标题。
mean_ratings = mean_ratings.loc[active_titles] mean_ratings |
这段代码使用.loc[]
索引器根据活跃电影标题的索引,从mean_ratings
数据框中选择相应的行。
通过打印mean_ratings
,您将得到筛选后的mean_ratings
数据框,其中只包含活跃电影标题,并显示了每个电影标题的不同性别的平均评分。
mean_ratings = mean_ratings.rename(index={"Seven Samurai (The Magnificent Seven) (Shichinin no samurai) (1954)": top_female_ratings = mean_ratings.sort_values("F", ascending=False) |
.rename()
方法用于重命名索引,将"Seven Samurai (The Magnificent Seven) (Shichinin no samurai) (1954)"修改为"Seven Samurai (Shichinin no samurai) (1954)",以便更好地匹配索引值。
然后,使用.sort_values()
方法按照女性评分("F")对mean_ratings
数据框进行降序排序,并将结果存储在top_female_ratings
变量中。
通过打印top_female_ratings.head()
,您可以查看按照女性评分排序后的前几行数据,这些行显示了女性对电影的评分情况。
mean_ratings["diff"] = mean_ratings["M"] - mean_ratings["F"] sorted_by_diff = mean_ratings.sort_values("diff") |
通过计算男性评分("M")与女性评分("F")之间的差异,创建了一个新的名为"diff"的列,并将结果存储在mean_ratings
数据框中。
然后,使用.sort_values()
方法按照"diff"列的值对mean_ratings
数据框进行排序,并将结果存储在sorted_by_diff
变量中。
通过打印sorted_by_diff.head()
,您可以查看按照差异值排序后的前几行数据,这些行显示了男性评分与女性评分之间差异最大的电影。
sorted_by_diff[::-1].head() |
在这段代码中,[::-1]
用于对sorted_by_diff
数据框进行逆序操作,即将数据框的行顺序反转。
通过打印sorted_by_diff[::-1].head()
,您将得到逆序后的前几行数据,这些行显示了女性评分高于男性评分的电影。
rating_std_by_title = data.groupby("title")["rating"].std() rating_std_by_title = rating_std_by_title.loc[active_titles] rating_std_by_title.head() |
,首先使用groupby()
函数对data
数据框按照电影标题("title")进行分组,并计算每个电影标题的评分("rating")的标准差,将结果存储在rating_std_by_title
变量中。
然后,使用.loc[]
索引器根据活跃电影标题的索引,从rating_std_by_title
中选择相应的行。
通过打印rating_std_by_title.head()
,您可以查看计算得到的活跃电影标题的评分标准差的前几行数据。
rating_std_by_title.sort_values(ascending=False)[:10] |
.sort_values()
方法用于按照评分标准差进行降序排序。
通过打印rating_std_by_title.sort_values(ascending=False)[:10]
,您将得到按照评分标准差降序排序的前10个电影,这些电影具有最高的评分标准差。
movies["genres"].head() movies["genres"].head().str.split("|") movies["genre"] = movies.pop("genres").str.split("|") movies.head() |
首先通过movies["genres"].head()
打印出"genres"列的前几行数据,以便查看原始数据。
接下来,使用.str.split("|")
将"genres"列中的每个元素按照"|"进行拆分,返回一个包含拆分后结果的Series对象。
然后,使用movies["genre"] = movies.pop("genres").str.split("|")
将拆分后的结果存储到一个新的列"genre"中,并从原始数据框中删除"genres"列。
最后,通过打印movies.head()
,您将得到包含新的"genre"列的数据框,显示了每个电影的多个分类。
movies_exploded = movies.explode("genre") movies_exploded[:10] |
使用.explode()
方法对"genre"列进行展开操作,将每个电影的每个分类单独显示。展开后的结果存储在新的数据框movies_exploded
中。
通过打印movies_exploded[:10]
,您将得到展开后的前10行数据,每行显示一个电影的一个分类。