ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Python学习笔记7

Python学习笔记7 数据分析从一堆看似杂乱的数据中通过数据清洗、分析、可视化等手段找出有价值的信息和结论从而帮我们解决实际的问题。PandasPandas是一个功能强大的结构化数据分析的工具集底层是基于Numpy构建的无论是在数据分析领域、还是大数据开发场景中都有显著的优势。https://pandas.pydata.org核心DataFrame类似表格、Series类似表格中的一列安装pip install pandasimport pandas as pd df pd.DataFrame([ {name: 张三, age: 18}, {name: 王五, age: 19}, {name: 小明, age: 20}, {name: 小王, age: 21} ]) df2 pd.DataFrame({ name: [张三, 王五, 小明, 小王], age: [18, 19, 20, 21], }) df3 pd.DataFrame([ [张三, 18], [王五, 19], [小明, 20], [小王, 21] ], columns[name, age]) # 不指定索引默认从0开始 df4 pd.DataFrame([ [张三, 18], [王五, 19], [小明, 20], [小王, 21] ], columns[name, age], index[a, b, c, d])DataFrame常见属性index获取索引columns列名values值size元素个数dtypes每一列的类型shape数据维度行列Seriesdf4 pd.DataFrame([ [张三, 18], [王五, 19], [小明, 20], [小王, 21] ], columns[name, age], index[a, b, c, d]) s1 pd.Series([10, 20, 30, 40, 50]) s2 pd.Series((10, 20, 30, 40, 50), index[a, b, c, d, e]) s3 pd.Series({a: 10, b: 20, c: 30, d: 40, e: 50}) s4 df4[age] # df4.ageindex获取索引values值size元素个数dtypes数据类型shape数据维度行数据读取和写入基于Pandas中提供的API可以很方便地对各类数据文件进行读取和写入# 读取csv数据 df pd.read_csv(./csv_data/movie_list.csv, usecols[电影名, 年份]) print(df) # 数据处理 # df[金额] df[销售数量] * df[单价] # 写入数据 indexFalse: 不写入索引列 df.to_csv(./csv_data/movie_list_new.csv, indexFalse)数据查看df.head(n)查看前n行数据df.tail(n)查看结尾n行数据df.describe()数值列的统计描述df.info()查看数据信息列名、非空计数、数据类型df.shape属性查看数据维度行数列数df.columns属性查看列名数据选择df[列名] / df.列名操作单列df[[列1, 列2]]操作多列df.iloc[start: stop: step]基于行号完成切片不含stopdf.loc[start: stop: step]基于索引标签完成切片含stop数据过滤单条件df[df[销售数量 10]]单条件df[df[产品类别 ].isin([服装, 食品])]单条件df[df[单价 ].between(50, 200)]多条件并且、|或数据清洗指发现并纠正数据中可识别的错误的过程包括处理缺失值、重复值、异常值统一数据格式保证数据的一致性。# 缺失值处理 print(df.isnull()) # 删除缺失值所在行不改变原dataframe将删除缺失值后的dataframe返回 df1 df.dropna() # 删除缺失值所在列不改变原dataframe将删除缺失值后的dataframe返回 df2 df.dropna(axis1) # 填充缺失值 df.fillna(--) df.ffill() # 填充上一行数据 df.bfill() # 填充下一行数据 # 重复值处理 print(df.duplicated()) # 所有列的数据都重复 print(df.duplicated(subset[年份])) # 指定列的数据重复 # 删除重复值 keepfirst 保留重复的第一行 # keeplast保留重复数据的最后一行keep False 全不保留 df.drop_duplicates(subset[年份], keepfirst) # 异常值处理 # 查看异常值 print(df[df[年份 0]]) # 删除异常值 df.drop(df[df[年份 0]].index) # 修复异常值 df[年份] df[年份].abs() # 数据格式处理 如日期标准格式为2026-09-18有异常数据格式为2026/09/18 df[日期] df[日期].str.replace(/, -)数据排序与分组数据排序有两种排序方式升序和降序基于Pandas进行数据排序时可以按照多个列进行排序。ascending默认为True降序df.sort_values(年份, ascendingFalse)升序df.sort_values(年份, ascendingTrue)多列排序进行多个列排序时会先按照第一列进行排序第一列的值相同时才会按照第二列进行排序。df.sort_values([年份, 价格], ascending[False, False])数据分组分组操作就是把数据按照某个特征分成不同的组然后对每个组分别进行统计计算。df.groupby(年份) # 各个组数量 df.groupby(年份)[价格].cout() # 分组求和 df.groupby(年份)[价格].sum() # 每组最大值 df.groupby(年份)[价格].max() # 每组最小值 df.groupby(年份)[价格].min() # 平均值 df.groupby(年份)[价格].mean() # 多个统计操作 df.groupby(年份)[价格].agg([mean, max, min]) df.groupby(年份).agg({数量: [min, mean], 价格: max})MatplotlibMatplotlib是可视化开源Python库也是Python中使用最多的图像绘图库可以创建静态、动态、交互式的图表。安装pip install matplotlibimport matplotlib.pyplot as plt import random # 绘制折线图 x和y轴数据量一定要一致 x [1, 2, 3, 4, 5, 6, 7] y [random.randint(10, 15) for i in x] plt.plot(x, y) plt.show()Figure画布Title标题XlabelX轴标签YlabelY轴标签XtickX轴刻度Xtick_labelX轴刻度标签YtickY轴刻度Ytick_labelY轴刻度标签Grid网格线Legend图例子图为了能同时展示多个图表便于图表之间数据的直观对比和分析通常会在一个画布上创建多个子图。import matplotlib.pyplot as plt # 展示中文黑体 plt.rcParams[font.sans-serif] [SimHei] # nrows:行ncols:列figsize:宽,高dpi:像素 # figure:画布对象axes:子图数组 figure, axes plt.subplots(nrows1, ncols2, figsize(20, 6), dpi100) date [09/11, 09/12, 09/13, 09/14, 09/15, 09/16, 09/17, 09/18, 09/19] values [19, 26, 27, 20, 19, 18, 23, 26, 28] # 柱状图 axes1 axes[0] axes1.bar(date, values, width0.6, colorg) axes1.set_title(气温) axes1.set_xlabel(日期) axes1.set_ylabel(温度) # 饼状图 countries [中国, 印度, 美国, 印尼, 巴基斯坦, 尼日利亚, 巴西, 俄罗斯, 其他] values [14.01, 14.51, 3.4, 2.83, 2.51, 2.33, 2.12, 1.44, 20] axes2 axes[1] axes2.pie(values, labelscountries, autopct%1.1f%%) axes2.set_title(世界人口比例) axes2.legend(loclower center, ncol5, bbox_to_anchor(0.5, -0.1)) plt.show()日志记录为了能够灵活地控制项目中日志的输出可以通过官方提供的logging模块来输出日志。from fastapi import FastAPI import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s ) app FastAPI() app.get(/) def root(): logging.info(访问网页~) return FileResponse(static/index.html)日志级别就是给日志信息贴上的“重要性标签”常见的级别有DEBUG、INFO、WARNING、ERROR、FATAL日志级别依次升高
返回列表