国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

pandas & matplotlib 直播數(shù)據(jù)分析

Cristalven / 471人閱讀

摘要:直播數(shù)據(jù)分析針對直播間這個時間段的數(shù)據(jù)分析基礎(chǔ)數(shù)據(jù)展示以上數(shù)據(jù)是從直播間的彈幕中提取的相關(guān)數(shù)據(jù)每個字段解釋為唯一標識用戶名發(fā)送的信息用戶等級牌子牌子等級發(fā)言房間號依賴數(shù)據(jù)處理基礎(chǔ)準備根據(jù)牌子名稱統(tǒng)計最大值最小值平均值計算牌子的最大值最小值

直播數(shù)據(jù)分析

針對douyu_60937 直播間 (2018/11/19 19:04:18 - 2018/11/20 7:56:42) 這個時間段的數(shù)據(jù)分析

基礎(chǔ)數(shù)據(jù)展示


以上數(shù)據(jù)是從直播間的彈幕中提取的相關(guān)數(shù)據(jù),每個字段解釋為

 {
    "id": "唯一標識",
    "user": "用戶名",
    "cont": "發(fā)送的信息",
    "level": "用戶等級",
    "sign": "牌子",
    "sign_leve": "牌子等級",
    "rid": "發(fā)言房間號",
}
依賴
pandas==0.23.4
matplotlib==3.0.2
numpy==1.15.4
datetime
數(shù)據(jù)處理 基礎(chǔ)準備
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import datetime

path = "douyu_60937.xlsx"
data = pd.read_excel(path)

根據(jù)牌子名稱統(tǒng)計最大值、最小值、平均值

計算牌子的最大值、最小值、平均值的時候需要根據(jù)user 將數(shù)據(jù)刪除重復(fù)項 ,避免多次計算

需要做成圖我們返回值設(shè)置成dict()

t = data[["user", "sign", "sign_leve"]].drop_duplicates(subset=["user"])  # 刪除重復(fù)用戶
t = data.groupby("sign").sign_leve.agg(["mean", "min", "max"])
t.sort_values(["max"], ascending=False, inplace=True)
print(t)
print(t[:20].to_dict())

{"mean": {"小人參": 11.848837209302326, "196": 16.475254730713246, "女流": 11.418693982074263, "Amss": 10.0, "水煮肉": 26.0, "小僵尸": 9.93750495049505, "339": 18.941176470588236, "金發(fā)雅": 24.0, "猛男": 7.768361581920904, "小豆包": 12.676724137931034, "阿冷": 10.416666666666666, "寅子": 7.059241706161138, "小癢蟲": 10.718562874251496, "S1un": 22.0, "小緑帽": 9.938271604938272, "集團軍": 7.909323116219668, "小烏賊": 8.377464788732395, "點子王": 5.686131386861314, "小肚皮": 7.034911587538053, "林Q": 21.0}, "min": {"小人參": 2, "196": 4, "女流": 3, "Amss": 4, "水煮肉": 26, "小僵尸": 1, "339": 12, "金發(fā)雅": 24, "猛男": 1, "小豆包": 3, "阿冷": 6, "寅子": 1, "小癢蟲": 2, "S1un": 22, "小緑帽": 1, "集團軍": 1, "小烏賊": 1, "點子王": 3, "小肚皮": 1, "林Q": 21}, "max": {"小人參": 30, "196": 30, "女流": 30, "Amss": 27, "水煮肉": 26, "小僵尸": 25, "339": 25, "金發(fā)雅": 24, "猛男": 23, "小豆包": 23, "阿冷": 22, "寅子": 22, "小癢蟲": 22, "S1un": 22, "小緑帽": 22, "集團軍": 22, "小烏賊": 22, "點子王": 22, "小肚皮": 21, "林Q": 21}}
根據(jù)牌子名稱統(tǒng)計數(shù)量

分類統(tǒng)計的時候我們要修改列名用rename(column={"老列名":"新列名"})

sign_max_count = data[["user", "sign", "sign_leve"]].drop_duplicates(subset=["user"])  # 刪除重復(fù)用戶
sign_max_count = data[["sign"]].groupby(["sign"]).agg({"sign": "count"}).rename(
    columns={"sign": "sign_count"})
sign_max_count.sort_values(["sign_count"], ascending=False, inplace=True)
print(sign_max_count)
print(sign_max_count[:20].to_dict())

