Python数据分析与可视化

请问106行中的date为什么错误 ,实现的功能是什么

img

coding:utf-8

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def rosetype_pie(country, confirmed, size, colors):
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示

num = len(size)  # 柱子的数量
width = 2 * np.pi / num  # 每个柱子的宽度
rad = np.cumsum([width] * num)  # 每个柱子的角度

plt.figure(figsize=(8, 8), dpi=500, )  # 创建画布
ax = plt.subplot(projection='polar')
ax.set_ylim(-1, np.ceil(max(size) + 1))  # 中间空白,-1为空白半径大小,可自行调整
ax.set_theta_zero_location('N', -5.0)  # 设置极坐标的起点方向 W,N,E,S, -5.0为偏离数值,可自行调整
ax.set_theta_direction(1)  # 1为逆时针,-1为顺时针
ax.grid(False)  # 不显示极轴
ax.spines['polar'].set_visible(False)  # 不显示极坐标最外的圆形
ax.set_yticks([])  # 不显示坐标间隔
ax.set_thetagrids([])  # 不显示极轴坐标

ax.bar(rad, size, width=width, color=colors, alpha=1)  # 画图
ax.bar(rad, 1, width=width, color='white', alpha=0.15)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 3, width=width, color='white', alpha=0.1)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 5, width=width, color='white', alpha=0.05)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 7, width=width, color='white', alpha=0.03)  # 中间添加白色色彩使图案变浅

# 设置text
for i in np.arange(num):
    if i < 8:
        ax.text(rad[i],  # 角度
                size[i] - 0.2,  # 长度
                country[i] + '\n' + str(confirmed[i]) + '例',  # 文本
                rotation=rad[i] * 180 / np.pi - 5,  # 文字角度
                rotation_mode='anchor',
                # alpha=0.8,#透明度
                fontstyle='normal',  # 设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
                fontweight='black',
                # 设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
                color='white',  # 设置字体颜色
                size=size[i] / 2.2,  # 设置字体大小
                ha="center",  # 'left','right','center'
                va="top",  # 'top', 'bottom', 'center', 'baseline', 'center_baseline'
                )
    elif i < 15:
        ax.text(rad[i] + 0.02,
                size[i] - 0.7,
                country[i] + '\n' + str(confirmed[i]) + '例',
                fontstyle='normal',
                fontweight='black',
                color='white',
                size=size[i] / 1.6,
                ha="center",
                )
    else:
        ax.text(rad[i],
                size[i] + 0.1,
                str(confirmed[i]) + '例 ' + country[i],
                rotation=rad[i] * 180 / np.pi + 85,
                rotation_mode='anchor',
                fontstyle='normal',
                fontweight='black',
                color='black',
                size=4,
                ha="left",
                va="bottom",
                )

plt.show()

if name == 'main':
df = pd.read_excel('data.xlsx') # 利用pandas读取数据
colors = [(0.68359375, 0.02734375, 0.3203125),
(0.78125, 0.05078125, 0.2578125),
(0.875, 0.0390625, 0.1796875),
(0.81640625, 0.06640625, 0.0625),
(0.8515625, 0.1484375, 0.08203125),
(0.90625, 0.203125, 0.13671875),
(0.89453125, 0.2890625, 0.0703125),
(0.84375, 0.2421875, 0.03125),
(0.9140625, 0.26953125, 0.05078125),
(0.85546875, 0.31640625, 0.125),
(0.85546875, 0.3671875, 0.1171875),
(0.94921875, 0.48046875, 0.28125),
(0.9375, 0.51171875, 0.1484375),
(0.93359375, 0.59765625, 0.0625),
(0.93359375, 0.62890625, 0.14453125),
(0.86328125, 0.5859375, 0.15234375),
(0.86328125, 0.71875, 0.16015625),
(0.86328125, 0.8203125, 0.16015625),
(0.76171875, 0.8671875, 0.16015625),
(0.53125, 0.85546875, 0.15625),
(0.4765625, 0.94140625, 0.0703125),
(0.21484375, 0.91015625, 0.0625),
(0.15234375, 0.88671875, 0.08203125),
(0.11328125, 0.87890625, 0.19921875),
(0.11328125, 0.8125, 0.1796875),
(0.1875, 0.76953125, 0.2109375),
(0.2109375, 0.78125, 0.38671875),
(0.1484375, 0.76953125, 0.30859375),
(0.22265625, 0.73046875, 0.35546875),
(0.2890625, 0.6875, 0.4765625)] # 转化为小数的rgb色列表,
df_top_confirmed = df.loc[(df['date'] == '2020-09-21') & (df['province'].isnull())].sort_values('confirmed',
ascending=False).head(
30)
country = df_top_confirmed['country'].tolist()
confirmed = df_top_confirmed['confirmed'].tolist()
size = [22, 19, 17, 12, 11, 10, 9, 8, 7.2, 7.0, 6.8, 6.6, 6.4, 6.2, 6.0, 5.8, 5.6, 5.4, 5.2, 5.0, 4.8, 4.6, 4.4,
4.2, 4.0, 3.8, 3.6, 3.4, 3.2, 3.0] # 自定义一个柱长度列
rosetype_pie(country, confirmed, size, colors)

coding:utf-8

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

def rosetype_pie(country, confirmed, size, colors):
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文显示

num = len(size)  # 柱子的数量
width = 2 * np.pi / num  # 每个柱子的宽度
rad = np.cumsum([width] * num)  # 每个柱子的角度

