pyecharts和数据分析常用技巧:

数据分析师常用技巧:

pdb调试:(类似debug)

#pbd 断点   'l':断点上下文 'c':继续执行
# 'n':运行下一句 'step':进入函数
#可以直接运行代码语句 例credit.shape
pdb.set_trace()

时间格式转换:

data["上映时间"] = pd.to_datetime(data["上映时间"])
data["上映年份"] = data["上映时间"].dt.year

数据透视表:

movies_type_year_relation = pd.pivot_table(
    data=data,
    index='上映年份',
    columns='电影类型',
    aggfunc='size'
)

Pyecharts:(百度开源的画图插件)

from pyecharts.charts import *
import pyecharts.options as opts
# 导入主题配置项
from pyecharts.globals import ThemeType
# theme=ThemeType.PURPLE_PASSION # 增加主题
c = (Funnel()  # 漏斗图的实例化
    .add("评分", [list(z) for z in zip(diff_runtime.index.astype(str).tolist(), diff_runtime["平均评分"].tolist())])
    .set_global_opts(title_opts=opts.TitleOpts(title="电影时长与评分的关系"))
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside"))
)
from pyecharts.charts import Geo  # 地理图表
from pyecharts.globals import GeoType
from pyecharts.globals import SymbolType
geo.add_schema(
    maptype="湖北",
    # 通过样式设置---为地图增加颜色
    itemstyle_opts=opts.ItemStyleOpts(color="#323c48", border_color="#111"),
    # 显示地图上城市名称
    label_opts=opts.LabelOpts(is_show=True))
# 增加数据【从哪个城市到哪个城市】
geo.add(series_name="",
    # data_pair=[['武汉', '黄冈'], ['武汉', '十堰']],
    data_pair=data_pair,
    type_=GeoType.LINES,
    effect_opts=opts.EffectOpts(
    symbol=SymbolType.ARROW, symbol_size=6, color="blue"),
    linestyle_opts=opts.LineStyleOpts(curve=0.2),)
# label信息  属于 系列配置项
geo.set_series_opts( label_opts=opts.LabelOpts(is_show=False))
geo.render("流向图.html")

轮播图:

from pyecharts.charts import Geo, Timeline
t1 = Timeline()
t1.add(geo, "2020-{}日".format(i))

地图热力图:

# 实例化画图对象
china_map = Map(init_opts=opts.InitOpts(theme=ThemeType.PURPLE_PASSION))

大拼图:

# 形成大屏图,page需要为可拖拽
page = Page(layout=Page.DraggablePageLayout)

page = Page
page.save_resize_html(
    # 将什么合成大屏图
    source='疫情图的组合.html',
    cfg_file='chart_config.json',
    dest='终极大屏图.html'
)

 

 

 

 曲线面积图:

from pyecharts.faker import Faker
c = (Line()
    .add_xaxis(Faker.choose())
    .add_yaxis("商家A", Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
    .add_yaxis("商家B", Faker.values(), areastyle_opts=opts.AreaStyleOpts(opacity=0.5))
    .set_global_opts(title_opts=opts.TitleOpts(title="Line-面积图"))
    .render("line_area_style.html"))

网格图:

from pyecharts.charts import Grid  # 网络
grid = Grid(init_opts=opts.InitOpts(bg_color='gray'))  # 子图的效果【组合图】
# 一个画图对象; 该图的位置设置
grid.add(line, grid_opts=opts.GridOpts(pos_left="30%",
                                       pos_right='30%'),
         # 图中有多条轴,需要设置
         is_control_axis_index=True  )

柱状图折线图组合图:

# 不同类型的组合在一起
overlape = bar.overlap(line)  # overlap前的主图

数据处理:

# 如果该行存在 空值,删除该行
data = data.dropna(axis=0, how='any', inplace=False)

data.info()
drop_data = data[mask].index  # 删除行索引
# print("将删除的数据\n", drop_data[['销售数量', '应收金额', '实收金额']])
data.drop(index=drop_data, inplace=True)
# 按照 社保卡号+成交时间  去重
out2 = data.drop_duplicates(subset=["社保卡号", "成交时间"])
# keep {'first', 'last', False}
# first 保留第一个; last 保留最后一条; False删除所有重复的

格式化:

print("患者没有 (医保卡) 的人占比?%.2f%%"%(no_use_pct*100))

箱线图:

def box_analysis(val):# 下四分位数 和上 四分位数
    ql, qu = val.quantile(q=[0.25, 0.75])
    IQR = qu - ql    # 间距
    low = ql - 1.5 * IQR  # 正常值的下限
    high = qu + 1.5 * IQR  # 正常值的上限
    return (val >= low) & (val <= high) 

哑变量编码:

# 参数2:prefix 前缀;生成的哑变量结果的列名称的前缀
out = pd.get_dummies(stu["城市"], prefix="城市")
print("哑变量转换后\n", out)

连续数据离散化:

# (1) 等宽法:区间信息传入是int, 每个区间的宽度是一样的
# 参数 bins 区间信息, 可以是int or 序列
# bins = [165, 170, 180, 190]
stu["hight"] = pd.cut(stu["hight"],
        # bins=bins,bins=4,
        include_lowest=True,  # 区间是否包含最小值)

获取表格格式文件中所有工作表:

gongzi = pd.read_excel("../data/2020.07工资.xls",
       sheet_name=None,  # 获取所有工作表,返回的是字典)
print("工作表的名称", gongzi.keys())
detail1 = gongzi["meal_order_detail1"]

两列是否一致:

print("判断两列内容是否完全一致", df['A'].equals(df['B']))
print("判断两个DF内容是否完全一致", df.equals(df2))

简单的填充空值的方法:

# 不同列填充不同的值,借助字典的形式
 data.fillna({"商品ID": 0, "类别ID": '/'},inplace=True)
    method :{{'backfill', 'bfill', 'pad', 'ffill', None}}
   backfill', 'bfill'  使用下一个非空值填充
   'pad', 'ffill' 上一个非空值填充
data["类别ID"].fillna(method='backfill',inplace=True)

线性关系/拉格朗日插空值:

from scipy.interpolate import interp1d  # 线性关系插值

# 提供已知的数据---建立自变量和因变量之间的关系
fun = interp1d(x=[1,2,3,4,7,8],
               y=[3,5,7,9,15,17] )


from scipy.interpolate import lagrange  # 拉格朗日 【非线性插值】

fun = lagrange(x=[1,2,3,4,7,8],
               w=[3,5,7,9,15,17])
print(fun(5))  # [11. 13.]
print(fun([5,6]))  # [11. 13.]

重叠合并:

# 内容相对完整的表作为主表  #重叠合并
out = df.combine_first(df2)

groupby(分组聚合):

 

 

透视表:

out2 = pd.pivot_table(
    data=stu,  # 进行透视的原始数据
    index=['cls_id', 'group_id'],  # 行索引/ 行分组键,根据那列内容进行分组,该列的不同内容会作为行索引
    values=['score', 'hight'],  # 关注的数据
    # aggfunc='mean'  # 对数据进行什么计算)
print("不同班级不同小组的学生的平均成绩\n", out2)

 交叉表:

 

 统计频数:

from collections import Counter
lists = ['a', 'a', 'b', 5, 6, 7, 5]
a = Counter(lists)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值