{"sign_count": {"小肚皮": 15439, "小僵尸": 12625, "集團軍": 1566, "196": 1374, "女流": 781, "影魔王": 640, "大馬猴": 429, "寅子": 422, "小緑帽": 405, "小8路": 397, "小烈驢": 370, "小烏賊": 355, "小贏僧": 355, "保安團": 343, "豬芳芳": 243, "小豆包": 232, "王菠蘿": 187, "二帆": 184, "猛男": 177, "汽車人": 173}}
統(tǒng)計各個等級的用戶數(shù)量
now_data = data[["user", "level"]].drop_duplicates(subset=["user"])  # 刪除重復(fù)用戶
now_data = data[["level"]].groupby(["level"]).agg({"level": "count"}).rename(
    columns={"level": "level_count"})
now_data.sort_values(["level_count"], ascending=False, inplace=True)

{"level_count": {16: 3159, 19: 3122, 17: 3086, 21: 2984, 18: 2882, 15: 2832, 22: 2624, 23: 2564, 20: 2545, 13: 2379, 14: 2308, 24: 2274, 11: 2066, 12: 1894, 7: 1781, 9: 1753, 10: 1690, 8: 1678, 5: 1645, 25: 1554}}
每小時發(fā)言數(shù)量

根據(jù)時間統(tǒng)計需要構(gòu)造一個datetime 數(shù)據(jù)類型的列 , 利用 resample("時間標識符") + count() 進行統(tǒng)計

為了后續(xù)制圖方便我在這里直接把 轉(zhuǎn)換成python 內(nèi)置的 datetime 類 方法是 to_pydatetime

df = data
df = df.loc[:, ("cont", "uptime")]
df = df.set_index("uptime")
result = df.resample("H").count().rename(columns={"cont": "user_count"})
print(result)
result = result.to_dict()

s = {}
for k, v in result["user_count"].items():
    s[k.to_pydatetime()] = v
result["user_count"] = s

print(result)
return result

{"user_count": {datetime.datetime(2018, 11, 19, 19, 0): 12707, datetime.datetime(2018, 11, 19, 20, 0): 12374, datetime.datetime(2018, 11, 19, 21, 0): 19340, datetime.datetime(2018, 11, 19, 22, 0): 13530, datetime.datetime(2018, 11, 19, 23, 0): 8, datetime.datetime(2018, 11, 20, 0, 0): 2, datetime.datetime(2018, 11, 20, 1, 0): 1, datetime.datetime(2018, 11, 20, 2, 0): 0, datetime.datetime(2018, 11, 20, 3, 0): 0, datetime.datetime(2018, 11, 20, 4, 0): 5, datetime.datetime(2018, 11, 20, 5, 0): 1, datetime.datetime(2018, 11, 20, 6, 0): 11, datetime.datetime(2018, 11, 20, 7, 0): 23}}
每小時在線人數(shù)(發(fā)言人)
df = data.drop_duplicates(subset=["user"])
df = df.loc[:, ("user", "uptime")]
df = df.set_index("uptime")
result = df.resample("H").count().rename(columns={"user": "user_count"})
print(result)
result = result.to_dict()
s = {}
for k, v in result["user_count"].items():
    s[k.to_pydatetime()] = v
result["user_count"] = s
print(result)

{"user_count": {datetime.datetime(2018, 11, 19, 19, 0): 4223, datetime.datetime(2018, 11, 19, 20, 0): 2207, datetime.datetime(2018, 11, 19, 21, 0): 3843, datetime.datetime(2018, 11, 19, 22, 0): 1875, datetime.datetime(2018, 11, 19, 23, 0): 6, datetime.datetime(2018, 11, 20, 0, 0): 0, datetime.datetime(2018, 11, 20, 1, 0): 1, datetime.datetime(2018, 11, 20, 2, 0): 0, datetime.datetime(2018, 11, 20, 3, 0): 0, datetime.datetime(2018, 11, 20, 4, 0): 1, datetime.datetime(2018, 11, 20, 5, 0): 1, datetime.datetime(2018, 11, 20, 6, 0): 1, datetime.datetime(2018, 11, 20, 7, 0): 4}}
制作圖表 粉絲牌等級情況 柱狀圖
def autolabel(ax, rects, xpos="center"):
    xpos = xpos.lower()
    ha = {"center": "center", "right": "left", "left": "right"}
    offset = {"center": 0.5, "right": 0.57, "left": 0.43}

    for rect in rects:
        height = rect.get_height()
        ax.text(rect.get_x() + rect.get_width() * offset[xpos], 1.01 * height,
                "{}".format(height), ha=ha[xpos], va="bottom")