plt.figure(figsize=(8, 8), dpi=500, )  # 创建画布
ax = plt.subplot(projection='polar')
ax.set_ylim(-1, np.ceil(max(size) + 1))  # 中间空白,-1为空白半径大小,可自行调整
ax.set_theta_zero_location('N', -5.0)  # 设置极坐标的起点方向 W,N,E,S, -5.0为偏离数值,可自行调整
ax.set_theta_direction(1)  # 1为逆时针,-1为顺时针
ax.grid(False)  # 不显示极轴
ax.spines['polar'].set_visible(False)  # 不显示极坐标最外的圆形
ax.set_yticks([])  # 不显示坐标间隔
ax.set_thetagrids([])  # 不显示极轴坐标

ax.bar(rad, size, width=width, color=colors, alpha=1)  # 画图
ax.bar(rad, 1, width=width, color='white', alpha=0.15)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 3, width=width, color='white', alpha=0.1)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 5, width=width, color='white', alpha=0.05)  # 中间添加白色色彩使图案变浅
ax.bar(rad, 7, width=width, color='white', alpha=0.03)  # 中间添加白色色彩使图案变浅

# 设置text
for i in np.arange(num):
    if i < 8:
        ax.text(rad[i],  # 角度
                size[i] - 0.2,  # 长度
                country[i] + '\n' + str(confirmed[i]) + '例',  # 文本
                rotation=rad[i] * 180 / np.pi - 5,  # 文字角度
                rotation_mode='anchor',
                # alpha=0.8,#透明度
                fontstyle='normal',  # 设置字体类型,可选参数[ ‘normal’ | ‘italic’ | ‘oblique’ ],italic斜体,oblique倾斜
                fontweight='black',
                # 设置字体粗细,可选参数 [‘light’, ‘normal’, ‘medium’, ‘semibold’, ‘bold’, ‘heavy’, ‘black’]
                color='white',  # 设置字体颜色
                size=size[i] / 2.2,  # 设置字体大小
                ha="center",  # 'left','right','center'
                va="top",  # 'top', 'bottom', 'center', 'baseline', 'center_baseline'
                )
    elif i < 15:
        ax.text(rad[i] + 0.02,
                size[i] - 0.7,
                country[i] + '\n' + str(confirmed[i]) + '例',
                fontstyle='normal',
                fontweight='black',
                color='white',
                size=size[i] / 1.6,
                ha="center",
                )
    else:
        ax.text(rad[i],
                size[i] + 0.1,
                str(confirmed[i]) + '例 ' + country[i],
                rotation=rad[i] * 180 / np.pi + 85,
                rotation_mode='anchor',
                fontstyle='normal',
                fontweight='black',
                color='black',
                size=4,
                ha="left",
                va="bottom",
                )

plt.show()

if name == 'main':
df = pd.read_excel('data.xlsx') # 利用pandas读取数据
colors = [(0.68359375, 0.02734375, 0.3203125),
(0.78125, 0.05078125, 0.2578125),
(0.875, 0.0390625, 0.1796875),
(0.81640625, 0.06640625, 0.0625),
(0.8515625, 0.1484375, 0.08203125),
(0.90625, 0.203125, 0.13671875),
(0.89453125, 0.2890625, 0.0703125),
(0.84375, 0.2421875, 0.03125),
(0.9140625, 0.26953125, 0.05078125),
(0.85546875, 0.31640625, 0.125),
(0.85546875, 0.3671875, 0.1171875),
(0.94921875, 0.48046875, 0.28125),
(0.9375, 0.51171875, 0.1484375),
(0.93359375, 0.59765625, 0.0625),
(0.93359375, 0.62890625, 0.14453125),
(0.86328125, 0.5859375, 0.15234375),
(0.86328125, 0.71875, 0.16015625),
(0.86328125, 0.8203125, 0.16015625),
(0.76171875, 0.8671875, 0.16015625),
(0.53125, 0.85546875, 0.15625),
(0.4765625, 0.94140625, 0.0703125),
(0.21484375, 0.91015625, 0.0625),
(0.15234375, 0.88671875, 0.08203125),
(0.11328125, 0.87890625, 0.19921875),
(0.11328125, 0.8125, 0.1796875),
(0.1875, 0.76953125, 0.2109375),
(0.2109375, 0.78125, 0.38671875),
(0.1484375, 0.76953125, 0.30859375),
(0.22265625, 0.73046875, 0.35546875),
(0.2890625, 0.6875, 0.4765625)] # 转化为小数的rgb色列表,
df_top_confirmed = df.loc[(df['date'] == '2020-09-21') & (df['province'].isnull())].sort_values('confirmed',
ascending=False).head(
30)
country = df_top_confirmed['country'].tolist()
confirmed = df_top_confirmed['confirmed'].tolist()
size = [22, 19, 17, 12, 11, 10, 9, 8, 7.2, 7.0, 6.8, 6.6, 6.4, 6.2, 6.0, 5.8, 5.6, 5.4, 5.2, 5.0, 4.8, 4.6, 4.4,
4.2, 4.0, 3.8, 3.6, 3.4, 3.2, 3.0] # 自定义一个柱长度列
rosetype_pie(country, confirmed, size, colors)

读取的电子表格数据为一个数据框,数据框里没有date列,所以报错。检查一下df数据,print(df)看看

这里是要筛选时间等于指定的时间的数据,
所以你得确保df数有date这个字段