質問編集履歴

3

望みの文を追加しました。

2020/11/14 06:41

投稿

zero_zero
zero_zero

スコア10

test CHANGED
File without changes
test CHANGED
@@ -2,15 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- なかなかデバックのコツという書籍が探し出せず質問させていただきました。)
5
+ (デバックのコツという書籍が余りないようで、ここで質問させていただきました。)
6
-
7
-
8
-
9
- (テーブルの中身の存在はprint文で確認ずみです。)
10
-
11
-
12
-
13
- (やりたいことはコメント文を記載しました。行数が一致していないというあたりはあれど、どう進めていいかと。)
14
6
 
15
7
 
16
8
 
@@ -126,7 +118,7 @@
126
118
 
127
119
 
128
120
 
129
- # やりたいとはこ ↓ コメントアウトするとtqdm走り出し
121
+ # ここの表結合くいかない
130
122
 
131
123
  race_results[race_id] = pd.concat([race_results[race_id], horse_results_sub])
132
124
 
@@ -195,3 +187,23 @@
195
187
 
196
188
 
197
189
  ```
190
+
191
+
192
+
193
+
194
+
195
+ 望んでいるデータは「https://db.netkeiba.com/race/201901010101」の表(競馬のレース結果の表)に同ホームーページでスクレイピングした「["race_id","horse_id","jocky_id","trainer_id"]」のデータ表を横に追加した表を作りたい。
196
+
197
+
198
+
199
+ 上記のコードでは、
200
+
201
+ race_results[race_id]のデータフレームにhorse_results_sub]のデータフレームをマージさせたいのですが、
202
+
203
+ race_results[race_id]のデータフレームが出力されてしまいます。
204
+
205
+
206
+
207
+ 望んでいる出力結果の例
208
+
209
+ ![![イメージ説明](28eed4cffa254a190400c89b72951333.jpeg)](e1524d27680522001f27ceac1c28eb86.jpeg)

2

コードを見やすくしました。

2020/11/14 06:40

投稿

zero_zero
zero_zero

スコア10

test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,8 @@
17
17
  ---------
18
18
 
19
19
  コードは以下の通りです。
20
+
21
+ ```
20
22
 
21
23
 
22
24
 
@@ -189,3 +191,7 @@
189
191
  results = pd.concat([results[key] for key in results], sort=False)
190
192
 
191
193
  results.to_pickle('../all_results.pkl')