def sign_bar_wiht_leve(t1):
    """
    粉絲牌等級情況柱狀圖
    :return:
    """
    mean = [round(x, 1) for x in t1["mean"].values()]
    min = t1["min"].values()
    max = t1["max"].values()
    ind = np.arange(len(mean))
    width = 0.35
    fig, ax = plt.subplots()
    rects_2 = ax.bar(ind, min, width / 2, color="IndianRed", label="最低等級")
    rects_1 = ax.bar(ind + width / 2, mean, width / 2, color="SkyBlue", label="平均等級")
    rects_3 = ax.bar(ind + width, max, width / 2, color="Black", label="最高等級")
    ax.set_ylabel("等級")
    ax.set_title("粉絲牌等級 (2018/11/19  19:04:18 - 2018/11/20  7:56:42)")
    ax.set_xticks(ind)
    ax.set_xticklabels(t1["mean"].keys())
    ax.legend()
    fig = plt.gcf()
    fig.set_size_inches(30, 10.5)
    autolabel(ax=ax, rects=rects_1, xpos="center")
    autolabel(ax=ax, rects=rects_2, xpos="center")
    autolabel(ax=ax, rects=rects_3, xpos="center")
    fig.savefig("粉絲牌等級.jpg")
    fig.show()

粉絲牌占比 餅圖
def sign_pie_with_count(t2):
    """
    粉絲牌占比
    :param t2:
    :return:
    """
    sizes = list(t2["sign_count"].values())[:5]
    labels = list(t2["sign_count"].keys())[:5]
    plt.figure(figsize=(8, 4))  # 調(diào)節(jié)圖形大小
    explode = (0, 0, 0, 0)  # 將某一塊分割出來,值越大分割出的間隙越大
    patches, text1, text2 = plt.pie(sizes,
                                    labels=labels,
                                    autopct="%3.2f%%",  # 數(shù)值保留固定小數(shù)位
                                    shadow=False,  # 無陰影設(shè)置
                                    startangle=90,  # 逆時針起始角度設(shè)置
                                    pctdistance=0.8)  # 數(shù)值距圓心半徑倍數(shù)距離
    plt.axis("equal")
    plt.legend()
    plt.title("粉絲牌占比 
(2018/11/19  19:04:18 - 2018/11/20  7:56:42)")
    plt.savefig("粉絲牌占比.jpg")
    plt.show()

用戶等級分布 折線圖
def user_line_with_count(t4):
    """
    用戶等級分布折線圖
    :param t4:
    :return:
    """
    t4 = sorted(t4["level_count"].items(), key=lambda d: d[0])

    x = [i[0] for i in t4]
    y = [i[1] for i in t4]

    plt.figure(figsize=(8, 4))
    plt.plot(x, y, "b--", linewidth=1)

    # 設(shè)置數(shù)字標簽
    for a, b in zip(x, y):
        plt.text(a, b, b, ha="center", va="bottom", fontsize=10)

    plt.xlabel("用戶等級")
    plt.ylabel("數(shù)量")
    plt.title("用戶等級情況
(2018/11/19  19:04:18 - 2018/11/20  7:56:42)")
    plt.savefig("用戶等級情況.jpg")
    plt.show()

每個時間段用戶以及彈幕量 折線圖
def show_label(x, y, plt):
    # 設(shè)置數(shù)字標簽
    for a, b in zip(x, y):
        plt.text(a, b, b, ha="center", va="bottom", fontsize=10)


def user_time(t5, t6):
    """
    每個時間段用戶以及彈幕量
    :param t5:
    :param t6:
    :return:
    """
    t_5 = {k.strftime("%Y-%m-%d %H"): v for k, v in t5["user_count"].items()}
    t_6 = {k.strftime("%Y-%m-%d %H"): v for k, v in t6["user_count"].items()}

    x_1 = t_5.keys()
    y_1 = t_5.values()

    x_2 = t_6.keys()
    y_2 = t_6.values()

    plt.figure(figsize=(9, 5))
    plt.plot(x_1, y_1, "o-", linewidth=1, label="彈幕數(shù)量")
    plt.plot(x_2, y_2, "g--", linewidth=1, label="在線人數(shù)")
    show_label(x_1, y_1, plt)
    show_label(x_2, y_2, plt)
    plt.xticks(rotation=30)
    plt.legend()

    plt.xlabel("小時")
    plt.ylabel("人數(shù)")
    plt.title("每個時間段用戶以及彈幕量
(2018/11/19  19:04:18 - 2018/11/20  7:56:42)")
    plt.savefig("每個時間段用戶以及彈幕量.jpg")
    plt.show()

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/42636.html

相關(guān)文章

  • Python如何利用pandas讀取csv數(shù)據(jù)并繪圖

      小編寫這篇文章的一個主要目的,主要是給大家去做一個解答,解答的內(nèi)容主要是Python相關(guān)知識,比如說,會給大家講解怎么樣去利用Python pandas去做一個讀取,讀取的是csv數(shù)據(jù),然后將這些數(shù)據(jù)去做一個繪圖處理,具體內(nèi)容下面給大家詳細解答。  如何利用pandas讀取csv數(shù)據(jù)并繪圖  導(dǎo)包,常用的numpy和pandas,繪圖模塊matplotlib,  importmatplotli...

    89542767 評論0 收藏0
  • PandasMatplotlib保存圖型時縱坐標標識過長造成顯示不全問題解決

      在使用matplotlib做圖得時候,有時候會碰到繪圖時顯示不全和圖片保存時不完美的難題,本文主要是為大家介紹了有關(guān)PandasMatplotlib保存圖型時縱坐標標識過長造成顯示不全問題解決方式,需用的小伙伴可以參考一下。  序言  這篇blog主要是處理在使用pandas制作圖象并儲存時,因為標識過長,造成縱坐標上標簽顯示不全問題。剛遇到困難的時候修改了一下下圖片尺寸,然而并沒有卵用,因此...

    89542767 評論0 收藏0
  • python數(shù)學(xué)建模Numpy應(yīng)用介紹與Pandas學(xué)習(xí)

      小編寫這篇文章的主要目的,主要是來給大家解答下關(guān)于python數(shù)學(xué)建模的一些相關(guān)的介紹,涉及到內(nèi)容涵蓋Numpy的一些相關(guān)的應(yīng)用具體的一些介紹。另外,還會涉及到相關(guān)的Pandas學(xué)習(xí)知識,具體內(nèi)容下面給大家詳細解答下?! ? Numpy介紹與應(yīng)用  1-1Numpy是什么  NumPy是一個運行速度非常快的數(shù)學(xué)庫,一個開源的的python科學(xué)計算庫,主要用于數(shù)組、矩陣計算,包含:  一個強大的...

    89542767 評論0 收藏0
  • Python繪制數(shù)據(jù)動態(tài)圖的方法詳解

      小編寫這篇文章的一個主要目的,主要是給大家去做一個介紹,介紹的內(nèi)容是,利用Python這門語言,去繪制相關(guān)的數(shù)據(jù)動態(tài)圖表,那么,具體的繪制方法是什么呢?下面小編就給大家詳細的解答。  數(shù)據(jù)動態(tài)圖怎么做,效果圖,  多子圖聯(lián)動競賽圖  安裝  pipinstallpandas_alive   #或者   condainstallpandas_alive-cconda-forge   玩起來  支...

    89542767 評論0 收藏0
  • python數(shù)學(xué)建模之Numpy應(yīng)用介紹與Pandas學(xué)習(xí)

      小編寫這篇文章的一個主要目的,主要是來給大家去做一個介紹。介紹的內(nèi)容主要是關(guān)于建模知識的一些相關(guān)介紹,包括其Pandas的一些相關(guān)學(xué)習(xí),就具體的操作內(nèi)容,下面就給大家詳細解答下?! umpy學(xué)習(xí)  1 Numpy介紹與應(yīng)用  1-1Numpy是什么  NumPy是一個運行速度非??斓臄?shù)學(xué)庫,一個開源的的python科學(xué)計算庫,主要用于數(shù)組、矩陣計算,包含:  一個強大的N維數(shù)組對象ndarr...

    89542767 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<