ind=[re.search('星期六|星期日',str(i)) !=None for i in media3['星期']] freeday=media3.loc[ind,:] workday=media3.loc[[ind[i]==False for i in range(len(ind))],:] m1=pd.DataFrame(freeday['wat_time'].groupby([freeday['phone_no']]).sum()) m1=m1.sort_values(['wat_time']) m1=m1.reset_index() m1['wat_time']=m1['wat_time']/3600 m2=pd.DataFrame(workday['wat_time'].groupby([workday['phone_no']]).sum()) m2=m1.sort_values(['wat_time']) m2=m1.reset_index() m2['wat_time']=m1['wat_time']/3600 w=sum(m2['wat_time'])/5 f=sum(m2['wat_time'])/2 plt.figure(figsize=(8,8)) plt.subplot(211) colors='lightgreen','lightcoral' plt.pie([w,f],labels=['工作日','周末'],colors=colors,shadow=True, autopct='%1.1f%%',pctdistance=1.23) plt.title('周末与工作日观看时长占比') plt.subplot(223) ax1=sns.barplot(x=m1.index,y=m1.iloc[:,1]) ax1.xaxis.set_major_locator(ticker.MultipleLocator(250)) ax1.xaxis.set_major_formatter(ticker.ScalarFormatter()) plt.xlabel('观看用户(排序后)') plt.ylabel('观看时长(小时)') plt.title('周末用户观看总时长') plt.subplot(224) ax2=sns.barplot(x=m2.index,y=m2.iloc[:,1]) ax2.xaxis.set_major_locator(ticker.MultipleLocator(250)) ax2.xaxis.set_major_formatter(ticker.ScalarFormatter()) plt.xlabel('观看用户(排序后)') plt.ylabel('观看时长(小时)') plt.title('工作日用户观看总时长') plt.show()
时间: 2023-09-20 14:10:15 浏览: 126
这是一段Python代码,主要是对一个数据集进行了分析和可视化。首先,根据数据集中的“星期”列将数据集分为工作日和周末两部分。然后,计算出每个用户在工作日和周末的观看时长,并将其存储在两个不同的数据框中。接下来,对这两个数据框进行排序和统计,并绘制了两个子图:一个是饼图,显示了工作日和周末观看时长的占比;另一个是条形图,显示了每个用户的观看时长。整个过程使用了Python的pandas、matplotlib和seaborn等库。
相关问题
ind=[re.search('星期一',str(i)) !=None for i in media3['星期']] workday=media3.loc[[ind[i]==False for i in range(len(ind))],:] m2=pd.DataFrame(workday['wat_time'].groupby([workday['phone_no']]).sum()) m2=m1.sort_values(['wat_time']) m2=m1.reset_index() m2['wat_time']=m1['wat_time']/3600 plt.xlabel('观看用户(排序后)') plt.ylabel('观看时长(小时)') plt.title('周末用户观看总时长') plt.subplot(221) ax2=sns.barplot(x=m2.index,y=m2.iloc[:,1]) plt.show() 以上代码怎么修改才可以将每个星期一的前十位的收视频道的观看时长比较,并将横向的3-4个周一进行比较。
可以按照以下步骤进行修改:
1. 首先筛选出所有星期一的数据,并按照观看时长从大到小排序:
```
monday = media3[media3['星期'] == '星期一']
monday_top10 = monday.nlargest(10, 'wat_time')
```
2. 然后将星期一的数据按照日期分组,并计算每个日期的观看总时长:
```
monday_grouped = monday.groupby('日期')['wat_time'].sum().reset_index()
```
3. 将星期一的数据按照日期排序,并筛选出需要比较的日期:
```
monday_dates = monday_grouped['日期'].sort_values()[2:4]
monday_top10_dates = monday_top10[monday_top10['日期'].isin(monday_dates)]
```
4. 最后使用 seaborn 库的 barplot 函数进行绘图:
```
import seaborn as sns
sns.barplot(x='日期', y='wat_time', hue='收视频道', data=monday_top10_dates)
```
完整代码如下:
```
import seaborn as sns
monday = media3[media3['星期'] == '星期一']
monday_top10 = monday.nlargest(10, 'wat_time')
monday_grouped = monday.groupby('日期')['wat_time'].sum().reset_index()
monday_dates = monday_grouped['日期'].sort_values()[2:4]
monday_top10_dates = monday_top10[monday_top10['日期'].isin(monday_dates)]
sns.barplot(x='日期', y='wat_time', hue='收视频道', data=monday_top10_dates)
```
import re import urllib from bs4 import BeautifulSoup def weixinData(self, name: str) -> str: # 从此处开始编写代码 curns = 'YES' findname = re.compile(r'<td>(.*?)</td>', re.S) findind = re.compile(r'<span><span.*>(.*?)</span><em>.*</span>') urldate = [] url = "http://72.itmc.org.cn:80/JS001/open/show/weixindata.html" head = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36' } text = urllib.request.Request(url, headers=head) html = '' texts = urllib.request.urlopen(text) html = texts.read().decode('utf-8') shem = BeautifulSoup(html, 'html.parser') for tr in shem.find_all('tr'): tr = str(tr) bate = [] ind = re.findall(findind, tr) bate.append(ind) names = re.findall(findname, tr) bate.append(names) urldate.append(bate) # print(urldate) left, right = 1, (len(urldate)) - 1 # print(right) while left <= right: # print(left) tabe = urldate[left] # print(tabe) # print (tabe[0][0]) if tabe[0][0] == name: # print(4) if tabe[1][2][-1] != '+': # print(1) # print(tabe[1][2]) if float(tabe[1][2]) < 90000: curns = 'NO' if str(tabe[1][5])[-1] != '+': # print(2) if int(tabe[1][5]) < 80000: curns = 'NO' if float(tabe[1][1].replace('万', '')) > 300: # print(3) curns = 'NO' left += 1 return curns print(weixinData('占豪'))
这段代码中的问题在于函数weixinData(self, name: str)的定义中使用了self,但是在函数的调用中没有传递任何参数给self。因此,在调用weixinData()函数时,你需要将类的实例作为第一个参数传递给它。如果你只需要调用这个函数而不是在类中使用它,可以将self从函数定义中删除。此外,你还需要给weixinData()函数传递一个字符串参数name,例如weixinData('占豪')。
阅读全文