194
+
195
+
196
+
197
+ ```

1

コードの詳細を記載しました。エラーコードは出力されなかったです。

2020/11/14 05:54

投稿

zero_zero
zero_zero

スコア10

test CHANGED
File without changes
test CHANGED
@@ -1,9 +1,191 @@
1
- pandas便利で使っています。
2
-
3
- 関数の外なら2次元同士のテーブルをマージすることはできるのですが、関数の中でデータフレームをマージすることができません。
4
-
5
- (テーブル中身はprint文確認ずみ)
1
+ 表記マージする方法を教えてください。
6
2
 
7
3
 
8
4
 
5
+ (なかなかデバックのコツという書籍が探し出せず質問させていただきました。)
6
+
7
+
8
+
9
+ (テーブルの中身の存在はprint文で確認ずみです。)
10
+
11
+
12
+
13
+ (やりたいことはコメント文を記載しました。行数が一致していないというあたりはあれど、どう進めていいかと。)
14
+
15
+
16
+
17
+ ---------
18
+
19
+ コードは以下の通りです。
20
+
21
+
22
+
23
+ import pandas as pd
24
+
25
+ import requests
26
+
27
+ from bs4 import BeautifulSoup
28
+
29
+ import openpyxl
30
+
31
+ import xlwt
32
+
33
+ import datetime
34
+
35
+ import time
36
+
37
+ import os
38
+
39
+ import pprint
40
+
41
+ from tqdm.notebook import tqdm as tqdm
42
+
43
+
44
+
45
+ df_horse_results_sub = pd.DataFrame(index=[], columns=[])
46
+
47
+ horse_results_sub =[[],[],[]]
48
+
49
+ race_results_ids = []
50
+
51
+ horse_results_ids = []
52
+
53
+ jocky_results_ids = []
54
+
55
+ trainer_results_ids = []
56
+
57
+
58
+
59
+ def scrape_race_results(race_id_list, pre_race_results={}):
60
+
61
+ global horse_results_sub
62
+
63
+ global df_horse_results_sub
64
+
65
+ race_results = pre_race_results
66
+
67
+ for race_id in tqdm(race_id_list):
68
+
69
+ if race_id in race_results.keys():
70
+
71
+ continue
72
+
73
+
74
+
75
+ try:
76
+
77
+ url = "https://db.netkeiba.com/race/" + race_id
78
+
79
+ race_results[race_id] = pd.read_html(url)[0]
80
+
81
+ #print(url)
82
+
83
+ response_sub = requests.get(url)
84
+
85
+ response_sub.encoding = response_sub.apparent_encoding
86
+
87
+ soup_sub = BeautifulSoup(response_sub.text, 'html.parser')
88
+
89
+ trs3 = soup_sub.find_all(class_="txt_l")
90
+
91
+ for each in trs3:
92
+
93
+ try:
94
+
95
+ Horse_results_link = each.find('a')['href']
96
+
97
+ if Horse_results_link[1:6] == "horse":
98
+
99
+ race_results_ids.append(race_id)
100
+
101
+ horse_results_ids.append(Horse_results_link[-11:-1])
102
+
103
+ if Horse_results_link[1:7] == "jockey":
104
+
105
+ jocky_results_ids.append(Horse_results_link[-6:-1])
106
+
107
+ if Horse_results_link[1:8] == "trainer":
108
+
109
+ trainer_results_ids.append(Horse_results_link[-6:-1])
110
+
111
+ horse_results_sub = [race_results_ids,horse_results_ids,jocky_results_ids,trainer_results_ids]
112
+
113
+ horse_results_col = ["race_id","horse_id","jocky_id","trainer_id"]
114
+
115
+
116
+
117
+ df_horse_results_sub = pd.DataFrame(horse_results_sub).T
118
+
119
+ df_horse_results_sub.columns = horse_results_col
120
+
121
+ except:
122
+
123
+ continue
124
+
125
+
126
+
9
- 確認するポイントなどドバイスあたらお願いします。
127
+ # やりたいことはここ ↓ コメントアウトするとtqdmが走します。
128
+
129
+ race_results[race_id] = pd.concat([race_results[race_id], horse_results_sub])
130
+
131
+
132
+
133
+
134
+
135
+ time.sleep(1)
136
+
137
+
138
+
139
+ except IndexError:
140
+
141
+ continue
142
+
143
+ except:
144
+
145
+ break
146
+
147
+
148
+
149
+ return race_results
150
+
151
+
152
+
153
+ race_id_list = []
154
+
155
+ for place in range(1, 11, 1):
156
+
157
+ for kai in range(1, 6, 1):
158
+
159
+ for day in range(1, 9, 1):
160
+
161
+ for r in range(1, 13, 1):
162
+
163
+ for nen in range(2019, 2020 ,1):
164
+
165
+ race_id = (
166
+
167
+ str(nen).zfill(4)
168
+
169
+ + str(place).zfill(2)
170
+
171
+ + str(kai).zfill(2)
172
+
173
+ + str(day).zfill(2)
174
+
175
+ + str(r).zfill(2)
176
+
177
+ )
178
+
179
+ race_id_list.append(race_id)
180
+
181
+
182
+
183
+ results = scrape_race_results(race_id_list)
184
+
185
+ for key in results:
186
+
187
+ results[key].index = [key] * len(results[key])
188
+
189
+ results = pd.concat([results[key] for key in results], sort=False)
190
+
191
+ results.to_pickle('../all_results.pkl')