<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Warwick Data Science Society on Medium]]></title>
        <description><![CDATA[Stories by Warwick Data Science Society on Medium]]></description>
        <link>https://medium.com/@WDSS?source=rss-9d4df5140985------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*J27EIc4uwPrtSoLTf83TVg.jpeg</url>
            <title>Stories by Warwick Data Science Society on Medium</title>
            <link>https://medium.com/@WDSS?source=rss-9d4df5140985------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 17 May 2026 05:18:00 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@WDSS/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Stranger Weather Ahead: Detecting Anomalies in Temporal Weather Data]]></title>
            <link>https://medium.com/@WDSS/stranger-weather-ahead-detecting-anomalies-in-temporal-weather-data-9630eae33ecf?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/9630eae33ecf</guid>
            <category><![CDATA[weather-forecasts]]></category>
            <category><![CDATA[anomaly-detection]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[neural-networks]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Tue, 21 Nov 2023 14:45:20 GMT</pubDate>
            <atom:updated>2023-11-21T14:45:20.458Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/480/0*idD2MGBNU0vHoK8d" /><figcaption>Hurricane GIF, Giphy</figcaption></figure><h3>Introduction</h3><p>Science fiction writer and biochemistry professor Isaac Asimov once said that “The most exciting phrase to hear in science, the one that heralds new discoveries, is not ‘Eureka!’ but ‘<em>That’s funny</em>…’”. How can machine learning aid this process? In the spirit of discovery, our team investigated methods to detect anomalies in weather data.</p><p>Detecting anomalies in weather data has many different practical applications. Nowcasting, for example, aims to predict the weather in the next 0 to 6 hours, which is crucial for crisis management and avoiding disasters [1]. Similarly, anomaly detection helps to predict extreme weather events and how they behave over time. For example, researchers have used anomaly detection to track Cyclone Baaz in the North Indian Ocean [2].</p><p>But it’s not just about keeping track of what’s happening now. Anomaly detection also helps researchers predict disasters, such as floods and forest fires, before they happen. That way, firefighters and emergency responders have more time to prepare and protect people and property [3]. Additionally, in smart cities, weather can disrupt transportation systems. Therefore, we need a reliable way to deal with extreme weather. Anomaly detection helps us classify the weather conditions, making it easier to keep transport systems running smoothly [4]. So, whether it’s for immediate crisis response, long-term disaster prevention, or just making our cities work well, anomaly detection in weather data is a secret weapon against unpredictable weather.</p><h4>Our Code</h4><p>You can run our code on this Google Colaboratory notebook:</p><p><a href="https://colab.research.google.com/drive/1zE6PCvyXEggSqQsJpUCIWv__DnXyu93v?usp=sharing">Google Colaboratory</a></p><h3>The Dataset</h3><p>We chose the Jenna_climate_2009_2016 dataset produced by the Max Planck Institute for Biogeochemistry in Germany. The temporal (timestamped) dataset has 15 different features including time, air temperature, atmospheric pressure, and humidity. These were collected every 10 minutes, beginning in 2003. We used only the data collected between 2009 and 2016. Researchers collected the data over a long time and with high granularity, which made the Max Planck dataset well-suited to our project.</p><p>The first stage in the project was to process the dataset so that we could apply different anomaly detection methods effectively. We inspected and cleaned the dataset to remove errors and inconsistencies, ensuring the accuracy and reliability of our models. Next, we visualised the data as shown in Figure 1. As expected, there was a clear yearly trend for many weather features. Therefore, we decided to focus on identifying anomalous years for weather.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/560/0*TrxVLdXOHPzot43f" /><figcaption>Figure 1. Visualisation of some features of the dataset.</figcaption></figure><p>We used different methods for exploratory data analysis to gain a better understanding of the dataset’s variables and the relationships between them. These included heat maps to identify correlated features and scatter plots to analyse the relationship between features. Figure 2 shows that there was significant correlation between temperature and specific humidity and temperature and dew point, which could be analysed further.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/903/0*pFO4Ol6iMwxCYsAi" /><figcaption>Figure 2. Heat-map to show correlated features.</figcaption></figure><h3>Anomaly Detection Methods</h3><p>Throughout the project, we explored four different methods for anomaly detection: the k-NN algorithm, Z-scores, cluster- based local outlier factor (CBLOF) and autoencoders. These methods allowed us to approach anomaly detection differently, considering statistical measures, analysing relationships between features and training neural networks.</p><h4>k-NN</h4><p>The k-Nearest Neighbours algorithm, (k-NN) is a supervised machine learning algorithm that is widely used to solve classification problems. The k-NN algorithm assumes that similar things exist in close proximity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*iK7fMaLPFHsulLsC" /><figcaption>The k-NN algorithm</figcaption></figure><p>We applied this algorithm to the dataset as follows:</p><ul><li>After preprocessing, we normalised the temperature values to ensure uniform scaling.</li><li>We applied the k-NN algorithm to identify anomalies in the temperature data.</li><li>W selected the optimal k value to achieve the maximum accuracy of the modeL. The common case is k = 5. So, in the example, we initiated that k = 5 and proceeded with the process.</li><li>We calculated z-scores for the distances between data points and their neighbours, allowing us to standardise the distances.</li></ul><pre># Normalize temperature values<br>scaler = StandardScaler()<br>train_df[&#39;T (degC)&#39;] = scaler.fit_transform(train_df[[&#39;T (degC)&#39;]])<br><br># Choose an appropriate value of k (number of neighbors)<br>k = 5<br><br># Train KNN model<br>knn = NearestNeighbors(n_neighbors=k)<br>knn.fit(train_df[[&#39;T (degC)&#39;]])<br><br># Detect Anomalies<br>distances, _ = knn.kneighbors(train_df[[&#39;T (degC)&#39;]])<br># Calculate z-scores for distances<br>z_scores = ((distances - distances.mean()) / distances.std())<br><br># Define a threshold for anomaly detection<br>anomaly_threshold = 2.0  # Adjust as needed<br><br># Identify anomalies<br>anomalies = train_df[z_scores &gt; anomaly_threshold]</pre><p>The red data points in Figures 3 to 5 represent anomalies, indicating unusual temperature variations or extreme weather conditions in 2009, for the Temperature, Wind Speed and Humidity features.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uNNyPOkp_dN1PSSfU6BApA.png" /><figcaption>Figure 3. Scatter plots of the temperature, windspeed and humidity (left to right) with anomalies highlighted in red.</figcaption></figure><p>The application of the KNN algorithm to detect weather anomalies in temperature data provides a starting point for further investigation and analysis. The k-NN algorithm’ performance degrades in high dimensionality spaces, so it is best applied to different weather features individually. Additionally, selecting the optimal k-value can be challenging, and requires some domain knowledge.</p><h4>Z-Score</h4><p>The z-score (also known as standard score) is the number of standard deviations by which the value of a new score is above or below the mean value. We computed the z-scores via the following formula,</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/66/0*ch189H-dt5lV_xZS" /></figure><p>where x is the raw data, mu is the population mean, and sigma is the population standard deviation.</p><p>For a normal distribution, the Empirical Rule states that we can detect outliers via the following observations:</p><p>a) 68.3% of the data points lie between +/- 1 standard deviations.</p><p>b) 95.4% of the data points lie between +/- 2 standard deviations.</p><p>c) 99.7% of the data points lie between +/- 3 standard deviations.</p><p>We assumed that the temperature data was approximately normal, even though for some years we observed slightly skewed data, and plotted the maximum obtained temperature z-score for each year.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/567/0*BjfQdKcmyCwyDxSp" /><figcaption>Figure 4. Bar plot of the largest temperature z-score values by year</figcaption></figure><p>From Figure 4, we can see that 2015 has the largest maximum z-score value amongst all years. One potential explanation for this is that the distribution of temperature in 2015 might not be close to normal distribution. We can verify our guess by plotting a histogram for the temperature variable in 2015.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*5t3bbNC8GUNLOEHZ" /><figcaption>Figure 5. Histogram for temperature in 2015</figcaption></figure><p>We see that Figure 5 is a strongly positively skewed histogram, which suggests that the distribution is far from a normal distribution.</p><h4>Cluster Based Local Outlier Factor</h4><p>Cluster Based Local Outlier Factor (CBLOF) involves classifying anomalies based on their proximity to the cluster of data. Two separate variables are read from the data set, possessing distinct correlations. Data is then extracted per year to analyse these weather condition relationships. An anomaly score is assigned to each variable from the proximity to the centre of the cluster. Using a set threshold value, data points are classified as inliers and outliers based on the anomaly score. The variable relationships used were:</p><p>1. Temperature <em>( °C) </em>and Specific Humidity <em>(g/kg)</em></p><p>2. Temperature <em>( °C)</em> and Wind Speed <em>(m/s)</em></p><p>3. Temperature<em> ( °C) </em>and Dew Point <em>(g/kg)</em></p><p>Relationships 1 and 2 can indicate the presence of many extreme weather events, namely hurricanes and tornadoes [5]. Relationship 3 relates to the cold weather phenomena like blizzards [6]. Monitoring the progress of these related variables can allude to formation of some of the events listed.</p><p>The threshold value is set as 1% and is constant throughout the investigated years, with the shape determined by the whole set of data. A threshold cluster is created, and the data is plotted. CBLOF creates smaller clusters which can be used to classify outliers. However, in this instance, they are ignored.</p><p>From the data set, points are separated into years and plotted. Upon comparison, anomalous years are determined from the shape of the plot and the number of outliers relative to the other years.</p><pre>data = pd.read_csv(csv_path)<br>data[&#39;Date Time&#39;]=pd.to_datetime(data[&#39;Date Time&#39;])<br>data.set_index(&#39;Date Time&#39;).head(2)<br>data1=data[data[&#39;Date Time&#39;].between(&#39;01.01.2013&#39;,&#39;31.12.2013 &#39;)]<br>minmax = MinMaxScaler(feature_range=(0, 1))</pre><p>CBLOF involves two variables, resulting in outliers being plotted against other outliers. The threshold region determining these outliers is kept constant by reshaping the entire dataset rather than individual years.</p><pre>data[[&#39;T (degC)&#39;,&#39;sh (g/kg)&#39;]] = minmax.fit_transform(data[[&#39;T (degC)&#39;,&#39;sh (g/kg)&#39;]])<br>data[[&#39;T (degC)&#39;,&#39;sh (g/kg)&#39;]].head()<br><br>X1 = data1[&#39;T (degC)&#39;].values.reshape(-1,1)<br>X2 = data1[&#39;sh (g/kg)&#39;].values.reshape(-1,1)<br>X = np.concatenate((X1,X2),axis=1)</pre><p>In the plots in Table 1:</p><p>1. Purple contours represent the increasing anomaly score from the threshold.</p><p>2. Green contours represent the points at which the anomaly score is equal to the threshold value.</p><p>3. Pink contours show the region in which the anomaly score is less than the threshold.</p><pre>plt.contourf(xx, yy, Z, levels=np.linspace(Z.min(), threshold, 7),cmap=plt.cm.Purples_r)<br>plt.contour(xx, yy, Z, levels=[threshold],linewidths=2, colors=&#39;green&#39;)<br>plt.contourf(xx, yy, Z, levels=[threshold, Z.max()],colors=&#39;pink&#39;)</pre><p>The most anomalous year for the data set was determined to be 2015, as shown in Table 1.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Uqx0uHanBgCepHPUmuQGRg.png" /><figcaption>Table 1. CBLOF Clusters for weather data feature pairs in 2015.</figcaption></figure><p>Overall, CBLOF provides an efficient method to observe weather trends and relationships but has limited use when observing individual weather conditions. Observing these trends as a function of weather variables provided a useful insight into anomalous weather modelling, which would have been missed using other detection techniques. However, this benefit is limited to conditions with clear correlations. Almost no observations can be made when choosing two variables that are not closely associated.</p><h4>Auto-encoders</h4><p>In an autoencoder, there are two core components: the encoder and decoder. The encoder reduces high-dimensional data to a lower-dimensional representation, and the decoder attempts to reconstruct it. This autoencoder is utilised for anomaly detection by evaluating the accuracy of data reconstruction. Three main stages are involved: data pre-processing, building the autoencoder (comprising encoder and decoder models), and detecting anomalies (measuring reconstruction loss to identify anomalies).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/431/0*QcVX3FqBq8FcvGPU" /><figcaption>Figure 6. Diagram of autoencoder architecture [9].</figcaption></figure><p>The other anomaly detection methods have highlighted temperature as a useful feature for detecting anomalous weather patterns. Therefore, we will detect anomalies in temperature patterns. First, the temperature data required some further preprocessing. The Z-score anomaly detection method highlighted that the temperature data for the years 2014 and 2015 had a score greater than 3 and so could be considered anomalous. Therefore, days from these years were considered anomalous and labelled “1”. whereas days from all other years were considered non anomalous and labelled “0”. Figure 7 shows sampled anomalous and non-anomalous days.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*SmEHXN6JUWa5wbBIQXHVnQ.png" /><figcaption>Figure 7. Sample anomalous and non-anomalous weather-days.</figcaption></figure><p>Next, we built and trained the autoencoder using the keras API, and plotted the training and validation loss (see Figure 8).</p><pre># Define the dimensions<br><br>input_dim = X_train_label_0.shape[1] # input data dimension<br>encoding_dim = 8 # dimension of the encoded data<br><br># Encoder<br>input_layer = keras.Input(shape=(input_dim,))<br>encoder = keras.layers.Dense(encoding_dim, activation= &#39;relu&#39;)(input_layer)<br><br># Decoder<br>decoder = keras.layers.Dense(input_dim, activation=&#39;sigmoid&#39;)(encoder)<br><br># Create the autoencoder model<br>autoencoder = keras.Model(inputs=input_layer,outputs=decoder)<br>autoencoder.compile(optimizer=&#39;adam&#39;,loss=&#39;mean_squared_error&#39;)<br><br># Train the autoencoder <br>history = autoencoder.fit(X_train_label_0,X_train_label_0, epochs=100, batch_size=64, shuffle=True, validation_data=(X_test, X_test))</pre><pre># Plot the training curves<br><br>plt.plot(history.history[&quot;loss&quot;], label=&quot;Training Loss&quot;)<br>plt.plot(history.history[&quot;val_loss&quot;], label=&quot;Validation Loss&quot;)<br>plt.legend</pre><figure><img alt="" src="https://cdn-images-1.medium.com/max/565/0*z3rwtl09qG3jY9ve" /><figcaption>Figure 8. Training loss and validation loss for the autoencoder model.</figcaption></figure><p>Lastly, anomalies were detected by calculating the reconstruction loss ( the difference between the original data and the data after it has passed through the autoencoder) . If the loss is greater than a set threshold, then a day’’s weather is detected as an anomaly.</p><p>The threshold was set by:</p><ul><li>Calculating the mean average error for normal weather-years before and after they have passed through the autoencoder.</li><li>Classifying any weather-years as anomalous if the reconstruction error is higher than one standard deviation from the normal weather-years.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Y-1P2CkEk9annhoXVwB3gA.png" /><figcaption>Figure 9. Histograms of plot the reconstruction error on anomalous and non- anomalous weather days.</figcaption></figure><p>Overall, this method was not very accurate, with an accuracy score of only 47%. This could be improved by building a multi-modal model using all the relevant features for each timestep and using a long-short-term memory (LSTM) neural network to process the temporal data. Also, we could investigate different strategies for setting the threshold above which weather_days are classified as anomalous. Finally, autoencoders perform better at anomaly detection when the anomalies are more common. Therefore, they may not be suitable for detecting rare extreme weather events for applications such as now-casting.</p><h3>Conclusion</h3><p>Our project’s aim was to apply unsupervised learning methods and statistical analysis to detect anomalies in temporal weather data. Through a variety of machine learning models we succeed in detecting anomalies in weather data. Our dataset used data from one location over time rather than focusing on an extreme weather event, as would be the case for nowcasting applications. It would be interesting to see how these methods perform in different contexts.</p><p>Overall, anomalies offer valuable insights into unusual weather events, which can be of interest to meteorologists, climate scientists, and decision-makers responsible for weather forecasting and climate monitoring. However, the interpretation of anomalies should be done in conjunction with domain expertise and additional data sources to ensure accurate and meaningful insights.</p><h4>Future Works</h4><p>Currently, weather forecasting is a popular research area due to its importance. An extension to our research would be to involve radar observations, and use self-organising maps (SOMs) as an unsupervised learning method for detecting patterns in the way the radar products’ values transition from one time moment to another in both normal and severe weather conditions [7]. For detecting more extreme weather events, implementing a supplementary classification model based on Moran’s I index to ensure that the detected anomalies are not due to either a sensor failure or a security attack could be a more promising method [8].</p><h3>References</h3><ol><li>Met Office:<a href="https://www.metoffice.gov.uk/binaries/content/assets/metofficegovuk/pdf/data/nowcasting-datasheet_2019.pdf"> https://www.metoffice.gov.uk/binaries/content/assets/metofficegovuk/pdf/data/nowcasting-datasheet_2019.pdf</a></li><li>C. Piruthevi and C. S. K. Selvi, “Filtering of anomalous weather events and tracing their behavior,” 2017 International Conference on Innovations in Information, Embedded and Communication Systems (ICIIECS), Coimbatore, India, 2017, pp. 1–5, doi: 10.1109/ICIIECS.2017.8275913.</li><li>M. R. Nosouhi, K. Sood, N. Kumar, T. Wevill and C. Thapa, “Bushfire Risk Detection Using Internet of Things: An Application Scenario,” in IEEE Internet of Things Journal, vol. 9, no. 7, pp. 5266–5274, 1 April1, 2022, doi: 10.1109/JIOT.2021.3110256.</li><li>J. C. Villarreal Guerra, Z. Khanam, S. Ehsan, R. Stolkin and K. McDonald-Maier, “Weather Classification: A new multi-class dataset, data augmentation approach and comprehensive evaluations of Convolutional Neural Networks,” 2018 NASA/ESA Conference on Adaptive Hardware and Systems (AHS), Edinburgh, UK, 2018, pp. 305–310, doi: 10.1109/AHS.2018.8541482.</li><li>P. B. Rutkevich, P. P. Rutkevych,”Tornado-type stationary vortex with nonlinear term due to moisture transport”, Advances in Science and Research, 2010, 4, pp. 77–82, doi:10.5194/asr-4–77–2010</li><li>Met Office: <a href="https://www.metoffice.gov.uk/weather/learn-about/weather/types-of-weather/snow/blizzard">https://www.metoffice.gov.uk/weather/learn-about/weather/types-of-weather/snow/blizzard</a></li><li>A. Mihai, G. Czibula and E. Mihulet¸, “Analyzing Meteorological Data Using Unsupervised Learning Techniques,” 2019 IEEE 15th International Conference on Intelligent Computer Communication and Processing (ICCP), Cluj-Napoca, Romania, 2019, pp. 529–536, doi: 10.1109/ICCP48234.2019.8959777.</li><li>C. Piruthevi and C. S. K. Selvi, “Filtering of anomalous weather events and tracing their behavior,” 2017 International Conference on Innovations in Information, Embedded and Communication Systems (ICIIECS), Coimbatore, India, 2017, pp. 1–5, doi: 10.1109/ICIIECS.2017.8275913.</li><li>Tensorflow tutorial: Intro to Autoencoders (<a href="https://www.tensorflow.org/tutorials/generative/autoencoder">https://www.tensorflow.org/tutorials/generative/autoencoder</a>)</li></ol><p><em>This story was originally written by Vivek Chander, Dogukan Turkoz, Mariam Zenaishvili and </em><a href="https://www.linkedin.com/in/evyanneewusie/"><em>Evyanne Ewusie </em></a><em>— Educational Content Creator for </em><a href="https://www.linktr.ee/wdss"><em>WDSS</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9630eae33ecf" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Language in Focus, Part 1: Predicting Movie Magic]]></title>
            <link>https://medium.com/@WDSS/language-in-focus-part-1-predicting-movie-magic-921534288ade?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/921534288ade</guid>
            <category><![CDATA[movies]]></category>
            <category><![CDATA[naturallanguageprocessing]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[neural-networks]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Tue, 05 Sep 2023 19:02:07 GMT</pubDate>
            <atom:updated>2023-09-05T19:02:07.098Z</atom:updated>
            <content:encoded><![CDATA[<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F3o7aD7TFLsZjgzXrZS%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2F3o7aD7TFLsZjgzXrZS%2Fgiphy.gif&amp;image=https%3A%2F%2Fi.giphy.com%2Fmedia%2F3o7aD7TFLsZjgzXrZS%2Fgiphy.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="217" frameborder="0" scrolling="no"><a href="https://medium.com/media/eff535554198b73f0b880de207bb26bd/href">https://medium.com/media/eff535554198b73f0b880de207bb26bd/href</a></iframe><p>Natural Language Processing (NLP) is a current topic in machine learning (ML). With the commercialisation of Chat GPT [3] and the integration of chatbots into business environments [4], NLP has become a part of our everyday lives. Before Generative Pre-trained Transformers (GPTs), a turning point in the field of NLP was the development of Recursive Neural Networks (RNNs). Researchers developed RNNs to better model the dependencies in sequential data [2]. Interpreting and predicting sequences of words was essential to the success of NLP.<br>This blog post will introduce how researchers approach NLP, exploring the most common data processing and classification methods. Next, it will cover RNNs in-depth, including memory cells, the back-propagation through time (BPTT) algorithm and the challenges RNNs face. Lastly, it will illustrate how we can use NLP to classify film genres by summarising one of WDSS’s own research projects!</p><h3>Introduction to NLP</h3><p>Data processing is a crucial stage in any ML project. As NLP is a well-established field, many tricks for processing and normalising text data exist:</p><ul><li><em>Non-linguistic analysis</em> is used on social media platforms where users write posts containing<em> </em>icons, special characters, platform-specific prefixes and web links. This preprocessing method involves removing characters, assigning values to represent non-text features, and removing images and links[1].</li><li><em>Morphological analysis</em> [1] is another method for text data processing. It includes tokenisation, where researchers use a dictionary to convert each word into a unique integer, removing punctuation and removing “stop words” such as <em>the</em>, <em>is</em>, <em>a</em>, and <em>and </em>in English.</li><li><em>Syntactic analysis</em> is a text data processing method where researchers tag words as a “part of speech”. These would be nouns, verbs, articles, adjectives and more.</li><li>Lastly, <em>semantic analysis</em> focuses on the meaning of words. This method uses emotion dictionaries to index the emotions associated with words.</li></ul><p>Once the text data is processed, it can be classified. ML algorithms like Support Vector Machines (SVM), Naive Bayes and Decision Trees can all solve language classification tasks. However, deep neural networks have become more common due to their better performance in multi-class classification [7]. These neural networks include Convolutional Neural Networks (CNNs) [5] and RNNs [6].</p><h3>What are Recurrent Neural Networks?</h3><p>An RNN is a neural network with an internal state that stores previous inputs [2]. RNNs model the dependencies in sequential data, which is necessary for NLP as often words need to be understood in the context of a sentence or wider text. This is best illustrated by a diagram.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*w9eOEynjJB996epzVZmY2g.png" /><figcaption>Neurons with recurrence [8].</figcaption></figure><p>Each recurrent cell represents a discrete time step. At each time step, the cell has weights that map the input vector x_t to an output vector y_t. These weights are shared between cells through the hidden states h_t. The recurrent network creates a summary of previous observations via these connections. In this way, the network “remembers” relationships between events over time in the data [2]. A recurrence relation updates the hidden state h_t at each time step. This relation is defined by a function f_h of the input x_t to that cell at that time and the previous state h_t-1 of the cell.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/320/1*myvi9vq2t_BWYJG_5dmK2A.png" /><figcaption>The recurrence relation [2].</figcaption></figure><p>An activation function is a non-linear function that defines the output of a neuron in a network. Here, f_h represents the activation function tanh. Therefore, the complete formula for calculating the hidden state is:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/752/1*P3dNHLfZXLK3WVfnhg9M_w.png" /><figcaption>Formula for calculating the hidden state [2].</figcaption></figure><p>The output of a single recurrent neuron is a function of the hidden state.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/224/1*7KlA0W6osNcjocdKPtv-Bg.png" /><figcaption>Output of a single recurrent neuron [2].</figcaption></figure><p>Specifically, the hidden state is weighted and biased to set how harshly the network should apply these weights during training. Next, the result o_t is passed through another activation function: Softmax.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/412/1*AMBvPPW-hbxSM9VXYpttVg.png" /><figcaption>The hidden state is weighted and biased and the result is passed through the Softmax function [2].</figcaption></figure><p>RNNs train by an algorithm called backpropagation through time (BPTT). Backpropagation takes the derivative with respect to each parameter (called the “loss”) and shifts parameters to minimise loss [2]. The BPTT algorithm backpropagates the loss for each of the individual time steps, from the current time to the initial time in the sequence. This means that the gradient is computed repeatedly, which can cause problems. The two most common issues that this causes are the vanishing and exploding gradient problems. In short, gradients “explode” when the weight matrices are large. This prevents the network from converging at a stable predicted value. Similarly, gradients vanish when the weights are small. This prevents the network from using all the important information when training, leading to incorrect predictions. Exploding gradients can be prevented using a method called gradient clipping. Vanishing gradients can be mitigated by using the rectified linear unit (ReLU) activation function, or by using gated cells. These cells selectively control the flow into the neural network, filtering out what is not important [8]. Long Short Term Memory cells (LSTMs) and Gated Recurrent Units (GRUs) are common types of gated cells.</p><h3>An example: Movie Genre Classification</h3><p>One common application of NLP is grouping entertainment media, such as movies or blog posts, into categories for users to choose from. This type of problem requires a many-to-one RNN. The image below shows an example of a many-to-one RNN for classifying the sentiment (emotional positivity or negativity) of a sentence.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1018/1*1LHLAwWdzJBLnYAxTqRShg.png" /><figcaption>Many-to-one RNN [8].</figcaption></figure><p>At WDSS, we complete research projects exploring different areas of data science (see more <a href="https://research.wdss.io/">here</a>). For example, one research project aimed to classify movies into their respective genres based on their IMDb descriptions using an RNN. First, the researcher analysed the data to identify the uneven frequencies of genre classes.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/765/1*yeg6AMattKw-ICy9IMcbqg.png" /><figcaption>Analysis of the class imbalance.</figcaption></figure><p>They then processed the data using the NLTK python library and split the training and testing datasets. Next, they set up the learning frameworks using the ML library PyTorch. This included building an RNN class and addressing the vanishing gradients problem with an LSTM class and a GRU class. Then, they built a function to train the model, using the cross entropy loss function and the Adam optimiser. Lastly, they evaluated the model’s accuracy and found that the unbalanced dataset meant that the model could classify dramas and documentaries well but not other genres.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/428/1*E00phFzjyJvsuC4dUQ24uw.png" /><figcaption>RNN with GRUs model accuracy.</figcaption></figure><p>This shows that finding a good dataset is important!</p><h3>Next Steps</h3><p>The research project covered in this blog used the PyTorch library: an ML framework developed by Meta AI. You can find tutorials on this library in your own projects <a href="https://pytorch.org/tutorials/">here</a>. <a href="https://www.nltk.org/">Python Natural Language Toolkit (NLTK)</a> is another great resource for language processing. It provides language datasets, libraries for text data processing, guides and documentation. Lastly, serverless data processing is essential when working with real-time text data, such as social media feeds or chat forums. Amazon Web Services has a<a href="https://aws.amazon.com/getting-started/projects/build-serverless-real-time-data-processing-app-lambda-kinesis-s3-dynamodb-cognito-athena/5/"> tutorial on serverless data processing</a> that you could adapt to advance your NLP skills!</p><h3>References</h3><ol><li>D. Rogers, A. Preece, M. Innes and I. Spasić, “Real-Time Text Classification of User-Generated Content on Social Media: Systematic Review,” in IEEE Transactions on Computational Social Systems, vol. 9, no. 4, pp. 1154–1166, Aug. 2022, doi: 10.1109/TCSS.2021.3120138.</li><li>Mohamed Abdel-Basset; Nour Moustafa; Hossam Hawash, “Introducing Recurrent Neural Networks,” in Deep Learning Approaches for Security Threats in IoT Environments, IEEE, 2023, pp.189–207, doi: 10.1002/9781119884170.ch8.</li><li>T. Wu et al., “A Brief Overview of ChatGPT: The History, Status Quo and Potential Future Development,” in IEEE/CAA Journal of Automatica Sinica, vol. 10, no. 5, pp. 1122–1136, May 2023, doi: 10.1109/JAS.2023.123618.</li><li>M. Banisharif, A. Mazloumzadeh, M. Sharbaf and B. Zamani, “Automatic Generation of Business Intelligence Chatbot for Organizations,” 2022 27th International Computer Conference, Computer Society of Iran (CSICC), Tehran, Iran, Islamic Republic of, 2022, pp. 1–5, doi: 10.1109/CSICC55295.2022.9780490.</li><li>Y. LeCun, L. Bottou, Y. Bengio and P. Haffner, “Gradient-based learning applied to document recognition”, <em>Proc. IEEE</em>, vol. 86, no. 11, pp. 2278–2324, Nov. 1998.</li><li>R. J. Williams and D. Zipser, “A learning algorithm for continually running fully recurrent neural networks”, <em>Neural Comput.</em>, vol. 1, no. 2, pp. 270–280, 1989.</li><li>H. A. Sayyed, S. Rushikesh Sugave, S. Paygude and B. N Jazdale, “Study and Analysis of Emotion Classification on Textual Data,” 2021 6th International Conference on Communication and Electronics Systems (ICCES), Coimbatre, India, 2021, pp. 1128–1132, doi: 10.1109/ICCES51350.2021.9489204.</li><li>Alexander Amini and Ava Amini, “MIT 6.S191: Introduction to Deep Learning”, Accessible at: <a href="http://introtodeeplearning.com/">IntroToDeepLearning.com</a></li></ol><p><em>This story was originally written by </em><a href="https://www.linkedin.com/in/evyanneewusie/"><em>Evyanne Ewusie </em></a><em>— Educational Content Creator for </em><a href="https://www.linktr.ee/wdss"><em>WDSS</em></a><em>, and used content from a research project by </em><a href="https://www.linkedin.com/in/peter-hyland-53a2951ba/"><em>Peter Hyland</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a><em>.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=921534288ade" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Reinforcement Learning in Action, Part 1: Electric Vehicle Routing]]></title>
            <link>https://medium.com/@WDSS/reinforcement-learning-in-action-part-1-electric-vehicle-routing-39e70569d7d6?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/39e70569d7d6</guid>
            <category><![CDATA[engineering]]></category>
            <category><![CDATA[autonomous-cars]]></category>
            <category><![CDATA[reinforcement-learning]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Tue, 11 Jul 2023 15:51:38 GMT</pubDate>
            <atom:updated>2023-07-11T15:51:38.007Z</atom:updated>
            <content:encoded><![CDATA[<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fgiphy.com%2Fembed%2F2A3dXPpN6gqTGMatfY%2Ftwitter%2Fiframe&amp;display_name=Giphy&amp;url=https%3A%2F%2Fmedia.giphy.com%2Fmedia%2F2A3dXPpN6gqTGMatfY%2Fgiphy-downsized-large.gif&amp;image=https%3A%2F%2Fi.giphy.com%2Fmedia%2F2A3dXPpN6gqTGMatfY%2Fgiphy-downsized-large.gif&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=giphy" width="435" height="317" frameborder="0" scrolling="no"><a href="https://medium.com/media/84a28d91ed126f3ad3a5c5fdaef3285b/href">https://medium.com/media/84a28d91ed126f3ad3a5c5fdaef3285b/href</a></iframe><blockquote>“The only real mistake is the one from which we learn nothing.” — Henry Ford</blockquote><p>As we generate more and more data, engineering problems are increasingly solvable using machine learning and optimisation. Many current research papers explore a subset of machine learning (ML) called reinforcement learning (RL) to support many areas of control systems engineering. RL trains an agent to take actions based on observations of its environment to maximise a reward [1].</p><p>This blog post will introduce some main components of RL: policies, value functions, Markov Decision Processes (MDPs), and optimisation. Next, it will investigate the first application of RL for this blog series: Autonomous Driving Systems. Lastly, this post will highlight some valuable resources to start your RL projects, including the Python library Open AI Gym [2]— created by the same research laboratory behind Chat-GPT.</p><h4>About Reinforcement Learning</h4><p>Imagine a robot whose body includes a standing component that must balance on top of a cart with wheels. The robot is the <strong>agent</strong> and can take the <strong>actions</strong> of moving left and right in its <strong>environment</strong>. When the robot balances successfully it receives a <strong>reward. </strong>The robot can make four types of <strong>observations</strong>: the cart’s position, the cart’s velocity, the robot body’s angle, and the robot body’s velocity.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/600/1*tXVMCcBUafvv54AJy18NoQ.gif" /><figcaption>The Cart Pole Environment from Open AI [3].</figcaption></figure><p>Sometimes there is one outcome to actions, such as balancing a pole on a cart using classical mechanics. These scenarios are called deterministic environments. Alternatively, the environment could be probabilistic and have random outcomes to actions, such as playing against a random opponent in chess. Processes in probabilistic environments are called Markov Decision Processes (MDPs) [4]. In RL, we often assume the agent makes decisions as part of an MDP to account for unexpected events, such as someone bumping into the robot cart.</p><p>In RL, the rewards are delayed. An agent only receives confirmation that its decisions were correct occasionally, after making many choices. For example, the cart may need to move left and right a few times to balance the robot’s body. Therefore, the agent must decide on a set of rules to follow to maximise the possibility of a future reward, called a policy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/780/1*eUIde-wDZ3dTzcOckV9FJw.png" /><figcaption>The Policy Equation [4]</figcaption></figure><p>The policy <strong><em>π</em></strong> describes the probability of the agent taking action <strong><em>a</em> </strong>given that it is currently in state <strong><em>s</em></strong>. RL aims to maximise value functions which determine the value of being in a state given the policy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/808/1*jgkgSnIJvfTjzQ_ATVzlvg.png" /><figcaption>The Value Equation [4]</figcaption></figure><p>This equation describes the expected future reward given the agent starts in a given state and enacts that policy. The value is regulated using the discount rate <strong><em>γ</em></strong>,<strong><em> </em></strong>which scales how much it favours getting a reward in the future or now as a probability. Each state has its value, which quantifies the total reward an agent can receive in the future if it starts in that state.</p><p>Training an ML model and determining a control theory or RL policy are all optimisation problems. Many different methods exist to determine policies for RL, but recent research often focuses on iteratively improving policies using algorithms like Q-learning or deep learning methods like DQNs [1].</p><h4>What is an Autonomous Driving (AD) system?</h4><p>Before exploring how RL can be applied to Autonomous Driving, we need to first describe what an AD system is.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yKaRzRizHunQgPBr7n34fA.png" /><figcaption><strong>Diagram of an AD system [5].</strong></figcaption></figure><p>In general, the key tasks carried out by an AD system can be split into two groups: “scene understanding” and “decision making and planning” [5]. Scene understanding involves mapping the surrounding area and locating the vehicle on that map. Decision-making and planning involve finding an appropriate route based on the information from the scene understanding stage. This includes trajectory optimisation, which ensures that the planned motion is feasible given how the vehicle can move. This also includes control of the vehicle, which defines the speed, steering angle, and braking actions necessary to move through the mapped environment [5].</p><h4>An Example</h4><p>The electric vehicle (EV) routing problem described in the paper by Lin, B. et al. [6] is a key research area that used RL. The main objective of the problem is to minimise the total distance travelled by a fleet of electric delivery vehicles. Hard-coding the solution would make it less generalisable to other variants. The paper states that a set of customers is scattered in a region, all of whom a fleet of EVs must visit during a time window. All EVs start fully charged at a depot, and there are stations to recharge their batteries during the time frame. By the end of the time frame, they are supposed to return to the depot. RL can be applied to find routes for the EVs such that all the customer demands are satisfied during their time windows and the total distance travelled by the fleet is minimised.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/672/1*ATvvz8KUHngLgDI8GsXHEw.png" /><figcaption>The Electric Vehicle Routing Problem [6].</figcaption></figure><p>To solve this type of problem, the paper by Kiran, B. et al. [5] demonstrates how deep RL has been used to ensure vehicles keep to lanes. Policies for more complex actions, including lane changes, overtaking, and navigating intersections, can be learnt using Q — learning and hybrid neural network architectures.</p><p>The paper by Kiran, B. et al. [5] also highlights that future research should focus on developing more consistent ways of validating RL autonomous driving systems when the testing environment is often difficult to control. Furthermore, because RL systems are often trained and tested in simulations [5] suggests that future research considers was to “bridge the gap” between results in simulation and reality.</p><h4>Next Steps</h4><p>The self-balancing robot example described in this tutorial is inspired by the Cart Pole tutorial from OpenAI. <a href="https://www.youtube.com/@NicholasRenotte">Nicholas Renotte’s Youtube Channel</a><strong> </strong>has a great tutorial on how to run this. If you are new to RL, data science, or programming in general, the “<a href="https://www.geeksforgeeks.org/what-is-reinforcement-learning/">Geeks for Geeks</a>” website is a goldmine! If you are interested in developing your own RL projects, see pages 50–52 of the paper by Li, Y. et al. [1] which lists many RL problems to solve and possible approaches to try out! Finally, for a challenge, look for data science competitions on Kaggle, like <a href="https://www.kaggle.com/c/lux-ai-2021">this past competition</a> to build the best trading bot using RL. You may even win a prize!</p><h4>Related Content</h4><p>If you want to read more from us, click <a href="https://research.wdss.io/oh-hell/">here</a> to see the write-up for a project on RL completed by the WDSS team.</p><h4>References</h4><ol><li>Li, Y. (2017). Deep Reinforcement Learning: An Overview (Version 6). arXiv. <a href="https://doi.org/10.48550/ARXIV.1701.07274">https://doi.org/10.48550/ARXIV.1701.07274</a></li><li>Brockman, G., Cheung, V., Pettersson, L., Schneider, J., Schulman, J., Tang, J., &amp; Zaremba, W. (2016). OpenAI Gym (Version 1). arXiv. <a href="https://doi.org/10.48550/ARXIV.1606.01540">https://doi.org/10.48550/ARXIV.1606.01540</a></li><li>A. G. Barto, R. S. Sutton and C. W. Anderson, “Neuronlike adaptive elements that can solve difficult learning control problems,” in IEEE Transactions on Systems, Man, and Cybernetics, vol. SMC-13, no. 5, pp. 834–846, Sept.-Oct. 1983, doi: 10.1109/TSMC.1983.6313077.</li><li>S. L. Brunton (2021, February 12, Machine Learning Meets Control Theory. (2021). Cassyni. <a href="https://doi.org/10.52843/cassyni.x2t0sp">https://doi.org/10.52843/cassyni.x2t0sp</a></li><li>Kiran, B. R., Sobh, I., Talpaert, V., Mannion, P., Sallab, A. A. A., Yogamani, S., &amp; Pérez, P. (2020). Deep Reinforcement Learning for Autonomous Driving: A Survey (Version 2). arXiv. <a href="https://doi.org/10.48550/ARXIV.2002.00444">https://doi.org/10.48550/ARXIV.2002.00444</a></li><li>Lin, B., Ghaddar, B., &amp; Nathwani, J. (2020). Deep Reinforcement Learning for Electric Vehicle Routing Problem with Time Windows. arXiv. <a href="https://doi.org/10.48550/ARXIV.2010.02068">https://doi.org/10.48550/ARXIV.2010.02068</a></li></ol><p><em>This story was originally written by </em><a href="https://www.linkedin.com/in/evyanneewusie/"><em>Evyanne Ewusie </em></a><em>— Educational Content Creator for </em><a href="https://www.linktr.ee/wdss"><em>WDSS</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=39e70569d7d6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Ride-Hailing: Data Science Solving the Challenges]]></title>
            <link>https://medium.com/@WDSS/ride-hailing-data-science-solving-the-challenges-32341edb9446?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/32341edb9446</guid>
            <category><![CDATA[bolt]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[uber]]></category>
            <category><![CDATA[ride-hailing]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Tue, 16 May 2023 11:31:39 GMT</pubDate>
            <atom:updated>2023-05-16T11:32:38.756Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Pe5YpIon7Y3OvxJEedO-QA.jpeg" /><figcaption>Bolt is a transportation platform company that provides ride-hailing, scooter-sharing, and food-delivery services</figcaption></figure><h3><strong>What is Ride-Hailing? Uber, Bolt, Lyft, Didi, Waymo, Tesla?</strong></h3><p>Ride-hailing is a service that enables users to request a ride on demand from a private driver who uses their own vehicle to transport them to their destination through a mobile app. Popular ride-hailing companies include Uber, Bolt, Lyft, and Didi. These companies offer a convenient and often cheaper alternative to traditional taxi services. Passengers can use the app to request a ride, view the driver’s details, track the driver’s location, and pay for the ride. The ride-hailing industry has revolutionized the way people get around in urban areas, providing an affordable and convenient alternative to traditional taxis and an alternative that is clearly better in<br>terms of safety, security, and comfort compared to poor-quality public transport [1]. Additionally, some ride-hailing companies are exploring the use of self-driving cars to disrupt further the traditional transportation industry (Waymo, Tesla).</p><h3>Differential Pricing Strategies to Encourage Platform Participation</h3><p>There are four different pricing strategies in the transportation industry, including uniform pricing, differential customer pricing, differential driver pricing, and bilateral differential pricing. Various studies analyze how these strategies impact the platform, the regulator, and the platform participants. The researchers conclude that each pricing strategy may be optimal in different situations based on the maximal number of potential drivers and customer preferences. The studies provide managerial implications for ride-sharing platforms to tailor their pricing strategies according to supply conditions and user cognition. They have highlighted the effects of customers’ and drivers’ attitudes toward differential pricing and it is suggested that regulators focus on sustainable development and market stability. [2]</p><h3>Traffic Forecasting Using Machine Learning</h3><p>The Traffic4cast Traffic Map Movie datasets provide a huge amount of real-world traffic data across different cities. It has already been used for successful short-term traffic predictions and transfer learning. This year, Traffic4cast tackled a new challenge of predicting traffic congestion using only sparse traffic count data. The resulting dataset has been made available for 10 cities, and it could be a first step towards a traffic graph benchmark dataset in machine learning. While the models seem to capture historic distribution well, more input signals and better placement of vehicle detectors could improve the detection of the global traffic state. [3]</p><p>The authors found that message passing did not improve results compared to city global principal component features. They think that this is due to the heuristic nature of their feature engineering and that a GNN may work better. However, combining the city&#39;s global context features and the spatial coordinates of roads was enough to learn about interactions and local context. Target encodings were critical, and the degree to which they could be leveraged depended on label density. Gradient-boosted decision tree ensembles were competitive but had shortcomings such as difficulty in embedding sequential features. An RNN or hybrid approach could be used in future traffic research. [4]</p><h3>Easing Traffic Congestion</h3><p>Ride-hail companies aimed to combine the benefits of personal cars with public transportation’s efficiency and lower costs. However, despite efforts to promote pooled trips, most users chose solo-ride services like UberX and Lyft over shared rides. This increased vehicle miles traveled (VMT) and negated hopes that pooling would mitigate VMT growth. The use of ride-hail to connect to public transportation or reduce cruising for parking did not significantly mitigate VMT growth. This has important implications for hopes that autonomous ride-hail services will lead to VMT reductions. Public policy must balance individual benefits against societal costs and prioritize space-efficient modes of transportation like public transportation, walking, and biking. [5]</p><h3>Economic Benefits</h3><p>The studies used stated preference data to estimate the utility coefficients for ride-sharing options. The negative and statistically significant intercept implies that pooling has an inherent disutility for consumers. They found that the inconvenience of taking a pooled ride was valued at $3.61 per ride. The negative price coefficient explains why a significant number of ride-sharing users would be willing to choose cheaper pooled rides. During the research, it was also found that low-income respondents are more likely to choose pooling. Respondents who own more cars in the household per person are less likely to choose pooling. In addition, people in a rush are less likely to choose pooling. The study used a mixed logit model to account for heterogeneity in respondents that may bias their repeated choices. [6]</p><h3>Inequalities Through Simulations</h3><p>The authors of this research conducted a simulation of an agent-based automated taxi system to explore the fairness of driver incomes. The simulation considered various city layouts, traffic conditions, and matching algorithms. They found that inequality in driver incomes is influenced by factors such as the demand-to-supply ratio, the spatial distribution of requests, driver idling strategy, and the matching algorithm. To address income inequality, they proposed a new matching algorithm that promotes drivers with lower incomes, leading to fairer income distribution without negatively affecting average incomes. It highlights the importance of simulation models for testing policy changes and monitoring the social effects of platform-based systems. However, it is important to note that short-term income differences among drivers can have significant consequences, such as increased overtime or driver attrition. The simulation does not capture the full complexity of emerging inequalities and feedback loops, which can further amplify wage gaps. Incorporating additional factors like driver skills and varying working hours could provide a more comprehensive understanding of long-term inequalities. Additionally, the current setup of ride-hailing companies, with its gamified and algorithm-driven incentives, poses challenges for implementing hourly wage systems or unionizing efforts. This study has limitations, such as simplified city models, averaged traffic conditions, and the omission of factors like driver skills and surge pricing. Despite these limitations, their findings shed light on the need for addressing income inequality in ride-hailing platforms and the potential role of algorithmic fairness policies in achieving better social outcomes. [7]</p><h3>Autonomous taxis</h3><p>This study on dynamic autonomous taxi operations proposes dispatching strategies for autonomous taxis in both single-request mode and hybrid-request mode. In the single request mode, a network flow model is used to centrally plan routes for taxis based on real-time information and requests. In the hybrid request mode, a combination of centralized and decentralized autonomous dispatchers is employed to plan short-term and long-term routes for taxis. Experimental results show that the proposed strategies outperform other approaches in terms of service quality and economic efficiency. However, the study has limitations, such as the reliance on static travel time estimates and the need for further improvement in long-term reservation assignment and computational efficiency. Future research will focus on addressing these limitations and extending the strategies to ride-sharing scenarios. [8]</p><p>References:<br>1. Tirachini, A. Ride-hailing, travel behaviour and sustainable mobility: an international review. <em>Transportation</em> <strong>47</strong>, 2011–2047 (2020). <a href="https://doi.org/10.1007/s11116-019-10070-2">https://doi.org/10.1007/s11116-019-10070-2</a></p><p>2. Zhao, D., Yuan, Z., Chen, M. and Yang, S. (2022), Differential pricing strategies of ride-sharing platforms: choosing customers or drivers?. Intl. Trans. in Op. Res., 29: 1089–1131. <a href="https://doi.org/10.1111/itor.13045">https://doi.org/10.1111/itor.13045</a></p><p>3. Neun, M., Eichenberger, C., Martin, H., Spanring, M., Siripurapu, R., Springer, D., … &amp; Hochreiter, S. (2023). Traffic4cast at NeurIPS 2022 — Predict Dynamics along Graph Edges from Sparse Node Data: Whole City Traffic and ETA from Stationary Vehicle Detectors. <em>arXiv preprint arXiv:2303.07758</em></p><p>4. Lumiste, M., &amp; Ilie, A. (2022). Large scale traffic forecasting with gradient boosting, Traffic4cast 2022 challenge. <em>arXiv preprint arXiv:2211.00157</em></p><p>5. Schaller, B. (2021). Can sharing a ride make for less traffic? Evidence from Uber and Lyft and implications for cities. <em>Transport policy</em>, <em>102</em>, 1–10.</p><p>6. Naumov, S., &amp; Keith, D. (2023). Optimizing the economic and environmental benefits of ride-hailing and pooling. <em>Production and Operations Management</em>, 32, 904– 929. <a href="https://doi.org/10.1111/poms.13905">https://doi.org/10.1111/poms.13905</a></p><p>7. Bokányi, E., Hannák, A. (2020). Understanding Inequalities in Ride-Hailing Services Through Simulations. Sci Rep 10, 6500. <a href="https://doi.org/10.1038/s41598-020-63171-9">https://doi.org/10.1038/s41598-020-63171-9</a></p><p>8. Duan, L., Wei, Y., Zhang, J., &amp; Xia, Y. (2020). Centralized and decentralized autonomous dispatching strategy for dynamic autonomous taxi operation in hybrid request mode. Transportation Research Part C: Emerging Technologies, 111, 397–420.</p><p>Bolt <a href="https://bolt.eu/">Website</a>, <a href="https://www.linkedin.com/company/bolt-eu/">LinkedIn</a>, <a href="https://www.instagram.com/bolt/">Instagram</a>, <a href="https://www.facebook.com/Bolt/">Facebook</a></p><p><em>This story was originally written by </em><a href="https://uk.linkedin.com/in/alexandru-pascu"><em>Alexandru Pascu</em></a><em> — President of the </em><a href="https://www.linktr.ee/wdss"><em>WDSS</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=32341edb9446" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Revolutionizing Cancer Detection and Diagnosis with Artificial Intelligence in Healthcare]]></title>
            <link>https://medium.com/@WDSS/revolutionizing-cancer-detection-and-diagnosis-with-artificial-intelligence-in-healthcare-3a8a458ffce2?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/3a8a458ffce2</guid>
            <category><![CDATA[sybil]]></category>
            <category><![CDATA[healthcare]]></category>
            <category><![CDATA[deepmind]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[cancer]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Mon, 10 Apr 2023 19:42:34 GMT</pubDate>
            <atom:updated>2023-04-10T20:42:28.193Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*694_Z21zPFxrJY3kclFpLQ.png" /><figcaption>Rayscape AI tools that assist radiologists in the analysis of medical images</figcaption></figure><h3>How AI Can Transform Cancer Imaging</h3><p>Cancer detection and diagnosis is a critical area in healthcare where Artificial Intelligence (AI) is revolutionizing imaging techniques. It is enabling faster, more accurate, and more informative assessments, helping doctors identify early-stage cancers and better assess cancer risk factors. AI systems like machine learning and deep learning can analyze and interpret large datasets to identify complex patterns and relationships that human performance might not detect. Having the ability to aid in screening tests for cancers like breast cancer, identify cervical precancers, and determine the stage of prostate cancer, despite the excitement AI generates, the question remains of whether it is ready for clinical implementation and whether it will help all patients.</p><h3>AI for Cancer Screening, Diagnosis, and Prognosis</h3><p>AI algorithms can analyze various data types to identify asymptomatic patients at risk of developing cancer, helping clinicians investigate and triage symptomatic patients. Multi-modal data integration, such as combining radiomic, genomic, and clinical factors, improves diagnostic precision. Artificial Intelligence can automate detection and classification of pre-malignant lesions, identify and classify indeterminate pulmonary nodules, and predict treatment response. Liquid biopsy tests analyze cell-free DNA, and machine learning can enhance high-dimension data approaches. Digital pathology and deep learning models predict recurrence risk following surgical resection of several cancers. Further research is needed to validate and generalize findings for broader clinical implementation.</p><h3>Sybil: The AI Tool for Personalized Lung Cancer Risk Analysis</h3><p>The development of Sybil represents a significant advance in lung cancer screening. Low-dose computed tomography (LDCT) scans have limitations and can produce false positives, leading to unnecessary invasive procedures. Sybil’s deep-learning algorithm can predict a patient’s likelihood of developing lung cancer within six years, based on personalized risk factors and imaging data. It was trained on hundreds of CT (computed tomography) scans to detect subtle patterns indicating future cancer risk. Sybil’s performance was tested on diverse sets of lung LDCT scans, achieving strong C-index and ROC (Receiver operating characteristic) - AUC (area under the curve) scores. Sybil’s predictive ability has implications for personalized medicine beyond lung cancer screening, such as predicting other types of cancer or diseases.</p><h3>DeepMind Mammography AI System</h3><p>Researchers from Google Health &amp; Cancer Research UK Imperial Centre, Northwestern University, and Royal Surrey County Hospital have developed an AI system capable of outperforming clinical specialists in detecting breast cancer from mammograms. The study used large datasets from breast cancer screening programmes in the UK and US, and the AI system accurately predicted, from screening mammograms alone, whether a patient would have a biopsy positive for breast cancer with lower false positive and false negative rates than human experts. The AI system also demonstrated generalisation across populations and screening settings. Future research is required to understand the full extent to which this technology can benefit breast cancer screening programs.</p><h3>Ethical Implications of AI in healthcare</h3><p>Patient privacy is a fundamental right that must be respected and protected in all healthcare settings, including those that involve the use of AI. These systems must be designed to ensure that patient data is secure and protected from unauthorized access. They must be designed and trained in a way that ensures fairness and prevents bias. There must be clear lines of responsibility and accountability for the use of AI in healthcare while patients must be informed about the use of such technology in their healthcare and must provide their consent for its use.</p><h3>The Future of AI in Healthcare</h3><p>AI have been tested to optimize imaging acquisition and improve image quality in MRI (Magnetic resonance imaging) examinations. In the future, it will play a crucial role in patient-specific cancer treatment planning, personalized radiation therapy, and in managing cancer drug resistance. Further advances in machine learning and especially deep learning could result in quicker and more accurate diagnoses and personalized treatment options for patients with cancer.</p><p>Alex Ouyang | Abdul Latif Jameel Clinic for Machine Learning in Health. January 20, 2023. MIT <a href="https://news.mit.edu/2023/ai-model-can-detect-future-lung-cancer-0120">https://news.mit.edu/2023/ai-model-can-detect-future-lung-cancer-0120</a></p><p>Nadia Jaber. Can Artificial Intelligence Help See Cancer in New, and Better, Ways? March 22, 2022. NCI <a href="https://www.cancer.gov/news-events/cancer-currents-blog/2022/artificial-intelligence-cancer-imaging">https://www.cancer.gov/news-events/cancer-currents-blog/2022/artificial-intelligence-cancer-imaging</a></p><p>Hunter, B.; Hindocha, S.; Lee, R.W. The Role of Artificial<br>Intelligence in Early Cancer Diagnosis. Cancers 2022, 14, 1524. <a href="https://doi.org/10.3390/cancers14061524">https://doi.org/10.3390/cancers14061524</a></p><p>Koh, DM., Papanikolaou, N., Bick, U. <em>et al.</em> Artificial intelligence and machine learning in cancer imaging. <em>Commun Med</em> <strong>2</strong>, 133 (2022). <a href="https://doi.org/10.1038/s43856-022-00199-0">https://doi.org/10.1038/s43856-022-00199-0</a></p><p>McKinney, S.M., Sieniek, M., Godbole, V. et al. International evaluation of an AI system for breast cancer screening. Nature 577, 89–94 (2020). <a href="https://doi.org/10.1038/s41586-019-1799-6">https://doi.org/10.1038/s41586-019-1799-6</a></p><p>Naik N, Hameed BMZ, Shetty DK, Swain D, Shah M, Paul R, Aggarwal K, Ibrahim S, Patil V, Smriti K, Shetty S, Rai BP, Chlosta P and Somani BK. Legal and Ethical Consideration in Artificial Intelligence in Healthcare: Who Takes Responsibility? <em>Front. Surg.</em> 9:862322 (2022). <a href="https://doi.org/10.3389/fsurg.2022.862322">https://doi.org/10.3389/fsurg.2022.862322</a></p><p>Rayscape <a href="https://rayscape.ai/">Website</a>, <a href="https://www.facebook.com/RayscapeAI/">Facebook account</a>, <a href="https://www.linkedin.com/company/rayscape/">LinkedIn account</a><br><a href="https://www.linktr.ee/wdss">WDSS relevant links</a></p><p><em>This story was originally written by </em><a href="https://uk.linkedin.com/in/alexandru-pascu"><em>Alexandru Pascu</em></a><em> and R</em><a href="https://www.linkedin.com/in/ruxancus/"><em>uxandra Ilinca Stilpeanu</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3a8a458ffce2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Generative AI and Technology in Art]]></title>
            <link>https://medium.com/@WDSS/generative-ai-and-technology-in-art-76a9512b9dc6?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/76a9512b9dc6</guid>
            <category><![CDATA[midjourney]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[technology-in-design]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Thu, 09 Mar 2023 10:23:46 GMT</pubDate>
            <atom:updated>2023-03-09T11:31:05.865Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>Generative AI in Art &amp; Design</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*eLbch_AqrOdRJ_0-EJ-5MQ.png" /><figcaption>Graph in the art noaveau style generated using Midjourney</figcaption></figure><p>So, how does generative AI work? Generative AI uses machine learning algorithms to create new content based on existing data. This means that the AI system can analyze vast amounts of data, such as images, texts, and audio, and learn from this data to generate new content that is similar in style or form to the original data.</p><p><strong>Midjourney benefits and challenges</strong></p><p>The Midjourney tool was developed and trained by a team of researchers at an independent research lab. They trained the AI system using a deep neural network, a Stable Diffusion model, which was fed a large dataset of images. The system then learned to generate new designs based on this data, using a process known as “latent space interpolation”.</p><p>One of the key features of Midjourney is its ability to take into account a wide range of design constraints and preferences. For example, a user can specify the size, shape, and orientation of a building, as well as the materials that should be used and the overall aesthetic style. Midjourney will then generate a range of design options that meet these constraints and preferences, providing the user with a diverse set of options to choose from.</p><p>One of the primary benefits of using Midjourney is that it allows architects and designers to quickly and easily explore a wide range of design options, without the need for extensive manual work. This can save time and resources, and allow them to focus on more creative and strategic aspects of the design process.</p><p>One of the challenges with generative AI technologies like Midjourney is the issue of copyright infringement. Because the AI system is generating new content based on existing data, there is a risk that the resulting designs could be too similar to existing designs, potentially infringing on the original creator’s intellectual property rights.</p><p><strong>Other Generative AI tools (MusicLM, Med-PaLM, etc)</strong></p><p>However, generative AI also has many potential applications beyond architecture, design and visual arts. For example, it could be used to create new music (<em>Google researchers have introduced MusicLM, an AI model that can generate high-fidelity music from text. MusicLM creates music at a constant 24 kHz throughout a number of minutes by modeling the conditional music generating process as a hierarchical sequence-to-sequence modeling problem</em>. Source <a href="https://www.infoq.com/news/2023/02/google-musiclm-ai-music/#:~:text=Google%20researchers%20have%20introduced%20MusicLM,%2Dto%2Dsequence%20modeling%20problem.">infoq</a>), art, or literature. It could also be used in fields such as medicine (<em>Google has built the best artificial intelligence yet for answering medical questions. The Med-PaLM AI can answer multiple-choice questions from medical licensing exams and common health queries on search engines with greater accuracy than any previous AI and almost as well as human doctors</em>. Source <a href="https://www.newscientist.com/article/2355689-googles-ai-is-best-yet-at-answering-medical-and-health-questions/#:~:text=Google%20has%20built%20the%20best,as%20well%20as%20human%20doctors.">newscientist</a>) or engineering to generate new solutions to complex problems.</p><p><strong>ChatGPT</strong></p><p>ChatGPT is a transformer language model that uses generative AI techniques to generate natural language responses. Specifically, it uses a deep neural network architecture known as a transformer to generate text based on the input it receives from the user. This transformer architecture allows ChatGPT to analyze and learn from vast amounts of data, enabling it to generate coherent and contextually appropriate responses to a wide range of queries and prompts. So, while ChatGPT is primarily a transformer language model, it also leverages generative AI techniques to generate natural language text.</p><p><strong>Conclusions</strong></p><p>In conclusion, generative AI is a rapidly evolving field with many exciting possibilities for design and architecture. The Midjourney tool is just one example of how this technology can be used to create innovative designs and models. However, it is important to consider the potential challenges and ethical implications of using AI to generate new content, and to ensure that appropriate measures are taken to protect intellectual property rights.</p><p>To address some of these intriguing questions and to help us explore the world of Midjourney and Generative AI, as part of our DataBasic episode for 2023, we have <strong>Hassan Ragab</strong>, Egyptian Designer/Conceptual Artist in California — one of the worlds most well known AI artist. Stay tuned for this gripping and engaging episode as we unravel the usage of AI in Art with Hassan, as he shares his experience and perspectives.</p><p>P.S. ChatGPT has been used to generate parts of this article and we thought it would be a fun use case considering the topic of the blog. I first encountered this approach on <a href="https://kozyrkov.medium.com/introducing-chatgpt-aa824ad89623">Cassie Kozyrkov’s Medium</a>.</p><p>Hassan Ragab’s <a href="https://www.instagram.com/hsnrgb/">Instagram account</a>, <a href="https://www.linkedin.com/in/hsnrgb">LinkedIn account</a> and <a href="https://www.hsnrgb.com/">website</a><br><a href="https://www.linktr.ee/wdss">WDSS relevant links</a> including the podcast, YouTube, TikTok and social media (LinkedIn, Instagram, Twitter)</p><p><em>This story was originally written by </em><a href="https://uk.linkedin.com/in/alexandru-pascu"><em>Alexandru Pascu</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=76a9512b9dc6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Fighting Financial Fraud with Data Science]]></title>
            <link>https://medium.com/@WDSS/fighting-financial-fraud-with-data-science-f0be078c5ab0?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/f0be078c5ab0</guid>
            <category><![CDATA[financial]]></category>
            <category><![CDATA[data]]></category>
            <category><![CDATA[financial-fraud]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[fraud]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Sun, 25 Dec 2022 16:21:39 GMT</pubDate>
            <atom:updated>2023-03-09T10:23:09.885Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*inlcBkoj7x3kPc2WZipmtg.png" /><figcaption>Money joke that can become the reality of a fraud</figcaption></figure><p>The world lost approximately $28.6 Billion in credit card fraud in 2020, according to a 2021 Nilson Report. Credit card fraud increased by 42% in the last quarter of 2021 — a trend that is expected to continue well into 2022. Identity theft, money laundering, credit card fraud, and authorized push payment (APP) fraud are a few types of financial crime committed by fraudsters who are increasingly becoming innovative in their theft methodologies. It is becoming extremely challenging to detect and isolate fraudulent cases, especially those committed in real-time.</p><p><strong>Fraud Rate VS Decline Rate</strong></p><p>It is pertinent for financial institutions to identify and isolate fraudulent cases from a plethora of regular transactions i.e. accurately capture the fraud rate (number of fraudulent attempts/total attempts in a given period). One way to achieve this is through anomaly detection i.e. to check if an incoming transaction by an individual fits the person’s profile and prior behavior. If it does not, it can be flagged as a potentially fraudulent activity. However, it is possible that the flagged transaction is not fraudulent and is falsely declined. False declines can prove to be costly due to lost revenue, increased operational effort in non-fraudulent cases, and loss in customer satisfaction/experience. Currently, the industry false positive rate is around 20 to 1 i.e. for every 20 fraud alerts, one is a correctly identified fraud attempt. Hence, it is important for any financial institution to maintain a healthy balance between fraud and decline rates.</p><p><strong>Future of Fraud</strong></p><p>New-age innovations such as Blockchain technology, a decentralized ledger system, are trusted immensely for their immutability and security provisions. However, cryptocurrency hacks and thefts in 2020 alone involved $513 Million worth of bitcoin and other cryptocurrencies.</p><p>With the world becoming increasingly digital are we becoming more vulnerable to crime? What is the target age group and the different methods used to conduct fraud? Can data science combat financial crime and save the day? Can machine learning and rule-based writing predict and prevent fraud? Can the evolution of data science outsmart the evolution of fraud?</p><p>To address some of these intriguing questions and to help us explore the world of Fraud Analytics, as part of our DataBasic episode for 2022, we have <strong>Humera Yakub</strong>, Head of Fraud at Pay.UK — one of the UK’s foremost retail interbank payment systems. Stay tuned for this gripping and engaging episode as we unravel the Fraud Analytics industry with Humera, as she shares her experience and industry expertise.</p><p>Humera Yakub <a href="https://uk.linkedin.com/in/humera-yakub-52069742">Linkedin account</a>, Pay.UK <a href="https://www.wearepay.uk/">website</a><br><a href="https://www.linktr.ee/wdss">WDSS relevant links</a> including the podcast, YouTube, TikTok and social media (LinkedIn, Instagram, Twitter)</p><p><em>This story was originally written by </em><a href="https://www.linkedin.com/in/ria-govila/"><em>Ria Govila</em></a><em>. The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f0be078c5ab0" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Visualising the Intersection of Disease and the Human Genome]]></title>
            <link>https://medium.com/geekculture/visualising-the-intersection-of-disease-and-the-human-genome-a11f96f85ddb?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/a11f96f85ddb</guid>
            <category><![CDATA[chemistry]]></category>
            <category><![CDATA[wd]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[visualization]]></category>
            <category><![CDATA[data-science]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Tue, 26 Oct 2021 07:47:48 GMT</pubDate>
            <atom:updated>2021-11-23T07:41:48.582Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*eG0O3ZcSFK1XMEkM.jpg" /></figure><p><strong>Try it for Yourself</strong><br>This article is the write-up for an interactive web application, allowing you to visualise CpG islands and SnP sites for different diseases. You can acces the app <a href="https://cloud.wdss.io/genome">here</a> to test it on diseases of your choosing.</p><h3>Introduction</h3><p>Beginning in the early ’90s, the Human Genome Project (HGP) was an international research collaboration that attempted to sequence and map all of the genes for Homo sapiens. The HGP was completed in 2003 and paved way for significant developments to be made in drug discovery.</p><p>In 2000, the University of California Santa Cruz (UCSC) and collaborators of the HGP started work on creating a free public access human genome assembly. To this day, it remains open access and has many features which can be used to relate information from the human genome to disease.</p><p>It was found that single nucleotide polymorphisms (SnPs) and CpG islands are commonly located around diseases. An SnP is the most common type of genetic variation between people. They occur, on average, once in every 1000 nucleotides (roughly 4 million SnPs in total). As an example, an SnP may replace the nucleotide cytosine © with the nucleotide thymine (T) in a certain stretch of DNA. CpG islands are important because they represent areas of the genome that have, for some reason, been protected from the mutating properties of methylation through evolutionary time (which tends to change the G in CpG pairs to an A). Often, they point to the presence of an important piece of intergenic DNA, such as that found in the promoter regions of genes where transcription factors bind. In cancers, loss of expression of genes occurs about 10 times more frequently by hypermethylation of promoter CpG islands than by mutations.</p><h3>Building a Visualisation</h3><p>The National Center for Biotechnology Information (NCBI) contains information on where many diseases can be found within the human genome. These positions were collated onto a spreadsheet, along with a link to more information on the relevant disease.</p><figure><img alt="Screenshot of a spreadsheet with data of diseases found in the human genome" src="https://cdn-images-1.medium.com/max/602/1*979KLObMaunL3S6k6zuIBw.png" /></figure><p>From the locations of the diseases obtained from the NCBI, information on SnP sites and CpG islands was collected using the API on the UCSC genome browser using the SnP and CpG island tracks.</p><figure><img alt="Screenshot of what the API used looked like" src="https://cdn-images-1.medium.com/max/602/1*ujavluMRZ-EFU_24ic5TLQ.png" /></figure><p>GViz, a Bioconductor package for R, was used to then display the genome location, producing a visual representation graphically of the SnP sites and CpG islands.</p><figure><img alt="Two horizontal rectangles, the upper one is blue and labelled “SNPs”, the lower one is orange-pink and labelled “CpG Islands”. The blue one has many vertical, think lines, the other one has two green rectanges" src="https://cdn-images-1.medium.com/max/602/1*jjMU6pFiCr1ATxpvpEEUkw.png" /></figure><p>The lines on the SnP track show sites that have a minor allele frequency of at least 1% and are mapped to a single location in the reference genome assembly. The highlighted areas on the CpG island are where there is a GC content of higher than 50% for greater than 200bp. The red line on the chromosome highlights the area in which the disease is located, and what is able to be viewed on the tracks is data within the highlighted region.</p><p>One significant challenge faced was that, due to the vast amount of data needed to produce the genome plots, once a disease had been selected, it took a considerable amount of time for the API to collect the data. This meant it was less than ideal due to users not wanting to wait a lengthy period of time. The way this was overcome was by pre-generating the plots for each disease in the spread sheet, meaning that the plots were shown instantaneously.</p><p>Future improvements to the programme could include but not limited to caching the data collected rather than having pre-generated plots. This would work well with another improvement which was considered whereby the disease spreadsheet was connected to the NCBI database which contained every single disease known with the possibility of more disease identification as well. This would mean the programme could keep up-to date with new diseases entering the database and would not need manually updating.</p><p><em>This post was originally written by </em><a href="https://www.linkedin.com/in/joshua-magiera-55b362174/">Joshua Magiera</a><em>. Alternative text for images provided by </em><a href="https://www.linkedin.com/in/dominika-dara%C5%BC-b13335162/"><em>Dominika Daraż</em></a><em>.</em></p><p><em>The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a11f96f85ddb" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geekculture/visualising-the-intersection-of-disease-and-the-human-genome-a11f96f85ddb">Visualising the Intersection of Disease and the Human Genome</a> was originally published in <a href="https://medium.com/geekculture">Geek Culture</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Higher or Lower: Reinventing a Classic Card Game]]></title>
            <link>https://medium.com/geekculture/higher-or-lower-reinventing-a-classic-card-game-d35d41d212fd?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/d35d41d212fd</guid>
            <category><![CDATA[shiny]]></category>
            <category><![CDATA[api]]></category>
            <category><![CDATA[games]]></category>
            <category><![CDATA[web-scraping]]></category>
            <category><![CDATA[wd]]></category>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Mon, 18 Oct 2021 12:03:14 GMT</pubDate>
            <atom:updated>2021-10-25T13:02:20.827Z</atom:updated>
            <content:encoded><![CDATA[<blockquote>This post is the corresponding write-up for a Warwick Data Science Society (WDSS) project in which a small team of society members collaborated to produce a web-toy that plays a game of Higher or Lower using the Twitter follower counts of celebrities. You can play this game at <a href="https://app.wdss.io/higher-or-lower/"><em>this link</em></a>.</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n26_4GzvC2ySG3_WWIsvHw.png" /><figcaption>credits: Ron Maijen</figcaption></figure><h3>Motivation</h3><p>Sometimes, simplicity is beautiful. Higher or Lower is a game embodying this philosophy. Played solo with a standard deck of cards, play consists of revealing these one at a time after first guessing whether the next card will have a higher or lower value. In recent years, this game has been re-envisioned as a <a href="http://www.higherlowergame.com/">popular web toy</a>, in which card values are replaced by the number of global monthly Google searches for various topics. Not wishing to limit ourselves to search results, we decided to implement our own online version of the classic game based on the follower counts of Twitter celebrities. The final app can be found at the link above, and we will spend the rest of this post looking into the techniques behind our approach as well as reviewing the lessons this project can teach us about collaborative data science at WDSS.</p><p>For our purposes, this project is an ideal medium to practise web scraping and creating sharable products for others to enjoy. Web scraping is a way of extracting data from websites, leveraging automation to gather information efficiently and without unnecessary repetition. In all, three members of WDSS worked on this project, combining their specific skills to develop the final product. <a href="https://www.linkedin.com/in/tim-hargreaves/">Tim Hargreaves</a>, focused on the backbone of the app, <a href="https://www.linkedin.com/in/mhbardsley/">Matthew Bardsley</a>, the visuals of the game, and I (<a href="https://www.linkedin.com/in/parthdevalia/">Parth Devalia</a>) have responsibility for the communication of results.</p><h3>Implementation</h3><p><em>The source code for the web app and scraping scripts have been open-sourced in </em><a href="https://github.com/warwickdatascience/higher-or-lower">this repository</a><em>.</em></p><p>With 330 million monthly users, Twitter has become an indispensable medium for instant news and opinions from politicians, brands, and of course, celebrities. Manually defining celebrityhood and iterating through matching accounts would be a difficult task, so we decided to look at what existing resources we could take advantage of. We eventually settled on a website called <a href="http://profilerehab.com/twitter-help/celebrity_twitter_list">ProfileRehab</a>. On this site, links to celebrities’ Twitter accounts are sorted into categories. By scraping this information we were able to collect Twitter profile URLs for around five hundred celebrities, matched to their names. We then interfaced with the Twitter API to read their respective follower counts and download their profile pictures. This entire scraping process was performed using Python, to take advantage of the rich ecosystem of web scraping packages the language has.</p><p>You may well be asking, “What is an API?”, and so I will take a moment to introduce this term. Application Programming Interfaces (APIs) simply allow applications to communicate with each other and are responsible for much of the connectivity we rely upon. They act as messengers, taking your request, telling the target application what you want to do, and then returning the response. Rather than accessing the application server directly, APIs offer us a dedicated access point, improving security and reliability. A common analogy is that of a restaurant — the API is the waiter, the interface between your table and the kitchen, taking your request and returning the response (the food).</p><p>With regard to our project, we decided to access the data we wanted through an API as Twitter have made recent obfuscations to their website code to make direct scraping more difficult. Use of Twitter’s API, as is often the case, is subject to terms and conditions regarding the usage of the data obtained. Additionally, the company have implemented a rate limit; that is, a maximum number of requests they can handle in a given timespan (just like with a restaurant waiter). Careful examination of these limitations needs to be considered when using an API, but fortunately we found them to be adequate for our needs.</p><p>The application is made using Shiny, a package for the R programming language that allows you to build interactive web applications. The framework allows for the development of powerful and flexible web applications with no need for HTML, CSS or JavaScript knowledge. For this reason, Shiny stands out for its unrivalled speed of development.</p><p>Despite its benefits, the raw product of Shiny development is not always the prettiest and can lack strong mobile support. To overcome this, Matthew implemented additional styling using CSS to improve the aesthetics of the final application.</p><h3>Takeaways</h3><p>This project allowed us three WDSS members to work together in creating something that we wouldn’t have done individually. Further, if not for the society, we would not have had the opportunity to work together. This highlights the role of WDSS, bringing people from different backgrounds together to solve challenging problems.</p><p>Projects are extremely important in growing your skills and are critical for developing a strong portfolio. Through collaboration, we can see problems from new perspectives, build our professional networks, and gain experience of working in a team. This is in comparison to university work, that is often done alone without using real world data, and usually without a solid final product.</p><p>This project leverages infrastructure offered by WDSS, such as our blogging platform and Shiny server. For this reason, alongside the support<br>offered by experienced students, working with WDSS to complete research makes it easier to get projects off the ground and showcase what you can do.</p><p>Thank you for reading and we hope you enjoy playing <a href="https://app.wdss.io/higher-or-lower/"><em>our implementation</em></a><em> </em>of Higher or Lower.</p><p><em>This post was originally written by </em><a href="https://www.linkedin.com/in/parthdevalia/"><em>Parth Devalia</em></a><em>. Alternative text for images provided by Dominika Daraż.</em></p><p><em>The article is licensed under </em><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/"><em>CC BY-NC-SA 4.0</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d35d41d212fd" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geekculture/higher-or-lower-reinventing-a-classic-card-game-d35d41d212fd">Higher or Lower: Reinventing a Classic Card Game</a> was originally published in <a href="https://medium.com/geekculture">Geek Culture</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[A Data-Driven Dive into UK Party Conference Leaders’ Speeches]]></title>
            <link>https://medium.com/geekculture/a-data-driven-dive-into-uk-party-conference-leaders-speeches-211afe3b1bd9?source=rss-9d4df5140985------2</link>
            <guid isPermaLink="false">https://medium.com/p/211afe3b1bd9</guid>
            <dc:creator><![CDATA[Warwick Data Science Society]]></dc:creator>
            <pubDate>Thu, 23 Sep 2021 06:13:00 GMT</pubDate>
            <atom:updated>2021-10-18T11:02:24.773Z</atom:updated>
            <content:encoded><![CDATA[<p>Party conferences are a mainstay in British politics whereby politicians, party members and affiliated people descend on a chosen city in order to set the party agenda, raise funds and attempt to get a soundbite into the mainstream media. The hallmark of these conferences are the Leaders’ speeches, where the current head of the party aims to appeal to their party base or even attract some new voters through media coverage.</p><h3>Data Background</h3><p>This analysis would not have been possible without the transcripts provided by <a href="http://www.britishpoliticalspeech.org/speech-archive.htm">British Political Speech</a>. They describe themselves as “an online archive of British political speech and a place for the discussion, analysis, and critical appreciation of political rhetoric” and produce speeches dating back to 1895.</p><p>For my study, I aim to observe the nuances of party conference leadership speeches from 2010 to 2018. These dates were chosen as they coincide with a change in the British political landscape, following the 2010 election whilst still providing us with enough data to conduct meaningful analysis. For this study, I will only observe the three ‘mainstay’ political parties: the Conservatives, the Labour Party and the Liberal Democrats.</p><p>Upon importing and tidying the data, we can observe the 5 most used words within the speeches.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/261/1*LMP6kYW10X-xQsXMhIjHww.png" /></figure><p>There are no surprises here. In fact, the top 5 most used words here are from the top 6 most used words in the English language according to the <a href="https://enacademic.com/dic.nsf/enwiki/2822326">Oxford English Corpus</a>, a text corpus comprising over 2 billion words.</p><p>Carrying on our analysis with these common words would create a dull analysis, so to counteract this, we will temporarily remove them. We do this using the tidytext package in R, which contains a comprehensive list of <a href="https://rdrr.io/cran/tidytext/man/stop_words.html">stop words</a>. These are common words in the English language which would add nothing to certain parts of our analysis if they were to be included. A separate dataframe was created to store the non-stopwords which totalled 56,989 words, meaning that 105,883 words were removed.</p><p><em>It is worth noting, that there is no definitive list of stopwords. Instead, different words would be considered stopwords depending on the context, although we have just used a generic list for simplicity. We will see later in the post, a more nuanced way of handling uninformative words called TF-IDF.</em></p><p>We can now observe the most used 5 non-stopwords.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/341/1*P1Mu_K2xNPDUEeGUllB9RA.png" /></figure><p>This is more like what we would have expected the vocabulary of a Leader’s speech to look like.</p><p>We can go further and visualise the set of each party’s 100 most commonly used non-stopwords through wordclouds. This is done below in each party’s traditional colour. (Blue for Conservative, Red for Labour, Yellow for Liberal Democrat).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tSxQTGmby97r42f4xC42Uw.png" /></figure><p>We can see that the words identified to be most common before appear most often in these wordclouds too (denoted by their large size). The only visible differences are the party’s names, particularly visible for both Labour and the Liberal Democrats. Here we see the obvious flaws in word clouds, they barely allow us to observe any differences between the parties and provide no numerical insight. We will aim to address this weakness later with different methods.</p><p>Before we dive into some more detailed text analysis, we could have a quick exploration of the word count for each Leader’s speech.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*M-FvLnHYmCdTGqy9fM1gUw.png" /></figure><p>From this, we can see that Ed Miliband can be quite the rambler at times.</p><h3>Text Analysis</h3><h3>Analysing Sentiment</h3><p>Basic counts and summaries are great, but with modern data science techniques, we can go much further. For example, we can infer the sentiment (loosely, how positive or negative in tone) each speech is.</p><p>We do this by referencing the contents of each speech against the AFINN lexicon, created by Finn Arup Neilson. This lexicon assigns an integer value from -5 to 5 to a vast number English words with negative numbers indicating negative sentiment and positive numbers indicating positive sentiment. Here we list a random word for each sentiment value.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/367/1*_PPl9LIaOvhwfEbQHDfBOg.png" /></figure><p>We can then take an average of the sentiments over all word in each speech and visualise it to see the trend of speech sentiment over time. This is conducted on the dataset with stopwords included, otherwise it could distort the sentiment (though note that most stopwords have a neutral sentiment).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*f36vtuRoVGjyhkYounxzvA.png" /></figure><p>As we can see, the speeches are overwhelmingly positive, with the only negative score being Jeremy Corbyn’s 2018 speech to the Labour Party conference. Other notable values include David Cameron’s consistency between 2010 and 2015 for the Conservative Party and the significant jump in positivity when Theresa May took over the Conservative Leadership in 2016.</p><h3>Term Frequency and Zipf’s Law</h3><p>We have seen that raw word counts on their own aren’t particularly useful. One flaw of many is that longer texts will naturally have higher word counts for all words. Instead, a more useful metric is how often a certain word (also called a term) appears as a proportion of all words. This is known as <em>term frequency</em> and defined as</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/706/1*Sak0qGaHxyM_oM3AxIvadw.png" /></figure><p>So that we can compare across parties, we will look at term frequencies as a proportion of the occurrences of each term in all speeches by the party the term came from. We start by looking at the distribution of term frequencies for each party.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CKTT2NijELkE5gmKIRUlqw.png" /></figure><p><em>It should be noted that there are longer tails for these graphs that have not been shown. Instead, we have truncated the the really popular words such as ‘the’, ‘and’ and ‘to’ to make it easier to see the main body of the plot.</em></p><p>The plots all display a similar distribution for each party with many ‘rare’ words and fewer popular words.</p><p>It turns out that these long-tailed distributions are common in almost every occurrence of natural language. In fact, George Zipf, a 20th century American linguist created <em>Zipf’s law</em>. This formalises the above observation, stating that the frequency that a word appears in a text is inversely proportional to its rank.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/365/1*Fu214Vs8goY3MR5JO-9C_A.png" /></figure><p>Put simply, the most frequent word will appear at twice the rate of the second most frequent word and at three times that of the third most frequent word.</p><p>Zipf’s law is largely accurate for many natural languages, including English (though as always, there are exceptions). For example, in the Brown Corpus of American English text, which contains slightly over 1 million words: ‘the’ appears the most times at ~70000 times, ‘of’ the second most at ~36000 times and ‘and’ the third most at ~29000, as would be roughly expected according to Zipf’s law.</p><p>We can attempt to visualise this law for our own text by plotting rank on the x-axis and term frequency on the y-axis, both on log scales.</p><p><strong>Why the logs?</strong><br>By definition, if two values <em>x</em> and <em>y</em> are inversely proportional, then we can find a constant <em>a</em> such that <em>y</em>=<em>a</em>/<em>x. </em>Taking logarithms and rearranging gives log(<em>y</em>) = log(<em>a</em>) - log(<em>x</em>). In other words, <em>x</em> and <em>y</em> are inversely proportional if and only if their logarithms lie on a straight line with a negative slope.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TAKxhz9sS2FfsZOGvKbjCQ.png" /></figure><p>We can see that all three parties have similar text structures largely obey Zipf’s Law. That said, we can see that our curve deviates from a straight line at the lower rank tail, suggesting that the most popular words in the speeches are being used more often than they would in a natural language. Additionally, we would expect a slope of approximately −1; by fitting a linear model (shown in grey), we obtain a coefficient which is close to this value.</p><h3>TF-IDF Analysis</h3><p>We’ve seen that we can use a list of stop words to filter our data to leave only meaningful words. However, this list is fixed and not linked to our data in any way. We’ve already seen that ‘people’ is used very commonly in our speeches and so doesn’t provide that meaningful of an insight to us. Could construct a value that helped us to see the relative frequency of a term among our speeches, in order to see how important a word is to a specific speech compared to the others?</p><p>We can indeed. In fact the work has already been done for us in the form of a value value called the TF-IDF. It is calculated by multiplying the term frequency (TF) from earlier by a new value called the inverse document frequency (IDF).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*qTiqPuVQJ3QI3bDsQmF_Sw.png" /></figure><p>Loosely speaking, TF-IDF asks two questions:</p><ul><li>Is the specific term used more than expected in a given speech?</li><li>Is it rare for a speech to contain a the specific term?<br>If the answer to both of these questions is “yes”, then TF-IDF is large, an the term is considered to be relatively important.</li></ul><p>We can calculate the TF-IDF score for each word in each speech before using these to find the most ‘important’ word in each speech.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/931/1*Ag8hflD0S5s9q8Gd9zHvyQ.png" /></figure><p>We obtain some interesting results here. For example, it’s clear to see the Liberal Democrats’ sharp pivot to a anti-Brexit strategy following the referendum of 2016. Or how in 2014, the Conservatives announced their plan to increase the 40% income tax threshold (known as the 40p tax rate). We also see Jeremy Corbyn’s plan for a ‘kinder’ politics emerge in his first conference speech as leader in 2015, alongside the Grenfell Tower disaster mentioned in 2017.</p><p>The names such as ‘Harry’ and ‘Maurice’ that crop up here were intriguing at first glance. These were in reference to ‘Harry Beckough’ and ‘Maurice Reeves’, who were, respectively, a longstanding Conservative member and a furniture shop owner whose premises was burned to the ground during the London riots.</p><h3>Complexity Consideration</h3><p>There are a number of ways that we can observe the complexity of a text, or in this case a speech. For this piece we choose the average number of syllables per word. The data for this was taken from the quanteda package and we can visualise the results as so.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZTe3bovWSpvwRNt-OUdCoQ.png" /></figure><p>We can see profound variations between different leaders in this plot. Ed Miliband and David Cameron, the leaders of Labour and the Conservatives who gave speeches between 2010–2014 and 2010–2015, respectively, had a much lower complexity than the most recent leaders such as Jeremy Corbyn of Labour and Vince Cable of the Liberal Democrats, who together count for the top 6 most complex speeches.</p><p><em>We used mean syllable count in this piece as a metric for speech complexity as it is simple for a layperson to understand. That said, there are many more subtle and interesting complexity measures available through </em><em>quanteda, such as the Flesch–Kincaid readability score.</em></p><h3>A Different Way of Deciding Elections?</h3><p>The <a href="https://www.electoral-reform.org.uk/voting-systems/types-of-voting-system/first-past-the-post/">First Past the Post system</a> is often bemoaned in the UK as being unsuitable for modern-day politics. Now, it is not my place to comment on this system but if pushed to suggest another system, the aforementioned Quanteda package does give us another option…</p><p>We can calculate the mean scrabble score per word of the leader’s party conference speech each year! First let us observe the most impressive efforts that the politicians managed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ePj71SrKy51Q3PtCNCF7FQ.png" /></figure><p>Theresa May managed an incredible score of 37 in 2018 with ‘Czechoslovakia’ but this would of course be disqualified for being a proper noun. As a result, Nick Clegg holds the record with 30 points scored for ‘unequivocally’! We can also visualise the mean score per word as follows.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tbJ7vExa7b4qxlQHZGHGiw.png" /></figure><p>As we can see, the Conservatives, who have been in power since 2010 would not win a single year should it be decided by Scrabble. In fact, the Liberal Democrats would win 6 out of the 9 years we have studied with Labour, under Jeremy Corbyn, taking the other 3 years — I’m sure both parties would be happy with that in hindsight!</p><p>Just in case anyone was under any illusion, of course mean Scrabble score is a poor way of deciding elections and I am not endorsing its use — at the very least, a game of Pictionary would be more appropriate…</p><h3>Takeaways</h3><p>With that, I end my brief incursion into British political speeches. While I have barely begun to scratch the surface of Natural Language Processing (NLP) methods, I hope that I have shown the power of the ways that these techniques can be used to summarise large pieces of text through sentiment, TF-IDF and syllable complexity.</p><p>I had minimal experience with NLP methods upon embarking on this project and would like to thank WDSS (in particular, Janique Krasnowska) for supporting me until completion. I feel like I’ve learned a lot and certainly furthered my knowledge and experience. I would suggest anyone who would like to conduct some data science studies outside their degree looks out for research opportunites with WDSS and seizes them with both hands — I will certainly be looking out for more chances!</p><h3>Appendix: Summary Table of All Speech Metrics</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*tSTmdX_7l7_H6zbYCvTFDA.png" /><figcaption>Part 1</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*MYeWM0QmFZuafb_03OT2nQ.png" /><figcaption>Part 2</figcaption></figure><p>This post was written by <a href="https://www.linkedin.com/in/ewan-yeaxlee-7b13a9181/">Ewan Yeaxlee</a>. Alternative image text by Dominika Daraz. Article lincensed under <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/">CC BY-NC-SA 4.0</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=211afe3b1bd9" width="1" height="1" alt=""><hr><p><a href="https://medium.com/geekculture/a-data-driven-dive-into-uk-party-conference-leaders-speeches-211afe3b1bd9">A Data-Driven Dive into UK Party Conference Leaders’ Speeches</a> was originally published in <a href="https://medium.com/geekculture">Geek Culture</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>