疫情数据分析
1.导入外部数据 pd.read_csv('文件名') 查看数据属性: columns 列名 index 行索引 shape m行n列 dtyps 各列的类型 2.查找数据 方法1:用列名直接查找 df[[列名列表]] 方法2:用loc查找 df.loc[行取值,列取值] 注意:行取值可以用逻辑值来进行映射,逻辑真(True)会返回,逻辑假(False)会去掉 df.head(n) #返回前n行,默认为5行 df.tail(n) #返回后n行,默认为5行 3. 1> 设置表索引 方法1:df.reset_index(drop=True) 设置行索引为(0-n) 方法2:df.set_index(列名) 设置某一列为行索引 2> 找数据的最大或最小的n个值 方法1:df.msmallest(n,列名) df.nlargest(n,列名) 方法2:排序 df.sort_values(列名,ascending=False/True) #False降序 df.sort_index() 3> 简单的统计函数 df.函数名() sum() max() min() median() std() df.describe() #描述性统计 (一次可以统计出多个结果) 4> 处理与时间有关的数据 pd.to_datetime(时间列名) #将字符格式的时间数据,转换为日期时间格式 补充知识的:查找数据 df.iloc[行位置,列位置] #iloc中只能是数字,不能是列名等文本 df.loc[行索引,列索引] #loc中必须是索引。 5> 提取时间中的年,月,日,星期 year,month,day,weekday #功能2--数据分析代码 import pandas as pd pd.set_option('display.unicode.ambiguous_as_wide',True) pd.set_option('display.unicode.east_asian_width',True) # 函数1--打开文件 def open_def(file_name): file_name1 = open(file_name,encoding='utf-8') #用open命令按照utf-8格式打开 file_v1 = pd.read_csv(file_name1) #然后用pandas的命令读文件 file_v2 = file_v1.drop('Unnamed: 0',axis=1) #删除列, #查看属性 # print("查看属性如下:".center(30,"=")) # print("列名有:\n",file_v2.columns) # print('\n行索引是:\n',file_v2.index) # print('\n形状是:\n',file_v2.shape) # print('\n各列的类型是:\n',file_v2.dtypes) return file_v2 # 函数2--查找数据 def find_def(file_v1,col_name,k): find_v1 = file_v1.loc[:,col_name].head(k) return find_v1 # 函数3--统计数据 def stat_def(file_v1,b_v1,num_v1): result_v1 = file_v1.sort_values('当天确诊',ascending=b_v1).head(int(num_v1)) return result_v1 #函数4 -- 分组聚合 def group_def(file_v4,group_v1): file_v6 = file_v4.set_index("时间") #把时间作为索引 if group_v1 == "1": file_v6.index = file_v6.index.month #提取时间中的日作为索引 elif group_v1 == "2": file_v6.index = file_v6.index.day #提取时间中的日作为索引 elif group_v1 == "3": file_v6.index = file_v6.index.weekday #提取时间中的日作为索引 else: print("您输入的有误") #分组聚合 result_v2 = file_v6.loc[:,['当天疑似','当天确诊']].groupby(file_v6.index).agg(['sum','max','min']) return result_v2 #主函数 def main(): file_name = "china_hist_data.csv" file_v1 = open_def(file_name) # return file_v1 sel_v1 = input('请输入您的操作:1.查找 2.统计数据 3.分组聚合') if sel_v1 == "1": while True: print("您可以选择以下数据\n"+"|".join(list(file_v1.columns))) col_name = input("请输入您要查找的值(注意:多个值时,中间用空格分隔),输入0时,结束查找") if col_name == "0": break col_num = input("请输入您要显示的行数") try: find_v1 = find_def(file_v1,col_name.split(' '),int(col_num)) print(find_v1) except KeyError: print("没有您要找的值") return find_v1 elif sel_v1 == "2": sel_v2 = input("请输入您的选择1.较大的 2.较小的") num_v1 = input("请输入要查看的个数") if sel_v2 == "1": result_v1 = stat_def(file_v1,False,num_v1) elif sel_v2 == "2": result_v1 = stat_def(file_v1,True,num_v1) else: print("没有您的需求") return result_v1 elif sel_v1 == "3": sel_v2 = input("请输入分组方法:1.月 2.日 3.星期") #将字符串类型,转换为日期时间类型 file_v1['时间'] = pd.to_datetime(file_v1['时间']) file_v4 = file_v1.iloc[:,[1,5,6,9,10,11,13]] result_v2 = group_def(file_v4,sel_v2) return result_v2 else: print("您输入的有误") #函数入口 if __name__ == "__main__": file_v1 = main() file_v1