1.pandas库相关介绍
1-1安装pandas
1-2Pandas Series类似表格中一个列(column), 类似于一维数组,可以保存任何数据类型Series由索引(index) 和列组成,函数如下:
pandas.Series(data,index,dtype)
1-3下述代码演示了如何使用Pandas库创建Series对象,并通过索引检索数据
import pandas as pd
#根据列表或者元祖创建
s = pd.Series(['李四','王五','张三']);
print(s)
#根据字典创建
s1 = pd.Series({"name":"李四","age":23});
print(s1)
# 使用索引检索数据
print(s1["name"])
其运行结果如下所示:
1-4数据帧
DataFrame构造方法如下:
pandas .DataFrame (data,index, columns, dtype)
参数说明:
- data:-组数据(ndarray. series, map, lists, dict等类型)。
- index: 索引值,或者可以称为行标签。
- columns:列标签,默认为Rangelndex (O, 1,2, ... n)。
- dtype:数据类型。
示例:列表创建需要colunms取列名,也可以用字典创建
import pandas as pd
#根据列表或者元祖创建
# s = pd.DataFrame([['李四',23],['王五',12],['张三',13]],columns=["name","age"]);
# 根据字典创建
s = pd.DataFrame({"name":['李四','王五','张三'],"age":[100,101,102]});
print(s)
其运行结果如下所示:
1-5将文件转为csv文件,代码如下所示:
import pandas as pd
data = [['李四', 110], ['王五', 55], ['张三', 88]]
df = pd.DataFrame(data, columns=["name", "age"])
#写入文件,index:False 不写入索引,True 写入索引
# df.to_csv('test.csv', index=False)
df = pd.read_csv('test.csv', usecols=['name'])
print(df)
其运行结果如下所示:
1-6读取某一列代码如下所示:
df = pd.read_csv('test.csv', usecols=['name'])
print(df)
其运行结果如下图所示:
2.pandas相关函数介绍
2-1sum函数
Pandas中的sum()函数用于对DataFrame或Series对象进行求和。它可以对整个对象中的元素或每一列/行进行求和操作
示例:
import pandas as pd
data = [['李四', 23], ['王五', 12], ['张三', 13]]
df = pd.DataFrame(data, columns=["name", "age"])
# 求一列的和
sum = df["age"].sum()
print(sum)
其运行结果如下所示:
2-2mean函数
Pandas中的mean()函数用于计算DataFrame或Series对象的均值。它可以对整个对象中的元素或每一列/行进行求均值操作
示例:
import pandas as pd
data = [['李四', 23], ['王五', 12], ['张三', 13]]
df = pd.DataFrame(data, columns=["name", "age"])
# 求一列的平均数
data = df["age"].mean()
print(data)
其运行结果如下所示:
2-3head和tail函数
head()和tail():分别返回DataFrame的前几行和后几行数据
示例:
import pandas as pd
df = pd.DataFrame(
{
"name":['李四','王五','张三','王丽','王华','张丽丽'],
"age":[22,23,23,22,23,23]
}
)
print(df)
#返回前3行
print(df.head(3))
#返回后2行
print(df.tail(2))
其运行结果如下所示:
2-4sort_values函数
sort_values():对DataFrame的指定列进行排序
示例:
import pandas as pd
df = pd.DataFrame(
{
"name":['李四','王五','张三','王丽','王华','张丽丽'],
"age":[22,23,23,22,23,23]
}
)
print("按照列名年龄进行升序")
df1 = df.sort_values(by="age",ascending=False)
print(df1)
其运行结果如下所示:
2-5去重函数
●duplicated()函数可以检测重复项
●drop_ duplicates() 函数可以删除重复项
示例:
import pandas as pd
data = [['李四', 110], ['王五', 55], ['张三', 88],['张三', 88],['李四', 110]];
df = pd.DataFrame(data, columns=["name", "age"]);
iss = df.duplicated()
#检测重复项
print(iss)
#删除重复项
dfs = df.drop_duplicates()
print(dfs)
其运行结果如下所示:
3.Pyechants数据可视化
3-1安装
3-2Bar:柱状图/条形图
其中initopts为初始化配置项,如下图所示:
基础柱状图代码如下所示:
#导入柱状图
from pyecharts.charts import Bar
#导入配置项
from pyecharts import options as opts
#基础柱状图
def barBase():
#x数据格式
x = ["一月","二月","三月","四月","五月","六月"]
#y轴数据
y = [15,20,22,23,34,40]
#创建柱状图对象
b = Bar()
#添加x轴数据
b.add_xaxis(x)
# 添加y轴数据
b.add_yaxis("",y)
# 样式设置
# b.set_global_opts() 全局设置
b.set_global_opts(title_opts=opts.TitleOpts(title="统计半年的温度变化"))
# b.set_series_opts() 系列设置
b.set_series_opts(itemstyle_opts=opts.ItemStyleOpts(color="red"))
#生成一个静态页面
b.render("1-基础柱状图.html")
if __name__ == "__main__":
barBase()
其运行结果为:
其中y轴根据数值区间自动生成数值
3-3饼图
基础饼图代码如下所示:
#导入饼图
from pyecharts.charts import Pie
#导入配置项
from pyecharts import options as opts
#饼图
def pieBase():
#饼图的数据结构
data =[("90分以上",5),("80分到90分之间",15),("60分到80分之间",11),("60分一下",2)]
#创建饼图
p = Pie()
#添加数据
p.add("考试成绩分布",data)
p.set_global_opts(title_opts=opts.TitleOpts(title="成绩统计"))
#添加颜色
p.set_colors(["#B8860B","#458B74","#40E0D0","#FFD700"])
p.render("3-饼图.html")
其运行结果为:
3-4时间轴
基础时间轴设置代码如下所示:
#导入柱状图和时间轴
from pyecharts.charts import Bar,Timeline,Map,Line,Pie,Grid
#导入配置项
from pyecharts import options as opts
from pyecharts.globals import ThemeType
#基本时间轴
def timeBase():
#构建柱状图的时间轴数据
data=[
{"x": ["一月","二月","三月"],"y":[10,24,56]},
{"x": ["一月", "二月", "三月"], "y": [20, 14, 36]},
{"x": ["一月", "二月", "三月"], "y": [70, 224, 156]}
]
#创建时间轴对象
t = Timeline()
year =[2020,2021,2022]
for i in range(len(year)):
#创建柱状图
b =Bar()
b.add_xaxis(data[i]["x"])
b.add_yaxis("",data[i]["y"])
#添加到时间轴
t.add(b,"{}".format(year[i]))
#开启自动播放配置
t.add_schema(is_auto_play=True,play_interval=1000)
t.render("6-时间轴.html")
# 地图的三年数据
dataMap = [
[("四川省", 200), ("云南省", 100), ("贵州省", 300)],
[("四川省", 500), ("云南省", 200), ("贵州省", 350)],
[("四川省", 100), ("云南省", 180), ("贵州省", 600)]
]
# 柱状图的三年数据
dataZhu = [
{"x": ["一月", "二月", "三月"], "y": [10, 24, 56]},
{"x": ["一月", "二月", "三月"], "y": [20, 14, 36]},
{"x": ["一月", "二月", "三月"], "y": [70, 224, 156]}
]
# 饼图的三年数据
dataPie = [
[("90分以上", 5), ("80分到90分之间", 15), ("60分到80分之间", 11), ("60分一下", 2)],
[("90分以上", 15), ("80分到90分之间", 7), ("60分到80分之间", 44), ("60分一下", 12)],
[("90分以上", 25), ("80分到90分之间", 12), ("60分到80分之间", 21), ("60分一下", 19)]
]
# 折线图的三年数据
dataLine = [
{"x": ["一月", "二月", "三月"], "y": [10, 24, 56]},
{"x": ["一月", "二月", "三月"], "y": [20, 14, 36]},
{"x": ["一月", "二月", "三月"], "y": [70, 224, 156]}
]
year =[2020,2021,2022]
#组合图表
def getYear(i):
#1 地图
m = Map()
m.add("地图",dataMap[i],"china",center=[133,24])
m.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
# 2 柱状图
b = Bar()
b.add_xaxis(dataZhu[i]["x"])
b.add_yaxis("柱状图",dataZhu[i]["y"])
#设置不显示图例
b.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
#饼图
p = Pie()
p.add("饼图",dataPie[i],center=["80%","35%"],radius=["","40%"])
#设置不显示图例
p.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
#折线图
l = Line()
l.add_xaxis(dataLine[i]["x"])
l.add_yaxis("折线图", dataLine[i]["y"])
#设置不显示图例
l.set_global_opts(legend_opts=opts.LegendOpts(is_show=False))
g = Grid()
#设置柱状图为左下角
g.add(b, grid_opts=opts.GridOpts(pos_top="60%",pos_right="60%"))
g.add(l, grid_opts=opts.GridOpts(pos_top="60%", pos_left="60%"))
g.add(p, grid_opts=opts.GridOpts())
g.add(m, grid_opts=opts.GridOpts())
return g
def getLine():
#设置容器的款高度
t = Timeline(init_opts=opts.InitOpts(width="1600px",height="800px",theme=ThemeType.DARK))
for i in range(len(year)):
g = getYear(i)
t.add(g,time_point=str(year[i]))
#开启自动播放
t.add_schema(is_auto_play=True)
t.render("6-多行时间轴.html")
if __name__ == "__main__":
getLine()
if __name__ == "__main__":
timeBase()
其运行结果为:
3-5中国地图
中国地图设置代码如下所示:
其运行结果为:
3-6仪表图
基础仪表图设置代码如下所示:
#导入地图
from pyecharts.charts import Gauge
#导入配置项
from pyecharts import options as opts
#基本仪表图
def gaugeBase():
#仪表图数据结构
data = [("增长率",50),("死亡率",20)]
#创建仪表图对象
g = Gauge()
g.add("统计人口增长",data,min_=10,max_=200,split_number=8)
g.render("5-仪表图.html")
if __name__ =="__main__":
gaugeBase()
其运行结果为:
4.将爬取的信息进行可视化案例
将之前爬取的豆瓣网信息放入csv文件,再转为DataFrame对象中,通过pandas分析,最后进行数据可视化,其代码如下所示:
import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
df = pd.read_csv("movie.csv")
# print(df)
df1 = df.sort_values(by="评论人数",ascending=False)
df2 = df1.head(5)
print(df2)
movies_name = df2["电影名"].to_list()
movies_pnum = df2["评论人数"].to_list()
b = Bar()
b.add_xaxis(movies_name)
b.add_yaxis("评论人数排名前五的电影",movies_pnum)
b.render("评论人数排名前五的电影.html")
其运行结果为: