用Pyecharts作图,一般要生成一个或者多个list()。对于不同的文本给出方式,需要采用不同的方法。下面就几种常见情况做一下总结
import pandas as pd
from collections import Counter
import re
from pyecharts. charts import Pie
from pyecharts import options as opts
1.数据区间
df_1 = pd. read_excel( 'D:\临时\【♥看板类型】Pyecharts绘制B站各个分区Top50\B站新榜_总粉丝数榜单.xlsx' , usecols= 'P' )
df_1. head( )
方法一, 自定义函数
def cut_work ( x) :
if x <= 100 :
return '0~100'
elif x <= 200 :
return '100~200'
elif x <= 300 :
return '200~300'
elif x <= 400 :
return '300~400'
elif x <= 500 :
return '400~500'
else :
return '>500'
df_1[ 'work_cut' ] = df_1[ '作品数' ] . apply ( lambda x: cut_work( x) )
df_w = df_1[ 'work_cut' ] . value_counts( )
df_w
0~100 263
100~200 245
>500 216
200~300 169
300~400 102
400~500 60
Name: work_cut, dtype: int64
方法二 cut() 函数
bins = [ 0 , 100 , 200 , 300 , 400 , 500 , 20000 ]
df_1[ 'cuts' ] = pd. cut( df_1[ '作品数' ] , bins= bins)
df_works = df_1. groupby( 'cuts' ) . count( )
df_w_paris = [ list ( z) for z in zip ( df_w. index. tolist( ) , df_w. values. tolist( ) ) ]
p_1 = (
Pie( )
. add(
'' ,
df_w_paris,
)
)
p_1. render_notebook( )
2.各行相同位置单元格有多个关键词文本,存在重复,要求统计各个关键词出现次数,即得到两个list,一个是关键词,另一个是和关键词顺序对应的计数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L8Mw46gP-1659326710234)(D:\临时\广告分析\广告位.jpg)]
df_2 = pd. read_excel( 'D:\临时\广告分析\ADX广告投放数据.xlsx' , usecols= 'L' ) . dropna( )
df_2. head( )
广告位 0 穿山甲联盟:93.81%, 快手:3.00%, 今日头条:0.84%, 天天快报:0.69%... 1 穿山甲联盟:14.55%, 腾讯视频:12.66%, 腾讯新闻:9.24%, 天天快报:8.... 2 穿山甲联盟:50.52%, 今日头条:6.51%, 腾讯视频:6.30%, 天天快报:6.2... 3 穿山甲联盟:50.54%, 今日头条:12.89%, 西瓜视频:11.62%, 抖音:11.... 4 穿山甲联盟:22.13%, 手机百度:18.88%, 好看视频:15.74%, 今日头条:1...
ads = df_2[ '广告位' ] . values. tolist( )
ads_str = '' . join( ads)
ads_list = re. findall( '\,\s*(.*?)\:' , ads_str)
ads_c = Counter( ads_list)
至此到得了 字段:出现次数 类似字典的Counter
对象, 下面按出现次数排序
ads_sorted = sorted ( ads_c. items( ) , key= lambda x: x[ 1 ] , reverse= True )
ads_names = [ b[ 0 ] for b in ads_sorted] [ : 20 ]
ads_values = [ b[ 1 ] for b in ads_sorted] [ : 20 ]
p_2 = (
Pie( )
. add(
"" ,
[ list ( z) for z in zip ( ads_names, ads_values) ] ,
radius= [ '25%' , '60%' ] ,
center= [ '50%' , '60%' ] , ) )
p_2. render_notebook( )