iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 23
0
AI & Data

蟲王養成 - scrapy系列 第 23

DAY 23 : Datamining twitch data

  • 分享至 

  • xImage
  •  

Twitch - 關聯

先前發文
DAY 01 : 參賽目的與規劃
DAY 02 : python3 virtualenv 建置
DAY 03 : python3 request
DAY 04 : 使用beautifulsoup4 和lxml
DAY 05 : select 和find 抓取tag
DAY 06 : soup解析後 list取值
DAY 07 : request_header_cookie 通過網頁18限制
DAY 08 : ppt內文爬取
DAY 09 : 資料處理 split replace strip
DAY 10 : python csv 寫入 和dict 合併
DAY 11 : python class function
DAY 12 : crawl 框架 scrapy 使用
DAY 13 : scrapy 架構
DAY 14 : scrapy pipeline data insert mongodb
DAY 15 : scrapy middleware proxy
DAY 16 : scrapy selenium
DAY 17 : scrapy 爬取js畫面資料(二)
DAY 18 : scrapy splash 爬取js畫面資料(三)
DAY 19 : python .env 使用
DAY 20 : python chartify 資料視覺化套件
DAY 21 : python3 pandas 資料處理
DAY 22 : scrapy 資料應用apriori
DAY 23 : Datamining twitch data


選題目的

由於期中是做 人數和類群分析 , 本來是想做實況主的開台時間預測 , 但很難做不出來 , 所以選擇使用apriori 做觀眾對 實況主 的關聯性

資料來源

Twitch api:
https://dev.twitch.tv/docs/api/reference/#get-extension-analytics

官方提供的API 主要抓取==遊戲類群== 觀看總人數 ==前10名== , ==類群==裡前==100位實況主== , ==實況主==聊天室內==所有觀眾==


因為資料量很大 , 電腦load檔案就會有memory err的問題 , 所以切成==一個星期10個group==

遇到的狀況

  1. load檔案的時候Memory err
  2. Data 型態不同
  3. Dataframe is to big
    在借用學長的電腦跑得時候出現的 , ram32G

實做步驟

目的:解決資料一次讀進來時 , 記憶體不足

df1 = pd.read_csv('./10_grand_theft_auto_v/twitch_0601_0607.txt', sep=",", chunksize = 100000, header=None, names=["mid", "viewer", "group", "master"])
# # print(df1)
df2 = pd.read_csv('./10_grand_theft_auto_v/twitch_0608_0614.txt', sep=",", chunksize = 100000, header=None, names=["mid", "viewer", "group", "master"])
# print(df2)
df = pd.DataFrame(columns=[]) 

合併使用chunksize ,生成的迭代器 並重新給index

for df1 in df1:
#     print(df1)
#     print(type(df1))
    df3 = pd.concat([df,df1],ignore_index=True)
for df2 in df2: 
#     print(df2)
#     print(type(df2))
    df4 = pd.concat([df,df2],ignore_index=True) 

2個星期合併

res = pd.concat([df3, df4],  axis=0)
res['count'] = 1
new = res.pivot_table(index = 'viewer', columns = 'master', values = 'count', fill_value = 0, aggfunc = np.sum)

def encode_units(x):
    if x <= 0:
        return 0
    if x>= 1:
        return 1

new_sets = new.applymap(encode_units)
print(type(new_sets))

frequent_itemsets = apriori(new_sets, min_support = 0.01, use_colnames = True)
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold = 0.1)

解釋結果

找尋可以解釋的關聯性

1 . overpow - LOL

2 . buli - GTA5

這時候我才想到我使用的資料是2018/06月的

到這個網站找歷史資料

  1. https://sullygnome.com/channel/overpow/2018june/streams
  2. https://sullygnome.com/channel/buli/2018june/streams

最後覺得有點不知如何是好 , 只好直接google ==Overpow Buli bonkol twitch==

找到了這個!!
https://www.youtube.com/watch?reload=9&v=LRap6v6ETU8&list=PLMsFl8i4WNRcmYAXrdkv3O4RJedYvDLzY&index=4&fbclid=IwAR0JYVnknp5SYIUg1nM8PTfh0Pm9gEA4fGxn5gEMQk-zAWzjbbN3a-KHAC0

所以在我使用的資料裡面 , 可以發現觀眾看的實況主們==Overpow== ==Buli== ==bonkol== 是比較多人同時或都會觀看的

結論

在觀看youtube剪輯的時候發現這幾位實況主原來 在6月份的時候是一起玩遊戲的 , 所以觀眾在看其中一個實況主的時候 , 也會好奇另一個在同一個伺服器裡的實況主在做什麼, 所以才會出現這3位實況主有那麼強的關聯性


上一篇
DAY 22 : scrapy 資料應用apriori
下一篇
DAY 24 : scrapy facebook crawl (一)
系列文
蟲王養成 - scrapy30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言