【PythonAI】2.2.4 技能实训:数据分组与聚合计算(groupby)

张开发
2026/6/21 2:54:29 15 分钟阅读
【PythonAI】2.2.4 技能实训:数据分组与聚合计算(groupby)
importpandasaspdimportnumpyasnp# 设置显示选项统信UOS终端适配pd.set_option(display.max_columns,None)pd.set_option(display.width,1000)pd.set_option(display.max_colwidth,50)# 读取CSV文件dfpd.read_csv(dirty_reviews.csv)# 查看基本信息print(数据形状:,df.shape)print(\n前5行数据:)print(df.head())print(\n数据信息:)df.info()print(\n基础统计:)print(df.describe())defdata_quality_report(df):生成数据质量报告report{总记录数:len(df),总列数:len(df.columns),缺失值统计:df.isnull().sum().to_dict(),缺失值比例:(df.isnull().sum()/len(df)*100).round(2).to_dict(),重复行数:df.duplicated().sum(),数据类型:df.dtypes.to_dict()}print(*50)print(数据质量评估报告)print(*50)forkey,valueinreport.items():print(f\n【{key}】)ifisinstance(value,dict):fork,vinvalue.items():print(f{k}:{v})else:print(f{value})print(*50)returnreport# 生成报告quality_reportdata_quality_report(df)# 1. 处理重复值print(f清洗前记录数:{len(df)})df_cleandf.drop_duplicates().copy()print(f删除重复后记录数:{len(df_clean)})# 2. 处理缺失值# 查看缺失情况print(\n缺失值统计:)print(df_clean.isnull().sum())# 策略comment为空的填充为用户未填写评价df_clean[comment]df_clean[comment].fillna(用户未填写评价)# 删除rating为空的记录关键字段不可缺失df_cleandf_clean.dropna(subset[rating])# 3. 统一评分格式统一转换为5分制defnormalize_rating(rating):将评分统一为5分制ifpd.isna(rating):returnnp.nan ratingfloat(rating)ifrating5:# 假设10分制returnround(rating/2,1)returnrating df_clean[rating_5]df_clean[rating].apply(normalize_rating)# 4. 清洗评论内容去除HTML标签importredefclean_html(text):去除HTML标签ifpd.isna(text):return# 去除HTML标签cleanre.sub(r[^],,str(text))# 去除特殊字符cleanre.sub(r[\x00-\x08\x0b-\x0c\x0e-\x1f\x7f-\xff],,clean)returnclean.strip()df_clean[comment_clean]df_clean[comment].apply(clean_html)# 5. 标准化时间格式defparse_date(date_str):解析多种日期格式ifpd.isna(date_str):returnNonedate_strstr(date_str).strip()# 尝试多种格式formats[%Y-%m-%d,%Y/%m/%d %H:%M,%Y.%m.%d,%Y-%m-%d %H:%M:%S]forfmtinformats:try:returnpd.to_datetime(date_str,formatfmt)except:continue# 如果都失败使用pandas自动解析try:returnpd.to_datetime(date_str)except:returnNonedf_clean[submit_time_clean]df_clean[submit_time].apply(parse_date)# 6. 数据筛选与排序# 筛选有效评分1-5分df_cleandf_clean[(df_clean[rating_5]1)(df_clean[rating_5]5)]# 按时间排序df_cleandf_clean.sort_values(submit_time_clean,ascendingFalse)# 筛选高质量评价评分4且评论长度10high_qualitydf_clean[(df_clean[rating_5]4)(df_clean[comment_clean].str.len()10)]print(f\n高质量评价数:{len(high_quality)})# 按城市分组统计city_statsdf_clean.groupby(city).agg({rating_5:[mean,count,std],user_id:nunique}).round(2)city_stats.columns[平均评分,评价数量,评分标准差,用户数]city_statscity_stats.sort_values(评价数量,ascendingFalse)print(各城市评价统计:)print(city_stats)# 评分分布分析rating_distdf_clean[rating_5].value_counts().sort_index()print(\n评分分布:)print(rating_dist)# 时间趋势分析按月统计df_clean[month]df_clean[submit_time_clean].dt.to_period(M)monthly_trenddf_clean.groupby(month).agg({rating_5:mean,user_id:count}).round(2)monthly_trend.columns[月均评分,评价数]print(\n月度趋势:)print(monthly_trend)运行结果(uos_ai_env)MuhtarUOS-Desktop:~/AI_Projects$ python3 quality_report.py 数据形状:(6,6)前5行数据: user_id username rating comment submit_time city 0 1001 用户A 5.0 很好吃的红枣p推荐购买/p 2024-01-15 乌鲁木齐 1 1002 用户B 8.0 味道不错 2024/01/16 10:30 阿克苏 2 1003 用户C NaN NaN 2024.01.17 喀什 3 1001 用户A 5.0 很好吃的红枣p推荐购买/p 2024-01-15 乌鲁木齐 4 1004 用户D 9.0 物流很快包装完好 2024-01-18 14:20 和田 数据信息: classpandas.core.frame.DataFrame RangeIndex: 6 entries,0 to 5Datacolumns(total 6 columns):# Column Non-Null Count Dtype----------------------------0 user_id 6 non-null int64 1 username 6 non-null object 2 rating 5 non-null float64 3 comment 5 non-null object 4 submit_time 6 non-null object 5 city 6 non-null object dtypes: float64(1),int64(1),object(4)memory usage: 416.0 bytes 基础统计: user_id rating count 6.000000 5.000000 mean 1002.666667 6.200000 std 1.632993 2.167948 min 1001.000000 4.000000 25% 1001.250000 5.000000 50% 1002.500000 5.000000 75% 1003.750000 8.000000 max 1005.000000 9.000000 数据质量评估报告 【总记录数】 6 【总列数】 6 【缺失值统计】 user_id: 0 username: 0 rating: 1 comment: 1 submit_time: 0 city: 0 【缺失值比例】 user_id: 0.0 username: 0.0 rating: 16.67 comment: 16.67 submit_time: 0.0 city: 0.0 【重复行数】 1 【数据类型】 user_id: int64 username: object rating: float64 comment: object submit_time: object city: object 清洗前记录数: 6 删除重复后记录数: 5 缺失值统计: user_id 0 username 0 rating 1 comment 1 submit_time 0 city 0 dtype: int64 高质量评价数: 1 各城市评价统计: 平均评分 评价数量 评分标准差 用户数 city 乌鲁木齐 5.0 1 NaN 1 伊犁 2.0 1 NaN 1 和田 4.5 1 NaN 1 喀什 4.0 1 NaN 1 昌吉 5.0 1 NaN 1 阿克苏 4.0 1 NaN 1 评分分布: 2.0 1 4.0 2 4.5 1 5.0 2 Name: rating_5,dtype: int64 月度趋势: 月均评分 评价数 month 2024-01 4.08 6(uos_ai_env)MuhtarUOS-Desktop:~/AI_Projects$

更多文章